modules/ryan-config/base-system.scm

1c883be601dd74149382dfbf314b379581eef57e · 12.9 KB · 266 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)
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 "webkitgtk-with-libsoup2" ; Needed for Go wails development
162 "zsh"))
163 (list my-ca-certs swaylock-effects-new xdg-desktop-portal-hyprland-ryan virt-manager-ovmf bluez-ryan blueman-ryan swayidle-new waybar-new)
164 %my-base-packages ))
165
166 ;; Below is the list of system services. To search for available
167 ;; services, run 'guix system search KEYWORD' in a terminal.
168 (services
169 (append (list
170
171 ;; To configure OpenSSH, pass an 'openssh-configuration'
172 ;; record as a second argument to 'service' below.
173 (service openssh-service-type)
174 (service pcscd-service-type)
175 (service cups-service-type
176 (cups-configuration
177 (web-interface? #t)))
178 ;; Avahi is only present for CUPS to support "automagic" printing
179 (service avahi-service-type
180 (avahi-configuration
181 (publish? #f) ;; do not advertise this machine
182 (publish-workstation? #f))) ;; do not advertise, I want this to be as silent as possible
183 (service docker-service-type)
184 ; Tailscale daemon from rosenthal
185 (service tailscale-service-type) ; TODO: Add BIRD socket
186 (service nix-service-type)
187 (service libvirt-service-type
188 (libvirt-configuration
189 (libvirt libvirt-ovmf)
190 (unix-sock-group "libvirt")))
191 (service virtlog-service-type)
192 (simple-service 'spice-polkit polkit-service-type (list spice-gtk))
193 (simple-service 'hwdb-creation etc-service-type (list `("udev-here-oneoneone" ,(plain-file "issue" "test\n"))))
194 (service bluetooth-service-type
195 (bluetooth-configuration
196 (bluez bluez-ryan)
197 (experimental #t)
198 (fast-connectable? #t)))
199 (udev-rules-service 'fido2 libfido2 #:groups '("plugdev")))
200
201 ;; This is the default list of services we
202 ;; are appending to.
203 (modify-services %desktop-services
204 (guix-service-type config =>
205 (guix-configuration
206 (inherit config)
207 (substitute-urls
208 (append (list "https://substitutes.nonguix.org")
209 %default-substitute-urls))
210 (authorized-keys
211 (cons* (plain-file "non-guix.pub"
212 "(public-key
213 (ecc
214 (curve Ed25519)
215 (q #C1FD53E5D4CE971933EC50C9F307AE2171A2D3B52C804642A7A35F84F3A4EA98#)
216 )
217 )" ) %default-authorized-guix-keys))))
218 (udev-service-type config =>
219 (udev-configuration
220 (inherit config)
221 (rules (cons* %backlight-udev-rule
222 %flipper-udev-rule
223 (udev-configuration-rules config)))))
224 (elogind-service-type config =>
225 (elogind-configuration
226 (inherit config)
227 (handle-power-key `ignore)
228 (handle-suspend-key `ignore)
229 (handle-lid-switch `ignore)
230 (kill-user-processes? #t)))
231 (delete pulseaudio-service-type)
232 (delete gdm-service-type)
233 (delete avahi-service-type)
234 ;(delete xorg-server-service-type)
235 (delete alsa-service-type) )))
236 (name-service-switch %mdns-host-lookup-nss) ;; Enable .local lookup
237 (setuid-programs
238 (append (list (file-like->setuid-program
239 (file-append
240 ;(specification->package "swaylock-effects")
241 swaylock-effects-new
242 "/bin/swaylock"))
243 (file-like->setuid-program
244 (file-append
245 (specification->package "wireshark")
246 "/bin/dumpcap"))
247 (file-like->setuid-program
248 (file-append
249 (specification->package "spice-gtk")
250 "/libexec/spice-client-glib-usb-acl-helper"))
251 (file-like->setuid-program
252 (file-append
253 (specification->package "opendoas")
254 "/bin/doas")))
255 (delete sudo %setuid-programs)))
256 (file-systems (cons*
257 (file-system
258 (mount-point "/tmp")
259 (device "none")
260 (type "tmpfs")
261 (check? #f))
262 %base-file-systems))
263 (bootloader (bootloader-configuration
264 (bootloader grub-efi-bootloader)
265 (targets (list "/boot/efi"))
266 (keyboard-layout keyboard-layout)))))