guix-config

Configuration files for Guix

git clone https://git.8pit.net/guix-config.git

  1;; This Guix Home configuration is intentionally very simple and
  2;; essentially limited to the installation of packages and the
  3;; configuration of user services. Configuration files are managed
  4;; without Guix Home.
  5
  6(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))
 22
 23;; TODO:
 24;;  • archive-email
 25;;  • archive-logs
 26;;  • bemenu-emoji
 27;;  • edward
 28;;  • fractal + gnome-keyring
 29;;  • khal
 30;;  • neo-layout (currently arrow keys don't work in framebuffer)
 31;;  • newer version of man-pages-posix
 32;;  • signal-desktop
 33;;  • tuba + gnome-keyring
 34;;  • vdirsyncer / pimsync
 35;;  • zk
 36
 37(define packages-desktop
 38  '("adwaita-icon-theme"
 39    "alacritty"
 40    "bemenu"
 41    "dbus"
 42    "firefox"
 43    "libxcursor" ; for XCURSOR_PATH
 44    "mupdf" ; TODO: try zathura
 45    "river"
 46    "screen-message"
 47    "waylock"
 48    "wl-clipboard"
 49    "wlr-randr"
 50    "wlsunset"))
 51
 52(define packages-email
 53  '("isync"
 54    "lynx" ; for viewing HTML mails
 55    "mblaze"
 56    "mblaze-ui"
 57    "msmtp"))
 58
 59(define packages-font
 60  '("fontconfig"
 61    "font-terminus-patched"
 62    "font-terminus-patched:otb"
 63    "font-google-noto"
 64    "font-google-noto-emoji"
 65    "font-dejavu"))
 66
 67(define packages-networking
 68  '("bind:utils"
 69    "curl"
 70    "iproute2"
 71    "mosh"
 72    "mtr"
 73    "rsync"
 74    "wget"
 75    "whois"))
 76
 77(define packages-multimedia
 78  '("ncmpc"
 79    "ffmpeg"
 80    "imv"
 81    "mpv"
 82    "perl-image-exiftool"
 83    "pipewire"
 84    "qrencode"
 85    "snapcast"
 86    "wireplumber"
 87    "yt-dlp"))
 88
 89(define packages-programming
 90  '("ed"
 91    "git"
 92    "git-shuffle"
 93    "guile"
 94    "guile-readline"
 95    "make"
 96    "neovim"
 97    "python"
 98    "universal-ctags"))
 99
100(define packages-security
101  '("cryptsetup"
102    "gnupg"
103    "pinentry-gtk2"
104    "pwgen"
105    "tpm"))
106
107(define packages-tools
108  '("chimerautils"
109    "entr"
110    "file"
111    "fzf"
112    "htop"
113    "less"
114    "mandoc"
115    "ripgrep"
116    "rlwrap"
117    "strace"
118    "tmux"
119    "tree"))
120
121;; non-desktop packages that I don't need on every shell host.
122(define packages-tools-extra
123  '("discount"
124    "man-pages"
125    "man-pages-posix"
126    "nmap"
127    "poppler"
128    "restic"
129    "sshfs"
130    "unison"))
131
132(define my-packages
133  (append
134    packages-desktop
135    packages-email
136    packages-font
137    packages-networking
138    packages-multimedia
139    packages-programming
140    packages-security
141    packages-tools
142    packages-tools-extra))
143
144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
145
146(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  (filter
150    (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)))
154
155(define home-config
156  (let ((home-environment-base
157          ;; Need to set packages here, otherwise the essential services
158          ;; operate on an empty package set and no package is installed.
159          (home-environment
160            (packages (specifications->packages my-packages)))))
161    (home-environment
162      ;; Awful hack to change the default essential services.
163      (inherit home-environment-base)
164      (essential-services
165        (my-essential-services home-environment-base))
166
167      (services
168        (append
169          (list
170            ;; Needed to start services which use WAYLAND_DISPLAY.
171            ;; See: https://issues.guix.gnu.org/76619
172            (service home-shepherd-service-type
173                     (home-shepherd-configuration
174                       (auto-start? #f)))
175
176            (simple-service 'wlsunset
177              home-shepherd-service-type
178              (list (shepherd-service
179                      (provision '(wlsunset))
180                      (start
181                        #~(make-forkexec-constructor
182                            (list
183                              (string-append #$wlsunset "/bin/wlsunset")
184                              "-l" "52.3" "-L" "11.1")))
185                      (stop #~(make-kill-destructor)))))
186
187            (simple-service 'dam
188              home-shepherd-service-type
189              (list (shepherd-service
190                      (provision '(dam))
191                      (start
192                        ;; TODO: Supervise status text and status bar service separately.
193                        #~(make-forkexec-constructor
194                            (list (string-append #$bash-minimal "/bin/sh") "-c"
195                                  (format #f
196                                    "~a | ~a ~a"
197                                    (string-append #$ustatus "/bin/ustatus")
198                                    (string-append #$dam "/bin/dam")
199                                    (string-join
200                                      '("-f Terminus:size=12"
201                                        "-nb '#282828'"
202                                        "-nf '#b8b8b8'"
203                                        "-sb '#7cafc2'"
204                                        "-sf '#181818'") " ")))))
205                      (stop #~(make-kill-destructor)))))
206
207            (service home-dbus-service-type)
208            (service home-pipewire-service-type
209                     (home-pipewire-configuration
210                       (enable-pulseaudio? #t))))
211          %base-home-services)))))
212
213home-config