{ ... }:
{
  services.matrix-synapse = {
    enable = true;
    settings = {
      listeners = [{
        port = 8008;
        bind_addresses = [
          "::1"
          "127.0.0.1"
        ];
        type = "http";
        tls = false;
        x_forwarded = true;
        resources = [
          {
            compress = true;
            names = [ "client" ];
          }
          {
            compress = false;
            names = [ "federation" ];
          }
        ];
      }];
      server_name = "nekover.se";
      public_baseurl = "https://matrix.nekover.se";
      database = {
        name = "psycopg2";
        args.password = "synapse";
      };
      email = {
        smtp_host = "mail-1.grzb.de";
        smtp_port = 465;
        smtp_user = "matrix@nekover.se";
        force_tls = true;
        notif_from = "Nekoverse Matrix Server <nyareply@nekover.se>";
      };
      max_upload_size = "500M";
      signing_key_path = "/secrets/matrix-homeserver-signing-key.secret";
      admin_contact = "mailto:admin@nekover.se";
      web_client_location = "https://element.nekover.se";
      turn_uris = [
        "turns:turn.nekover.se?transport=udp"
        "turns:turn.nekover.se?transport=tcp"
      ];
      turn_user_lifetime = 86400000;
      turn_allow_guests = true;
    };
    extras = [ "oidc" ];
    extraConfigFiles = [
      "/secrets/matrix-registration-shared-secret.secret"
      "/secrets/matrix-turn-shared-secret.secret"
      "/secrets/matrix-email-smtp-pass.secret"
      "/secrets/matrix-keycloak-client-secret.secret"
    ];
  };
}