693 lines
20 KiB
Org Mode
693 lines
20 KiB
Org Mode
#+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
|
|
|
|
* Guix 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 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")))))))))))
|
|
#+end_src
|
|
* System
|
|
** Apollyon
|
|
#+begin_src scheme :tangle ~/dotfiles/guix/system/apollyon.scm :mkdirp yes
|
|
(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)))
|
|
#+end_src
|
|
|
|
#+begin_src scheme
|
|
;; (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))))))
|
|
#+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
|
|
(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))))))
|
|
#+end_src
|
|
|
|
* Archive
|
|
** 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 (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)))
|
|
#+end_src
|
|
|
|
#+begin_src shell
|
|
;; (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
|