guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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


From: guix-commits
Subject: 08/09: services: mpd: Provision a default cache directory and set HOME.
Date: Wed, 26 Jul 2023 11:12:54 -0400 (EDT)

apteryx pushed a commit to branch master
in repository guix.

commit 776317e7072979ee87246c8382e63395d7cbfe4b
Author: Maxim Cournoyer <maxim.cournoyer@gmail.com>
AuthorDate: Thu Apr 27 20:16:22 2023 -0400

    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.
---
 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)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]