about summary refs log tree commit diff
path: root/pkgs/development/compilers/nim/build-nim-package.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/compilers/nim/build-nim-package.nix')
-rw-r--r--pkgs/development/compilers/nim/build-nim-package.nix21
1 files changed, 21 insertions, 0 deletions
diff --git a/pkgs/development/compilers/nim/build-nim-package.nix b/pkgs/development/compilers/nim/build-nim-package.nix
index 5085edf90a76..a22fb45b507b 100644
--- a/pkgs/development/compilers/nim/build-nim-package.nix
+++ b/pkgs/development/compilers/nim/build-nim-package.nix
@@ -7,6 +7,7 @@
 , nim_builder
 , defaultNimVersion ? 2
 , nimOverrides
+, buildNimPackage
 }:
 
 let
@@ -90,6 +91,7 @@ let
         , nativeBuildInputs ? [ ]
         , nimFlags ? [ ]
         , requiredNimVersion ? defaultNimVersion
+        , passthru ? { }
         , ...
         }:
         (if requiredNimVersion == 1 then {
@@ -102,6 +104,25 @@ let
           throw
             "requiredNimVersion ${toString requiredNimVersion} is not valid") // {
           nimFlags = lockFileNimFlags ++ nimFlags;
+          passthru = passthru // {
+            # allow overriding the result of buildNimPackageArgs before this composition is applied
+            # this allows overriding the lockFile for packages built using buildNimPackage
+            # this is adapted from mkDerivationExtensible in stdenv.mkDerivation
+            overrideNimAttrs = f0:
+              let
+                f = self: super:
+                  let x = f0 super;
+                  in
+                    if builtins.isFunction x
+                    then f0 self super
+                    else x;
+              in
+              buildNimPackage
+                (self:
+                  let super = (asFunc ((asFunc buildNimPackageArgs) self)) baseAttrs;
+                  in
+                    super // (if builtins.isFunction f0 || f0?__functor then f self super else f0));
+          };
         };
 
       attrs = postLock // finalOverride postLock;