(define-module (ruther services netbird) #:use-module (gnu services) #:use-module (gnu services shepherd) #:use-module (gnu services configuration) #:use-module (guix gexp) #:use-module (guix records) #:use-module (ruther packages netbird) #:export (netbird-configuration netbird-configuration? netbird-configuration-netbird netbird-configuration-log-level netbird-service-type)) (define-configuration/no-serialization netbird-configuration (netbird (file-like netbird) "The netbird package to use.") (log-level (string "info") "Log level.")) (define (netbird-shepherd-service config) (let ((netbird (netbird-configuration-netbird config)) (log-level (netbird-configuration-log-level config))) (list (shepherd-service (provision '(netbird)) (requirement '(networking)) (documentation "Run the NetBird client daemon.") (start #~(make-forkexec-constructor (list #$(file-append netbird "/bin/netbird") "service" "run" "--log-level" #$log-level) #:log-file "/var/log/netbird.log")) (stop #~(make-kill-destructor)))))) (define netbird-service-type (service-type (name 'netbird) (extensions (list (service-extension shepherd-root-service-type netbird-shepherd-service))) (default-value (netbird-configuration)) (description "Run the NetBird VPN client daemon.")))