main
 1{lib, ...}: {
 2  den.aspects.services.navidrome = {
 3    settings.host = {
 4      domain = lib.mkOption {
 5        type = lib.types.str;
 6      };
 7      address = lib.mkOption {
 8        type = lib.types.str;
 9        default = "127.0.0.1";
10      };
11      port = lib.mkOption {
12        type = lib.types.port;
13        default = 4533;
14      };
15    };
16
17    persist = {
18      directories = [
19        {
20          directory = "/var/lib/navidrome";
21          user = "navidrome";
22          group = "navidrome";
23          mode = "0700";
24        }
25      ];
26    };
27
28    cache = {
29      directories = [
30        {
31          directory = "/var/lib/navidrome/cache";
32          user = "navidrome";
33          group = "navidrome";
34          mode = "0700";
35        }
36      ];
37    };
38
39    reverseProxy = {host, ...}: let
40      cfg = host.settings.services.navidrome;
41    in {
42      ${cfg.domain} = {
43        port = cfg.port;
44      };
45    };
46
47    nixos = {host, ...}: let
48      cfg = host.settings.services.navidrome;
49    in {
50      services.navidrome = {
51        enable = true;
52        settings = {
53          Address = cfg.address;
54          Port = cfg.port;
55          DataFolder = "/var/lib/navidrome";
56        };
57      };
58    };
59  };
60}