Package: guix-patches;
Reported by: Brice Waegeneire <brice <at> waegenei.re>
Date: Sat, 17 Jul 2021 20:59:01 UTC
Severity: normal
Tags: patch
Done: Ludovic Courtès <ludo <at> gnu.org>
Bug is archived. No further changes may be made.
View this message in rfc822 format
From: Antero Mejr <antero <at> mailbox.org> To: 49610 <at> debbugs.gnu.org Cc: ludo <at> gnu.org, zimon.toutoune <at> gmail.com Subject: [bug#49610] [PATCH v4 1/2] services: guix: Add channels field. Date: Fri, 26 May 2023 16:26:05 +0000
* doc/guix.texi (Base Services): Document 'guix-configuration-channels' field. * gnu/services/base.scm (install-channels-file): New procedure. (%default-channels-file): New variable. (guix-configuration): Add channels field. (guix-activation): Use 'install-channels-file' procedure. --- doc/guix.texi | 13 +++++++++++++ gnu/services/base.scm | 40 ++++++++++++++++++++++++++++++++++++++-- 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index 31dc33fb97..9ebdf70d81 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -18858,6 +18858,19 @@ 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. +@item @code{channels} (default: @code{%default-channels-file}) +File-like object containing a list of channels to be used by +@command{guix pull}, by default. The file-like object is symlinked to +@file{/etc/guix/channels.scm}. + +@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{0}) @itemx @code{timeout} (default: @code{0}) The number of seconds of silence and the number of seconds of activity, diff --git a/gnu/services/base.scm b/gnu/services/base.scm index c5b06b57e8..ee0c4880f9 100644 --- a/gnu/services/base.scm +++ b/gnu/services/base.scm @@ -80,6 +80,7 @@ (define-module (gnu services base) #:use-module ((gnu build file-systems) #:select (mount-flags->bit-mask swap-space->flags-bit-mask)) + #:use-module (guix channels) #:use-module (guix gexp) #:use-module (guix records) #:use-module (guix modules) @@ -93,6 +94,7 @@ (define-module (gnu services base) #:use-module (srfi srfi-35) #:use-module (ice-9 match) #:use-module (ice-9 format) + #:use-module (ice-9 pretty-print) #:re-export (user-processes-service-type ;backwards compatibility %default-substitute-urls) #:export (fstab-service-type @@ -207,6 +209,7 @@ (define-module (gnu services base) 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 @@ -1739,6 +1742,35 @@ (define acl-file #$%acl-file) ;; Installed the declared ACL. (symlink #+default-acl acl-file)))) +(define %default-channels-file + ;; File-like object containing the default list of channels. + (plain-file "channels.scm" + (with-output-to-string + (lambda _ + (pretty-print (map channel->code %default-channels)))))) + +;; FIXME: Should this gexp be built before boot, like +;; substitute-key-authorization does? +(define (install-channels-file channels-file) + "Return a gexp with code to install CHANNELS-FILE, a file-like object." + (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") @@ -1763,6 +1795,8 @@ (define-record-type* <guix-configuration> (default %default-substitute-urls)) (generate-substitute-key? guix-configuration-generate-substitute-key? (default #t)) ;Boolean + (channels guix-configuration-channels ;file-like + (default %default-channels-file)) (chroot-directories guix-configuration-chroot-directories ;list of file-like/strings (default '())) (max-silent-time guix-configuration-max-silent-time ;integer @@ -1949,7 +1983,7 @@ (define (guix-accounts config) (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, @@ -1963,7 +1997,9 @@ (define (guix-activation config) #$(if authorize-key? (substitute-key-authorization authorized-keys guix) - #~#f)))) + #~#f) + + #$(install-channels-file channels)))) (define-record-type* <guix-extension> guix-extension make-guix-extension -- 2.39.2
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.