I know that I can search for Haskell packages with nix-env by using
nix-env -f '<nixpkgs>' -qaP -A haskellPackages name_of_package
but that is slow and uncached. If I try to use the new command nix search
all the Haskell packages are hidden.
$ nix search aeson
error: no results for the given search term(s)!
Is it possible to search for Haskell packages using the new nix search
command? If so, how?
Edit: I found some discussion about this in this irc log, but I couldn't quite grasp what the suggestions would mean in practice. Specifically this part:
20:49 <duairc> How do I make nix search include haskellPackages?
20:52 <ottidmes> duairc: you might try and call recurseIntoAttrs on haskellPackages
20:52 <rain1> thanks
20:52 <LnL> rain1: nix-env -f '<nixpkgs>' -qaP -A haskellPackages
20:54 <gchristensen> duairc: ^
20:54 <duairc> LnL: Thanks!
20:55 <LnL> err, wrong person
20:56 <LnL> you can also add an overlay that recurses, but that might make it
hard to find non haskell stuff if you're searching for something else
20:56 <ottidmes> I can confirm that
haskellPackages = super.recurseIntoAttrs super.haskellPackages; works though
20:58 <duairc> ottidmes: What do I do with that expression? Put it in
configuration.nix somewhere? If I type "nix search ghcid" then
will it find it?
20:59 <duairc> Ah, you're using super, so I guess it's an overlay
20:59 <clever> duairc: for `nix search` to find it, the overlay must be
somewhere in $HOME, i forget the exact path
20:59 <clever> duairc: configuration.nix only effects nixos-rebuild and
nothing else
21:00 <ottidmes> duairc: yeah, it should be put in your overlay that is
also used by nix-env the like, so not nixpkgs.overlays in your
configuration.nix as mentioned by clever, and then searching
for e.g. nix search nix-diff will result in:
* nixpkgs.haskellPackages.nix-diff (nix-diff)
As per the IRC chat, create a
~/.config/nixpkgs/overlays.nix
file containing this:This is an overlay that sets the
recurseForDerivations
attribute of the haskellPackages set to true.recurseForDerivations
tells nix tools to traverse the set, which searches it in the case ofnix search
. It is currently undocumented, but implemented here.The Nix wiki describes where to put the overlay and the Nixpkgs manual describes what overlays actually are and how to use them.