#+TITLE: GUIX System Configuration #+AUTHOR: Daniel Ziltener #+PROPERTY: header-args:scheme :comments both #+begin_src emacs-lisp :results none (org-babel-lob-ingest "./library.org") #+end_src * Modules #+NAME: module-list - gnu - gnu services base - gnu services dbus - gnu services desktop - gnu services linux - gnu services networking - gnu services pm - gnu services virtualization - gnu services xorg - gnu system nss #+begin_src scheme :noweb yes :exports none :results code :tangle config.scm <> #+end_src ** Service Modules #+NAME: service-module-list - desktop - xorg #+begin_src scheme :noweb yes :exports none :results code :tangle config.scm <> #+end_src ** Package Modules #+NAME: package-module-list - bootloaders - certs - emacs - emacs-xyz - fonts - readline - terminals - version-control - wm - xorg #+begin_src scheme :noweb yes :exports none :results code :tangle config.scm <> #+end_src * Configuration Definitions ** File System The variable ~%local-filesystem~ extracts the file system definitions from the installer-provided =config.scm= file. #+begin_src scheme :tangle config.scm (define %local-filesystem (call-with-input-file "/etc/config.scm" (lambda (port) (read port) (read port) (eval (cadar (last-pair (read port))) (interaction-environment))))) #+end_src As a sibling to the former, the variable ~%local-swap~ does the same with the swap partition. #+begin_src scheme :tangle config.scm (define %local-swap (call-with-input-file "/etc/config.scm" (lambda (port) (read port) (read port) (let* ((os-list (read port)) (os-list-length (length os-list))) (eval (cdr (list-ref os-list (- os-list-length 2))) (interaction-environment)))))) #+end_src ** Packages #+NAME: root-packages - emacs - emacs-desktop-environment - font-terminus - git - nss-certs - readline - swayfx #+NAME: root-package-block #+begin_src scheme :noweb no-export (packages (append <> %base-packages)) #+end_src ** Services #+NAME: root-services-block #+begin_src scheme :noweb yes :exports none :results code (services (append (modify-services %desktop-services (delete login-service-type) (delete mingetty-service-type) (delete console-font-service-type)) <> <> <> )) #+end_src *** Simple Services These services are unmodified, or have just few settings. #+NAME: root-simple-services | Service | Options | |-------------+------------------------------------------------------| | tlp | () | | thermald | ((adaptive? t)) | | bluetooth | () | | earlyoom | ((minimum-available-memory 5) (minimum-free-swap 5)) | | inputattach | () | | libvirt | ((unix-sock-group "libvirt")) | | fstrim | () | | fprintd | () | #+NAME: root-simple-service-block #+begin_src scheme :noweb yes :exports none :results code <> #+end_src *** Greeter Service =greetd= is a broken mess, yet here we are. #+NAME: greeter-service #+begin_src scheme (service greetd-service-type (greetd-configuration (greeter-supplementary-groups (list "video" "input")) (terminals (list (greetd-terminal-configuration (terminal-vt "7") (terminal-switch #t) (default-session-command (greetd-wlgreet-session (command (file-append swayfx "/bin/sway"))))) (greetd-terminal-configuration (terminal-vt "8")))))) #+end_src *** Screen Locker Service For some reason, this service runs on root level for Guix. #+NAME: screen-lock-service #+begin_src scheme (service screen-locker-service-type (screen-locker-configuration (name "swaylock") (program (file-append swaylock-effects "/bin/swaylock")) (using-setuid? #f))) #+end_src * Operating System This is the full operating system specification. #+begin_src scheme :noweb no-export :results code :tangle config.scm (operating-system (host-name "ziltis-machine") (timezone "Europe/Berlin") (locale "de_DE.utf8") (keyboard-layout (keyboard-layout "de" #:options '("caps:swapescape"))) (bootloader (bootloader-configuration (bootloader grup-efi-bootloader) (targets '("/boot/efi")) (keyboard-layout keyboard-layout))) (file-systems %local-filesystem) (swap-devices %local-swap) (users (cons* (user-account (name "zilti") (group "users") (supplementary-groups '("wheel" "netdev" "audio" "video" "libvirt"))) %base-user-accounts)) <> <> (name-service-switch %mdns-host-lookup-nss)) #+end_src