Pushing to Cachix

There are different ways to push store paths to Cachix.

These instructions assume your binary cache is called mycache.

Pushing runtime dependencies

$ nix-build | cachix push mycache

Pushing build and runtime dependencies

$ nix-store -qR --include-outputs $(nix-store -qd $(nix-build)) \
  | grep -v '\.drv$' \
  | cachix push mycache

Pushing shell environment

$ nix-build shell.nix -A inputDerivation \
  | cachix push mycache

Pushing whole /nix/store

$ nix path-info --all | cachix push mycache

Pushing all newly built store paths

$ cachix watch-store mycache

Push all store paths produced during a command

$ cachix watch-exec mycache -- nix-build --max-jobs 4

Flakes

Assuming you’re familiar with Flakes.

Pushing flake inputs

As flake inputs are downloaded from the internet, they can disappear. Copying them over to Cachix saves you from that day.

$ nix flake archive --json \
  | jq -r '.path,(.inputs|to_entries[].value.path)' \
  | cachix push mycache

Pushing runtime closure

To push runtime closure of the default package in a Flake:

$ nix build --no-link --print-out-paths \
  | cachix push mycache

To push runtime closure of any set of packages in a Flake:

$ nix build --no-link --print-out-paths .#package-a .#package-b \
  | cachix push mycache

Note: to build all packages, leave a thumbs up on [#7165](https://github.com/NixOS/nix/issues/7165) issue.

Pushing shell environment

$ nix develop --profile dev-profile -c true
$ cachix push mycache dev-profile