summaryrefslogtreecommitdiff
path: root/home-configuration.scm
diff options
context:
space:
mode:
Diffstat (limited to 'home-configuration.scm')
-rw-r--r--home-configuration.scm231
1 files changed, 231 insertions, 0 deletions
diff --git a/home-configuration.scm b/home-configuration.scm
new file mode 100644
index 00000000..bd82d32b
--- /dev/null
+++ b/home-configuration.scm
@@ -0,0 +1,231 @@
+;; This "home-environment" file can be passed to 'guix home reconfigure'
+;; to reproduce the content of your profile. This is "symbolic": it only
+;; specifies package names. To reproduce the exact same profile, you also
+;; need to capture the channels being used, as returned by "guix describe".
+;; See the "Replicating Guix" section in the manual.
+
+;; See also, for some tips:
+;; https://github.com/alezost/shepherd-config/blob/master/init.scm
+
+;; TODO: Move from Xorg/i3 to Wayland/sway.
+;; TODO: Theme stuff using https://github.com/catppuccin -- needs
+;; integration into config files. Can I do something fancy using
+;; `computed-file' to combine catppuccin-provided configs with my own,
+;; e.g. for kitty and rofi?
+;; Integrate upstream (ctp) configs into ~/guix-home using git submodules?
+;; https://github.com/catppuccin/rofi
+;; https://github.com/catppuccin/obs
+;; https://github.com/catppuccin/waybar
+;; https://github.com/catppuccin/insomnia
+;; https://github.com/catppuccin/kitty
+
+(use-modules (gnu home)
+ (gnu home services)
+ (gnu home services desktop)
+ (gnu home services shells)
+ (gnu home services shepherd)
+ (gnu packages)
+ (gnu services)
+ (gnu services shepherd)
+ (guix gexp))
+
+(define* (package-binary specification #:optional (binary specification))
+ "Get the path of BINARY inside the package referred to by SPECIFICATION."
+ (file-append (specification->package specification) "/bin/" binary))
+
+(home-environment
+ ;; Below is the list of packages that will show up in your
+ ;; Home profile, under ~/.guix-home/profile.
+ (packages
+ (cons*
+ ;; Install only bind-utils like dig, not the full suite.
+ (list (specification->package "bind") "utils")
+ (specifications->packages
+ '(;; CLI tools
+ "dos2unix" "dropbear" "emacs" "emacs-use-package" "file" "git"
+ "imagemagick" "lesspipe" "nvme-cli" "openssh" "powertop"
+ "python" "rsync" "sbcl" "smartmontools" "source-highlight" "tk"
+ "tlp" "tmux" "tree" "unzip" "zip"
+ ;; Shell
+ "zsh" "zsh-autosuggestions" "zsh-syntax-highlighting" "zsh-autopair"
+ ;; i3 and Xorg. i3 itself must be installed system-wide for gdm to pick it up.
+ ;; acpilight is a drop-in xbacklight replacement, as xbacklight doesn't work on my system.
+ "acpilight" "i3status" "dunst" "rofi" "rofi-pass" "hsetroot"
+ "xdot" "xclip" "xdotool" "xdpyinfo" "xev" "xfd" "xfontsel"
+ "xinput" "xkill" "xprop" "xrandr" "xrdb" "xsel" "xwininfo"
+ ;; GUI programs
+ "arandr" "gnupg" "pinentry-rofi" "icecat" "kitty" "nheko"
+ "neomutt" "password-store"
+ "gnome-keyring" ; nheko needs gnome-keyring to store secrets over dbus (kwallet doesn't do dbus).
+ "geoclue" ; for redshift
+ ;; Fonts
+ "font-libertinus"
+ "font-inconsolata" "font-fira-sans" "font-fira-code"
+ ;; Monospace fonts to try out!
+ "font-mononoki" ; https://madmalik.github.io/mononoki/
+ "font-victor-mono" ; https://rubjo.github.io/victor-mono/
+ ;; Theming
+ "orchis-theme" "hicolor-icon-theme"))))
+
+ ;; Below is the list of Home services. To search for available
+ ;; services, run 'guix home search KEYWORD' in a terminal.
+ (services
+ (list
+ ;; TODO: xrdb -merge ~/.Xdefaults && xrdb -merge ~/.Xresources
+
+ (service home-redshift-service-type
+ (home-redshift-configuration
+ ;; See info '(guix)Desktop Home Services'.
+ (location-provider 'manual)
+ ;; Approximate location
+ (latitude 46.0)
+ (longitude 6.0)
+ ;; (location-provider 'geoclue2) ; currently waits forever for a location -- not sure why geoclue doesn't work
+ ;; (daytime-temperature 6500) ; default 6500
+ ;; (nighttime-temperature 4500) ; default 4500
+ (daytime-brightness 1.0)
+ (nighttime-brightness 0.7)
+ (extra-content "fade=0"))) ; with fade=1, restarting redshift causes flickering for a few secs
+
+ (simple-service
+ 'user-services home-shepherd-service-type
+ (list
+ (shepherd-service
+ (documentation "User Emacs daemon; connect using emacsclient.")
+ (provision '(emacs))
+ (start #~(make-forkexec-constructor
+ (list #$(package-binary "emacs") "--fg-daemon")))
+ (stop #~(make-kill-destructor)))
+ (shepherd-service
+ (documentation "User GPG agent daemon.")
+ (provision '(gpg-agent))
+ (start #~(lambda _
+ (invoke #$(package-binary "gnupg" "gpg-agent")
+ "--daemon" "--no-detach")))
+ (stop #~(lambda _
+ (invoke "gpg-connect-agent" "killagent" "/bye"))))))
+
+ (service home-xdg-configuration-files-service-type
+ `(;; All alibuild needs is an empty file.
+ ("alibuild/disable-analytics" ,(plain-file "alibuild-disable-analytics" ""))
+ ("git/config" ,(local-file "gitconfig"))
+ ("gtk-3.0/settings.ini" ,(local-file "gtk3.ini"))
+ ("htop/htoprc" ,(local-file "htoprc"))
+ ("i3/config" ,(local-file "i3.conf"))
+ ("i3status/config" ,(local-file "i3status.conf"))
+ ("kitty/kitty.conf"
+ ,(text-file* "kitty.conf"
+ (local-file "kitty.conf")
+ (local-file "catppuccin/kitty/mocha.conf")))
+ ("lesskey" ,(local-file "lesskey"))))
+
+ (service home-files-service-type
+ `(;; https://sw.kovidgoyal.net/kitty/kittens/diff/
+ (".local/bin/kdiff"
+ ,(program-file "kdiff" #~(apply execl #$(package-binary "kitty")
+ "+kitten" "diff" (cdr (command-line)))))
+ ;; GnuPG config files must be in ~/.local/share/gnupg, not ~/.config,
+ ;; so we can't use `home-xdg-configuration-files-service-type'.
+ (".local/share/gnupg/gpg.conf" ,(local-file "gpg.conf"))
+ (".local/share/gnupg/gpg-agent.conf"
+ ;; We need to use #$output for `computed-file' to work.
+ ;; Of course this isn't documented anywhere!
+ ,(computed-file "gpg-agent.conf" #~(call-with-output-file #$output
+ (lambda (port)
+ (format port "\
+pinentry-program ~a
+# Needed if spawning lots of parallel gpg --decrypt processes. https://dev.gnupg.org/T3530
+auto-expand-secmem
+" #$(package-binary "pinentry-rofi"))))))))
+
+ (service home-zsh-service-type
+ (home-zsh-configuration
+ (zshrc (list (local-file "zshrc")
+ (local-file "prompt.zsh")))))
+
+ (simple-service
+ 'env-vars home-environment-variables-service-type
+ ;; The `home-xdg-base-directories' service (enabled by default) sets $XDG_* variables for us.
+ `(("GUIX_PACKAGE_PATH" . "$HOME/packages/guix")
+ ;; ("GUILE_LOAD_PATH" .
+ ;; "$XDG_CONFIG_HOME/guix/current/share/guile/site/3.0${GUILE_LOAD_PATH:+:}$GUILE_LOAD_PATH")
+ ;; ("GUILE_LOAD_COMPILED_PATH" .
+ ;; ,(string-append
+ ;; "$XDG_CONFIG_HOME/guix/current/lib/guile/3.0/site-ccache:"
+ ;; "$XDG_CONFIG_HOME/guix/current/share/guile/site/3.0"
+ ;; "${GUILE_LOAD_COMPILED_PATH:+:}$GUILE_LOAD_COMPILED_PATH"))
+
+ ;; Auto-compilation is annoying and creates a bunch of files that are never cleaned up.
+ ("GUILE_AUTO_COMPILE" . "0")
+
+ ("EDITOR" . "emacsclient -qc")
+ ("TERMINAL" . "kitty")
+ ("PAGER" . "less")
+ ;; Guix force-overrides $LESS by default, so force-force it to do what I want instead.
+ ("GUIX_PAGER" . "env -u LESS less --ignore-case --quit-if-one-screen --RAW-CONTROL-CHARS --LONG-PROMPT --chop-long-lines")
+
+ ;; Shell history -- primarily for zsh, but Emacs' eshell uses this too
+ ("HISTSIZE" . "10000000")
+
+ ("NVIM_TUI_ENABLE_CURSOR_SHAPE" . "1")
+ ("LEDGER_FILE" . "$HOME/sync/ledger/ledger.journal")
+ ("GTAGSLABEL" . "pygments")
+
+ ;; ("GTK3_MODULES" . "$GTK3_MODULES${GTK3_MODULES:+:}libplotinus")
+
+ ;; Disable at-spi-dbus-launcher accessibility service.
+ ("NO_AT_BRIDGE" . "1")
+
+ ;; For appmenu/global menu in Java applications.
+ ;; https://gitlab.com/vala-panel-project/vala-panel-appmenu#experimental-features
+ ("JAYATANA_FORCE" . "1")
+ ;; Appmenu; GTK look-and-feel; XDG compliance in Java
+ ;; https://wiki.manjaro.org/index.php?title=Set_all_Java_apps_to_use_GTK%2B_font_%26_theme_settings
+ ;; TODO: install jayatana and add "-javaagent:/usr/share/java/jayatanaag.jar" option
+ ("_JAVA_OPTIONS" .
+ ,(string-append
+ "$_JAVA_OPTIONS${_JAVA_OPTIONS:+ }-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true "
+ "-Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel "
+ "-Dswing.crossplatformlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel "
+ "-Djava.util.prefs.userRoot=$XDG_CONFIG_HOME/java"))
+
+ ;; For programs from kde-servicemenus-pdf.
+ ("LANGUAGE" . "en")
+
+ ;; Smooth trackpad scrolling in Firefox.
+ ;; https://wiki.archlinux.org/index.php/Firefox/Tweaks#Pixel-perfect_trackpad_scrolling
+ ("MOZ_USE_XINPUT2" . "1")
+
+ ;; XDG basedir spec compliance for various programs
+ ;; See: https://wiki.archlinux.org/index.php/XDG_Base_Directory for a list of programs
+ ("ANDROID_EMULATOR_HOME" . "$XDG_DATA_HOME/android-emulator")
+ ("ASPELL_CONF" . "per-conf $XDG_CONFIG_HOME/aspell/aspell.conf; home-dir $XDG_DATA_HOME/aspell")
+ ("BUP_DIR" . "$XDG_DATA_HOME/bup")
+ ("CARGO_HOME" . "$XDG_DATA_HOME/cargo")
+ ("DSHGROUP_PATH" . "$XDG_DATA_HOME/dsh/group:/etc/dsh/group")
+ ("ELECTRUMDIR" . "$XDG_DATA_HOME/electrum")
+ ("FG_HOME" . "$XDG_DATA_HOME/fgfs")
+ ("GETIPLAYERUSERPREFS" . "$XDG_DATA_HOME/get_iplayer")
+ ("GNUPGHOME" . "$XDG_DATA_HOME/gnupg")
+ ("GTK2_RC_FILES" . "$XDG_CONFIG_HOME/gtk-2.0/gtkrc")
+ ("ICEAUTHORITY" . "$XDG_CACHE_HOME/ICEauthority")
+ ("INPUTRC" . "$XDG_CONFIG_HOME/readline/inputrc")
+ ("IPYTHONDIR" . "$XDG_CONFIG_HOME/ipython")
+ ("JUPYTER_CONFIG_DIR" . "$XDG_CONFIG_HOME/jupyter")
+ ("NPM_CONFIG_USERCONFIG" . "$XDG_CONFIG_HOME/npm/npmrc")
+ ("PASSWORD_STORE_DIR" . "$XDG_DATA_HOME/password-store")
+ ("PLTUSERHOME" . "$XDG_DATA_HOME/racket")
+ ("PYLINTHOME" . "$XDG_CACHE_HOME/pylint")
+ ("PYLINTRC" . "$XDG_CONFIG_HOME/pylint/pylintrc")
+ ("RECOLL_CONFDIR" . "$XDG_CONFIG_HOME/recoll")
+ ("RLWRAP_HOME" . "$XDG_DATA_HOME/rlwrap")
+ ("STACK_ROOT" . "$XDG_DATA_HOME/stack")
+ ("TMUX_TMPDIR" . "$XDG_RUNTIME_DIR")
+ ("WEECHAT_HOME" . "$XDG_CONFIG_HOME/weechat")
+ ("XCOMPOSECACHE" . "$XDG_CACHE_HOME/X11/XCompose")
+ ("XCOMPOSEFILE" . "$XDG_CONFIG_HOME/X11/XCompose")
+ ("ZDOTDIR" . "$XDG_CONFIG_HOME/zsh")
+ ;; ("ZPLUG_HOME" . "$XDG_DATA_HOME/zplug")
+ ;; KONAN_DATA_DIR=~/.konan by default; grows to multiple GiB.
+ ;; https://discuss.kotlinlang.org/t/change-konan-folder-location/18309
+ ("KONAN_DATA_DIR" . "$XDG_CACHE_HOME/konan"))))))