summaryrefslogtreecommitdiff
path: root/Biz/Cloud/Hub.nix
blob: 39bbdd0eb74144c4c203bddeb2abbf49ff6dc75b (plain)
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
{ lib, pkgs, config, ... }:

let
  ssl = {
    cert = "/var/lib/acme/${config.networking.domain}/fullchain.pem";
    key = "/var/lib/acme/${config.networking.domain}/key.pem";
  };
  ports = import ./Ports.nix;
  mkPlugin = path: settings: {
    plugin = "${pkgs.uhub}/plugins/${path}";
    inherit settings;
  };
  motdFile = pkgs.writeText "motd" ''
    Meshheads write code.
  '';
  rulesFile = pkgs.writeText "rules" ''
    1. x
    2. (λx.M)
    3. (M N)
    4. Profit.
  '';
in {
  networking.firewall.allowedUDPPorts = [ ports.meshhub ];
  networking.firewall.allowedTCPPorts = [ ports.meshhub ];

  services.uhub = {
    "meshhub" = {
      enable = true;
      enableTLS = false;
      settings = {
        hub_name = "meshhub";
        hub_description = "vaporware is dead. long live vaporware";
        server_port = toString ports.meshhub;
        server_bind_addr = "any";
        max_users = 14; # we only have 14 users in meshheads chat
        tls_private_key = ssl.key;
        tls_certificate = ssl.cert;
        tls_enable = "no";
        tls_require = "no";
      };
      plugins = lib.attrsets.mapAttrsToList mkPlugin {
        #"mod_logging.so" = {
        #  file = "/var/log/uhub/meshhub.log";
        #};
        "mod_welcome.so" = {
          motd = "${motdFile}";
          rules = "${rulesFile}";
        };
        "mod_chat_history.so" = {
          history_max = "200";
          history_default = "10";
          history_connect = "5";
        };
      };
    };
  };
}