diff options
-rw-r--r-- | homes/koi.scm | 4 | ||||
-rw-r--r-- | kbg/services/dbus.scm | 35 | ||||
-rw-r--r-- | kbg/services/desktop.scm | 4 | ||||
-rw-r--r-- | kbg/services/pipewire.scm | 75 |
4 files changed, 117 insertions, 1 deletions
diff --git a/homes/koi.scm b/homes/koi.scm index 3886582b..5018e60a 100644 --- a/homes/koi.scm +++ b/homes/koi.scm @@ -21,6 +21,8 @@ #:use-module (kbg services emacs) #:use-module (kbg services mcron) #:use-module (kbg services shell) + #:use-module (kbg services dbus) + #:use-module (kbg services pipewire) #:use-module (kbg services shepherd)) (home-environment @@ -35,5 +37,7 @@ (configs-for-host 'koi) emacs-service mcron-service + (list (service home-dbus-service-type) + (service home-pipewire-service-type)) (services-for-host 'koi)))) ;; shepherd-user-services diff --git a/kbg/services/dbus.scm b/kbg/services/dbus.scm new file mode 100644 index 00000000..f9ee709c --- /dev/null +++ b/kbg/services/dbus.scm @@ -0,0 +1,35 @@ +(define-module (kbg services dbus) + #:use-module (gnu home services) + #:use-module (gnu home services shepherd) + #:use-module (guix gexp) + #:export (home-dbus-service-type)) + +(define (home-dbus-environment-variables-service _) + '(("DBUS_SESSION_BUS_ADDRESS" . "unix:path=$XDG_RUNTIME_DIR/dbus.sock"))) + +(define (home-dbus-shepherd-service _) + (list + (shepherd-service + (provision '(dbus-home)) + (stop #~(make-kill-destructor)) + (start #~(make-forkexec-constructor + (list #$(file-append (@@ (gnu packages glib) dbus) + "/bin/dbus-daemon") + "--nofork" + "--session" + (string-append + "--address=" "unix:path=" + (getenv "XDG_RUNTIME_DIR") "/dbus.sock"))))))) + +(define home-dbus-service-type + (service-type + (name 'home-dbus) + (extensions + (list (service-extension + home-environment-variables-service-type + home-dbus-environment-variables-service) + (service-extension + home-shepherd-service-type + home-dbus-shepherd-service))) + (default-value #f) + (description "run dbus"))) diff --git a/kbg/services/desktop.scm b/kbg/services/desktop.scm index ac046b1a..39451de6 100644 --- a/kbg/services/desktop.scm +++ b/kbg/services/desktop.scm @@ -5,6 +5,7 @@ #:use-module (gnu packages gnome) #:use-module (gnu packages networking) #:use-module (gnu services networking) + #:use-module (gnu services sound) #:use-module (gnu services xorg) #:use-module (gnu packages vpn) #:export (%kbg-desktop-services)) @@ -20,4 +21,5 @@ (gdm-service-type config => (gdm-configuration (inherit config) - (wayland? #t))))) + (wayland? #t))) + (delete pulseaudio-service-type))) diff --git a/kbg/services/pipewire.scm b/kbg/services/pipewire.scm new file mode 100644 index 00000000..5f6b3b24 --- /dev/null +++ b/kbg/services/pipewire.scm @@ -0,0 +1,75 @@ +(define-module (kbg services pipewire) + #:use-module (guix gexp) + #:use-module (gnu packages linux) + #:use-module (gnu packages pulseaudio) + #:use-module (gnu home services) + #:use-module (gnu home services shepherd) + #:export (home-pipewire-service-type)) + +;; Copied from: +;; https://git.sr.ht/~krevedkokun/dotfiles/tree/master/item/home/services/pipewire.scm + +(define (home-pipewire-files-service _) + `((".config/alsa/asoundrc" + ,(mixed-text-file + "asoundrc" + #~(string-append + "<" + #$(file-append + pipewire-0.3 + "/share/alsa/alsa.conf.d/50-pipewire.conf") + ">\n<" + #$(file-append + pipewire-0.3 + "/share/alsa/alsa.conf.d/99-pipewire-default.conf") + ">\n" + " +pcm_type.pipewire { + lib " #$(file-append + pipewire-0.3 + "/lib/alsa-lib/libasound_module_pcm_pipewire.so") " +} + +ctl_type.pipewire { + lib " #$(file-append + pipewire-0.3 + "/lib/alsa-lib/libasound_module_ctl_pipewire.so") " +} +"))))) + +(define (home-pipewire-shepherd-service _) + (list + (shepherd-service + (requirement '(dbus-home)) + (provision '(pipewire)) + (stop #~(make-kill-destructor)) + (start #~(make-forkexec-constructor + (list #$(file-append pipewire-0.3 "/bin/pipewire"))))) + (shepherd-service + (requirement '(pipewire)) + (provision '(wireplumber)) + (stop #~(make-kill-destructor)) + (start #~(make-forkexec-constructor + (list #$(file-append wireplumber "/bin/wireplumber"))))) + (shepherd-service + (requirement '(pipewire)) + (provision '(pipewire-pulse)) + (stop #~(make-kill-destructor)) + (start #~(make-forkexec-constructor + (list #$(file-append pipewire-0.3 "/bin/pipewire-pulse"))))))) + +(define home-pipewire-service-type + (service-type + (name 'home-pipewire) + (extensions + (list (service-extension + home-files-service-type + home-pipewire-files-service) + (service-extension + home-shepherd-service-type + home-pipewire-shepherd-service) + (service-extension + home-profile-service-type + (const (list pipewire-0.3 pulseaudio))))) + (default-value #f) + (description "run pipewire and wireplumber"))) |