dotfiles/guix/base.scm
Chris Cochrun 4ecebc0cdd adding qmk to guix
Inside of base we now have the appropriate udev rules and the manifest
to setup qmk. Also we have qmk setup as a submodule.
2023-07-13 06:44:09 -05:00

307 lines
12 KiB
Scheme

;; This file is my OS base
;;
;; Author: Chris Cochrun
;; Email: chris@cochrun.xyz
;;
;; License: GPLv3
;;
(define-module (base)
#:use-module (srfi srfi-1)
#:use-module (gnu)
#:use-module (gnu services)
#:use-module (gnu services shepherd)
#:use-module (gnu services dbus)
#:use-module (gnu system)
#:use-module (gnu system setuid)
#:use-module (gnu system nss)
#:use-module (gnu system shadow)
#:use-module (gnu packages android)
#:use-module (rosenthal packages wm)
#:use-module (nongnu packages linux)
#:use-module (nongnu system linux-initrd)
#:export (base-system-packages base-operating-system))
(use-service-modules cups desktop networking ssh xorg avahi
admin base nix dbus pm audio virtualization sysctl)
(use-package-modules nfs certs shells ssh linux bash emacs gnome networking wm fonts glib libusb
cups freedesktop file-systems version-control package-management)
(define etc-sudoers-config
(plain-file "etc-sudoers-config"
"Defaults timestamp_timeout=480
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
YOUR-USER-NAME ALL=(ALL) NOPASSWD:/run/current-system/profile/bin/chvt,/run/current-system/profile/bin/loginctl"))
(define qmk-udev-rules
(udev-rule
"50-qmk.rules"
(string-append
"# Atmel DFU
### ATmega16U2
SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"03eb\", ATTRS{idProduct}==\"2fef\", TAG+=\"uaccess\"
### ATmega32U2
SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"03eb\", ATTRS{idProduct}==\"2ff0\", TAG+=\"uaccess\"
### ATmega16U4
SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"03eb\", ATTRS{idProduct}==\"2ff3\", TAG+=\"uaccess\"
### ATmega32U4
SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"03eb\", ATTRS{idProduct}==\"2ff4\", TAG+=\"uaccess\"
### AT90USB64
SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"03eb\", ATTRS{idProduct}==\"2ff9\", TAG+=\"uaccess\"
### AT90USB162
SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"03eb\", ATTRS{idProduct}==\"2ffa\", TAG+=\"uaccess\"
### AT90USB128
SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"03eb\", ATTRS{idProduct}==\"2ffb\", TAG+=\"uaccess\"
# Input Club
SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"1c11\", ATTRS{idProduct}==\"b007\", TAG+=\"uaccess\"
# STM32duino
SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"1eaf\", ATTRS{idProduct}==\"0003\", TAG+=\"uaccess\"
# STM32 DFU
SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"0483\", ATTRS{idProduct}==\"df11\", TAG+=\"uaccess\"
# BootloadHID
SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"16c0\", ATTRS{idProduct}==\"05df\", TAG+=\"uaccess\"
# USBAspLoader
SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"16c0\", ATTRS{idProduct}==\"05dc\", TAG+=\"uaccess\"
# USBtinyISP
SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"1782\", ATTRS{idProduct}==\"0c9f\", TAG+=\"uaccess\"
# ModemManager should ignore the following devices
# Atmel SAM-BA (Massdrop)
SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"03eb\", ATTRS{idProduct}==\"6124\", TAG+=\"uaccess\", ENV{ID_MM_DEVICE_IGNORE}=\"1\"
# Caterina (Pro Micro)
## pid.codes shared PID
### Keyboardio Atreus 2 Bootloader
SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"1209\", ATTRS{idProduct}==\"2302\", TAG+=\"uaccess\", ENV{ID_MM_DEVICE_IGNORE}=\"1\"
## Spark Fun Electronics
### Pro Micro 3V3/8MHz
SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"1b4f\", ATTRS{idProduct}==\"9203\", TAG+=\"uaccess\", ENV{ID_MM_DEVICE_IGNORE}=\"1\"
### Pro Micro 5V/16MHz
SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"1b4f\", ATTRS{idProduct}==\"9205\", TAG+=\"uaccess\", ENV{ID_MM_DEVICE_IGNORE}=\"1\"
### LilyPad 3V3/8MHz (and some Pro Micro clones)
SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"1b4f\", ATTRS{idProduct}==\"9207\", TAG+=\"uaccess\", ENV{ID_MM_DEVICE_IGNORE}=\"1\"
## Pololu Electronics
### A-Star 32U4
SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"1ffb\", ATTRS{idProduct}==\"0101\", TAG+=\"uaccess\", ENV{ID_MM_DEVICE_IGNORE}=\"1\"
## Arduino SA
### Leonardo
SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"2341\", ATTRS{idProduct}==\"0036\", TAG+=\"uaccess\", ENV{ID_MM_DEVICE_IGNORE}=\"1\"
### Micro
SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"2341\", ATTRS{idProduct}==\"0037\", TAG+=\"uaccess\", ENV{ID_MM_DEVICE_IGNORE}=\"1\"
## Adafruit Industries LLC
### Feather 32U4
SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"239a\", ATTRS{idProduct}==\"000c\", TAG+=\"uaccess\", ENV{ID_MM_DEVICE_IGNORE}=\"1\"
### ItsyBitsy 32U4 3V3/8MHz
SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"239a\", ATTRS{idProduct}==\"000d\", TAG+=\"uaccess\", ENV{ID_MM_DEVICE_IGNORE}=\"1\"
### ItsyBitsy 32U4 5V/16MHz
SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"239a\", ATTRS{idProduct}==\"000e\", TAG+=\"uaccess\", ENV{ID_MM_DEVICE_IGNORE}=\"1\"
## dog hunter AG
### Leonardo
SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"2a03\", ATTRS{idProduct}==\"0036\", TAG+=\"uaccess\", ENV{ID_MM_DEVICE_IGNORE}=\"1\"
### Micro
SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"2a03\", ATTRS{idProduct}==\"0037\", TAG+=\"uaccess\", ENV{ID_MM_DEVICE_IGNORE}=\"1\"
# hid_listen
KERNEL==\"hidraw*\", MODE=\"0660\", GROUP=\"plugdev\", TAG+=\"uaccess\", TAG+=\"udev-acl\"
# hid bootloaders
## QMK HID
SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"03eb\", ATTRS{idProduct}==\"2067\", TAG+=\"uaccess\"
## PJRC's HalfKay
SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"16c0\", ATTRS{idProduct}==\"0478\", TAG+=\"uaccess\"
# APM32 DFU
SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"314b\", ATTRS{idProduct}==\"0106\", TAG+=\"uaccess\"
# GD32V DFU
SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"28e9\", ATTRS{idProduct}==\"0189\", TAG+=\"uaccess\"
# WB32 DFU
SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"342d\", ATTRS{idProduct}==\"dfa0\", TAG+=\"uaccess\"
")))
(define-public base-system-packages
(append (map specification->package
'( "nss-certs"
"sway"
"dbus-glib"
"hyprland"
"mesa"
"mesa-utils"
"libvdpau"
"android-udev-rules"
"adb"
"fastboot"
"vulkan-tools"
"vulkan-headers"
"libva"
"libva-utils"
"intel-vaapi-driver"
"libvdpau"
"libvdpau-va-gl"
"emacs-next-pgtk"))
%base-packages))
(define-public base-system-services
(append
(list ;; To configure OpenSSH, pass an 'openssh-configuration'
;; record as a second argument to 'service' below.
(service openssh-service-type)
fontconfig-file-system-service
(service sane-service-type)
(service cups-service-type
(cups-configuration
(web-interface? #t)
(extensions
(list cups-filters))))
(simple-service 'mtp udev-service-type (list libmtp))
(udev-rules-service 'pipewire-add-udev-rules pipewire)
(udev-rules-service 'brightnessctl-udev-rules brightnessctl)
(udev-rules-service 'android android-udev-rules
#:groups '("adbusers"))
(udev-rules-service 'qmk qmk-udev-rules)
(service nix-service-type)
(service screen-locker-service-type
(screen-locker-configuration
(name "swaylock")
(program (file-append 'swaylock-effects "/home/chris/.guix-home/profile/bin/swaylock"))
(allow-empty-password? #f)
(using-pam? #t)
(using-setuid? #f)))
(set-xorg-configuration
(xorg-configuration (keyboard-layout (keyboard-layout "us"))
(drivers '("modesetting" "mesa"))))
(service console-font-service-type
(map (lambda (tty)
;; Use a larger font for HIDPI screens
(cons tty (file-append
font-terminus
"/share/consolefonts/ter-132n")))
'("tty1" "tty2" "tty3" "tty4" "tty5" "tty6")))
(service greetd-service-type
(greetd-configuration
(greeter-supplementary-groups
(list "input" "video"))
(terminals
(list
(greetd-terminal-configuration
(terminal-vt "1")
(terminal-switch #t)
(default-session-command
(greetd-agreety-session
(command
(file-append dbus "/bin/dbus-run-session"))
(command-args (list "Hyprland")))))
(greetd-terminal-configuration (terminal-vt "2"))
(greetd-terminal-configuration (terminal-vt "3"))
(greetd-terminal-configuration (terminal-vt "4"))
(greetd-terminal-configuration (terminal-vt "5"))
(greetd-terminal-configuration (terminal-vt "6"))))))
;; NetworkManager and its applet.
(service network-manager-service-type)
(service wpa-supplicant-service-type) ;needed by NetworkManager
(simple-service 'network-manager-applet
profile-service-type
(list network-manager-applet))
(service modem-manager-service-type)
(service usb-modeswitch-service-type)
(service bluetooth-service-type
(bluetooth-configuration
(auto-enable? #t)))
;; The D-Bus clique.
polkit-wheel-service
(service avahi-service-type)
(service udisks-service-type)
(service upower-service-type)
;; (service accountsservice-service-type)
(service cups-pk-helper-service-type)
(service colord-service-type)
(service geoclue-service-type)
(service polkit-service-type)
(service elogind-service-type)
(service dbus-root-service-type)
(service ntp-service-type)
(service x11-socket-directory-service-type))
(modify-services %base-services
(guix-service-type config => (guix-configuration
(inherit config)
(substitute-urls
(append (list "https://substitutes.nonguix.org" "http://172.16.1.7:8080")
%default-substitute-urls))
(authorized-keys
(append (list
(plain-file "nonguix.pub" "(public-key (ecc (curve Ed25519) (q #C1FD53E5D4CE971933EC50C9F307AE2171A2D3B52C804642A7A35F84F3A4EA98#)))")
(plain-file "kaladin.pub" "(public-key (ecc (curve Ed25519) (q #7C5E5BEDFC0650E10AE70762F481021C0633C57376DFC7B1C3C4BE0115FD4264#)))"))
%default-authorized-guix-keys))
(discover? #t)))
;; greetd-service-type provides "greetd" PAM service
(delete login-service-type)
(delete console-font-service-type)
;; and can be used in place of mingetty-service-type
(delete mingetty-service-type)
(delete mingetty-service-type)
(delete mingetty-service-type)
(delete mingetty-service-type)
(delete mingetty-service-type)
(delete mingetty-service-type))))
(define-public base-operating-system
(operating-system
(kernel linux-xanmod)
(initrd microcode-initrd)
(firmware (list linux-firmware))
(locale "en_US.utf8")
(timezone "America/Chicago")
(keyboard-layout (keyboard-layout "us"))
(host-name "narnia")
;; Additional kernel modules
;; (kernel-loadable-modules (list v4l2loopback-linux-module))
;; The list of user accounts ('root' is implicit).
(users (cons* (user-account
(name "chris")
(comment "Chris")
(group "users")
(home-directory "/home/chris")
(supplementary-groups '("wheel" "netdev" "tty" "audio" "video" "adbusers")))
%base-user-accounts))
(sudoers-file etc-sudoers-config)
(packages base-system-packages)
(services base-system-services)
(bootloader (bootloader-configuration
(bootloader grub-efi-bootloader)
(targets (list "/boot/efi"))
(keyboard-layout keyboard-layout)))
;; Guix doesn't like it when there isn't a file-systems
;; entry, so add one that is meant to be overridden
(file-systems (cons*
(file-system
(mount-point "/tmp")
(device "none")
(type "tmpfs")
(check? #f))
%base-file-systems))))