diff options
Diffstat (limited to 'nixpkgs/pkgs/build-support/mkshell')
-rw-r--r-- | nixpkgs/pkgs/build-support/mkshell/default.nix | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/build-support/mkshell/default.nix b/nixpkgs/pkgs/build-support/mkshell/default.nix new file mode 100644 index 000000000000..a70dc0390cb5 --- /dev/null +++ b/nixpkgs/pkgs/build-support/mkshell/default.nix @@ -0,0 +1,45 @@ +{ 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: lib.concatLists (lib.catAttrs name + ([attrs] ++ inputsFrom)); + + rest = builtins.removeAttrs attrs [ + "inputsFrom" + "buildInputs" + "nativeBuildInputs" + "propagatedBuildInputs" + "propagatedNativeBuildInputs" + "shellHook" + ]; +in + +stdenv.mkDerivation ({ + name = "nix-shell"; + phases = ["nobuildPhase"]; + + buildInputs = mergeInputs "buildInputs"; + nativeBuildInputs = mergeInputs "nativeBuildInputs"; + propagatedBuildInputs = mergeInputs "propagatedBuildInputs"; + propagatedNativeBuildInputs = mergeInputs "propagatedNativeBuildInputs"; + + shellHook = lib.concatStringsSep "\n" (lib.catAttrs "shellHook" + (lib.reverseList inputsFrom ++ [attrs])); + + nobuildPhase = '' + echo + echo "This derivation is not meant to be built, aborting"; + echo + exit 1 + ''; +} // rest) |