services: mpd: Provision a default cache directory and set HOME.

Relates to <https://issues.guix.gnu.org/63082>.

* gnu/services/audio.scm (mpd-shepherd-service): Create a default .cache
directory.  Use mkdir-p/perms and refactor loop.  Set the HOME environment
variables.
This commit is contained in:
Maxim Cournoyer 2023-04-27 20:16:22 -04:00
parent 07bb69d52c
commit 776317e707
No known key found for this signature in database
GPG key ID: 1260E46482E63562
2 changed files with 33 additions and 21 deletions

View file

@ -34311,7 +34311,8 @@ The directory to store playlists.
The directory to store playlists.
@item @code{db-file} (type: maybe-string)
The location of the music database.
The location of the music database. When left unspecified,
@file{~/.cache/db} is used.
@item @code{state-file} (type: maybe-string)
The location of the file that stores current MPD's state.

View file

@ -472,7 +472,8 @@ (define-configuration mpd-configuration
(db-file
maybe-string
"The location of the music database.")
"The location of the music database. When left unspecified,
@file{~/.cache/db} is used.")
(state-file
maybe-string
@ -616,28 +617,38 @@ (define (mpd-shepherd-service config)
#~(begin
(use-modules (gnu build activation))
(let ((user (getpw #$username)))
(let ((home #$(user-account-home-directory user)))
(let ((user (getpw #$username))
(default-cache-dir (string-append home "/.cache")))
(define (init-directory directory)
(unless (file-exists? directory)
(mkdir-p/perms directory user #o755)))
(define (init-directory directory)
(unless (file-exists? directory)
(mkdir-p/perms directory user #o755)))
(for-each
init-directory
'#$(map dirname
;; XXX: Delete the potential "syslog"
;; log-file value, which is not a directory.
(delete "syslog"
(filter-map maybe-value
(list db-file
log-file
state-file
sticker-file))))))
;; Define a cache location that can be automatically used
;; for the database file, in case it hasn't been explicitly
;; specified.
(for-each
init-directory
(cons default-cache-dir
'#$(map dirname
;; XXX: Delete the potential "syslog"
;; log-file value, which is not a directory.
(delete "syslog"
(filter-map maybe-value
(list db-file
log-file
state-file
sticker-file)))))))
(make-forkexec-constructor
(list #$(file-append package "/bin/mpd") "--no-daemon"
#$config-file)
#:environment-variables '#$environment-variables))))
(make-forkexec-constructor
(list #$(file-append package "/bin/mpd") "--no-daemon"
#$config-file)
#:environment-variables
;; Set HOME so MPD can infer default paths, such as
;; for the database file.
(cons (string-append "HOME=" home)
'#$environment-variables))))))
(stop #~(make-kill-destructor))
(actions
(list (shepherd-configuration-action config-file)