zfs_unstable: 2.3.0-rc3 -> 2.3.0-rc4 (#365045)
[NixPkgs.git] / nixos / modules / services / audio / ympd.nix
blob12672eb935f1e9b2d234a8980b9b33bc88d562ad
2   config,
3   lib,
4   pkgs,
5   ...
6 }:
7 let
8   cfg = config.services.ympd;
9 in
12   ###### interface
14   options = {
16     services.ympd = {
18       enable = lib.mkEnableOption "ympd, the MPD Web GUI";
20       webPort = lib.mkOption {
21         type = lib.types.either lib.types.str lib.types.port; # string for backwards compat
22         default = "8080";
23         description = "The port where ympd's web interface will be available.";
24         example = "ssl://8080:/path/to/ssl-private-key.pem";
25       };
27       mpd = {
28         host = lib.mkOption {
29           type = lib.types.str;
30           default = "localhost";
31           description = "The host where MPD is listening.";
32         };
34         port = lib.mkOption {
35           type = lib.types.port;
36           default = config.services.mpd.network.port;
37           defaultText = lib.literalExpression "config.services.mpd.network.port";
38           description = "The port where MPD is listening.";
39           example = 6600;
40         };
41       };
43     };
45   };
47   ###### implementation
49   config = lib.mkIf cfg.enable {
51     systemd.services.ympd = {
52       description = "Standalone MPD Web GUI written in C";
54       wantedBy = [ "multi-user.target" ];
55       wants = [ "network-online.target" ];
56       after = [ "network-online.target" ];
58       serviceConfig = {
59         ExecStart = ''
60           ${pkgs.ympd}/bin/ympd \
61             --host ${cfg.mpd.host} \
62             --port ${toString cfg.mpd.port} \
63             --webport ${toString cfg.webPort}
64         '';
66         DynamicUser = true;
67         NoNewPrivileges = true;
69         ProtectProc = "invisible";
70         ProtectSystem = "strict";
71         ProtectHome = "tmpfs";
73         PrivateTmp = true;
74         PrivateDevices = true;
75         PrivateIPC = true;
77         ProtectHostname = true;
78         ProtectClock = true;
79         ProtectKernelTunables = true;
80         ProtectKernelModules = true;
81         ProtectKernelLogs = true;
82         ProtectControlGroups = true;
84         RestrictAddressFamilies = [
85           "AF_INET"
86           "AF_INET6"
87         ];
88         RestrictRealtime = true;
89         RestrictSUIDSGID = true;
91         SystemCallFilter = [
92           "@system-service"
93           "~@process"
94           "~@setuid"
95         ];
96       };
97     };
99   };