nix-build in tmpfs

August 22, 2025

I build a lot of nix packages locally. Until nix-2.30 release nix-build command triggered builds in /tmp directory by default. As it’s not a tmpfs by default I used to enable boot.tmp.useTmpfs = true; to force all of /tmp into tmpfs to get slightly faster builds.

In nix-2.30 nix switched its default build directory to /nix/var/nix/builds:

... `build-dir` no longer defaults to `$TMPDIR` ...

This made my builds slow again. It’s especially noticeable when a few huge tarballs start unpacking on disk in parallel. Here is my new workaround to get that directory to tmpfs as well:

# cat /etc/nixos/tmpfs.nix
{ lib, ... }:
{
  systemd.mounts = [{
    wantedBy = [ "nix-daemon.service" ];
    what = "tmpfs";
    where = "/nix/var/nix/builds";
    type = "tmpfs";
    mountConfig.Options = lib.concatStringsSep "," [
      "mode=0755"
      "strictatime"
      "rw"
      "nosuid"
      "nodev"
      "size=100G" # WARNING: you might want to change this value
    ];
  }];
}

It creates a systemd mount unit and makes it a pre-requisite of nix-daemon and mounts just before nix-daemon start.

Have fun!