vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / services / networking / matterbridge.nix
blob74b388d68408504425cd351cc88e07e99cd87b79
1 { options, config, pkgs, lib, ... }:
2 let
4   cfg = config.services.matterbridge;
6   matterbridgeConfToml =
7     if cfg.configPath == null then
8       pkgs.writeText "matterbridge.toml" (cfg.configFile)
9     else
10       cfg.configPath;
15   options = {
16     services.matterbridge = {
17       enable = lib.mkEnableOption "Matterbridge chat platform bridge";
19       package = lib.mkPackageOption pkgs "matterbridge" { };
21       configPath = lib.mkOption {
22         type = with lib.types; nullOr str;
23         default = null;
24         example = "/etc/nixos/matterbridge.toml";
25         description = ''
26           The path to the matterbridge configuration file.
27         '';
28       };
30       configFile = lib.mkOption {
31         type = lib.types.str;
32         example = ''
33           # WARNING: as this file contains credentials, do not use this option!
34           # It is kept only for backwards compatibility, and would cause your
35           # credentials to be in the nix-store, thus with the world-readable
36           # permission bits.
37           # Use services.matterbridge.configPath instead.
39           [irc]
40               [irc.libera]
41               Server="irc.libera.chat:6667"
42               Nick="matterbot"
44           [mattermost]
45               [mattermost.work]
46                # Do not prefix it with http:// or https://
47                Server="yourmattermostserver.domain"
48                Team="yourteam"
49                Login="yourlogin"
50                Password="yourpass"
51                PrefixMessagesWithNick=true
53           [[gateway]]
54           name="gateway1"
55           enable=true
56               [[gateway.inout]]
57               account="irc.libera"
58               channel="#testing"
60               [[gateway.inout]]
61               account="mattermost.work"
62               channel="off-topic"
63         '';
64         description = ''
65           WARNING: THIS IS INSECURE, as your password will end up in
66           {file}`/nix/store`, thus publicly readable. Use
67           `services.matterbridge.configPath` instead.
69           The matterbridge configuration file in the TOML file format.
70         '';
71       };
72       user = lib.mkOption {
73         type = lib.types.str;
74         default = "matterbridge";
75         description = ''
76           User which runs the matterbridge service.
77         '';
78       };
80       group = lib.mkOption {
81         type = lib.types.str;
82         default = "matterbridge";
83         description = ''
84           Group which runs the matterbridge service.
85         '';
86       };
87     };
88   };
90   config = lib.mkIf cfg.enable {
91     warnings = lib.optional options.services.matterbridge.configFile.isDefined
92       "The option services.matterbridge.configFile is insecure and should be replaced with services.matterbridge.configPath";
94     users.users = lib.optionalAttrs (cfg.user == "matterbridge")
95       { matterbridge = {
96           group = "matterbridge";
97           isSystemUser = true;
98         };
99       };
101     users.groups = lib.optionalAttrs (cfg.group == "matterbridge")
102       { matterbridge = { };
103       };
105     systemd.services.matterbridge = {
106       description = "Matterbridge chat platform bridge";
107       wantedBy = [ "multi-user.target" ];
108       after = [ "network.target" ];
110       serviceConfig = {
111         User = cfg.user;
112         Group = cfg.group;
113         ExecStart = "${cfg.package}/bin/matterbridge -conf ${matterbridgeConfToml}";
114         Restart = "always";
115         RestartSec = "10";
116       };
117     };
118   };