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

Zim*_*i48 7 nixos nix

我在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
Run Code Online (Sandbox Code Playgroud)

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

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

nix-shell -I nixpkgs=~/.nix-defexpr/channels/nixpkgs
Run Code Online (Sandbox Code Playgroud)

它看起来不是很漂亮.这样做的推荐方法是什么?

它是否添加如下内容:

export NIX_PATH="nixpkgs=~/.nix-defexpr/channels/nixpkgs:nixos-config=/etc/nixos/configuration.nix:/nix/var/nix/profiles/per-user/root/channels"
Run Code Online (Sandbox Code Playgroud)

对我.profile?它看起来也不是很漂亮.

dan*_*bst 7

欢迎有长期的混乱nix-envNIX_PATH.明确说明,它nix-env不使用NIX_PATH,这使得它(我认为)是唯一不尊重的Nix工具NIX_PATH.

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

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

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