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.
This commit is contained in:
Ludovic Courtès 2022-09-20 11:58:32 +02:00
parent d0a1e48944
commit 76c58ed59c
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
2 changed files with 25 additions and 7 deletions

View File

@ -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))))

View File

@ -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))