10

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

4

2 回答 2

8

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

所以,实际的问题在于nix-env这里,而不是nix-shell. 我将在 Nix 错误跟踪器上发布一堆关于此的问题:

现在,我使用这个解决方法:

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

于 2016-11-11T04:48:57.143 回答
2

为了完成另一个答案,这是我刚刚发现的一个很好的参考资料,它解释了不使用它NIX_PATH的事实:http: //lethalman.blogspot.fr/2014/09/nix-pill-15-nix-search-路径.htmlnix-env

于 2017-01-03T13:49:53.910 回答