(define-module (epistemia services zfs) #:use-module (gnu services shepherd) #:use-module (guix gexp) #:use-module (epistemia packages zfs) #:export (zfs-shepherd-services)) ;; from raid5atemyhomework's valiant efforts (define zfs-shepherd-services (let ((zpool (file-append zfs-linux "/sbin/zpool")) (zfs (file-append zfs-linux "/sbin/zfs")) (scheme-modules `((srfi srfi-1) (srfi srfi-34) (srfi srfi-35) (rnrs io ports) ,@%default-modules))) (define zfs-scan (shepherd-service (provision '(zfs-scan)) (documentation "Scans for ZFS pools.") (requirement '(kernel-module-loader udev)) (modules scheme-modules) (start #~(lambda _ (invoke/quiet #$zpool "import" "-a" "-N" "-d" "/dev/disk/by-id"))) (stop #~(const #f)))) (define zfs-automount (shepherd-service (provision '(zfs-automount)) (documentation "Automounts ZFS data sets.") (requirement '(zfs-scan)) (modules scheme-modules) (start #~(lambda _ (with-output-to-port (current-error-port) (lambda () (invoke #$zfs "mount" "-a" "-l"))))) (stop #~(lambda _ (chdir "/") (invoke/quiet #$zfs "unmount" "-a" "-f") #f)))) (list zfs-scan zfs-automount)))