Files
opalfiles/guix.org
2021-12-31 12:18:53 -08:00

14 KiB

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

(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")))))

System

Home Desktop

(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))))))

Work Laptop

(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))))))

Home

(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")))))))))))