From: Andrew Tropin <andrew@trop.in>
To: "Ludovic Courtès" <ludo@gnu.org>
Cc: 52808@debbugs.gnu.org, Nick Zalutskiy <nick@const.fun>
Subject: bug#52808: Guix home should not assume that all targets are dot files
Date: Fri, 11 Mar 2022 10:41:26 +0300 [thread overview]
Message-ID: <87o82dkkbd.fsf@trop.in> (raw)
In-Reply-To: <871qzgm33o.fsf@gnu.org>
[-- Attachment #1.1: Type: text/plain, Size: 4355 bytes --]
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 <andrew@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 <andrew@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 <andrew@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 <andrew@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 <andrew@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 <andrew@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.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.2: 0001-home-symlink-manager-Use-existing-home-directory-sym.patch --]
[-- Type: text/x-patch, Size: 1110 bytes --]
From 3a6dc64d3366aa37507c83c598cbddb0f0815b6d Mon Sep 17 00:00:00 2001
From: Andrew Tropin <andrew@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
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.3: 0002-home-symlink-manager-Add-missing-done-word-in-messag.patch --]
[-- Type: text/x-patch, Size: 2603 bytes --]
From aaef728aaf621884cce49539d47abb09a9f1e32d Mon Sep 17 00:00:00 2001
From: Andrew Tropin <andrew@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
[-- Attachment #1.4: Type: text/plain, Size: 172 bytes --]
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.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.5: v2-0001-home-Explicitly-connect-home-file-and-symlink-man.patch --]
[-- Type: text/x-patch, Size: 5199 bytes --]
From 1509c974029d161009b35bfd76132a86425bdecc Mon Sep 17 00:00:00 2001
From: Andrew Tropin <andrew@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
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.6: v2-0002-home-Add-home-xdg-configuration-files-service.patch --]
[-- Type: text/x-patch, Size: 2266 bytes --]
From e98e5ee520fada9c6d100f40fcafa6358b626365 Mon Sep 17 00:00:00 2001
From: Andrew Tropin <andrew@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
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.7: v2-0003-home-shells-Migrate-zsh-to-xdg-configuration-file.patch --]
[-- Type: text/x-patch, Size: 5979 bytes --]
From 2dcb5da4991607b01b479c12617c00bf0785d247 Mon Sep 17 00:00:00 2001
From: Andrew Tropin <andrew@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
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.8: v2-0004-home-Migrate-fountutils-and-xdg-modules-to-xdg-co.patch --]
[-- Type: text/x-patch, Size: 4888 bytes --]
From 99ef9ce7d0796642a54497e3a080e94a78fbb03c Mon Sep 17 00:00:00 2001
From: Andrew Tropin <andrew@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
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.9: v2-0005-home-symlink-manager-Respect-XDG_CONFIG_HOME-duri.patch --]
[-- Type: text/x-patch, Size: 2474 bytes --]
From f34175838dac46093a26971798b08c0679691b34 Mon Sep 17 00:00:00 2001
From: Andrew Tropin <andrew@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
[-- Attachment #1.10: Type: text/plain, Size: 122 bytes --]
I plan to prepare documentation, second patch series and announcement
next week.
--
Best regards,
Andrew Tropin
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 853 bytes --]
next prev parent reply other threads:[~2022-03-11 7:42 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-12-26 17:17 bug#52808: Guix home should not assume that all targets are dot files Nick Zalutskiy
2022-01-28 10:51 ` Andrew Tropin
2022-01-28 13:33 ` Nick Zalutskiy
2022-01-28 15:22 ` Andrew Tropin
2022-01-30 17:13 ` Ludovic Courtès
2022-02-02 8:10 ` Andrew Tropin
2022-02-08 9:46 ` Ludovic Courtès
2022-02-11 15:52 ` Andrew Tropin
2022-02-26 7:13 ` Andrew Tropin
2022-03-05 22:44 ` Ludovic Courtès
2022-03-09 4:26 ` Andrew Tropin
2022-03-10 10:56 ` Ludovic Courtès
2022-03-11 7:41 ` Andrew Tropin [this message]
2022-03-20 18:07 ` Ludovic Courtès
2022-02-08 12:58 ` Xinglu Chen
2022-02-10 20:32 ` Ludovic Courtès
[not found] ` <handler.52808.D52808.16477996643062.notifdone@debbugs.gnu.org>
2022-03-20 21:00 ` Ludovic Courtès
2022-03-28 9:17 ` Andrew Tropin
2022-03-29 9:51 ` Andrew Tropin
2022-04-10 20:52 ` Ludovic Courtès
2022-03-29 10:24 ` Andrew Tropin
2022-03-30 19:51 ` Ludovic Courtès
2022-04-08 18:18 ` Ludovic Courtès
2022-04-09 14:28 ` Andrew Tropin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://guix.gnu.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87o82dkkbd.fsf@trop.in \
--to=andrew@trop.in \
--cc=52808@debbugs.gnu.org \
--cc=ludo@gnu.org \
--cc=nick@const.fun \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).