From 76c58ed59c05fa2ae14281109c9186e47ba810da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Tue, 20 Sep 2022 11:58:32 +0200 Subject: [PATCH] home: import: Use (guix read-print) to render the config file. * guix/scripts/home/import.scm (manifest+configuration-files->code): Insert calls to 'comment' and 'vertical-space'. (import-manifest): Use 'pretty-print-with-comments/splice' instead of a loop on 'pretty-print'. * tests/home-import.scm (remove-recursively): New procedure. (eval-test-with-home-environment): Use it. --- guix/scripts/home/import.scm | 21 +++++++++++++++------ tests/home-import.scm | 11 ++++++++++- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/guix/scripts/home/import.scm b/guix/scripts/home/import.scm index 825ccb1e73..fd263c0699 100644 --- a/guix/scripts/home/import.scm +++ b/guix/scripts/home/import.scm @@ -26,9 +26,9 @@ #:use-module (guix utils) #:use-module (guix packages) #:autoload (guix scripts package) (manifest-entry-version-prefix) + #:use-module (guix read-print) #:use-module (gnu packages) #:use-module (ice-9 match) - #:use-module (ice-9 pretty-print) #:use-module (ice-9 rdelim) #:use-module (ice-9 regex) #:use-module (ice-9 popen) @@ -170,8 +170,19 @@ user's files to CONFIGURATION-DIRECTORY; the generated sexp refers to them." (gnu services) ,@(delete-duplicates (concatenate modules))) + ,(vertical-space 1) + (home-environment - (packages (specifications->packages ,packages)) + ,(comment (G_ "\ +;; Below is the list of packages that will show up in your +;; Home profile, under ~/.guix-home/profile.\n")) + (packages + (specifications->packages ,packages)) + + ,(vertical-space 1) + ,(comment (G_ "\ +;; Below is the list of Home services. To search for available +;; services, run 'guix home search KEYWORD' in a terminal.\n")) (services (list ,@services))))))))) (define* (import-manifest @@ -187,7 +198,5 @@ user's files to CONFIGURATION-DIRECTORY; the generated sexp refers to them." ;; specifies package names. To reproduce the exact same profile, you also ;; need to capture the channels being used, as returned by \"guix describe\". ;; See the \"Replicating Guix\" section in the manual.\n")) - (for-each (lambda (exp) - (newline port) - (pretty-print exp port)) - exp)))) + (newline port) + (pretty-print-with-comments/splice port exp)))) diff --git a/tests/home-import.scm b/tests/home-import.scm index d62a6de648..04b7b76156 100644 --- a/tests/home-import.scm +++ b/tests/home-import.scm @@ -23,6 +23,7 @@ #:use-module (guix build utils) #:use-module (guix packages) #:use-module (ice-9 match) + #:use-module ((guix read-print) #:select (blank?)) #:use-module ((guix profiles) #:hide (manifest->code)) #:use-module ((guix build syscalls) #:select (mkdtemp!)) #:use-module ((guix scripts package) @@ -85,13 +86,21 @@ corresponding file." ((file . content) (create-file file content))) files-alist)) +(define (remove-recursively pred sexp) + "Like SRFI-1 'remove', but recurse within SEXP." + (let loop ((sexp sexp)) + (match sexp + ((lst ...) + (map loop (remove pred lst))) + (x x)))) + (define (eval-test-with-home-environment files-alist manifest matcher) (create-temporary-home files-alist) (setenv "HOME" %temporary-home-directory) (mkdir-p %temporary-home-directory) (let* ((home-environment (manifest+configuration-files->code manifest %destination-directory)) - (result (matcher home-environment))) + (result (matcher (remove-recursively blank? home-environment)))) (delete-file-recursively %temporary-home-directory) result))