From dff7d2468ffe9d01b25662544af380e1794ac55a Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Sun, 6 Aug 2023 18:23:54 +0200 Subject: 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(-) (limited to 'gnu/services.scm') 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 +;;; Copyright © 2015-2023 Ludovic Courtès ;;; Copyright © 2016 Chris Marusich ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen ;;; Copyright © 2020, 2021 Ricardo Wurmus @@ -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. -- cgit v1.2.3