Files
opalfiles/guix.org
2022-01-05 14:52:17 -08:00

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

Guix Home

(use-modules
 (gnu)
 (gnu home)
 (gnu home services)
 (gnu home services shells)
 (gnu home services shepherd)
 (gnu packages)
 (gnu packages linux)
 (gnu packages admin)
 (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 compton)
 (gnu packages dunst)
 (gnu packages image-viewers)
 (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 packages music)
 (gnu packages base)
 (gnu packages xorg)
 (gnu packages dns)
 (gnu packages kde-frameworks)
 (gnu services)
 (guix gexp))

(home-environment
 (packages
  (append
   (list
    ;; Interfacing
    xclip
    xset
    xss-lock
    polybar
    playerctl
    xbacklight
    xmodmap
    rofi
    dunst
    arandr
    feh
    picom)
   ;; Admin
   (list
    inetutils
    wget
    curl
    zip
    seahorse
    network-manager
    networkmanager-qt
    network-manager-applet)
   ;; Tools/Libraries
   (list
    unzip
    zip
    cmake
    libtool
    gst-plugins-bad
    gst-plugins-base
    gst-plugins-good
    gst-plugins-ugly
    gst-libav
    playerctl
    gnu-make)
   ;; Applications
   (list
    alacritty
    nyxt
    zathura-pdf-mupdf
    mpv
    mpd
    ncmpcpp
    icedove
    keepassxc
    nautilus
    pavucontrol)
   ;; 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
    picolisp
    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
    pfetch)))
 (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 'i3-config
                    home-files-service-type
                    (list
                     `("config/i3/config"
                       ,(local-file
                         (string-append (getenv "HOME")
                                        "/dotfiles/guix/home/files/i3/config")))))
    (simple-service 'i3status-config
                    home-files-service-type
                    (list
                     `("config/i3status/config"
                       ,(local-file
                         (string-append (getenv "HOME")
                                        "/dotfiles/guix/home/files/i3status/config")))))
    (simple-service 'picom-config
                    home-files-service-type
                    (list
                     `("config/picom/picom.conf"
                       ,(local-file
                         (string-append (getenv "HOME")
                                        "/dotfiles/guix/home/files/picom/picom.conf")))))
    (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 'rofi-config
                    home-files-service-type
                    (list
                     `("config/rofi/config.rasi"
                       ,(local-file
                         (string-append (getenv "HOME")
                                        "/dotfiles/guix/home/files/rofi/config.rasi")))))
    (simple-service 'zsh-aliases
                    home-files-service-type
                    (list
                     `("config/zsh/zsh_aliases"
                       ,(local-file
                         (string-append (getenv "HOME")
                                        "/dotfiles/guix/home/files/zsh/zsh_aliases")))))
    (simple-service 'zsh-functions
                    home-files-service-type
                    (list
                     `("config/zsh/zsh_functions"
                       ,(local-file
                         (string-append (getenv "HOME")
                                        "/dotfiles/guix/home/files/zsh/zsh_functions")))))
    (simple-service 'redshift-config
                    home-files-service-type
                    (list
                     `("config/redshift/redshift.conf"
                       ,(local-file
                         (string-append (getenv "HOME")
                                        "/dotfiles/guix/home/files/redshift/redshift.conf")))))
    (simple-service 'xmodmap-config
                    home-files-service-type
                    (list
                     `("config/xmodmap/xmodmap"
                       ,(local-file
                         (string-append (getenv "HOME")
                                        "/dotfiles/guix/home/files/xmodmap/xmodmap")))))
    (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 '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")))))))))))

System

Apollyon

(use-modules (gnu)
             (gnu packages wm)
             (gnu packages version-control)
             (gnu packages emacs)
             (gnu packages gnuzilla)
             (gnu packages vim)
             (gnu packages certs)
             (gnu packages pulseaudio)
             (gnu packages audio)
             (gnu packages linux)
             (gnu packages suckless)
             (gnu packages terminals)
             (gnu packages gnome)
             (gnu packages shells)
             (gnu packages emacs)
             (gnu packages kde-frameworks)
             (gnu system setuid)
             (nongnu packages linux))

(use-service-modules
 cups
 desktop
 networking
 ssh
 xorg)

(operating-system
 (kernel linux)
 (firmware (list linux-firmware sof-firmware))
 (locale "en_US.utf8")
 (timezone "America/Los_Angeles")
 (keyboard-layout (keyboard-layout "us"))
 (host-name "apollyon") 
 (setuid-programs
  (let ((from (lambda (package file)
                (setuid-program (program (file-append package file))))))
    (cons* (from i3lock "/bin/i3lock")
           (from network-manager "/bin/nmtui")
           (from networkmanager-qt "/bin/nm-connection-editor")
           (from network-manager-applet "/bin/nm-applet")
	         %setuid-programs)))
 (users (cons* (user-account
                (name "opal")
                (comment "opal")
                (group "users")
                (shell (file-append zsh "/bin/zsh"))
                (home-directory "/home/opal")
                (supplementary-groups
                 '("wheel" "netdev" "audio" "video")))
               %base-user-accounts))
 (packages
  (append
   (list
    zsh
    emacs
    i3-gaps
    i3status
    git
    network-manager
    networkmanager-qt
    network-manager-applet
    icecat
    emacs
    bluez
    bluez-alsa
    pulseaudio
    dmenu
    alacritty
    nss-certs)
   %base-packages))
 (services
  (append
   (list (service gnome-desktop-service-type)
         (service gnome-keyring-service-type)
         (service openssh-service-type)
         (service tor-service-type)
         (service cups-service-type) 
         (set-xorg-configuration
          (xorg-configuration
           (keyboard-layout keyboard-layout))))
   %desktop-services))
 (bootloader
  (bootloader-configuration
   (bootloader grub-efi-bootloader)
   (targets (list "/boot/efi"))
   (keyboard-layout keyboard-layout)))
 (mapped-devices
  (list (mapped-device
         (source
          (uuid "ceb0c15f-30b6-4d02-a7e9-96ddcd73c763"))
         (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 "739C-796C" 'fat32))
          (type "vfat"))
         %base-file-systems)))
;; (append (modify-services %desktop-services
;;                          (delete gdm-service-type))
;;         (list (service sddm-service-type
;;                        (sddm-configuration
;;                         (display-server "wayland"))))))
;; (services
;;  (append (modify-services %desktop-services
;;                   (gdm-service-type config
;;                     = (gdm-configuration
;;                         (inherit config)
;;                         (wayland? #t)
;;                         (debug? #t))))))


;; (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
                   (gdm-service-type config
                     = (gdm-configuration
                         (inherit config)
                         (wayland? #t)
                         (debug? #t))))))
  ;; (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))


;; (services (cons* ...
;;                  (modify-services %desktop-services
;;                    (gdm-service-type config
;;                      =;;putabrackethere (gdm-configuration
;;                          (inherit config)
;;                          (wayland? #t)
;;                          (debug? #t))))))

Archive

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 (cons* ...
;;                  (modify-services %desktop-services
;;                    (gdm-service-type config
;;                      =;;putabrackethere (gdm-configuration
;;                          (inherit config)
;;                          (wayland? #t)
;;                          (debug? #t))))))
 (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))))))