Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

nix

nixpkgs

Found a lot of sources describing callPackage and some of its internals, but none that refers to it's location. It's like the best kept secret of Nix, and the manuals even seem to be actively avoiding the topic. I could find it given time, but it's a huge repo.

Resources:

  • How does Nix's “callPackage” call functions defined without an ellipsis? (Stackoverlow)
  • Nix Pills, Chapter 13. Callpackage Design Pattern Nix

The answer actually points to callPackageWith function in customisation.nix, but callPackage itself is defined elsewhere.

like image 229
toraritte Avatar asked May 14 '19 00:05

toraritte


1 Answers

nix repl can tell you the location where a lambda is defined.

$ 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»

where the part up to and including nixos is my <nixpkgs>, thus giving you the answer: lib/customisation.nix line 108.

like image 119
Robert Hensing Avatar answered Jan 04 '23 05:01

Robert Hensing