summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README21
-rw-r--r--channels.scm22
-rw-r--r--guix/jrk/packages/all.scm68
-rw-r--r--guix/jrk/packages/patches/gf.patch18
-rw-r--r--guix/jrk/packages/patches/st-light.patch13
-rw-r--r--guix/systems/work/home.scm311
-rw-r--r--guix/systems/work/system.scm236
-rwxr-xr-xguix_reconfigure.sh4
-rwxr-xr-xguix_update_channels.sh9
-rw-r--r--my-channels.scm21
10 files changed, 723 insertions, 0 deletions
diff --git a/README b/README
new file mode 100644
index 0000000..c82dd57
--- /dev/null
+++ b/README
@@ -0,0 +1,21 @@
+my guix experiment
+===================
+
+these are my guix configs after a few months with guix.
+
+guix is a very interesting and fun take on a fully declarative system
+that i much prefer to nixos. it is very fun to configure your whole system
+in one language and be able to deploy a completely reproducable version of it
+anywhere you want. very cool to run a single command and have your system configure
+itself.
+
+structure
+=========
+
+guix/systems dir has the main configurations for my laptop with the ability to add more systems.
+guix/jrk is where i have added a couple packages for myself.
+
+channels.scm and my-channels.scm are used to keep the system reproducible. put channels into my-channels.scm
+and guix_update_channels.sh will use those and write the latest commit to channels.scm that will be used by guix.
+
+guix_reconfigure.sh is a conveniance script that reconfigures the system based on its hostname. \ No newline at end of file
diff --git a/channels.scm b/channels.scm
new file mode 100644
index 0000000..9d5800c
--- /dev/null
+++ b/channels.scm
@@ -0,0 +1,22 @@
+(list (channel
+ (name 'nonguix)
+ (url "https://codeberg.org/nonguix/nonguix-mirror")
+ (branch "master")
+ (commit
+ "595c2155a61ef7e552269cb1c569a33e3ec32bb2")
+ (introduction
+ (make-channel-introduction
+ "897c1a470da759236cc11798f4e0a5f7d4d59fbc"
+ (openpgp-fingerprint
+ "2A39 3FFF 68F4 EF7A 3D29 12AF 6F51 20A0 22FB B2D5"))))
+ (channel
+ (name 'guix)
+ (url "https://codeberg.org/guix/guix-mirror")
+ (branch "master")
+ (commit
+ "409bbd801428b90701f625c38e6b5840f12a187b")
+ (introduction
+ (make-channel-introduction
+ "9edb3f66fd807b096b48283debdcddccfea34bad"
+ (openpgp-fingerprint
+ "BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA")))))
diff --git a/guix/jrk/packages/all.scm b/guix/jrk/packages/all.scm
new file mode 100644
index 0000000..46f83a8
--- /dev/null
+++ b/guix/jrk/packages/all.scm
@@ -0,0 +1,68 @@
+(define-module (jrk packages all)
+ #:use-module (guix)
+ #:use-module (guix build-system gnu)
+ #:use-module (guix git-download)
+ #:use-module ((guix licenses) #:prefix license:)
+ #:use-module (gnu packages gdb)
+ #:use-module (gnu packages fontutils)
+ #:use-module (gnu packages pkg-config)
+ #:use-module (gnu packages suckless)
+ #:use-module (gnu packages xorg))
+
+(define-public gf
+ (let ((commit "338b690d8055c2e92fba51e9440a6b127ec1f485")
+ (revision "1"))
+ (package
+ (name "gf")
+ ;; software is not officialy versioned so using 0.1
+ (version (git-version "0.1" revision commit))
+ (synopsis "A GDB fronted for unix systems")
+ (description synopsis)
+ (home-page "https://github.com/nakst/gf")
+ (license license:expat)
+ (native-inputs (list pkg-config))
+ (inputs (list freetype libx11))
+ (propagated-inputs (list gdb))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/nakst/gf")
+ (commit commit)))
+ (sha256
+ (base32 "1xxc57i4zzfsch29a6zfngwmrq28yml1zajm7xkkzr11ch6fbwls"))
+ (patches (list (local-file "patches/gf.patch")))
+ ;; build with the extra extensions
+ (snippet '(copy-file "extensions_v5/extensions.cpp" "extensions.cpp"))))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases
+ %standard-phases
+ (delete 'configure)
+ (delete 'bootstrap)
+ (delete 'check)
+ (replace 'build (lambda _
+ (invoke "./build.sh")))
+ (replace 'install (lambda* (#:key outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "out")))
+ (install-file "gf2"
+ (string-append out "/bin")))))))))))
+
+(define-public jrk-st
+ (let ((commit "b3eaee6eac8736473210bd5e72883e9d764527df")
+ (revision "1"))
+ (package
+ (inherit st)
+ (name "jrk-st")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "git://git.jakekoroman.com/st")
+ (commit commit)))
+ (sha256
+ (base32 "1s5mpff2dlayfadw5bxy35jr5qivvkdskqd87nfgcajgmnpsng28"))
+ (patches (list (local-file "patches/st-light.patch")))))
+ (inputs (modify-inputs (package-inputs st)
+ (append libxcursor))))))
diff --git a/guix/jrk/packages/patches/gf.patch b/guix/jrk/packages/patches/gf.patch
new file mode 100644
index 0000000..96390c8
--- /dev/null
+++ b/guix/jrk/packages/patches/gf.patch
@@ -0,0 +1,18 @@
+diff --git a/build.sh b/build.sh
+index fc5f74e..7a8fe4e 100755
+--- a/build.sh
++++ b/build.sh
+@@ -5,12 +5,9 @@ gdb --version > /dev/null 2>&1 || printf "\033[0;31mWarning\033[0m: GDB not dete
+ gdb --version > /dev/null 2>&1 || exit 1
+ echo q | gdb | grep "(gdb)" > /dev/null 2>&1 || printf "\033[0;31mWarning\033[0m: Your copy of GDB appears to be non-standard or has been heavily reconfigured with .gdbinit.\nIf you are using GDB plugins like 'GDB Dashboard' you must remove them,\nas otherwise gf will be unable to communicate with GDB.\n"
+
+-# Check if FreeType is available.
+-if [ -d /usr/include/freetype2 ]; then extra_flags="$extra_flags -lfreetype -D UI_FREETYPE -I /usr/include/freetype2";
+-else printf "\033[0;31mWarning\033[0m: FreeType could not be found. The fallback font will be used.\n"; fi
+-
+ # Check if SSE2 is available.
+ uname -m | grep x86_64 > /dev/null && extra_flags="$extra_flags -DUI_SSE2"
+
++extra_flags="$extra_flags -DUI_FREETYPE -lfreetype $(pkg-config freetype2 --cflags)"
+ # Build the executable.
+ g++ gf2.cpp -o gf2 -g -O2 -lX11 -pthread $extra_flags -Wall -Wextra -Wno-unused-parameter -Wno-unused-result -Wno-missing-field-initializers -Wno-format-truncation || exit 1
diff --git a/guix/jrk/packages/patches/st-light.patch b/guix/jrk/packages/patches/st-light.patch
new file mode 100644
index 0000000..5d64197
--- /dev/null
+++ b/guix/jrk/packages/patches/st-light.patch
@@ -0,0 +1,13 @@
+diff --git a/config.def.h b/config.def.h
+index 883278a..b286777 100644
+--- a/config.def.h
++++ b/config.def.h
+@@ -22,7 +22,7 @@ static const unsigned int mousescrollincrement = 1;
+ * THEME_GRUBER
+ * THEME_GRUVBOX
+ */
+-#define THEME_DEFAULT
++#define THEME_DEFAULT_LIGHT
+
+ /*
+ * What program is execed by st depends of these precedence rules:
diff --git a/guix/systems/work/home.scm b/guix/systems/work/home.scm
new file mode 100644
index 0000000..2b2afd3
--- /dev/null
+++ b/guix/systems/work/home.scm
@@ -0,0 +1,311 @@
+(define-module (systems work home)
+ #:use-module (jrk packages all)
+
+ #:use-module (gnu home)
+ #:use-module (gnu home services)
+ #:use-module (gnu home services desktop)
+ #:use-module (gnu home services gnupg)
+ #:use-module (gnu home services mail)
+ #:use-module (gnu home services shells)
+ #:use-module (gnu home services shepherd)
+ #:use-module (gnu home services sound)
+ #:use-module (gnu home services sway)
+
+ #:use-module (gnu packages base)
+ #:use-module (gnu packages commencement)
+ #:use-module (gnu packages dns)
+ #:use-module (gnu packages emacs)
+ #:use-module (gnu packages emacs-xyz)
+ #:use-module (gnu packages engineering)
+ #:use-module (gnu packages gdb)
+ #:use-module (gnu packages gimp)
+ #:use-module (gnu packages gnome)
+ #:use-module (gnu packages gnupg)
+ #:use-module (gnu packages image)
+ #:use-module (gnu packages image-viewers)
+ #:use-module (gnu packages linux)
+ #:use-module (gnu packages llvm)
+ #:use-module (gnu packages mail)
+ #:use-module (gnu packages man)
+ #:use-module (gnu packages mate)
+ #:use-module (gnu packages music)
+ #:use-module (gnu packages ncurses)
+ #:use-module (gnu packages pkg-config)
+ #:use-module (gnu packages pulseaudio)
+ #:use-module (gnu packages terminals)
+ #:use-module (gnu packages tmux)
+ #:use-module (gnu packages version-control)
+ #:use-module (gnu packages video)
+ #:use-module (gnu packages web)
+ #:use-module (gnu packages wm)
+ #:use-module (gnu packages xdisorg)
+ #:use-module (gnu packages xorg)
+
+ #:use-module (gnu services)
+ #:use-module (gnu system shadow)
+
+ #:use-module (guix gexp)
+
+ #:export (work-home-config)
+ )
+
+(define shell-aliases
+ '(("ip" . "ip --color=auto")
+ ("grep" . "grep --color=auto")
+ ("diff" . "diff --color=auto")
+ ("ls" . "ls -hN --color=auto --group-directories-first")
+ ("l" . "ls -l")
+ ("ll" . "ls -la")
+ ("f" . "fossil")
+ ("v" . "$EDITOR")
+ ("vv" . "$SUDO $EDITOR")
+ ("nt" . "$BROWSER --new-tab")
+ ("nw" . "$BROWSER --new-window")
+ ("cp" . "cp -iv")
+ ("mv" . "mv -iv")
+ ("rm" . "rm -vI")
+ ("be" . "v $MENULAUNCHER_DIR/bookmarks")
+ ("mkdir" . "mkdir -pv")
+ ("yt" . "yt-dlp --embed-metadata --embed-chapters --sponsorblock-remove sponsor -i")
+ ("yta" . "yt-dlp -f bestaudio -x --audio-format mp3 --sponsorblock-remove sponsor -i")
+ ("mpv" . "mpv --script=~/.guix-home/profile/lib/mpris.so")))
+
+(define shell-environment-variables
+ '(("SUDO" . "sudo")
+ ("TERMINAL" . "st")
+ ("BROWSER" . "firefox")
+ ("EDITOR" . "emacsclient -c -a 'emacs -nw'")
+ ("XDG_CONFIG_HOME" . "$HOME/.config")
+ ("XDG_DATA_HOME" . "$HOME/.local/share")
+ ("XDG_CACHE_HOME" . "$HOME/.cache")
+ ("XDG_DATA_DIRS" . "$XDG_DATA_DIRS:$HOME/.local/share/flatpak/exports/share")
+ ("ZDOTDIR" . "$XDG_CONFIG_HOME/zsh")
+ ("WINEPREFIX" . "$XDG_DATA_HOME/wineprefixes/default")
+ ("GOPATH" . "$XDG_DATA_HOME/go")
+ ("RUSTUP_HOME" . "$XDG_DATA_HOME/rustup")
+ ("PASSWORD_STORE_DIR" . "$XDG_DATA_HOME/pass")
+ ("PYTHON_HISTORY" . "$XDG_DATA_HOME/python/history")
+ ("NPM_CONFIG_USERCONFIG" . "$XDG_CONFIG_HOME/npm/npmrc")
+ ("NOTMUCH_CONFIG" . "$XDG_CONFIG_HOME/notmuch-config")
+ ("CARGO_HOME" . "$XDG_DATA_HOME/cargo")
+ ("WGETRC" . "$XDG_CONFIG_HOME/wgetrc")
+ ("MENULAUNCHER_DIR" . "$XDG_DATA_HOME/menulaunchers")
+ ("MBSYNCRC" . "$XDG_CONFIG_HOME/mbsync/config")
+ ("MANPATH" . "$MANPATH:$XDG_DATA_HOME/man")
+ ("_JAVA_AWT_WM_NONREPARENTING" . "1")
+ ("GUILE_LOAD_PATH" . "$HOME/.config/guix/current/share/guile/site/3.0:$GUILE_LOAD_PATH")
+ ("PATH" . "$CARGO_HOME/bin:$HOME/.local/bin:$HOME/scripts:$PATH")))
+
+(define bash-aliases-service
+ (simple-service 'bash-aliases
+ home-bash-service-type
+ (home-bash-extension
+ (aliases shell-aliases))))
+
+(define bash-environment-variables-service
+ (simple-service 'bash-aliases
+ home-bash-service-type
+ (home-bash-extension
+ (environment-variables shell-environment-variables))))
+
+(define bash-profile
+ "")
+
+(define bashrc
+ "
+# Export 'SHELL' to child processes. Programs such as 'screen'
+# honor it and otherwise use /bin/sh.
+export SHELL
+
+if [[ $- != *i* ]]
+then
+ # We are being invoked from a non-interactive shell. If this
+ # is an SSH session (as in \"ssh host command\"), source
+ # /etc/profile so we get PATH and other essential variables.
+ [[ -n \"$SSH_CLIENT\" ]] && source /etc/profile
+
+ # Don't do anything else.
+ return
+fi
+
+# Source the system-wide file.
+[ -f /etc/bashrc ] && source /etc/bashrc
+
+# Setup eat integration
+[ -n \"$EAT_SHELL_INTEGRATION_DIR\" ] && \
+ source \"$EAT_SHELL_INTEGRATION_DIR/bash\"
+
+PS1='\\u@\\h \\w${GUIX_ENVIRONMENT:+ [env]}\\$ '
+#PS1='\\w \\e[1;31m>${GUIX_ENVIRONMENT:+>}\\e[1;0m '
+")
+
+(define (home-davmail-shepherd-service config)
+ (list
+ (shepherd-service
+ (documentation "Davmail exchange server for work emails")
+ (provision '(davmail))
+ (respawn? #t)
+ (start #~(make-forkexec-constructor
+ (list (string-append
+ (getenv "HOME")
+ "/opt/davmail/start_davmail.sh"))))
+ (stop #~(make-kill-destructor)))))
+
+(define home-davmail-service-type
+ (service-type
+ (name 'davmail)
+ (description "Davmail exchange server for work emails")
+ (extensions
+ (list (service-extension
+ home-shepherd-service-type
+ home-davmail-shepherd-service)))
+ (default-value #f)))
+
+(define (home-emacs-daemon-shepherd-service config)
+ (list
+ (shepherd-service
+ (documentation "Emacs Daemon")
+ (provision '(emacs-server))
+ (respawn? #f)
+ (modules '((srfi srfi-1)))
+ (start #~(make-forkexec-constructor
+ (list
+ #$(file-append
+ emacs
+ "/bin/emacs")
+ "--fg-daemon")
+ #:environment-variables (cons*
+ (string-append "GUILE_LOAD_PATH="
+ (getenv "HOME") "/.config/guix/current/share/guile/site/3.0"
+ ":"
+ (getenv "GUILE_LOAD_PATH"))
+ (string-append "PATH="
+ (getenv "HOME") "/scripts"
+ ":"
+ (getenv "PATH"))
+ (remove (lambda (var)
+ (or
+ (string-prefix? "GUILE_LOAD_PATH=" var)
+ (string-prefix? "PATH=" var)))
+ (default-environment-variables)))))
+ (stop #~(make-kill-destructor)))))
+
+(define home-emacs-daemon-service-type
+ (service-type
+ (name 'emacs-server)
+ (description "Starts Emacs Server")
+ (extensions
+ (list (service-extension
+ home-shepherd-service-type
+ home-emacs-daemon-shepherd-service)))
+ (default-value #f)))
+
+(define %theme-packages
+ (list mate-icon-theme-faenza adwaita-icon-theme))
+
+(define %media-packages
+ (list mpv mpv-mpris yt-dlp playerctl gimp pavucontrol wireplumber))
+
+(define %emacs-packages
+ (list emacs emacs-dumb-jump emacs-geiser emacs-geiser-guile
+ emacs-dash emacs-meow emacs-guix emacs-modus-themes
+ emacs-ef-themes emacs-minions emacs-olivetti emacs-zenburn-theme
+ emacs-eat emacs-vertico emacs-orderless emacs-marginalia emacs-company
+ emacs-yasnippet emacs-magit emacs-go-mode emacs-lua-mode emacs-rust-mode
+ emacs-zig-mode emacs-glsl-mode emacs-htmlize emacs-org-bullets emacs-notmuch
+ emacs-elfeed))
+
+(define %dev-packages
+ (list fossil ncurses gdb gf
+ man-pages-posix man-pages man-db
+ tmux jq
+ (list ldns "drill")))
+
+(define %misc-packages
+ (list xset flameshot xrandr arandr autorandr xwallpaper sxhkd freecad
+ nsxiv notmuch isync jrk-st))
+
+(define-public work-home-config
+ (home-environment
+ (packages (append %misc-packages
+ %theme-packages
+ %media-packages
+ %dev-packages
+ %emacs-packages))
+ (services
+ (list
+ (service home-bash-service-type
+ (home-bash-configuration
+ (guix-defaults? #f)
+ (bashrc (list (plain-file "bashrc" bashrc)))
+ (bash-profile (list (plain-file "bash_profile" bash-profile)))))
+ bash-aliases-service
+ bash-environment-variables-service
+
+ (service home-emacs-daemon-service-type)
+ (service home-davmail-service-type)
+
+ ;; (service home-sway-service-type
+ ;; (sway-configuration
+ ;; (variables `((mod . "Mod4")
+ ;; (left . "n")
+ ;; (right . "o")
+ ;; (down . "e")
+ ;; (up . "i")
+ ;; (term . ,(file-append foot "/bin/foot"))))
+ ;; (outputs
+ ;; (list (sway-output
+ ;; (identifier '*)
+ ;; (background (file-append sway
+ ;; "/share/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png")))))))
+
+ (service home-msmtp-service-type
+ (home-msmtp-configuration
+ (accounts
+ (list
+ (msmtp-account
+ (name "work")
+ (configuration
+ (msmtp-configuration
+ (host "localhost")
+ (from "koromanj@miltonhydro.com")
+ (port 1025)
+ (tls-starttls? #f)
+ (tls? #f)
+ (extra-content "auth plain")
+ (user "koromanj@miltonhydro.com")
+ (password-eval "pass koromanj@miltonhydro.com"))))
+ (msmtp-account
+ (name "personal")
+ (configuration
+ (msmtp-configuration
+ (host "smtp.purelymail.com")
+ (from "jake@jakekoroman.com")
+ (port 465)
+ (tls-starttls? #f)
+ (tls? #t)
+ (auth? #t)
+ (user "jake@jakekoroman.com")
+ (password-eval "pass jake@jakekoroman.com"))))))))
+
+ (service home-pipewire-service-type)
+ (service home-dbus-service-type)
+
+ (service home-shepherd-transient-service-type)
+
+ (service home-gpg-agent-service-type
+ (home-gpg-agent-configuration
+ (pinentry-program (file-append pinentry-rofi "/bin/pinentry-rofi"))
+ (ssh-support? #t)
+ (default-cache-ttl 86400)
+ (max-cache-ttl 86400)))
+
+ (service home-files-service-type
+ `((".guile" ,%default-dotguile)
+ (".Xdefaults" ,%default-xdefaults)))
+
+ (service home-xdg-configuration-files-service-type
+ `(("gdb/gdbinit" ,%default-gdbinit)
+ ("nano/nanorc" ,%default-nanorc)))))))
+
+work-home-config
diff --git a/guix/systems/work/system.scm b/guix/systems/work/system.scm
new file mode 100644
index 0000000..32e24a6
--- /dev/null
+++ b/guix/systems/work/system.scm
@@ -0,0 +1,236 @@
+(define-module (systems work system)
+ #:use-module (systems work home)
+
+ #:use-module (gnu)
+ #:use-module (gnu packages admin)
+ #:use-module (gnu packages chromium)
+ #:use-module (gnu packages containers)
+ #:use-module (gnu packages cups)
+ #:use-module (gnu packages curl)
+ #:use-module (gnu packages emacs)
+ #:use-module (gnu packages emacs-xyz)
+ #:use-module (gnu packages file)
+ #:use-module (gnu packages fonts)
+ #:use-module (gnu packages freedesktop)
+ #:use-module (gnu packages gnome)
+ #:use-module (gnu packages gnupg)
+ #:use-module (gnu packages libreoffice)
+ #:use-module (gnu packages librewolf)
+ #:use-module (gnu packages linux)
+ #:use-module (gnu packages mail)
+ #:use-module (gnu packages password-utils)
+ #:use-module (gnu packages rdesktop)
+ #:use-module (gnu packages samba)
+ #:use-module (gnu packages suckless)
+ #:use-module (gnu packages terminals)
+ #:use-module (gnu packages version-control)
+ #:use-module (gnu packages vpn)
+ #:use-module (gnu packages wm)
+ #:use-module (gnu packages xdisorg)
+ #:use-module (gnu packages xorg)
+
+ #:use-module (nongnu packages linux)
+ #:use-module (nongnu packages mozilla)
+ #:use-module (nongnu system linux-initrd)
+
+ #:use-module (gnu services containers)
+ #:use-module (gnu services cups)
+ #:use-module (gnu services desktop)
+ #:use-module (gnu services guix)
+ #:use-module (gnu services networking)
+ #:use-module (gnu services pm)
+ #:use-module (gnu services sddm)
+ #:use-module (gnu services shepherd)
+ #:use-module (gnu services ssh)
+ #:use-module (gnu services xorg)
+
+ #:use-module (gnu system accounts))
+
+(define %system-user-name "jake")
+
+(define %nonguix-signing-key
+ (plain-file "non-guix.pub"
+ "(public-key (ecc (curve Ed25519) (q #C1FD53E5D4CE971933EC50C9F307AE2171A2D3B52C804642A7A35F84F3A4EA98#)))"))
+
+(define %desktop-packages
+ (list i3-wm i3status xrdb xterm font-iosevka ungoogled-chromium firefox librewolf
+ brightnessctl network-manager-applet dmenu curl btop git (list git "send-email")
+ password-store pass-otp rofi pinentry-rofi gnupg amdgpu-firmware
+ xdg-utils xss-lock file netcat-openbsd podman podman-compose xinit))
+
+(define %work-packages
+ (list samba cifs-utils openconnect libreoffice freerdp))
+
+(define %zsa-voyager-rules
+ (udev-rule "50-zsa.rules"
+ "
+# Rules for Oryx web flashing and live training
+KERNEL==\"hidraw*\", ATTRS{idVendor}==\"16c0\", MODE=\"0664\", GROUP=\"plugdev\"
+KERNEL==\"hidraw*\", ATTRS{idVendor}==\"3297\", MODE=\"0664\", GROUP=\"plugdev\"
+# Keymapp Flashing rules for the Voyager
+SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"3297\", MODE:=\"0666\", SYMLINK+=\"ignition_dfu\"
+"))
+
+(define garbage-collect-timer
+ (shepherd-timer '(garbage-collection) "0 16 * * 5"
+ #~("/run/current-system/profile/bin/guix"
+ "gc" "-d" "2m" "-F" "100G") ;; 100GB bc /gun/store is on the root partition which is ~512G.
+ #:documentation "Garbage collect at 16:00 every friday."
+ #:requirement '(guix-daemon)))
+
+(define updatedb-timer
+ (shepherd-timer '(updatedb) "0 12 * * *"
+ #~(#$(file-append findutils "/bin/updatedb")
+ "--prunepaths=/tmp /var/tmp /gnu/store")
+ #:documentation "Update file db every day at 12:00"
+ #:requirement '(user-processes)))
+
+(operating-system
+ (kernel linux)
+ (initrd microcode-initrd)
+ (firmware (list linux-firmware))
+ (locale "en_CA.utf8")
+ (timezone "America/Toronto")
+ (keyboard-layout
+ (keyboard-layout
+ "us"
+ #:options '("ctrl:nocaps")))
+ (host-name "work")
+
+ ;; The list of user accounts ('root' is implicit).
+ (users (cons* (user-account
+ (name %system-user-name)
+ (comment "Jake")
+ (group "users")
+ (home-directory "/home/jake")
+ (supplementary-groups '("wheel" "netdev" "audio" "video" "plugdev")))
+ %base-user-accounts))
+ (groups (cons* (user-group
+ (name "plugdev"))
+ %base-groups))
+
+ (packages (append %desktop-packages
+ %work-packages
+ %base-packages))
+
+ (setuid-programs %default-privileged-programs)
+ (name-service-switch %mdns-host-lookup-nss)
+
+ (services
+ (append (list
+ (service openssh-service-type)
+ (service tor-service-type)
+ (service cups-service-type
+ (cups-configuration
+ (extensions (list cups-filters))
+ (web-interface? #t)))
+ (service tlp-service-type)
+
+ (simple-service 'extra-hosts hosts-service-type
+ (list (host "10.172.91.160" "milton-myaccount.erthcorp.com")))
+
+ (udev-rules-service 'zsa-voyager %zsa-voyager-rules)
+
+ ;; (service sddm-service-type)
+ (set-xorg-configuration
+ (xorg-configuration (keyboard-layout keyboard-layout)))
+ ;; sddm-service-type)
+
+ (service rootless-podman-service-type
+ (rootless-podman-configuration
+ (subgids
+ (list (subid-range (name %system-user-name))))
+ (subuids
+ (list (subid-range (name %system-user-name))))))
+ (service iptables-service-type)
+
+ (simple-service 'my-timers
+ shepherd-root-service-type
+ (list
+ updatedb-timer
+ garbage-collect-timer))
+
+ (service guix-home-service-type
+ `((,%system-user-name ,work-home-config))))
+
+ (modify-services %desktop-services
+ (guix-service-type config => (guix-configuration
+ (inherit config)
+ ;; XXX: seems to break NetworkManager
+ ;; https://issues.guix.gnu.org/78047#4
+ ;; (privileged? #f)
+ (substitute-urls
+ (append (list "https://substitutes.nonguix.org")
+ %default-substitute-urls))
+ (authorized-keys
+ (cons* %nonguix-signing-key
+ %default-authorized-guix-keys))))
+ (delete gdm-service-type))))
+
+ (bootloader
+ (bootloader-configuration
+ (bootloader grub-efi-bootloader)
+ (targets (list "/boot/efi"))
+ (keyboard-layout keyboard-layout)))
+
+ (mapped-devices
+ (list
+ (mapped-device
+ (source (uuid "b218be66-7f59-4990-8775-9abe9bec45fb"))
+ (target "enc")
+ (type luks-device-mapping))))
+
+ (file-systems (cons*
+ (file-system
+ (mount-point "/")
+ (device "/dev/mapper/enc")
+ (options "subvol=root")
+ (flags '(no-atime))
+ (type "btrfs")
+ (dependencies mapped-devices))
+ (file-system
+ (mount-point "/gnu")
+ (device "/dev/mapper/enc")
+ (options "subvol=gnu")
+ (flags '(no-atime))
+ (type "btrfs")
+ (dependencies mapped-devices))
+ (file-system
+ (mount-point "/home")
+ (device "/dev/mapper/enc")
+ (options "subvol=home")
+ (flags '(no-atime))
+ (type "btrfs")
+ (dependencies mapped-devices))
+ (file-system
+ (mount-point "/boot")
+ (device "/dev/mapper/enc")
+ (options "subvol=boot")
+ (type "btrfs")
+ (dependencies mapped-devices))
+ (file-system
+ (mount-point "/boot/efi")
+ (device (uuid "ACA4-E018" 'fat32))
+ (type "vfat"))
+ (file-system
+ (mount-point "/media/nas")
+ (type "nfs")
+ (device "192.168.0.95:/mnt/md0/public")
+ (options "user,rw")
+ (mount? #f)
+ (create-mount-point? #t))
+ (file-system
+ (mount-point "/media/s")
+ (type "cifs")
+ (device "//mhshare.miltonhydro.com/shared")
+ (options "user,gid=users,credentials=/root/smb-creds,forcegid")
+ (mount? #f)
+ (create-mount-point? #t))
+ (file-system
+ (mount-point "/media/r")
+ (type "cifs")
+ (device "//mhreport.miltonhydro.com/inetpub")
+ (options "user,gid=users,credentials=/root/smb-creds,forcegid")
+ (mount? #f)
+ (create-mount-point? #t))
+ %base-file-systems)))
diff --git a/guix_reconfigure.sh b/guix_reconfigure.sh
new file mode 100755
index 0000000..372f10c
--- /dev/null
+++ b/guix_reconfigure.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+echo Updating $(hostname) ...
+sudo guix system reconfigure -L ~/opt/dotfiles-framework/guix/ ~/opt/dotfiles-framework/guix/systems/$(hostname)/system.scm
diff --git a/guix_update_channels.sh b/guix_update_channels.sh
new file mode 100755
index 0000000..5d4ab38
--- /dev/null
+++ b/guix_update_channels.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+GUIX_DIR="$HOME/.config/guix"
+GUIX_CHANNELS="$GUIX_DIR/channels.scm"
+GUIX_MY_CHANNELS="$GUIX_DIR/my-channels.scm"
+
+guix pull --channels="$GUIX_MY_CHANNELS"
+guix describe -f channels > "$GUIX_CHANNELS"
+
diff --git a/my-channels.scm b/my-channels.scm
new file mode 100644
index 0000000..88e9097
--- /dev/null
+++ b/my-channels.scm
@@ -0,0 +1,21 @@
+;; everything is on codeberg !!
+
+(list
+ (channel
+ (name 'nonguix)
+ (url "https://codeberg.org/nonguix/nonguix-mirror")
+ (introduction
+ (make-channel-introduction
+ "897c1a470da759236cc11798f4e0a5f7d4d59fbc"
+ (openpgp-fingerprint
+ "2A39 3FFF 68F4 EF7A 3D29 12AF 6F51 20A0 22FB B2D5"))))
+ (channel
+ (name 'guix)
+ ;; redirects to codeberg
+ (url "https://git.guix.gnu.org/guix.git")
+ (branch "master")
+ (introduction
+ (make-channel-introduction
+ "9edb3f66fd807b096b48283debdcddccfea34bad"
+ (openpgp-fingerprint
+ "BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA")))))