summary refs log tree commit diff
path: root/pkgs/build-support/mkshell/default.nix
diff options
context:
space:
mode:
authorzimbatm <zimbatm@zimbatm.com>2017-12-20 23:42:07 +0000
committerGitHub <noreply@github.com>2017-12-20 23:42:07 +0000
commitadc5c9b83df203c9e425efe00f9a788ed3554c2d (patch)
tree04ce943811c6bfffa250069666d38cff2301d0cf /pkgs/build-support/mkshell/default.nix
parent02d361cea9d20fe4746092a9ced207b1d0dcd9e9 (diff)
downloadnixpkgs-adc5c9b83df203c9e425efe00f9a788ed3554c2d.tar
nixpkgs-adc5c9b83df203c9e425efe00f9a788ed3554c2d.tar.gz
nixpkgs-adc5c9b83df203c9e425efe00f9a788ed3554c2d.tar.bz2
nixpkgs-adc5c9b83df203c9e425efe00f9a788ed3554c2d.tar.lz
nixpkgs-adc5c9b83df203c9e425efe00f9a788ed3554c2d.tar.xz
nixpkgs-adc5c9b83df203c9e425efe00f9a788ed3554c2d.tar.zst
nixpkgs-adc5c9b83df203c9e425efe00f9a788ed3554c2d.zip
mkShell: add builder (#30975)
Diffstat (limited to 'pkgs/build-support/mkshell/default.nix')
-rw-r--r--pkgs/build-support/mkshell/default.nix46
1 files changed, 46 insertions, 0 deletions
diff --git a/pkgs/build-support/mkshell/default.nix b/pkgs/build-support/mkshell/default.nix
new file mode 100644
index 00000000000..a98b4affacb
--- /dev/null
+++ b/pkgs/build-support/mkshell/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv }:
+
+# A special kind of derivation that is only meant to be consumed by the
+# nix-shell.
+{
+  inputsFrom ? [], # a list of derivations whose inputs will be made available to the environment
+  buildInputs ? [],
+  nativeBuildInputs ? [],
+  propagatedBuildInputs ? [],
+  propagatedNativeBuildInputs ? [],
+  ...
+}@attrs:
+let
+  mergeInputs = name:
+    let
+      op = item: sum: sum ++ item."${name}" or [];
+      nul = [];
+      list = [attrs] ++ inputsFrom;
+    in
+      lib.foldr op nul list;
+
+  rest = builtins.removeAttrs attrs [
+    "inputsFrom"
+    "buildInputs"
+    "nativeBuildInputs"
+    "propagatedBuildInputs"
+    "propagatedNativeBuildInputs"
+  ];
+in
+
+stdenv.mkDerivation ({
+  name = "nix-shell";
+  phases = ["nobuildPhase"];
+
+  buildInputs = mergeInputs "buildInputs";
+  nativeBuildInputs = mergeInputs "nativeBuildInputs";
+  propagatedBuildInputs = mergeInputs "propagatedBuildInputs";
+  propagatedNativeBuildInputs = mergeInputs "propagatedNativeBuildInputs";
+
+  nobuildPhase = ''
+    echo
+    echo "This derivation is not meant to be built, aborting";
+    echo
+    exit 1
+  '';
+} // rest)