#+TITLE: Guix Configuration I use GNU Guix as my operating system. I'm able to declare the state of the operating system in a series of configuration files in a similar way to Puppet. * Channels #+begin_src scheme :tangle ~/dotfiles/guix/system/channels.scm :mkdirp yes (list (channel (name 'guix) (url "https://git.savannah.gnu.org/git/guix.git") (introduction (make-channel-introduction "9edb3f66fd807b096b48283debdcddccfea34bad" (openpgp-fingerprint "BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA")))) (channel (name 'nonguix) (url "https://gitlab.com/nonguix/nonguix") (introduction (make-channel-introduction "897c1a470da759236cc11798f4e0a5f7d4d59fbc" (openpgp-fingerprint "2A39 3FFF 68F4 EF7A 3D29 12AF 6F51 20A0 22FB B2D5"))))) #+end_src * System ** Home Desktop #+begin_src scheme :tangle ~/dotfiles/guix/system/home-desktop.scm :mkdirp yes (use-modules (gnu) (gnu services desktop) (gnu packages wm) (gnu packages shells) (gnu packages version-control) (gnu packages emacs) (gnu packages gnuzilla) (gnu packages vim) (gnu packages certs) (gnu packages file-systems) (gnu packages suckless) (gnu packages admin) (gnu packages linux) (gnu packages audio) (gnu packages pulseaudio) (gnu system setuid) (nongnu packages linux)) (use-service-modules cups desktop networking ssh sddm xorg) (operating-system (kernel linux) (firmware (list linux-firmware)) (locale "en_US.utf8") (timezone "America/Los_Angeles") (keyboard-layout (keyboard-layout "us")) (host-name "borges") (setuid-programs (cons (setuid-program (program (file-append swaylock "/bin/swaylock"))) %setuid-programs)) (users (cons* (user-account (name "opal") (comment "opal") (group "users") (home-directory "/home/opal") (shell (file-append zsh "/bin/zsh")) (supplementary-groups '("wheel" "netdev" "audio" "video"))) %base-user-accounts)) (packages (append (list git icecat vim nss-certs exfat-utils emacs sway swaybg swaylock swayidle dmenu bluez bluez-alsa pulseaudio) %base-packages)) (services (append (modify-services %desktop-services (delete gdm-service-type)) (list (service sddm-service-type (sddm-configuration (display-server "wayland")))))) (bootloader (bootloader-configuration (bootloader grub-efi-bootloader) (targets (list "/boot/efi")) (keyboard-layout keyboard-layout))) (mapped-devices (list (mapped-device (source (uuid "40aa6387-e935-4f70-8e7d-1975678a5a32")) (target "cryptroot") (type luks-device-mapping)))) (file-systems (cons* (file-system (mount-point "/") (device "/dev/mapper/cryptroot") (type "btrfs") (dependencies mapped-devices)) (file-system (mount-point "/boot/efi") (device (uuid "1C3B-10F5" 'fat32)) (type "vfat")) %base-file-systems))) ;; (setuid-programs ;; (let ((from (lambda (package file) ;; (setuid-program (program (file-append package file)))))) ;; (cons* (from light "/bin/light") ;; (from mtr "/sbin/mtr") ;; (from network-manager "/bin/nmtui") ;; (from nfs-utils "/sbin/mount.nfs") ;; (from swaylock "/bin/swaylock") ;; %setuid-programs))) ;; (services (cons* ... ;; (modify-services %desktop-services ;; (gdm-service-type config ;; =;;putabrackethere (gdm-configuration ;; (inherit config) ;; (wayland? #t) ;; (debug? #t)))))) #+end_src ** Work Laptop #+begin_src scheme :tangle ~/dotfiles/guix/system/work-laptop.scm :mkdirp yes (use-modules (gnu) (gnu services desktop) (gnu packages wm) (gnu system setuid) (gnu packages admin) (nongnu packages linux)) (use-service-modules cups desktop networking ssh sddm xorg) (operating-system (kernel linux) (firmware (list linux-firmware)) (locale "en_US.utf8") (timezone "America/Los_Angeles") (keyboard-layout (keyboard-layout "us")) (host-name "borges") (setuid-programs (cons (setuid-program (program (file-append swaylock "/bin/swaylock"))) %setuid-programs)) (users (cons* (user-account (name "opal") (comment "opal") (group "users") (home-directory "/home/opal") (supplementary-groups '("wheel" "netdev" "audio" "video"))) %base-user-accounts)) (packages (append (list git wl-clipboard vim nss-certs stow exfat-utils emacs emacs-exwm sway swaybg swaylock swayidle polybar nyxt dmenu bluez bluez-alsa pulseaudio keepassxc font-fira-mono font-fira-sans font-fira-code gcc-toolchain)) %base-packages) (services (append (modify-services %desktop-services (delete gdm-service-type)) (list (service sddm-service-type (sddm-configuration (display-server "wayland")))))) (bootloader (bootloader-configuration (bootloader grub-efi-bootloader) (targets (list "/boot/efi")) (keyboard-layout keyboard-layout))) (mapped-devices (list (mapped-device (source (uuid "abe760e2-4ba5-4f43-81a2-1c3f16eb62a8")) (target "cryptroot") (type luks-device-mapping)))) (file-systems (cons* (file-system (mount-point "/") (device "/dev/mapper/cryptroot") (type "btrfs") (dependencies mapped-devices)) (file-system (mount-point "/boot/efi") (device (uuid "15B3-5DE5" 'fat32)) (type "vfat")) %base-file-systems))) ;; (setuid-programs ;; (let ((from (lambda (package file) ;; (setuid-program (program (file-append package file)))))) ;; (cons* (from light "/bin/light") ;; (from mtr "/sbin/mtr") ;; (from network-manager "/bin/nmtui") ;; (from nfs-utils "/sbin/mount.nfs") ;; (from swaylock "/bin/swaylock") ;; %setuid-programs))) ;; (services (cons* ... ;; (modify-services %desktop-services ;; (gdm-service-type config ;; =;;putabrackethere (gdm-configuration ;; (inherit config) ;; (wayland? #t) ;; (debug? #t)))))) #+end_src * Home #+begin_src emacs-lisp :tangle ~/dotfiles/guix/home/guix-home.scm :mkdirp yes (use-modules (gnu) (gnu home) (gnu home services) (gnu home services shells) (gnu home services shepherd) (gnu packages) (gnu packages shells) (gnu packages pulseaudio) (gnu packages web-browsers) (gnu packages guile) (gnu packages wget) (gnu packages curl) (gnu packages pdf) (gnu packages ebook) (gnu packages gnome) (gnu packages gnome-xyz) (gnu packages compression) (gnu packages cmake) (gnu packages autotools) (gnu packages gstreamer) (gnu packages video) (gnu packages mpd) (gnu packages terminals) (gnu packages xdisorg) (gnu packages gnupg) (gnu packages password-utils) (gnu packages emacs) (gnu packages emacs-xyz) (gnu packages gnuzilla) (gnu packages ruby) (gnu packages python) (gnu packages lisp) (gnu packages python-xyz) (gnu packages fonts) (gnu packages wm) (gnu services) (guix gexp)) (home-environment (packages (append ;; Tools/Libraries (list zsh wget curl cmake zip unzip libtool gst-plugins-bad gst-plugins-base gst-plugins-good gst-plugins-ugly gst-libav wl-clipboard pavucontrol) ;; Applications (list alacritty nyxt zathura-pdf-mupdf nautilus wlr-randr calibre mpv youtube-dl icedove keepassxc nautilus) ;; Emacs (list emacs-vterm emacs-geiser emacs-geiser-guile emacs-doom-modeline emacs-all-the-icons emacs-all-the-icons-dired emacs-general emacs-which-key emacs-alert emacs-helpful emacs-pinentry emacs-doom-themes emacs-evil emacs-evil-collection emacs-vertico emacs-orderless emacs-consult emacs-company emacs-marginalia emacs-perspective emacs-dired-rsync emacs-dired-hacks emacs-org-bullets emacs-org-make-toc emacs-visual-fill-column emacs-flycheck emacs-rainbow-mode emacs-rainbow-delimiters emacs-magit emacs-projectile emacs-lsp-mode emacs-lsp-ui emacs-treemacs emacs-lsp-treemacs emacs-parinfer-mode emacs-yasnippet emacs-pdf-tools) ;; Languages (list ruby python guile-3.0 sbcl python-lsp-server ruby-solargraph) ;; Aesthetics/Fonts (list gnome-tweaks papirus-icon-theme arc-theme font-fira-mono font-fira-code font-fira-sans font-abattis-cantarell font-google-noto font-awesome))) (services (append ;; Shell (list (service home-zsh-service-type (home-zsh-configuration ;; Place all configs to $XDG_CONFIG_HOME/zsh. Makes ;; ~/.zshenv set ZDOTDIR to $XDG_CONFIG_HOME/zsh ;; and shell process starts with ~/.config/zsh/.zshenv (xdg-flavor? #t) ;; .zshenv (zshenv (list (local-file "files/zsh/zshenv"))) ;; .zprofile (zprofile (list (local-file "files/zsh/zprofile"))) ;; .zshrc (zshrc (list (local-file "files/zsh/zshrc")))))) ;; Files (list (simple-service 'sway-config home-files-service-type (list `("config/sway/config" ,(local-file (string-append (getenv "HOME") "/dotfiles/guix/home/files/sway/config"))))) (simple-service 'user-dirs-config home-files-service-type (list `("config/user-dirs.dirs" ,(local-file (string-append (getenv "HOME") "/dotfiles/guix/home/files/user-dirs.dirs"))))) (simple-service 'emacs-config home-files-service-type (list `("config/emacs/init.el" ,(local-file (string-append (getenv "HOME") "/dotfiles/guix/home/files/emacs/init.el"))))) (simple-service 'nyxt-config home-files-service-type (list `("config/nyxt/init.lisp" ,(local-file (string-append (getenv "HOME") "/dotfiles/guix/home/files/nyxt/init.lisp"))))) (simple-service 'dunst-config home-files-service-type (list `("config/dunst/dunstrc" ,(local-file (string-append (getenv "HOME") "/dotfiles/guix/home/files/dunst/dunstrc"))))) (simple-service 'mbsync-config home-files-service-type (list `("config/mbsync/mbsyncrc" ,(local-file (string-append (getenv "HOME") "/dotfiles/guix/home/files/mbsync/mbsyncrc"))))) (simple-service 'alacritty-config home-files-service-type (list `("config/alacritty/alacritty.yml" ,(local-file (string-append (getenv "HOME") "/dotfiles/guix/home/files/alacritty/alacritty.yml")))))) ;; Daemons (list (service home-shepherd-service-type (home-shepherd-configuration (services (list (shepherd-service (provision '(emacs)) (start #~(make-system-constructor "emacs --daemon")) (stop #~(make-system-constructor "emacsclient -e '(kill-emacs)'"))) (shepherd-service (provision '(gnome-keyring-daemon)) (start #~(make-system-contructor "gnome-keyring-daemon --daemonize ")) (stop #~(make-system-contructor "pkill gnome-keyring-daemon"))))))))))) #+end_src