;; Guix Home configuration. ;; Apply with: guix home reconfigure guix-home-config.scm ;; ;; Every package is declared as a name string in ONE list passed to ;; `specifications->packages', so the name written here is exactly what ;; `guix show NAME' and `guix search' accept. No per-package module imports. ;; The only package variable still referenced directly is `emacs-pgtk'. (use-modules (gnu home) (gnu home services) (gnu home services shells) (gnu home services shepherd) (gnu home services dotfiles) (gnu home services sound) (gnu home services desktop) (gnu home services fontutils) (gnu home services mpv) (gnu home services gnupg) (gnu home services xdg) (gnu services) (gnu services shepherd) (gnu system shadow) (gnu system keyboard) (gnu packages) (gnu packages emacs) (gnu packages gnupg) (gnu packages rust-apps) (midnight packages noctalia) (guix gexp)) (define home-config (home-environment (packages (specifications->packages (list ;; ---- CLI tools and desktop utilities ---- "ansifilter" "htop" "bottom" "cava" "cmatrix" "fastfetch" "brightnessctl" "eza" "fzf" "git" "jujutsu" "starship" "zoxide" "ripgrep" "unzip" "xdg-utils" "speedtest-cli" "libnotify" "vivid" "fd" "wl-clipboard" "nwg-look" "noctalia" "xdg-desktop-portal" "xdg-desktop-portal-umbriel" "xdg-desktop-portal-gtk" "stow" "wiremix" "wireplumber" "github-cli" "pinentry" "pinentry-tty" "wgetpaste" "wget" "gnupg" "pinentry-emacs" ;; Needed for nwg-look to set themes right "glib:bin" "dconf" "gsettings-desktop-schemas" ;; ---- Noctalia Shell Requirement ---- "adw-gtk3-theme" "emacs-adwaita-dark-theme" "adwaita-icon-theme" "gnome-themes-extra" "papirus-icon-theme" "sound-theme-freedesktop" "bibata-cursor-theme" ;; ---- Applications ---- "firefox" "qutebrowser" "zathura" "zathura-pdf-mupdf" "mpv" "aria2" "yt-dlp" ;; ---- Fonts ---- "font-nerd-jetbrains-mono" "font-nerd-symbols" "font-google-noto-emoji" "font-google-noto" "font-google-noto-sans-cjk" "font-google-noto-serif-cjk" "font-google-noto-sans-hebrew" "font-google-noto-serif-hebrew" "font-iosevka-aile" ;; for org-mode variable pitch ;; ---- Compilers and language implementations ---- "clang" "guile" "sbcl" "clisp" ;; ---- Tree-sitter grammars (Emacs finds them through Guix) ---- "tree-sitter-c" "tree-sitter-cpp" "tree-sitter-bash" "tree-sitter-python" "tree-sitter-html" "tree-sitter-css" "tree-sitter-javascript" "tree-sitter-typescript" "tree-sitter-json" "tree-sitter-yaml" "tree-sitter-toml" ;; ---- External programs the Emacs config calls ---- "emacs-pgtk" "direnv" "password-store" "aspell" "aspell-dict-en" ;; ---- Emacs packages, grouped like the modules in Config.org ---- ;; core "emacs-no-littering" "emacs-exec-path-from-shell" "emacs-direnv" "emacs-pinentry" "emacs-password-store" "emacs-pass" ;; ui "emacs-neotree" "emacs-dashboard" "emacs-page-break-lines" "emacs-breadcrumb" "emacs-aria2" ;; from my own channel ;; Nerd icons stuff "emacs-nerd-icons" "emacs-nerd-icons-dired" "emacs-nerd-icons-ibuffer" "emacs-nerd-icons-completion" "emacs-nerd-icons-corfu" "emacs-nerd-icons-mode-line" "emacs-ligature" "emacs-rainbow-delimiters" "emacs-indent-bars" "emacs-pulsar" "emacs-helpful" "emacs-colorful-mode" ;; completion (embark-consult and consult-eglot-embark ship inside ;; emacs-embark and emacs-consult-eglot) "emacs-vertico" "emacs-orderless" "emacs-marginalia" "emacs-consult" "emacs-corfu" "emacs-embark" "emacs-consult-eglot" ;; editing "emacs-avy" "emacs-multiple-cursors" "emacs-hl-todo" "emacs-undo-fu" "emacs-undo-fu-session" "emacs-vundo" "emacs-zoxide" "emacs-ace-window" "emacs-surround" "emacs-edit-indirect" "emacs-paredit" ;; vcs "emacs-magit" "emacs-majutsu" "emacs-forge" "emacs-diff-hl" ;; prog "emacs-apheleia" "emacs-systemd-mode" "emacs-fish-mode" "emacs-pyvenv" "emacs-geiser" "emacs-geiser-guile" "emacs-guix" "emacs-tempel" "emacs-eglot-tempel" "emacs-tempel-collection" ;; common lisp "emacs-sly" ;; web "emacs-emmet-mode" "emacs-simple-httpd" "emacs-jsdoc" ;; latex, org, comms, apps "emacs-auctex" "emacs-cdlatex" "emacs-org-auto-tangle" "emacs-ement" "emacs-emms" "emacs-yeetube" "emacs-mpv" ;; Some mpv scripts "mpv-mpris" "mpv-uosc" "mpv-thumbfast"))) (services (append (list (simple-service 'additional-fonts-service home-fontconfig-service-type (list '(alias (family "monospace") (prefer (family "JetBrainsMono Nerd Font"))))) ;; This adds my own GUIX repo. (simple-service 'some-useful-env-vars-service home-environment-variables-service-type `(("LESSHISTFILE" . "$XDG_CACHE_HOME/.lesshst") ("GUIX_PACKAGE_PATH" . "$HOME/src/my-guix-channel"))) ;; Add local bin to PATH (simple-service 'local-bin-path home-environment-variables-service-type '(("PATH" . "$HOME/.local/bin:$PATH"))) ;; XDG User Dirs (service home-xdg-user-directories-service-type (home-xdg-user-directories-configuration (desktop "$HOME/Desktop") (documents "$HOME/Documents") (download "$HOME/Downloads") (music "$HOME/Music") (pictures "$HOME/Pictures") (projects "$HOME/Projects") (publicshare "$HOME") ;; disabled (templates "$HOME") ;; disabled (videos "$HOME/Videos"))) (service home-dotfiles-service-type (home-dotfiles-configuration (directories '("./dotfiles")) (layout 'stow))) ;; Enable the home pipewire service (service home-dbus-service-type) (service home-pipewire-service-type) ;; Configure gpg-agent.conf using Guix Home (service home-gpg-agent-service-type (home-gpg-agent-configuration (pinentry-program (file-append pinentry-emacs "/bin/pinentry-emacs")) (ssh-support? #t) (default-cache-ttl 3600) (max-cache-ttl 86400) (extra-content "\nallow-loopback-pinentry\nallow-emacs-pinentry"))) (service home-bash-service-type (home-bash-configuration (guix-defaults? #t) (variables `(("HISTFILE" . "$XDG_CACHE_HOME/.bash_history") ("HISTSIZE" . "500000") ("ALTERNATE_EDITOR" . "") ("EDITOR" . ,(file-append emacs-pgtk "/bin/emacsclient -ca \"\"")) ("VISUAL" . ,(file-append emacs-pgtk "/bin/emacsclient -ca \"\"" )))) (aliases '(("ls" . "eza -alF --color --icons --group-directories-first") ("l" . "ls -al") ("ll" . "ls -al"))) (bashrc (list (local-file "/home/krish/src/guix-config/.bashrc" "bashrc"))) (bash-profile (list (local-file "/home/krish/src/guix-config/.bash_profile" "bash_profile"))))) (service home-mpv-service-type (make-home-mpv-configuration #:global (make-mpv-profile-configuration #:profile '("gpu-hq") #:vo '("gpu-next") #:gpu-api '("vulkan") #:gpu-context '("waylandvk") #:hwdec '("vaapi") #:scripts (list (file-append (specification->package "mpv-uosc") "/share/mpv/scripts/uosc") (file-append (specification->package "mpv-thumbfast") "/share/mpv/scripts/thumbfast.lua") (file-append (specification->package "mpv-mpris") "/share/mpv/scripts/mpris.so")) #:scale 'ewa_lanczossharp #:video-sync 'display-resample #:tscale 'oversample #:ytdl-format "bestvideo[height<=?1080]+bestaudio/best" #:input-ipc-server "/tmp/mpv.sock" #:deband? #t #:interpolation? #t #:osc? #f #:osd-bar? #f #:border? #f #:save-position-on-quit? #t))) (service home-files-service-type `((".guile" ,%default-dotguile) (".Xdefaults" ,%default-xdefaults))) (service home-xdg-configuration-files-service-type `(("gdb/gdbinit" ,%default-gdbinit) ("nano/nanorc" ,%default-nanorc)))) %base-home-services)))) home-config