{ config, pkgs, lib, ... }: <<<<<<< HEAD { # ── PostgreSQL database for Matrix ────────────────────────── services.postgresql = { enable = true; ensureDatabases = [ "matrix-synapse" ]; ensureUsers = [ { name = "matrix-synapse"; ensureDBOwnership = true; } ]; }; # ── Auto-generate DB password and initialize ──────────────── systemd.services.matrix-synapse-db-init = { description = "Initialize Matrix Synapse PostgreSQL database with auto-generated password"; after = [ "postgresql.service" ]; requires = [ "postgresql.service" ]; before = [ "matrix-synapse.service" ]; wantedBy = [ "multi-user.target" ]; serviceConfig = { Type = "oneshot"; RemainAfterExit = true; }; path = [ config.services.postgresql.package pkgs.pwgen pkgs.coreutils ]; script = '' SECRET_DIR="/var/lib/secrets" SECRET_FILE="$SECRET_DIR/matrix_db_secret" mkdir -p "$SECRET_DIR" if [ ! -f "$SECRET_FILE" ]; then pwgen -s 64 1 > "$SECRET_FILE" chmod 600 "$SECRET_FILE" chown matrix-synapse:matrix-synapse "$SECRET_FILE" fi DB_PASS=$(cat "$SECRET_FILE") psql -U postgres -c "ALTER ROLE \"matrix-synapse\" WITH LOGIN PASSWORD '$DB_PASS';" if ! psql -U postgres -lqt | cut -d \| -f 1 | grep -qw "matrix-synapse"; then psql -U postgres -c "CREATE DATABASE \"matrix-synapse\" WITH OWNER \"matrix-synapse\" TEMPLATE template0 LC_COLLATE = 'C' LC_CTYPE = 'C';" fi ''; }; # ── Generate Synapse runtime config from /var/lib/domains ─── systemd.services.matrix-synapse-runtime-config = { description = "Generate Matrix Synapse runtime config from domain files"; before = [ "matrix-synapse.service" ]; after = [ "matrix-synapse-db-init.service" ]; requiredBy = [ "matrix-synapse.service" ]; wantedBy = [ "multi-user.target" ]; serviceConfig = { Type = "oneshot"; RemainAfterExit = true; }; path = [ pkgs.coreutils ]; script = '' MATRIX=$(cat /var/lib/domains/matrix) RUNTIME_DIR="/run/matrix-synapse" mkdir -p "$RUNTIME_DIR" cat > "$RUNTIME_DIR/runtime-config.yaml" <>>>>>> 5bee5ad99bb7890df011d88e9928b6944c3565f8 }