aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorW. Kosior <koszko@koszko.org>2025-02-17 12:35:07 +0100
committerW. Kosior <koszko@koszko.org>2025-03-21 13:59:33 +0100
commit9abb42f6faec70c93586ecdcaf5c25ec0a5eb28d (patch)
tree86c9074f77069938104604fca95d3fdcc9aab0aa
parent9c585102d540ca51a0bb158e661bf1ada5666568 (diff)
downloadguix-9abb42f6faec70c93586ecdcaf5c25ec0a5eb28d.tar.gz
guix-9abb42f6faec70c93586ecdcaf5c25ec0a5eb28d.zip
services: shepherd: Allow extensions to alter shepherd root config.
This, in particular, enables system administrator to use a different (modified) shepherd package for the init. * gnu/services/shepherd.scm (shepherd-root-service-type)[extend]: When an extension is a procedure, do not treat it as an extra shepherd service to append. Instead, pass the resulting config through it. Change-Id: I39c394ab0798b7a1f8d373c19becf01c4870d10b
-rw-r--r--gnu/services/shepherd.scm15
1 files changed, 10 insertions, 5 deletions
diff --git a/gnu/services/shepherd.scm b/gnu/services/shepherd.scm
index 65c49b9c59..b9c39281b7 100644
--- a/gnu/services/shepherd.scm
+++ b/gnu/services/shepherd.scm
@@ -150,12 +150,17 @@
(name 'shepherd-root)
;; Extending the root shepherd service (aka. PID 1) happens by
;; concatenating the list of services provided by the extensions.
+ (extend (lambda (config changes)
+ ((compose (lambda (proc-changes extra-services)
+ ((apply compose (cons identity
+ (reverse proc-changes)))
+ (shepherd-configuration
+ (inherit config)
+ (services (append
+ (shepherd-configuration-services config)
+ extra-services)))))
+ (cut partition procedure? changes)))))
(compose concatenate)
- (extend (lambda (config extra-services)
- (shepherd-configuration
- (inherit config)
- (services (append (shepherd-configuration-services config)
- extra-services)))))
(extensions (list (service-extension boot-service-type
shepherd-boot-gexp)
(service-extension profile-service-type