(define-module (freya system) #:use-module (gnu) #:use-module (gnu system setuid) #:use-module (gnu packages) #:use-module (gnu packages admin) #:use-module (gnu packages avahi) #:use-module (gnu packages shells) #:use-module (gnu packages tls) #:use-module (gnu packages gtk) #:use-module (gnu packages gl) #:use-module (gnu packages vpn) #:use-module (gnu packages security-token) #:use-module (gnu packages virtualization) #:use-module (gnu services) #:use-module (gnu services linux) #:use-module (gnu services authentication) #:use-module (gnu services security-token) #:use-module (gnu services cups) #:use-module (gnu services desktop) #:use-module (gnu services networking) #:use-module (gnu services xorg) #:use-module (gnu services ssh) #:use-module (gnu services nix) #:use-module (gnu services sound) #:use-module (gnu services docker) #:use-module (gnu services avahi) #:use-module (gnu services spice) #:use-module (gnu services virtualization) #:use-module (gnu system locale) #:use-module (guix packages) #:use-module (nongnu packages linux) #:use-module (srfi srfi-1) #:use-module (freya bootloader uki) #:use-module (freya packages certs) #:use-module (freya packages linux) #:use-module (freya packages qt) #:use-module (freya packages wm) #:use-module (freya packages pulseaudio) #:use-module (freya packages networking) #:use-module (freya packages virtualization)) (define-public %freya-user-accounts (cons* (user-account (name "freya") (comment "Freya Murphy") (group "users") (home-directory "/home/freya") (shell (file-append zsh "/bin/zsh")) (supplementary-groups '("wheel" "audio" "lp" "docker" "plugdev" "libvirt" "kvm" "netdev" "video" "tty"))) %base-user-accounts)) (define-public %freya-locale (list (locale-definition (name "en_US.utf8") (source "en_US") (charset "UTF-8")) (locale-definition (name "ja_JP.utf8") (source "ja_JP") (charset "UTF-8")))) (define-public %freya-base-packages (append ;; append guix and nonguix base packages (specifications->packages (list ; video audio "mesa" "mesa-utils" ; firmware "sof-firmware" "amd-microcode" "v4l2loopback-linux-module" ; terrminal "alsa-utils" "vim" "neovim" ; basic utils "curl" "htop" "git" "zsh" "opendoas" "linux-pam" "bind:utils" "unzip" "p7zip" "acpi" "tree" "rlwrap" "netcat" "ripgrep" "ncurses" "jq" "openssl")) ;; append certs (list freya-ca-certs) ;; append guix base packages %base-packages)) (define-public %freya-packages (append ;; append guix and nonguix packages (specifications->packages (list ; gtk "wxwidgets" "gtk+" "dconf" "gnome-themes-extra" "adwaita-icon-theme" "hicolor-icon-theme" ; wayland x11 "wl-clipboard" "libx11" "xorg-server-xwayland" "xf86-video-qxl" ; video audio "glu" "libglvnd" "vulkan-loader" "vulkan-validationlayers" "vulkan-tools" "vulkan-headers" "spirv-tools" "spirv-headers" "sdl2" "openal" "freealut" ; xdg "xdg-utils" "xdg-desktop-portal" ; system daemons "docker" "containerd" "avahi" "gnupg" "light" "brightnessctl" "wireguard-tools" "libpcap" ; fonts "font-fira-mono" "font-google-noto-sans-cjk" "font-jetbrains-mono" "font-dejavu" ; misc "qemu")) ;; append custom packages (list ; qt qt5-styleplugins qt6gtk2 ; bluetooth bluez-new ; pactl pulseaudio-new ; system virt-manager-ovmf) ;; append freya base backages %freya-base-packages)) (define-public %freya-base-services (append (list ; pam (service pam-limits-service-type) ; openssh (service openssh-service-type)) ; base guix desktop services (modify-services %desktop-services (guix-service-type config => (guix-configuration (inherit config) (substitute-urls (append (list "https://substitutes.nonguix.org") %default-substitute-urls)) (authorized-keys (append (list (local-file "../../certs/non-guix.pub")) %default-authorized-guix-keys)))) (udev-service-type config => (udev-configuration (inherit config))) (delete pulseaudio-service-type) (delete gdm-service-type) (delete avahi-service-type) (delete alsa-service-type) (delete screen-locker-service-type)))) (define-public %freya-services (append %freya-base-services (list ; nix (service nix-service-type) ; wirerguard (simple-service 'wireguard-module kernel-module-loader-service-type '("wireguard")) ; printing (service cups-service-type (cups-configuration (web-interface? #t))) (service avahi-service-type (avahi-configuration (publish? #f) (publish-workstation? #f))) ; docker (service docker-service-type) (service containerd-service-type) ; libvirt (service libvirt-service-type (libvirt-configuration (libvirt libvirt-ovmf) (unix-sock-group "libvirt") (tls-port "16555"))) (service virtlog-service-type) (service spice-vdagent-service-type) ; audio (service bluetooth-service-type (bluetooth-configuration (bluez bluez-new) (experimental #t) (fast-connectable? #t))) ; yubikey (service pcscd-service-type) (udev-rules-service 'fido2 libfido2 #:groups '("plugdev"))))) (define-public %freya-setuid-programs (append (list ; doas (file-like->setuid-program (file-append (specification->package "opendoas") "/bin/doas"))) ; base setuid programs %setuid-programs)) (define-public %freya-file-systems (cons* ; /tmp (file-system (mount-point "/tmp") (device "none") (type "tmpfs") (check? #f)) %base-file-systems)) (define-public base-operating-system (operating-system (kernel linux-6.11) (firmware (list linux-firmware amd-microcode sof-firmware)) (locale "en_US.UTF-8") (locale-definitions %freya-locale) (timezone "America/New_York") (keyboard-layout (keyboard-layout "us")) (host-name "ThisWillChange") (users %freya-user-accounts) (packages %freya-packages) (services %freya-services) (name-service-switch %mdns-host-lookup-nss) (setuid-programs %freya-setuid-programs) (file-systems %freya-file-systems) (bootloader (bootloader-configuration (bootloader uefi-uki-bootloader) (targets (list "/boot/efi")) (keyboard-layout keyboard-layout)))))