1;; This Guix Home configuration is intentionally very simple and2;; essentially limited to the installation of packages and the3;; configuration of user services. Configuration files are managed4;; without Guix Home.56(define-module (guix-home-config)7 #:use-module (guix gexp)8 #:use-module (gnu home)9 #:use-module (gnu home services)10 #:use-module (gnu home services desktop)11 #:use-module (gnu home services shells)12 #:use-module (gnu home services shepherd)13 #:use-module (gnu home services sound)14 #:use-module (gnu packages)15 #:use-module (gnu packages bash)16 #:use-module (gnu packages linux)17 #:use-module (gnu packages xdisorg)18 #:use-module (gnu services)19 #:use-module (gnu system shadow)20 #:use-module (nmeum packages desktop)21 #:use-module (nmeum packages misc))2223;; TODO:24;; • archive-email25;; • archive-logs26;; • bemenu-emoji27;; • edward28;; • fractal + gnome-keyring29;; • khal30;; • neo-layout (currently arrow keys don't work in framebuffer)31;; • newer version of man-pages-posix32;; • signal-desktop33;; • tuba + gnome-keyring34;; • vdirsyncer / pimsync35;; • zk3637(define packages-desktop38 '("adwaita-icon-theme"39 "alacritty"40 "bemenu"41 "dbus"42 "firefox"43 "libxcursor" ; for XCURSOR_PATH44 "mupdf" ; TODO: try zathura45 "river"46 "screen-message"47 "waylock"48 "wl-clipboard"49 "wlr-randr"50 "wlsunset"))5152(define packages-email53 '("isync"54 "lynx" ; for viewing HTML mails55 "mblaze"56 "mblaze-ui"57 "msmtp"))5859(define packages-font60 '("fontconfig"61 "font-terminus-patched"62 "font-terminus-patched:otb"63 "font-google-noto"64 "font-google-noto-emoji"65 "font-dejavu"))6667(define packages-networking68 '("bind:utils"69 "curl"70 "iproute2"71 "mosh"72 "mtr"73 "rsync"74 "wget"75 "whois"))7677(define packages-multimedia78 '("ncmpc"79 "ffmpeg"80 "imv"81 "mpv"82 "perl-image-exiftool"83 "pipewire"84 "qrencode"85 "snapcast"86 "wireplumber"87 "yt-dlp"))8889(define packages-programming90 '("ed"91 "git"92 "git-shuffle"93 "guile"94 "guile-readline"95 "make"96 "neovim"97 "python"98 "universal-ctags"))99100(define packages-security101 '("cryptsetup"102 "gnupg"103 "pinentry-gtk2"104 "pwgen"105 "tpm"))106107(define packages-tools108 '("chimerautils"109 "entr"110 "file"111 "fzf"112 "htop"113 "less"114 "mandoc"115 "ripgrep"116 "rlwrap"117 "strace"118 "tmux"119 "tree"))120121;; non-desktop packages that I don't need on every shell host.122(define packages-tools-extra123 '("discount"124 "man-pages"125 "man-pages-posix"126 "nmap"127 "poppler"128 "restic"129 "sshfs"130 "unison"))131132(define my-packages133 (append134 packages-desktop135 packages-email136 packages-font137 packages-networking138 packages-multimedia139 packages-programming140 packages-security141 packages-tools142 packages-tools-extra))143144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;145146(define (my-essential-services he)147 ;; I don't want Guix home to overwrite my ~/.profile.148 ;; Therefore, I remove the services responsible for that.149 (filter150 (lambda (s)151 ;; The home-shell-profile creates the ~/.profile file.152 (not (eqv? (service-type-name (service-kind s)) 'home-shell-profile)))153 (home-environment-essential-services he)))154155(define home-config156 (let ((home-environment-base157 ;; Need to set packages here, otherwise the essential services158 ;; operate on an empty package set and no package is installed.159 (home-environment160 (packages (specifications->packages my-packages)))))161 (home-environment162 ;; Awful hack to change the default essential services.163 (inherit home-environment-base)164 (essential-services165 (my-essential-services home-environment-base))166167 (services168 (append169 (list170 ;; Needed to start services which use WAYLAND_DISPLAY.171 ;; See: https://issues.guix.gnu.org/76619172 (service home-shepherd-service-type173 (home-shepherd-configuration174 (auto-start? #f)))175176 (simple-service 'wlsunset177 home-shepherd-service-type178 (list (shepherd-service179 (provision '(wlsunset))180 (start181 #~(make-forkexec-constructor182 (list183 (string-append #$wlsunset "/bin/wlsunset")184 "-l" "52.3" "-L" "11.1")))185 (stop #~(make-kill-destructor)))))186187 (simple-service 'dam188 home-shepherd-service-type189 (list (shepherd-service190 (provision '(dam))191 (start192 ;; TODO: Supervise status text and status bar service separately.193 #~(make-forkexec-constructor194 (list (string-append #$bash-minimal "/bin/sh") "-c"195 (format #f196 "~a | ~a ~a"197 (string-append #$ustatus "/bin/ustatus")198 (string-append #$dam "/bin/dam")199 (string-join200 '("-f Terminus:size=12"201 "-nb '#282828'"202 "-nf '#b8b8b8'"203 "-sb '#7cafc2'"204 "-sf '#181818'") " ")))))205 (stop #~(make-kill-destructor)))))206207 (service home-dbus-service-type)208 (service home-pipewire-service-type209 (home-pipewire-configuration210 (enable-pulseaudio? #t))))211 %base-home-services)))))212213home-config