zfs_unstable: 2.3.0-rc3 -> 2.3.0-rc4 (#365045)
[NixPkgs.git] / nixos / modules / services / audio / music-assistant.nix
blobaaabe5c3ac4c33b8f321419db0e14c3b46bf9743
2   config,
3   lib,
4   pkgs,
5   utils,
6   ...
7 }:
9 let
10   inherit (lib)
11     mkIf
12     mkEnableOption
13     mkOption
14     mkPackageOption
15     types
16     ;
18   inherit (types)
19     listOf
20     enum
21     str
22     ;
24   cfg = config.services.music-assistant;
26   finalPackage = cfg.package.override {
27     inherit (cfg) providers;
28   };
32   meta.buildDocsInSandbox = false;
34   options.services.music-assistant = {
35     enable = mkEnableOption "Music Assistant";
37     package = mkPackageOption pkgs "music-assistant" { };
39     extraOptions = mkOption {
40       type = listOf str;
41       default = [
42         "--config"
43         "/var/lib/music-assistant"
44       ];
45       example = [
46         "--log-level"
47         "DEBUG"
48       ];
49       description = ''
50         List of extra options to pass to the music-assistant executable.
51       '';
52     };
54     providers = mkOption {
55       type = listOf (enum cfg.package.providerNames);
56       default = [ ];
57       example = [
58         "opensubsonic"
59         "snapcast"
60       ];
61       description = ''
62         List of provider names for which dependencies will be installed.
63       '';
64     };
65   };
67   config = mkIf cfg.enable {
68     systemd.services.music-assistant = {
69       description = "Music Assistant";
70       documentation = [ "https://music-assistant.io" ];
72       wantedBy = [ "multi-user.target" ];
74       environment = {
75         HOME = "/var/lib/music-assistant";
76         PYTHONPATH = finalPackage.pythonPath;
77       };
79       serviceConfig = {
80         ExecStart = utils.escapeSystemdExecArgs (
81           [
82             (lib.getExe cfg.package)
83           ]
84           ++ cfg.extraOptions
85         );
86         DynamicUser = true;
87         StateDirectory = "music-assistant";
88         AmbientCapabilities = "";
89         CapabilityBoundingSet = [ "" ];
90         DevicePolicy = "closed";
91         LockPersonality = true;
92         MemoryDenyWriteExecute = true;
93         ProcSubset = "pid";
94         ProtectClock = true;
95         ProtectControlGroups = true;
96         ProtectHome = true;
97         ProtectHostname = true;
98         ProtectKernelLogs = true;
99         ProtectKernelModules = true;
100         ProtectKernelTunables = true;
101         ProtectProc = "invisible";
102         RestrictAddressFamilies = [
103           "AF_INET"
104           "AF_INET6"
105           "AF_NETLINK"
106         ];
107         RestrictNamespaces = true;
108         RestrictRealtime = true;
109         SystemCallArchitectures = "native";
110         SystemCallFilter = [
111           "@system-service"
112           "~@privileged @resources"
113         ];
114         RestrictSUIDSGID = true;
115         UMask = "0077";
116       };
117     };
118   };