Skip to content

NPV 162

Philip Taron edited this page Feb 16, 2026 · 1 revision

NPV-162: New top-level package should be in pkgs/by-name

Description

New top-level packages defined with callPackage and an empty second argument ({ }) in all-packages.nix should instead be placed in pkgs/by-name. Since no custom arguments are needed, the auto-calling mechanism can handle it entirely.

Error message

Attribute `pkgs.{package_name}` is a new top-level package using `pkgs.callPackage {call_package_arg} { /* ... */ }`.
  Please define it in {relative_package_file} instead.
  See `pkgs/by-name/README.md` for more details.
  Since the second `callPackage` argument is `{ }`, no manual `callPackage` in {file} is needed anymore.

Example

In pkgs/top-level/all-packages.nix:

self: super: {
  new1 = self.callPackage ({ someDrv }: someDrv) { };
}

The error is:

Attribute `pkgs.new1` is a new top-level package using `pkgs.callPackage ... { /* ... */ }`.
  Please define it in pkgs/by-name/ne/new1/package.nix instead.
  See `pkgs/by-name/README.md` for more details.
  Since the second `callPackage` argument is `{ }`, no manual `callPackage` in pkgs/top-level/all-packages.nix is needed anymore.

How to fix

  1. Create the package directory: pkgs/by-name/ne/new1/
  2. Move the package expression into pkgs/by-name/ne/new1/package.nix
  3. Remove the manual callPackage definition from all-packages.nix

Clone this wiki locally