vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / services / audio / music-assistant.nix
blob90c0b41fc587fb458c1f2d97b58a76e5962f8f4b
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 = [ "--config" "/var/lib/music-assistant" ];
42       example = [
43         "--log-level"
44         "DEBUG"
45       ];
46       description = ''
47         List of extra options to pass to the music-assistant executable.
48       '';
49     };
51     providers = mkOption {
52       type = listOf (enum cfg.package.providerNames);
53       default = [];
54       example = [
55         "opensubsonic"
56         "snapcast"
57       ];
58       description = ''
59         List of provider names for which dependencies will be installed.
60       '';
61     };
62   };
64   config = mkIf cfg.enable {
65     systemd.services.music-assistant = {
66       description = "Music Assistant";
67       documentation = [ "https://music-assistant.io" ];
69       wantedBy = [ "multi-user.target" ];
71       environment = {
72         HOME = "/var/lib/music-assistant";
73         PYTHONPATH = finalPackage.pythonPath;
74       };
76       serviceConfig = {
77         ExecStart = utils.escapeSystemdExecArgs ([
78           (lib.getExe cfg.package)
79         ] ++ cfg.extraOptions);
80         DynamicUser = true;
81         StateDirectory = "music-assistant";
82         AmbientCapabilities = "";
83         CapabilityBoundingSet = [ "" ];
84         DevicePolicy = "closed";
85         LockPersonality = true;
86         MemoryDenyWriteExecute = true;
87         ProcSubset = "pid";
88         ProtectClock = true;
89         ProtectControlGroups = true;
90         ProtectHome = true;
91         ProtectHostname = true;
92         ProtectKernelLogs = true;
93         ProtectKernelModules = true;
94         ProtectKernelTunables = true;
95         ProtectProc = "invisible";
96         RestrictAddressFamilies = [
97           "AF_INET"
98           "AF_INET6"
99           "AF_NETLINK"
100         ];
101         RestrictNamespaces = true;
102         RestrictRealtime = true;
103         SystemCallArchitectures = "native";
104         SystemCallFilter = [
105           "@system-service"
106           "~@privileged @resources"
107         ];
108         RestrictSUIDSGID = true;
109         UMask = "0077";
110       };
111     };
112   };