aboutsummaryrefslogtreecommitdiff
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.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;
+ };
+ };
+ };
+}