{ 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"; }; }; }; }; }