{ lib, config, pkgs, ... }: with lib; let cfg = config.services.roundcube; fpm = config.services.phpfpm.pools.roundcube; localDB = cfg.database.host == "localhost"; user = cfg.database.username; in { options.services.roundcube = { enable = mkOption { type = types.bool; default = false; description = '' Whether to enable roundcube. Also enables nginx virtual host management. Further nginx configuration can be done by adapting services.nginx.virtualHosts.<name>. See for further information. ''; }; hostName = mkOption { type = types.str; example = "webmail.example.com"; description = "Hostname to use for the nginx vhost"; }; package = mkOption { type = types.package; default = pkgs.roundcube; example = literalExample '' roundcube.withPlugins (plugins: [ plugins.persistent_login ]) ''; description = '' The package which contains roundcube's sources. Can be overriden to create an environment which contains roundcube and third-party plugins. ''; }; database = { username = mkOption { type = types.str; default = "roundcube"; description = '' 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 = '' 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. ''; }; password = mkOption { type = types.str; description = "Password for the postgresql connection. Do not use: the password will be stored world readable in the store; use passwordFile instead."; default = ""; }; passwordFile = mkOption { type = types.str; description = "Password file for the postgresql connection. Must be readable by user nginx. Ignored if database.host is set to localhost, as peer authentication will be used."; }; dbname = mkOption { type = types.str; default = "roundcube"; description = "Name of the postgresql database"; }; }; plugins = mkOption { type = types.listOf types.str; default = []; description = '' List of roundcube plugins to enable. Currently, only those directly shipped with Roundcube are supported. ''; }; extraConfig = mkOption { type = types.lines; default = ""; description = "Extra configuration for roundcube webmail instance"; }; }; config = mkIf cfg.enable { # backward compatibility: if password is set but not passwordFile, make one. services.roundcube.database.passwordFile = mkIf (!localDB && cfg.database.password != "") (mkDefault ("${pkgs.writeText "roundcube-password" cfg.database.password}")); warnings = lib.optional (!localDB && cfg.database.password != "") "services.roundcube.database.password is deprecated and insecure; use services.roundcube.database.passwordFile instead"; environment.etc."roundcube/config.inc.php".text = ''