nixos/modules/services/phpfpm.nix

61 lines
2.0 KiB
Nix
Raw Normal View History

2023-09-02 16:30:21 +08:00
inputs:
{
options.nixos.services.phpfpm = let inherit (inputs.lib) mkOption types; in
{
instances = mkOption
{
type = types.attrsOf (types.submodule (submoduleInputs: { options =
{
user = mkOption { type = types.nullOr types.nonEmptyStr; default = null; };
group = mkOption { type = types.nullOr types.nonEmptyStr; default = null; };
2023-11-12 17:29:40 +08:00
package = mkOption { type = types.nullOr types.package; default = inputs.pkgs.php; };
fastcgi = mkOption
{
type = types.nonEmptyStr;
readOnly = true;
default = "unix:${inputs.config.services.phpfpm.pools.${submoduleInputs.config._module.args.name}.socket}";
};
2023-09-02 16:30:21 +08:00
};}));
default = {};
};
};
config =
let
inherit (builtins) map listToAttrs filter;
inherit (inputs.localLib) attrsToList;
inherit (inputs.config.nixos.services) phpfpm;
in
{
services.phpfpm.pools = listToAttrs (map
(pool:
{
inherit (pool) name;
value = rec
{
user = if pool.value.user == null then pool.name else pool.value.user;
group = if pool.value.group == null then inputs.config.users.users.${user}.group else pool.value.group;
2023-11-12 17:29:40 +08:00
phpPackage = pool.value.package;
2023-09-02 16:30:21 +08:00
settings =
{
"pm" = "ondemand";
"pm.max_children" = 4;
"pm.process_idle_timeout" = "60s";
"pm.max_requests" = 128;
2023-11-12 20:43:08 +08:00
"listen.owner" = inputs.config.services.nginx.user;
"listen.group" = inputs.config.services.nginx.group;
2023-09-02 16:30:21 +08:00
};
};
})
(attrsToList phpfpm.instances));
users =
{
users = listToAttrs (map
2023-11-12 20:43:08 +08:00
(pool: { inherit (pool) name; value = { isSystemUser = true; group = pool.name; extraGroups = [ "nginx" ]; }; })
2023-09-02 16:30:21 +08:00
(filter (pool: pool.value.user == null) (attrsToList phpfpm.instances)));
groups = listToAttrs (map
2023-11-12 17:29:40 +08:00
(pool: { inherit (pool) name; value = {}; })
2023-09-02 16:30:21 +08:00
(filter (pool: pool.value.user == null) (attrsToList phpfpm.instances)));
};
};
}