about summary refs log tree commit diff
path: root/overlays/sliding-sync-module.nix
diff options
context:
space:
mode:
authorsefidel <contact@sefidel.net>2023-03-29 20:54:19 +0900
committersefidel <contact@sefidel.net>2023-04-03 18:32:29 +0900
commitce06f43476863da90dc60dcee606d2b6c5a89a8e (patch)
tree5d14946330cb09ff0ebd97bee59407fccee4d860 /overlays/sliding-sync-module.nix
downloadinfra-ce06f43476863da90dc60dcee606d2b6c5a89a8e.tar.gz
infra-ce06f43476863da90dc60dcee606d2b6c5a89a8e.zip
project: initial commit
Diffstat (limited to 'overlays/sliding-sync-module.nix')
-rw-r--r--overlays/sliding-sync-module.nix87
1 files changed, 87 insertions, 0 deletions
diff --git a/overlays/sliding-sync-module.nix b/overlays/sliding-sync-module.nix
new file mode 100644
index 0000000..692818b
--- /dev/null
+++ b/overlays/sliding-sync-module.nix
@@ -0,0 +1,87 @@
+{ config, lib, pkgs, ... }:
+let
+  cfg = config.services.sliding-sync;
+in
+{
+  # TODO: add default values
+  options.services.sliding-sync = {
+    enable = lib.mkEnableOption (lib.mdDoc "matrix.org sliding-sync");
+    server = lib.mkOption {
+      type = lib.types.str;
+      # default = "https://matrix-client.matrix.org" # TODO: required?
+      description = lib.mdDoc ''
+        The destination homeserver to talk to (CS API HTTPS URL)
+      '';
+    };
+    db = lib.mkOption {
+      type = lib.types.str;
+      description = lib.mdDoc ''
+        The postgres connection string: https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING
+      '';
+    };
+    bindAddr = lib.mkOption {
+      type = lib.types.str;
+      default = "0.0.0.0:8008";
+      description = lib.mdDoc ''
+        The interface and port to listen on.
+      '';
+    };
+    secret = lib.mkOption {
+      type = lib.types.str;
+      description = lib.mdDoc ''
+        A secret to use to encrypt access tokens.
+        Must remain the same for the lifetime of the database.
+      '';
+    };
+    pprof = lib.mkOption {
+      type = lib.types.nullOr lib.types.str;
+      default = null;
+      description = lib.mdDoc ''
+        The bind addr for pprof debugging e.g ':6060'.
+        If not set, does not listen.
+      '';
+    };
+    prom = lib.mkOption {
+      type = lib.types.nullOr lib.types.str;
+      default = null;
+      description = lib.mdDoc ''
+        The bind addr for Prometheus metrics,
+        which will be accessible at /metrics at this address.
+      '';
+    };
+    jaegerUrl = lib.mkOption {
+      type = lib.types.nullOr lib.types.str;
+      default = null;
+      description = lib.mdDoc ''
+        The Jaeger URL to send spans to e.g http://localhost:14268/api/traces
+        If unset does not send OTLP traces.
+      '';
+    };
+  };
+
+  config = lib.mkIf cfg.enable {
+    systemd.services.sliding-sync = {
+      description = "MSC3575 Matrix Sliding Sync Proxy";
+      after = [
+        "network.target"
+      ];
+      wantedBy = [ "multi-user.target" ];
+      serviceConfig = {
+        Type = "simple";
+        DynamicUser = true;
+        ExecStart =
+          "${pkgs.sliding-sync}/bin/syncv3";
+        Restart = "on-failure";
+      };
+      environment = {
+        SYNCV3_SERVER = cfg.server;
+        SYNCV3_DB = cfg.db;
+        SYNCV3_SECRET = cfg.secret;
+        SYNCV3_BINDADDR = cfg.bindAddr;
+        SYNCV3_PPROF = cfg.pprof;
+        SYNCV3_PROM = cfg.prom;
+        SYNCV3_JAEGER_URL = cfg.jaegerUrl;
+      };
+    };
+  };
+}