From b5874e2bcdb6f701f9d44167bd17a8209433fd48 Mon Sep 17 00:00:00 2001
From: h7x4 <h7x4@nani.wtf>
Date: Fri, 28 Jul 2023 21:50:38 +0200
Subject: [PATCH] tsuki/navidrome: init

---
 hosts/tsuki/configuration.nix          |  2 +-
 hosts/tsuki/services/navidrome.nix     | 20 ++++++++++++++++++++
 hosts/tsuki/services/nginx/default.nix |  3 +++
 3 files changed, 24 insertions(+), 1 deletion(-)
 create mode 100644 hosts/tsuki/services/navidrome.nix

diff --git a/hosts/tsuki/configuration.nix b/hosts/tsuki/configuration.nix
index 07901a0..dcce055 100644
--- a/hosts/tsuki/configuration.nix
+++ b/hosts/tsuki/configuration.nix
@@ -15,7 +15,7 @@
     ./services/kanidm.nix
     ./services/matrix
     ./services/minecraft
-    ./services/nextcloud.nix
+    ./services/navidrome.nix
     ./services/nginx
     ./services/osuchan.nix
     ./services/pgadmin.nix
diff --git a/hosts/tsuki/services/navidrome.nix b/hosts/tsuki/services/navidrome.nix
new file mode 100644
index 0000000..396da97
--- /dev/null
+++ b/hosts/tsuki/services/navidrome.nix
@@ -0,0 +1,20 @@
+{ config, pkgs, ... }: let
+  cfg = config.services.navidrome;
+in {
+  services.navidrome = {
+    enable = true;
+    settings = {
+      Address = "127.0.0.1";
+      Port = 4533;
+      MusicFolder = "/data2/media/music";
+      Prometheus.Enabled = true;
+    };
+  };
+
+  local.socketActivation.navidrome = {
+    enable = true;
+    originalSocketAddress = "${cfg.settings.Address}:${toString cfg.settings.Port}";
+    newSocketAddress = "/run/navidrome.sock";
+    privateNamespace = false;
+  };
+}
diff --git a/hosts/tsuki/services/nginx/default.nix b/hosts/tsuki/services/nginx/default.nix
index eec1987..b2b6535 100644
--- a/hosts/tsuki/services/nginx/default.nix
+++ b/hosts/tsuki/services/nginx/default.nix
@@ -39,6 +39,7 @@
     upstreams = let
       inherit (secrets) ips ports;
       srv = config.services;
+      sa = config.local.socketActivation;
     in {
       "atuin".servers."localhost:${s srv.atuin.port}" = { };
       "dynmap".servers."localhost:${s ports.minecraft.dynmap}" = { };
@@ -51,6 +52,7 @@
       "invidious".servers."localhost:${s config.services.invidious.port}" = { };
       "jupyter".servers."unix:/run/jupyter/jupyter.sock" = { };
       "kanidm".servers."localhost:8300" = { };
+      "navidrome".servers."unix:${sa.navidrome.newSocketAddress}" = { };
       "osuchan".servers."localhost:${s ports.osuchan}" = { };
       "pgadmin".servers."unix:${srv.uwsgi.instance.vassals.pgadmin.socket}" = { };
       "plex".servers."localhost:${s ports.plex}" = { };
@@ -157,6 +159,7 @@
       (proxy ["map"] "http://dynmap" {})
       (proxy ["osu"] "http://osuchan" {})
       (proxy ["plex"] "http://plex" {})
+      (proxy ["mus"] "http://navidrome" enableWebsockets)
       (proxy ["px1"] "https://proxmox" enableWebsockets)
       (proxy ["py"] "http://jupyter" enableWebsockets)
       (proxy ["vpn"] "http://headscale" enableWebsockets)