This is something that I struggle with. I know how to find top-level packages like git
or cowsay
. But what about utilities under nested paths? I always spend ages digging through the nixpkgs source code to try to find utilities to use in my nix expressions.
Today I want to use buildRustPackage
. It’s defined here, and is propagated here. But how do I access it given a pkgs
variable? I have no idea!
https://search.nixos.org/packages is no help
nix search nixpkgs
doesn’t find it
I think I need to search by attribute name, not by derivation name. But I don’t know how to do that.
After some more digging I think I figured it out.
I was trying to use
nix repl nixpkgs
to interactively query packages. But I forgot that that command loads the flake, not the package set. You have to prefix everything withlegacyPackages.x86_64-linux.
to access packages in this environment. I got better results runningnix repl
followed by:l angle-bracket nixpkgs angle-bracket
. (Btw the repl tells me how many variables have been loaded. Is there a way to list them? That would be helpful.) (Edit:nix repl nixpkgs#legacyPackages.x86_64-linux
also works)I eventually found https://github.com/NixOS/nixpkgs/blob/35d87899f7c8f6fad50447301465d51b5dd87753/doc/languages-frameworks/rust.section.md?plain=1#L18 which tells me that what I want is
pkgs.rustPlatform.buildRustPackage
I would still like a way to search for nested attributes.