2016-11-10 65 views
5

我在NixOS 16.09上,我想使用当前仅在nixpkgs-unstable/nixos-unstable中的程序包。使用nix-shell从nixpkgs-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不稳定通道。

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

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

回答

6

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

所以,实际的问题是nix-env在这里,而不是nix-shell。眼下

,我用这个解决办法:我会把有关这对尼克斯bug跟踪一堆的问题

所以现在你可以看到,这不是一种解决方法。总是指定您想要使用的确切Nixpkgs是一个好习惯:根通道版本,通道版本,上游远程通道版本,本地git检出或固定git版本。