03/08: build-self: Use (guix self).

2018-04-07 Thread Ludovic Court�s
civodul pushed a commit to branch wip-pull-multiple-derivations
in repository guix.

commit 232d846d001ff45c2426a5921df9ed863934
Author: Ludovic Courtès 
Date:   Fri Mar 23 17:18:15 2018 +0100

build-self: Use (guix self).

This mitigates .

* build-aux/build-self.scm (libgcrypt, zlib, gzip, bzip2, xz)
(false-if-wrong-guile, package-for-current-guile, guile-json)
(guile-ssh, guile-git, guile-bytestructures, matching-guile-2.2): Remove.
(%dependency-variables, %persona-variables, %config-variables): New
variables.
(make-config.scm, load-path-expression, gexp->script)
(build-program): New procedures.
(build): Rewrite to simply delegate to 'guix-derivation'.
---
 build-aux/build-self.scm | 458 ---
 1 file changed, 237 insertions(+), 221 deletions(-)

diff --git a/build-aux/build-self.scm b/build-aux/build-self.scm
index 4c85c09..5ec76a5 100644
--- a/build-aux/build-self.scm
+++ b/build-aux/build-self.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2016, 2017 Ludovic Courtès 
+;;; Copyright © 2014, 2016, 2017, 2018 Ludovic Courtès 
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -19,10 +19,14 @@
 (define-module (build-self)
   #:use-module (gnu)
   #:use-module (guix)
+  #:use-module (guix ui)
   #:use-module (guix config)
+  #:use-module (guix modules)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-19)
+  #:use-module (rnrs io ports)
   #:use-module (ice-9 match)
+  #:use-module (ice-9 popen)
   #:export (build))
 
 ;;; Commentary:
@@ -40,242 +44,254 @@
 ;;; Code:
 
 
-;; The dependencies.  Don't refer explicitly to the variables because they
-;; could be renamed or shuffled around in modules over time.  Conversely,
-;; 'find-best-packages-by-name' is expected to always have the same semantics.
-
-(define guix
-  (first (find-best-packages-by-name "guix" #f)))
-
-(define libgcrypt
-  (first (find-best-packages-by-name "libgcrypt" #f)))
-
-(define zlib
-  (first (find-best-packages-by-name "zlib" #f)))
-
-(define gzip
-  (first (find-best-packages-by-name "gzip" #f)))
-
-(define bzip2
-  (first (find-best-packages-by-name "bzip2" #f)))
-
-(define xz
-  (first (find-best-packages-by-name "xz" #f)))
-
-(define (false-if-wrong-guile package)
-  "Return #f if PACKAGE depends on the \"wrong\" major version of Guile (e.g.,
-2.0 instead of 2.2), otherwise return PACKAGE."
-  (let ((guile (any (match-lambda
-  ((label (? package? dep) _ ...)
-   (and (string=? (package-name dep) "guile")
-dep)))
-(package-direct-inputs package
-(and (or (not guile)
- (string-prefix? (effective-version)
- (package-version guile)))
- package)))
-
-(define (package-for-current-guile . names)
-  "Return the package with one of the given NAMES that depends on the current
-Guile major version (2.0 or 2.2), or #f if none of the packages matches."
-  (let loop ((names names))
-(match names
-  (()
-   #f)
-  ((name rest ...)
-   (match (find-best-packages-by-name name #f)
- (()
-  (loop rest))
- ((first _ ...)
-  (or (false-if-wrong-guile first)
-  (loop rest
-
-(define guile-json
-  (package-for-current-guile "guile-json"
- "guile2.2-json"
- "guile2.0-json"))
-
-(define guile-ssh
-  (package-for-current-guile "guile-ssh"
- "guile2.2-ssh"
- "guile2.0-ssh"))
-
-(define guile-git
-  (package-for-current-guile "guile-git"
- "guile2.0-git"))
-
-(define guile-bytestructures
-  (package-for-current-guile "guile-bytestructures"
- "guile2.0-bytestructures"))
-
-;; The actual build procedure.
+;;;
+;;; Generating (guix config).
+;;;
+;;; This is copied from (guix self) because we cannot assume (guix self) is
+;;; available at this point.
+;;;
+
+(define %dependency-variables
+  ;; (guix config) variables corresponding to dependencies.
+  '(%libgcrypt %libz %xz %gzip %bzip2 %nix-instantiate))
+
+(define %persona-variables
+  ;; (guix config) variables that define Guix's persona.
+  '(%guix-package-name
+%guix-version
+%guix-bug-report-address
+%guix-home-page-url))
+
+(define %config-variables
+  ;; (guix config) variables corresponding to Guix configuration (storedir,
+  ;; localstatedir, etc.)
+  (sort (filter pair?
+(module-map (lambda (name var)
+  (and (not (memq name %dependency-variables))
+   (not (memq name %persona-variables))
+   (cons name (variable-ref var
+(resolve-interface '(guix 

03/08: build-self: Use (guix self).

2018-04-06 Thread Ludovic Court�s
civodul pushed a commit to branch wip-pull-multiple-derivations
in repository guix.

commit 232d846d001ff45c2426a5921df9ed863934
Author: Ludovic Courtès 
Date:   Fri Mar 23 17:18:15 2018 +0100

build-self: Use (guix self).

This mitigates .

* build-aux/build-self.scm (libgcrypt, zlib, gzip, bzip2, xz)
(false-if-wrong-guile, package-for-current-guile, guile-json)
(guile-ssh, guile-git, guile-bytestructures, matching-guile-2.2): Remove.
(%dependency-variables, %persona-variables, %config-variables): New
variables.
(make-config.scm, load-path-expression, gexp->script)
(build-program): New procedures.
(build): Rewrite to simply delegate to 'guix-derivation'.
---
 build-aux/build-self.scm | 458 ---
 1 file changed, 237 insertions(+), 221 deletions(-)

diff --git a/build-aux/build-self.scm b/build-aux/build-self.scm
index 4c85c09..5ec76a5 100644
--- a/build-aux/build-self.scm
+++ b/build-aux/build-self.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2016, 2017 Ludovic Courtès 
+;;; Copyright © 2014, 2016, 2017, 2018 Ludovic Courtès 
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -19,10 +19,14 @@
 (define-module (build-self)
   #:use-module (gnu)
   #:use-module (guix)
+  #:use-module (guix ui)
   #:use-module (guix config)
+  #:use-module (guix modules)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-19)
+  #:use-module (rnrs io ports)
   #:use-module (ice-9 match)
+  #:use-module (ice-9 popen)
   #:export (build))
 
 ;;; Commentary:
@@ -40,242 +44,254 @@
 ;;; Code:
 
 
-;; The dependencies.  Don't refer explicitly to the variables because they
-;; could be renamed or shuffled around in modules over time.  Conversely,
-;; 'find-best-packages-by-name' is expected to always have the same semantics.
-
-(define guix
-  (first (find-best-packages-by-name "guix" #f)))
-
-(define libgcrypt
-  (first (find-best-packages-by-name "libgcrypt" #f)))
-
-(define zlib
-  (first (find-best-packages-by-name "zlib" #f)))
-
-(define gzip
-  (first (find-best-packages-by-name "gzip" #f)))
-
-(define bzip2
-  (first (find-best-packages-by-name "bzip2" #f)))
-
-(define xz
-  (first (find-best-packages-by-name "xz" #f)))
-
-(define (false-if-wrong-guile package)
-  "Return #f if PACKAGE depends on the \"wrong\" major version of Guile (e.g.,
-2.0 instead of 2.2), otherwise return PACKAGE."
-  (let ((guile (any (match-lambda
-  ((label (? package? dep) _ ...)
-   (and (string=? (package-name dep) "guile")
-dep)))
-(package-direct-inputs package
-(and (or (not guile)
- (string-prefix? (effective-version)
- (package-version guile)))
- package)))
-
-(define (package-for-current-guile . names)
-  "Return the package with one of the given NAMES that depends on the current
-Guile major version (2.0 or 2.2), or #f if none of the packages matches."
-  (let loop ((names names))
-(match names
-  (()
-   #f)
-  ((name rest ...)
-   (match (find-best-packages-by-name name #f)
- (()
-  (loop rest))
- ((first _ ...)
-  (or (false-if-wrong-guile first)
-  (loop rest
-
-(define guile-json
-  (package-for-current-guile "guile-json"
- "guile2.2-json"
- "guile2.0-json"))
-
-(define guile-ssh
-  (package-for-current-guile "guile-ssh"
- "guile2.2-ssh"
- "guile2.0-ssh"))
-
-(define guile-git
-  (package-for-current-guile "guile-git"
- "guile2.0-git"))
-
-(define guile-bytestructures
-  (package-for-current-guile "guile-bytestructures"
- "guile2.0-bytestructures"))
-
-;; The actual build procedure.
+;;;
+;;; Generating (guix config).
+;;;
+;;; This is copied from (guix self) because we cannot assume (guix self) is
+;;; available at this point.
+;;;
+
+(define %dependency-variables
+  ;; (guix config) variables corresponding to dependencies.
+  '(%libgcrypt %libz %xz %gzip %bzip2 %nix-instantiate))
+
+(define %persona-variables
+  ;; (guix config) variables that define Guix's persona.
+  '(%guix-package-name
+%guix-version
+%guix-bug-report-address
+%guix-home-page-url))
+
+(define %config-variables
+  ;; (guix config) variables corresponding to Guix configuration (storedir,
+  ;; localstatedir, etc.)
+  (sort (filter pair?
+(module-map (lambda (name var)
+  (and (not (memq name %dependency-variables))
+   (not (memq name %persona-variables))
+   (cons name (variable-ref var
+(resolve-interface '(guix 

03/08: build-self: Use (guix self).

2018-04-06 Thread Ludovic Court�s
civodul pushed a commit to branch wip-pull-multiple-derivations
in repository guix.

commit 232d846d001ff45c2426a5921df9ed863934
Author: Ludovic Courtès 
Date:   Fri Mar 23 17:18:15 2018 +0100

build-self: Use (guix self).

This mitigates .

* build-aux/build-self.scm (libgcrypt, zlib, gzip, bzip2, xz)
(false-if-wrong-guile, package-for-current-guile, guile-json)
(guile-ssh, guile-git, guile-bytestructures, matching-guile-2.2): Remove.
(%dependency-variables, %persona-variables, %config-variables): New
variables.
(make-config.scm, load-path-expression, gexp->script)
(build-program): New procedures.
(build): Rewrite to simply delegate to 'guix-derivation'.
---
 build-aux/build-self.scm | 458 ---
 1 file changed, 237 insertions(+), 221 deletions(-)

diff --git a/build-aux/build-self.scm b/build-aux/build-self.scm
index 4c85c09..5ec76a5 100644
--- a/build-aux/build-self.scm
+++ b/build-aux/build-self.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2016, 2017 Ludovic Courtès 
+;;; Copyright © 2014, 2016, 2017, 2018 Ludovic Courtès 
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -19,10 +19,14 @@
 (define-module (build-self)
   #:use-module (gnu)
   #:use-module (guix)
+  #:use-module (guix ui)
   #:use-module (guix config)
+  #:use-module (guix modules)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-19)
+  #:use-module (rnrs io ports)
   #:use-module (ice-9 match)
+  #:use-module (ice-9 popen)
   #:export (build))
 
 ;;; Commentary:
@@ -40,242 +44,254 @@
 ;;; Code:
 
 
-;; The dependencies.  Don't refer explicitly to the variables because they
-;; could be renamed or shuffled around in modules over time.  Conversely,
-;; 'find-best-packages-by-name' is expected to always have the same semantics.
-
-(define guix
-  (first (find-best-packages-by-name "guix" #f)))
-
-(define libgcrypt
-  (first (find-best-packages-by-name "libgcrypt" #f)))
-
-(define zlib
-  (first (find-best-packages-by-name "zlib" #f)))
-
-(define gzip
-  (first (find-best-packages-by-name "gzip" #f)))
-
-(define bzip2
-  (first (find-best-packages-by-name "bzip2" #f)))
-
-(define xz
-  (first (find-best-packages-by-name "xz" #f)))
-
-(define (false-if-wrong-guile package)
-  "Return #f if PACKAGE depends on the \"wrong\" major version of Guile (e.g.,
-2.0 instead of 2.2), otherwise return PACKAGE."
-  (let ((guile (any (match-lambda
-  ((label (? package? dep) _ ...)
-   (and (string=? (package-name dep) "guile")
-dep)))
-(package-direct-inputs package
-(and (or (not guile)
- (string-prefix? (effective-version)
- (package-version guile)))
- package)))
-
-(define (package-for-current-guile . names)
-  "Return the package with one of the given NAMES that depends on the current
-Guile major version (2.0 or 2.2), or #f if none of the packages matches."
-  (let loop ((names names))
-(match names
-  (()
-   #f)
-  ((name rest ...)
-   (match (find-best-packages-by-name name #f)
- (()
-  (loop rest))
- ((first _ ...)
-  (or (false-if-wrong-guile first)
-  (loop rest
-
-(define guile-json
-  (package-for-current-guile "guile-json"
- "guile2.2-json"
- "guile2.0-json"))
-
-(define guile-ssh
-  (package-for-current-guile "guile-ssh"
- "guile2.2-ssh"
- "guile2.0-ssh"))
-
-(define guile-git
-  (package-for-current-guile "guile-git"
- "guile2.0-git"))
-
-(define guile-bytestructures
-  (package-for-current-guile "guile-bytestructures"
- "guile2.0-bytestructures"))
-
-;; The actual build procedure.
+;;;
+;;; Generating (guix config).
+;;;
+;;; This is copied from (guix self) because we cannot assume (guix self) is
+;;; available at this point.
+;;;
+
+(define %dependency-variables
+  ;; (guix config) variables corresponding to dependencies.
+  '(%libgcrypt %libz %xz %gzip %bzip2 %nix-instantiate))
+
+(define %persona-variables
+  ;; (guix config) variables that define Guix's persona.
+  '(%guix-package-name
+%guix-version
+%guix-bug-report-address
+%guix-home-page-url))
+
+(define %config-variables
+  ;; (guix config) variables corresponding to Guix configuration (storedir,
+  ;; localstatedir, etc.)
+  (sort (filter pair?
+(module-map (lambda (name var)
+  (and (not (memq name %dependency-variables))
+   (not (memq name %persona-variables))
+   (cons name (variable-ref var
+(resolve-interface '(guix 

03/08: build-self: Use (guix self).

2018-04-05 Thread Ludovic Court�s
civodul pushed a commit to branch wip-pull-multiple-derivations
in repository guix.

commit 232d846d001ff45c2426a5921df9ed863934
Author: Ludovic Courtès 
Date:   Fri Mar 23 17:18:15 2018 +0100

build-self: Use (guix self).

This mitigates .

* build-aux/build-self.scm (libgcrypt, zlib, gzip, bzip2, xz)
(false-if-wrong-guile, package-for-current-guile, guile-json)
(guile-ssh, guile-git, guile-bytestructures, matching-guile-2.2): Remove.
(%dependency-variables, %persona-variables, %config-variables): New
variables.
(make-config.scm, load-path-expression, gexp->script)
(build-program): New procedures.
(build): Rewrite to simply delegate to 'guix-derivation'.
---
 build-aux/build-self.scm | 458 ---
 1 file changed, 237 insertions(+), 221 deletions(-)

diff --git a/build-aux/build-self.scm b/build-aux/build-self.scm
index 4c85c09..5ec76a5 100644
--- a/build-aux/build-self.scm
+++ b/build-aux/build-self.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2016, 2017 Ludovic Courtès 
+;;; Copyright © 2014, 2016, 2017, 2018 Ludovic Courtès 
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -19,10 +19,14 @@
 (define-module (build-self)
   #:use-module (gnu)
   #:use-module (guix)
+  #:use-module (guix ui)
   #:use-module (guix config)
+  #:use-module (guix modules)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-19)
+  #:use-module (rnrs io ports)
   #:use-module (ice-9 match)
+  #:use-module (ice-9 popen)
   #:export (build))
 
 ;;; Commentary:
@@ -40,242 +44,254 @@
 ;;; Code:
 
 
-;; The dependencies.  Don't refer explicitly to the variables because they
-;; could be renamed or shuffled around in modules over time.  Conversely,
-;; 'find-best-packages-by-name' is expected to always have the same semantics.
-
-(define guix
-  (first (find-best-packages-by-name "guix" #f)))
-
-(define libgcrypt
-  (first (find-best-packages-by-name "libgcrypt" #f)))
-
-(define zlib
-  (first (find-best-packages-by-name "zlib" #f)))
-
-(define gzip
-  (first (find-best-packages-by-name "gzip" #f)))
-
-(define bzip2
-  (first (find-best-packages-by-name "bzip2" #f)))
-
-(define xz
-  (first (find-best-packages-by-name "xz" #f)))
-
-(define (false-if-wrong-guile package)
-  "Return #f if PACKAGE depends on the \"wrong\" major version of Guile (e.g.,
-2.0 instead of 2.2), otherwise return PACKAGE."
-  (let ((guile (any (match-lambda
-  ((label (? package? dep) _ ...)
-   (and (string=? (package-name dep) "guile")
-dep)))
-(package-direct-inputs package
-(and (or (not guile)
- (string-prefix? (effective-version)
- (package-version guile)))
- package)))
-
-(define (package-for-current-guile . names)
-  "Return the package with one of the given NAMES that depends on the current
-Guile major version (2.0 or 2.2), or #f if none of the packages matches."
-  (let loop ((names names))
-(match names
-  (()
-   #f)
-  ((name rest ...)
-   (match (find-best-packages-by-name name #f)
- (()
-  (loop rest))
- ((first _ ...)
-  (or (false-if-wrong-guile first)
-  (loop rest
-
-(define guile-json
-  (package-for-current-guile "guile-json"
- "guile2.2-json"
- "guile2.0-json"))
-
-(define guile-ssh
-  (package-for-current-guile "guile-ssh"
- "guile2.2-ssh"
- "guile2.0-ssh"))
-
-(define guile-git
-  (package-for-current-guile "guile-git"
- "guile2.0-git"))
-
-(define guile-bytestructures
-  (package-for-current-guile "guile-bytestructures"
- "guile2.0-bytestructures"))
-
-;; The actual build procedure.
+;;;
+;;; Generating (guix config).
+;;;
+;;; This is copied from (guix self) because we cannot assume (guix self) is
+;;; available at this point.
+;;;
+
+(define %dependency-variables
+  ;; (guix config) variables corresponding to dependencies.
+  '(%libgcrypt %libz %xz %gzip %bzip2 %nix-instantiate))
+
+(define %persona-variables
+  ;; (guix config) variables that define Guix's persona.
+  '(%guix-package-name
+%guix-version
+%guix-bug-report-address
+%guix-home-page-url))
+
+(define %config-variables
+  ;; (guix config) variables corresponding to Guix configuration (storedir,
+  ;; localstatedir, etc.)
+  (sort (filter pair?
+(module-map (lambda (name var)
+  (and (not (memq name %dependency-variables))
+   (not (memq name %persona-variables))
+   (cons name (variable-ref var
+(resolve-interface '(guix 

03/08: build-self: Use (guix self).

2018-04-04 Thread Ludovic Court�s
civodul pushed a commit to branch wip-pull-multiple-derivations
in repository guix.

commit 0e2e6b28c3d6ffefc3adbd15cafbbdcaec37ba18
Author: Ludovic Courtès 
Date:   Fri Mar 23 17:18:15 2018 +0100

build-self: Use (guix self).

This mitigates .

* build-aux/build-self.scm (libgcrypt, zlib, gzip, bzip2, xz)
(false-if-wrong-guile, package-for-current-guile, guile-json)
(guile-ssh, guile-git, guile-bytestructures, matching-guile-2.2): Remove.
(%dependency-variables, %persona-variables, %config-variables): New
variables.
(make-config.scm, load-path-expression, gexp->script)
(build-program): New procedures.
(build): Rewrite to simply delegate to 'guix-derivation'.
---
 build-aux/build-self.scm | 458 ---
 1 file changed, 237 insertions(+), 221 deletions(-)

diff --git a/build-aux/build-self.scm b/build-aux/build-self.scm
index 4c85c09..5ec76a5 100644
--- a/build-aux/build-self.scm
+++ b/build-aux/build-self.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2016, 2017 Ludovic Courtès 
+;;; Copyright © 2014, 2016, 2017, 2018 Ludovic Courtès 
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -19,10 +19,14 @@
 (define-module (build-self)
   #:use-module (gnu)
   #:use-module (guix)
+  #:use-module (guix ui)
   #:use-module (guix config)
+  #:use-module (guix modules)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-19)
+  #:use-module (rnrs io ports)
   #:use-module (ice-9 match)
+  #:use-module (ice-9 popen)
   #:export (build))
 
 ;;; Commentary:
@@ -40,242 +44,254 @@
 ;;; Code:
 
 
-;; The dependencies.  Don't refer explicitly to the variables because they
-;; could be renamed or shuffled around in modules over time.  Conversely,
-;; 'find-best-packages-by-name' is expected to always have the same semantics.
-
-(define guix
-  (first (find-best-packages-by-name "guix" #f)))
-
-(define libgcrypt
-  (first (find-best-packages-by-name "libgcrypt" #f)))
-
-(define zlib
-  (first (find-best-packages-by-name "zlib" #f)))
-
-(define gzip
-  (first (find-best-packages-by-name "gzip" #f)))
-
-(define bzip2
-  (first (find-best-packages-by-name "bzip2" #f)))
-
-(define xz
-  (first (find-best-packages-by-name "xz" #f)))
-
-(define (false-if-wrong-guile package)
-  "Return #f if PACKAGE depends on the \"wrong\" major version of Guile (e.g.,
-2.0 instead of 2.2), otherwise return PACKAGE."
-  (let ((guile (any (match-lambda
-  ((label (? package? dep) _ ...)
-   (and (string=? (package-name dep) "guile")
-dep)))
-(package-direct-inputs package
-(and (or (not guile)
- (string-prefix? (effective-version)
- (package-version guile)))
- package)))
-
-(define (package-for-current-guile . names)
-  "Return the package with one of the given NAMES that depends on the current
-Guile major version (2.0 or 2.2), or #f if none of the packages matches."
-  (let loop ((names names))
-(match names
-  (()
-   #f)
-  ((name rest ...)
-   (match (find-best-packages-by-name name #f)
- (()
-  (loop rest))
- ((first _ ...)
-  (or (false-if-wrong-guile first)
-  (loop rest
-
-(define guile-json
-  (package-for-current-guile "guile-json"
- "guile2.2-json"
- "guile2.0-json"))
-
-(define guile-ssh
-  (package-for-current-guile "guile-ssh"
- "guile2.2-ssh"
- "guile2.0-ssh"))
-
-(define guile-git
-  (package-for-current-guile "guile-git"
- "guile2.0-git"))
-
-(define guile-bytestructures
-  (package-for-current-guile "guile-bytestructures"
- "guile2.0-bytestructures"))
-
-;; The actual build procedure.
+;;;
+;;; Generating (guix config).
+;;;
+;;; This is copied from (guix self) because we cannot assume (guix self) is
+;;; available at this point.
+;;;
+
+(define %dependency-variables
+  ;; (guix config) variables corresponding to dependencies.
+  '(%libgcrypt %libz %xz %gzip %bzip2 %nix-instantiate))
+
+(define %persona-variables
+  ;; (guix config) variables that define Guix's persona.
+  '(%guix-package-name
+%guix-version
+%guix-bug-report-address
+%guix-home-page-url))
+
+(define %config-variables
+  ;; (guix config) variables corresponding to Guix configuration (storedir,
+  ;; localstatedir, etc.)
+  (sort (filter pair?
+(module-map (lambda (name var)
+  (and (not (memq name %dependency-variables))
+   (not (memq name %persona-variables))
+   (cons name (variable-ref var
+(resolve-interface '(guix