Nix:如何更改 nixpkgs.mkShell 中的 stdenv

Log*_*ins 5 nix

我想覆盖 stdenv 以mkShell使用 gcc10Stdenv。我查看了https://nixos.wiki/wiki/Using_Clang_instead_of_GCCmkShell ,它提供了覆盖 stdenv 的说明,但它没有描述在不引用任何特定包的情况下制作 shell 时如何执行此操作(仅适用于“在现有包上使用 Nix CLI”)。

我的问题是是否可以在没有现有包的情况下覆盖 mkShell 的 stdenv ?如果是这样,怎么办?

gal*_*ora 8

尝试:

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)

这只是一个常规函数,因此我们使用两个参数来调用它。