guix-commits
[Top][All Lists]
Advanced

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

04/14: services: Define 'for-home'.


From: guix-commits
Subject: 04/14: services: Define 'for-home'.
Date: Sun, 20 Aug 2023 17:22:25 -0400 (EDT)

civodul pushed a commit to branch master
in repository guix.

commit dff7d2468ffe9d01b25662544af380e1794ac55a
Author: Ludovic Courtès <ludo@gnu.org>
AuthorDate: Sun Aug 6 18:23:54 2023 +0200

    services: Define 'for-home'.
    
    * gnu/services.scm (remove-service-extensions): New procedure.
    (for-home?): New syntax parameter.
    (for-home): New macro.
---
 gnu/services.scm | 25 ++++++++++++++++++++++++-
 1 file changed, 24 insertions(+), 1 deletion(-)

diff --git a/gnu/services.scm b/gnu/services.scm
index 109e050a23..eb9258977e 100644
--- a/gnu/services.scm
+++ b/gnu/services.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015-2022 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015-2023 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016 Chris Marusich <cmmarusich@gmail.com>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
@@ -86,6 +86,10 @@
             instantiate-missing-services
             fold-services
 
+            remove-service-extensions
+            for-home
+            for-home?
+
             service-error?
             missing-value-service-error?
             missing-value-service-error-type
@@ -1225,4 +1229,23 @@ TARGET-TYPE; return the root service adjusted 
accordingly."
                            (G_ "more than one target service of type '~a'")
                            (service-type-name target-type)))))))))
 
+(define (remove-service-extensions type lst)
+  "Return TYPE, a service type, without any of the service extensions
+targeting one of the types in LST."
+  (service-type
+   (inherit type)
+   (extensions (remove (lambda (extension)
+                         (memq (service-extension-target extension) lst))
+                       (service-type-extensions type)))))
+
+(define-syntax-parameter for-home?
+  ;; Whether the configuration being defined is for a Home service.
+  (identifier-syntax #f))
+
+(define-syntax-rule (for-home exp ...)
+  "Mark EXP, which typically defines a service configuration, as targeting a
+Home service rather than a System service."
+  (syntax-parameterize ((for-home? (identifier-syntax #t)))
+    exp ...))
+
 ;;; services.scm ends here.



reply via email to

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