matrix: refactor synapse into library

This is in prepration for bringing up a Matrix server for hsp.sh.

Verified to cause no diff on prod.

Change-Id: Ied2de210692e3ddfdb1d3f37b12893b214c34b0b
diff --git a/app/matrix/matrix.hackerspace.pl.jsonnet b/app/matrix/matrix.hackerspace.pl.jsonnet
new file mode 100644
index 0000000..bbfa27c
--- /dev/null
+++ b/app/matrix/matrix.hackerspace.pl.jsonnet
@@ -0,0 +1,71 @@
+local matrix = import "lib/matrix.libsonnet";
+local irc = import "lib/appservice-irc.libsonnet";
+local telegram = import "lib/appservice-telegram.libsonnet";
+
+matrix {
+    local app = self,
+    local cfg = app.cfg,
+    cfg+:: {
+        namespace: "matrix",
+        webDomain: "matrix.hackerspace.pl",
+        serverName: "hackerspace.pl",
+    },
+
+    appservices: {
+        "irc-freenode": irc.AppServiceIrc("freenode") {
+            cfg+: {
+                image: cfg.appserviceIRCImage,
+                // TODO(q3k): move this appservice to waw-hdd-redundant-3
+                storageClassName: "waw-hdd-paranoid-2",
+                metadata: app.metadata("appservice-irc-freenode"),
+                // TODO(q3k): add labels to blessed nodes
+                nodeSelector: {
+                    "kubernetes.io/hostname": "bc01n03.hswaw.net",
+                },
+                config+: {
+                    homeserver+: {
+                        url: "https://%s" % [cfg.webDomain],
+                        domain: "%s" % [cfg.serverName],
+                    },
+                    ircService+: {
+                        servers+: {
+                            "irc.freenode.net"+: {
+                                ircClients+: {
+                                    maxClients: 150,
+                                },
+                            },
+                        },
+                    },
+                },
+            },
+        },
+        "telegram-prod": telegram.AppServiceTelegram("prod") {
+            cfg+: {
+                image: cfg.appserviceTelegramImage,
+                storageClassName: cfg.storageClassName,
+                metadata: app.metadata("appservice-telegram-prod"),
+
+                config+: {
+                    homeserver+: {
+                        address: "https://%s" % [cfg.webDomain],
+                        domain: cfg.serverName,
+                    },
+                    appservice+: {
+                        id: "telegram",
+                    },
+                    telegram+: {
+                        api_id: (std.split(importstr "secrets/plain/appservice-telegram-prod-api-id", "\n"))[0],
+                        api_hash: (std.split(importstr "secrets/plain/appservice-telegram-prod-api-hash", "\n"))[0],
+                        bot_token: (std.split(importstr "secrets/plain/appservice-telegram-prod-token", "\n"))[0],
+                    },
+                    bridge+: {
+                        permissions+: {
+                            "hackerspace.pl": "puppeting",
+                            "@q3k:hackerspace.pl": "admin",
+                        },
+                    },
+                },
+            },
+        },
+    },
+}