64 lines
1.7 KiB
Nix
64 lines
1.7 KiB
Nix
{ config, lib, pkgs, options, ... }:
|
|
with lib;
|
|
let
|
|
cfg = config.services.matrix-syncv3;
|
|
in
|
|
{
|
|
options = {
|
|
services.matrix-syncv3 = {
|
|
enable = mkEnableOption "SyncV3 for matrix";
|
|
package = mkPackageOption pkgs "matrix-sliding-sync" { };
|
|
|
|
port = mkOption {
|
|
type = types.int;
|
|
default = 8088;
|
|
description = ''
|
|
The port to listen on.
|
|
'';
|
|
};
|
|
|
|
environmentFile = mkOption {
|
|
type = types.nullOr types.path;
|
|
default = null;
|
|
description = ''
|
|
Must contain the `SYNCV3_SECRET` environment variable.
|
|
Generated with ``openssl rand -hex 32``.
|
|
'';
|
|
};
|
|
};
|
|
};
|
|
|
|
config = mkIf cfg.enable {
|
|
services = {
|
|
postgresql = {
|
|
ensureDatabases = [ "matrix-syncv3" ];
|
|
ensureUsers = [{
|
|
name = "matrix-syncv3";
|
|
ensurePermissions."DATABASE \"matrix-syncv3\"" = "ALL PRIVILEGES";
|
|
}];
|
|
};
|
|
};
|
|
|
|
systemd.services.matrix-syncv3 = {
|
|
after = [ "matrix-synapse.service" "postgresql.service" ];
|
|
wantedBy = [ "multi-user.target" ];
|
|
serviceConfig = {
|
|
DynamicUser = true;
|
|
StateDirectory = "matrix-syncv3";
|
|
WorkingDirectory = "/var/lib/matrix-syncv3";
|
|
Environment = [
|
|
"SYNCV3_SERVER=https://matrix.walkah.chat"
|
|
"SYNCV3_DB=postgresql:///matrix-syncv3?host=/run/postgresql"
|
|
"SYNCV3_BINDADDR=0.0.0.0:${toString cfg.port}"
|
|
];
|
|
};
|
|
script = ''
|
|
path=/var/lib/matrix-syncv3/secret
|
|
[ -f $path ] || ${pkgs.openssl}/bin/openssl rand -hex 32 > $path
|
|
export SYNCV3_SECRET=$(cat $path)
|
|
exec ${cfg.package}/bin/syncv3
|
|
'';
|
|
};
|
|
};
|
|
}
|