about summary refs log tree commit diff
diff options
context:
space:
mode:
authorFranck Cuny <franck@fcuny.net>2022-04-06 07:31:56 -0700
committerFranck Cuny <franck@fcuny.net>2022-04-06 07:31:56 -0700
commitc41d9b7d8a6f8452f9dfb2650acb0926fef0d212 (patch)
treec9bd1e0f6e1236a29bab44ae79e574290be4b2a2
parentenable AMD module correctly (diff)
downloadworld-c41d9b7d8a6f8452f9dfb2650acb0926fef0d212.tar.gz
refactor navidrome to a module
-rw-r--r--hosts/common/server/navidrome.nix24
-rw-r--r--hosts/profiles/nas.nix13
-rw-r--r--modules/services/navidrome/default.nix37
3 files changed, 46 insertions, 28 deletions
diff --git a/hosts/common/server/navidrome.nix b/hosts/common/server/navidrome.nix
deleted file mode 100644
index e37ccfe..0000000
--- a/hosts/common/server/navidrome.nix
+++ /dev/null
@@ -1,24 +0,0 @@
-{ config, pkgs, lib, ... }:
-
-{
-  services.navidrome = {
-    enable = true;
-    settings = {
-      MusicFolder = "/data/fast/music";
-      Address = "0.0.0.0";
-      httpPort = "4533";
-    };
-  };
-
-  services.restic.backups = {
-    navidrome = {
-      paths = [ "/var/lib/navidrome/" ];
-      repository = "/data/slow/backups/systems";
-      passwordFile = config.age.secrets.restic-repo-systems.path;
-      timerConfig = { OnCalendar = "00:35"; };
-      initialize = true;
-      extraBackupArgs = [ "--tag navidrome" ];
-      pruneOpts = [ "--keep-daily 7" "--keep-weekly 4 --keep-monthly 6" ];
-    };
-  };
-}
diff --git a/hosts/profiles/nas.nix b/hosts/profiles/nas.nix
index dcc73e2..aaeee75 100644
--- a/hosts/profiles/nas.nix
+++ b/hosts/profiles/nas.nix
@@ -9,7 +9,6 @@
     ../common/server/unifi.nix
     ../common/server/gitea.nix
     ../common/server/rclone.nix
-    ../common/server/navidrome.nix
   ];
 
   users.groups.nas.gid = 5000;
@@ -19,9 +18,15 @@
     isSystemUser = true;
   };
 
-  my.services.samba = {
-    enable = true;
-    publicShares = [ "/data/fast/music" "/data/fast/videos" ];
+  my.services = {
+    samba = {
+      enable = true;
+      publicShares = [ "/data/fast/music" "/data/fast/videos" ];
+    };
+    navidrome = {
+      enable = true;
+      musicFolder = "/data/fast/music";
+    };
   };
 
   services.restic.backups = {
diff --git a/modules/services/navidrome/default.nix b/modules/services/navidrome/default.nix
new file mode 100644
index 0000000..1c3725b
--- /dev/null
+++ b/modules/services/navidrome/default.nix
@@ -0,0 +1,37 @@
+{ config, pkgs, lib, ... }:
+let cfg = config.my.services.navidrome;
+in {
+  options.my.services.navidrome = with lib; {
+    enable = mkEnableOption "Navidrome Music Server";
+    musicFolder = mkOption {
+      type = types.str;
+      example = "/data/fast/music";
+      description = "Music folder";
+    };
+  };
+
+  config = lib.mkIf cfg.enable {
+    services.navidrome = {
+      enable = true;
+      settings = {
+        MusicFolder = cfg.musicFolder;
+        Address = "0.0.0.0";
+        httpPort = "4533";
+      };
+    };
+
+    services.restic.backups = {
+      navidrome = {
+        paths = [ "/var/lib/navidrome/" ];
+        repository = "/data/slow/backups/systems";
+        passwordFile = config.age.secrets.restic-repo-systems.path;
+        timerConfig = { OnCalendar = "00:35"; };
+        initialize = true;
+        extraBackupArgs = [ "--tag navidrome" ];
+        pruneOpts = [ "--keep-daily 7" "--keep-weekly 4" ];
+      };
+    };
+
+    networking.firewall.allowedTCPPorts = [ 4533 ];
+  };
+}