{ 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}" = { user = "${config.variables.roundcubeUser}"; group = "${config.variables.roundcubeUser}"; settings = { "pm" = "dynamic"; "pm.max_children" = 75; "pm.min_spare_servers" = 5; "pm.max_spare_servers" = 20; "pm.max_requests" = 10; "catch_workers_output" = 1; "listen.owner" = "nginx"; "listen.group" = "nginx"; }; }; 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"; }; }