From 44ee1e470a2f9d4985af4d51654d9f943caa0f24 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=AE=8B=E6=96=87=E6=AD=A6?= <iyzsong@member.fsf.org>
Date: Sat, 23 Jan 2021 20:39:06 +0800
Subject: [PATCH] services: Allow 'file-system-service-type' extensible by
service name.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* gnu/services/base.scm (file-system-shepherd-services): Add
'extra-services-names' paramater.
(file-system-service-type): Handle services’ names from extensions.
---
gnu/services/base.scm | 23 +++++++++++++++++------
1 file changed, 17 insertions(+), 6 deletions(-)
@@ -364,15 +364,16 @@ FILE-SYSTEM."
(gnu system file-systems)
,@%default-modules)))))))
-(define (file-system-shepherd-services file-systems)
+(define (file-system-shepherd-services file-systems extra-services-names)
"Return the list of Shepherd services for FILE-SYSTEMS."
(let* ((file-systems (filter file-system-mount? file-systems)))
(define sink
(shepherd-service
(provision '(file-systems))
- (requirement (cons* 'root-file-system 'user-file-systems
- (map file-system->shepherd-service-name
- file-systems)))
+ (requirement (append '(root-file-system user-file-systems)
+ (map file-system->shepherd-service-name
+ file-systems)
+ extra-services-names))
(documentation "Target for all the initially-mounted file systems")
(start #~(const #t))
(stop #~(const #f))))
@@ -429,13 +430,23 @@ FILE-SYSTEM."
(service-type (name 'file-systems)
(extensions
(list (service-extension shepherd-root-service-type
- file-system-shepherd-services)
+ (lambda (value)
+ (file-system-shepherd-services
+ (filter file-system? value)
+ (filter symbol? value))))
(service-extension fstab-service-type
- file-system-fstab-entries)
+ (lambda (value)
+ (file-system-fstab-entries
+ (filter file-system? value))))
;; Have 'user-processes' depend on 'file-systems'.
(service-extension user-processes-service-type
(const '(file-systems)))))
+
+ ;; Extensions consist of lists of <file-system> objects or
+ ;; shepherd services’ names (symbols). In the latter case,
+ ;; the provided shepherd services supposed to mount and
+ ;; unmount some file systems themself.
(compose concatenate)
(extend append)
(description
--
2.29.2