From bc4c3c85a8738958a2a1394eac3df8981e6a6eae Mon Sep 17 00:00:00 2001 From: David Thompson Date: Sat, 17 Feb 2024 07:49:33 -0500 Subject: Refactor home stuff into modules, add pipewire. --- dthompson/home/common.scm | 64 ++++++++++++++++++++++++++++ dthompson/home/pipewire.scm | 100 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 164 insertions(+) create mode 100644 dthompson/home/common.scm create mode 100644 dthompson/home/pipewire.scm (limited to 'dthompson/home') diff --git a/dthompson/home/common.scm b/dthompson/home/common.scm new file mode 100644 index 0000000..3469e3f --- /dev/null +++ b/dthompson/home/common.scm @@ -0,0 +1,64 @@ +;;; Copyright © 2023 David Thompson +;;; +;;; This program is free software; you can redistribute it and/or +;;; modify it under the terms of the GNU General Public License as +;;; published by the Free Software Foundation; either version 3 of the +;;; License, or (at your option) any later version. +;;; +;;; This program is distributed in the hope that it will be useful, +;;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;;; General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with this program. If not, see +;;; . + +(define-module (dthompson home common) + #:use-module (gnu home) + #:use-module (gnu packages) + #:use-module (gnu services) + #:use-module (guix channels) + #:use-module (guix gexp) + #:use-module (gnu home services) + #:use-module (gnu home services desktop) + #:use-module (gnu home services guix) + #:use-module (gnu home services shells)) + +(define (dotfiles . file-names) + (define dir (getcwd)) + (map (lambda (file-name) + (list file-name + (local-file (string-append dir "/dotfiles/" file-name) + (string-append "dotfile-" (basename file-name))))) + file-names)) + +(define-public common-services + (list (service home-dbus-service-type) + (service home-bash-service-type + (home-bash-configuration + (aliases '(("grep" . "grep --color=auto") + ("ls" . "ls -ahlp --color=auto"))))) + (simple-service 'dotfiles + home-files-service-type + (dotfiles ".emacs.d/init.el" ".guile" ".ssh/config")) + (simple-service 'channels + home-channels-service-type + (list + (channel + (name 'nonguix) + (url "https://gitlab.com/nonguix/nonguix") + (introduction + (make-channel-introduction + "897c1a470da759236cc11798f4e0a5f7d4d59fbc" + (openpgp-fingerprint + "2A39 3FFF 68F4 EF7A 3D29 12AF 6F51 20A0 22FB B2D5")))) + (channel + (name 'dthompson) + (url "https://git.dthompson.us/guix-channel.git") + (branch "main") + (introduction + (make-channel-introduction + "df2e993dbfe9e45e8ad66226d3a136e3ffcbebf8" + (openpgp-fingerprint + "8CCB A7F5 52B9 CBEA E1FB 2915 8328 C747 0FF1 D807")))))))) diff --git a/dthompson/home/pipewire.scm b/dthompson/home/pipewire.scm new file mode 100644 index 0000000..bff47ea --- /dev/null +++ b/dthompson/home/pipewire.scm @@ -0,0 +1,100 @@ +;; Snarfed from David Wilson who I believe snarfed from Andrew Tropin. +(define-module (dthompson home 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 + ;; Start 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=1") + (default-environment-variables))))) + ;; Start Pipewire PulseAudio module + (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=1") + (default-environment-variables))))) + ;; Start Wireplumber session manager + (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=1") + (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 the Pipewire audio system."))) -- cgit v1.2.3