{ config, lib, pkgs, modulesPath, ... }: { imports = []; options.x = { zulip = { enable = true; admin_email = lib.mkOption { type = lib.types.str; default = "admin+zulip@${config.networking.domain}"; }; integration = { persistance.enable = lib.mkOption { type = lib.types.bool; description = "whether persistance is enabled"; default = lib.mkDefault false; }; mailserver.enable = lib.mkOption { type = lib.types.bool; description = "creates simple-nixos-mailserver login automatically for admin user"; }; }; }; }; config = let cfg = config.x.zulip; in lib.mkIf cfg.enable { services.zulip = { enable = true; host = "zulip.${config.networking.domain}"; camoKeyFile = builtins.toString config.age.secrets.zulip-camoKey.path; rabbitmqPasswordFile = builtins.toString config.age.secrets.zulip-rabbitmqPassword.path; secretKeyFile = builtins.toString config.age.secrets.zulip-secretKey.path; sharedSecretKeyFile = builtins.toString config.age.secrets.zulip-sharedSecretKey.path; avatarSaltKeyFile = builtins.toString config.age.secrets.zulip-avatarSaltKey.path; zulipSettings = { ZULIP_ADMINISTRATOR = cfg.admin_email; EXTERNAL_HOST = "chat.${config.networking.domain}"; }; }; services.mailserver.loginAccounts = lib.mkIf cfg.integration.mailserver.enable { "admin+zulip@${config.networking.domain}" = { hashedPasswordFile = builtins.toString config.age.secrets.secret3.path; }; }; }; }