python3Packages.orjson: Disable failing tests on 32 bit
[NixPkgs.git] / nixos / modules / services / audio / botamusique.nix
blob4cd900f945c8bd5f58a1902b550053addbaa335d
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 (lib.mdDoc "botamusique, a bot to play audio streams on mumble");
17     package = mkOption {
18       type = types.package;
19       default = pkgs.botamusique;
20       defaultText = literalExpression "pkgs.botamusique";
21       description = lib.mdDoc "The botamusique package to use.";
22     };
24     settings = mkOption {
25       type = with types; submodule {
26         freeformType = format.type;
27         options = {
28           server.host = mkOption {
29             type = types.str;
30             default = "localhost";
31             example = "mumble.example.com";
32             description = lib.mdDoc "Hostname of the mumble server to connect to.";
33           };
35           server.port = mkOption {
36             type = types.port;
37             default = 64738;
38             description = lib.mdDoc "Port of the mumble server to connect to.";
39           };
41           bot.username = mkOption {
42             type = types.str;
43             default = "botamusique";
44             description = lib.mdDoc "Name the bot should appear with.";
45           };
47           bot.comment = mkOption {
48             type = types.str;
49             default = "Hi, I'm here to play radio, local music or youtube/soundcloud music. Have fun!";
50             description = lib.mdDoc "Comment displayed for the bot.";
51           };
52         };
53       };
54       default = {};
55       description = lib.mdDoc ''
56         Your {file}`configuration.ini` as a Nix attribute set. Look up
57         possible options in the [configuration.example.ini](https://github.com/azlux/botamusique/blob/master/configuration.example.ini).
58       '';
59     };
60   };
62   config = mkIf cfg.enable {
63     systemd.services.botamusique = {
64       after = [ "network.target" ];
65       wantedBy = [ "multi-user.target" ];
67       unitConfig.Documentation = "https://github.com/azlux/botamusique/wiki";
69       environment.HOME = "/var/lib/botamusique";
71       serviceConfig = {
72         ExecStart = "${cfg.package}/bin/botamusique --config ${configFile}";
73         Restart = "always"; # the bot exits when the server connection is lost
75         # Hardening
76         CapabilityBoundingSet = [ "" ];
77         DynamicUser = true;
78         IPAddressDeny = [
79           "link-local"
80           "multicast"
81         ];
82         LockPersonality = true;
83         MemoryDenyWriteExecute = true;
84         ProcSubset = "pid";
85         PrivateDevices = true;
86         PrivateUsers = true;
87         PrivateTmp = true;
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         ProtectSystem = "strict";
97         RestrictNamespaces = true;
98         RestrictRealtime = true;
99         RestrictAddressFamilies = [
100           "AF_INET"
101           "AF_INET6"
102         ];
103         StateDirectory = "botamusique";
104         SystemCallArchitectures = "native";
105         SystemCallFilter = [
106           "@system-service"
107           "~@privileged"
108           "~@resources"
109         ];
110         UMask = "0077";
111         WorkingDirectory = "/var/lib/botamusique";
112       };
113     };
114   };