(define-module (mirenn home services timer) #:use-module (guix gexp) #:use-module (gnu services) #:use-module (gnu services shepherd) #:use-module (gnu services configuration) #:use-module (gnu home services) #:use-module (gnu home services shepherd) #:export (home-timer-configuration)) (define-configuration/no-serialization home-timer-configuration (name symbol "Name of the timer.") (script local-file "Script to run on timeout.") (arguments (list string) "Arguments passed to the script.") (delay number "Timer delay in seconds.")) (define (home-timer-shepherd-service config) (list (shepherd-service (documentation "Run a periodic task") (provision (list (home-timer-configuration-name config))) (respawn? #t) (respawn-delay (home-timer-configuration-delay config)) (start #~(make-forkexec-constructor (cons #$(home-timer-configuration-script config) #$(home-timer-configuration-arguments config)))) (stop #~(make-kill-destructor))))) (define-public home-timer-service-type (service-type (name 'home-timer') (extensions (list (service-extension home-shepherd-service-type home-timer-shepherd-service))) (description "Runs a script periodically based on a respawn delay")))