6

在:

n = import <nixpkgs> {};

n包含一个属性n.pkgs,它似乎也包含所有可用的包。n那么和之间有什么区别n.pkgs

似乎它与 Nix 配置的定点语义以及从 nixpkgs 覆盖某些包的可用性有关,但我无法真正理解它并找到明显的区别。

4

2 回答 2

8

import <nixpkgs> {}给你一个原始的 Nixpkgs 实例,即没有应用任何用户配置。

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

于 2015-11-19T11:35:48.293 回答
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 都是如此。

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

于 2018-12-15T03:57:48.373 回答