summaryrefslogtreecommitdiff
path: root/Omni/Cloud/Hub.nix
diff options
context:
space:
mode:
Diffstat (limited to 'Omni/Cloud/Hub.nix')
-rw-r--r--Omni/Cloud/Hub.nix57
1 files changed, 57 insertions, 0 deletions
diff --git a/Omni/Cloud/Hub.nix b/Omni/Cloud/Hub.nix
new file mode 100644
index 0000000..39bbdd0
--- /dev/null
+++ b/Omni/Cloud/Hub.nix
@@ -0,0 +1,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";
+ };
+ };
+ };
+ };
+}