summaryrefslogtreecommitdiff
path: root/guix/kolwynia/os
diff options
context:
space:
mode:
authorbd <bdunahu@operationnull.com>2025-12-13 23:43:10 -0500
committerbdunahu <bdunahu@operationnull.com>2026-01-03 21:46:06 -0700
commit288ccb3984c7cb46b67d0f6bf7fb6d53c5d7a2d3 (patch)
tree47091f5aeede90e1364546e8122cd55e6d7f2971 /guix/kolwynia/os
parentdf14036eb22ff9326c2806eb3f8cafc0d3042efa (diff)
guix: full refactor of configuration structure
Diffstat (limited to 'guix/kolwynia/os')
-rw-r--r--guix/kolwynia/os/garmr.scm61
-rw-r--r--guix/kolwynia/os/garmr/file-systems.scm39
-rw-r--r--guix/kolwynia/os/ymir.scm117
-rw-r--r--guix/kolwynia/os/ymir/packages.scm106
-rw-r--r--guix/kolwynia/os/ymir/users.scm28
5 files changed, 351 insertions, 0 deletions
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 <bdunahu@operationnull.com>
+(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 <bdunahu@operationnull.com>
+(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 <bdunahu@operationnull.com>
+(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 <bdunahu@operationnull.com>
+(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