From bf4708923d14356c87daec69209b30aa0427d64f Mon Sep 17 00:00:00 2001 From: Leo Prikler Date: Wed, 8 Jan 2020 19:50:51 +0100 Subject: [PATCH 1/3] services: Add pulseaudio-configuration. * gnu/services/sound (): New record. (pulseaudio-etc): New procedure. (pulseaudio-service-type): Update accordingly. --- gnu/services/sound.scm | 47 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/gnu/services/sound.scm b/gnu/services/sound.scm index aaca733729..f01d958ce7 100644 --- a/gnu/services/sound.scm +++ b/gnu/services/sound.scm @@ -34,6 +34,7 @@ #:export (alsa-configuration alsa-service-type + pulseaudio-configuration pulseaudio-service-type)) ;;; Commentary: @@ -106,19 +107,61 @@ ctl.!default { ;;; PulseAudio ;;; +(define-record-type* + pulseaudio-configuration make-pulseaudio-configuration + pulseaudio-configuration? + (package pulseaudio-package (default pulseaudio)) + (client-conf pulseaudio-client-conf (default '())) + (daemon-conf pulseaudio-daemon-conf (default '((flat-volumes no)))) + (default-script pulseaudio-default-script (default #f)) + (system-script pulseaudio-system-script (default #f))) + (define (pulseaudio-environment config) ;; Define this variable in the global environment such that ;; pulseaudio swh-plugins works. `(("LADSPA_PATH" . ,(file-append swh-plugins "/lib/ladspa")))) +(define (pulseaudio-conf-entry arg) + (match arg + ((key value) + (format #f "~a = ~s~%" key value)) + ((? string? _) + (string-append arg "\n")))) + +(define pulseaudio-etc + (match-lambda + (($ package client-conf daemon-conf + default-script system-script) + (let ((default.pa (if default-script + (apply mixed-text-file "default.pa" + default-script) + (file-append package "/etc/pulse/default.pa")))) + `(("pulse" + ,(file-union + "pulse" + `(("client.conf" + ,(apply mixed-text-file "client.conf" + (map pulseaudio-conf-entry client-conf))) + ("daemon.conf" + ,(apply mixed-text-file "daemon.conf" + "default-script-file = " default.pa "\n" + (map pulseaudio-conf-entry daemon-conf))) + ("default.pa" ,default.pa) + ("system.pa" + ,(if system-script + (apply mixed-text-file "system.pa" + system-script) + (file-append package "/etc/pulse/system.pa"))))))))))) + (define pulseaudio-service-type (service-type (name 'pulseaudio) (extensions (list (service-extension session-environment-service-type - pulseaudio-environment))) - (default-value #f) + pulseaudio-environment) + (service-extension etc-service-type pulseaudio-etc))) + (default-value (pulseaudio-configuration)) (description "Configure PulseAudio sound support."))) ;;; sound.scm ends here -- 2.24.1