services: Add speakersafetyd service.

* gnu/services/sound.scm (speakersafetyd-shepherd-service)
(speakersafetyd-configuration)
(speakersafetyd-service-type): New variables.
* doc/guix.texi (Sound Services): Document it.

Change-Id: Ib8fa19b056a2036019ae7c199d81e1139664e951
Modified-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
This commit is contained in:
Roman Scherer 2025-02-15 10:24:35 +01:00 committed by Maxim Cournoyer
parent 5135b9e805
commit af643735a5
No known key found for this signature in database
GPG key ID: 1260E46482E63562
2 changed files with 108 additions and 1 deletions

View file

@ -3,6 +3,7 @@
;;; Copyright © 2020 Liliana Marie Prikler <liliana.prikler@gmail.com>
;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2025 Roman Scherer <roman@burningswell.com>
;;;
;;; 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