* [bug#69940] [PATCH 0/2] Making a 'guix' package with specific channels
@ 2024-03-22 13:58 Ludovic Courtès
2024-03-22 14:12 ` [bug#69940] [PATCH 1/2] build-system/channel: Add support for additional channels Ludovic Courtès
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Ludovic Courtès @ 2024-03-22 13:58 UTC (permalink / raw)
To: 69940; +Cc: Ludovic Courtès
From: Ludovic Courtès <ludovic.courtes@inria.fr>
Hello Guix!
This patch series aims to allow users to create an operating system
that runs a specific Guix for ‘guix-service-type’, and in particular
for /run/current-system/profile/bin/guix: it could be the ‘guix’
channel pinned to a specific revision, or it could be ‘guix’ together
with additional channels. Here’s the example added in the new
section of the manual:
(use-modules (guix channels))
(define my-channels
;; Channels that should be available to
;; /run/current-system/profile/bin/guix.
(append
(list (channel
(name 'guix-science)
(url "https://github.com/guix-science/guix-science")
(branch "master")))
%default-channels))
(operating-system
;; ...
(services
;; Change the package used by 'guix-service-type'.
(modify-services %base-services
(guix-service-type
config => (guix-configuration
(inherit config)
(channels my-channels)
(guix (guix-for-channels my-channels)))))))
The resulting operating system will have both the ‘guix’ and the
‘guix-science’ channels visible by default. The ‘channels’ field of
‘guix-configuration’ above ensures that /etc/guix/channels.scm specifies
the same set of channels
Thoughts?
Thanks,
Ludo’.
Ludovic Courtès (2):
build-system/channel: Add support for additional channels.
gnu: guix: Define ‘guix-for-channels’ and document its use.
doc/guix.texi | 67 ++++++++++++++++++++++++++++-
gnu/packages/package-management.scm | 14 +++++-
guix/build-system/channel.scm | 7 ++-
3 files changed, 83 insertions(+), 5 deletions(-)
base-commit: 40f53e8fb5b867e3a1e8fa798328423718282aac
--
2.41.0
^ permalink raw reply [flat|nested] 4+ messages in thread
* [bug#69940] [PATCH 1/2] build-system/channel: Add support for additional channels.
2024-03-22 13:58 [bug#69940] [PATCH 0/2] Making a 'guix' package with specific channels Ludovic Courtès
@ 2024-03-22 14:12 ` Ludovic Courtès
2024-03-22 14:12 ` [bug#69940] [PATCH 2/2] gnu: guix: Define ‘guix-for-channels’ and document its use Ludovic Courtès
2024-04-05 16:30 ` bug#69940: [PATCH 0/2] Making a 'guix' package with specific channels Ludovic Courtès
2 siblings, 0 replies; 4+ messages in thread
From: Ludovic Courtès @ 2024-03-22 14:12 UTC (permalink / raw)
To: 69940; +Cc: Ludovic Courtès
Until now, ‘channel-build-system’ would assume a single channel, the
‘guix’ channel. This change lets users specify additional channels
using the #:channels parameter.
* guix/build-system/channel.scm (build-channels): Add #:channels and
honor it.
(channel-build-system): In ‘lower’, add #:channels and honor it.
* doc/guix.texi (Build Systems): Document it.
Change-Id: I36c1d19cbeee02a4d1144de089b78df0390774a0
---
doc/guix.texi | 5 ++++-
guix/build-system/channel.scm | 7 +++++--
2 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/doc/guix.texi b/doc/guix.texi
index eda4084e7f..07dc6e24a8 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -10451,7 +10451,10 @@ Build Systems
name, in which case an additional @code{#:commit} argument must be
supplied to specify the commit being built (a hexadecimal string).
-The resulting package is a Guix instance of the given channel, similar
+Optionally, a @code{#:channels} argument specifying additional channels
+can be provided.
+
+The resulting package is a Guix instance of the given channel(s), similar
to how @command{guix time-machine} would build it.
@end defvar
diff --git a/guix/build-system/channel.scm b/guix/build-system/channel.scm
index 6ad377f930..0607dcf4d7 100644
--- a/guix/build-system/channel.scm
+++ b/guix/build-system/channel.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2019-2022 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2019-2022, 2024 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -37,6 +37,7 @@ (define latest-channel-instances*
(define* (build-channels name inputs
#:key source system commit
+ (channels '())
(authenticate? #t)
#:allow-other-keys)
(mlet* %store-monad ((instances
@@ -44,7 +45,7 @@ (define* (build-channels name inputs
(return (list source)))
((channel? source)
(latest-channel-instances*
- (list source)
+ (cons source channels)
#:authenticate? authenticate?))
((string? source)
;; If SOURCE is a store file name, as is the
@@ -64,12 +65,14 @@ (define* (build-channels name inputs
(define channel-build-system
;; Build system used to "convert" a channel instance to a package.
(let ((lower (lambda* (name #:key system source commit (authenticate? #t)
+ (channels '())
#:allow-other-keys)
(bag
(name name)
(system system)
(build build-channels)
(arguments `(#:source ,source
+ #:channels ,channels
#:authenticate? ,authenticate?
#:commit ,commit))))))
(build-system (name 'channel)
--
2.41.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [bug#69940] [PATCH 2/2] gnu: guix: Define ‘guix-for-channels’ and document its use.
2024-03-22 13:58 [bug#69940] [PATCH 0/2] Making a 'guix' package with specific channels Ludovic Courtès
2024-03-22 14:12 ` [bug#69940] [PATCH 1/2] build-system/channel: Add support for additional channels Ludovic Courtès
@ 2024-03-22 14:12 ` Ludovic Courtès
2024-04-05 16:30 ` bug#69940: [PATCH 0/2] Making a 'guix' package with specific channels Ludovic Courtès
2 siblings, 0 replies; 4+ messages in thread
From: Ludovic Courtès @ 2024-03-22 14:12 UTC (permalink / raw)
To: 69940; +Cc: Ludovic Courtès
From: Ludovic Courtès <ludovic.courtes@inria.fr>
* gnu/packages/package-management.scm (guix-for-channels): New
procedure.
* doc/guix.texi (Customizing the System-Wide Guix): New section.
(Base Services): Add cross-reference.
Change-Id: Ied51c3bf9bf08dfc629bb3f0a152eb20b869a636
---
doc/guix.texi | 62 ++++++++++++++++++++++++++++-
gnu/packages/package-management.scm | 14 ++++++-
2 files changed, 74 insertions(+), 2 deletions(-)
diff --git a/doc/guix.texi b/doc/guix.texi
index 07dc6e24a8..a2d5ef3ffd 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -5514,6 +5514,7 @@ Channels
* Specifying Additional Channels:: Extending the package collection.
* Using a Custom Guix Channel:: Using a customized Guix.
* Replicating Guix:: Running the @emph{exact same} Guix.
+* Customizing the System-Wide Guix:: Default channels on Guix System.
* Channel Authentication:: How Guix verifies what it fetches.
* Channels with Substitutes:: Using channels with available substitutes.
* Creating a Channel:: How to write your custom channel.
@@ -5671,6 +5672,64 @@ Replicating Guix
will---some sort of ``meta reproducibility'' capabilities, if you will.
@xref{Inferiors}, for another way to take advantage of these super powers.
+@node Customizing the System-Wide Guix
+@section Customizing the System-Wide Guix
+
+@cindex system-wide Guix, customization
+@cindex channels, for the default Guix
+If you're running Guix System or building system images with it, maybe
+you will want to customize the system-wide @command{guix} it
+provides---specifically, @file{/run/current-system/profile/bin/guix}.
+For example, you might want to provide additional channels or to pin its
+revision.
+
+This can be done using the @code{guix-for-channels} procedure, which
+returns a package for the given channels, and using it as part of your
+operating system configuration, as in this example:
+
+@lisp
+(use-modules (guix channels))
+
+(define my-channels
+ ;; Channels that should be available to
+ ;; /run/current-system/profile/bin/guix.
+ (append
+ (list (channel
+ (name 'guix-science)
+ (url "https://github.com/guix-science/guix-science")
+ (branch "master")))
+ %default-channels))
+
+(operating-system
+ ;; @dots{}
+ (services
+ ;; Change the package used by 'guix-service-type'.
+ (modify-services %base-services
+ (guix-service-type
+ config => (guix-configuration
+ (inherit config)
+ (channels my-channels)
+ (guix (guix-for-channels my-channels)))))))
+@end lisp
+
+The resulting operating system will have both the @code{guix} and the
+@code{guix-science} channels visible by default. The @code{channels}
+field of @code{guix-configuration} above further ensures that
+@file{/etc/guix/channels.scm}, which is used by @command{guix pull},
+specifies the same set of channels (@pxref{guix-configuration-channels,
+@code{channels} field of @code{guix-configuration}}).
+
+The @code{(gnu packages package-management)} module exports the
+@code{guix-for-channels} procedure, described below.
+
+@deffn {Procedure} guix-for-channels @var{channels}
+Return a package corresponding to @var{channels}.
+
+The result is a ``regular'' package, which can be used in
+@code{guix-configuration} as shown above or in any other place that
+expects a package.
+@end deffn
+
@node Channel Authentication
@section Channel Authentication
@@ -19734,7 +19793,8 @@ Base Services
@table @asis
@item @code{guix} (default: @var{guix})
-The Guix package to use.
+The Guix package to use. @xref{Customizing the System-Wide Guix} to
+learn how to provide a package with a pre-configured set of channels.
@item @code{build-group} (default: @code{"guixbuild"})
Name of the group for build user accounts.
diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm
index e9dd7427d3..c59f8b2bba 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013-2023 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013-2024 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2015, 2017, 2020, 2021, 2022, 2023 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2017 Muriithi Frederick Muriuki <fredmanglis@gmail.com>
;;; Copyright © 2017, 2018 Oleg Pykhalov <go.wigust@gmail.com>
@@ -649,6 +649,18 @@ (define-public guix-minimal
(modify-inputs (package-propagated-inputs guix)
(delete "guile-ssh"))))))
+(define-public (guix-for-channels channels)
+ "Return a package corresponding to CHANNELS."
+ (package
+ (inherit guix)
+ (source (find guix-channel? channels))
+ (build-system channel-build-system)
+ (arguments
+ `(#:channels ,(remove guix-channel? channels)))
+ (inputs '())
+ (native-inputs '())
+ (propagated-inputs '())))
+
(define-public current-guix-package
;; This parameter allows callers to override the package that 'current-guix'
;; returns. This is useful when 'current-guix' cannot compute it by itself,
--
2.41.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* bug#69940: [PATCH 0/2] Making a 'guix' package with specific channels
2024-03-22 13:58 [bug#69940] [PATCH 0/2] Making a 'guix' package with specific channels Ludovic Courtès
2024-03-22 14:12 ` [bug#69940] [PATCH 1/2] build-system/channel: Add support for additional channels Ludovic Courtès
2024-03-22 14:12 ` [bug#69940] [PATCH 2/2] gnu: guix: Define ‘guix-for-channels’ and document its use Ludovic Courtès
@ 2024-04-05 16:30 ` Ludovic Courtès
2 siblings, 0 replies; 4+ messages in thread
From: Ludovic Courtès @ 2024-04-05 16:30 UTC (permalink / raw)
To: 69940-done
Hello,
Ludovic Courtès <ludo@gnu.org> skribis:
> build-system/channel: Add support for additional channels.
> gnu: guix: Define ‘guix-for-channels’ and document its use.
Pushed as be14d41d9be3ef91d11ab24780855682c432cac9.
Ludo’.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2024-04-05 16:34 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-03-22 13:58 [bug#69940] [PATCH 0/2] Making a 'guix' package with specific channels Ludovic Courtès
2024-03-22 14:12 ` [bug#69940] [PATCH 1/2] build-system/channel: Add support for additional channels Ludovic Courtès
2024-03-22 14:12 ` [bug#69940] [PATCH 2/2] gnu: guix: Define ‘guix-for-channels’ and document its use Ludovic Courtès
2024-04-05 16:30 ` bug#69940: [PATCH 0/2] Making a 'guix' package with specific channels Ludovic Courtès
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).