unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
From: Xinglu Chen <public@yoctocell.xyz>
To: 50873@debbugs.gnu.org
Cc: "Oleg Pykhalov" <go.wigust@gmail.com>,
	"Ludovic Courtès" <ludo@gnu.org>,
	"Andrew Tropin" <andrew@trop.in>
Subject: [bug#50873] [PATCH 1/7] guix home: import: Make the user to specify a destination directory.
Date: Sun, 10 Oct 2021 12:20:11 +0200	[thread overview]
Message-ID: <9db0424f9494d3d15e534eb75773ae9bd3f33cb3.1633861021.git.public@yoctocell.xyz> (raw)
In-Reply-To: <cover.1633861021.git.public@yoctocell.xyz>

Copy the appropriate the relevant configuration files to the destination
directory, and call ‘local-file’ on them.

Without this, ‘guix home import’ will generate a service declaration like this

  (service
   home-bash-service-type
   (home-bash-configuration
    (bashrc
     (list (slurp-file-gexp
            (local-file "/home/yoctocell/.bashrc"))))))

but when running ‘guix home reconfigure’, the ~/.bashrc file would be moved, so
when running ‘guix home reconfigure’ for the second time, it would read the
~/.bashrc which is itself a symlink to a file the store.

* guix/scripts/home/import.scm (%destination-directory): New parameter.
(generate-bash-module+configuration): Adjust accordingly.
(modules+configurations): Copy the user’s configuration file to
‘%destination-directory’.
* guix/scripts/home.scm (process-command): Adjust accordingly; create
‘%destination-directory’ if it doesn’t exist.
---
 guix/scripts/home.scm        | 25 +++++++-----
 guix/scripts/home/import.scm | 75 +++++++++++++++++++++---------------
 2 files changed, 61 insertions(+), 39 deletions(-)

diff --git a/guix/scripts/home.scm b/guix/scripts/home.scm
index 55e7b436c1..520360e14a 100644
--- a/guix/scripts/home.scm
+++ b/guix/scripts/home.scm
@@ -40,6 +40,7 @@ (define-module (guix scripts home)
   #:autoload   (guix scripts pull) (channel-commit-hyperlink)
   #:use-module (guix scripts home import)
   #:use-module ((guix status) #:select (with-status-verbosity))
+  #:use-module ((guix build utils) #:select (mkdir-p))
   #:use-module (guix gexp)
   #:use-module (guix monads)
   #:use-module (srfi srfi-1)
@@ -260,15 +261,21 @@ (define-syntax-rule (with-store* store exp ...)
      (apply search args))
     ((import)
      (let* ((profiles (delete-duplicates
-                      (match (filter-map (match-lambda
-                                           (('profile . p) p)
-                                           (_              #f))
-                                         opts)
-                        (() (list %current-profile))
-                        (lst (reverse lst)))))
-           (manifest (concatenate-manifests
-                      (map profile-manifest profiles))))
-       (import-manifest manifest (current-output-port))))
+                       (match (filter-map (match-lambda
+                                            (('profile . p) p)
+                                            (_              #f))
+                                          opts)
+                         (() (list %current-profile))
+                         (lst (reverse lst)))))
+            (manifest (concatenate-manifests
+                       (map profile-manifest profiles)))
+            (destination (match args
+                           ((destination) destination)
+                           (_ (leave (G_ "wrong number of arguments~%"))))))
+       (unless (file-exists? destination)
+         (mkdir-p destination))
+       (parameterize ((%destination-directory destination))
+         (import-manifest manifest (current-output-port)))))
     ((describe)
      (match (generation-number %guix-home)
        (0
diff --git a/guix/scripts/home/import.scm b/guix/scripts/home/import.scm
index 611f580e85..a6ab68a32c 100644
--- a/guix/scripts/home/import.scm
+++ b/guix/scripts/home/import.scm
@@ -27,7 +27,8 @@ (define-module (guix scripts home import)
   #:use-module (ice-9 pretty-print)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-26)
-  #:export (import-manifest))
+  #:export (import-manifest
+            %destination-directory))
 
 ;;; Commentary:
 ;;;
@@ -36,27 +37,34 @@ (define-module (guix scripts home import)
 ;;;
 ;;; Code:
 
+(define %destination-directory
+  (make-parameter (string-append (getenv "HOME") "/src/guix-config")))
 
 (define (generate-bash-module+configuration)
-  (let ((rc (string-append (getenv "HOME") "/.bashrc"))
-        (profile (string-append (getenv "HOME") "/.bash_profile"))
-        (logout (string-append (getenv "HOME") "/.bash_logout")))
-    `((gnu home services bash)
-      (service home-bash-service-type
-                 (home-bash-configuration
-                  ,@(if (file-exists? rc)
-                        `((bashrc
-                           (list (local-file ,rc))))
-                        '())
-                  ,@(if (file-exists? profile)
-                        `((bash-profile
-                           (list (local-file ,profile))))
-                        '())
-                  ,@(if (file-exists? logout)
-                        `((bash-logout
-                           (list (local-file ,logout))))
-                        '()))))))
+  (define (destination-append path)
+    (string-append (%destination-directory) "/" path))
 
+  (let ((rc (destination-append ".bashrc"))
+        (profile (destination-append ".bash_profile"))
+        (logout (destination-append ".bash_logout")))
+    `((gnu home-services bash)
+      (service home-bash-service-type
+               (home-bash-configuration
+                ,@(if (file-exists? rc)
+                      `((bashrc
+                         (list (slurp-file-gexp
+                                (local-file ,rc)))))
+                      '())
+                ,@(if (file-exists? profile)
+                      `((bash-profile
+                         (list (slurp-file-gexp
+                                (local-file ,profile)))))
+                      '())
+                ,@(if (file-exists? logout)
+                      `((bash-logout
+                         (list (slurp-file-gexp
+                                (local-file ,logout)))))
+                      '()))))))
 
 (define %files-configurations-alist
   `((".bashrc" . ,generate-bash-module+configuration)
@@ -64,17 +72,24 @@ (define %files-configurations-alist
     (".bash_logout" . ,generate-bash-module+configuration)))
 
 (define (modules+configurations)
-  (let ((configurations (delete-duplicates
-                         (filter-map (match-lambda
-                                ((file . proc)
-                                 (if (file-exists?
-                                      (string-append (getenv "HOME") "/" file))
-                                     proc
-                                     #f)))
-                                     %files-configurations-alist)
-                         (lambda (x y)
-                           (equal? (procedure-name x) (procedure-name y))))))
-    (map (lambda (proc) (proc)) configurations)))
+  (define configurations
+    (delete-duplicates
+     (filter-map (match-lambda
+                   ((file . proc)
+                    (let ((absolute-path (string-append (getenv "HOME")
+                                                        "/" file)))
+                      (if (file-exists? absolute-path)
+                          (begin
+                            (copy-file absolute-path
+                                       (string-append
+                                        (%destination-directory) "/" file))
+                            proc)
+                          #f))))
+                 %files-configurations-alist)
+     (lambda (x y)
+       (equal? (procedure-name x) (procedure-name y)))))
+  
+    (map (lambda (proc) (proc)) configurations))
 
 ;; Based on `manifest->code' from (guix profiles)
 ;; MAYBE: Upstream it?
-- 
2.33.0







  reply	other threads:[~2021-10-10 10:21 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-28 17:33 [bug#50873] [PATCH 0/5] Fixes to ‘guix home import’ Xinglu Chen
2021-09-28 17:35 ` [bug#50873] [PATCH 1/5] guix home: import: Make the user to specify a destination directory Xinglu Chen
2021-09-28 17:35 ` [bug#50873] [PATCH 2/5] guix home: import: Allow multiple modules to be imported for each service Xinglu Chen
2021-09-28 17:35 ` [bug#50873] [PATCH 3/5] guix home: import: Fix module name for Bash service Xinglu Chen
2021-09-28 17:36 ` [bug#50873] [PATCH 4/5] guix home: import: Delete duplicate modules when importing Xinglu Chen
2021-09-28 17:36 ` [bug#50873] [PATCH 5/5] doc: Document the ‘guix home import’ subcommand Xinglu Chen
2021-09-30  7:08   ` Andrew Tropin
2021-10-01  5:08     ` Xinglu Chen
2021-10-02 15:10       ` [bug#50873] [PATCH 0/5] Fixes to ‘guix home import’ Ludovic Courtès
2021-09-28 20:52 ` [bug#50873] [PATCH 0/2] Add pn Antero Mejr via Guix-patches via
2021-09-28 20:52   ` [bug#50873] [PATCH 1/2] gnu: Add libphonenumber Antero Mejr via Guix-patches via
2021-09-28 20:52   ` [bug#50873] [PATCH 2/2] gnu: Add pn Antero Mejr via Guix-patches via
2021-10-02 15:13 ` [bug#50873] [PATCH 0/5] Fixes to ‘guix home import’ Ludovic Courtès
2021-10-02 18:45   ` Xinglu Chen
2021-10-10 10:19 ` [bug#50873] [PATCH 0/7] " Xinglu Chen
2021-10-10 10:20   ` Xinglu Chen [this message]
2021-10-13  9:24     ` [bug#50873] [PATCH 0/5] " Ludovic Courtès
2021-10-29 13:37       ` Xinglu Chen
2021-10-10 10:20   ` [bug#50873] [PATCH 2/7] guix home: import: Allow multiple modules to be imported for each service Xinglu Chen
2021-10-10 10:20   ` [bug#50873] [PATCH 3/7] guix home: import: Fix module name for Bash service Xinglu Chen
2021-10-10 10:20   ` [bug#50873] [PATCH 4/7] guix home: import: Don’t use 'slurp-file-gexp' Xinglu Chen
2021-10-10 10:20   ` [bug#50873] [PATCH 5/7] guix home: import: Delete duplicate modules when importing Xinglu Chen
2021-10-10 10:20   ` [bug#50873] [PATCH 6/7] doc: Document the ‘guix home import’ subcommand Xinglu Chen
2021-10-10 10:20   ` [bug#50873] [PATCH 7/7] Add tests for ‘guix home import’ Xinglu Chen
2021-10-11 13:00     ` [bug#50873] [PATCH 0/5] Fixes to " Oleg Pykhalov
2021-10-13  9:25       ` Ludovic Courtès
2021-10-29  7:36         ` Ludovic Courtès
2021-10-29 13:47       ` Xinglu Chen
2021-10-30 14:17         ` Ludovic Courtès
2021-10-30 10:42   ` [bug#50873] [PATCH v3 0/8] " Xinglu Chen
2021-10-30 10:42     ` [bug#50873] [PATCH v3 1/8] guix home: import: Make the user to specify a destination directory Xinglu Chen
2021-10-30 14:22       ` Liliana Marie Prikler
2021-10-30 10:42     ` [bug#50873] [PATCH v3 2/8] guix home: import: Allow multiple modules to be imported for each service Xinglu Chen
2021-10-30 10:42     ` [bug#50873] [PATCH v3 3/8] guix home: import: Fix module name for Bash service Xinglu Chen
2021-10-30 11:50       ` Julien Lepiller
2021-10-30 10:42     ` [bug#50873] [PATCH v3 4/8] guix home: import: Don’t use 'slurp-file-gexp' Xinglu Chen
2021-10-30 10:42     ` [bug#50873] [PATCH v3 5/8] guix home: import: Delete duplicate modules when importing Xinglu Chen
2021-10-30 10:42     ` [bug#50873] [PATCH v3 6/8] doc: Document the ‘guix home import’ subcommand Xinglu Chen
2021-10-30 10:42     ` [bug#50873] [PATCH v3 7/8] Add tests for ‘guix home import’ Xinglu Chen
2021-10-30 10:42     ` [bug#50873] [PATCH v3 8/8] guix home: import: Call ‘local-file’ with ‘name’ Xinglu Chen
2021-10-30 23:01     ` [bug#50873] [PATCH 0/5] Fixes to ‘guix home import’ Ludovic Courtès
2021-10-31 17:38       ` Xinglu Chen
2021-11-01  6:31         ` Andrew Tropin
2021-11-06 17:00           ` Ludovic Courtès

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=9db0424f9494d3d15e534eb75773ae9bd3f33cb3.1633861021.git.public@yoctocell.xyz \
    --to=public@yoctocell.xyz \
    --cc=50873@debbugs.gnu.org \
    --cc=andrew@trop.in \
    --cc=go.wigust@gmail.com \
    --cc=ludo@gnu.org \
    /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).