{ pkgs, config, ... }:
{
  imports = [
    ./coturn
    ./slidingsync
    ./nginx
  ];

  services.matrix-synapse = {
    enable = true;
    settings = {
      server_name = "${config.domains.jim1}";
      public_baseurl = "https://matrix.${config.domains.jim1}";
      suppress_key_server_warning = true;

      listeners = [
        {
          port = 8008;
          bind_addresses = [ "::" "0.0.0.0" ];
          resources = [ { compress = true;  names = [ "client" "federation" ]; } ];
          type = "http";
          tls = false;
          x_forwarded = true;
        }
      ];

      email = {
        notif_from = "Jimbo's Matrix <noreply@${config.domains.jim1}>";
        smtp_host = "mx.${config.domains.jim1}";
        smtp_user = "noreply@${config.domains.jim1}";
        smtp_pass = config.secrets.noreplyPassword;
        enable_tls = true;
        smtp_port = 587;
        require_transport_security = true;
      };

      # Disable registration without email
      registrations_require_3pid = [ "email" ];

      # Allow only this range of emails
      allowed_local_3pids = [
        {
          medium = "email";
          pattern = ''^[^@]+@jimbosfiles\.com$'';
        }
        {
          medium = "email";
          pattern = ''^[^@]+@nixfox\.ca$'';
        }
        {
          medium = "email";
          pattern = ''^[^@]+@freecorn1854\.win$'';
        }
        {
          medium = "email";
          pattern = ''^[^@]+@lunamoonlight\.xyz$'';
        }
      ];

      # Set the type of database
      database.name = "sqlite3";

      # Allow account registration
      enable_registration = true;

      # General settings
      url_preview_enabled = true;
      max_upload_size = "50M";
      report_stats = false;
      burst_count = 15;
    };
  };
}
