~ruther/guix-local

883e69cdfd226c8f40b6e3b76ce0740b59857de6 — Antero Mejr 2 years ago 3d2966e
services: guix: Add ‘channels’ field.

* doc/guix.texi (Base Services): Document
'guix-configuration-channels' field.
(Invoking guix pull): Add cross-reference.
* gnu/services/base.scm (install-channels-file): New procedure.
(guix-configuration): Add channels field.
(guix-activation): Use 'install-channels-file' procedure.

Co-authored-by: Ludovic Courtès <ludo@gnu.org>
Change-Id: I4d89235bf0bc6dde69984138ccb894b48ace9d76
2 files changed, 50 insertions(+), 2 deletions(-)

M doc/guix.texi
M gnu/services/base.scm
M doc/guix.texi => doc/guix.texi +17 -1
@@ 4727,7 4727,9 @@ the user's @file{~/.config/guix/channels.scm} file, unless @option{-q}
is passed;
@item
the system-wide @file{/etc/guix/channels.scm} file, unless @option{-q}
is passed;
is passed (on Guix System, this file can be declared in the operating
system configuration, @pxref{guix-configuration-channels,
@code{channels} field of @code{guix-configuration}});
@item
the built-in default channels specified in the @code{%default-channels}
variable.


@@ 19806,6 19808,20 @@ few seconds when enough entropy is available and is only done once; you
might want to turn it off for instance in a virtual machine that does
not need it and where the extra boot time is a problem.

@anchor{guix-configuration-channels}
@item @code{channels} (default: @code{%default-channels})
List of channels to be specified in @file{/etc/guix/channels.scm}, which
is what @command{guix pull} uses by default (@pxref{Invoking guix
pull}).

@quotation Note
When reconfiguring a system, the existing @file{/etc/guix/channels.scm}
file is backed up as @file{/etc/guix/channels.scm.bak} if it was
determined to be a manually modified file.  This is to facilitate
migration from earlier versions, which allowed for in-place
modifications to @file{/etc/guix/channels.scm}.
@end quotation

@item @code{max-silent-time} (default: @code{3600})
@itemx @code{timeout} (default: @code{(* 3600 24)})
The number of seconds of silence and the number of seconds of activity,

M gnu/services/base.scm => gnu/services/base.scm +33 -1
@@ 83,6 83,7 @@
  #:use-module ((gnu build file-systems)
                #:select (mount-flags->bit-mask
                          swap-space->flags-bit-mask))
  #:autoload   (guix channels) (%default-channels channel->code)
  #:use-module (guix gexp)
  #:use-module (guix records)
  #:use-module (guix modules)


@@ 211,6 212,7 @@
            guix-configuration-use-substitutes?
            guix-configuration-substitute-urls
            guix-configuration-generate-substitute-key?
            guix-configuration-channels
            guix-configuration-extra-options
            guix-configuration-log-file
            guix-configuration-environment


@@ 1740,6 1742,31 @@ archive' public keys, with GUIX."
        ;; Installed the declared ACL.
        (symlink #+default-acl acl-file))))

(define (install-channels-file channels)
  "Return a gexp with code to install CHANNELS, a list of channels, in
/etc/guix/channels.scm."
  (define channels-file
    (scheme-file "channels.scm"
                 `(list ,@(map channel->code channels))))

  (with-imported-modules '((guix build utils))
    #~(begin
        (use-modules (guix build utils))

        ;; If channels.scm already exists, move it out of the way. Create a
        ;; backup if it's a regular file: it's likely that the user
        ;; manually defined it.
        (if (file-exists? "/etc/guix/channels.scm")
            (if (and (symbolic-link? "/etc/guix/channels.scm")
                     (store-file-name? (readlink "/etc/guix/channels.scm")))
                (delete-file "/etc/guix/channels.scm")
                (rename-file "/etc/guix/channels.scm"
                             "/etc/guix/channels.scm.bak"))
            (mkdir-p "/etc/guix"))

        ;; Installed the declared channels.
        (symlink #+channels-file "/etc/guix/channels.scm"))))

(define %default-authorized-guix-keys
  ;; List of authorized substitute keys.
  (list (file-append guix "/share/guix/berlin.guix.gnu.org.pub")


@@ 1795,6 1822,8 @@ archive' public keys, with GUIX."
                    (default %default-substitute-urls))
  (generate-substitute-key? guix-configuration-generate-substitute-key?
                            (default #t))         ;Boolean
  (channels         guix-configuration-channels ;file-like
                    (default %default-channels))
  (chroot-directories guix-configuration-chroot-directories ;list of file-like/strings
                      (default '()))
  (max-silent-time  guix-configuration-max-silent-time ;integer


@@ 1988,7 2017,7 @@ proxy of 'guix-daemon'...~%")
(define (guix-activation config)
  "Return the activation gexp for CONFIG."
  (match-record config <guix-configuration>
    (guix generate-substitute-key? authorize-key? authorized-keys)
    (guix generate-substitute-key? authorize-key? authorized-keys channels)
    #~(begin
        ;; Assume that the store has BUILD-GROUP as its group.  We could
        ;; otherwise call 'chown' here, but the problem is that on a COW overlayfs,


@@ 2005,6 2034,9 @@ proxy of 'guix-daemon'...~%")
              (substitute-key-authorization authorized-keys guix)
              #~#f)

        ;; ... and /etc/guix/channels.scm...
        #$(and channels (install-channels-file channels))

        ;; ... and /etc/guix/machines.scm.
        #$(if (guix-build-machines config)
              (guix-machines-files-installation