summary refs log tree commit diff
path: root/pkgs/top-level/node-packages.nix
diff options
context:
space:
mode:
authorJaka Hudoklin <jakahudoklin@gmail.com>2015-01-24 22:54:03 +0100
committerJaka Hudoklin <jakahudoklin@gmail.com>2015-01-24 23:28:41 +0100
commit628c84c831b6a66cb286e8a82012a31a44ff10b8 (patch)
treed4e4e5edab068e5bdb47916350731fc6e6929114 /pkgs/top-level/node-packages.nix
parenta00131bb321fe589a0d06756046b233e97bc0329 (diff)
downloadnixlib-628c84c831b6a66cb286e8a82012a31a44ff10b8.tar
nixlib-628c84c831b6a66cb286e8a82012a31a44ff10b8.tar.gz
nixlib-628c84c831b6a66cb286e8a82012a31a44ff10b8.tar.bz2
nixlib-628c84c831b6a66cb286e8a82012a31a44ff10b8.tar.lz
nixlib-628c84c831b6a66cb286e8a82012a31a44ff10b8.tar.xz
nixlib-628c84c831b6a66cb286e8a82012a31a44ff10b8.tar.zst
nixlib-628c84c831b6a66cb286e8a82012a31a44ff10b8.zip
nodePackages: refactor, add support for overrides
Diffstat (limited to 'pkgs/top-level/node-packages.nix')
-rw-r--r--pkgs/top-level/node-packages.nix67
1 files changed, 50 insertions, 17 deletions
diff --git a/pkgs/top-level/node-packages.nix b/pkgs/top-level/node-packages.nix
index 9127dfbbb435..e8f0a9997c98 100644
--- a/pkgs/top-level/node-packages.nix
+++ b/pkgs/top-level/node-packages.nix
@@ -1,23 +1,56 @@
-{ pkgs, stdenv, nodejs, fetchurl, fetchgit, neededNatives, self, generated ? ./node-packages-generated.nix }:
+{
+  stdenv, pkgs, nodejs
+
+  # Self-reference
+, self
+
+  # Needed natives for installation
+, neededNatives ? [pkgs.python] ++ stdenv.lib.optionals stdenv.isLinux [ pkgs.utillinux ]
+
+  # Attribute set of generated packages
+, generated ? pkgs.callPackage ./node-packages-generated.nix { inherit self; }
+
+  # Attribute set of overrides
+, overrides ? {}
+, ...
+} @ args:
+
+with stdenv.lib;
 
 rec {
-  nativeDeps = {
-    "node-expat" = [ pkgs.expat ];
-    "node-stringprep" = [ pkgs.icu pkgs.which ];
-    "rbytes" = [ pkgs.openssl ];
-    "phantomjs" = [ pkgs.phantomjs ];
-    "node-protobuf" = [ pkgs.protobuf ];
-  };
-
-  buildNodePackage = import ../development/web/nodejs/build-node-package.nix {
-    inherit stdenv nodejs neededNatives;
-    inherit (pkgs) runCommand;
-  };
+  overrides = {
+    phantomjs.buildInputs = [ pkgs.phantomjs ];
+    "node-expat".buildInputs = [ pkgs.expat ];
+    "node-stringprep".buildInputs = [ pkgs.icu pkgs.which ];
+    "node-protobuf".buildInputs = [ pkgs.protobuf ];
+    "rbytes".buildInputs = [ pkgs.openssl ];
+  } // args.overrides or {};
 
-  patchSource = fn: srcAttrs: fn srcAttrs;
+  # Apply overrides and back compatiblity transformations
+  buildNodePackage = {...} @ args:
+  let
+    pkg = makeOverridable (
+      pkgs.callPackage ../development/web/nodejs/build-node-package.nix {
+        inherit nodejs neededNatives;
+      }
+    ) (args // {
+      # Backwards compatibility
+      src = if isList args.src then head args.src else args.src;
+      pkgName = (builtins.parseDrvName args.name).name;
+    });
+
+    override = overrides.${args.name} or overrides.${pkg.pkgName} or {};
 
-  # Backwards compat
-  patchLatest = patchSource fetchurl;
+  in pkg.override override;
+
+  # Backwards compatibility
+  patchSource = fn: srcAttrs: fn srcAttrs;
+  patchLatest = patchSource pkgs.fetchurl;
 
   /* Put manual packages below here (ideally eventually managed by npm2nix */
-} // import generated { inherit self fetchurl fetchgit; inherit (pkgs) lib; }
+} // (
+  if isAttrs generated then generated
+
+  # Backwards compatiblity
+  else pkgs.callPackage generated { inherit self; }
+)