From 288ccb3984c7cb46b67d0f6bf7fb6d53c5d7a2d3 Mon Sep 17 00:00:00 2001 From: bd Date: Sat, 13 Dec 2025 23:43:10 -0500 Subject: guix: full refactor of configuration structure --- guix/kolwynia/os/garmr.scm | 61 +++++++++++++++++ guix/kolwynia/os/garmr/file-systems.scm | 39 +++++++++++ guix/kolwynia/os/ymir.scm | 117 ++++++++++++++++++++++++++++++++ guix/kolwynia/os/ymir/packages.scm | 106 +++++++++++++++++++++++++++++ guix/kolwynia/os/ymir/users.scm | 28 ++++++++ 5 files changed, 351 insertions(+) create mode 100644 guix/kolwynia/os/garmr.scm create mode 100644 guix/kolwynia/os/garmr/file-systems.scm create mode 100644 guix/kolwynia/os/ymir.scm create mode 100644 guix/kolwynia/os/ymir/packages.scm create mode 100644 guix/kolwynia/os/ymir/users.scm (limited to 'guix/kolwynia/os') diff --git a/guix/kolwynia/os/garmr.scm b/guix/kolwynia/os/garmr.scm new file mode 100644 index 0000000..ad6cace --- /dev/null +++ b/guix/kolwynia/os/garmr.scm @@ -0,0 +1,61 @@ +(define-module (kolwynia os garmr) + #:use-module (gnu) + #:use-module (gnu packages) + #:use-module (gnu packages linux) + #:use-module (gnu packages gnome) + #:use-module (gnu packages networking) + #:use-module (gnu services) + #:use-module (gnu services guix) + #:use-module (gnu services pm) + #:use-module (guix gexp) + #:use-module (kolwynia os ymir) + #:use-module ((kolwynia os garmr file-systems) + #:prefix fs:) + #:use-module ((kolwynia os ymir packages) + #:prefix pkg:) + #:use-module ((kolwynia os ymir users) + #:prefix users:) + #:use-module (kolwynia home bdunahu)) + +;;; Commentary: +;;; +;;; garmr is a corebooted and fully-libre laptop +;;; +;;; Code: + +(operating-system + (inherit ymir) + (host-name "garmr") + + (packages (cons* brightnessctl tlp pkg:ymir-packages)) + + (services + (cons* + ;; laptop power management + (service tlp-service-type + (tlp-configuration + (cpu-scaling-governor-on-ac (list "powersave")) + (cpu-scaling-governor-on-bat (list "powersave")) + (energy-perf-policy-on-ac "powersave") + (energy-perf-policy-on-bat "powersave") + (pcie-aspm-on-ac "powersave") + (pcie-aspm-on-bat "powersave") + (sched-powersave-on-bat? #t) + (sched-powersave-on-ac? #t) + (sata-linkpwr-on-ac "min_power") + (sata-linkpwr-on-bat "min_power") + (start-charge-thresh-bat0 60) + (stop-charge-thresh-bat0 80))) + (service thermald-service-type) + (simple-service 'network-manager-applet + profile-service-type + (list network-manager-applet)) + (service guix-home-service-type + `((,users:bdunahu-str ,bdunahu))) + + (operating-system-user-services ymir))) + + (mapped-devices fs:%mapped-devices) + (file-systems fs:%file-systems)) + +;;; garmr.scm ends here diff --git a/guix/kolwynia/os/garmr/file-systems.scm b/guix/kolwynia/os/garmr/file-systems.scm new file mode 100644 index 0000000..352d1f2 --- /dev/null +++ b/guix/kolwynia/os/garmr/file-systems.scm @@ -0,0 +1,39 @@ +;;; Copyright © 2025 bdunahu +(define-module (kolwynia os garmr file-systems) + #:use-module (gnu system mapped-devices) + #:use-module (gnu system file-systems) + #:export (%mapped-devices %file-systems)) + +;;; Commentary: +;;; +;;; filesystems for garmr +;;; +;;; Code: + +(define %mapped-devices + (list (mapped-device + (source (uuid "671c8094-c8cd-47f9-8332-25513f16917b")) + (target "hidden") + (type luks-device-mapping)))) + +(define %file-systems + (cons* (file-system + (mount-point "/boot/efi") + (device (uuid + "1A7A-026F" + 'fat32)) + (type "vfat")) + (file-system + (mount-point "/home") + (device "/dev/mapper/hidden") + (type "ext4") + (dependencies %mapped-devices)) + (file-system + (mount-point "/") + (device (uuid + "0a0b9520-308f-4072-a62b-b91ffacdc5b0" + 'ext4)) + (type "ext4")) + %base-file-systems)) + +;;; file-systems.scm ends here diff --git a/guix/kolwynia/os/ymir.scm b/guix/kolwynia/os/ymir.scm new file mode 100644 index 0000000..bba1b3b --- /dev/null +++ b/guix/kolwynia/os/ymir.scm @@ -0,0 +1,117 @@ +;;; Copyright © 2025 bdunahu +(define-module (kolwynia os ymir) + #:use-module ((kolwynia os ymir users) + #:prefix users:) + #:use-module ((kolwynia os ymir packages) + #:prefix pkg:) + #:use-module (gnu) + #:use-module (gnu services desktop) + #:use-module (gnu system) + #:use-module (gnu packages suckless) + #:export (ymir)) + +;;; Commentary: +;;; +;;; ymir defines a default system configuration +;;; +;;; Code: + +(use-service-modules audio admin avahi base + dbus desktop file-sharing + networking sound ssh xorg) + +;;; generates a temporary file to notify a keyboard was plugged. +(define %keyboard-udev-rule + (udev-rule + "90-keyboard-hotplug.rules" + (string-append "ATTR{idVendor}==\"04b4\", ATTR{idProduct}==\"0510\", ACTION==\"add\", RUN+=\"/run/current-system/profile/bin/touch /tmp/keyboard_plugged\" RUN+=\"/run/current-system/profile/bin/chown " users:bdunahu-str " /tmp/keyboard_plugged\""))) + +(define ymir + (operating-system + (host-name "ymir") + (locale "en_US.utf8") + (timezone + (if #f + "America/New_York" + "America/Denver")) + (keyboard-layout + (keyboard-layout "us" + #:options '("ctrl:hyper_capscontrol"))) + (kernel-arguments + (delete "quiet" + %default-kernel-arguments)) + + (users (cons* users:bdunahu + %base-user-accounts)) + + (bootloader (bootloader-configuration + (bootloader grub-efi-bootloader) + (targets (list "/boot/efi")) + (timeout 1) + (keyboard-layout keyboard-layout))) + + (packages pkg:ymir-packages) + (services + `( + ;; so that non-root users in the wheel group can + ;; perform administrative tasks (similar to "sudo"). + ,polkit-wheel-service + ;; The global fontconfig cache directory can sometimes contain + ;; stale entries, possibly referencing fonts that have been GC'd, + ;; so mount it read-only. + ,fontconfig-file-system-service + + ,(service network-manager-service-type) + ,(service wpa-supplicant-service-type) ; needed by NetworkManager + ,(service modem-manager-service-type) + ,(service usb-modeswitch-service-type) + + ;; The D-Bus clique. + ,(service avahi-service-type) + ,(service udisks-service-type) + ,(service upower-service-type) + ,(service accountsservice-service-type) + ,(service cups-pk-helper-service-type) + ,(service colord-service-type) + ,(service geoclue-service-type) + ,(service polkit-service-type) + ,(service elogind-service-type + (elogind-configuration + (handle-power-key 'hibernate))) + ,(service dbus-root-service-type) + + ,(service ntp-service-type) + + ;; openssh + ,(service openssh-service-type + (openssh-configuration + (x11-forwarding? #t) + (permit-root-login 'prohibit-password) + (password-authentication? #f))) + + ;; xorg + ,(service screen-locker-service-type + (screen-locker-configuration + (name "slock") + (program (file-append slock "/bin/slock")))) + ,(service x11-socket-directory-service-type) + ,(udev-rules-service 'keyboard-hotplug %keyboard-udev-rule) + + ;; audio + ,(service pulseaudio-service-type) + ,(service alsa-service-type) + + ;; TODO: don't do this expensive operation; just copy file. + ;; ,(simple-service 'add-extra-hosts + ;; hosts-service-type + ;; (map + ;; (lambda (x) + ;; (host "0.0.0.0" x)) + ;; (read-hosts "/home/bdunahu/.config/guix/assets/blocklist.txt"))) + + ,@%base-services)) + + ;; OVERRIDE + (file-systems '()))) + +;;; ymir.scm ends here diff --git a/guix/kolwynia/os/ymir/packages.scm b/guix/kolwynia/os/ymir/packages.scm new file mode 100644 index 0000000..9331b10 --- /dev/null +++ b/guix/kolwynia/os/ymir/packages.scm @@ -0,0 +1,106 @@ +;;; Copyright © 2025 bdunahu +(define-module (kolwynia os ymir packages) + #:use-module (gnu) + #:use-module (gnu system) + #:use-module (guix packages) + #:export (ymir-packages-utils + ymir-packages-linux + ymir-packages-interactive + ymir-packages-networking + ymir-packages)) + +;;; Commentary: +;;; Code: + +(use-package-modules + admin + bash + compression + cryptsetup + curl + databases + firmware + gawk + guile + guile-xyz + less + linux + man + networking + nss + pciutils + rust-apps + screen + texinfo + text-editors + version-control + vim + wget) + +(define ymir-packages-utils + (list bash + bzip2 + coreutils + curl + diffutils + e2fsprogs + findutils + gawk + grep + guile-3.0-latest + gzip + lzip + man-pages + patch + procps + psmisc + recutils + screen + sed + shadow + tar + unzip + which + xz + zip + zstd)) + +(define ymir-packages-linux + (list cryptsetup + eudev + kmod + pciutils + usbutils + util-linux+udev)) + +(define ymir-packages-interactive + (list git + guile-colorized + guile-readline + info-reader + kbd + less + man-db + mg + ripgrep + sudo + sysstat + vim)) + +(define ymir-packages-networking + (list inetutils + iproute + isc-dhcp + iw + macchanger + nss-certs + wget + wireless-tools)) + +(define ymir-packages + (append ymir-packages-interactive + ymir-packages-linux + ymir-packages-networking + ymir-packages-utils)) + +;;; packages.scm ends here diff --git a/guix/kolwynia/os/ymir/users.scm b/guix/kolwynia/os/ymir/users.scm new file mode 100644 index 0000000..a577998 --- /dev/null +++ b/guix/kolwynia/os/ymir/users.scm @@ -0,0 +1,28 @@ +;;; Copyright © 2025 bdunahu +(define-module (kolwynia os ymir users) + #:use-module (gnu system accounts) + #:use-module (kolwynia utils) + #:export (bdunahu-str bdunahu)) + +;;; Commentary: +;;; +;;; provides the bdunahu user configuration +;;; +;;; Code: + +(define bdunahu-str "bdunahu") +(define bdunahu + (user-account + (name bdunahu-str) + (comment bdunahu-str) + (group "users") + (home-directory (string-append "/home/" bdunahu-str)) + (supplementary-groups + (cons* "audio" + "dialout" + "netdev" + "video" + "wheel" + (garmr?* "kvm"))))) + +;;; users.scm ends here -- cgit v1.2.3