help-guix
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: add shepherd requirement to an existing service?


From: Richard Sent
Subject: Re: add shepherd requirement to an existing service?
Date: Thu, 14 Mar 2024 13:54:54 -0400
User-agent: Gnus/5.13 (Gnus v5.13)

If this winds up being something you do frequently, it may be possible
to write a function to modify the service type. See [1] as an example. I
suspect your code would be smaller, something like

--8<---------------cut here---------------start------------->8---
(define (depend-on type new-requirement)
  "Returns a @code{service-type} record derived from @var{type} with any
  shepherd extensions additionally depending on @var{new-requirement}."
  (service-type
   (inherit type)
   (extensions
    (map (lambda (extension)
           (let ((target (service-extension-target extension))
                 (compute (service-extension-compute extension)))
             (if (eq? target shepherd-root-service-type)
                 (service-extension shepherd-root-service-type
                                    (lambda (config)
                                      (map (lambda (service)
                                             (shepherd-service
                                              (inherit service)
                                              (requirement
                                               (cons*
                                                new-requirement
                                                (shepherd-service-requirement 
config)))))
                                           (compute config))))
                 extension)))
         (service-type-extensions type)))))
--8<---------------cut here---------------end--------------->8---

This code might not be it exactly, but something similar to this
/should/ work.

[1] 
https://git.sr.ht/~freakingpenguin/rsent/tree/master/item/channel/rsent/utils/services.scm


-- 
Take it easy,
Richard Sent
Making my computer weirder one commit at a time.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]