From c8e755ce1d4dd5d4b215516c4561000743152ae9 Mon Sep 17 00:00:00 2001 From: coast Date: Fri, 2 Oct 2026 05:16:38 +0330 Subject: added shepherd.scm --- sys-apps/shepherd/files/shepherd.scm | 85 ++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 sys-apps/shepherd/files/shepherd.scm (limited to 'sys-apps/shepherd') diff --git a/sys-apps/shepherd/files/shepherd.scm b/sys-apps/shepherd/files/shepherd.scm new file mode 100644 index 0000000..b88cdb0 --- /dev/null +++ b/sys-apps/shepherd/files/shepherd.scm @@ -0,0 +1,85 @@ +(use-modules + (shepherd service) + (shepherd system) + (srfi srfi-1) + (srfi srfi-26) + (ice-9 ftw) + (ice-9 exceptions)) + +(define %shepherd-service-directory + "/etc/shepherd/services") + +(define %shepherd-enabled-directory + "/etc/shepherd/enabled") + +(define (scm-file? file) + (string-suffix? ".scm" file)) + +(define (service-file-name file) + (string-append %shepherd-service-directory "/" file)) + +(define (enabled-service-name file) + (let ((name (basename file))) + (if (string-suffix? ".scm" name) + (substring name 0 (- (string-length name) 4)) + name))) + +(define (load-service-file file) + (let ((path (service-file-name file))) + (catch #t + (lambda () + (format #t "Loading Shepherd service: ~a~%" path) + (load path)) + (lambda args + (format (current-error-port) + "Shepherd: failed to load service file ~a~%" + path) + (format (current-error-port) + "Shepherd error: ~s~%" + args))))) + +(define (load-service-directory) + (when (file-exists? %shepherd-service-directory) + (for-each + load-service-file + (sort + (filter scm-file? + (scandir %shepherd-service-directory)) + stringsymbol name))) + (format #t "Starting enabled Shepherd service: ~a~%" + name) + (start-service + (lookup-service (string->symbol name)))))) + (sort + (filter + (lambda (file) + (and (not (string=? file ".")) + (not (string=? file "..")))) + (scandir %shepherd-enabled-directory)) + string