diff options
author | W. Kosior <koszko@koszko.org> | 2025-02-17 12:35:07 +0100 |
---|---|---|
committer | W. Kosior <koszko@koszko.org> | 2025-03-21 13:59:33 +0100 |
commit | 9abb42f6faec70c93586ecdcaf5c25ec0a5eb28d (patch) | |
tree | 86c9074f77069938104604fca95d3fdcc9aab0aa | |
parent | 9c585102d540ca51a0bb158e661bf1ada5666568 (diff) | |
download | guix-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.scm | 15 |
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 |