1 { lib, config, pkgs, name, ... }:
4 security.acme.certs."${name}".extraDomainNames = ["synapse.immae.eu"];
8 acmeRoot = config.security.acme.defaults.webroot;
12 locations."~ ^/admin(?:/(.*))?$" = {
14 synapse-admin = pkgs.fetchzip {
15 url = "https://github.com/Awesome-Technologies/synapse-admin/releases/download/0.10.1/synapse-admin-0.10.1.tar.gz";
16 sha256 = "sha256-M2AYNrnpNoDm20ZTH1OZBHVcjOrHAlqyq5iTQ/At/Xk=";
18 sed -i -e 's@"/assets@"./assets@g' $out/index.html
22 "${synapse-admin}/$1";
24 locations."/sliding-sync-client/" = {
25 # some svg urls are hardcoded to /client :shrug:
26 alias = "${pkgs.matrix-sliding-sync.src}/client/";
27 tryFiles = "$uri $uri/ /sliding-sync-client/index.html";
29 locations."~ ^/_matrix/client/unstable/org.matrix.msc3575/sync" = {
30 proxyPass = "http://unix:/run/matrix-synapse/sliding_sync.sock:";
32 locations."~ ^(/_matrix|/_synapse/client|/_synapse/admin)" = {
33 proxyPass = "http://unix:/run/matrix-synapse/main_client_federation.sock:";
35 client_max_body_size 50M;
42 systemd.services.postgresql.postStart = lib.mkAfter ''
43 $PSQL -tAc "SELECT 1 FROM pg_database WHERE datname = 'matrix-synapse'" | grep -q 1 || $PSQL -tAc "CREATE DATABASE \"matrix-synapse\" LC_COLLATE='C' LC_CTYPE='C' TEMPLATE template0"
44 $PSQL -tAc "SELECT 1 FROM pg_database WHERE datname = 'matrix-sliding-sync'" | grep -q 1 || $PSQL -tAc "CREATE DATABASE \"matrix-sliding-sync\" LC_COLLATE='C' LC_CTYPE='C' TEMPLATE template0"
45 $PSQL -tAc "SELECT 1 FROM pg_roles WHERE rolname='matrix-synapse'" | grep -q 1 || $PSQL -tAc 'CREATE USER "matrix-synapse"'
46 $PSQL -tAc 'ALTER DATABASE "matrix-synapse" OWNER TO "matrix-synapse";'
47 $PSQL -tAc 'ALTER DATABASE "matrix-sliding-sync" OWNER TO "matrix-synapse";'
50 disko.devices.zpool.zfast.datasets."root/persist/var/lib/matrix-sliding-sync" =
51 { type = "zfs_fs"; mountpoint = "/persist/zfast/var/lib/matrix-sliding-sync"; options.mountpoint = "legacy"; };
52 disko.devices.zpool.zfast.datasets."root/persist/var/lib/matrix-synapse" =
53 { type = "zfs_fs"; mountpoint = "/persist/zfast/var/lib/matrix-synapse"; options.mountpoint = "legacy"; };
55 environment.persistence."/persist/zfast".directories = [
57 directory = "/var/lib/matrix-synapse";
58 user = "matrix-synapse";
59 group = "matrix-synapse";
63 directory = "/var/lib/matrix-sliding-sync";
64 user = "matrix-synapse";
65 group = "matrix-synapse";
70 users.users.matrix-synapse.extraGroups = [ "keys" ];
71 users.users.nginx.extraGroups = [ "matrix-synapse" ];
73 services.matrix-synapse = {
76 config.secrets.fullPaths."matrix/homeserver_secrets.yaml"
78 settings.server_name = "immae.eu";
79 settings.signing_key_path = config.secrets.fullPaths."matrix/signing.key";
80 settings.listeners = [
83 bind_addresses = [ "127.0.0.1" ];
95 path = "/run/matrix-synapse/main_client_federation.sock";
103 names = [ "federation" ];
111 services.matrix-sliding-sync = {
113 createDatabase = false;
114 settings.SYNCV3_SERVER = "/run/matrix-synapse/main_client_federation.sock";
115 settings.SYNCV3_BINDADDR = "/run/matrix-synapse/sliding_sync.sock";
116 environmentFile = config.secrets.fullPaths."matrix/sliding-sync";
119 systemd.services.matrix-synapse = {
122 "persist-zfast-var-lib-matrix\\x2dsynapse.mount"
123 "var-lib-matrix\\x2dsynapse.mount"
127 "var-lib-matrix\\x2dsynapse.mount"
128 "persist-zfast-var-lib-matrix\\x2dsynapse.mount"
131 serviceConfig.SupplementaryGroups = [ "keys" ];
134 systemd.services.matrix-sliding-sync = {
136 DynamicUser = lib.mkForce false;
137 User = "matrix-synapse";
138 Group = "matrix-synapse";
139 RuntimeDirectory = "matrix-synapse";
140 SupplementaryGroups = [ "keys" ];
144 "persist-zfast-var-lib-matrix\\x2dsliding\\x2dsync.mount"
145 "var-lib-matrix\\x2dsliding\\x2dsync.mount"
147 After = lib.mkForce [
148 "matrix-synapse.service"
150 "var-lib-matrix\\x2dsliding\\x2dsync.mount"
151 "persist-zfast-var-lib-matrix\\x2dsliding\\x2dsync.mount"
155 secrets.keys."matrix/signing.key" = {
156 permissions = "0400";
157 user = "matrix-synapse";
158 group = "matrix-synapse";
159 text = "{{ .matrix.signing_key }}";
161 secrets.keys."matrix/homeserver_secrets.yaml" = {
162 permissions = "0400";
163 user = "matrix-synapse";
164 group = "matrix-synapse";
165 # Beware, yaml keys are merged at top level, not deep
169 pepper: "{{ .matrix.password_pepper }}"
170 macaroon_secret_key: "{{ .matrix.macaroon_secret_key }}"
173 secrets.keys."matrix/sliding-sync" = {
174 permissions = "0400";
175 user = "matrix-synapse";
176 group = "matrix-synapse";
178 SYNCV3_SECRET={{ .matrix.sliding_sync_secret }}