{ config, lib, pkgs, ... }: with lib; let cfg = config.nixfiles.modules.matrix.element; in { options.nixfiles.modules.matrix.element = { enable = mkEnableOption "Element, a Matrix web interface"; domain = mkOption { description = "Domain name sans protocol scheme."; type = with types; nullOr str; default = "element.${config.networking.domain}"; }; homeserver = mkOption { description = "Default Matrix homeserver."; type = with types; str; default = my.domain.azahi; }; }; config = mkIf cfg.enable { assertions = [ { assertion = with config.nixfiles.modules.matrix; (synapse.enable || dendrite.enable) && !(!synapse.enable && !dendrite.enable); message = "Synapse or Dendrite must be enabled"; } ]; nixfiles.modules.nginx = with cfg; { enable = true; virtualHosts.${domain}.locations."/".root = pkgs.element-web.override { conf = { default_server_config."m.homeserver" = { base_url = "https://${homeserver}"; server_name = homeserver; }; disable_custom_urls = true; disable_guests = true; disable_login_language_selector = true; disable_3pid_login = true; brand = homeserver; branding.authFooterLinks = [ { text = "NixOS"; url = "https://nixos.org"; } ]; default_theme = "dark"; }; }; }; }; }