2025-01-18 23:22:44 +00:00
|
|
|
{
|
|
|
|
lib,
|
|
|
|
inputs,
|
|
|
|
pkgs,
|
|
|
|
...
|
|
|
|
}: let
|
|
|
|
supportedPhps = [
|
|
|
|
"php72"
|
|
|
|
"php73"
|
|
|
|
"php74"
|
|
|
|
"php80"
|
|
|
|
"php81"
|
|
|
|
"php82"
|
|
|
|
"php83"
|
|
|
|
"php84"
|
|
|
|
];
|
|
|
|
|
2025-01-19 01:38:51 +00:00
|
|
|
selectedPhp = lib.last supportedPhps;
|
2025-01-18 23:59:05 +00:00
|
|
|
|
2025-01-18 23:22:44 +00:00
|
|
|
extraConfig = ''
|
|
|
|
memory_limit = -1
|
|
|
|
|
|
|
|
xdebug.mode = develop,coverage,gcstats,profile,debug,trace
|
|
|
|
xdebug.discover_client_host = 1
|
|
|
|
xdebug.client_host = localhost
|
|
|
|
'';
|
|
|
|
|
2025-04-08 21:27:00 +00:00
|
|
|
# Wrap all PHP versions with the extensions I need and bundle composer
|
2025-01-18 23:22:44 +00:00
|
|
|
phps = lib.genAttrs supportedPhps (
|
2025-01-19 01:38:51 +00:00
|
|
|
phpName: let
|
2025-01-22 19:38:41 +00:00
|
|
|
phpBase = inputs.phps.packages.${pkgs.system}.${phpName};
|
|
|
|
phpWithEnv = phpBase.buildEnv {
|
2025-01-18 23:22:44 +00:00
|
|
|
extensions = {
|
|
|
|
enabled,
|
|
|
|
all,
|
|
|
|
}:
|
2025-01-19 01:38:51 +00:00
|
|
|
enabled
|
|
|
|
++ [all.xdebug]
|
|
|
|
++ (
|
2025-01-22 19:38:41 +00:00
|
|
|
if (lib.versionAtLeast phpBase.version "8")
|
2025-01-19 01:38:51 +00:00
|
|
|
then [all.amqp]
|
|
|
|
else []
|
|
|
|
);
|
2025-01-18 23:22:44 +00:00
|
|
|
inherit extraConfig;
|
2025-01-19 01:48:27 +00:00
|
|
|
};
|
2025-01-22 19:38:41 +00:00
|
|
|
phpWithTools = pkgs.symlinkJoin {
|
|
|
|
inherit (phpWithEnv) name version meta passthru;
|
|
|
|
paths = [
|
|
|
|
phpWithEnv
|
|
|
|
phpWithEnv.packages.composer
|
|
|
|
];
|
2025-01-19 01:48:27 +00:00
|
|
|
};
|
|
|
|
in
|
2025-01-22 19:38:41 +00:00
|
|
|
phpWithTools
|
2025-01-18 23:22:44 +00:00
|
|
|
);
|
2025-01-18 23:59:05 +00:00
|
|
|
|
|
|
|
prefix = "/var/lib/phps";
|
2025-04-08 21:27:00 +00:00
|
|
|
|
|
|
|
# Tell Symfony's CLI where it can access the different PHP versions
|
|
|
|
symfony-cli = let
|
|
|
|
package = pkgs.symfony-cli;
|
|
|
|
in
|
|
|
|
pkgs.symlinkJoin {
|
|
|
|
inherit (package) pname version meta;
|
|
|
|
|
|
|
|
paths = [package];
|
|
|
|
|
|
|
|
buildInputs = [pkgs.makeWrapper];
|
|
|
|
|
|
|
|
postBuild = ''
|
|
|
|
wrapProgram $out/bin/${package.meta.mainProgram} \
|
|
|
|
--suffix PATH : ${pkgs.lib.makeBinPath (
|
|
|
|
builtins.attrValues phps
|
|
|
|
)}
|
|
|
|
'';
|
|
|
|
};
|
2025-01-18 23:22:44 +00:00
|
|
|
in {
|
|
|
|
nix.settings = {
|
|
|
|
substituters = ["https://fossar.cachix.org/"];
|
|
|
|
trusted-public-keys = ["fossar.cachix.org-1:Zv6FuqIboeHPWQS7ysLCJ7UT7xExb4OE8c4LyGb5AsE="];
|
|
|
|
};
|
|
|
|
|
2025-04-08 21:27:00 +00:00
|
|
|
# Link PHP installations so that PhpStorm knows about them
|
2025-01-18 23:59:05 +00:00
|
|
|
systemd.tmpfiles.settings =
|
2025-01-18 23:22:44 +00:00
|
|
|
builtins.mapAttrs (name: drv: {
|
2025-01-18 23:59:05 +00:00
|
|
|
"${prefix}/${name}"."L+".argument = drv.outPath;
|
2025-01-18 23:22:44 +00:00
|
|
|
})
|
|
|
|
phps;
|
2025-01-18 23:59:05 +00:00
|
|
|
|
|
|
|
environment.systemPackages = [
|
2025-04-08 21:27:00 +00:00
|
|
|
pkgs.jetbrains.phpstorm
|
|
|
|
phps.${selectedPhp}
|
|
|
|
symfony-cli
|
2025-01-18 23:59:05 +00:00
|
|
|
];
|
2025-01-18 23:22:44 +00:00
|
|
|
}
|