puter/hosts/headful/work/php.nix

96 lines
2 KiB
Nix
Raw Permalink Normal View History

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
}