[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
01/03: services: Add 'simple-service'.
From: |
Ludovic Courtès |
Subject: |
01/03: services: Add 'simple-service'. |
Date: |
Mon, 19 Sep 2016 14:41:40 +0000 (UTC) |
civodul pushed a commit to branch master
in repository guix.
commit 71654dfdda4890d7a663a36a7fe754b53591aba6
Author: Ludovic Courtès <address@hidden>
Date: Mon Sep 19 13:31:06 2016 +0900
services: Add 'simple-service'.
* gnu/services.scm (simple-service): New procedure.
* doc/guix.texi (Service Reference): Document it.
---
doc/guix.texi | 19 +++++++++++++++++++
gnu/services.scm | 8 ++++++++
2 files changed, 27 insertions(+)
diff --git a/doc/guix.texi b/doc/guix.texi
index 7a86a2f..808fbdc 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -11348,6 +11348,25 @@ the extension; it must return a valid value for the
target service.
Return true if @var{obj} is a service extension.
@end deffn
+Occasionally, you might want to simply extend an existing service. This
+involves creating a new service type and specifying the extension of
+interest, which can be verbose; the @code{simple-service} procedure
+provides a shorthand for this.
+
address@hidden {Scheme Procedure} simple-service @var{name} @var{target}
@var{value}
+Return a service that extends @var{target} with @var{value}. This works
+by creating a singleton service type @var{name}, of which the returned
+service is an instance.
+
+For example, this extends mcron (@pxref{Scheduled Job Execution}) with
+an additional job:
+
address@hidden
+(simple-service 'my-mcron-job mcron-service-type
+ #~(job '(next-hour (3)) "guix gc -F 2G"))
address@hidden example
address@hidden deffn
+
At the core of the service abstraction lies the @code{fold-services}
procedure, which is responsible for ``compiling'' a list of services
down to a single directory that contains everything needed to boot and
diff --git a/gnu/services.scm b/gnu/services.scm
index 5479bfa..7e322c5 100644
--- a/gnu/services.scm
+++ b/gnu/services.scm
@@ -50,6 +50,7 @@
service-kind
service-parameters
+ simple-service
modify-services
service-back-edges
fold-services
@@ -141,6 +142,13 @@
(type service-kind)
(parameters service-parameters))
+(define (simple-service name target value)
+ "Return a service that extends TARGET with VALUE. This works by creating a
+singleton service type NAME, of which the returned service is an instance."
+ (let* ((extension (service-extension target identity))
+ (type (service-type (name name)
+ (extensions (list extension)))))
+ (service type value)))
(define-syntax %modify-service
(syntax-rules (=>)