On 2022-03-05 23:44, Ludovic Courtès wrote: > Hi Andrew, > > The patches reached my mailbox around the time I went on vacation and > then fell through the cracks. Sorry about that! > > Andrew Tropin <and...@trop.in> skribis: > >> After that patch series is merged we can give a time for users to >> migrate their self-made home services to xdg-configuration-files and >> after for example 2 weeks, remove special handling of dots for >> home-files. > > Sounds like a plan! > >> From 0cd37bbc724f9c793898c2655bdd1c335045c5f0 Mon Sep 17 00:00:00 2001 >> From: Andrew Tropin <and...@trop.in> >> Date: Fri, 11 Feb 2022 10:55:01 +0300 >> Subject: [PATCH 1/5] home: Explicitly connect home-file and symlink-manager >> services. >> >> * gnu/home/services.scm (home-files-directory): New variable. >> * gnu/home/symlink-manager.scm (update-symlinks-script): Use >> home-files-directory variable from (gnu home services). > > [...] > >> - (description "Configuration files for programs that >> -will be put in @file{~/.guix-home/files}."))) >> + (description (format #f "Files that will be put in >> +@file{~~/.guix-home/~a}, and further processed during activation." >> + home-files-directory)))) > > This hunk would prevent i18n so I suggest dropping it (you can mention > ‘home-files-directory’ in a margin comment for good measure). > > Otherwise LGTM. >
Done. > >> From 23f7095d60b18b52de0d1aa314c4012cdf55a046 Mon Sep 17 00:00:00 2001 >> From: Andrew Tropin <and...@trop.in> >> Date: Fri, 11 Feb 2022 11:03:02 +0300 >> Subject: [PATCH 2/5] home: Add home-xdg-configuration-files service. >> >> * gnu/home/services.scm (home-xdg-configuration-files): New variable. > > [...] > >> +(define xdg-configuration-files-subdir "config") >> >> +(define (xdg-configuration-files files) >> + (map (lambda (lst) >> + (cons (string-append xdg-configuration-files-subdir >> + "/" (car lst)) (cdr lst))) >> + files)) > > I’d just call it “.config” (instead of “config”). That way, there > wouldn’t be any special treatment. WDYT? Will be done in next patch series. > > Also: s/subdir/directory/, and please use ‘match’ instead of car/cdr > (info "(guix) Coding Style"). Done, done. > > >> + (description (format #f "Files that will be put in >> +@file{~~/.guix-home/~a/~a}, and further processed during activation." >> + home-files-directory >> + xdg-configuration-files)))) > > Same as above: drop ‘format’ and write ~/.guix-home/files/.config. > Done. > >> From 11f23a48d480a91d6bfba0ff55c1a9831585a4ee Mon Sep 17 00:00:00 2001 >> From: Andrew Tropin <and...@trop.in> >> Date: Fri, 11 Feb 2022 15:03:44 +0300 >> Subject: [PATCH 3/5] home: shells: Migrate zsh to xdg-configuration-files. >> >> * gnu/home/services.scm (home-zsh-service-type): Additionally extend >> home-xdg-configuration-files-service-type. > > [...] > >> From ef4c3bbcc0c8c1a251f4ad6c494f8ed30adf45f2 Mon Sep 17 00:00:00 2001 >> From: Andrew Tropin <and...@trop.in> >> Date: Fri, 11 Feb 2022 15:34:46 +0300 >> Subject: [PATCH 4/5] home: Migrate fountutils and xdg modules to >> xdg-configuration-files. >> >> * gnu/home/services/fontutils.scm (home-fontconfig-service-type): Migrate to >> xdg-configuration-files. >> * gnu/home/services/xdg.scm (home-xdg-user-directories-service-type, >> home-xdg-mime-applications-service-type): Migrate to xdg-configuration-files. > > Neat! > >> From 089683bbd301f6e085f00fbd53713f335abac40e Mon Sep 17 00:00:00 2001 >> From: Andrew Tropin <and...@trop.in> >> Date: Fri, 11 Feb 2022 16:14:23 +0300 >> Subject: [PATCH 5/5] home: symlink-manager: Respect XDG_CONFIG_HOME during >> activation. >> >> * gnu/home/services/symlink-manager.scm (update-symlinks-script): Respect >> XDG_CONFIG_HOME during activation. > > I propose to postpone this one after > <https://issues.guix.gnu.org/54180>, and I even offer to rebase it > myself if you want. :-) > > Could you send updated patches? > > Thanks in advance, and apologies again for the delay! > > Ludo’. Added two minor patches for symlink-manager.
From 3a6dc64d3366aa37507c83c598cbddb0f0815b6d Mon Sep 17 00:00:00 2001 From: Andrew Tropin <and...@trop.in> Date: Fri, 11 Mar 2022 08:43:04 +0300 Subject: [PATCH 1/2] home: symlink-manager: Use existing home-directory symbol. * gnu/home/services/symlink-manager.scm (update-symlinks-script): Use existing home-directory symbol instead of additional getenv call. --- gnu/home/services/symlink-manager.scm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gnu/home/services/symlink-manager.scm b/gnu/home/services/symlink-manager.scm index 767b1bdc01..bce5c85b56 100644 --- a/gnu/home/services/symlink-manager.scm +++ b/gnu/home/services/symlink-manager.scm @@ -185,7 +185,7 @@ (define (source-file file) #$%initialize-gettext - (let* ((home (string-append (getenv "HOME") "/.guix-home")) + (let* ((home (string-append home-directory "/.guix-home")) (pivot (string-append home ".new")) (new-home (getenv "GUIX_NEW_HOME")) (old-home (getenv "GUIX_OLD_HOME"))) -- 2.34.0
From aaef728aaf621884cce49539d47abb09a9f1e32d Mon Sep 17 00:00:00 2001 From: Andrew Tropin <and...@trop.in> Date: Fri, 11 Mar 2022 09:21:41 +0300 Subject: [PATCH 2/2] home: symlink-manager: Add missing 'done' word in message. * gnu/home/services/symlink-manager.scm (update-symlinks-script): Add missing 'done' word in message, keep code width below 80 column. --- gnu/home/services/symlink-manager.scm | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/gnu/home/services/symlink-manager.scm b/gnu/home/services/symlink-manager.scm index bce5c85b56..eb13d60496 100644 --- a/gnu/home/services/symlink-manager.scm +++ b/gnu/home/services/symlink-manager.scm @@ -107,9 +107,10 @@ (define (strip file) (format #t (G_ "Removing ~a...") file) (delete-file file) (display (G_ " done\n"))) - (format #t - (G_ "Skipping ~a (not a symlink to store)... done\n") - file))))) + (format + #t + (G_ "Skipping ~a (not a symlink to store)... done\n") + file))))) (const #t) ;down (lambda (directory stat _) ;up @@ -121,14 +122,15 @@ (define (strip file) (format #t (G_ "Removed ~a.\n") directory)) (lambda args (let ((errno (system-error-errno args))) - (cond ((= ENOTEMPTY errno) - (format - #t - (G_ "Skipping ~a (not an empty directory)...\n") - directory)) - ((= ENOTDIR errno) #t) - (else - (apply throw args))))))))) + (cond + ((= ENOTEMPTY errno) + (format + #t + (G_ "Skipping ~a (not an empty directory)... done\n") + directory)) + ((= ENOTDIR errno) #t) + (else + (apply throw args))))))))) (const #t) ;skip (const #t) ;error #t ;init -- 2.34.0
Thank you for cleaning up symlink-manager, now it's much nicer, simplier and I believe easier to maintain. Rebased previous patch series and addressed all the comments.
From 1509c974029d161009b35bfd76132a86425bdecc Mon Sep 17 00:00:00 2001 From: Andrew Tropin <and...@trop.in> Date: Fri, 11 Feb 2022 10:55:01 +0300 Subject: [PATCH v2 1/5] home: Explicitly connect home-file and symlink-manager services. * gnu/home/services.scm (home-files-directory): New variable. * gnu/home/symlink-manager.scm (update-symlinks-script): Use home-files-directory variable from (gnu home services). --- gnu/home/services.scm | 22 +++++++++++++--------- gnu/home/services/symlink-manager.scm | 15 +++++++-------- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/gnu/home/services.scm b/gnu/home/services.scm index 1cd19ce7f9..32b10e99aa 100644 --- a/gnu/home/services.scm +++ b/gnu/home/services.scm @@ -43,6 +43,8 @@ (define-module (gnu home services) home-run-on-change-service-type home-provenance-service-type + home-files-directory + fold-home-service-types home-provenance @@ -74,12 +76,11 @@ (define-module (gnu home services) ;;; file (details described in the manual). ;;; ;;; home-files-service-type is similar to etc-service-type, but doesn't extend -;;; home-activation, because deploy mechanism for config files is pluggable and -;;; can be different for different home environments: The default one is called -;;; symlink-manager (will be introudced in a separate patch series), which creates -;;; links for various dotfiles (like $XDG_CONFIG_HOME/$APP/...) to store, but is -;;; possible to implement alternative approaches like read-only home from Julien's -;;; guix-home-manager. +;;; home-activation, because deploy mechanism for config files is pluggable +;;; and can be different for different home environments: The default one is +;;; called symlink-manager, which creates links for various dotfiles and xdg +;;; configuration files to store, but is possible to implement alternative +;;; approaches like read-only home from Julien's guix-home-manager. ;;; ;;; home-run-on-first-login-service-type provides an @file{on-first-login} guile ;;; script, which runs provided gexps once, when user makes first login. It can @@ -262,11 +263,14 @@ (define (assert-no-duplicates files) (file-union "files" files)) +;; Used by symlink-manager +(define home-files-directory "files") + (define (files-entry files) "Return an entry for the @file{~/.guix-home/files} directory containing FILES." (with-monad %store-monad - (return `(("files" ,(files->files-directory files)))))) + (return `((,home-files-directory ,(files->files-directory files)))))) (define home-files-service-type (service-type (name 'home-files) @@ -276,8 +280,8 @@ (define home-files-service-type (compose concatenate) (extend append) (default-value '()) - (description "Configuration files for programs that -will be put in @file{~/.guix-home/files}."))) + (description "Files that will be put in +@file{~~/.guix-home/files}, and further processed during activation."))) (define %initialize-gettext #~(begin diff --git a/gnu/home/services/symlink-manager.scm b/gnu/home/services/symlink-manager.scm index eb13d60496..16031ea5d3 100644 --- a/gnu/home/services/symlink-manager.scm +++ b/gnu/home/services/symlink-manager.scm @@ -26,12 +26,11 @@ (define-module (gnu home services symlink-manager) ;;; Comment: ;;; -;;; symlink-manager cares about configuration files: it backs up files -;;; created by user, removes symlinks and directories created by a -;;; previous generation, and creates new directories and symlinks to -;;; configuration files according to the content of files/ directory -;;; (created by home-files-service) of the current home environment -;;; generation. +;;; symlink-manager cares about xdg configurations and other files: it backs +;;; up files created by user, removes symlinks and directories created by a +;;; previous generation, and creates new directories and symlinks to files +;;; according to the content of directories (created by home-files-service) of +;;; the current home environment generation. ;;; ;;; Code: @@ -84,7 +83,7 @@ (define (cleanup-symlinks home-generation) ;; store item containing a home generation. (define config-file-directory ;; Note: Trailing slash is needed because "files" is a symlink. - (string-append home-generation "/files/")) + (string-append home-generation "/" #$home-files-directory "/")) (define (strip file) (string-drop file @@ -143,7 +142,7 @@ (define (create-symlinks home-generation) ;; Create in $HOME symlinks for the files in HOME-GENERATION. (define config-file-directory ;; Note: Trailing slash is needed because "files" is a symlink. - (string-append home-generation "/files/")) + (string-append home-generation "/" #$home-files-directory "/")) (define (strip file) (string-drop file -- 2.34.0
From e98e5ee520fada9c6d100f40fcafa6358b626365 Mon Sep 17 00:00:00 2001 From: Andrew Tropin <and...@trop.in> Date: Fri, 11 Feb 2022 11:03:02 +0300 Subject: [PATCH v2 2/5] home: Add home-xdg-configuration-files service. * gnu/home/services.scm (home-xdg-configuration-files): New variable. --- gnu/home/services.scm | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/gnu/home/services.scm b/gnu/home/services.scm index 32b10e99aa..2f441eb968 100644 --- a/gnu/home/services.scm +++ b/gnu/home/services.scm @@ -38,12 +38,14 @@ (define-module (gnu home services) home-profile-service-type home-environment-variables-service-type home-files-service-type + home-xdg-configuration-files-service-type home-run-on-first-login-service-type home-activation-service-type home-run-on-change-service-type home-provenance-service-type home-files-directory + xdg-configuration-files-directory fold-home-service-types home-provenance @@ -283,6 +285,27 @@ (define home-files-service-type (description "Files that will be put in @file{~~/.guix-home/files}, and further processed during activation."))) +(define xdg-configuration-files-directory "config") + +(define (xdg-configuration-files files) + "Add config/ prefix to each file-path in FILES." + (map (match-lambda + ((file-path . rest) + (cons (string-append xdg-configuration-files-directory "/" file-path) + rest))) + files)) + +(define home-xdg-configuration-files-service-type + (service-type (name 'home-files) + (extensions + (list (service-extension home-files-service-type + xdg-configuration-files))) + (compose concatenate) + (extend append) + (default-value '()) + (description "Files that will be put in +@file{~~/.guix-home/files/config}, and further processed during activation."))) + (define %initialize-gettext #~(begin (bindtextdomain %gettext-domain -- 2.34.0
From 2dcb5da4991607b01b479c12617c00bf0785d247 Mon Sep 17 00:00:00 2001 From: Andrew Tropin <and...@trop.in> Date: Fri, 11 Feb 2022 15:03:44 +0300 Subject: [PATCH v2 3/5] home: shells: Migrate zsh to xdg-configuration-files. * gnu/home/services.scm (home-zsh-service-type): Additionally extend home-xdg-configuration-files-service-type. --- gnu/home/services/shells.scm | 122 +++++++++++++++++++---------------- 1 file changed, 66 insertions(+), 56 deletions(-) diff --git a/gnu/home/services/shells.scm b/gnu/home/services/shells.scm index ca7f4ac0ad..4b3618a868 100644 --- a/gnu/home/services/shells.scm +++ b/gnu/home/services/shells.scm @@ -171,56 +171,27 @@ (define-configuration home-zsh-configuration won't be read in some cases (if the shell terminates by exec'ing another process for example).")) -(define (add-zsh-configuration config) - (let* ((xdg-flavor? (home-zsh-configuration-xdg-flavor? config))) - - (define prefix-file - (cut string-append - (if xdg-flavor? - "config/zsh/." - "") <>)) - - (define (filter-fields field) - (filter-configuration-fields home-zsh-configuration-fields - (list field))) - - (define (serialize-field field) - (serialize-configuration - config - (filter-fields field))) - - (define (file-if-not-empty field) - (let ((file-name (symbol->string field)) - (field-obj (car (filter-fields field)))) - (if (not (null? ((configuration-field-getter field-obj) config))) - `(,(prefix-file file-name) - ,(mixed-text-file - file-name - (serialize-field field))) - '()))) - - (filter - (compose not null?) - `(,(if xdg-flavor? - `("zshenv" - ,(mixed-text-file - "auxiliary-zshenv" - (if xdg-flavor? - "source ${XDG_CONFIG_HOME:-$HOME/.config}/zsh/.zshenv\n" - ""))) - '()) - (,(prefix-file "zshenv") - ,(mixed-text-file - "zshenv" - (if xdg-flavor? - "export ZDOTDIR=${XDG_CONFIG_HOME:-$HOME/.config}/zsh\n" - "") - (serialize-field 'zshenv) - (serialize-field 'environment-variables))) - (,(prefix-file "zprofile") - ,(mixed-text-file - "zprofile" - "\ +(define (zsh-filter-fields field) + (filter-configuration-fields home-zsh-configuration-fields (list field))) + +(define (zsh-serialize-field config field) + (serialize-configuration config (zsh-filter-fields field))) + +(define* (zsh-field-not-empty? config field) + (let ((file-name (symbol->string field)) + (field-obj (car (zsh-filter-fields field)))) + (not (null? ((configuration-field-getter field-obj) config))))) + +(define (zsh-file-zshenv config) + (mixed-text-file + "zshenv" + (zsh-serialize-field config 'zshenv) + (zsh-serialize-field config 'environment-variables))) + +(define (zsh-file-zprofile config) + (mixed-text-file + "zprofile" + "\ # Setups system and user profiles and related variables source /etc/profile # Setups home environment profile @@ -229,11 +200,47 @@ (define (file-if-not-empty field) # It's only necessary if zsh is a login shell, otherwise profiles will # be already sourced by bash " - (serialize-field 'zprofile))) - - ,@(list (file-if-not-empty 'zshrc) - (file-if-not-empty 'zlogin) - (file-if-not-empty 'zlogout)))))) + (zsh-serialize-field config 'zprofile))) + +(define (zsh-file-by-field config field) + (match field + ('zshenv (zsh-file-zshenv config)) + ('zprofile (zsh-file-zprofile config)) + (e (mixed-text-file + (symbol->string field) + (zsh-serialize-field config field))))) + +(define (zsh-get-configuration-files config) + `(("zprofile" ,(zsh-file-by-field config 'zprofile)) ;; Always non-empty + ,@(if (and (zsh-field-not-empty? config 'zshenv) + (zsh-field-not-empty? config 'environment-variables)) + `(("zshenv" ,(zsh-file-by-field config 'zshenv))) '()) + ,@(if (zsh-field-not-empty? config 'zshrc) + `(("zshrc" ,(zsh-file-by-field config 'zshrc))) '()) + ,@(if (zsh-field-not-empty? config 'zlogin) + `(("zlogin" ,(zsh-file-by-field config 'zlogin))) '()) + ,@(if (zsh-field-not-empty? config 'zlogout) + `(("zlogout" ,(zsh-file-by-field config 'zlogout))) '()))) + +(define (zsh-home-files config) + (define zshenv-auxiliary-file + (mixed-text-file + "zshenv-auxiliary" + "export ZDOTDIR=${XDG_CONFIG_HOME:-$HOME/.config}/zsh\n" + "[[ -f $ZDOTDIR/.zshenv ]] && source $ZDOTDIR/.zshenv\n")) + + (if (home-zsh-configuration-xdg-flavor? config) + `(("zshenv" ,zshenv-auxiliary-file)) + (zsh-get-configuration-files config))) + +(define (zsh-xdg-configuration-files config) + (if (home-zsh-configuration-xdg-flavor? config) + (map + (lambda (lst) + (cons (string-append "zsh/." (car lst)) + (cdr lst))) + (zsh-get-configuration-files config)) + '())) (define (add-zsh-packages config) (list (home-zsh-configuration-package config))) @@ -291,7 +298,10 @@ (define home-zsh-service-type (extensions (list (service-extension home-files-service-type - add-zsh-configuration) + zsh-home-files) + (service-extension + home-xdg-configuration-files-service-type + zsh-xdg-configuration-files) (service-extension home-profile-service-type add-zsh-packages))) -- 2.34.0
From 99ef9ce7d0796642a54497e3a080e94a78fbb03c Mon Sep 17 00:00:00 2001 From: Andrew Tropin <and...@trop.in> Date: Fri, 11 Feb 2022 15:34:46 +0300 Subject: [PATCH v2 4/5] home: Migrate fountutils and xdg modules to xdg-configuration-files. * gnu/home/services/fontutils.scm (home-fontconfig-service-type): Migrate to xdg-configuration-files. * gnu/home/services/xdg.scm (home-xdg-user-directories-service-type, home-xdg-mime-applications-service-type): Migrate to xdg-configuration-files. --- gnu/home/services/fontutils.scm | 4 ++-- gnu/home/services/xdg.scm | 31 +++++++++++++++++-------------- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/gnu/home/services/fontutils.scm b/gnu/home/services/fontutils.scm index 772904367d..6062eaed6a 100644 --- a/gnu/home/services/fontutils.scm +++ b/gnu/home/services/fontutils.scm @@ -34,7 +34,7 @@ (define-module (gnu home services fontutils) ;;; Code: (define (add-fontconfig-config-file he-symlink-path) - `(("config/fontconfig/fonts.conf" + `(("fontconfig/fonts.conf" ,(mixed-text-file "fonts.conf" "<?xml version='1.0'?> @@ -51,7 +51,7 @@ (define home-fontconfig-service-type (service-type (name 'home-fontconfig) (extensions (list (service-extension - home-files-service-type + home-xdg-configuration-files-service-type add-fontconfig-config-file) (service-extension home-run-on-change-service-type diff --git a/gnu/home/services/xdg.scm b/gnu/home/services/xdg.scm index 2833198cdf..361a2a6148 100644 --- a/gnu/home/services/xdg.scm +++ b/gnu/home/services/xdg.scm @@ -190,11 +190,11 @@ (define-configuration home-xdg-user-directories-configuration "Default directory for videos.")) (define (home-xdg-user-directories-files-service config) - `(("config/user-dirs.conf" + `(("user-dirs.conf" ,(mixed-text-file "user-dirs.conf" "enabled=False\n")) - ("config/user-dirs.dirs" + ("user-dirs.dirs" ,(mixed-text-file "user-dirs.dirs" (serialize-configuration @@ -218,7 +218,7 @@ (define home-xdg-user-directories-service-type (service-type (name 'home-xdg-user-directories) (extensions (list (service-extension - home-files-service-type + home-xdg-configuration-files-service-type home-xdg-user-directories-files-service) (service-extension home-activation-service-type @@ -417,7 +417,7 @@ (define-configuration home-xdg-mime-applications-configuration "A list of XDG desktop entries to create. See @code{xdg-desktop-entry}.")) -(define (home-xdg-mime-applications-files-service config) +(define (home-xdg-mime-applications-files config) (define (add-xdg-desktop-entry-file entry) (let ((file (first entry)) (config (second entry))) @@ -425,16 +425,16 @@ (define (add-xdg-desktop-entry-file entry) (apply mixed-text-file (format #f "xdg-desktop-~a-entry" file) config)))) + (map (compose add-xdg-desktop-entry-file serialize-xdg-desktop-entry) + (home-xdg-mime-applications-configuration-desktop-entries config))) - (append - `(("config/mimeapps.list" - ,(mixed-text-file - "xdg-mime-appplications" - (serialize-configuration - config - home-xdg-mime-applications-configuration-fields)))) - (map (compose add-xdg-desktop-entry-file serialize-xdg-desktop-entry) - (home-xdg-mime-applications-configuration-desktop-entries config)))) +(define (home-xdg-mime-applications-xdg-files config) + `(("mimeapps.list" + ,(mixed-text-file + "xdg-mime-appplications" + (serialize-configuration + config + home-xdg-mime-applications-configuration-fields))))) (define (home-xdg-mime-applications-extension old-config extension-configs) (define (extract-fields config) @@ -469,7 +469,10 @@ (define home-xdg-mime-applications-service-type (extensions (list (service-extension home-files-service-type - home-xdg-mime-applications-files-service))) + home-xdg-mime-applications-files) + (service-extension + home-xdg-configuration-files-service-type + home-xdg-mime-applications-xdg-files))) (compose identity) (extend home-xdg-mime-applications-extension) (default-value (home-xdg-mime-applications-configuration)) -- 2.34.0
From f34175838dac46093a26971798b08c0679691b34 Mon Sep 17 00:00:00 2001 From: Andrew Tropin <and...@trop.in> Date: Fri, 11 Mar 2022 10:12:30 +0300 Subject: [PATCH v2 5/5] home: symlink-manager: Respect XDG_CONFIG_HOME during activation. * gnu/home/services/symlink-manager.scm (update-symlinks-script): Respect XDG_CONFIG_HOME during activation. --- gnu/home/services/symlink-manager.scm | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/gnu/home/services/symlink-manager.scm b/gnu/home/services/symlink-manager.scm index 16031ea5d3..3b851229f3 100644 --- a/gnu/home/services/symlink-manager.scm +++ b/gnu/home/services/symlink-manager.scm @@ -50,14 +50,29 @@ (define (update-symlinks-script) (define home-directory (getenv "HOME")) + (define xdg-config-home + (or (getenv "XDG_CONFIG_HOME") + (string-append (getenv "HOME") "/.config"))) + (define backup-directory (string-append home-directory "/" (number->string (current-time)) "-guix-home-legacy-configs-backup")) + (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))) + (string-append "." file))) + (define (target-file file) ;; Return the target of FILE, a config file name sans leading dot ;; such as "config/fontconfig/fonts.conf" or "bashrc". - (string-append home-directory "/." file)) + (string-append home-directory "/" (preprocess-file file))) (define (symlink-to-store? file) (catch 'system-error @@ -70,7 +85,7 @@ (define (symlink-to-store? file) (define (backup-file file) (define backup - (string-append backup-directory "/." file)) + (string-append backup-directory "/" (preprocess-file file))) (mkdir-p backup-directory) (format #t (G_ "Backing up ~a...") (target-file file)) -- 2.34.0
I plan to prepare documentation, second patch series and announcement next week. -- Best regards, Andrew Tropin
signature.asc
Description: PGP signature