我想覆盖 stdenv 以mkShell使用 gcc10Stdenv。我查看了https://nixos.wiki/wiki/Using_Clang_instead_of_GCCmkShell ,它提供了覆盖 stdenv 的说明,但它没有描述在不引用任何特定包的情况下制作 shell 时如何执行此操作(仅适用于“在现有包上使用 Nix CLI”)。
我的问题是是否可以在没有现有包的情况下覆盖 mkShell 的 stdenv ?如果是这样,怎么办?
尝试:
pkgs.mkShell.override {stdenv = pkgs.gcc10Stdenv} {
inputsFrom = ...;
...
}
Run Code Online (Sandbox Code Playgroud)
这是在 nixpkgs 中更改包(只是函数)输入的标准方法。在这种情况下应该有效。
或者,您可以按照 Chris 的建议,将mkShell 实现复制并导入./mkShell.nix。
let mkShell = import ./mkShell.nix;
in mkShell {
lib = pkgs.lib;
stdenv = pkgs.gcc10Stdenv;
} {
inputsFrom = ...;
}
Run Code Online (Sandbox Code Playgroud)
这只是一个常规函数,因此我们使用两个参数来调用它。