{
  config,
  ...
}:
let
  host = "514fpv.io";
in
{
  services.matrix-synapse = {
    enable = true;
    withJemalloc = true;
    dataDir = "/nix/persist/service/matrix";
    extraConfigFiles = [ "/nix/persist/service/matrix/secrets.yml" ];

    settings = {
      server_name = host;
      public_baseurl = "https://${host}:8448/";

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

      # turn server configuration
      turn_uris = [
        "turn:${config.services.coturn.realm}:3478?transport=udp"
        "turn:${config.services.coturn.realm}:3478?transport=tcp"
      ];
      turn_user_lifetime = "1h";
    };
  };

  services.nginx.virtualHosts.${host} = {
    listen = [
      {
        addr = "0.0.0.0";
        port = 8448;
        ssl = true;
      }
    ];
    useACMEHost = host;
    addSSL = true;
    locations."/".extraConfig = ''
      return 404;
    '';
    locations."/health".proxyPass = "http://127.0.0.1:8008";
    locations."/_matrix".proxyPass = "http://127.0.0.1:8008";
    locations."/_synapse/client".proxyPass = "http://127.0.0.1:8008";
  };

  networking.firewall.allowedTCPPorts = [ 8448 ];

  global.fs.zfs.mountpoints."/nix/persist/service/matrix" = "service/matrix";
}