[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.