modules/ryan-config/base-system.scm

ca201bd9f1ce2bc1e6b5eb5107bf3ffc764417b4 · 13.0 KB · 268 lines raw

1 (define-module (ryan-config base-system)
2 #:use-module (gnu)
3 #:use-module (nongnu packages linux)
4 #:use-module (gnu system setuid)
5 #:use-module (gnu packages admin)
6 #:use-module (gnu packages avahi)
7 #:use-module (guix packages)
8 #:use-module (gnu packages shells)
9 #:use-module (guix build-system trivial)
10 #:use-module (guix licenses)
11 #:use-module (gnu packages tls)
12 #:use-module (gnu packages spice)
13 #:use-module (srfi srfi-1)
14 #:use-module (ryan-packages freedesktop)
15 ;#:use-module (ryan-packages hyprland)
16 #:use-module (ryan-packages wm)
17 #:use-module (ryan-packages virtualization)
18 #:use-module (ryan-packages linux)
19 #:use-module (ryan-packages networking)
20 #:use-module (rosenthal packages wm)
21 #:use-module (rosenthal services networking)
22 #:use-module (gnu packages security-token)
23 #:use-module (gnu services security-token)
24 #:use-module (gnu services cups)
25 #:use-module (gnu services desktop)
26 #:use-module (gnu services networking)
27 #:use-module (gnu services xorg)
28 #:use-module (gnu services ssh)
29 #:use-module (gnu services nix)
30 #:use-module (gnu services sound)
31 #:use-module (gnu services docker)
32 #:use-module (gnu services avahi)
33 #:use-module (gnu services dbus)
34 #:use-module (gnu services virtualization))
35
36 ; Define package that installs my root ca public keys
37 (define my-ca-certs
38 (package
39 (name "my-ca-certs")
40 (version "1")
41 (source (local-file "./CACerts"
42 #:recursive? #t))
43 (build-system trivial-build-system)
44 (license mpl2.0)
45 (home-page "https://rschanz.org")
46 (arguments
47 `(#:modules
48 ((guix build utils))
49 #:builder
50 (begin
51 (use-modules (guix build utils)
52 (srfi srfi-1)
53 (srfi srfi-26)
54 (ice-9 ftw))
55 (let* ((ca-certificates (assoc-ref %build-inputs "source"))
56 (crt-suffix ".crt")
57 (is-certificate? (cut string-suffix? crt-suffix <>))
58 (certificates (filter is-certificate?
59 (scandir ca-certificates)))
60 (out (assoc-ref %outputs "out"))
61 (certificate-directory (string-append out "/etc/ssl/certs"))
62 (openssl (string-append (assoc-ref %build-inputs "openssl") "/bin/openssl")))
63 (mkdir-p certificate-directory)
64 (for-each
65 (lambda (cert)
66 (invoke
67 openssl "x509"
68 "-in" (string-append ca-certificates "/" cert)
69 "-outform" "PEM"
70 "-out" (string-append certificate-directory "/" cert ".pem")))
71 certificates)
72 #t))))
73 (native-inputs
74 (list openssl))
75 (synopsis "My CA Certs")
76 (description synopsis)))
77
78 ; Re-define the base packages to remove sudo
79 (define %my-base-packages
80 (remove (lambda (package)
81 (member (package-name package)
82 (list "sudo" "nano")))
83 %base-packages ))
84
85 (define %backlight-udev-rule
86 (udev-rule
87 "90-backlight.rules"
88 (string-append "ACTION==\"add\", SUBSYSTEM==\"backlight\", "
89 "RUN+=\"/run/current-system/profile/bin/chgrp video /sys/class/backlight/%k/brightness\""
90 "\n"
91 "ACTION==\"add\", SUBSYSTEM==\"backlight\", "
92 "RUN+=\"/run/current-system/profile/bin/chmod g+w /sys/class/backlight/%k/brightness\"")))
93
94 (define %flipper-udev-rule
95 (udev-rule
96 "42-flipperzero.rules"
97 (string-append "SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"0483\", ATTRS{idProduct}==\"5740\", ATTRS{manufacturer}==\"Flipper Devices Inc.\", TAG+=\"uaccess\""
98 "\n"
99 "SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"0483\", ATTRS{idProduct}==\"df11\", ATTRS{manufacturer}==\"STMicroelectronics\", TAG+=\"uaccess\""
100 "\n"
101 "SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"303a\", ATTRS{idProduct}==\"40??\", ATTRS{manufacturer}==\"Flipper Devices Inc.\", TAG+=\"uaccess\"")))
102
103 (define-public base-operating-system
104 (operating-system
105 (kernel linux)
106 (firmware (list linux-firmware))
107 (locale "en_US.utf8")
108 (timezone "America/New_York")
109 (keyboard-layout (keyboard-layout "us"))
110 (host-name "ThisWillChange")
111
112 ;; The list of user accounts ('root' is implicit).
113 (users (cons* (user-account
114 (name "ryan")
115 (comment "Ryan")
116 (group "users")
117 (shell (file-append fish "/bin/fish"))
118 (home-directory "/home/ryan")
119 (supplementary-groups '("wheel" "netdev" "audio" "video" "lp" "plugdev" "docker" "libvirt" "kvm" "dialout")))
120 %base-user-accounts))
121
122 ;; Packages installed system-wide. Users can also install packages
123 ;; under their own account: use 'guix search KEYWORD' to search
124 ;; for packages and 'guix install PACKAGE' to install a package.
125 (packages (append (map specification->package (list "sway"
126 "hyprland"
127 "swaybg"
128 ;"swayidle"
129 ;"swaylock-effects"
130 "fuzzel"
131 "foot"
132 "pinentry-qt"
133 "adwaita-icon-theme"
134 "hicolor-icon-theme"
135 "git"
136 "waybar-experimental"
137 "gnupg"
138 "light"
139 "avahi"
140 "mako"
141 "grim"
142 "grimblast"
143 "slurp"
144 "wl-clipboard"
145 ;"bluez"
146 ;"blueman"
147 "ldacbt"
148 "libfreeaptx"
149 "libfdk"
150 "opendoas"
151 ;"xdg-desktop-portal-wlr"
152 ;"xdg-desktop-portal"
153 "xdg-desktop-portal-gtk"
154 "v4l2loopback-linux-module"
155 "pipewire"
156 "docker"
157 ;"libvirt" ;New version inherited from service
158 ;"virt-manager"
159 "dconf"
160 "wireplumber"
161 "wireshark"
162 "webkitgtk-with-libsoup2" ; Needed for Go wails development
163 "zsh"))
164 (list my-ca-certs xdg-desktop-portal-hyprland-ryan virt-manager-ovmf bluez-ryan blueman-ryan swayidle-new)
165 %my-base-packages ))
166
167 ;; Below is the list of system services. To search for available
168 ;; services, run 'guix system search KEYWORD' in a terminal.
169 (services
170 (append (list
171
172 ;; To configure OpenSSH, pass an 'openssh-configuration'
173 ;; record as a second argument to 'service' below.
174 (service openssh-service-type)
175 (service pcscd-service-type)
176 (service cups-service-type
177 (cups-configuration
178 (web-interface? #t)))
179 ;; Avahi is only present for CUPS to support "automagic" printing
180 (service avahi-service-type
181 (avahi-configuration
182 (publish? #f) ;; do not advertise this machine
183 (publish-workstation? #f))) ;; do not advertise, I want this to be as silent as possible
184 (service docker-service-type)
185 ; Tailscale daemon from rosenthal
186 (service tailscale-service-type) ; TODO: Add BIRD socket
187 (service containerd-service-type)
188 (service nix-service-type)
189 (service libvirt-service-type
190 (libvirt-configuration
191 (libvirt libvirt-ovmf)
192 (unix-sock-group "libvirt")))
193 (service virtlog-service-type)
194 (simple-service 'spice-polkit polkit-service-type (list spice-gtk))
195 (simple-service 'hwdb-creation etc-service-type (list `("udev-here-oneoneone" ,(plain-file "issue" "test\n"))))
196 (service bluetooth-service-type
197 (bluetooth-configuration
198 (bluez bluez-ryan)
199 (experimental #t)
200 (fast-connectable? #t)))
201 (udev-rules-service 'fido2 libfido2 #:groups '("plugdev")))
202
203 ;; This is the default list of services we
204 ;; are appending to.
205 (modify-services %desktop-services
206 (guix-service-type config =>
207 (guix-configuration
208 (inherit config)
209 (substitute-urls
210 (append (list "https://substitutes.nonguix.org")
211 %default-substitute-urls))
212 (authorized-keys
213 (cons* (plain-file "non-guix.pub"
214 "(public-key
215 (ecc
216 (curve Ed25519)
217 (q #C1FD53E5D4CE971933EC50C9F307AE2171A2D3B52C804642A7A35F84F3A4EA98#)
218 )
219 )" ) %default-authorized-guix-keys))))
220 (udev-service-type config =>
221 (udev-configuration
222 (inherit config)
223 (rules (cons* %backlight-udev-rule
224 %flipper-udev-rule
225 (udev-configuration-rules config)))))
226 (elogind-service-type config =>
227 (elogind-configuration
228 (inherit config)
229 (handle-power-key `ignore)
230 (handle-suspend-key `ignore)
231 (handle-lid-switch `ignore)
232 (kill-user-processes? #t)))
233 (delete pulseaudio-service-type)
234 (delete gdm-service-type)
235 (delete avahi-service-type)
236 ;(delete xorg-server-service-type)
237 (delete alsa-service-type) )))
238 (name-service-switch %mdns-host-lookup-nss) ;; Enable .local lookup
239 (setuid-programs
240 (append (list ;(file-like->setuid-program
241 ;(file-append
242 ;(specification->package "swaylock-effects")
243 ; swaylock-effects-new
244 ; "/bin/swaylock"))
245 (file-like->setuid-program
246 (file-append
247 (specification->package "wireshark")
248 "/bin/dumpcap"))
249 (file-like->setuid-program
250 (file-append
251 (specification->package "spice-gtk")
252 "/libexec/spice-client-glib-usb-acl-helper"))
253 (file-like->setuid-program
254 (file-append
255 (specification->package "opendoas")
256 "/bin/doas")))
257 (delete sudo %setuid-programs)))
258 (file-systems (cons*
259 (file-system
260 (mount-point "/tmp")
261 (device "none")
262 (type "tmpfs")
263 (check? #f))
264 %base-file-systems))
265 (bootloader (bootloader-configuration
266 (bootloader grub-efi-bootloader)
267 (targets (list "/boot/efi"))
268 (keyboard-layout keyboard-layout)))))