summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.config/guix/garm.scm94
-rw-r--r--.config/guix/graveyard/hati.scm80
-rw-r--r--.config/guix/graveyard/kvasir.scm77
-rw-r--r--.config/guix/graveyard/vali.scm84
-rw-r--r--.config/guix/modules/packages/packages.scm190
-rw-r--r--.config/guix/modules/services/base.scm204
-rw-r--r--.config/guix/modules/services/emacs.scm82
-rw-r--r--.config/guix/modules/services/xorg.scm80
-rw-r--r--.config/guix/modules/ymir.scm71
-rw-r--r--.config/guix/nott.scm79
-rw-r--r--.gitignore15
-rw-r--r--README15
-rw-r--r--README.org15
-rw-r--r--guix/kolwynia/home/bdunahu.scm175
-rw-r--r--guix/kolwynia/home/bdunahu/app-preferences.scm219
-rw-r--r--guix/kolwynia/home/bdunahu/files/.config/emacs/early-init.el (renamed from .config/emacs/early-init.el)0
-rw-r--r--guix/kolwynia/home/bdunahu/files/.config/emacs/gnus.el (renamed from .config/emacs/gnus.el)0
-rw-r--r--guix/kolwynia/home/bdunahu/files/.config/emacs/images/raven.png (renamed from .config/emacs/images/raven.png)bin134324 -> 134324 bytes
-rw-r--r--guix/kolwynia/home/bdunahu/files/.config/emacs/images/wolf.png (renamed from .config/emacs/images/wolf.png)bin117636 -> 117636 bytes
-rw-r--r--guix/kolwynia/home/bdunahu/files/.config/emacs/init.el (renamed from .config/emacs/init.el)2
-rw-r--r--guix/kolwynia/home/bdunahu/files/.config/emacs/libraries/copyright.el (renamed from .config/emacs/libraries/copyright.el)0
-rw-r--r--guix/kolwynia/home/bdunahu/files/.config/emacs/libraries/exwm-outer-gaps.el (renamed from .config/emacs/libraries/exwm-outer-gaps.el)0
-rw-r--r--guix/kolwynia/home/bdunahu/files/.config/emacs/libraries/fill-column.el (renamed from .config/emacs/libraries/fill-column.el)0
-rw-r--r--guix/kolwynia/home/bdunahu/files/.config/emacs/libraries/powerthesaurus.el (renamed from .config/emacs/libraries/powerthesaurus.el)0
-rw-r--r--guix/kolwynia/home/bdunahu/files/.config/emacs/libraries/selector.el (renamed from .config/emacs/libraries/selector.el)0
-rw-r--r--guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--browse.el (renamed from .config/emacs/modules/bd--browse.el)4
-rw-r--r--guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--buffer.el (renamed from .config/emacs/modules/bd--buffer.el)0
-rw-r--r--guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--chat.el (renamed from .config/emacs/modules/bd--chat.el)0
-rw-r--r--guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--devel.el (renamed from .config/emacs/modules/bd--devel.el)10
-rw-r--r--guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--dictionary.el (renamed from .config/emacs/modules/bd--dictionary.el)0
-rw-r--r--guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--emms.el (renamed from .config/emacs/modules/bd--emms.el)0
-rw-r--r--guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--exwm.el (renamed from .config/emacs/modules/bd--exwm.el)0
-rw-r--r--guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--files.el (renamed from .config/emacs/modules/bd--files.el)0
-rw-r--r--guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--gpg.el (renamed from .config/emacs/modules/bd--gpg.el)0
-rw-r--r--guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--image.el (renamed from .config/emacs/modules/bd--image.el)0
-rw-r--r--guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--minibuffer.el (renamed from .config/emacs/modules/bd--minibuffer.el)0
-rw-r--r--guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--modeline.el (renamed from .config/emacs/modules/bd--modeline.el)0
-rw-r--r--guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--notes.el (renamed from .config/emacs/modules/bd--notes.el)0
-rw-r--r--guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--org.el (renamed from .config/emacs/modules/bd--org.el)2
-rw-r--r--guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--project.el (renamed from .config/emacs/modules/bd--project.el)0
-rw-r--r--guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--shells.el (renamed from .config/emacs/modules/bd--shells.el)0
-rw-r--r--guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--tabs.el (renamed from .config/emacs/modules/bd--tabs.el)0
-rw-r--r--guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--themes.el (renamed from .config/emacs/modules/bd--themes.el)0
-rw-r--r--guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--utility.el (renamed from .config/emacs/modules/bd--utility.el)0
-rw-r--r--guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--window.el (renamed from .config/emacs/modules/bd--window.el)0
-rw-r--r--guix/kolwynia/home/bdunahu/files/.config/eww/eww.scss (renamed from .config/eww/eww.scss)0
-rw-r--r--guix/kolwynia/home/bdunahu/files/.config/eww/eww.yuck (renamed from .config/eww/eww.yuck)0
-rw-r--r--guix/kolwynia/home/bdunahu/files/.config/eww/pollers.yuck (renamed from .config/eww/pollers.yuck)0
-rwxr-xr-xguix/kolwynia/home/bdunahu/files/.config/eww/scripts/getvol (renamed from .config/eww/scripts/getvol)0
-rwxr-xr-xguix/kolwynia/home/bdunahu/files/.config/eww/scripts/update_workspaces (renamed from .config/eww/scripts/update_workspaces)0
-rwxr-xr-xguix/kolwynia/home/bdunahu/files/.config/eww/scripts/update_x_names (renamed from .config/eww/scripts/update_x_names)0
-rw-r--r--guix/kolwynia/home/bdunahu/files/.config/eww/widgets.yuck (renamed from .config/eww/widgets.yuck)0
-rw-r--r--guix/kolwynia/home/bdunahu/files/.config/guix/channels.scm (renamed from .config/guix/channels.scm)0
-rw-r--r--guix/kolwynia/home/bdunahu/files/.config/zathura/zathurarc (renamed from .config/zathura/zathurarc)0
-rwxr-xr-xguix/kolwynia/home/bdunahu/files/.local/bin/bkup-home6
-rwxr-xr-xguix/kolwynia/home/bdunahu/files/.local/bin/fetch-album38
-rwxr-xr-xguix/kolwynia/home/bdunahu/files/.local/bin/guix-gc7
-rwxr-xr-xguix/kolwynia/home/bdunahu/files/.local/bin/mail-string4
-rwxr-xr-xguix/kolwynia/home/bdunahu/files/.local/bin/sort-music101
-rwxr-xr-xguix/kolwynia/home/bdunahu/files/.local/bin/string-weather3
-rwxr-xr-xguix/kolwynia/home/bdunahu/files/.local/bin/t1-string17
-rwxr-xr-xguix/kolwynia/home/bdunahu/files/.local/bin/tag-media44
-rwxr-xr-xguix/kolwynia/home/bdunahu/files/.local/bin/touchpad-defaults6
-rwxr-xr-xguix/kolwynia/home/bdunahu/files/.local/bin/unfreeze8
-rwxr-xr-xguix/kolwynia/home/bdunahu/files/.local/bin/upload43
-rwxr-xr-xguix/kolwynia/home/bdunahu/files/.local/bin/xkeyboard-auto12
-rwxr-xr-xguix/kolwynia/home/bdunahu/files/.local/bin/xkeyboard-layout12
-rwxr-xr-xguix/kolwynia/home/bdunahu/files/.local/bin/xkeyboard-toggle5
-rwxr-xr-xguix/kolwynia/home/bdunahu/files/.local/bin/xrandr-refresh10
-rwxr-xr-xguix/kolwynia/home/bdunahu/files/.local/bin/xrandr-toggle15
-rwxr-xr-xguix/kolwynia/home/bdunahu/files/.local/bin/xxinit6
-rw-r--r--guix/kolwynia/home/bdunahu/files/.xinitrc25
-rw-r--r--guix/kolwynia/home/bdunahu/files/.xkb/keymap/rocket (renamed from .xkb/keymap/rocket)0
-rw-r--r--guix/kolwynia/home/bdunahu/files/.xkb/keymap/standard7
-rw-r--r--guix/kolwynia/home/bdunahu/files/.xkb/symbols/rocket (renamed from .xkb/symbols/rocket)0
-rw-r--r--guix/kolwynia/home/bdunahu/packages.scm221
-rw-r--r--guix/kolwynia/home/bdunahu/ssh.scm43
-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
-rw-r--r--guix/kolwynia/utils.scm14
-rw-r--r--screenshots/desktop.pngbin0 -> 903378 bytes
84 files changed, 1440 insertions, 1056 deletions
diff --git a/.config/guix/garm.scm b/.config/guix/garm.scm
deleted file mode 100644
index e4d895c..0000000
--- a/.config/guix/garm.scm
+++ /dev/null
@@ -1,94 +0,0 @@
-(define-module (garm)
- #:use-module (gnu)
- #:use-module (gnu home)
- #:use-module (gnu home services)
- #: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 (packages packages)
- #:use-module (services base)
- #:use-module (services mail)
- #:use-module (services xorg)
- #:use-module (ymir))
-
-;;; Commentary:
-;;;
-;;; garm is a corebooted and fully-liberated laptop
-;;;
-;;; Code:
-
-(define home
- (home-environment
- (packages
- `(,@bd-packages-desktop
- ,@bd-packages-fun
- ,@bd-packages-extra
- ,@bd-packages-development))
- (services
- `(,@bd-base-home-services
- ,@bd-mail-home-services
- ,@bd-desktop-home-services))))
-
-
-(operating-system
- (inherit ymir)
- (host-name "garm")
-
- (packages
- `(,@bd-packages-system
- ,@bd-packages-laptop))
-
- (services
- `(,@bd-base-system-services
- ,@bd-desktop-system-services
- ,(service guix-home-service-type
- `((,username ,home)))
- ,(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))))
-
- (mapped-devices (list (mapped-device
- (source (uuid "671c8094-c8cd-47f9-8332-25513f16917b"))
- (target "hidden")
- (type luks-device-mapping))))
-
- (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)))
-
-
-;;; garm.scm ends here
diff --git a/.config/guix/graveyard/hati.scm b/.config/guix/graveyard/hati.scm
deleted file mode 100644
index db1a22f..0000000
--- a/.config/guix/graveyard/hati.scm
+++ /dev/null
@@ -1,80 +0,0 @@
-(define-module (hati)
- #:use-module (gnu)
- #:use-module (gnu home)
- #:use-module (gnu home services)
- #:use-module (gnu home services syncthing)
- #:use-module (gnu packages)
- #:use-module (gnu packages xorg)
- #:use-module (gnu services)
- #:use-module (gnu services guix)
- #:use-module (guix gexp)
- #:use-module (modules base)
- #:use-module (modules dwm)
- #:use-module (modules utils)
- #:use-module (modules xorg)
- #:use-module (modules ymir)
- #:use-module (modules pdf))
-
-;;; Commentary:
-;;;
-;;; hati is a asus/nvidia 3060 desktop
-;;;
-;;; Code:
-
-(define home
- (home-environment
- (services
- `(,@bd-base-home-services
- ,@bd-desktop-home-services
- ,@bd-pdf-services
- ,@bd-dwm-home-services
- ,(service home-syncthing-service-type)))))
-
-
-(operating-system
- (inherit ymir)
- (host-name "hati")
-
- ;; (all packages are system wide)
- (packages
- `(,@bd-base-system-packages
- ,@bd-desktop-system-packages
- ,@bd-dwm-system-packages
- ,@bd-mpd-package
-
- ;; machine-specific packages
- ,@(list
- xf86-video-nouveau)))
-
- (services
- `(,@bd-base-system-services
- ,@bd-desktop-system-services
- ,@bd-mpd-service
- ,(service guix-home-service-type
- `((,username ,home)))))
-
- (mapped-devices (list (mapped-device
- (source (uuid "1e9c3cd7-97c2-411a-975a-40222d185563"))
- (target "hidden")
- (type luks-device-mapping))))
-
- (file-systems (cons* (file-system
- (mount-point "/boot/efi")
- (device (uuid
- "1448-51AE"
- 'fat32))
- (type "vfat"))
- (file-system
- (mount-point "/home")
- (device "/dev/mapper/hidden")
- (type "ext4")
- (dependencies mapped-devices))
- (file-system
- (mount-point "/")
- (device (uuid
- "df334be4-5828-45b4-842a-9a8d97cfa40a"
- 'ext4))
- (type "ext4")) %base-file-systems)))
-
-
-;;; hati.scm ends here
diff --git a/.config/guix/graveyard/kvasir.scm b/.config/guix/graveyard/kvasir.scm
deleted file mode 100644
index b04f3e3..0000000
--- a/.config/guix/graveyard/kvasir.scm
+++ /dev/null
@@ -1,77 +0,0 @@
-(define-module (kvasir)
- #:use-module (gnu)
- #:use-module (gnu home)
- #:use-module (gnu home services)
- #:use-module (gnu home services dotfiles)
- #:use-module (gnu image)
- #:use-module (gnu packages)
- #:use-module (gnu packages linux)
- #:use-module (gnu services)
- #:use-module (gnu services guix)
- #:use-module (gnu system image)
- #:use-module (guix gexp)
- #:use-module (modules base)
- #:use-module (modules dwm)
- #:use-module (modules pdf)
- #:use-module (modules xorg)
- #:use-module (modules ymir))
-
-;;; Commentary:
-;;;
-;;; kvasir is a bootable usb
-;;;
-;;; Code:
-
-(define home
- (home-environment
- (services
- `(,@bd-base-home-services
- ,@bd-desktop-home-services
- ,@bd-pdf-services
- ,@bd-dwm-home-services
- ,(service home-dotfiles-service-type
- (home-dotfiles-configuration
- (directories '("/home/bdunahu/.dotfiles"))))))))
-
-
-(define system
- (operating-system
- (inherit ymir)
- (host-name "kvasir")
-
-
- ;; (all packages are system wide)
- (packages
- `(,@bd-base-system-packages
- ,@bd-dwm-system-packages
- ,@bd-desktop-system-packages
-
- ;; machine-specific packages
- ,@(list
- brightnessctl)))
-
- (services
- `(,@bd-base-system-services
- ,@bd-desktop-system-services
- ,(service guix-home-service-type
- `((,username ,home)))))
-
-
- (file-systems (cons* (file-system
- (mount-point "/boot/efi")
- (device (uuid
- "8A13-7018"
- 'fat32))
- (type "vfat"))
- (file-system
- (mount-point "/")
- (device (uuid
- "69a3593b-12bd-40ad-a932-007674a8cfe8"))
- (type "ext4")) %base-file-systems))))
-
-(image
- (inherit iso9660-image)
- (operating-system system))
-
-
-;;; kvasir.scm ends here
diff --git a/.config/guix/graveyard/vali.scm b/.config/guix/graveyard/vali.scm
deleted file mode 100644
index e5cf900..0000000
--- a/.config/guix/graveyard/vali.scm
+++ /dev/null
@@ -1,84 +0,0 @@
-(define-module (vali)
- #:use-module (gnu)
- #:use-module (gnu home)
- #:use-module (gnu home services)
- #:use-module (gnu home services syncthing)
- #:use-module (gnu packages)
- #:use-module (gnu packages linux)
- #:use-module (gnu services)
- #:use-module (gnu services guix)
- #:use-module (gnu services pm)
- #:use-module (guix gexp)
- #:use-module (modules base)
- #:use-module (modules dwm)
- #:use-module (modules utils)
- #:use-module (modules xorg)
- #:use-module (modules ymir)
- #:use-module (modules pdf))
-
-;;; Commentary:
-;;;
-;;; vali is a laptop
-;;;
-;;; Code:
-
-(define home
- (home-environment
- (services
- `(,@bd-base-home-services
- ,@bd-desktop-home-services
- ,@bd-pdf-services
- ,@bd-dwm-home-services
- ,(service home-syncthing-service-type)))))
-
-
-(operating-system
- (inherit ymir)
- (host-name "vali")
-
- ;; (all packages are system wide)
- (packages
- `(,@bd-base-system-packages
- ,@bd-desktop-system-packages
- ,@bd-dwm-system-packages
- ,@bd-mpd-package
- ,@bd-games-packages
-
- ;; machine-specific packages
- ,@(list
- brightnessctl
- tlp)))
-
- (services
- `(,@bd-base-system-services
- ,@bd-desktop-system-services
- ,@bd-mpd-service
- ,(service guix-home-service-type
- `((,username ,home)))
- ,(service tlp-service-type)))
-
- (mapped-devices (list (mapped-device
- (source (uuid "8d3ccf19-035a-4956-8ba7-7c00dfa3a02c"))
- (target "hidden")
- (type luks-device-mapping))))
-
- (file-systems (cons* (file-system
- (mount-point "/boot/efi")
- (device (uuid
- "8A13-7018"
- 'fat32))
- (type "vfat"))
- (file-system
- (mount-point "/home")
- (device "/dev/mapper/hidden")
- (type "ext4")
- (dependencies mapped-devices))
- (file-system
- (mount-point "/")
- (device (uuid
- "69a3593b-12bd-40ad-a932-007674a8cfe8"
- 'ext4))
- (type "ext4")) %base-file-systems)))
-
-
-;;; vali.scm ends here
diff --git a/.config/guix/modules/packages/packages.scm b/.config/guix/modules/packages/packages.scm
deleted file mode 100644
index a3ebd3e..0000000
--- a/.config/guix/modules/packages/packages.scm
+++ /dev/null
@@ -1,190 +0,0 @@
-(define-module (packages packages)
- #:use-module (gnu)
- #:use-module (gnu system)
- #:use-module (guix gexp)
- #:use-module (guix packages)
- #:use-module (tanelorn packages fonts)
- #:use-module (tanelorn packages wm)
- #:use-module (tanelorn packages engineering)
- #:export (bd-packages-system
- bd-packages-laptop
- bd-packages-desktop
- bd-packages-fun
- bd-packages-extra
- bd-packages-development
- ))
-
-;;; Commentary:
-;;; Code:
-
-(use-package-modules
- admin ;; netcat
- algebra ;; bc
- assembly ;; nasm
- base ;; make
- chromium ;; ungoogled-chromium
- clojure ;; clojure
- commencement ;; gcc-toolchain
- compression ;; unzip, zip
- compton ;; picom
- cryptsetup ;; cryptsetup
- curl ;; curl
- databases ;; recutils
- education ;; anki
- emulators ;; mupen64plus*, bsnes, mgba
- engineering ;; rizin, cutter
- fonts ;; font-terminus, font-openmoji
- fontutils ;; fontconfig
- freedesktop ;; xdg-utils
- games ;; nethack
- gdb ;; gdb
- gimp ;; gimp-next
- gnome ;; brightnessctl
- gnupg ;; gnupg
- graphviz ;; graphviz
- haskell-xyz ;; pandoc
- image ;; flameshot
- imagemagick ;; imagemagick
- image-viewers ;; feh, nsxiv
- libreoffice ;; libreoffice
- librewolf ;; librewolf
- linux ;; sysstat, tlp, alsa-plugins
- lisp ;; sbcl
- mail ;; offlineimap
- man ;; man-pages
- networking ;; maccchanger
- package-management ;; stow
- password-utils ;; pass-otp, password-store
- pkg-config ;; pkg-config
- pdf ;; xpdf, pdfgrep, zathura, zathura-pdf-mupdf
- pulseaudio ;; pavucontrol, pulseaudio,
- python ;; python
- rsync ;; rsync
- rust-apps ;; ripgrep
- screen ;; screen
- texlive ;; texlive, texlive-biber
- tex ;; texlive-dvipng
- tor-browsers ;; torbrowser
- version-control ;; git
- video ;; ffmpeg, mpv, yt-dlp
- vim ;; vim
- virtualization ;; qemu
- web ;; jq
- xdisorg ;; xdotool, xrdb
- xorg ;; xf86-input-libinput, xf86-video-fbdev, xinit...
- )
-
-
-
-(define bd-packages-system
- (append!
- (list
- cryptsetup
- curl
- git
- man-pages
- recutils
- ripgrep
- screen
- sysstat
- unzip
- vim
- zip)
- %base-packages))
-
-(define bd-packages-laptop
- (list
- brightnessctl
- macchanger
- tlp))
-
-(define bd-packages-desktop
- (list
- alsa-plugins
- eww/x11
- feh
- ffmpeg
- flameshot
- fontconfig
- font-iosevka
- font-medieval-sharp
- font-openmoji
- font-runa-mono
- font-terminus
- gnupg
- graphviz
- imagemagick
- libreoffice
- mpv
- nsxiv
- password-store
- pass-otp
- pavucontrol
- picom
- pulseaudio
- setxkbmap
- texlive
- texlive-biber
- texlive-dvipng
- texlive-pgfgantt
- torbrowser
- xdg-utils
- xf86-input-libinput
- xf86-video-fbdev
- xinit
- xinput
- xkbcomp
- xorg-server
- xrandr
- xrdb
- xset
- xss-lock
- yt-dlp
- zathura
- zathura-pdf-mupdf
- ))
-
-(define bd-packages-fun
- (list
- bsnes
- dolphin-emu
- mgba
- mupen64plus-ui-console
- mupen64plus-video-glide64mk2
- nethack
- ))
-
-(define bd-packages-extra
- (list
- gimp
- librewolf
- pdfgrep
- qemu
- ungoogled-chromium
- xpdf ; pdftotext
- ))
-
-(define bd-packages-development
- (list
- anki
- bc
- cl-asdf
- clojure
- clojure-tools
- gcc-toolchain
- gdb
- gnu-make
- jq
- nasm
- netcat
- offlineimap3
- pandoc
- pkg-config
- python
- radare2-6.0.7
- rsync
- sbcl
- stow
- ))
-
-;;; packages.scm ends here
diff --git a/.config/guix/modules/services/base.scm b/.config/guix/modules/services/base.scm
deleted file mode 100644
index f990846..0000000
--- a/.config/guix/modules/services/base.scm
+++ /dev/null
@@ -1,204 +0,0 @@
-(define-module (services base)
- #:use-module (gnu)
- #:use-module (gnu home services)
- #:use-module (gnu home services dict)
- #:use-module (gnu home services gnupg)
- #:use-module (gnu home services mcron)
- #:use-module (gnu home services shells)
- #:use-module (gnu home services shepherd)
- #:use-module (gnu home services ssh)
- #:use-module (gnu home services xdg)
- #:use-module (gnu packages gnupg)
- #:use-module (ice-9 rdelim)
- #:use-module (gnu system)
- #:use-module (guix gexp)
- #:use-module (services emacs)
- #:export (bd-base-system-services
- bd-base-home-services))
-
-(use-service-modules admin avahi base
- dbus desktop file-sharing
- networking ssh)
-
-(define (read-hosts filename)
- (let ((port (open-input-file filename)))
- (let loop ((lines '()))
- (let ((line (read-line port)))
- (if (eof-object? line)
- (begin (close-input-port port)
- lines)
- (loop (cons line lines)))))))
-
-(define bd-base-system-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)
-
- ,(service openssh-service-type
- (openssh-configuration
- (x11-forwarding? #t)
- (permit-root-login 'prohibit-password)
- (password-authentication? #f)))
- ,(service tor-service-type)
- ,(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))
-
-(define bd-base-home-services
- (list
- (service bd-home-emacs-service-type)
- (service home-shepherd-service-type)
-
- (service home-dicod-service-type)
-
- (service home-gpg-agent-service-type
- (home-gpg-agent-configuration
- (pinentry-program
- (file-append pinentry-emacs "/bin/pinentry-emacs"))
- (ssh-support? #t)
- (default-cache-ttl 28800)
- (max-cache-ttl 28800)
- (default-cache-ttl-ssh 28800)
- (max-cache-ttl-ssh 28800)))
-
- (service home-bash-service-type
- (home-bash-configuration
- (aliases '(("aardwolf" . "telnet aardmud.org 23")
- ("auth" . "echo -e \"$PWD\n\" >> $HOME/.config/guix/shell-authorized-directories")
- ("cp" . "cp -i")
- ("grep" . "grep --color=auto")
- ("guix-rcfg" . "sudo guix system -L ${HOME}/.config/guix/modules/ reconfigure ${HOME}/.config/guix/${HOSTNAME}.scm")
- ("ll" . "ls -l")
- ("ls" . "ls -p --color=auto")
- ("mkd" . "mkdir -pv")
- ("mv" . "mv -i")
- ("rig-shell" . "screen /dev/ttyUSB0 115200")
- ("rm" . "rm -i")
- ("suspend" . "sudo loginctl suspend")
- ("vi" . "vim")
- ("xeb" . "emacsclient -nce '(switch-to-buffer nil)'")
- ("xet" . "emacsclient -nce '(shell)'")
- ("ytta" . "yt-dlp --extract-audio --format bestaudio/best")
- ("yttv" . "yt-dlp -f b")))
-
- (bashrc (list (plain-file "bashrc" "
-# converts above aliases into eshell aliases automatically
-alias | sed -E \"s/^alias ([^=]+)='(.*)'$/alias \\1 \\2 \\$*/g; s/'\\\\\\''/'/g;\" >~/.config/emacs/eshell/alias
-")))
- (environment-variables
- '(
- ("BROWSER" . "librewolf")
-
- ("VISUAL" . "emacsclient")
- ("EDITOR" . "emacsclient")
-
- ("NETHACKOPTIONS" . "@$XDG_CONFIG_HOME/nethack/config")
-
- ("PATH" . "$HOME/.local/bin:$PATH")
- ("PYTHONPATH" . "$HOME/pt/cs598/nemesis/:$PYTHONPATH")
- ("ZATHURA_PLUGINS_PATH" . "$HOME/.guix-home/profile/lib/zathura")
- ))))
-
- (service home-mcron-service-type
- (home-mcron-configuration
- (jobs
- (list
- #~(job
- ;; twenty minutes
- (lambda (current-time) (+ current-time (* 20 60)))
- "offlineimap")
- #~(job
- (lambda (current-time) (+ current-time (* 5 60)))
- "~/.local/bin/set-t1")))))
-
- (service home-openssh-service-type
- (home-openssh-configuration
- (hosts
- (list (openssh-host (name "garm")
- (host-name "localhost")
- (user "root"))
- ;; (openssh-host (name "vali")
- ;; (host-name "192.168.1.136")
- ;; (user "bdunahu"))
- (openssh-host (name "surt")
- (host-name "192.168.1.250")
- (user "root"))
- (openssh-host (name "heimdallr")
- (host-name "operationnull.com")
- (user "root"))
- (openssh-host (name "nott")
- (host-name "localhost")
- (user "bdunahu")
- (port 2222)
- (extra-content " UserKnownHostsFile=/dev/null
- StrictHostKeyChecking=no
-"))))))
-
- (service home-xdg-user-directories-service-type
- (home-xdg-user-directories-configuration
- (desktop "$HOME/dl")
- (documents "$HOME/dc")
- (download "$HOME/dl")
- (music "$HOME/ik")
- (pictures "$HOME/md/ig")
- (publicshare "$HOME")
- (templates "$HOME")
- (videos "$HOME/md/vi")))
-
- (service home-xdg-configuration-files-service-type
- `(("gdbinit"
- ,(plain-file
- (plain-file-name %default-gdbinit)
- (string-append (plain-file-content %default-gdbinit)
- "set disassembly-flavor intel
-set confirm no
-set history filename ~/.cache/gdb/history
-set history save on
-set history size unlimited")))))
-
- (service home-xdg-mime-applications-service-type
- (home-xdg-mime-applications-configuration
- (default
- '((application/x-bittorrent . torrent.desktop)
- (x-scheme-handler/magnet . torrent.desktop)
- (x-scheme-handler/http . librewolf.desktop)
- (x-scheme-handler/https . librewolf.desktop)
- ))
- (desktop-entries
- (list
- (xdg-desktop-entry
- (file "torrent")
- (name "Torrent")
- (type 'application)
- (config '((exec . "transmission-remote -a %u"))))))))))
diff --git a/.config/guix/modules/services/emacs.scm b/.config/guix/modules/services/emacs.scm
deleted file mode 100644
index ba3a0a7..0000000
--- a/.config/guix/modules/services/emacs.scm
+++ /dev/null
@@ -1,82 +0,0 @@
-(define-module (services emacs)
- #:use-module (gnu)
- #:use-module (gnu home services)
- #:use-module (gnu services)
- #:use-module (gnu services configuration)
- #:use-module (gnu system)
- #:use-module (guix gexp)
- #:use-module (guix packages)
- #:use-module (tanelorn packages emacs-xyz)
- #:export (bd-home-emacs-service-type))
-
-;;; Commentary:
-;;; Code:
-
-(use-package-modules
- emacs
- photo
- aspell
- emacs-build
- emacs-xyz
- cpp
- gnupg
- python-xyz
- machine-learning
- mail
- lisp
- xdisorg)
-
-(define (bd-emacs-package-list config)
- (list
- emacs-next
- pinentry-emacs
-
- emacs-atomic-chrome
- emacs-cider
- emacs-clojure-mode
- emacs-dash
- emacs-denote
- emacs-denote-journal
- emacs-elpher
- emacs-emms
- emacs-exwm
- emacs-f
- emacs-gptel
- emacs-guix
- emacs-hydra
- emacs-jeison
- emacs-lua-mode
- emacs-paredit
- emacs-pinentry
- emacs-rainbow-delimiters
- emacs-rainbow-mode
- emacs-s
- emacs-slime
- emacs-vterm
- emacs-yasnippet
-
- aspell
- aspell-dict-en
-
- wmctrl ;; for exwm
-
- perl-image-exiftool ;; for emms
-
- ccls ;; for eglot
- python-lsp-server ;;
-
- llama-cpp ;; for emacs-gptel
- ))
-
-
-(define bd-home-emacs-service-type
- (service-type (name 'emacs-config)
- (description "A service which bundles required
-emacs packages.")
- (extensions
- (list (service-extension
- home-profile-service-type
- bd-emacs-package-list)))
- (default-value #f)))
-
-;;; emacs.scm ends here
diff --git a/.config/guix/modules/services/xorg.scm b/.config/guix/modules/services/xorg.scm
deleted file mode 100644
index 065540b..0000000
--- a/.config/guix/modules/services/xorg.scm
+++ /dev/null
@@ -1,80 +0,0 @@
-(define-module (services xorg)
- #:use-module (gnu)
- #:use-module (gnu home services)
- #:use-module (gnu home services desktop)
- #:use-module (guix gexp)
- #:use-module (guix packages)
- #:use-module (gnu packages suckless)
- #:use-module (ymir)
- #:export (bd-desktop-system-services
- bd-desktop-home-services
- ))
-
-(use-service-modules audio desktop networking
- sound xorg)
-
-(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 " username " /tmp/keyboard_plugged\"")))
-
-(define bd-desktop-system-services
- (list
- (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)
-
- (service pulseaudio-service-type)
- (service alsa-service-type)))
-
-(define bd-desktop-home-services
- (list
- (simple-service 'dotfiles
- home-files-service-type
- `((".Xresources"
- ,(plain-file "Xresources" "
-Nsxiv.window.background: #000000
-Nsxiv.window.foreground: #FFFFFF
-Nsxiv.bar.font: MedievalSharp:size=9
-"))
- (".xinitrc"
- ,(plain-file "xinitrc" "
-#!/bin/sh
-
-userresources=$HOME/.Xresources
-usermodmap=$HOME/.Xmodmap
-
-# merge in defaults and keymaps
-
-if [ -f \"$userresources\" ]; then
-
- xrdb -merge \"$userresources\"
-
-fi
-
-if [ -f \"$usermodmap\" ]; then
- xmodmap \"$usermodmap\"
-fi
-
-picom --backend=glx &
-xss-lock -- slock &
-xset r rate 250 70
-xset s 600
-touchpad-defaults
-xrandr-toggle
-xkeyboard-auto &
-eww daemon
-eww open bar
-exec emacs -mm"))
- (".config/gtk-2.0/settings.ini"
- ,(plain-file "settings.ini" "
-[Settings]
-gtk-application-prefer-dark-theme=1\n"))
- (".config/gtk-3.0/settings.ini"
- ,(plain-file "settings.ini" "
-[Settings]
-gtk-application-prefer-dark-theme=1\n"))))))
diff --git a/.config/guix/modules/ymir.scm b/.config/guix/modules/ymir.scm
deleted file mode 100644
index 7327980..0000000
--- a/.config/guix/modules/ymir.scm
+++ /dev/null
@@ -1,71 +0,0 @@
-(define-module (ymir)
- #:use-module (gnu)
- #:use-module (gnu services desktop)
- #:use-module (gnu system)
- #:export (username
- user
- ymir))
-
-
-;;; Commentary:
-;;;
-;;; ymir defines a default system configuration
-;;;
-;;; Code:
-
-(define username "bdunahu")
-(define user (user-account
- (name username)
- (comment username)
- (group "users")
- (home-directory (string-append "/home/" username))
- (supplementary-groups '("audio"
- "netdev"
- "video"
- "wheel"
- "dialout"
- "kvm"))))
-
-
-(define ymir
- (operating-system
- (host-name "ymir")
- (locale "en_US.utf8")
- (timezone
- (if #t
- "America/New_York"
- "America/Denver"))
- (keyboard-layout
- (keyboard-layout "us"
- ;; #:variant '("workman")
- #:options '("ctrl:hyper_capscontrol")))
- (kernel-arguments
- (delete "quiet"
- %default-kernel-arguments))
-
- ;; 'root' is implicit
- (users (cons* user
- %base-user-accounts))
-
- ;; grub (uefi)
- (bootloader (bootloader-configuration
- (bootloader grub-efi-bootloader)
- (targets (list "/boot/efi"))
- (timeout 1)
- (keyboard-layout keyboard-layout)))
-
- ;; OVERRIDE THESE
- (packages
- %base-packages)
- (services
- %base-services)
- (file-systems (cons*
- (file-system
- (mount-point "/")
- (device "none")
- (type "tmpfs")
- (check? #f))
- %base-file-systems))))
-
-
-;;; ymir.scm ends here
diff --git a/.config/guix/nott.scm b/.config/guix/nott.scm
deleted file mode 100644
index b9418c6..0000000
--- a/.config/guix/nott.scm
+++ /dev/null
@@ -1,79 +0,0 @@
-(define-module (nott)
- #:use-module (gnu)
- #:use-module (guix)
- #:use-module (packages packages)
- #:use-module (ymir)
- #:use-module (srfi srfi-1))
-
-(use-service-modules desktop mcron networking spice ssh xorg sddm)
-(use-package-modules bootloaders certs fonts nvi package-management wget xorg)
-
-;;; Commentary:
-;;;
-;;; nott is a vm
-;;;
-;;; Code:
-
-
-(operating-system
- (inherit ymir)
- (host-name "nott")
-
- (label (string-append "GNU Guix "
- (or (getenv "GUIX_DISPLAYED_VERSION")
- (package-version guix))))
-
- (firmware '())
-
- (packages
- `(,@bd-packages-system))
- (services
- (append (list (service xfce-desktop-service-type)
-
- (service slim-service-type
- (slim-configuration
- (auto-login? #t)
- (default-user username)
- (xorg-configuration
- (xorg-configuration
- (modules (cons xf86-video-qxl
- %default-xorg-modules))))))
-
- (service openssh-service-type)
-
- (service spice-vdagent-service-type)
-
- (service dhcp-client-service-type))
-
- (remove (lambda (service)
- (let ((type (service-kind service)))
- (or (memq type
- (list gdm-service-type
- sddm-service-type
- wpa-supplicant-service-type
- cups-pk-helper-service-type
- network-manager-service-type
- modem-manager-service-type))
- (eq? 'network-manager-applet
- (service-type-name type)))))
- (modify-services %desktop-services
- (login-service-type config =>
- (login-configuration
- (inherit config)))
-
- (guix-service-type config =>
- (guix-configuration
- (inherit config)
- (guix (current-guix))))))))
-
- (bootloader (bootloader-configuration
- (bootloader grub-bootloader)
- (targets (list "/dev/sda1"))
- (terminal-outputs '(console))))
-
- (file-systems (cons (file-system
- (mount-point "/")
- (device "/dev/sda2")
- (type "ext4")) %base-file-systems))
-
- (name-service-switch %mdns-host-lookup-nss))
diff --git a/.gitignore b/.gitignore
index 4f1a54c..d24c56a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,10 +1,5 @@
-.config/emacs/bookmarks
-.config/offlineimap/
-.config/emacs/*.desktop
-.config/emacs/projects
-.config/emacs/eshell/
-.config/emacs/gnus-home/
-.local/bin/
-.config/emacs/modules/bd--secret.el
-.config/guix/assets/*
-.config/guix/modules/services/mail.scm
+guix/assets/*
+guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--secret.el
+guix/kolwynia/home/bdunahu/files/.config/offlineimap/
+guix/kolwynia/home/bdunahu/files/.local/bin/set-t1
+guix/kolwynia/home/bdunahu/mail.scm
diff --git a/README b/README
new file mode 100644
index 0000000..b1c8f1d
--- /dev/null
+++ b/README
@@ -0,0 +1,15 @@
+# -*- mode: org; -*-
+
+Kolwynia contains the system declarations for my systems, such that they will never be lost.
+
+[[file:screenshots/desktop.png]]
+
+Namely, these systems are declared using [[https://guix.gnu.org/][GNU Guix]]. The main function of GNU Guix is to effortlessly set up [[https://www.gnu.org/software/emacs/][GNU Emacs]], the everything tool.
+
+** Inspiration
+
+For the GNU Guix configuration structure, I took inspiration from:
+- https://codeberg.org/look/misako
+
+For the GNU Emacs configuration, I similarly borrowed organization from:
+- https://protesilaos.com/emacs/dotemacs
diff --git a/README.org b/README.org
new file mode 100644
index 0000000..891d764
--- /dev/null
+++ b/README.org
@@ -0,0 +1,15 @@
+# -*- mode: org; -*-
+
+Kolwynia contains the system declarations for my systems, such that they will never be lost.
+
+[[file:screenshots/desktop.png]]
+
+Namely, these systems are declared using [[https://guix.gnu.org/][GNU Guix]]. The main function of GNU Guix is to effortlessly set up [[https://www.gnu.org/software/emacs/][GNU Emacs]], the everything tool. All configuration files, including Emacs, are installed with =guix home=, and are thus found in =/guix/kolwynia/home/bdunahu/files/=.
+
+** Inspiration
+
+For the GNU Guix configuration structure, I took inspiration from:
+- https://codeberg.org/look/misako
+
+For the GNU Emacs configuration, I similarly borrowed organization from:
+- https://protesilaos.com/emacs/dotemacs
diff --git a/guix/kolwynia/home/bdunahu.scm b/guix/kolwynia/home/bdunahu.scm
new file mode 100644
index 0000000..98105a0
--- /dev/null
+++ b/guix/kolwynia/home/bdunahu.scm
@@ -0,0 +1,175 @@
+;;; Copyright © 2025-2026 bdunahu <bdunahu@operationnull.com>
+(define-module (kolwynia home bdunahu)
+ #:use-module (gnu)
+ #:use-module (gnu home services)
+ #:use-module (gnu home services desktop)
+ #:use-module (gnu home services dict)
+ #:use-module (gnu home services dotfiles)
+ #:use-module (gnu home services gnupg)
+ #:use-module (gnu home services mail)
+ #:use-module (gnu home services mcron)
+ #:use-module (gnu home services shells)
+ #:use-module (gnu home services shepherd)
+ #:use-module (gnu home services ssh)
+ #:use-module (gnu home services xdg)
+ #:use-module (gnu packages gnupg) ;pinentry-emacs
+ #:use-module ((kolwynia home bdunahu packages)
+ #:prefix pkgs:)
+ #:use-module ((kolwynia home bdunahu app-preferences)
+ #:prefix app:)
+ #:use-module ((kolwynia home bdunahu ssh)
+ #:prefix ssh-host:)
+ #:use-module ((kolwynia home bdunahu mail) ;gitignored
+ #:prefix mail:)
+ #:use-module (gnu home)
+ #:export (bdunahu))
+
+;;; Commentary:
+;;; Code:
+
+(define bdunahu
+ (home-environment
+ (packages
+ `(,@pkgs:emacs
+ ,@pkgs:browser
+ ,@pkgs:pass
+ ,@pkgs:media
+ ,@pkgs:mail
+ ,@pkgs:tex
+ ,@pkgs:desktop
+ ,@pkgs:pdf
+ ,@pkgs:fonts
+ ,@pkgs:development
+ ,@pkgs:reverse-engineering
+ ,@pkgs:university
+ ,@pkgs:emulators
+ ,@pkgs:games))
+ (services
+ (list (service home-shepherd-service-type)
+ (service home-dicod-service-type)
+ ;; TODO: causes EXWM XELB: Authorization required,
+ ;; but no authorization protocol specified.
+ ;; ,(service home-startx-command-service-type)
+ (service home-dotfiles-service-type
+ (home-dotfiles-configuration
+ (directories '("./bdunahu/files"))))
+ (service home-gpg-agent-service-type
+ (home-gpg-agent-configuration
+ (pinentry-program
+ (file-append pinentry-emacs "/bin/pinentry-emacs"))
+ (ssh-support? #t)
+ (default-cache-ttl 28800)
+ (max-cache-ttl 28800)
+ (default-cache-ttl-ssh 28800)
+ (max-cache-ttl-ssh 28800)))
+ (service home-xdg-user-directories-service-type
+ (home-xdg-user-directories-configuration
+ (desktop "$HOME/dl")
+ (documents "$HOME/dc")
+ (download "$HOME/dl")
+ (music "$HOME/ik")
+ (pictures "$HOME/md/ig")
+ (publicshare "$HOME")
+ (templates "$HOME")
+ (videos "$HOME/md/vi")))
+ (service home-bash-service-type
+ (home-bash-configuration
+ (aliases
+ '(("aardwolf" . "telnet aardmud.org 23")
+ ("auth" . "echo -e \"$PWD\n\" >> $HOME/.config/guix/shell-authorized-directories")
+ ("cp" . "cp -i")
+ ("grep" . "grep --color=auto")
+ ("guix-rcfg" . "sudo guix system -L ${HOME}/.dotfiles/guix/ reconfigure ${HOME}/.dotfiles/guix/kolwynia/os/${HOSTNAME}.scm")
+ ("ll" . "ls -l")
+ ("ls" . "ls -p --color=auto")
+ ("mkd" . "mkdir -pv")
+ ("mv" . "mv -i")
+ ("rm" . "rm -i")
+ ("suspend" . "sudo loginctl suspend")
+ ("usb0-shell" . "screen /dev/ttyUSB0 115200")
+ ("vi" . "vim")
+ ("xeb" . "emacsclient -nce '(switch-to-buffer nil)'")
+ ("xet" . "emacsclient -nce '(shell)'")
+ ("ytta" . "yt-dlp --extract-audio --format bestaudio/best")
+ ("yttv" . "yt-dlp -f b")))
+
+ (bashrc (list (plain-file "bashrc" "
+# converts above aliases into eshell aliases automatically
+alias | sed -E \"s/^alias ([^=]+)='(.*)'$/alias \\1 \\2 \\$*/g; s/'\\\\\\''/'/g;\" >~/.config/emacs/eshell/alias
+")))
+ (environment-variables
+ `(("PATH" . "$HOME/.local/bin:$PATH")
+ ("BROWSER" . ,(car app:default-browser))
+ ("VISUAL" . ,(car app:default-editor))
+ ("EDITOR" . ,(car app:default-editor))
+ ("NETHACKOPTIONS" . "@$XDG_CONFIG_HOME/nethack/config")
+ ("ZATHURA_PLUGINS_PATH" . "$HOME/.guix-home/profile/lib/zathura")))))
+ (service home-openssh-service-type
+ (home-openssh-configuration
+ (hosts
+ (list ssh-host:garmr
+ ssh-host:heimdallr
+ ssh-host:nott
+ ssh-host:surt
+ ssh-host:codeberg))))
+ (service home-mcron-service-type
+ (home-mcron-configuration
+ (jobs
+ (list
+ #~(job
+ ;; twenty minutes
+ (lambda (current-time) (+ current-time (* 20 60)))
+ "offlineimap")
+ #~(job
+ (lambda (current-time) (+ current-time (* 5 60)))
+ "~/.local/bin/set-t1")))))
+ (service home-xdg-configuration-files-service-type
+ `(("gdbinit"
+ ,(plain-file
+ (plain-file-name %default-gdbinit)
+ (string-append (plain-file-content %default-gdbinit)
+ "set disassembly-flavor intel
+set confirm no
+set history filename ~/.cache/gdb/history
+set history save on
+set history size unlimited")))))
+ (service home-msmtp-service-type
+ (home-msmtp-configuration
+ (defaults
+ (msmtp-configuration
+ (port 587)
+ (tls? #t)
+ (tls-starttls? #t)
+ (log-file "/home/bdunahu/.local/state/msmtp.log")
+ (auth? #t)))
+ (accounts
+ (list
+ mail:operationnull
+ mail:umass))
+ (default-account "operationnull")))
+ (service home-xdg-mime-applications-service-type
+ (home-xdg-mime-applications-configuration
+ (default app:mime-app-alist)
+ (desktop-entries
+ (list
+ (xdg-desktop-entry
+ (file "torrent")
+ (name "Torrent")
+ (type 'application)
+ (config '((exec . "transmission-remote -a %u"))))))))
+ (simple-service 'xorg-dot
+ home-files-service-type
+ `((".Xresources"
+ ,(plain-file "Xresources" "
+Nsxiv.window.background: #000000
+Nsxiv.window.foreground: #FFFFFF
+Nsxiv.bar.font: MedievalSharp:size=9
+"))
+ (".config/gtk-2.0/settings.ini"
+ ,(plain-file "settings.ini" "[Settings]
+gtk-application-prefer-dark-theme=1\n"))
+ (".config/gtk-3.0/settings.ini"
+ ,(plain-file "settings.ini" "[Settings]
+gtk-application-prefer-dark-theme=1\n"))))))))
+
+;;; bdunahu.scm ends here
diff --git a/guix/kolwynia/home/bdunahu/app-preferences.scm b/guix/kolwynia/home/bdunahu/app-preferences.scm
new file mode 100644
index 0000000..b794f2d
--- /dev/null
+++ b/guix/kolwynia/home/bdunahu/app-preferences.scm
@@ -0,0 +1,219 @@
+;;; Copyright © 2026 bdunahu <bdunahu@operationnull.com>
+(define-module (kolwynia home bdunahu app-preferences)
+ #:export (default-browser
+ default-editor
+ default-media
+ default-image
+ default-pdf
+ default-torrent
+ mime-app-alist))
+
+;;; Commentary:
+;;; the 'torrent' xdg app is defined in bdunahu.scm
+;;; Code:
+
+(define default-browser '("librewolf" . "librewolf.desktop"))
+(define default-editor '("emacsclient" . "emacsclient.desktop"))
+(define default-media '("mpv" . "mpv.desktop"))
+(define default-image '("nsxiv" . "nsxiv.desktop"))
+(define default-pdf '("zathura" . "zathura.desktop"))
+(define default-torrent '("torrent" . "torrent.desktop"))
+
+(define browser-mime
+ '("application/x-extension-htm"
+ "application/x-extension-xht"
+ "application/x-extension-xhtml"
+ "application/xhtml+xml"
+ "text/html"
+ "x-scheme-handler/http"
+ "x-scheme-handler/https"))
+
+(define editor-mime
+ '("application/json"
+ "application/x-sh"
+ "text/javascript"
+ "text/markdown"
+ "text/plain"
+ "text/troff"
+ "text/x-c"
+ "text/x-c++"
+ "text/x-diff"
+ "text/x-lisp"
+ "text/xml"
+ "text/x-scheme"
+ "text/x-shellscript"
+ "text/x-tex"))
+
+(define file-manager-mime
+ '("inode/directory"))
+
+(define media-mime
+ '("application/mxf"
+ "application/ogg"
+ "application/sdp"
+ "application/smil"
+ "application/streamingmedia"
+ "application/vnd.apple.mpegurl"
+ "application/vnd.ms-asf"
+ "application/vnd.rn-realmedia"
+ "application/vnd.rn-realmedia-vbr"
+ "application/x-cue"
+ "application/x-extension-m4a"
+ "application/x-extension-mp4"
+ "application/x-matroska"
+ "application/x-mpegurl"
+ "application/x-ogg"
+ "application/x-ogm"
+ "application/x-ogm-audio"
+ "application/x-ogm-video"
+ "application/x-shorten"
+ "application/x-smil"
+ "application/x-streamingmedia"
+ "audio/3gpp"
+ "audio/3gpp2"
+ "audio/aac"
+ "audio/ac3"
+ "audio/aiff"
+ "audio/AMR"
+ "audio/amr-wb"
+ "audio/dv"
+ "audio/eac3"
+ "audio/flac"
+ "audio/m3u"
+ "audio/m4a"
+ "audio/mp1"
+ "audio/mp2"
+ "audio/mp3"
+ "audio/mp4"
+ "audio/mpeg"
+ "audio/mpeg2"
+ "audio/mpeg3"
+ "audio/mpegurl"
+ "audio/mpg"
+ "audio/musepack"
+ "audio/ogg"
+ "audio/opus"
+ "audio/rn-mpeg"
+ "audio/scpls"
+ "audio/vnd.dolby.heaac.1"
+ "audio/vnd.dolby.heaac.2"
+ "audio/vnd.dts"
+ "audio/vnd.dts.hd"
+ "audio/vnd.rn-realaudio"
+ "audio/vorbis"
+ "audio/wav"
+ "audio/webm"
+ "audio/x-aac"
+ "audio/x-adpcm"
+ "audio/x-aiff"
+ "audio/x-ape"
+ "audio/x-m4a"
+ "audio/x-matroska"
+ "audio/x-mp1"
+ "audio/x-mp2"
+ "audio/x-mp3"
+ "audio/x-mpegurl"
+ "audio/x-mpg"
+ "audio/x-ms-asf"
+ "audio/x-ms-wma"
+ "audio/x-musepack"
+ "audio/x-pls"
+ "audio/x-pn-au"
+ "audio/x-pn-realaudio"
+ "audio/x-pn-wav"
+ "audio/x-pn-windows-pcm"
+ "audio/x-realaudio"
+ "audio/x-scpls"
+ "audio/x-shorten"
+ "audio/x-tta"
+ "audio/x-vorbis"
+ "audio/x-vorbis+ogg"
+ "audio/x-wav"
+ "audio/x-wavpack"
+ "video/3gp"
+ "video/3gpp"
+ "video/3gpp2"
+ "video/avi"
+ "video/divx"
+ "video/dv"
+ "video/fli"
+ "video/flv"
+ "video/mkv"
+ "video/mp2t"
+ "video/mp4"
+ "video/mp4v-es"
+ "video/mpeg"
+ "video/msvideo"
+ "video/ogg"
+ "video/quicktime"
+ "video/vnd.divx"
+ "video/vnd.mpegurl"
+ "video/vnd.rn-realvideo"
+ "video/webm"
+ "video/x-avi"
+ "video/x-flc"
+ "video/x-flic"
+ "video/x-flv"
+ "video/x-m4v"
+ "video/x-matroska"
+ "video/x-mpeg2"
+ "video/x-mpeg3"
+ "video/x-ms-afs"
+ "video/x-ms-asf"
+ "video/x-msvideo"
+ "video/x-ms-wmv"
+ "video/x-ms-wmx"
+ "video/x-ms-wvxvideo"
+ "video/x-ogm"
+ "video/x-ogm+ogg"
+ "video/x-theora"
+ "video/x-theora+ogg"))
+
+(define image-mime
+ '("image/avif"
+ "image/bmp"
+ "image/gif"
+ "image/heif"
+ "image/jpeg"
+ "image/jpg"
+ "image/pjpeg"
+ "image/png"
+ "image/tiff"
+ "image/x-bmp"
+ "image/x-pcx"
+ "image/x-png"
+ "image/x-portable-anymap"
+ "image/x-portable-bitmap"
+ "image/x-portable-graymap"
+ "image/x-portable-pixmap"
+ "image/x-tga"
+ "image/x-xbitmap"))
+
+(define pdf-mime
+ '("application/pdf"
+ "application/epub+zip"))
+
+(define torrent-mime
+ '("application/x-bittorrent"
+ "x-scheme-handler/magnet"))
+
+(define mime-app-alist
+ (apply append
+ (map (lambda (app types)
+ (map (lambda (e) (cons e (cdr app))) types))
+ `(,default-browser
+ ,default-editor
+ ,default-editor
+ ,default-media
+ ,default-image
+ ,default-pdf
+ ,default-torrent)
+ `(,browser-mime
+ ,editor-mime
+ ,file-manager-mime
+ ,media-mime
+ ,image-mime
+ ,pdf-mime
+ ,torrent-mime))))
+
+;;; app-preferences.scm ends here
diff --git a/.config/emacs/early-init.el b/guix/kolwynia/home/bdunahu/files/.config/emacs/early-init.el
index 037dc17..037dc17 100644
--- a/.config/emacs/early-init.el
+++ b/guix/kolwynia/home/bdunahu/files/.config/emacs/early-init.el
diff --git a/.config/emacs/gnus.el b/guix/kolwynia/home/bdunahu/files/.config/emacs/gnus.el
index 8482ec9..8482ec9 100644
--- a/.config/emacs/gnus.el
+++ b/guix/kolwynia/home/bdunahu/files/.config/emacs/gnus.el
diff --git a/.config/emacs/images/raven.png b/guix/kolwynia/home/bdunahu/files/.config/emacs/images/raven.png
index 6f27c08..6f27c08 100644
--- a/.config/emacs/images/raven.png
+++ b/guix/kolwynia/home/bdunahu/files/.config/emacs/images/raven.png
Binary files differ
diff --git a/.config/emacs/images/wolf.png b/guix/kolwynia/home/bdunahu/files/.config/emacs/images/wolf.png
index fabad74..fabad74 100644
--- a/.config/emacs/images/wolf.png
+++ b/guix/kolwynia/home/bdunahu/files/.config/emacs/images/wolf.png
Binary files differ
diff --git a/.config/emacs/init.el b/guix/kolwynia/home/bdunahu/files/.config/emacs/init.el
index 23070b5..7243419 100644
--- a/.config/emacs/init.el
+++ b/guix/kolwynia/home/bdunahu/files/.config/emacs/init.el
@@ -52,11 +52,11 @@
vc-follow-symlinks t
completion-ignore-case t
save-place-mode t
+ indent-tabs-mode nil
read-buffer-completion-ignore-case t)
(setq-default tab-width 8)
(add-to-list 'default-frame-alist '(alpha . (92 . 92)))
(blink-cursor-mode -1)
-(indent-tabs-mode 0)
(fringe-mode '(0 . 0))
(global-visual-line-mode t)
(menu-bar-mode -1)
diff --git a/.config/emacs/libraries/copyright.el b/guix/kolwynia/home/bdunahu/files/.config/emacs/libraries/copyright.el
index 112512d..112512d 100644
--- a/.config/emacs/libraries/copyright.el
+++ b/guix/kolwynia/home/bdunahu/files/.config/emacs/libraries/copyright.el
diff --git a/.config/emacs/libraries/exwm-outer-gaps.el b/guix/kolwynia/home/bdunahu/files/.config/emacs/libraries/exwm-outer-gaps.el
index c315e8b..c315e8b 100644
--- a/.config/emacs/libraries/exwm-outer-gaps.el
+++ b/guix/kolwynia/home/bdunahu/files/.config/emacs/libraries/exwm-outer-gaps.el
diff --git a/.config/emacs/libraries/fill-column.el b/guix/kolwynia/home/bdunahu/files/.config/emacs/libraries/fill-column.el
index 2a70cd6..2a70cd6 100644
--- a/.config/emacs/libraries/fill-column.el
+++ b/guix/kolwynia/home/bdunahu/files/.config/emacs/libraries/fill-column.el
diff --git a/.config/emacs/libraries/powerthesaurus.el b/guix/kolwynia/home/bdunahu/files/.config/emacs/libraries/powerthesaurus.el
index 2c76df0..2c76df0 100644
--- a/.config/emacs/libraries/powerthesaurus.el
+++ b/guix/kolwynia/home/bdunahu/files/.config/emacs/libraries/powerthesaurus.el
diff --git a/.config/emacs/libraries/selector.el b/guix/kolwynia/home/bdunahu/files/.config/emacs/libraries/selector.el
index 3b77190..3b77190 100644
--- a/.config/emacs/libraries/selector.el
+++ b/guix/kolwynia/home/bdunahu/files/.config/emacs/libraries/selector.el
diff --git a/.config/emacs/modules/bd--browse.el b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--browse.el
index 33bc951..a1b185f 100644
--- a/.config/emacs/modules/bd--browse.el
+++ b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--browse.el
@@ -64,8 +64,8 @@
(selector-source-create
"Browser"
:candidates
- (list (bd/search-candidate "SearXNG" "https://searx.operationnull.com/searxng/search?q=" 'wolf)
- (bd/search-candidate "DuckDuckGo" "https://duckduckgo.com/html/?q=" 'eww)
+ (list (bd/search-candidate "DuckDuckGo" "https://duckduckgo.com/html/?q=" 'wolf)
+ (bd/search-candidate "SearXNG" "https://searx.operationnull.com/searxng/search?q=" 'wolf)
(bd/search-candidate "SearXNG-E" "https://searx.operationnull.com/searxng/search?q=" 'eww)
(bd/search-candidate "Wikipedia" "https://en.wikipedia.org/w/index.php?search=" 'eww)
(bd/search-candidate "Invidious" "https://inv.nadeko.net/search?q=" 'eww)
diff --git a/.config/emacs/modules/bd--buffer.el b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--buffer.el
index 4a09805..4a09805 100644
--- a/.config/emacs/modules/bd--buffer.el
+++ b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--buffer.el
diff --git a/.config/emacs/modules/bd--chat.el b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--chat.el
index 5fa0c2d..5fa0c2d 100644
--- a/.config/emacs/modules/bd--chat.el
+++ b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--chat.el
diff --git a/.config/emacs/modules/bd--devel.el b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--devel.el
index 0c17367..dfc9f15 100644
--- a/.config/emacs/modules/bd--devel.el
+++ b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--devel.el
@@ -166,7 +166,15 @@ Otherwise, open the repository's main page."
(use-package rainbow-mode
:hook css-mode)
-(use-package lua-mode)
+(use-package lua-mode
+ :config
+ (setopt lua-indent-level 4
+ lua-indent-nested-block-content-align nil)
+ (defun lua-at-most-one-indent (old-function &rest arguments)
+ (let ((old-res (apply old-function arguments)))
+ (if (> old-res lua-indent-level) lua-indent-level old-res)))
+ (advice-add #'lua-calculate-indentation-block-modifier
+ :around #'lua-at-most-one-indent))
(use-package clojure-mode)
diff --git a/.config/emacs/modules/bd--dictionary.el b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--dictionary.el
index e032837..e032837 100644
--- a/.config/emacs/modules/bd--dictionary.el
+++ b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--dictionary.el
diff --git a/.config/emacs/modules/bd--emms.el b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--emms.el
index f4e5064..f4e5064 100644
--- a/.config/emacs/modules/bd--emms.el
+++ b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--emms.el
diff --git a/.config/emacs/modules/bd--exwm.el b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--exwm.el
index 1738ebe..1738ebe 100644
--- a/.config/emacs/modules/bd--exwm.el
+++ b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--exwm.el
diff --git a/.config/emacs/modules/bd--files.el b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--files.el
index c2f3df8..c2f3df8 100644
--- a/.config/emacs/modules/bd--files.el
+++ b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--files.el
diff --git a/.config/emacs/modules/bd--gpg.el b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--gpg.el
index 88d9425..88d9425 100644
--- a/.config/emacs/modules/bd--gpg.el
+++ b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--gpg.el
diff --git a/.config/emacs/modules/bd--image.el b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--image.el
index 1d5876c..1d5876c 100644
--- a/.config/emacs/modules/bd--image.el
+++ b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--image.el
diff --git a/.config/emacs/modules/bd--minibuffer.el b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--minibuffer.el
index cf5641b..cf5641b 100644
--- a/.config/emacs/modules/bd--minibuffer.el
+++ b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--minibuffer.el
diff --git a/.config/emacs/modules/bd--modeline.el b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--modeline.el
index 2ca7ccb..2ca7ccb 100644
--- a/.config/emacs/modules/bd--modeline.el
+++ b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--modeline.el
diff --git a/.config/emacs/modules/bd--notes.el b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--notes.el
index 13f80f4..13f80f4 100644
--- a/.config/emacs/modules/bd--notes.el
+++ b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--notes.el
diff --git a/.config/emacs/modules/bd--org.el b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--org.el
index b32af41..b88a72b 100644
--- a/.config/emacs/modules/bd--org.el
+++ b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--org.el
@@ -154,7 +154,7 @@
agenda views.")
(defvar-local bd/device-list
- '(("garm" . ?G)
+ '(("garmr" . ?G)
("heimdallr" . ?H)
("hodr" . ?M)
("surt" . ?I)
diff --git a/.config/emacs/modules/bd--project.el b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--project.el
index 243e3cd..243e3cd 100644
--- a/.config/emacs/modules/bd--project.el
+++ b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--project.el
diff --git a/.config/emacs/modules/bd--shells.el b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--shells.el
index 1072694..1072694 100644
--- a/.config/emacs/modules/bd--shells.el
+++ b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--shells.el
diff --git a/.config/emacs/modules/bd--tabs.el b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--tabs.el
index 6d4f12f..6d4f12f 100644
--- a/.config/emacs/modules/bd--tabs.el
+++ b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--tabs.el
diff --git a/.config/emacs/modules/bd--themes.el b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--themes.el
index cd24cab..cd24cab 100644
--- a/.config/emacs/modules/bd--themes.el
+++ b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--themes.el
diff --git a/.config/emacs/modules/bd--utility.el b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--utility.el
index ee74f58..ee74f58 100644
--- a/.config/emacs/modules/bd--utility.el
+++ b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--utility.el
diff --git a/.config/emacs/modules/bd--window.el b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--window.el
index bdc173b..bdc173b 100644
--- a/.config/emacs/modules/bd--window.el
+++ b/guix/kolwynia/home/bdunahu/files/.config/emacs/modules/bd--window.el
diff --git a/.config/eww/eww.scss b/guix/kolwynia/home/bdunahu/files/.config/eww/eww.scss
index 198a00b..198a00b 100644
--- a/.config/eww/eww.scss
+++ b/guix/kolwynia/home/bdunahu/files/.config/eww/eww.scss
diff --git a/.config/eww/eww.yuck b/guix/kolwynia/home/bdunahu/files/.config/eww/eww.yuck
index 335a687..335a687 100644
--- a/.config/eww/eww.yuck
+++ b/guix/kolwynia/home/bdunahu/files/.config/eww/eww.yuck
diff --git a/.config/eww/pollers.yuck b/guix/kolwynia/home/bdunahu/files/.config/eww/pollers.yuck
index c3cdecf..c3cdecf 100644
--- a/.config/eww/pollers.yuck
+++ b/guix/kolwynia/home/bdunahu/files/.config/eww/pollers.yuck
diff --git a/.config/eww/scripts/getvol b/guix/kolwynia/home/bdunahu/files/.config/eww/scripts/getvol
index 9fbe60f..9fbe60f 100755
--- a/.config/eww/scripts/getvol
+++ b/guix/kolwynia/home/bdunahu/files/.config/eww/scripts/getvol
diff --git a/.config/eww/scripts/update_workspaces b/guix/kolwynia/home/bdunahu/files/.config/eww/scripts/update_workspaces
index 4fb1b1c..4fb1b1c 100755
--- a/.config/eww/scripts/update_workspaces
+++ b/guix/kolwynia/home/bdunahu/files/.config/eww/scripts/update_workspaces
diff --git a/.config/eww/scripts/update_x_names b/guix/kolwynia/home/bdunahu/files/.config/eww/scripts/update_x_names
index 63117ef..63117ef 100755
--- a/.config/eww/scripts/update_x_names
+++ b/guix/kolwynia/home/bdunahu/files/.config/eww/scripts/update_x_names
diff --git a/.config/eww/widgets.yuck b/guix/kolwynia/home/bdunahu/files/.config/eww/widgets.yuck
index c7ea4d4..c7ea4d4 100644
--- a/.config/eww/widgets.yuck
+++ b/guix/kolwynia/home/bdunahu/files/.config/eww/widgets.yuck
diff --git a/.config/guix/channels.scm b/guix/kolwynia/home/bdunahu/files/.config/guix/channels.scm
index f0ed659..f0ed659 100644
--- a/.config/guix/channels.scm
+++ b/guix/kolwynia/home/bdunahu/files/.config/guix/channels.scm
diff --git a/.config/zathura/zathurarc b/guix/kolwynia/home/bdunahu/files/.config/zathura/zathurarc
index ecdae54..ecdae54 100644
--- a/.config/zathura/zathurarc
+++ b/guix/kolwynia/home/bdunahu/files/.config/zathura/zathurarc
diff --git a/guix/kolwynia/home/bdunahu/files/.local/bin/bkup-home b/guix/kolwynia/home/bdunahu/files/.local/bin/bkup-home
new file mode 100755
index 0000000..b2d31b6
--- /dev/null
+++ b/guix/kolwynia/home/bdunahu/files/.local/bin/bkup-home
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+cryptsetup open /dev/sdb1 bkup
+mount /dev/mapper/bkup /mnt
+
+rsync -aPHAXSu --inplace --delete /home/ /mnt/
diff --git a/guix/kolwynia/home/bdunahu/files/.local/bin/fetch-album b/guix/kolwynia/home/bdunahu/files/.local/bin/fetch-album
new file mode 100755
index 0000000..3885f88
--- /dev/null
+++ b/guix/kolwynia/home/bdunahu/files/.local/bin/fetch-album
@@ -0,0 +1,38 @@
+#!/bin/sh
+
+err() { echo "Usage:
+ rename [OPTIONS]
+Options:
+ -d: delimiter
+ -a: artist/author
+ -A: album/book title
+ -y: year of publication
+You will be prompted for these fields if not given." && exit 1 ;}
+
+[ "$PWD" = "${HOME}/ik/tmp" ] || { echo "Unsafe directory!" && exit 1 ;}
+
+while getopts "d:a:A:y:" o; do case "${o}" in
+ d) delimiter="${OPTARG}" ;;
+ a) artist="${OPTARG}" ;;
+ A) album="${OPTARG}" ;;
+ y) year="${OPTARG}" ;;
+ *) printf "Invalid option: -%s\\n" "$OPTARG" && err ;;
+ esac done
+files=(*)
+echo "Reference: ${files[0]}"
+[ -z "$delimiter" ] && echo "What are the delimiters for these files?" && read -r delimiter
+echo "Which index contains the track title? (Starting from 1)" && read -r index
+
+[ -z "$artist" ] && echo 'Enter an artist.' && read -r artist
+[ -z "$album" ] && echo 'Enter an album.' && read -r album
+[ -z "$year" ] && echo 'Enter a year.' && read -r year
+
+for file in *;
+do
+ extension=$(echo $file | awk -F "." '{print $NF}')
+ title=$(echo $file | awk -F "${delimiter}" "{print \$${index}}" |
+ sed -re 's/^[[:blank:]]+|[[:blank:]]+$//g' -e 's/[[:blank:]]+/ /g')
+ new_file="${title}_${artist}_${album}_${year}.${extension}"
+ mv "./$file" "./$new_file"
+ tag-media -a "${artist}" -t "${title}" -A "${album}" -d "${year}" "${new_file}"
+done
diff --git a/guix/kolwynia/home/bdunahu/files/.local/bin/guix-gc b/guix/kolwynia/home/bdunahu/files/.local/bin/guix-gc
new file mode 100755
index 0000000..23a423b
--- /dev/null
+++ b/guix/kolwynia/home/bdunahu/files/.local/bin/guix-gc
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+sudo guix system delete-generations 2w
+guix home delete-generations 2w
+guix package --delete-generations=2w
+guix pull --delete-generations=2w
+guix gc
diff --git a/guix/kolwynia/home/bdunahu/files/.local/bin/mail-string b/guix/kolwynia/home/bdunahu/files/.local/bin/mail-string
new file mode 100755
index 0000000..e4f1d20
--- /dev/null
+++ b/guix/kolwynia/home/bdunahu/files/.local/bin/mail-string
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+mail="$(find /home/bdunahu/.ml/*/[Ii][Nn][Bb][Oo][Xx]/new/* -type f 2>/dev/null | wc -l)"
+echo -n "${mail}M"
diff --git a/guix/kolwynia/home/bdunahu/files/.local/bin/sort-music b/guix/kolwynia/home/bdunahu/files/.local/bin/sort-music
new file mode 100755
index 0000000..013f194
--- /dev/null
+++ b/guix/kolwynia/home/bdunahu/files/.local/bin/sort-music
@@ -0,0 +1,101 @@
+#!/usr/bin/env -S guix shell python -- python3
+
+''' Imports '''
+import argparse
+import logging
+import sys
+import glob
+import os
+
+''' Global variables '''
+logger = logging.getLogger('sort_music.py')
+
+'''-----------------------------------------'''
+
+def parse_arguments():
+ ''' Parse command line arguments '''
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-a', '--album', help='EXACT album name shared across designated files.',
+ required=True)
+ parser.add_argument('-f', '--format', help='ncmpcpp format of files. Default is %t_%a_%b_%y. Read the documentation for that program for more information. It MUST include an artist name (%a) and year (%y).',
+ default="%t_%a_%b_%y")
+ parser.add_argument('-v', '--verbose', help='Enable full debug output.',
+ action='store_true')
+ return parser.parse_args()
+
+
+
+def configure_logs(verbose):
+ ''' Configure program logging level '''
+ level = logging.DEBUG if verbose else logging.INFO
+
+ ''' Configure stream handler '''
+ stream_handler = logging.StreamHandler(sys.stdout)
+ stream_handler.setFormatter(logging.Formatter('%(name)s - %(levelname)s - %(message)s'))
+
+ ''' For main logger '''
+ logger.addHandler(stream_handler)
+ logger.setLevel(level)
+
+'''-----------------------------------------'''
+
+class SortMusic():
+ def __init__(self, logger, args):
+ self.logger = logger
+ self.album = args.album
+ self.delimiter = args.format[2]
+ self.artist_index = args.format.split(self.delimiter).index('%a')
+ self.year_index = args.format.split(self.delimiter).index('%y')
+
+ logger.info(f'Starting rename with file extension {self.album} and artist_index {self.artist_index}')
+
+ self.files = None # list of relevant files in specified directory
+ self.artist = None
+ self.year = None
+
+
+ def run(self):
+ self._find_files()
+ self._prompt()
+ self._organize()
+
+
+ def _find_files(self):
+ self.files = list(glob.glob(f"*{self.album}*"))
+ if len(self.files) == 0:
+ self.logger.error(f'Files in this album NOT found!')
+ exit(1)
+
+ self.artist = self.files[0].split(self.delimiter).pop(self.artist_index).rsplit(".",1)[0] # remove file extension (sometimes occurs)
+ self.year = self.files[0].split(self.delimiter).pop(self.year_index).rsplit(".",1)[0]
+
+ def _prompt(self):
+ self.logger.info(f'Found {len(self.files)} files written by {self.artist} in {self.year}.')
+ quit = input(f'Files will now be organized (y/n)\t').lower()
+
+ if not quit.startswith('y'):
+ exit(1)
+
+ def _organize(self):
+ path = f'./{self.artist}/({self.year}) {self.album}'
+ if not os.path.exists(path):
+ logger.info(f'Creating previously missing path {path}')
+ os.makedirs(path)
+ for file in self.files:
+ os.rename(f'./{file}', f'{path}/{file}')
+
+'''-----------------------------------------'''
+
+def main():
+ ''' This is the main function '''
+ args = parse_arguments()
+ configure_logs(args.verbose)
+
+ ''' Initialize and run '''
+ sorter = SortMusic(logger, args)
+ sorter.run()
+
+
+
+if __name__ == '__main__':
+ main()
diff --git a/guix/kolwynia/home/bdunahu/files/.local/bin/string-weather b/guix/kolwynia/home/bdunahu/files/.local/bin/string-weather
new file mode 100755
index 0000000..01ece24
--- /dev/null
+++ b/guix/kolwynia/home/bdunahu/files/.local/bin/string-weather
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+curl wttr.in/Amherst?format="%x+%t+%m\n"
diff --git a/guix/kolwynia/home/bdunahu/files/.local/bin/t1-string b/guix/kolwynia/home/bdunahu/files/.local/bin/t1-string
new file mode 100755
index 0000000..ffdd61a
--- /dev/null
+++ b/guix/kolwynia/home/bdunahu/files/.local/bin/t1-string
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+loop=$(cat /tmp/t1 | jq .stat | tr -d '"')
+[ -n "$loop" ] && echo -n "${loop} "
+bg=$(cat /tmp/t1 | jq .bg)
+[ -n "$bg" ] && echo -n "${bg}B "
+iob=$(cat /tmp/t1 | jq .iob)
+[ -n "$iob" ] && echo -n " ${iob}U"
+rbat=$(cat /tmp/t1 | jq .rbat)
+[ -n "$rbat" ] && [ "$rbat" -lt 25 ] && echo -n " RB"
+res=$(echo "$(cat /tmp/t1 | jq .res) * 100 / 1" | bc)
+[ -n "$res" ] && [ "$res" -lt 2500 ] && echo -n " PR"
+pbat=$(echo "$(cat /tmp/t1 | jq .pbat) * 100 / 1" | bc)
+[ -n "$pbat" ] && [ "$pbat" -lt 136 ] && echo -n " PB"
+cage=$(cat /tmp/t1 | jq .cage)
+[ -n "$cage" ] && [ 14 -lt "$cage" ] && echo -n " CA"
+echo -n
diff --git a/guix/kolwynia/home/bdunahu/files/.local/bin/tag-media b/guix/kolwynia/home/bdunahu/files/.local/bin/tag-media
new file mode 100755
index 0000000..64b4586
--- /dev/null
+++ b/guix/kolwynia/home/bdunahu/files/.local/bin/tag-media
@@ -0,0 +1,44 @@
+#!/bin/sh
+
+err() { echo "Usage:
+ tag [OPTIONS] file
+Options:
+ -a: artist/author
+ -t: song/chapter title
+ -A: album/book title
+ -d: year of publication
+ -g: genre
+ -c: comment
+You will be prompted for title, artist, album and date if not given." && exit 1 ;}
+
+while getopts "a:t:A:d:g:c:" o; do case "${o}" in
+ a) artist="${OPTARG}" ;;
+ t) title="${OPTARG}" ;;
+ A) album="${OPTARG}" ;;
+ d) date="${OPTARG}" ;;
+ g) genre="${OPTARG}" ;;
+ c) comment="${OPTARG}" ;;
+ *) printf "Invalid option: -%s\\n" "$OPTARG" && err ;;
+ esac done
+
+shift $((OPTIND - 1))
+
+file="$1"
+
+temp="$(mktemp -p "$(dirname "$file")")"
+trap 'rm -f $temp' HUP INT QUIT TERM PWR EXIT
+
+[ ! -f "$file" ] && echo 'Provide file to tag.' && err
+
+[ -z "$title" ] && echo 'Enter a title.' && read -r title
+[ -z "$artist" ] && echo 'Enter an artist.' && read -r artist
+[ -z "$album" ] && echo 'Enter an album.' && read -r album
+[ -z "$date" ] && echo 'Enter a date.' && read -r date
+
+cp -f "$file" "$temp" && ffmpeg -i "$temp" -map 0 -y -codec copy \
+ -metadata title="$title" \
+ -metadata album="$album" \
+ -metadata artist="$artist" \
+ -metadata date="$date" \
+ ${genre:+-metadata genre="$genre"} \
+ ${comment:+-metadata comment="$comment"} "$file"
diff --git a/guix/kolwynia/home/bdunahu/files/.local/bin/touchpad-defaults b/guix/kolwynia/home/bdunahu/files/.local/bin/touchpad-defaults
new file mode 100755
index 0000000..6c07797
--- /dev/null
+++ b/guix/kolwynia/home/bdunahu/files/.local/bin/touchpad-defaults
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+# see:
+# xinput --list
+# xinput --list-props 'ELAN0412:00 04F3:311D Touchpad'
+[[ $HOSTNAME == "garmr" ]] && xinput --set-prop "ELAN0412:00 04F3:311D Touchpad" "libinput Tapping Enabled" 1
diff --git a/guix/kolwynia/home/bdunahu/files/.local/bin/unfreeze b/guix/kolwynia/home/bdunahu/files/.local/bin/unfreeze
new file mode 100755
index 0000000..072473d
--- /dev/null
+++ b/guix/kolwynia/home/bdunahu/files/.local/bin/unfreeze
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+epid=$(pidof emacs)
+
+kill -USR2 "$epid"
+kill -USR1 "$epid"
+
+echo "Done."
diff --git a/guix/kolwynia/home/bdunahu/files/.local/bin/upload b/guix/kolwynia/home/bdunahu/files/.local/bin/upload
new file mode 100755
index 0000000..a2db9b5
--- /dev/null
+++ b/guix/kolwynia/home/bdunahu/files/.local/bin/upload
@@ -0,0 +1,43 @@
+#!/bin/sh
+
+
+err() { echo "Usage:
+ upload [OPTIONS]
+Options:
+ -t: time from now to expire in hours (default: 48)
+ file: a path to a file. If this is not given, receives input from stdin." && exit 1 ;}
+
+hours=48
+
+while getopts ":t:" opt; do
+ case $opt in
+ t)
+ hours=$OPTARG
+ if [[ $OPTARG =~ ^-?[0-9]+$ ]]; then
+ hours=$OPTARG
+ else
+ err
+ fi
+ ;;
+ *)
+ err
+ ;;
+ esac
+done
+
+shift $((OPTIND -1))
+
+if [ -n "$1" ] && [ -f "$1" ]; then
+ source="$1"
+ ext="${1##*.}"
+else
+ source=$(mktemp)
+ ext="txt"
+ cat > "$source"
+ chmod a+r "$source"
+fi
+
+dest="$(cat /dev/random | tr -dc 'a-zA-Z0-9' | fold -w 4 | head -n 1)-$(date -d "+$hours hours" +%s).$ext"
+
+scp "$source" "root@operationnull.com:/var/www/operationnull/paste/$dest" &&
+ echo "https://operationnull.com/paste/$dest"
diff --git a/guix/kolwynia/home/bdunahu/files/.local/bin/xkeyboard-auto b/guix/kolwynia/home/bdunahu/files/.local/bin/xkeyboard-auto
new file mode 100755
index 0000000..b81ced4
--- /dev/null
+++ b/guix/kolwynia/home/bdunahu/files/.local/bin/xkeyboard-auto
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+/home/bdunahu/.local/bin/xkeyboard-toggle
+while true;
+do
+ if [ -f /tmp/keyboard_plugged ]; then
+ rm /tmp/keyboard_plugged
+ sleep 2
+ /home/bdunahu/.local/bin/xkeyboard-toggle
+ fi
+ sleep 1
+done
diff --git a/guix/kolwynia/home/bdunahu/files/.local/bin/xkeyboard-layout b/guix/kolwynia/home/bdunahu/files/.local/bin/xkeyboard-layout
new file mode 100755
index 0000000..de6f7a2
--- /dev/null
+++ b/guix/kolwynia/home/bdunahu/files/.local/bin/xkeyboard-layout
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+WORKMAN=$(setxkbmap -print | grep "workman")
+echo $WORKMAN
+
+if [ -z WORKMAN ]; then
+ xkbcomp -I$HOME/.xkb ~/.xkb/keymap/standard $DISPLAY &&
+ echo 'Switched to standard layout.'
+else
+ test -f ~/.xkb/symbols/rocket && xkbcomp -I$HOME/.xkb ~/.xkb/keymap/rocket $DISPLAY &&
+ echo 'Switched to workman layout.'
+fi
diff --git a/guix/kolwynia/home/bdunahu/files/.local/bin/xkeyboard-toggle b/guix/kolwynia/home/bdunahu/files/.local/bin/xkeyboard-toggle
new file mode 100755
index 0000000..70f9516
--- /dev/null
+++ b/guix/kolwynia/home/bdunahu/files/.local/bin/xkeyboard-toggle
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+xset r rate 250 70
+xset s 600
+xkbcomp -I$HOME/.xkb ~/.xkb/keymap/standard $DISPLAY
diff --git a/guix/kolwynia/home/bdunahu/files/.local/bin/xrandr-refresh b/guix/kolwynia/home/bdunahu/files/.local/bin/xrandr-refresh
new file mode 100755
index 0000000..c9d55c5
--- /dev/null
+++ b/guix/kolwynia/home/bdunahu/files/.local/bin/xrandr-refresh
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+declare -i count=2
+declare -i seconds=1
+
+while ((count)); do
+ xrandr >/dev/null
+ sleep $seconds
+ ((count--))
+done \ No newline at end of file
diff --git a/guix/kolwynia/home/bdunahu/files/.local/bin/xrandr-toggle b/guix/kolwynia/home/bdunahu/files/.local/bin/xrandr-toggle
new file mode 100755
index 0000000..6acff6d
--- /dev/null
+++ b/guix/kolwynia/home/bdunahu/files/.local/bin/xrandr-toggle
@@ -0,0 +1,15 @@
+#!/bin/sh
+intern=eDP-1
+extern=DP-1
+extern2=HDMI-1
+
+if xrandr | grep "$extern disconnected" >/dev/null; then
+ xrandr --output "$extern" --off --output "$intern" --mode 1920x1080 --auto
+# usually, HDMI-1 is a 2560x1440 screen, so cannot be duplicated well
+elif xrandr | grep "$extern2 connected" >/dev/null; then
+ xrandr --output "$extern2" --primary --mode 1920x1080 --auto --same-as "$intern"
+else
+ xrandr --output "$extern" --primary --mode 1920x1080 --auto --same-as "$intern"
+fi
+
+echo "xrandr done!"
diff --git a/guix/kolwynia/home/bdunahu/files/.local/bin/xxinit b/guix/kolwynia/home/bdunahu/files/.local/bin/xxinit
new file mode 100755
index 0000000..1ec9a82
--- /dev/null
+++ b/guix/kolwynia/home/bdunahu/files/.local/bin/xxinit
@@ -0,0 +1,6 @@
+ #!/bin/sh
+
+DIR=/home/bdunahu/.guix-home/profile/
+$DIR/bin/xinit -- $DIR/bin/Xorg :0 vt1 -keeptty \
+ -configdir $DIR/share/X11/xorg.conf.d \
+ -modulepath $DIR/lib/xorg/modules
diff --git a/guix/kolwynia/home/bdunahu/files/.xinitrc b/guix/kolwynia/home/bdunahu/files/.xinitrc
new file mode 100644
index 0000000..0e51e5a
--- /dev/null
+++ b/guix/kolwynia/home/bdunahu/files/.xinitrc
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+userresources=$HOME/.Xresources
+usermodmap=$HOME/.Xmodmap
+
+# merge in defaults and keymaps
+
+if [ -f "$userresources" ]; then
+ xrdb -merge "$userresources"
+fi
+
+if [ -f "$usermodmap" ]; then
+ xmodmap "$usermodmap"
+fi
+
+picom --backend=glx &
+xss-lock -- slock &
+xset r rate 250 70
+xset s 600
+touchpad-defaults
+xrandr-toggle
+xkeyboard-auto &
+eww daemon
+eww open bar
+exec emacs -mm
diff --git a/.xkb/keymap/rocket b/guix/kolwynia/home/bdunahu/files/.xkb/keymap/rocket
index 4fdd8c1..4fdd8c1 100644
--- a/.xkb/keymap/rocket
+++ b/guix/kolwynia/home/bdunahu/files/.xkb/keymap/rocket
diff --git a/guix/kolwynia/home/bdunahu/files/.xkb/keymap/standard b/guix/kolwynia/home/bdunahu/files/.xkb/keymap/standard
new file mode 100644
index 0000000..528dd72
--- /dev/null
+++ b/guix/kolwynia/home/bdunahu/files/.xkb/keymap/standard
@@ -0,0 +1,7 @@
+xkb_keymap {
+ xkb_keycodes { include "evdev+aliases(qwerty)" };
+ xkb_types { include "complete" };
+ xkb_compat { include "complete" };
+ xkb_symbols { include "pc+us+inet(evdev)+rocket(rocket)" };
+ xkb_geometry { include "pc(pc105)" };
+};
diff --git a/.xkb/symbols/rocket b/guix/kolwynia/home/bdunahu/files/.xkb/symbols/rocket
index a206a9a..a206a9a 100644
--- a/.xkb/symbols/rocket
+++ b/guix/kolwynia/home/bdunahu/files/.xkb/symbols/rocket
diff --git a/guix/kolwynia/home/bdunahu/packages.scm b/guix/kolwynia/home/bdunahu/packages.scm
new file mode 100644
index 0000000..7d0e510
--- /dev/null
+++ b/guix/kolwynia/home/bdunahu/packages.scm
@@ -0,0 +1,221 @@
+;;; Copyright © 2025,2026 bdunahu <bdunahu@operationnull.com>
+(define-module (kolwynia home bdunahu packages)
+ #:use-module (gnu)
+ #:use-module (gnu system)
+ #:use-module (guix packages)
+ #:use-module (tanelorn packages fonts)
+ #:use-module (tanelorn packages wm)
+ #:use-module (tanelorn packages engineering)
+ #:use-module (tanelorn packages emacs-xyz)
+ #:export (emacs
+ browser
+ pass
+ media
+ mail
+ tex
+ desktop
+ pdf
+ fonts
+ development
+ reverse-engineering
+ university
+ emulators
+ games))
+
+;;; Commentary:
+;;; Code:
+
+(use-package-modules
+ admin ;; netcat
+ algebra ;; bc
+ aspell ;; aspell, aspell-dict-en
+ assembly ;; nasm
+ base ;; make
+ chromium ;; ungoogled-chromium
+ clojure ;; clojure
+ commencement ;; gcc-toolchain
+ compton ;; picom
+ cpp ;; ccls
+ education ;; anki
+ emacs-build ;; emacs-dash
+ emacs ;; emacs-next
+ emacs-xyz ;; emacs-emms, etc.
+ emulators ;; mupen64plus*, bsnes, mgba
+ engineering ;; radare2, iaito
+ fonts ;; font-terminus, font-openmoji
+ fontutils ;; fontconfig
+ freedesktop ;; xdg-utils
+ games ;; nethack
+ gdb ;; gdb
+ gimp ;; gimp-next
+ gnome ;; brightnessctl
+ gnupg ;; gnupg, pinentry-emacs
+ graphviz ;; graphviz
+ haskell-xyz ;; pandoc
+ image ;; flameshot
+ imagemagick ;; imagemagick
+ image-viewers ;; feh, nsxiv
+ libreoffice ;; libreoffice
+ librewolf ;; librewolf
+ linux ;; tlp, alsa-plugins
+ lisp ;; sbcl
+ luanti ;; luanti
+ machine-learning ;; llama-cpp
+ mail ;; offlineimap
+ password-utils ;; pass-otp, password-store
+ pdf ;; xpdf, pdfgrep, zathura, zathura-pdf-mupdf
+ photo ;; perl-image-exiftool
+ pkg-config ;; pkg-config
+ pulseaudio ;; pavucontrol, pulseaudio,
+ python ;; python
+ python-xyz ;; python-lsp-server
+ rsync ;; rsync
+ texlive ;; texlive, texlive-biber
+ tex ;; texlive-dvipng
+ tor-browsers ;; torbrowser
+ video ;; ffmpeg, mpv, yt-dlp
+ virtualization ;; qemu
+ web ;; jq
+ xdisorg ;; xdotool, xrdb, wmctrl
+ xorg) ;; xf86-input-libinput, xf86-video-fbdev, xinit...
+
+
+
+(define emacs
+ (list emacs-next
+ pinentry-emacs
+ ;;
+ emacs-atomic-chrome
+ emacs-cider
+ emacs-clojure-mode
+ emacs-dash
+ emacs-denote
+ emacs-denote-journal
+ emacs-elpher
+ emacs-emms
+ emacs-exwm
+ emacs-f
+ emacs-gptel
+ emacs-guix
+ emacs-hydra
+ emacs-jeison
+ emacs-lua-mode
+ emacs-paredit
+ emacs-pinentry
+ emacs-rainbow-delimiters
+ emacs-rainbow-mode
+ emacs-s
+ emacs-slime
+ emacs-vterm
+ emacs-yasnippet
+ ;;
+ aspell ;for ispell
+ aspell-dict-en ;
+ wmctrl ;for exwm
+ perl-image-exiftool ;for emms
+ ccls ;for eglot
+ python-lsp-server ;
+ llama-cpp)) ;for emacs-gptel
+
+(define browser
+ (list torbrowser
+ ungoogled-chromium
+ librewolf))
+
+(define pass
+ (list gnupg
+ pass-otp
+ password-store))
+
+(define media
+ (list feh
+ ffmpeg
+ flameshot
+ gimp
+ imagemagick
+ mpv
+ nsxiv
+ pandoc
+ yt-dlp))
+
+(define mail
+ (list offlineimap3))
+
+(define tex
+ (list texlive
+ texlive-biber
+ texlive-dvipng
+ texlive-pgfgantt
+ texlive-libertinus))
+
+(define desktop
+ (list alsa-plugins
+ eww/x11
+ pavucontrol
+ picom
+ pulseaudio
+ setxkbmap
+ xdg-utils
+ xf86-input-libinput
+ xf86-video-fbdev
+ xinit
+ xinput
+ xkbcomp
+ xorg-server
+ xrandr
+ xrdb
+ xset
+ xss-lock))
+
+(define pdf
+ (list pdfgrep
+ xpdf ;pdftotext
+ zathura
+ zathura-pdf-mupdf))
+
+(define fonts
+ (list fontconfig
+ font-iosevka
+ font-medieval-sharp
+ font-openmoji
+ font-runa-mono
+ font-terminus
+ font-libertinus))
+
+(define development
+ (list bc
+ cl-asdf
+ clojure
+ clojure-tools
+ gcc-toolchain
+ gdb
+ gnu-make
+ pkg-config
+ python
+ jq
+ netcat
+ sbcl))
+
+(define reverse-engineering
+ (list nasm
+ iaito
+ radare2))
+
+(define university
+ (list anki
+ graphviz
+ libreoffice
+ qemu))
+
+(define emulators
+ (list bsnes
+ dolphin-emu
+ mgba
+ mupen64plus-ui-console
+ mupen64plus-video-glide64mk2))
+
+(define games
+ (list crawl-tiles
+ luanti))
+
+;;; packages.scm ends here
diff --git a/guix/kolwynia/home/bdunahu/ssh.scm b/guix/kolwynia/home/bdunahu/ssh.scm
new file mode 100644
index 0000000..5c137b2
--- /dev/null
+++ b/guix/kolwynia/home/bdunahu/ssh.scm
@@ -0,0 +1,43 @@
+;;; Copyright © 2026 bdunahu <bdunahu@operationnull.com>
+(define-module (kolwynia home bdunahu ssh)
+ #:use-module (gnu home services ssh)
+ #:export (garmr
+ heimdallr
+ nott
+ surt
+ codeberg))
+
+;;; Commentary:
+;;; Code:
+
+(define garmr
+ (openssh-host (name "garmr")
+ (host-name "localhost")
+ (user "root")))
+
+(define heimdallr
+ (openssh-host (name "heimdallr")
+ (host-name "operationnull.com")
+ (user "root")))
+
+(define nott
+ (openssh-host (name "nott")
+ (host-name "localhost")
+ (user "bdunahu")
+ (port 2222)
+ (extra-content " UserKnownHostsFile=/dev/null
+ StrictHostKeyChecking=no
+")))
+
+(define surt
+ (openssh-host (name "surt")
+ (host-name "192.168.1.250")
+ (user "root")))
+
+(define codeberg
+ (openssh-host (name "codeberg.org")
+ (host-name "codeberg.org")
+ (user "git")
+ (identity-file "~/.ssh/codeberg")))
+
+;;; ssh.scm ends here
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
diff --git a/guix/kolwynia/utils.scm b/guix/kolwynia/utils.scm
new file mode 100644
index 0000000..990cef1
--- /dev/null
+++ b/guix/kolwynia/utils.scm
@@ -0,0 +1,14 @@
+;;; Copyright © 2025 bdunahu <bdunahu@operationnull.com>
+(define-module (kolwynia utils)
+ #:export (garmr?*))
+
+;;; Commentary:
+;;; provides various utility functions
+;;; Code:
+
+(define (garmr?* . thing)
+ (if (equal? (gethostname) "garmr")
+ thing
+ '()))
+
+;;; utils.scm ends here
diff --git a/screenshots/desktop.png b/screenshots/desktop.png
new file mode 100644
index 0000000..96cc344
--- /dev/null
+++ b/screenshots/desktop.png
Binary files differ