home: Add home-xdg-data-files-service-type.

* gnu/home/services.scm (home-xdg-data-files-service-type): New variable.
* gnu/home/services/symlink-manager.scm (update-symlinks-script): Add a proper
handling for XDG_DATA_HOME value.
* gnu/home/services/xdg.scm (home-xdg-mime-applications-service-type): Use
home-xdg-data-files service.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
This commit is contained in:
Andrew Tropin 2022-03-29 12:47:39 +03:00 committed by Ludovic Courtès
parent 5832d9fb60
commit 20645d8467
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5
3 changed files with 46 additions and 9 deletions

View file

@ -39,6 +39,7 @@ (define-module (gnu home services)
home-environment-variables-service-type
home-files-service-type
home-xdg-configuration-files-service-type
home-xdg-data-files-service-type
home-run-on-first-login-service-type
home-activation-service-type
home-run-on-change-service-type
@ -46,6 +47,7 @@ (define-module (gnu home services)
home-files-directory
xdg-configuration-files-directory
xdg-data-files-directory
fold-home-service-types
home-provenance
@ -306,6 +308,29 @@ (define home-xdg-configuration-files-service-type
(description "Files that will be put in
@file{~~/.guix-home/files/.config}, and further processed during activation.")))
(define xdg-data-files-directory ".local/share")
(define (xdg-data-files files)
"Add .local/share prefix to each file-path in FILES."
(map (match-lambda
((file-path . rest)
(cons (string-append xdg-data-files-directory "/" file-path)
rest)))
files))
(define home-xdg-data-files-service-type
(service-type (name 'home-xdg-data)
(extensions
(list (service-extension home-files-service-type
xdg-data-files)))
(compose concatenate)
(extend append)
(default-value '())
(description "Files that will be put in
@file{~~/.guix-home/files/.local/share}, and further processed during
activation.")))
(define %initialize-gettext
#~(begin
(bindtextdomain %gettext-domain

View file

@ -54,6 +54,10 @@ (define xdg-config-home
(or (getenv "XDG_CONFIG_HOME")
(string-append (getenv "HOME") "/.config")))
(define xdg-data-home
(or (getenv "XDG_DATA_HOME")
(string-append (getenv "HOME") "/.local/share")))
(define backup-directory
(string-append home-directory "/" (number->string (current-time))
"-guix-home-legacy-configs-backup"))
@ -61,13 +65,20 @@ (define backup-directory
(define (preprocess-file file)
"If file is in XDG-CONFIGURATION-FILES-DIRECTORY use
subdirectory from XDG_CONFIG_HOME to generate a target path."
(if (string-prefix? #$xdg-configuration-files-directory file)
(string-append
(substring xdg-config-home
(1+ (string-length home-directory)))
(substring file
(string-length #$xdg-configuration-files-directory)))
file))
(cond
((string-prefix? #$xdg-configuration-files-directory file)
(string-append
(substring xdg-config-home
(1+ (string-length home-directory)))
(substring file
(string-length #$xdg-configuration-files-directory))))
((string-prefix? #$xdg-data-files-directory file)
(string-append
(substring xdg-data-home
(1+ (string-length home-directory)))
(substring file
(string-length #$xdg-data-files-directory))))
(else file)))
(define (target-file file)
;; Return the target of FILE, a config file name sans leading dot

View file

@ -421,7 +421,8 @@ (define (home-xdg-mime-applications-files config)
(define (add-xdg-desktop-entry-file entry)
(let ((file (first entry))
(config (second entry)))
(list (format #f ".local/share/applications/~a" file)
;; TODO: Use xdg-data-files instead of home-files here
(list (format #f "applications/~a" file)
(apply mixed-text-file
(format #f "xdg-desktop-~a-entry" file)
config))))
@ -468,7 +469,7 @@ (define home-xdg-mime-applications-service-type
(service-type (name 'home-xdg-mime-applications)
(extensions
(list (service-extension
home-files-service-type
home-xdg-data-files-service-type
home-xdg-mime-applications-files)
(service-extension
home-xdg-configuration-files-service-type