nix-search is a CLI client for search.nixos.org/packages.
Use nix-search to find packages by name, description, installed programs, version, or other metadata. Requires an active internet connection to work.
Major features and benefits:
- Find how to install the binary you need
- Searches work the same as the web interface by default
- Use flags to explicitly query attribute names, installed programs, and versions
- Each result is linked to the web interface (in supported terminals)
- Results are compact and nicely colorized by default (in supported terminals)
Docs: https://github.com/peterldowns/nix-search-cli
Usage:
nix-search some program or package [flags]
Examples:
# Search for nix packages in the https://search.nixos.org index
# ... like the web interface
nix-search python linter
nix-search --search "python linter"
# ... by package name
nix-search --name python
nix-search --name 'emacsPackages.*'
# ... by version
nix-search --version 1.20
nix-search --version '1.*'
# ... by installed programs
nix-search --program python
nix-search --program "py*"
# ... with ElasticSearch QueryString syntax
nix-search --query-string="package_programs:(crystal OR irb)"
nix-search --query-string='package_description:(MIT Scheme)'
# ... on a specific channel, default "unstable". The valid channel
# values are what the search.nixos.org index has, check
# that website to see what options they show in their interface.
nix-search --channel=unstable python3
# ... or flakes indexed by search.nixos.org, see their website
# for more information.
nix-search --flakes wayland
# ... or search with multiple filters and options
nix-search golang --program go --version '1.*' --details
Flags:
-c, --channel string which channel to search in (default "unstable")
-d, --details show expanded details for each result
-f, --flakes search flakes instead of nixpkgs
-h, --help help for nix-search
-j, --json emit results in json-line format
-m, --max-results int maximum number of results to return (default 20)
-n, --name string search by package name
-p, --program string search by installed programs
-q, --query-string string search by elasticsearch querystring
-r, --reverse print results in reverse order
-s, --search string default search, same as the website
-v, --version string search by versionFor example, here's how you would find all the right package to install gcloud, and then
install that package. The results show the version of each package as well as the full set of
installed binaries. In a supported terminal, we use nice colors:
$ nix-search -p gcloud
google-cloud-sdk-gce @ 408.0.1: gcloud bq docker-credential-gcloud git-credential-gcloud.sh gsutil
google-cloud-sdk @ 408.0.1: gcloud bq docker-credential-gcloud git-credential-gcloud.sh gsutil
$ nix profile install nixpkgs#google-cloud-sdkHere's how you would find out how to install python 3.12:
Golang:
# run it
go run github.com/peterldowns/nix-search-cli/cmd/nix-search@latest --help
# install it
go install github.com/peterldowns/nix-search-cli/cmd/nix-search@latestHomebrew:
brew install peterldowns/tap/nix-search-cliNix (flakes):
# run it
nix run github:peterldowns/nix-search-cli -- --help
# install it
nix profile install github:peterldowns/nix-search-cli --refreshDocker:
# run it
docker run --rm -it ghcr.io/peterldowns/nix-search-cli:latest --help
# pull it
docker pull ghcr.io/peterldowns/nix-search-cli:latestManual:
- Visit the latest Github release
- Download the appropriate binary:
nix-search-$os-$arch
Nix is useful as a way to install packages, but without this project there is no easy way to find the attribute name to use to install a given program.
The Nix Wiki page on "Searching Packages" recommends
using the search.nixos.org interface, but doing this requires using a browser.
As for nix-env --query, it supports searching over attribute names, but not
other fields or metadata (including the programs that the attribute installs).
For instance, you can use nix-env -qaP to search for
attribute names:
# nix-env -qaP google-cloud-sdk
nixpkgs.google-cloud-sdk google-cloud-sdk-408.0.1
nixpkgs.google-cloud-sdk-gce google-cloud-sdk-408.0.1but you cannot find an attribute name given a binary you'd like to install:
# nix-env -qaP gcloud
error: selector 'gcloud' matches no derivationsCommon tasks are run by just
# show all available commands
just
just --listThis repository is compatible with nix (standard), nix (flakes), direnv, and
lorri. You can explicitly enter a development shell with all necessary
dependencies with either nix develop (flakes) or nix shell (standard).
This repository ships configuration details for VSCode. After entering a
development shell, run code . from the root of the repository to open VSCode.
# get developer dependencies by entering a nix shell.
# if you have direnv / lorri installed, you just need to allow the config once.
nix develop # (flakes)
nix-shell # (standard)
direnv allow # direnvjust test
just lint# build with `go build`, result is in `./bin/nix-search`
just build
# build with `nix`, result is in `./result/bin/nix-search`
nix build # (flakes)
nix-build # (standard)# if built with `just build`:
./bin/nix-search --help
# if built with `nix build` or `nix-build`:
./result/bin/nix-search --help
# or, you can build + run directly through nix:
nix run . -- help # flakes
# or, you can open a new shell with the binary available on $PATH through nix:
nix shell # and then `nix-search`
nix shell -c nix-search --help # directly run `nix-search` from inside this shell# Re-generate the flake.lock file
nix flake lock
# Update all dependencies and update the flake.lock file
nix flake update