I forgot to publish the release notes for 3.8.5. Oops đŹ. So now you get a two-for-one deal instead!
Weâve recently shipped a ton of performance improvements, some small, some pretty significant. This release also improved the native Linux builders in some scenarios, especially around network access.
As a reminder: the native Linux builders in Determinate Nix enable macOS users to build for both ARM and x86 Linux with zero configuration.
The native Linux builders are currently in developer preview mode and will slowly be rolled out to Determinate Nix users over the coming weeks.
But if youâre eager to try it out now, reach out to us at support@determinate.systems and include your
As always, donât hesitate to reach out to us with questions or feedback on Discord or via email at hello@determinate-systems.
And now for the updates. Letâs start with a user-facing change folks have been really clamoring for.
Determinate now has a nix-darwin module!
You can finally configure Determinate Nix with nix-darwin. Add the nix-darwin module and customize Determinate Nix to taste:
{ inputs.determinate.url = "https://flakehub.com/f/DeterminateSystems/determinate/3.8.6"; inputs.nix-darwin.url = "https://flakehub.com/f/nix-darwin/nix-darwin/0";
outputs.darwinConfigurations.mac = inputs.nix-darwin.lib.darwinSystem { inherit system; modules = [ inputs.determinate.darwinModules.default { determinate-nix.customSettings = { flake-registry = "/etc/nix/flake-registry.json"; }; } ]; };}
Notice the customSettings
parameter, which enables you to pass in whatever custom Nix configuration you like.
That configuration is then written to /etc/nix/nix.custom.conf
for you.
Relevant pull request
Interactive UX
Nixâs evaluation caching no longer blocks other evaluators
Nixâs evaluation cache used to block other Nix processes from evaluating. This was most often noticed with tools like direnv. Determinate Nix doesnât do that, instead enabling you to evaluate many projects in parallel.
Relevant pull request
More responsive tab completion
Tab completion now implies the --offline
flag, which disables most network requests.
Previously, tab-completing Nix arguments would attempt to fetch sources and access binary caches.
Operating in offline mode improves the interactive experience of Determinate Nix when tab completing.
Relevant pull request
ZFS users: we fixed the mysterious stall
Opening the Nix database is usually instantaneous but would occasionally impose several seconds of mysterious latency.
This was due to a quirk in ZFS that was quite recently fixed in that project.
Determinate Nix works around the issue as well, eliminating the frustrating random stall when running nix
commands.
Relevant pull request
Faster evaluation with more efficient I/O
âUnpacking into the Git cacheâ is much faster
Unpacking sources into the userâs cache with Determinate Nix now takes 1/2 to 1/4 of the time it used to. Previously, Nix serially unpacked sources into the cache. This change takes better advantage of our usersâ hardware by parallelizing the import.
Real-life testing shows that an initial Nixpkgs import takes 3.6 seconds on Linux when it used to take 11.7 seconds, which is 8.1 seconds less.
Relevant pull request
Parallelized copying of sources to the daemon
Determinate Nixâs evaluator no longer blocks evaluation when copying paths to the store. Previously, Nix would pause evaluation when it needed to add files to the store. Now, the copying is performed in the background allowing evaluation to proceed.
Relevant pull request
Faster Nix evaluation
Eliminated thousands of duplicate Nix daemon queries
Determinate Nix more effectively caches store path validity data within a single evaluation. Previously, the Nix client would perform many thousands of extra Nix daemon requests. Each extra request takes real time, and this change reduced a sample evaluation by over 12,000 requests.
Relevant pull request
Parallelized memory garbage collection
We changed the âmarkingâ process of the evaluatorâs garbage collector to use multiple threads. Determinate Nix more quickly collects garbage across the large heap that Nixpkgs and NixOS tends to create.
This change has cut over five seconds from nix search
on nixpkgs, from 24.3 seconds to 18.9 seconds.
Relevant pull request
Fewer daemon queries, fewer daemon reconnects
We fixed a bug with lazy trees that caused the Nix client to frequently reconnect to the daemon. This issue caused a fairly significant regression in the performance of lazy trees in some cases. As part of this change, we also reduced the number of queries the client needs to make in the first place.
Relevant pull requests
Other changes
- We fixed an issue where the Nix evaluation cache was a bit too eager and failed with
don't know how to recreate store derivation
. - Determinate Nix is now fully formatted by clang-format, making it easier than ever to contribute to the project.
- Determinate Nix now uses
main
as our development branch, moving away fromdetsys-main
. - Determinate Nix is now based on upstream Nix 2.30.2.
How to get Determinate Nix
If you already have Determinate Nix installed, you can upgrade to 3.8.6 with one Determinate Nixd command:
sudo determinate-nixd upgrade
If you donât yet have Determinate Nix installed, you can upgrade or migrate to Determinate Nix 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"] }}