Celebrate the Fourth of July with the release of Determinate Nix version 3.7.0! We’ve shipped several Nix performance and UX improvements and we’re also excited to roll out lazy trees to more users.
Prefetch flake inputs in parallel
This release introduces the nix flake prefetch-inputs
command to Determinate Nix.
The new nix flake prefetch-inputs
command does precisely that, fetching all flake inputs in parallel so that they’re already available when you need to evaluate any expression.
We expect that running this new command before building things with Nix should dramatically improve evaluation performance for most projects, especially in CI.
Note that projects with many unused flake inputs may not benefit from this change since the new command fetches every inputs whether they’re used or not.
We plan to run some experiments in GitHub Actions to see if and how much this helps.
Relevant pull request
Deep flake input overrides now work as expected
An override like this…
{ inputs.foo.inputs.bar.inputs.nixpkgs.follows = "nixpkgs";}
…used to implicitly set inputs.foo.inputs.bar
to flake:bar
, which led to an unexpected error like this:
error: cannot find flake 'flake:bar' in the flake registries
With this release, Nix no longer creates a parent override (like for foo.bar
in the example above) if it doesn’t set an explicit ref
or follows
attribute; instead, Nix only recursively applies its child overrides.
This closes four upstream Nix issues. Check out DeterminateSystems/nix-src#95 for more details and a snazzy diagram!
Relevant pull request
nix store delete
now shows you why deletion was not possible
Here’s some example error output:
error: Cannot delete path '/nix/store/6fcrjgfjip2ww3sx51rrmmghfsf60jvi-patchelf-0.14.3' because it's referenced by the GC root '/home/eelco/Dev/nix-master/build/result'.error: Cannot delete path '/nix/store/rn0qyn3kmky26xgpr2n10vr787g57lff-cowsay-3.8.4' because it's referenced by the GC root '/proc/3600568/environ'.error: Cannot delete path '/nix/store/klyng5rpdkwi5kbxkncy4gjwb490dlhb-foo.drv' because it's in use by '{nix-process:3605324}'.
Relevant pull request
Lazy-tree improvements
Improved lazy tree evaluation caching for flakes accessed with a path
flakeref.
Relevant pull request
Lazy trees on its way to general availability
Since the last release, we’ve finished preparation for rolling out lazy tree to more users. We’re going to start enabling lazy trees for about 5% of Determinate Nix users on version 3.7.0 outside of CI.
You can see if you’re enrolled in the lazy trees rollout using the determinate-nixd version
command:
determinate-nixd version
If Determinate Nix is up to date, you should see this:
Determinate Nixd daemon version: 3.7.0Determinate Nixd client version: 3.7.0
You are running the latest version of Determinate Nix.
The feature lazy-trees is enabled.
If you’d like to opt out, please contact support@determinate.systems.
We’re excited for more folks to experience the, frankly, huge performance benefits of lazy trees in their workflows.
How to get Determinate Nix
If you already have Determinate Nix installed, you can upgrade to 3.7.0 with one Determinate Nixd command:
sudo determinate-nixd upgrade
If you don’t yet have Determinate Nix installed, you can install it on macOS using our graphical installer:

Install Determinate Nix on macOS now
Apple Silicon and Intel
On Linux:
curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | \ sh -s -- install --determinate
On NixOS, we recommend using our dedicated NixOS module or our NixOS ISO (NixOS installer for x86_64, NixOS installer for ARM) with Determinate Nix pre-installed.
On GitHub Actions:
on: pull_request: workflow_dispatch: push: branches: - main
jobs: nix-ci: runs-on: ubuntu-latest # Include this block to log in to FlakeHub and access private flakes permissions: id-token: write contents: read steps: - uses: actions/checkout@v4 - uses: DeterminateSystems/determinate-nix-action@v3 - uses: DeterminateSystems/flakehub-cache-action@main - uses: DeterminateSystems/nix-flake-checker-action@main - run: nix flake check
In Amazon Web Services:
data "aws_ami" "detsys_nixos" { most_recent = true owners = ["535002876703"]
filter { name = "name" values = ["determinate/nixos/epoch-1/*"] }
filter { name = "architecture" values = ["x86_64"] }}