{ lib, config, pkgs, ... }: with lib; let cfg = config.services.postfixadmin; fpm = config.services.phpfpm.pools.postfixadmin; localDB = cfg.database.host == "localhost"; user = if localDB then cfg.database.username else "nginx"; in { options.services.postfixadmin = { enable = mkOption { type = types.bool; default = false; description = lib.mdDoc '' Whether to enable postfixadmin. Also enables nginx virtual host management. Further nginx configuration can be done by adapting `services.nginx.virtualHosts.`. See [](#opt-services.nginx.virtualHosts) for further information. ''; }; hostName = mkOption { type = types.str; example = "postfixadmin.example.com"; description = lib.mdDoc "Hostname to use for the nginx vhost"; }; adminEmail = mkOption { type = types.str; example = "postmaster@example.com"; description = lib.mdDoc '' Defines the Site Admin's email address. This will be used to send emails from to create mailboxes and from Send Email / Broadcast message pages. ''; }; setupPasswordFile = mkOption { type = types.path; description = lib.mdDoc '' Password file for the admin. Generate with `php -r "echo password_hash('some password here', PASSWORD_DEFAULT);"` ''; }; database = { username = mkOption { type = types.str; default = "postfixadmin"; description = lib.mdDoc '' Username for the postgresql connection. If `database.host` is set to `localhost`, a unix user and group of the same name will be created as well. ''; }; host = mkOption { type = types.str; default = "localhost"; description = lib.mdDoc '' Host of the postgresql server. If this is not set to `localhost`, you have to create the postgresql user and database yourself, with appropriate permissions. ''; }; passwordFile = mkOption { type = types.path; description = lib.mdDoc "Password file for the postgresql connection. Must be readable by user `nginx`."; }; dbname = mkOption { type = types.str; default = "postfixadmin"; description = lib.mdDoc "Name of the postgresql database"; }; }; extraConfig = mkOption { type = types.lines; default = ""; description = lib.mdDoc "Extra configuration for the postfixadmin instance, see postfixadmin's config.inc.php for available options."; }; }; config = mkIf cfg.enable { environment.etc."postfixadmin/config.local.php".text = ''