Nix:nixpkgs和nixpkgs.pkgs之间的具体区别是什么?

时间:2015-10-20 10:03:33

标签: nix

在:

n = import <nixpkgs> {};

n包含一个属性n.pkgs,它似乎也包含所有可用的包。那么nn.pkgs之间的差异是什么?

它似乎与Nix配置的fixpoint语义和覆盖nixpkgs中的某些软件包的可用性有关,但我无法真正理解它并找到明确的区别。

2 个答案:

答案 0 :(得分:6)

import <nixpkgs> {}为您提供了Nixpkgs的原始实例,即未应用任何用户配置。

(import <nixpkgs> {}).pkgs为您提供了一个Nixpkgs版本,其中包含用户配置的设置和覆盖~/.nixpkgs/config.nix的覆盖。

答案 1 :(得分:1)

它们之间没有区别。如果将其放在您的~/.config/nixpkgs/config.nix中:

{
  packageOverrides = self: { newAttr = "testing testing"; };
}

...您将看到这两个命令具有相同的输出:

$ nix-instantiate --eval -E 'with import <nixpkgs> {}; newAttr' "testing testing" $ nix-instantiate --eval -E 'with import <nixpkgs> {}; pkgs.newAttr' "testing testing"

对于Nix 2.1.3和Nix 1.11.16都是如此。

在nixpkgs中使用pkgs别名的目的是使callPackage可以为需要它的nix函数填写pkgs参数。