{ 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; }; }; }; }