From f547426200d5547268d4a4a8f51c913072fa622f Mon Sep 17 00:00:00 2001 From: Leo Prikler Date: Fri, 10 Jan 2020 02:48:19 +0100 Subject: services: Add pulseaudio-configuration. * gnu/services/sound (): New record. (pulseaudio-etc): New procedure. (pulseaudio-environment): Add PULSE_CONFIG and PULSE_CLIENTCONFIG. (pulseaudio-service-type): Update accordingly. Signed-off-by: Marius Bakke --- gnu/services/sound.scm | 50 ++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 46 insertions(+), 4 deletions(-) diff --git a/gnu/services/sound.scm b/gnu/services/sound.scm index aaca733729..0ac96a02ad 100644 --- a/gnu/services/sound.scm +++ b/gnu/services/sound.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2018, 2020 Oleg Pykhalov +;;; Copyright © 2020 Leo Prikler ;;; ;;; This file is part of GNU Guix. ;;; @@ -34,6 +35,7 @@ #:export (alsa-configuration alsa-service-type + pulseaudio-configuration pulseaudio-service-type)) ;;; Commentary: @@ -106,19 +108,59 @@ ctl.!default { ;;; PulseAudio ;;; +(define-record-type* + pulseaudio-configuration make-pulseaudio-configuration + pulseaudio-configuration? + (client-conf pulseaudio-client-conf + (default '())) + (daemon-conf pulseaudio-daemon-conf + (default '())) + (script-file pulseaudio-script-file + (default (file-append pulseaudio "/etc/pulse/default.pa"))) + (system-script-file pulseaudio-system-script-file + (default + (file-append pulseaudio "/etc/pulse/system.pa")))) + (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")))) + `(("LADSPA_PATH" . ,(file-append swh-plugins "/lib/ladspa")) + ;; Define these variables, so that pulseaudio honors /etc. + ("PULSE_CONFIG" . "/etc/pulse/daemon.conf") + ("PULSE_CLIENTCONFIG" . "/etc/pulse/client.conf"))) + +(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 + (($ client-conf daemon-conf + default-script-file system-script-file) + `(("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-script-file "\n" + (map pulseaudio-conf-entry daemon-conf))) + ("default.pa" ,default-script-file) + ("system.pa" ,system-script-file)))))))) (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 -- cgit v1.2.3