summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorsils <sils@sils.li>2023-07-20 17:45:57 +0200
committersils <sils@sils.li>2023-07-20 17:45:57 +0200
commitb59b25f5f83f52f686428adf5eba25d7eee3d217 (patch)
tree83cdac0677857020cb68b23853ebade65d80020d
parentChore(system/secrets): Rekey to support new public key (diff)
parentFeat(system/services): Add matrix synapse (diff)
downloadnixos-server-b59b25f5f83f52f686428adf5eba25d7eee3d217.tar.gz
nixos-server-b59b25f5f83f52f686428adf5eba25d7eee3d217.zip
Feat(system): Add matrix-synapse
-rw-r--r--system/services/default.nix1
-rw-r--r--system/services/matrix/default.nix78
2 files changed, 79 insertions, 0 deletions
diff --git a/system/services/default.nix b/system/services/default.nix
index 13e1c0a..7bf26c3 100644
--- a/system/services/default.nix
+++ b/system/services/default.nix
@@ -3,6 +3,7 @@
     ./fail2ban
     ./keycloak
     ./mail
+    ./matrix
     ./minecraft
     ./nginx
     ./nix
diff --git a/system/services/matrix/default.nix b/system/services/matrix/default.nix
new file mode 100644
index 0000000..e35c129
--- /dev/null
+++ b/system/services/matrix/default.nix
@@ -0,0 +1,78 @@
+{
+  pkgs,
+  lib,
+  config,
+  ...
+}: let
+  fqdn = "matrix.vhack.eu";
+  clientConfig."m.homeserver".base_url = "https://${fqdn}";
+  serverConfig."m.server" = "${fqdn}:443";
+  mkWellKnown = data: ''
+    add_header Content-Type application/json;
+    add_header Access-Control-Allow-Origin *;
+    return 200 '${builtins.toJSON data}';
+  '';
+in {
+  networking.firewall.allowedTCPPorts = [80 443];
+
+  services.postgresql.enable = true;
+  services.postgresql.initialScript = pkgs.writeText "synapse-init.sql" ''
+    CREATE ROLE "matrix-synapse" WITH LOGIN PASSWORD 'synapse';
+    CREATE DATABASE "matrix-synapse" WITH OWNER "matrix-synapse"
+      TEMPLATE template0
+      LC_COLLATE = "C"
+      LC_CTYPE = "C";
+  '';
+
+  services.nginx = {
+    enable = true;
+    recommendedTlsSettings = true;
+    recommendedOptimisation = true;
+    recommendedGzipSettings = true;
+    recommendedProxySettings = true;
+    virtualHosts = {
+      "vhack.eu" = {
+        enableACME = true;
+        forceSSL = true;
+        locations."= /.well-known/matrix/server".extraConfig = mkWellKnown serverConfig;
+        locations."= /.well-known/matrix/client".extraConfig = mkWellKnown clientConfig;
+      };
+      "matrix.vhack.eu" = {
+        enableACME = true;
+        forceSSL = true;
+        locations."/".extraConfig = ''
+          return 404;
+        '';
+        locations = {
+          "/_matrix".proxyPass = "http://[::1]:8008";
+          "/_synapse/client".proxyPass = "http://[::1]:8008";
+        };
+      };
+    };
+  };
+
+  services.matrix-synapse = {
+    enable = true;
+    dataDir = "/srv/matrix/data";
+    configFile = "/srv/matrix";
+    settings = {
+      media_store_path = "/srv/matrix/media_store";
+      server_name = "vhack.eu";
+      listeners = [
+        {
+          port = 8008;
+          bind_addresses = ["::1"];
+          type = "http";
+          tls = false;
+          x_forwarded = true;
+          resources = [
+            {
+              names = ["client" "federation"];
+              compress = true;
+            }
+          ];
+        }
+      ];
+    };
+  };
+}