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