vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / services / audio / botamusique.nix
blobc764a79b1166d99f2db1aa59d5abb3a7d64406e4
1 { config, lib, pkgs, ... }:
3 with lib;
5 let
6   cfg = config.services.botamusique;
8   format = pkgs.formats.ini {};
9   configFile = format.generate "botamusique.ini" cfg.settings;
12   meta.maintainers = with lib.maintainers; [ hexa ];
14   options.services.botamusique = {
15     enable = mkEnableOption "botamusique, a bot to play audio streams on mumble";
17     package = mkPackageOption pkgs "botamusique" { };
19     settings = mkOption {
20       type = with types; submodule {
21         freeformType = format.type;
22         options = {
23           server.host = mkOption {
24             type = types.str;
25             default = "localhost";
26             example = "mumble.example.com";
27             description = "Hostname of the mumble server to connect to.";
28           };
30           server.port = mkOption {
31             type = types.port;
32             default = 64738;
33             description = "Port of the mumble server to connect to.";
34           };
36           bot.username = mkOption {
37             type = types.str;
38             default = "botamusique";
39             description = "Name the bot should appear with.";
40           };
42           bot.comment = mkOption {
43             type = types.str;
44             default = "Hi, I'm here to play radio, local music or youtube/soundcloud music. Have fun!";
45             description = "Comment displayed for the bot.";
46           };
47         };
48       };
49       default = {};
50       description = ''
51         Your {file}`configuration.ini` as a Nix attribute set. Look up
52         possible options in the [configuration.example.ini](https://github.com/azlux/botamusique/blob/master/configuration.example.ini).
53       '';
54     };
55   };
57   config = mkIf cfg.enable {
58     systemd.services.botamusique = {
59       after = [ "network.target" ];
60       wantedBy = [ "multi-user.target" ];
62       unitConfig.Documentation = "https://github.com/azlux/botamusique/wiki";
64       environment.HOME = "/var/lib/botamusique";
66       serviceConfig = {
67         ExecStart = "${cfg.package}/bin/botamusique --config ${configFile}";
68         Restart = "always"; # the bot exits when the server connection is lost
70         # Hardening
71         CapabilityBoundingSet = [ "" ];
72         DynamicUser = true;
73         IPAddressDeny = [
74           "link-local"
75           "multicast"
76         ];
77         LockPersonality = true;
78         MemoryDenyWriteExecute = true;
79         ProcSubset = "pid";
80         PrivateDevices = true;
81         PrivateUsers = true;
82         PrivateTmp = true;
83         ProtectClock = true;
84         ProtectControlGroups = true;
85         ProtectHome = true;
86         ProtectHostname = true;
87         ProtectKernelLogs = true;
88         ProtectKernelModules = true;
89         ProtectKernelTunables = true;
90         ProtectProc = "invisible";
91         ProtectSystem = "strict";
92         RestrictNamespaces = true;
93         RestrictRealtime = true;
94         RestrictAddressFamilies = [
95           "AF_INET"
96           "AF_INET6"
97         ];
98         StateDirectory = "botamusique";
99         SystemCallArchitectures = "native";
100         SystemCallFilter = [
101           "@system-service @resources"
102           "~@privileged"
103         ];
104         UMask = "0077";
105         WorkingDirectory = "/var/lib/botamusique";
106       };
107     };
108   };