(define-module (radix services linux) #:use-module (gnu) #:use-module (radix packages linux) #:use-module (gnu services) #:use-module (gnu services shepherd) #:use-module (guix gexp) #:use-module (guix records) #:export ( thinkfan-configuration make-thinkfan-configuration thinkfan-configuration? thinkfan-shepherd-service thinkfan-service-type)) (define-record-type* thinkfan-configuration make-thinkfan-configuration thinkfan-configuration? (requirement thinkfan-configuration-requirement ;list of symbols (default '(user-processes))) (pid-file thinkfan-configuration-pid-file ;string (default "/var/run/thinkfan.pid")) (config-file thinkfan-configuration-config-file ;#f | file-like (default #f)) (respawn? thinkfan-configuration-respawn? ;boolean (default #t)) (extra-options thinkfan-configuration-extra-options ;list of strings (default '()))) (define (thinkfan-shepherd-service config) (match-record config (requirement pid-file config-file respawn? extra-options) (list (shepherd-service (provision '(thinkfan)) (documentation "Adjust fan level according to configured temperature limits.") (requirement requirement) (start #~(make-forkexec-constructor (list (string-append #$thinkfan-next "/sbin/thinkfan") #$@(if config-file #~((string-append "-c" #$config-file)) #~()) #$@extra-options) #:pid-file #$pid-file)) (stop #~(make-kill-destructor)) (one-shot? #t) (respawn? respawn?))))) (define thinkfan-service-type (service-type (name 'thinkfan) (extensions (list (service-extension shepherd-root-service-type thinkfan-shepherd-service))) (default-value (thinkfan-configuration)) (description "Adjust fan level according to configured temperature limits.")))