summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/home-config/base-system.scm182
-rw-r--r--modules/home-packages/easyeffects.scm56
-rw-r--r--modules/home-packages/wm.scm22
-rw-r--r--modules/home-services/pipewire.scm99
4 files changed, 359 insertions, 0 deletions
diff --git a/modules/home-config/base-system.scm b/modules/home-config/base-system.scm
new file mode 100644
index 0000000..0276bfd
--- /dev/null
+++ b/modules/home-config/base-system.scm
@@ -0,0 +1,182 @@
+(define-module (home-config base-system)
+ #:use-module (gnu)
+ #:use-module (nongnu packages linux)
+ #:use-module (gnu system setuid)
+ #:use-module (gnu packages admin)
+ #:use-module (gnu packages avahi)
+ #:use-module (gnu packages)
+ #:use-module (guix packages)
+ #:use-module (gnu packages shells)
+ #:use-module (guix build-system trivial)
+ #:use-module (guix licenses)
+ #:use-module (gnu packages tls)
+ #:use-module (srfi srfi-1)
+ #:use-module (home-packages wm)
+ #:use-module (gnu packages security-token)
+ #:use-module (gnu services security-token)
+ #:use-module (gnu services cups)
+ #:use-module (gnu services desktop)
+ #:use-module (gnu services networking)
+ #:use-module (gnu services xorg)
+ #:use-module (gnu services ssh)
+ #:use-module (gnu services nix)
+ #:use-module (gnu services sound)
+ #:use-module (gnu services docker)
+ #:use-module (gnu services avahi)
+ #:use-module (gnu services authentication)
+ #:use-module (gnu services virtualization))
+
+(define %my-base-packages
+ (remove (lambda (package)
+ (member (package-name package)
+ (list "sudo" "nano")))
+ %base-packages))
+
+(define %backlight-udev-rule
+ (udev-rule
+ "90-backlight.rules"
+ (string-append "ACTION==\"add\", SUBSYSTEM==\"backlight\", "
+ "RUN+=\"/run/current-system/profile/bin/chgrp video /sys/class/backlight/%k/brightness\""
+ "\n"
+ "ACTION==\"add\", SUBSYSTEM==\"backlight\", "
+ "RUN+=\"/run/current-system/profile/bin/chmod g+w /sys/class/backlight/%k/brightness\"")))
+
+(define-public base-operating-system
+ (operating-system
+ (kernel linux)
+ (firmware (list linux-firmware intel-microcode sof-firmware))
+ (locale "en_US.utf8")
+ (timezone "America/New_York")
+ (keyboard-layout (keyboard-layout "us"))
+ (host-name "ThisWillChange")
+
+ ;; The list of user accounts ('root' is implicit).
+ (users (cons* (user-account
+ (name "tylerm")
+ (comment "Tyler")
+ (group "users")
+ (home-directory "/home/tylerm")
+ (shell (file-append zsh "/bin/zsh"))
+ (supplementary-groups '("wheel" "audio" "lp" "docker" "plugdev" "libvirt" "kvm" "netdev" "video" "tty")))
+ %base-user-accounts))
+
+ (packages (append (map specification->package (list "swayfx"
+ "swaybg"
+ "wlogout"
+ "sof-firmware"
+ "intel-microcode"
+ "alsa-utils"
+ "swayidle"
+ ;"swaylock"
+ "alacritty"
+ "gnome-themes-extra"
+ "adwaita-icon-theme"
+ "hicolor-icon-theme"
+ "git"
+ "nss-certs"
+ "gnupg"
+ "light"
+ "waybar"
+ "avahi"
+ "mako"
+ "grim"
+ "slurp"
+ "wl-clipboard"
+ "bluez"
+ "blueman"
+ "opendoas"
+ "xdg-desktop-portal"
+ "xdg-desktop-portal-wlr"
+ "v4l2loopback-linux-module"
+ "docker"
+ "linux-pam"
+ "pulseaudio"
+ ;;"pipewire"
+ "fprintd"
+ "wireplumber"
+ "virt-manager"
+ "wireshark"
+ "zsh"
+ "neovim"))
+ (list swaylock-effects-new)
+ %my-base-packages))
+
+ ;; Below is the list of system services. TO search for available
+ ;; services. run 'guix system search KEYWORD' in a terminal.
+ (services
+ (append (list
+
+ ;; To configure OpenSSH, pass an 'openssh-configuration'
+ ;; record as a second argument to 'service' below.
+ (service openssh-service-type)
+ (service pcscd-service-type)
+ (service cups-service-type
+ (cups-configuration
+ (web-interface? #t)))
+ ;; Avahi is only present for CUPS to support "automagic" printing
+ (service avahi-service-type
+ (avahi-configuration
+ (publish? #f) ;; do not advertise this machiene
+ (publish-workstation? #f))) ; do not advertise, I want this to be as silent as possible
+ (service docker-service-type)
+ (service nix-service-type)
+ (service libvirt-service-type
+ (libvirt-configuration
+ (unix-sock-group "libvirt")))
+ (service virtlog-service-type)
+ (service bluetooth-service-type)
+ (service pam-limits-service-type)
+ (service fprintd-service-type)
+ (udev-rules-service 'fido2 libfido2 #:groups '("plugdev")))
+
+ ;; This is the default list of services we
+ ;; are appending to.
+ (modify-services %desktop-services
+ (guix-service-type config =>
+ (guix-configuration
+ (inherit config)
+ (substitute-urls
+ (append (list "https://substitutes.nonguix.org")
+ %default-substitute-urls))
+ (authorized-keys
+ (cons* (plain-file "non-guix.pub"
+ "(public-key
+ (ecc
+ (curve Ed25519)
+ (q #C1FD53E5D4CE971933EC50C9F307AE2171A2D3B52C804642A7A35F84F3A4EA98#)
+ )
+ )" ) %default-authorized-guix-keys))))
+ (udev-service-type config =>
+ (udev-configuration
+ (inherit config)))
+ (delete pulseaudio-service-type)
+ (delete gdm-service-type)
+ (delete avahi-service-type)
+ (delete alsa-service-type))))
+
+ (name-service-switch %mdns-host-lookup-nss)
+
+ (setuid-programs
+ (append (list (file-like->setuid-program
+ (file-append
+ ;;(specification->package "swaylock")
+ swaylock-effects-new
+ "/bin/swaylock"))
+ (file-like->setuid-program
+ (file-append
+ (specification->package "opendoas")
+ "/bin/doas")))
+ (delete sudo %setuid-programs)))
+
+ (file-systems (cons*
+ (file-system
+ (mount-point "/tmp")
+ (device "none")
+ (type "tmpfs")
+ (check? #f))
+ %base-file-systems))
+
+ (bootloader (bootloader-configuration
+ (bootloader grub-efi-bootloader)
+ (targets (list "/boot/efi"))
+ (keyboard-layout keyboard-layout)))))
diff --git a/modules/home-packages/easyeffects.scm b/modules/home-packages/easyeffects.scm
new file mode 100644
index 0000000..a675168
--- /dev/null
+++ b/modules/home-packages/easyeffects.scm
@@ -0,0 +1,56 @@
+(define-module (home-packages easyeffects)
+ #:use-module (guix download)
+ #:use-module (guix packages)
+ #:use-module (guix gexp)
+ #:use-module (gnu packages)
+ #:use-module (gnu packages gettext)
+ #:use-module (gnu packages glib)
+ #:use-module (gnu packages gtk)
+ #:use-module (gnu packages pkg-config)
+ #:use-module (guix build-system meson)
+ #:use-module (guix licenses)
+ #:use-module (guix packages)
+ #:use-module (guix utils))
+
+(define-public easyeffects
+ (package
+ (name "easyeffects")
+ (version "6.3.0")
+ (native-inputs
+ `(("gettext" ,gettext-minimal)
+ ("glib:bin" ,glib "bin")
+ ("pkg-config" ,pkg-config)
+ ("gtk" ,gtk)))
+ (inputs
+ (append (specifications->packages (list "itstool"
+ "zita-convolver"
+ "rnnoise"
+ "tbb"
+ "pipewire"
+ "glib"
+ "libadwaita"
+ "libsigc++"
+ "lilv"
+ "libbs2b"
+ "libsndfile"
+ "fftwf"
+ "libebur128"
+ "libsamplerate"
+ "rubberband"
+ "speexdsp"
+ "nlohmann-json"
+ "fmt"
+ "gtk+:bin"
+ "desktop-file-utils"))))
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "https://github.com/wwmm/easyeffects/archive/refs/tags/v" version
+ ".tar.gz"))
+ (sha256
+ (base32
+ "08l84qbv7jwnq1ffpf9sw013bshnkn18h487gpqhn5s4ha4gchkg"))))
+ (build-system meson-build-system)
+ (synopsis "Limiter, compressor, convolver, equalizer and auto volume and many other plugins for PipeWire applications")
+ (description "Limiter, compressor, convolver, equalizer and auto volume and many other plugins for PipeWire applications")
+ (home-page "https://github.com/wwmm/easyeffects")
+ (license gpl3+)))
diff --git a/modules/home-packages/wm.scm b/modules/home-packages/wm.scm
new file mode 100644
index 0000000..9de5dc0
--- /dev/null
+++ b/modules/home-packages/wm.scm
@@ -0,0 +1,22 @@
+(define-module (home-packages wm)
+ #:use-module (guix download)
+ #:use-module (guix packages)
+ #:use-module (guix gexp)
+ #:use-module (gnu packages)
+ #:use-module (guix git-download)
+ #:use-module (guix utils)
+ #:use-module (gnu packages wm))
+
+(define-public swaylock-effects-new
+ (package
+ (inherit swaylock-effects)
+ (version "1.6.11")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/jirutka/swaylock-effects")
+ (commit (string-append "v" version))))
+ (sha256
+ (base32
+ "0j7dxn66xqlf6iv2arqzz7mxlh7nf85anvpyf30d2frcidarda9h"))))
+ (inputs (modify-inputs (package-inputs swaylock-effects) (delete "linux-pam")))))
diff --git a/modules/home-services/pipewire.scm b/modules/home-services/pipewire.scm
new file mode 100644
index 0000000..3a96977
--- /dev/null
+++ b/modules/home-services/pipewire.scm
@@ -0,0 +1,99 @@
+(define-module (home-services pipewire)
+ #:use-module (gnu packages)
+ #:use-module (gnu packages linux)
+ #:use-module (gnu services)
+ #:use-module (gnu services configuration)
+ #:use-module (gnu home services)
+ #:use-module (gnu home services shepherd)
+ #:use-module (guix gexp))
+
+(define (home-pipewire-profile-service config)
+ (map specification->package
+ (list "pipewire"
+ "wireplumber")))
+
+(define (home-pipewire-shepherd-service config)
+ (list
+ ;; Pipewire daemon
+ (shepherd-service
+ (requirement '(dbus))
+ (provision '(pipewire))
+ (stop #~(make-kill-destructor))
+ (start #~(make-forkexec-constructor
+ (list #$(file-append pipewire "/bin/pipewire"))
+ #:log-file (string-append
+ (or (getenv "XDG_LOG_HOME")
+ (format #f "~a/.local/var/log"
+ (getenv "HOME")))
+ "/pipewire.log")
+ #:environment-variables
+ (append (list "DISABLE_RTKIT=0")
+ (default-environment-variables)))))
+ ;; Pipewire-pulse
+ (shepherd-service
+ (requirement '(pipewire))
+ (provision '(pipewire-pulse))
+ (stop #~(make-kill-destructor))
+ (start #~(make-forkexec-constructor
+ (list #$(file-append pipewire "/bin/pipewire-pulse"))
+ #:log-file (string-append
+ (or (getenv "XDG_LOG_HOME")
+ (format #f "~a/.local/var/log"
+ (getenv "HOME")))
+ "/pipewire-pulse.log")
+ #:environment-variables
+ (append (list "DISABLE_RTKIT=0")
+ (default-environment-variables)))))
+ ;; Wireplumber
+ (shepherd-service
+ (requirement '(pipewire))
+ (provision '(wireplumber))
+ (stop #~(make-kill-destructor))
+ (start #~(make-forkexec-constructor
+ (list #$(file-append wireplumber "/bin/wireplumber"))
+ #:log-file (string-append
+ (or (getenv "XDG_LOG_HOME")
+ (format #f "~a/.local/var/log"
+ (getenv "HOME")))
+ "/wireplumber.log")
+ #:environment-variables
+ (append (list "DISABLE_RTKIT=0")
+ (default-environment-variables)))))))
+
+(define (home-pipewire-xdg-configuration-service config)
+ `(("alsa/asoundrc"
+ ,(mixed-text-file
+ "asoundrc"
+ #~(string-append
+ "<"
+ #$(file-append
+ pipewire "/share/alsa/alsa.conf.d/50-pipewire.conf")
+ ">\n<"
+ #$(file-append
+ pipewire "/share/alsa/alsa.conf.d/99-pipewire-default.conf")
+ ">\n"
+ "
+ pcm_type.pipewire {
+ lib " #$(file-append pipewire "/lib/alsa-lib/libasound_module_pcm_pipewire.so")
+ "
+ }
+ ctl_type.pipewire {
+ lib " #$(file-append pipewire "/lib/alsa-lib/libasound_module_ctl_pipewire.so")
+ "
+ }
+ ")))))
+
+(define-public home-pipewire-service-type
+ (service-type (name 'home-pipewire)
+ (extensions
+ (list (service-extension
+ home-profile-service-type
+ home-pipewire-profile-service)
+ (service-extension
+ home-shepherd-service-type
+ home-pipewire-shepherd-service)
+ (service-extension
+ home-xdg-configuration-files-service-type
+ home-pipewire-xdg-configuration-service)))
+ (default-value #f)
+ (description "Configures and runs Pipewire and Wireplumber")))