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

时间:2016-11-10 16:42:01

标签: nix nixos

我在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?它看起来也不是很漂亮。

2 个答案:

答案 0 :(得分:7)

欢迎与nix-envNIX_PATH长期混淆。明确指出,nix-env没有使用NIX_PATH,这使得它(我认为)是唯一不尊重NIX_PATH的Nix工具。

所以,实际问题在于nix-env,而不是nix-shell。我将在Nix bug跟踪器上发布一系列问题:

  

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

现在您可以看到,这不是一种解决方法。最好总是指定您想要使用的Nixpkgs:您的根频道版本,频道版本,上游远程频道版本,本地git checkout或固定git版本。

答案 1 :(得分:1)

要完成另一个答案,以下是我刚才发现的一个很好的参考资料,解释NIX_PATH以及nix-env不使用它的事实:http://lethalman.blogspot.fr/2014/09/nix-pill-15-nix-search-paths.html