diff --git a/modules/services/matrix-synapse/default.nix b/modules/services/matrix-synapse/default.nix index 55f00ec..2bfa761 100644 --- a/modules/services/matrix-synapse/default.nix +++ b/modules/services/matrix-synapse/default.nix @@ -2,61 +2,54 @@ config, lib, pkgs, - inputs, ... }: let cfg = config.modules.services.matrix-synapse; - matrixClientConfig = { - "m.homeserver" = { - base_url = "https://matrix.vimium.com"; - server_name = "vimium.com"; - }; - "m.identity_server" = {}; - }; - matrixServerConfig."m.server" = "matrix.vimium.com:443"; - mkWellKnown = data: '' - more_set_headers 'Content-Type: application/json'; - return 200 '${builtins.toJSON data}'; - ''; in { options.modules.services.matrix-synapse = { enable = lib.mkOption { default = false; example = true; }; + serverName = lib.mkOption { + type = lib.types.str; + default = "vimium.com"; + example = "vimium.com"; + }; + enableElementWeb = lib.mkOption { + default = true; + example = false; + }; }; - config = lib.mkIf cfg.enable { + config = let + matrixClientConfig = { + "m.homeserver" = { + base_url = "https://matrix.${cfg.serverName}"; + server_name = cfg.serverName; + }; + "m.identity_server" = {}; + }; + matrixServerConfig."m.server" = "matrix.${cfg.serverName}:443"; + mkWellKnown = data: '' + more_set_headers 'Content-Type: application/json'; + return 200 '${builtins.toJSON data}'; + ''; + in lib.mkIf cfg.enable { networking.firewall.allowedTCPPorts = [ 8448 # Matrix federation ]; security.acme.certs = { - "matrix.vimium.com" = { + "matrix.${cfg.serverName}" = { reloadServices = [ "matrix-synapse" ]; }; }; services.nginx.virtualHosts = { - "chat.vimium.com" = { - forceSSL = true; - enableACME = true; - root = pkgs.unstable.element-web.override { - conf = { - default_server_config = matrixClientConfig; - brand = "Vimium Chat"; - branding = { - auth_header_logo_url = "https://vimium.com/images/logo.svg"; - auth_footer_links = [ - { "text" = "Vimium.com"; "url" = "https://vimium.com"; } - ]; - }; - }; - }; - }; - "matrix.vimium.com" = { + "matrix.${cfg.serverName}" = { forceSSL = true; enableACME = true; listen = [ @@ -106,11 +99,28 @@ in { "/_synapse/client".proxyPass = "http://localhost:8008"; }; }; - "vimium.com" = { + "${cfg.serverName}" = { locations."= /.well-known/matrix/server".extraConfig = (mkWellKnown matrixServerConfig); locations."= /.well-known/matrix/client".extraConfig = (mkWellKnown matrixClientConfig); }; - }; + } // (if cfg.enableElementWeb then { + "chat.${cfg.serverName}" = { + forceSSL = true; + enableACME = true; + root = pkgs.unstable.element-web.override { + conf = { + default_server_config = matrixClientConfig; + brand = "Vimium Chat"; + branding = { + auth_header_logo_url = "https://vimium.com/images/logo.svg"; + auth_footer_links = [ + { "text" = "Vimium.com"; "url" = "https://vimium.com"; } + ]; + }; + }; + }; + }; + } else {}); services.matrix-synapse = { enable = true; @@ -120,7 +130,7 @@ in { enable_registration = false; max_upload_size = "100M"; report_stats = false; - server_name = "vimium.com"; + server_name = cfg.serverName; }; }; };