向 Nix 询问有关给定包的元数据

Asking Nix for metadata about the given package

我在 macOS 和(非 NixOS)上使用 Nix Linux。我想给 Nix 一个包名或属性名,并让它显示给我

  1. Nix 知道的那个包的最新版本号和
  2. 我的相应 .nix 文件的本地副本的路径(或者 URL 到 GitHub 上的 nixpkgs 存储库中的那个 .nix 文件)。

我基本上是在寻找与 Homebrew 的 brew info packagename 等效的 Nix。

我怎样才能让 Nix 给我这些信息?

也许有更好的方法,比如 nix-env,但我通常使用 nix repl 来达到这个目的。

$ nix repl '<nixpkgs>'
Welcome to Nix version 2.2.2. Type :? for help.

Loading '<nixpkgs>'...
Added 10069 variables.

nix-repl> docker-c[TAB]     
docker-compose         docker-credential-gcr
nix-repl> docker-compose.version
"1.23.1"

在 CLI 上使用 nix-env,我认为我们目前可以(相对)方便地做的最好的事情是 JSON 或 XML:

$ nix-env --query --available --attr nixpkgs.hello --meta --json

# Or in terse form:
$ nix-env -qaA nixpkgs.hello --json

输出和输入都不是特别人性化,典型的 Nix 可用性……

.nix 文件的路径被列为 position,在 REPL 中也是如此,在 Robert 的巧妙回答中它是 hello.meta.position。值得一提的是nix edit nixpkgs.hello,用于打开文件