nix icon indicating copy to clipboard operation
nix copied to clipboard

`derivationOf` primop

Open roberth opened this issue 1 year ago • 5 comments

Is your feature request related to a problem? Please describe.

It behaves roughly as an inverse of outputOf and is equivalent to the planned ^.. syntax on the CLI.

This function improves RFC 92 and multi-derivation package support, by allowing the derivation path to be accessed for any output, whose derivations may be distinct, rather than only exposing a single drvPath.

pkg.drvPath is rarely needed. When we have a function for it, this attribute can be removed from the packages.

https://github.com/NixOS/nixpkgs/pull/281536 adds such a function in Nixpkgs. Its implementation can serve as a polyfill for this builtin.

Describe the solution you'd like

A primop that takes the Nix language representation of a DerivingPath, a string with context, and returns the deriver field if it is present. Otherwise it should throw or return null.

Describe alternatives you've considered

Require the Nixpkgs library for this functionality.

Additional context

  • #10121

Priorities

Add :+1: to issues you find important.

roberth avatar Mar 01 '24 12:03 roberth

This issue has been mentioned on NixOS Discourse. There might be relevant details there:

https://discourse.nixos.org/t/pre-rfc-implement-dependency-retrieval-primitive/43418/9

nixos-discourse avatar May 13 '24 16:05 nixos-discourse

Discussed in Nix team meeting:

  • @edolstra: if there's a polyfill, why don't we use that?
    • @roberth: implementing it in C++ would be very simple, run much faster, and would provide much better error messages
    • @edolstra: looks fine otherwise
  • @fricklerhandwerk has reservations whether growing the API surface is a good use of limited time, but not going to block
  • idea approved

fricklerhandwerk avatar Jun 24 '24 12:06 fricklerhandwerk

Team discussion:

  • Idea approved, seems useful and mirrors outputOf.
  • Probably doesn't need to be experimental since it's straight-forward and doesn't really fall under RFC 92.

edolstra avatar Jun 24 '24 12:06 edolstra

Note that it needs to be pure: only return the deriver field that's readily available, and don't query the store in the way nix-store -q --deriver does.

roberth avatar Jun 24 '24 17:06 roberth

This issue has been mentioned on NixOS Discourse. There might be relevant details there:

https://discourse.nixos.org/t/2024-06-24-nix-team-meeting-minutes-155/47739/1

nixos-discourse avatar Jun 26 '24 22:06 nixos-discourse