summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--doc/languages-frameworks/php.section.md18
-rw-r--r--pkgs/development/interpreters/php/generic.nix3
2 files changed, 20 insertions, 1 deletions
diff --git a/doc/languages-frameworks/php.section.md b/doc/languages-frameworks/php.section.md
index 763beeb59358..5977363323f1 100644
--- a/doc/languages-frameworks/php.section.md
+++ b/doc/languages-frameworks/php.section.md
@@ -135,3 +135,21 @@ Example of building `composer` with additional extensions:
enabled ++ (with all; [ imagick redis ]))
).packages.composer
```
+
+### Overriding PHP packages {#ssec-php-user-guide-overriding-packages}
+
+`php-packages.nix` form a scope, allowing us to override the packages defined within. For example, to apply a patch to a `mysqlnd` extension, you can simply pass an overlay-style function to `php`’s `packageOverrides` argument:
+
+```nix
+php.override {
+ packageOverrides = final: prev: {
+ extensions = prev.extensions // {
+ mysqlnd = prev.extensions.mysqlnd.overrideAttrs (attrs: {
+ patches = attrs.patches or [] ++ [
+ …
+ ];
+ });
+ };
+ };
+}
+```
diff --git a/pkgs/development/interpreters/php/generic.nix b/pkgs/development/interpreters/php/generic.nix
index a3559de94400..82134e14406f 100644
--- a/pkgs/development/interpreters/php/generic.nix
+++ b/pkgs/development/interpreters/php/generic.nix
@@ -13,6 +13,7 @@ let
, version
, sha256
, extraPatches ? []
+ , packageOverrides ? (final: prev: {})
# Sapi flags
, cgiSupport ? true
@@ -50,7 +51,7 @@ let
php-packages = (callPackage ../../../top-level/php-packages.nix {
phpPackage = phpWithExtensions;
- });
+ }).overrideScope' packageOverrides;
allExtensionFunctions = prevExtensionFunctions ++ [ extensions ];
enabledExtensions =