【问题标题】:Where is `callPackage` defined in the Nixpkgs repo (or how to find Nix lambda definitions in general)?Nixpkgs 存储库中定义的“callPackage”在哪里(或者如何找到一般的 Nix lambda 定义)?
【发布时间】:2019-05-14 00:12:14
【问题描述】:

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

资源:


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

【问题讨论】:

  • 刚得知还有一个callPackages函数(来自Nixpkgs#36354问题),基本上都是无证的。

标签: nix nixpkgs


【解决方案1】:

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 的部分是我的&lt;nixpkgs&gt;,因此给你答案:lib/customisation.nix line 108

【讨论】:

  • 感谢您展示如何查找 lambda 定义的额外奖励!
  • 刚刚找到nix repl '&lt;nixpkgs&gt;' 快捷方式,用于在 repl 启动时导入所有 Nixpkgs 表达式。
  • 一行:nix repl '&lt;nixpkgs&gt;' &lt;&lt;&lt; pkgs.callPackage
【解决方案2】:

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

无论它是否 lambda,它都可以工作。例如。 nix edit nixpkgs\#nix.meta

【讨论】:

  • 从来没有听说过nix edit,只是用nix --help检查了所有子命令,谢谢!但是,它不适用于callPackage,即使nix edit nixpkgs.hello(或任何其他包)可以。 (我有 2.3.10 版本。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-14
  • 1970-01-01
相关资源
最近更新 更多