No need to pollute your system environment

In the last post we discussed why it might not be wise to pollute your system (or global) environment by installing programs you’ll only run once.

Often, these programs are installed and then forgotten about causing unnecessary bloat.

A pristine system is easily maintained.

When to use nix-shell or nix run

We also showed in the last post how we could use nix-shell to temporarily bring programs into our path. This is still a viable option for running a once off command.

nix-shell -p python --command 'python --version'

An alternative is to use nix run.

nix run nixpkgs.python -c python --version

Or, if you’re using Nix Flakes.

nix run nixpkgs#python -- --version

If you want to bring multiple programs into your path in one go, I would use nix-shell and make it a two step process. Otherwise, nix run is more convenient.

I know what binary I want to run, but don’t know in which nixpkg it lives

There is a nice project by Shopify called Comma, which combines the usage of nix run and nix-index very nicely. There’s a quick demo on how to use this here.


The Nix ecosystem provides an easy mechanism for running once-off commands without polluting your system or global environment.

Till next time.