summary refs log tree commit diff
path: root/nixos/modules/services/networking/matterbridge.nix
blob: 5526e2ba23ac78a25d5fd4bf8c7633eda4ed53b9 (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
{ config, pkgs, lib, ... }:

with lib;

let

  cfg = config.services.matterbridge;

  matterbridgeConfToml = pkgs.writeText "matterbridge.toml" (cfg.configFile);

in

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

      configFile = mkOption {
        type = types.str;
        example = ''
          #WARNING: as this file contains credentials, be sure to set correct file permissions          [irc]
              [irc.freenode]
              Server="irc.freenode.net:6667"
              Nick="matterbot"

          [mattermost]
              [mattermost.work]
               #do not prefix it wit 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 = ''
          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 = mkMerge [
    (mkIf cfg.enable {

      users.extraUsers = mkIf (cfg.user == "matterbridge") [
        { name = "matterbridge";
          group = "matterbridge";
        } ];

      users.extraGroups = mkIf (cfg.group == "matterbridge") [
        { name = "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";
        };
      };
    })
  ];
}