{ config, lib, pkgs, ... }: let poolName = "roundcube_pool"; roundcube = (pkgs.callPackage ./pkg-roundcube.nix { conf = pkgs.writeText "roundcube-config.inc.php" '' /dev/null | ${pkgs.coreutils}/bin/base64 > "${config.variables.roundcubeDataDir}/des_key" chown -c "${config.variables.roundcubeUser}":${config.variables.roundcubeGroup} "${config.variables.roundcubeDataDir}/des_key" chmod -c 400 "${config.variables.roundcubeDataDir}/des_key" if [ -s "${config.variables.roundcubeDataDir}/roundcube.sqlite" ]; then # Just go ahead and remove the sessions, the key to decrypt them has just been destroyed anyway. ${pkgs.sqlite}/bin/sqlite3 "${config.variables.roundcubeDataDir}/roundcube.sqlite" "DELETE FROM session;" fi ''; }; services.phpfpm.pools."${poolName}" = { listen = config.variables.roundcubePhpfpmHostPort; user = "${config.variables.roundcubeUser}"; group = "${config.variables.roundcubeUser}"; extraConfig = '' pm = dynamic pm.max_children = 75 pm.min_spare_servers = 5 pm.max_spare_servers = 20 pm.max_requests = 10 catch_workers_output = 1 ''; }; users.extraUsers."${config.variables.roundcubeUser}" = { }; users.extraGroups."${config.variables.roundcubeUser}" = { }; users.groups."${config.variables.roundcubeGroup}" = { }; users.users."${config.variables.roundcubeUser}" = { isSystemUser = true; group = "${config.variables.roundcubeGroup}"; description = "PHP User for roundcube"; }; }