;; 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"))))))