From 776317e7072979ee87246c8382e63395d7cbfe4b Mon Sep 17 00:00:00 2001 From: Maxim Cournoyer Date: Thu, 27 Apr 2023 20:16:22 -0400 Subject: services: mpd: Provision a default cache directory and set HOME. Relates to . * gnu/services/audio.scm (mpd-shepherd-service): Create a default .cache directory. Use mkdir-p/perms and refactor loop. Set the HOME environment variables. --- doc/guix.texi | 3 ++- gnu/services/audio.scm | 57 ++++++++++++++++++++++++++++++-------------------- 2 files changed, 36 insertions(+), 24 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index 67928d290d..31643bfacf 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -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. diff --git a/gnu/services/audio.scm b/gnu/services/audio.scm index 3083090ad0..f01357ad8b 100644 --- a/gnu/services/audio.scm +++ b/gnu/services/audio.scm @@ -472,7 +472,8 @@ The available values, in decreasing order of verbosity, are: @code{verbose}, (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 @@ appended to the configuration.") #~(begin (use-modules (gnu build activation)) - (let ((user (getpw #$username))) - - (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)))))) - - (make-forkexec-constructor - (list #$(file-append package "/bin/mpd") "--no-daemon" - #$config-file) - #:environment-variables '#$environment-variables)))) + (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 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 + ;; 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) -- cgit 1.4.1