/** Deployment options as to be presented in the front end. These are converted to JSON schema in order to generate front-end forms etc. For this to work, options must not have types `functionTo` or `package`, and must not access `config` for their default values. The options are written in a cumbersome way because the JSON schema converter can't evaluate a submodule option's default value, which thus all must be set to `null`. This can be fixed if we made the converter aware of [`$defs`], but that would likely amount to half a rewrite. [`$defs`]: https://json-schema.org/understanding-json-schema/structuring#defs */ { lib, ... }: let inherit (lib) types mkOption; in { options = { enable = lib.mkEnableOption "Fediversity configuration"; domain = mkOption { type = with types; enum [ "fediversity.net" ]; description = '' Apex domain under which the services will be deployed. ''; default = "fediversity.net"; }; pixelfed = mkOption { description = '' Configuration for the Pixelfed service ''; type = with types; nullOr (submodule { options = { enable = lib.mkEnableOption "Pixelfed"; }; }); default = null; }; peertube = mkOption { description = '' Configuration for the PeerTube service ''; type = with types; nullOr (submodule { options = { enable = lib.mkEnableOption "Peertube"; }; }); default = null; }; mastodon = mkOption { description = '' Configuration for the Mastodon service ''; type = with types; nullOr (submodule { options = { enable = lib.mkEnableOption "Mastodon"; }; }); default = null; }; initialUser = mkOption { description = '' Some services require an initial user to access them. This option sets the credentials for such an initial user. ''; type = with types; nullOr (submodule { options = { displayName = mkOption { type = types.str; description = "Display name of the user"; }; username = mkOption { type = types.str; description = "Username for login"; }; email = mkOption { type = types.str; description = "User's email address"; }; password = mkOption { type = types.str; description = "Password for login"; }; }; }); default = null; }; }; }