diff options
Diffstat (limited to 'home-configuration.scm')
-rw-r--r-- | home-configuration.scm | 231 |
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")))))) |