diff options
author | W. Kosior <koszko@koszko.org> | 2025-02-17 12:35:07 +0100 |
---|---|---|
committer | W. Kosior <koszko@koszko.org> | 2025-05-26 14:07:28 +0200 |
commit | ada6a31a83e9adad4fc55bdd176fbddd556fec2e (patch) | |
tree | a494486ae84cd2545ac3f47c9cc19c24007960e1 | |
parent | f73d53f17beeabb5b327e7735cae79a0cd2216ff (diff) | |
download | guix-ada6a31a83e9adad4fc55bdd176fbddd556fec2e.tar.gz guix-ada6a31a83e9adad4fc55bdd176fbddd556fec2e.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 c8e01c9d83..b6ac679696 100644 --- a/gnu/services/shepherd.scm +++ b/gnu/services/shepherd.scm @@ -152,12 +152,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 |