diff options
-rw-r--r-- | doc/guix.texi | 43 | ||||
-rw-r--r-- | gnu/services/sound.scm | 66 |
2 files changed, 108 insertions, 1 deletions
diff --git a/doc/guix.texi b/doc/guix.texi index bd66adf326..01e3a4edf0 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -26575,6 +26575,49 @@ details. @end defvar +@subsubheading Speaker Safety Daemon System Service + +@uref{https://github.com/AsahiLinux/speakersafetyd, Speaker Safety +Daemon} is a user-space daemon that implements an analogue of the Texas +Instruments Smart Amp speaker protection model. It can be used to +protect the speakers on Apple Silicon devices. + +@defvar speakersafetyd-service-type +This is the type for the @code{speakersafetyd} system service, whose +value is a @command{speakersafetyd-configuration} record. + +@lisp +(service speakersafetyd-service-type) +@end lisp + +See below for details about @code{speakersafetyd-configuration}. +@end defvar + +@c %start of fragment +@deftp {Data Type} speakersafetyd-configuration +Available @code{speakersafetyd-configuration} fields are: + +@table @asis +@item @code{blackbox-directory} (default: @code{"/var/lib/speakersafetyd/blackbox"}) (type: string) +The directory to which blackbox files are written when the speakers are +getting too hot. The blackbox files contain audio and debug information +which the developers of @code{speakersafetyd} might ask for when +reporting bugs. + +@item @code{configuration-directory} (type: file-like) +The base directory as a G-expression (@pxref{G-Expressions}) that +contains the configuration files of the speaker models. + +@item @code{maximum-gain-reduction} (default: @code{7}) (type: integer) +Maximum gain reduction before panicking, useful for debugging. + +@item @code{speakersafetyd} (default: @code{speakersafetyd}) (type: file-like) +The Speaker Safety Daemon package to use. + +@end table +@end deftp +@c %end of fragment + @node File Search Services @subsection File Search Services diff --git a/gnu/services/sound.scm b/gnu/services/sound.scm index 8ca7acd737..20f78bb500 100644 --- a/gnu/services/sound.scm +++ b/gnu/services/sound.scm @@ -3,6 +3,7 @@ ;;; Copyright © 2020 Liliana Marie Prikler <[email protected]> ;;; Copyright © 2020 Marius Bakke <[email protected]> ;;; Copyright © 2022 Maxim Cournoyer <[email protected]> +;;; Copyright © 2025 Roman Scherer <[email protected]> ;;; ;;; This file is part of GNU Guix. ;;; @@ -35,6 +36,7 @@ #:use-module (gnu packages audio) #:use-module (gnu packages linux) #:use-module (gnu packages pulseaudio) + #:use-module (gnu packages rust-apps) #:use-module (ice-9 match) #:use-module (srfi srfi-1) #:export (alsa-configuration @@ -56,7 +58,15 @@ ladspa-configuration ladspa-configuration? ladspa-configuration-plugins - ladspa-service-type)) + ladspa-service-type + + speakersafetyd-configuration + speakersafetyd-configuration-blackbox-directory + speakersafetyd-configuration-configuration-directory + speakersafetyd-configuration-maximum-gain-reduction + speakersafetyd-configuration-speakersafetyd + speakersafetyd-configuration? + speakersafetyd-service-type)) ;;; Commentary: ;;; @@ -263,4 +273,58 @@ computed-file object~%") file)))) (default-value (ladspa-configuration)) (description "Configure LADSPA plugins."))) + +;;; +;;; Speaker Safety Daemon. +;;; + +(define-configuration/no-serialization speakersafetyd-configuration + (blackbox-directory + (string "/var/lib/speakersafetyd/blackbox") + "The directory to which blackbox files are written when the speakers are +getting too hot. The blackbox files contain audio and debug information which +the developers of @code{speakersafetyd} might ask for when reporting bugs.") + (configuration-directory + (file-like (file-append speakersafetyd "/share/speakersafetyd")) + "The base directory as a G-expression (@pxref{G-Expressions}) that contains +the configuration files of the speaker models.") + (maximum-gain-reduction + (integer 7) + "Maximum gain reduction before panicking, useful for debugging.") + (speakersafetyd + (file-like speakersafetyd) + "The Speaker Safety Daemon package to use.")) + +(define speakersafetyd-shepherd-service + (match-record-lambda <speakersafetyd-configuration> + (blackbox-directory configuration-directory maximum-gain-reduction speakersafetyd) + (shepherd-service + (documentation "Run the speaker safety daemon") + (provision '(speakersafetyd)) + (requirement '(udev)) + (start #~(make-forkexec-constructor + (list #$(file-append speakersafetyd "/bin/speakersafetyd") + "--config-path" #$configuration-directory + "--blackbox-path" #$blackbox-directory + "--max-reduction" (number->string #$maximum-gain-reduction)))) + (stop #~(make-kill-destructor))))) + +(define speakersafetyd-service-type + (service-type + (name 'speakersafetyd) + (description "Run @command{speakersafetyd}, a user space daemon that +implements an analogue of the Texas Instruments Smart Amp speaker protection +model. It can be used to protect the speakers on Apple Silicon devices.") + (extensions + (list (service-extension + shepherd-root-service-type + (compose list speakersafetyd-shepherd-service)) + (service-extension + udev-service-type + (compose list speakersafetyd-configuration-speakersafetyd)) + (service-extension + profile-service-type + (compose list speakersafetyd-configuration-speakersafetyd)))) + (default-value (speakersafetyd-configuration)))) + ;;; sound.scm ends here |