diff options
author | Efraim Flashner <efraim@flashner.co.il> | 2017-10-01 19:59:55 +0300 |
---|---|---|
committer | Efraim Flashner <efraim@flashner.co.il> | 2017-10-01 22:16:22 +0300 |
commit | 64df08f0cfac8f7a329002afa3461fd62a4b229c (patch) | |
tree | 019909423138ceb49cdd86f1af48d366503db68f /gnu/services.scm | |
parent | b83ad3ace56c65a367e8f58c7b78323cf251b94b (diff) | |
parent | 0ef1c223071869488c35b72b7407234c11425589 (diff) | |
download | guix-64df08f0cfac8f7a329002afa3461fd62a4b229c.tar.gz |
Merge remote-tracking branch 'origin/master' into core-updates
Diffstat (limited to 'gnu/services.scm')
-rw-r--r-- | gnu/services.scm | 40 |
1 files changed, 38 insertions, 2 deletions
diff --git a/gnu/services.scm b/gnu/services.scm index 8ef1ae7c77..329b7b1513 100644 --- a/gnu/services.scm +++ b/gnu/services.scm @@ -23,6 +23,7 @@ #:use-module (guix store) #:use-module (guix records) #:use-module (guix profiles) + #:use-module (guix discovery) #:use-module (guix sets) #:use-module (guix ui) #:use-module ((guix utils) #:select (source-properties->location)) @@ -49,6 +50,11 @@ service-type-compose service-type-extend service-type-default-value + service-type-description + service-type-location + + %service-type-path + fold-service-types service service? @@ -91,7 +97,8 @@ %activation-service etc-service - file-union)) ;XXX: for lack of a better place + file-union ;XXX: for lack of a better place + directory-union)) ;;; Comment: ;;; @@ -145,7 +152,15 @@ ;; Optional default value for instances of this type. (default-value service-type-default-value ;Any - (default &no-default-value))) + (default &no-default-value)) + + ;; Meta-data. + (description service-type-description ;string + (default #f)) + (location service-type-location ;<location> + (default (and=> (current-source-location) + source-properties->location)) + (innate))) (define (write-service-type type port) (format port "#<service-type ~a ~a>" @@ -154,6 +169,27 @@ (set-record-type-printer! <service-type> write-service-type) +(define %distro-root-directory + ;; Absolute file name of the module hierarchy. + (dirname (search-path %load-path "guix.scm"))) + +(define %service-type-path + ;; Search path for service types. + (make-parameter `((,%distro-root-directory . "gnu/services") + (,%distro-root-directory . "gnu/system")))) + +(define* (fold-service-types proc seed + #:optional + (modules (all-modules (%service-type-path)))) + "For each service type exported by one of MODULES, call (PROC RESULT). SEED +is used as the initial value of RESULT." + (fold-module-public-variables (lambda (object result) + (if (service-type? object) + (proc object result) + result)) + '() + modules)) + ;; Services of a given type. (define-record-type <service> (make-service type value) |