guixconfig/config.org
2023-12-11 16:56:04 +01:00

8.2 KiB

GUIX System Configuration

  (org-babel-lob-ingest "./library.org")

Makefile

  ~/.config/guix/channels.scm:
          mkdir -p ~/.config/guix
          cp channels.scm ~/.config/guix/channels.scm

  install:
          guix archive --authorize < signing-key.pub
          guix system reconfigure ./config.scm --substitute-urls='https://ci.guix.gnu.org https://bordeaux.guix.gnu.org https://substitutes.nonguix.org'

System Installation Script

This is to be run after setting up the partitions.

  #!/bin/sh
  herd start cow-store /mnt
  mkdir -p ~/.config/guix
  cp channels.scm ~/.config/guix/channels.scm
  guix pull
  sed -i 's|/etc/config.scm|/mnt/etc/config.scm|g' ./config.scm
  guix system init ./config.scm /mnt

Modules

  • gnu
  • gnu image
  • gnu services authentication
  • 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
  • nongnu packages linux
  • nongnu system linux-initrd

Service Modules

  • desktop
  • xorg

Package Modules

  • bootloaders
  • certs
  • emacs
  • emacs-xyz
  • fonts
  • readline
  • terminals
  • version-control
  • wm
  • xorg

Configuration Definitions

File System

The variable %local-filesystem extracts the file system definitions from the installer-provided config.scm file.

  (define %local-filesystem
    (call-with-input-file "/etc/config.scm"
      (lambda (port)
        (read port)
        (read port)
        (eval (cadar (last-pair (read port)))
              (interaction-environment)))))

As a sibling to the former, the variable %local-swap does the same with the swap partition.

  (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
           (cadr
            (list-ref os-list
                      (- os-list-length 2)))
           (interaction-environment))))))

Channels

This adds the Nonguix channel.

  ;; Copy this to ~/.config/guix/channels.scm.
  (cons* (channel
        (name 'nonguix)
        (url "https://gitlab.com/nonguix/nonguix")
        ;; Enable signature verification:
        (introduction
         (make-channel-introduction
          "897c1a470da759236cc11798f4e0a5f7d4d59fbc"
          (openpgp-fingerprint
           "2A39 3FFF 68F4 EF7A 3D29  12AF 6F51 20A0 22FB B2D5"))))
       %default-channels)

Packages

  • emacs
  • emacs-desktop-environment
  • font-terminus
  • git
  • hwdata
  • nss-certs
  • readline
  • swayfx
  (packages
   (append
    <<org-to-scheme-sym-list(input=root-packages)>>
    %base-packages))

Services

Simple Services

These services are unmodified, or have just few settings.

Service Options
tlp ()
thermald ((adaptive? #t))
bluetooth ()
earlyoom ((minimum-available-memory 5) (minimum-free-swap 5))
inputattach ()
libvirt ((unix-sock-group "libvirt"))
fstrim ()
fprintd ()

Modified Desktop Services

  (public-key (ecc (curve Ed25519) (q #C1FD53E5D4CE971933EC50C9F307AE2171A2D3B52C804642A7A35F84F3A4EA98#)))

Greeter Service

greetd is a broken mess, yet here we are.

  (service greetd-service-type
           (greetd-configuration
            (greeter-supplementary-groups
             (list "video" "input"))
            (terminals
             (list
              (greetd-terminal-configuration
               (terminal-vt "1"))
              (greetd-terminal-configuration
               (terminal-vt "2"))
              (greetd-terminal-configuration
               (terminal-vt "3"))
              (greetd-terminal-configuration
               (terminal-vt "4"))
              #;(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"))))))

Screen Locker Service

For some reason, this service runs on root level for Guix.

  (service screen-locker-service-type
           (screen-locker-configuration
            (name "swaylock")
            (program
             (file-append swaylock-effects "/bin/swaylock"))
            (using-setuid? #f)))

Operating System

This is the full operating system specification.

  (operating-system
   (host-name "ziltis-machine")
   (timezone "Europe/Berlin")
   (locale "de_DE.utf8")
   (keyboard-layout
    (keyboard-layout "de" #:options '("caps:swapescape")))
   (kernel linux)
   (initrd microcode-initrd)
   (firmware (list linux-firmware))
   (bootloader
    (bootloader-configuration
     (bootloader grub-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))
    <<root-package-block>>
    <<root-services-block>>
   (name-service-switch %mdns-host-lookup-nss))