Nixpkgs 存储库中的“callPackage”在哪里定义(或者一般如何找到 Nix lambda 定义)?

Where is `callPackage` defined in the Nixpkgs repo (or how to find Nix lambda definitions in general)?

找到很多描述 callPackage 及其内部结构的来源,但 none 指的是它的位置。这就像 Nix 的最保守秘密,手册甚至似乎在积极回避这个话题。我可以给定时间找到它,但它是一个巨大的回购协议。

资源:


答案其实指向了customisation.nix中的callPackageWith函数,但是callPackage itself is defined elsewhere.

nix repl 可以告诉您定义 lambda 的位置。

$ nix repl
Welcome to Nix version 2.2.2. Type :? for help.

nix-repl> pkgs = import <nixpkgs> {}

nix-repl> pkgs.callPackage
«lambda @ /nix/store/9hffpjaa2a7djl19ncky7zcvlhyj76dn-nixos-19.03.172396.d740b2ee855/nixos/lib/customisation.nix:108:31»

直到 nixos 的部分是我的 <nixpkgs>,因此给你答案:lib/customisation.nix line 108

在薄片之前我使用 nix edit nixpkgs.callPackage 和薄片 nix edit nixpkgs\#callPackage

无论是否为 lambda,它都能正常工作。例如。 nix edit nixpkgs\#nix.meta