使用 nix-shell 从 nixpkgs-unstable 加载依赖项

Loading dependencies from nixpkgs-unstable with nix-shell

我在 NixOS 16.09 上,我想使用目前仅在 nixpkgs-unstable / nixos-unstable 中的软件包。

使用 nix-channel --add,我能够将 nixpkgs-unstable 添加到我的(用户)频道并使用它来安装一些带有 nix-env.

的软件包的最新版本

但是,我知道 nix-env 取决于用户定义的频道,而 nix-shell 取决于 NIX_PATH 环境变量,在我的例子中:

$ echo $NIX_PATH 
nixpkgs=/nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs:nixos-config=/etc/nixos/configuration.nix:/nix/var/nix/profiles/per-user/root/channels

所以这清楚地表明了问题:nix-shell 将使用系统范围的 NixOS 16.09 通道而不是用户定义的 nixpkgs-unstable 通道。

现在,我正在使用此解决方法:

nix-shell -I nixpkgs=~/.nix-defexpr/channels/nixpkgs

我觉得不是很漂亮。推荐的方法是什么?

是否要添加类似的内容:

export NIX_PATH="nixpkgs=~/.nix-defexpr/channels/nixpkgs:nixos-config=/etc/nixos/configuration.nix:/nix/var/nix/profiles/per-user/root/channels"

到我的.profile?也不太好看

欢迎与 nix-envNIX_PATH 长期混淆。明确指出,nix-env 不使用 NIX_PATH,这使它(我认为)成为唯一不尊重 NIX_PATH.

的 Nix 工具

因此,实际问题出在 nix-env,而不是 nix-shell。我将 post 关于 Nix 错误跟踪器的一系列问题:

Right now, I using this workaround:

现在您可以看到,这不是解决方法。始终指定您想使用的确切 Nixpkgs 是一个好习惯:您的根频道版本、您的频道版本、上游远程频道版本、本地 git 签出或固定 git 版本。

为了完成另一个答案,这是我刚刚找到的一个很好的参考,它解释了 NIX_PATH 以及 nix-env 不使用它的事实:http://lethalman.blogspot.fr/2014/09/nix-pill-15-nix-search-paths.html