From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp10.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms0.migadu.com with LMTPS id 6O20GkrTGWKDawEAgWs5BA (envelope-from ) for ; Sat, 26 Feb 2022 08:14:18 +0100 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp10.migadu.com with LMTPS id uAB1E0rTGWKBgwAAG6o9tA (envelope-from ) for ; Sat, 26 Feb 2022 08:14:18 +0100 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id D74F0281DD for ; Sat, 26 Feb 2022 08:14:17 +0100 (CET) Received: from localhost ([::1]:38614 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nNrHV-0005JG-3W for larch@yhetil.org; Sat, 26 Feb 2022 02:14:17 -0500 Received: from eggs.gnu.org ([209.51.188.92]:38946) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nNrHG-0005J7-Gt for bug-guix@gnu.org; Sat, 26 Feb 2022 02:14:02 -0500 Received: from debbugs.gnu.org ([209.51.188.43]:60274) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nNrHG-0001u8-8B for bug-guix@gnu.org; Sat, 26 Feb 2022 02:14:02 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1nNrHG-0001q6-4Q for bug-guix@gnu.org; Sat, 26 Feb 2022 02:14:02 -0500 X-Loop: help-debbugs@gnu.org Subject: bug#52808: Guix home should not assume that all targets are dot files Resent-From: Andrew Tropin Original-Sender: "Debbugs-submit" Resent-CC: bug-guix@gnu.org Resent-Date: Sat, 26 Feb 2022 07:14:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 52808 X-GNU-PR-Package: guix X-GNU-PR-Keywords: To: Ludovic =?UTF-8?Q?Court=C3=A8s?= Received: via spool by 52808-submit@debbugs.gnu.org id=B52808.16458596227030 (code B ref 52808); Sat, 26 Feb 2022 07:14:02 +0000 Received: (at 52808) by debbugs.gnu.org; 26 Feb 2022 07:13:42 +0000 Received: from localhost ([127.0.0.1]:54171 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nNrGu-0001pJ-Rb for submit@debbugs.gnu.org; Sat, 26 Feb 2022 02:13:41 -0500 Received: from mail-lf1-f45.google.com ([209.85.167.45]:42944) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nNrGs-0001p1-M9 for 52808@debbugs.gnu.org; Sat, 26 Feb 2022 02:13:40 -0500 Received: by mail-lf1-f45.google.com with SMTP id t13so963976lfd.9 for <52808@debbugs.gnu.org>; Fri, 25 Feb 2022 23:13:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=trop-in.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:in-reply-to:references:date:message-id :mime-version; bh=V8KI9SzLGkYxnSsYggX1A1KOYEek05PbJsg++O6okW8=; b=VGDcNijfXIX1kbxPngcIxebP36FcE5SUeLIfoW3B3kTHBmvH51+2KYOXp9vdGIXiK7 K6ehUgdhCTkCXxdQR/3b/GX4vCV+swICHvo9jySruRKSryvkwN83MItFEbu48NCXIqq4 MpmalekpjMz8/Xwe1dt2LO/nUNNxg5rrTnapZ/oJy9jJBj3Qf6ZAVl3NPrlirkHVi7mP OmbMmprR2TS2Aecwg6H2Zm6V3Q1OmVD19vnnQ3E1KservX3mtb4JgeZuropmq6BREKsu unWM9wJ/rk0jWELGRi9on2MhHYwPDU+c7/IkwSC35GrLRLZb4c+u8zKsWd7OVV7c7oOc KiFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references:date :message-id:mime-version; bh=V8KI9SzLGkYxnSsYggX1A1KOYEek05PbJsg++O6okW8=; b=4YywnGhmOJ2gXqBF5JPkm5itP570h5XRJcocBBBPoMgXBf/eFvnsGwng0xk0UnH5E0 i9a/5aMdAMQbdQ6he69XNnDxfb3pE/K3IGWyhlUTF4YXlhuO0xeL8WFL2d2n387FVLRL PGQlOPd4YfqRf+vNATFkttmJJhqBkn4+PULvpz72FqvjjuVbHyG8YBSzT+V440yHNPS2 FzuAe941GxzkqpIBHbtFbj5B6ELIymxid05zYjQfl7v+ay1yJKLbJa0PlR/vKPi9nrZZ EDAW5Gk/4dTcFFOVa13TY74lDxAECGmVeGihDS1Sl4uG9r63OyXhOsP1yB3n4oxjxqUe az3Q== X-Gm-Message-State: AOAM533I0lLqtlYJd85YDIq8ATnvmpcynsWMaslwCQdFGUS+oz/2+DsR aVNGKEit7m8/U3t00fSZYsytdulIsQ9nYw== X-Google-Smtp-Source: ABdhPJzReUG0GArWWTVqlyVQJ6wDClrrl7w/XYK9pswuaY5Xn8uMXm8B7pfIeZ3SNoDJUdbrD08NWQ== X-Received: by 2002:a05:6512:128b:b0:43c:9b6:55f6 with SMTP id u11-20020a056512128b00b0043c09b655f6mr6911191lfs.196.1645859612744; Fri, 25 Feb 2022 23:13:32 -0800 (PST) Received: from localhost (109-252-135-33.dynamic.spd-mgts.ru. [109.252.135.33]) by smtp.gmail.com with ESMTPSA id b27-20020ac2563b000000b00443bf519186sm388757lff.53.2022.02.25.23.13.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 25 Feb 2022 23:13:32 -0800 (PST) From: Andrew Tropin In-Reply-To: <87r189s8mz.fsf@trop.in> References: <6050c325-9ae9-406a-97fe-91bdf9bcd12a@www.fastmail.com> <87bkzw2kvm.fsf@trop.in> <87o83t9mf8.fsf@gnu.org> <878rutzo1d.fsf@trop.in> <87zgn1bsha.fsf@gnu.org> <87r189s8mz.fsf@trop.in> Date: Sat, 26 Feb 2022 10:13:29 +0300 Message-ID: <87lexydrs6.fsf@trop.in> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha512; protocol="application/pgp-signature" X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-guix@gnu.org List-Id: Bug reports for GNU Guix List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: 52808@debbugs.gnu.org, Nick Zalutskiy Errors-To: bug-guix-bounces+larch=yhetil.org@gnu.org Sender: "bug-Guix" X-Migadu-Flow: FLOW_IN X-Migadu-Country: US ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1645859658; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:resent-cc:resent-from:resent-sender: resent-message-id:in-reply-to:in-reply-to:references:references: list-id:list-help:list-unsubscribe:list-subscribe:list-post: dkim-signature; bh=V8KI9SzLGkYxnSsYggX1A1KOYEek05PbJsg++O6okW8=; b=f0KA/ZzQ62H6OePLwqsg+0CgE+qma//j7Pgma8lDc77nx433GbYxF9HM2eIGUC3hpkZylG Q8at+xvVMg/SuXLydkj9H98K+lVXJWTn7gJtz4WdiPWqIoKL6fYXVGpMEVML1IAaW+e5Mp C2T61yv6XESa3s3IOLiypukIRb6yxot4NDUtPbVpKhD7mdgCzJD4rlqzB1fBNZl5SaSxtU BrZPD07iqQlSs+vyo7W3zDYBZuYerbuWgYKoh9ZdSwfMCukWXuQX+FQBt10r1qyupT1EkV mY2DgFqPuutv3cqJUBhrTTA1Ah+9/039IEX+PqOqoaT/F3EqYrh+3qm9h5B0Hw== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1645859658; a=rsa-sha256; cv=none; b=L3G7jgy7MhN2ADve4f9lG6DgevgWQZ6FIFfBAvnh0yCL6UUYF9hVKkJJLDSGTlUmXr6VT6 N9VHPmJA/9C+4fiRwm6CLFX4zAP14Df+YUNr9TUbijIYd1NClmGO/VfOjM/Uk8CcKF/DPq L9KmTRQv3zkiClAsDCz7xaQ+hzGMe3P9NmJxChKyPU5nmbrP/7drIRaa1CZ3czx2u02xdS EmMYm2cJGgqIglsxStOEZCKAdgdqHUbENZc34899giqLA0hPObrjCq4w0smeJQxKVbPaSL L4V6fepO3UaOCa89bU7+zEXnJNklb5zr1YBA/md4ZNZp2du7QOnNJREppZyzEQ== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=trop-in.20210112.gappssmtp.com header.s=20210112 header.b=VGDcNijf; dmarc=none; spf=pass (aspmx1.migadu.com: domain of "bug-guix-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="bug-guix-bounces+larch=yhetil.org@gnu.org" X-Migadu-Spam-Score: -2.02 Authentication-Results: aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=trop-in.20210112.gappssmtp.com header.s=20210112 header.b=VGDcNijf; dmarc=none; spf=pass (aspmx1.migadu.com: domain of "bug-guix-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="bug-guix-bounces+larch=yhetil.org@gnu.org" X-Migadu-Queue-Id: D74F0281DD X-Spam-Score: -2.02 X-Migadu-Scanner: scn0.migadu.com X-TUID: /vJkdE3drh4q --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On 2022-02-11 18:52, Andrew Tropin wrote: > On 2022-02-08 10:46, Ludovic Court=C3=A8s wrote: > >> Hi, >> >> Andrew Tropin skribis: >> >>>>> You can elaborate more on what you try to achieve and I can try to gi= ve >>>>> you a recommendation how to implement it. >>>> >>>> I=E2=80=99d expect =E2=80=98home-files-service-type=E2=80=99 to do jus= t that: add files to the >>>> home directory, without trying to be smart. >>>> >>>> Would it make sense to distinguish between =E2=80=98home-files=E2=80= =99 and (say) >>>> =E2=80=98home-xdg-configuration-files=E2=80=99? >>> >>> Yep, I can do that, actually, it will be even better for the purpose I >>> originally had. I'll make home-files to store files as it is and >>> symlink manager not to add leading dots and a separate folder for >>> xdg configs. >> >> Neat. >> >>> Ludo, Nick, what do you think about following names? >>> ~/.guix-home/home-dir-files/ >>> ~/.guix-home/xdg-config-dir-files/ >> >> I=E2=80=99d make it =E2=80=98=E2=80=A6/home-files=E2=80=99 and =E2=80=98= =E2=80=A6/xdg-configuration-files=E2=80=99, but that=E2=80=99s a >> detail. >> >>>> I=E2=80=99d also suggest removing special handling of HOME/files in >>>> symlink-manager.scm. Relations between the various components of Guix >>>> Home should preferably be made explicit via service extensions, and not >>>> implicit through conventions like this =E2=80=98files=E2=80=99 sub-dir= ectory. >>>> >>>> Thoughts? >>> >>> Unfortunatelly, I don't know how to implement polymorphic behavior the >>> other way with current extension mechanism, so I would prefer to keep >>> this relation implicit, >> >> I=E2=80=99m not sure I follow but maybe I should try by myself to get a = better >> understanding. >> >> Thanks for your feedback! >> >> Ludo=E2=80=99. > > I decided to go one step at a time, and prepared a patch series, which: > > 1. Adds an explicit connection between home-files-service-type and > symlink-manager by introducing a global constant used by both services. > > 2. Adds a home-xdg-configuration-files-service-type, which accepts a > list of files for XDG_CONFIG_DIR, `(("mpv/mpv.conf" ,file-like-here)) > > 3. Migrates all (gnu home services) to xdg-configuration-files. > > 4. Make symlink-manager respect XDG_CONIFG_HOME and > xdg-configuration-files-subdir. > > 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. > > From 0cd37bbc724f9c793898c2655bdd1c335045c5f0 Mon Sep 17 00:00:00 2001 > From: Andrew Tropin > Date: Fri, 11 Feb 2022 10:55:01 +0300 > Subject: [PATCH 1/5] home: Explicitly connect home-file and symlink-manag= er > 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 | 23 ++++++++++++++--------- > gnu/home/services/symlink-manager.scm | 17 +++++++++-------- > 2 files changed, 23 insertions(+), 17 deletions(-) > > diff --git a/gnu/home/services.scm b/gnu/home/services.scm > index 1cd19ce7f9..e4e3717b80 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 >=20=20 > + home-files-directory > + > fold-home-service-types > home-provenance >=20=20 > @@ -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 plugga= ble and > -;;; can be different for different home environments: The default one is= called > -;;; symlink-manager (will be introudced in a separate patch series), whi= ch creates > -;;; links for various dotfiles (like $XDG_CONFIG_HOME/$APP/...) to store= , but is > -;;; possible to implement alternative approaches like read-only home fro= m Julien's > -;;; guix-home-manager. > +;;; home-activation, because deploy mechanism for config files is plugga= ble > +;;; and can be different for different home environments: The default on= e is > +;;; called symlink-manager, which creates links for various dotfiles and= xdg > +;;; configuration files to store, but is possible to implement alternati= ve > +;;; approaches like read-only home from Julien's guix-home-manager. > ;;; > ;;; home-run-on-first-login-service-type provides an @file{on-first-logi= n} guile > ;;; script, which runs provided gexps once, when user makes first login.= It can > @@ -262,11 +263,14 @@ (define (assert-no-duplicates files) >=20=20 > (file-union "files" files)) >=20=20 > +;; 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)))))) >=20=20 > (define home-files-service-type > (service-type (name 'home-files) > @@ -276,8 +280,9 @@ (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 (format #f "Files that will be put in > +@file{~~/.guix-home/~a}, and further processed during activation." > + home-files-directory)))) >=20=20 > (define %initialize-gettext > #~(begin > diff --git a/gnu/home/services/symlink-manager.scm b/gnu/home/services/sy= mlink-manager.scm > index 314da3ba3e..747bb343d3 100644 > --- a/gnu/home/services/symlink-manager.scm > +++ b/gnu/home/services/symlink-manager.scm > @@ -25,12 +25,11 @@ (define-module (gnu home services symlink-manager) >=20=20 > ;;; 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 b= acks > +;;; up files created by user, removes symlinks and directories created b= y a > +;;; previous generation, and creates new directories and symlinks to fil= es > +;;; according to the content of directories (created by home-files-servi= ce) of > +;;; the current home environment generation. > ;;; > ;;; Code: >=20=20 > @@ -94,7 +93,8 @@ (define ((file-tree-traverse preordering) node) > (new-home (getenv "GUIX_NEW_HOME")) > (old-home (getenv "GUIX_OLD_HOME")) >=20=20 > - (new-files-path (string-append new-home "/files")) > + (new-files-path (string-append > + new-home "/" #$home-files-directory)) > ;; Trailing dot is required, because files itself is symli= nk and > ;; to make file-system-tree works it should be a directory. > (new-files-dir-path (string-append new-files-path "/.")) > @@ -107,7 +107,8 @@ (define ((file-tree-traverse preordering) node) > (old-tree (if old-home > ((simplify-file-tree "") > (file-system-tree > - (string-append old-home "/files/."))) > + (string-append > + old-home "/" #$home-files-directory "/."))) > #f)) > (new-tree ((simplify-file-tree "") > (file-system-tree new-files-dir-path))) > --=20 > 2.34.0 > > From 23f7095d60b18b52de0d1aa314c4012cdf55a046 Mon Sep 17 00:00:00 2001 > From: Andrew Tropin > 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. > --- > gnu/home/services.scm | 23 +++++++++++++++++++++++ > 1 file changed, 23 insertions(+) > > diff --git a/gnu/home/services.scm b/gnu/home/services.scm > index e4e3717b80..bf044a0421 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 >=20=20 > home-files-directory > + xdg-configuration-files-subdir >=20=20 > fold-home-service-types > home-provenance > @@ -284,6 +286,27 @@ (define home-files-service-type > @file{~~/.guix-home/~a}, and further processed during activation." > home-files-directory)))) >=20=20 > +(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)) > + > +(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 (format #f "Files that will be put in > +@file{~~/.guix-home/~a/~a}, and further processed during activation." > + home-files-directory > + xdg-configuration-files)))) > + > (define %initialize-gettext > #~(begin > (bindtextdomain %gettext-domain > --=20 > 2.34.0 > > From 11f23a48d480a91d6bfba0ff55c1a9831585a4ee Mon Sep 17 00:00:00 2001 > From: Andrew Tropin > 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. > --- > gnu/home/services/shells.scm | 112 +++++++++++++++++++---------------- > 1 file changed, 61 insertions(+), 51 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).")) >=20=20 > -(define (add-zsh-configuration config) > - (let* ((xdg-flavor? (home-zsh-configuration-xdg-flavor? config))) > +(define (zsh-filter-fields field) > + (filter-configuration-fields home-zsh-configuration-fields (list field= ))) >=20=20 > - (define prefix-file > - (cut string-append > - (if xdg-flavor? > - "config/zsh/." > - "") <>)) > +(define (zsh-serialize-field config field) > + (serialize-configuration config (zsh-filter-fields field))) >=20=20 > - (define (filter-fields field) > - (filter-configuration-fields home-zsh-configuration-fields > - (list 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))))) >=20=20 > - (define (serialize-field field) > - (serialize-configuration > - config > - (filter-fields field))) > +(define (zsh-file-zshenv config) > + (mixed-text-file > + "zshenv" > + (zsh-serialize-field config 'zshenv) > + (zsh-serialize-field config 'environment-variables))) >=20=20 > - (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/.zshen= v\n" > - ""))) > - '()) > - (,(prefix-file "zshenv") > - ,(mixed-text-file > - "zshenv" > - (if xdg-flavor? > - "export ZDOTDIR=3D${XDG_CONFIG_HOME:-$HOME/.config}/zsh\n" > - "") > - (serialize-field 'zshenv) > - (serialize-field 'environment-variables))) > - (,(prefix-file "zprofile") > - ,(mixed-text-file > - "zprofile" > - "\ > +(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))) > + (zsh-serialize-field config 'zprofile))) >=20=20 > - ,@(list (file-if-not-empty 'zshrc) > - (file-if-not-empty 'zlogin) > - (file-if-not-empty 'zlogout)))))) > +(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-emp= ty > + ,@(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=3D${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)) > + '())) >=20=20 > (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))) > --=20 > 2.34.0 > > From ef4c3bbcc0c8c1a251f4ad6c494f8ed30adf45f2 Mon Sep 17 00:00:00 2001 > From: Andrew Tropin > 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-fi= les. > --- > 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/fontutil= s.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: >=20=20 > (define (add-fontconfig-config-file he-symlink-path) > - `(("config/fontconfig/fonts.conf" > + `(("fontconfig/fonts.conf" > ,(mixed-text-file > "fonts.conf" > " > @@ -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 d230dd7665..9c43aa93b9 100644 > --- a/gnu/home/services/xdg.scm > +++ b/gnu/home/services/xdg.scm > @@ -190,11 +190,11 @@ (define-configuration home-xdg-user-directories-con= figuration > "Default directory for videos.")) >=20=20 > (define (home-xdg-user-directories-files-service config) > - `(("config/user-dirs.conf" > + `(("user-dirs.conf" > ,(mixed-text-file > "user-dirs.conf" > "enabled=3DFalse\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-conf= iguration > "A list of XDG desktop entries to create. See > @code{xdg-desktop-entry}.")) >=20=20 > -(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)= )) >=20=20 > - (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))))) >=20=20 > (define (home-xdg-mime-applications-extension old-config extension-confi= gs) > (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= )) > --=20 > 2.34.0 > > From 089683bbd301f6e085f00fbd53713f335abac40e Mon Sep 17 00:00:00 2001 > From: Andrew Tropin > 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. > --- > gnu/home/services/symlink-manager.scm | 25 +++++++++++++++++++++---- > 1 file changed, 21 insertions(+), 4 deletions(-) > > diff --git a/gnu/home/services/symlink-manager.scm b/gnu/home/services/sy= mlink-manager.scm > index 747bb343d3..418bfbd98a 100644 > --- a/gnu/home/services/symlink-manager.scm > +++ b/gnu/home/services/symlink-manager.scm > @@ -85,8 +85,8 @@ (define ((file-tree-traverse preordering) node) >=20=20 > (use-modules (guix build utils)) >=20=20 > - (let* ((config-home (or (getenv "XDG_CONFIG_HOME") > - (string-append (getenv "HOME") "/.conf= ig"))) > + (let* ((xdg-config-home (or (getenv "XDG_CONFIG_HOME") > + (string-append (getenv "HOME") "/.con= fig"))) >=20=20 > (he-path (string-append (getenv "HOME") "/.guix-home")) > (new-he-path (string-append he-path ".new")) > @@ -117,13 +117,24 @@ (define ((file-tree-traverse preordering) node) > (lambda (path) > (readlink (string-append new-files-path "/" path)))) >=20=20 > + (preprocess-path > + (lambda (path) > + "If file is in xdg-configuration-files-subdir use > +subdirectory from XDG_CONFIG_HOME to generate a target path." > + (if (string-prefix? #$xdg-configuration-files-subdir pa= th) > + (string-append > + (substring xdg-config-home (1+ (string-length home= -path))) > + (substring > + path (string-length #$xdg-configuration-files-sub= dir))) > + (string-append "." path)))) > + > (get-target-path > (lambda (path) > - (string-append home-path "/." path))) > + (string-append home-path "/" (preprocess-path path)))) >=20=20 > (get-backup-path > (lambda (path) > - (string-append backup-dir "/." path))) > + (string-append backup-dir "/" (preprocess-path path)))) >=20=20 > (directory? > (lambda (path) > @@ -224,6 +235,12 @@ (define ((file-tree-traverse preordering) node) > (display (G_ " done\n")))) > to-create))))) >=20=20 > + (format #t "home-path: ~a\nxdg-config-home: ~a\n" > + home-path xdg-config-home) > + > + (format #t "prepr: ~a\n" > + (preprocess-path "config/sway/config")) > + > (when old-tree > (cleanup-symlinks)) >=20=20 > --=20 > 2.34.0 A gentle reminder/request for code-review. =2D-=20 Best regards, Andrew Tropin --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQJDBAEBCgAtFiEEKEGaxlA4dEDH6S/6IgjSCVjB3rAFAmIZ0xkPHGFuZHJld0B0 cm9wLmluAAoJECII0glYwd6wg5IQAJP2X3Jkz4e1I9JKEQ0t5xVvpRcN23mbomMr Aogn4GTPU6MjitAjqZK/uYD/wEwOU5auHivffiUTr3MkVjTDXoj0dZw2fGHHcqs/ PDaxUiMwxZVm9Ktt3iFdjs7IFtBr5SmgGhh+K9ELMsx3ZbDD2Mxa22x5BaxObPDK 9jMse2d1bo2EIeYWJ/7GyqN2M6gAfWax84CQhuX1eLAteSg/NCDUxHXt5Eze3llf YLm+NyrzEMdHAUV7ZFyN8V2EeRkkBkoEp1HDzfGwEvzt93sgRLfGjTVawV+TpT36 HDbVI3SNbuJuKfFN5aUHzVqXaegAkxZi77YHs3FGYKv66EJAwBEMOsiN0rh+BtA1 /8X7x57NBBoVupWtmKKdgRwZhtzxVpj2aeuMpOyJfrHSBqLrMJxqXQZjeEx26DK+ W+6YzDIUD6YgSDOdhEcNX1KOcX241HJ7OoAZQo6qpXjUwubmmGydn6ko6QFQ0bfM tjSY+SagGwsvTaCwZanXWvAa7bCMKoHkEHcFescAd3ZUjHQ2S9VSv06ZNh/Uc1JG UzoRfvKXR52ne05LFN0I4uiSHFXztt67RRvA2PC6Aq5W6gUuuhae1ZpHAHCrdz12 LTGUkk3UyX5KewxPUA6SFDnjvVIShrOZhZlAHOwuc4RwTvUXkBWlyV72kTOr5IQ+ ByvcFsol =DPup -----END PGP SIGNATURE----- --=-=-=--