modules/ryan-config/base-system.scm

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