modules/ryan-config/base-system.scm

9f740aa87254a6449f5b6c49b10a0598c70733cf · 13.1 KB · 270 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 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
187 (tailscale-configuration
188 (socket "/var/run/tailscale/tailscaled.sock")))
189 (service containerd-service-type)
190 (service nix-service-type)
191 (service libvirt-service-type
192 (libvirt-configuration
193 (libvirt libvirt-ovmf)
194 (unix-sock-group "libvirt")))
195 (service virtlog-service-type)
196 (simple-service 'spice-polkit polkit-service-type (list spice-gtk))
197 (simple-service 'hwdb-creation etc-service-type (list `("udev-here-oneoneone" ,(plain-file "issue" "test\n"))))
198 (service bluetooth-service-type
199 (bluetooth-configuration
200 (bluez bluez-ryan)
201 (experimental #t)
202 (fast-connectable? #t)))
203 (udev-rules-service 'fido2 libfido2 #:groups '("plugdev")))
204
205 ;; This is the default list of services we
206 ;; are appending to.
207 (modify-services %desktop-services
208 (guix-service-type config =>
209 (guix-configuration
210 (inherit config)
211 (substitute-urls
212 (append (list "https://substitutes.nonguix.org")
213 %default-substitute-urls))
214 (authorized-keys
215 (cons* (plain-file "non-guix.pub"
216 "(public-key
217 (ecc
218 (curve Ed25519)
219 (q #C1FD53E5D4CE971933EC50C9F307AE2171A2D3B52C804642A7A35F84F3A4EA98#)
220 )
221 )" ) %default-authorized-guix-keys))))
222 (udev-service-type config =>
223 (udev-configuration
224 (inherit config)
225 (rules (cons* %backlight-udev-rule
226 %flipper-udev-rule
227 (udev-configuration-rules config)))))
228 (elogind-service-type config =>
229 (elogind-configuration
230 (inherit config)
231 (handle-power-key `ignore)
232 (handle-suspend-key `ignore)
233 (handle-lid-switch `ignore)
234 (kill-user-processes? #t)))
235 (delete pulseaudio-service-type)
236 (delete gdm-service-type)
237 (delete avahi-service-type)
238 ;(delete xorg-server-service-type)
239 (delete alsa-service-type) )))
240 (name-service-switch %mdns-host-lookup-nss) ;; Enable .local lookup
241 (setuid-programs
242 (append (list ;(file-like->setuid-program
243 ;(file-append
244 ;(specification->package "swaylock-effects")
245 ; swaylock-effects-new
246 ; "/bin/swaylock"))
247 (file-like->setuid-program
248 (file-append
249 (specification->package "wireshark")
250 "/bin/dumpcap"))
251 (file-like->setuid-program
252 (file-append
253 (specification->package "spice-gtk")
254 "/libexec/spice-client-glib-usb-acl-helper"))
255 (file-like->setuid-program
256 (file-append
257 (specification->package "opendoas")
258 "/bin/doas")))
259 (delete sudo %setuid-programs)))
260 (file-systems (cons*
261 (file-system
262 (mount-point "/tmp")
263 (device "none")
264 (type "tmpfs")
265 (check? #f))
266 %base-file-systems))
267 (bootloader (bootloader-configuration
268 (bootloader grub-efi-bootloader)
269 (targets (list "/boot/efi"))
270 (keyboard-layout keyboard-layout)))))