blob: 54d0e6807780d6b79116b5db476b793d27d3fcfc (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
### Source: https://github.com/NixOS/nixpkgs/commit/459771518d44f60b59a19381d07b12297908215d
### Article: https://fzakaria.com/2021/08/02/a-minimal-nix-shell.html
### Usage:
# let
#
# name = "nix-shell.minimal";
# pkgs = import <nixpkgs> { };
#
# mkShellMinimal = pkgs.callPackage (builtins.fetchurl {
# url = "https://raw.githubusercontent.com/tdro/dotfiles/0aac4414559235f8cd8c454acce30c0471e0f6b1/.config/nixpkgs/helpers/mkShellMinimal.nix";
# sha256 = "06vbyyhaam3nmzimzasz6la590ni9cbdql3jy29hhw9ln0xf09yy";
# }) { };
#
# in mkShellMinimal {
# buildInputs = [ pkgs.coreutils pkgs.hello pkgs.gnugrep pkgs.which ];
# ENV = "ENV";
# shellHook = ''
# hello
# printf "%s\n" "$ENV"
# which mkdir
# printf "\nPATH is $PATH\n\n"
# grep --version
# export PS1='\h (${name}) \W \$ '
# '';
# }
{ lib }:
{ packages ? [ ], inputsFrom ? [ ], buildInputs ? [ ], nativeBuildInputs ? [ ]
, propagatedBuildInputs ? [ ], propagatedNativeBuildInputs ? [ ], ... }@attrs:
let
mergeInputs = name:
(attrs.${name} or [ ]) ++ (lib.subtractLists inputsFrom
(lib.flatten (lib.catAttrs name inputsFrom)));
rest = builtins.removeAttrs attrs [
"packages"
"inputsFrom"
"buildInputs"
"nativeBuildInputs"
"propagatedBuildInputs"
"propagatedNativeBuildInputs"
"shellHook"
];
pkgs = import (builtins.fetchTarball {
url = "https://releases.nixos.org/nixos/21.05/nixos-21.05.1510.a165aeceda9/nixexprs.tar.xz";
sha256 = "124s05b0xk97arw0vvq8b4wcvsw6024dfdzwcx9qjxf3a2zszmam";
}) { };
stdenv = pkgs.stdenvNoCC.override {
cc = null;
preHook = "";
allowedRequisites = null;
initialPath = pkgs.coreutils;
extraNativeBuildInputs = [ ];
};
in stdenv.mkDerivation ({
name = "nix-shell";
phases = [ "nobuildPhase" ];
buildInputs = mergeInputs "buildInputs";
nativeBuildInputs = packages ++ (mergeInputs "nativeBuildInputs");
propagatedBuildInputs = mergeInputs "propagatedBuildInputs";
propagatedNativeBuildInputs = mergeInputs "propagatedNativeBuildInputs";
shellHook = ''
PATH=${stdenv.initialPath}/bin
for package in ${toString buildInputs}; do
export PATH=$package/bin:$PATH
done
'' + 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)
|