(address . guix-patches@gnu.org)(name . Sughosha)(address . sughosha@proton.me)
From: Sughosha <sughosha@proton.me>
* gnu/home/services/sound.scm (home-pipewire-service-type):
New variable.
---
gnu/home/services/sound.scm | 90 ++++++++++++++++++++++++++++++++++++-
1 file changed, 89 insertions(+), 1 deletion(-)
Toggle diff (120 lines)
diff --git a/gnu/home/services/sound.scm b/gnu/home/services/sound.scm
index 22c1a99250..16bfe92f2f 100644
--- a/gnu/home/services/sound.scm
+++ b/gnu/home/services/sound.scm
@@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2023 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2023 Sughosha <sughosha@proton.me>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -18,14 +19,20 @@
(define-module (gnu home services sound)
#:use-module (gnu home services)
+ #:use-module (gnu home services desktop)
#:use-module (gnu home services shepherd)
+ #:use-module (gnu packages linux)
+ #:use-module (gnu packages pulseaudio)
+ #:use-module (guix packages)
#:use-module (guix records)
#:use-module (guix gexp)
#:use-module (srfi srfi-1)
#:use-module (ice-9 match)
#:export (home-pulseaudio-rtp-sink-service-type
home-pulseaudio-rtp-source-service-type
- %pulseaudio-rtp-multicast-address))
+ %pulseaudio-rtp-multicast-address
+
+ home-pipewire-service-type))
;;;
@@ -149,3 +156,84 @@ (define home-pulseaudio-rtp-source-service-type
"Define a PulseAudio source to receive audio broadcasted over RTP by
another PulseAudio instance.")
(default-value %pulseaudio-rtp-multicast-address)))
+
+;;;
+;;; PipeWire support.
+;;;
+
+(define (home-pipewire-files-service config)
+ `((".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") "
+}\n
+defaults.pcm.card 2\n
+defaults.ctl.card 2")))))
+
+(define (home-pipewire-shepherd-service config)
+ (list
+ (shepherd-service
+ (requirement '(dbus))
+ (provision '(pipewire))
+ (stop #~(make-kill-destructor))
+ (start #~(make-forkexec-constructor
+ (list #$(file-append pipewire "/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-media-session))
+ (stop #~(make-kill-destructor))
+ (start #~(make-forkexec-constructor
+ (list
+ #$(file-append
+ pipewire-media-session
+ "/bin/pipewire-media-session")
+ "-c"
+ #$(file-append
+ pipewire-media-session
+ "/share/pipewire/media-session.d/media-session.conf")))))
+ (shepherd-service
+ (requirement '(pipewire))
+ (provision '(pipewire-pulse))
+ (stop #~(make-kill-destructor))
+ (start #~(make-forkexec-constructor
+ (list #$(file-append pipewire "/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 pulseaudio)))))
+ (default-value '())
+ (description "Configure PipeWire sound support.")))
--
2.41.0