summary refs log tree commit diff
path: root/nixos/modules/services/networking/matterbridge.nix
blob: bad35133459a0ef835785198418d4c230e78c9b6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
{ options, config, pkgs, lib, ... }:

with lib;

let

  cfg = config.services.matterbridge;

  matterbridgeConfToml =
    if cfg.configPath == null then
      pkgs.writeText "matterbridge.toml" (cfg.configFile)
    else
      cfg.configPath;

in

{
  options = {
    services.matterbridge = {
      enable = mkEnableOption "Matterbridge chat platform bridge";

      configPath = mkOption {
        type = with types; nullOr str;
        default = null;
        example = "/etc/nixos/matterbridge.toml";
        description = ''
          The path to the matterbridge configuration file.
        '';
      };

      configFile = mkOption {
        type = types.str;
        example = ''
          # WARNING: as this file contains credentials, do not use this option!
          # It is kept only for backwards compatibility, and would cause your
          # credentials to be in the nix-store, thus with the world-readable
          # permission bits.
          # Use services.matterbridge.configPath instead.

          [irc]
              [irc.freenode]
              Server="irc.freenode.net:6667"
              Nick="matterbot"

          [mattermost]
              [mattermost.work]
               # Do not prefix it with http:// or https://
               Server="yourmattermostserver.domain"
               Team="yourteam"
               Login="yourlogin"
               Password="yourpass"
               PrefixMessagesWithNick=true

          [[gateway]]
          name="gateway1"
          enable=true
              [[gateway.inout]]
              account="irc.freenode"
              channel="#testing"

              [[gateway.inout]]
              account="mattermost.work"
              channel="off-topic"
        '';
        description = ''
          WARNING: THIS IS INSECURE, as your password will end up in
          <filename>/nix/store</filename>, thus publicly readable. Use
          <literal>services.matterbridge.configPath</literal> instead.

          The matterbridge configuration file in the TOML file format.
        '';
      };
      user = mkOption {
        type = types.str;
        default = "matterbridge";
        description = ''
          User which runs the matterbridge service.
        '';
      };

      group = mkOption {
        type = types.str;
        default = "matterbridge";
        description = ''
          Group which runs the matterbridge service.
        '';
      };
    };
  };

  config = mkIf cfg.enable {
    warnings = optional options.services.matterbridge.configFile.isDefined
      "The option services.matterbridge.configFile is insecure and should be replaced with services.matterbridge.configPath";

    users.users = optionalAttrs (cfg.user == "matterbridge")
      { matterbridge = {
          group = "matterbridge";
          isSystemUser = true;
        };
      };

    users.groups = optionalAttrs (cfg.group == "matterbridge")
      { matterbridge = { };
      };

    systemd.services.matterbridge = {
      description = "Matterbridge chat platform bridge";
      wantedBy = [ "multi-user.target" ];
      after = [ "network.target" ];

      serviceConfig = {
        User = cfg.user;
        Group = cfg.group;
        ExecStart = "${pkgs.matterbridge.bin}/bin/matterbridge -conf ${matterbridgeConfToml}";
        Restart = "always";
        RestartSec = "10";
      };
    };
  };
}