From f8986f696be804f125f5f4acadd2c0440a739728 Mon Sep 17 00:00:00 2001 From: Hilton Chain Date: Thu, 15 May 2025 10:32:42 +0800 Subject: [PATCH] services: Add navidrome-service-type. * modules/rosenthal/services/web.scm (navidrome-configuration): New data type. (navidrome-shepherd-service): New procedure. (%navidrome-accounts, navidrome-service-type): New variables. --- modules/rosenthal/services/web.scm | 75 ++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/modules/rosenthal/services/web.scm b/modules/rosenthal/services/web.scm index 8583040..a33a425 100644 --- a/modules/rosenthal/services/web.scm +++ b/modules/rosenthal/services/web.scm @@ -7,6 +7,7 @@ #:use-module (guix records) #:use-module (gnu packages admin) #:use-module (gnu packages version-control) + #:use-module (gnu packages video) #:use-module (rosenthal packages binaries) #:use-module (rosenthal packages web) #:use-module (gnu services) @@ -29,6 +30,9 @@ misskey-configuration misskey-service-type + navidrome-configuration + navidrome-service-type + vaultwarden-configuration vaultwarden-service-type)) @@ -349,6 +353,77 @@ (default-value (misskey-configuration)) (description "Run Misskey, an interplanetary microblogging platform."))) + +;;; +;;; Navidrome +;;; + + +(define-configuration navidrome-configuration + (navidrome + (file-like navidrome-bin) + "") + (ffmpeg + (file-like ffmpeg) + "") + (auto-start? + (boolean #t) + "") + (extra-config + (string "") + "") + (no-serialization)) + +(define %navidrome-accounts + (list (user-group (name "navidrome") (system? #t)) + (user-account + (name "navidrome") + (group "navidrome") + (system? #t) + (comment "Navidrome user") + (home-directory "/var/lib/navidrome")))) + +(define navidrome-shepherd-service + (match-record-lambda + (navidrome ffmpeg auto-start? extra-config) + (let ((config-file + (mixed-text-file + "navidrome.toml" + "DataFolder = '/var/lib/navidrome'\n" + "CacheFolder = '/var/lib/navidrome/cache'\n" + "EnableInsightsCollector = false\n" + extra-config))) + (list (shepherd-service + (documentation "Run Navidrome.") + (provision '(navidrome)) + (requirement '(loopback user-processes)) + (start + #~(make-forkexec-constructor + (list #$(file-append navidrome "/bin/navidrome") + "--configfile" #$config-file) + #:user "navidrome" + #:group "navidrome" + #:log-file "/var/log/navidrome.log" + #:environment-variables + (list "LC_ALL=C.UTF-8" + (string-append "PATH=" #$ffmpeg "/bin")))) + (stop + #~(make-kill-destructor)) + (auto-start? auto-start?) + (actions + (list (shepherd-configuration-action config-file)))))))) + +(define navidrome-service-type + (service-type + (name 'navidrome) + (extensions + (list (service-extension account-service-type + (const %navidrome-accounts)) + (service-extension shepherd-root-service-type + navidrome-shepherd-service))) + (default-value (navidrome-configuration)) + (description "Run Navidrome."))) + ;; ;; Vaultwarden