1 # pkgs.checkpointBuildTools {#sec-checkpoint-build}
3 `pkgs.checkpointBuildTools` provides a way to build derivations incrementally. It consists of two functions to make checkpoint builds using Nix possible.
5 For hermeticity, Nix derivations do not allow any state to be carried over between builds, making a transparent incremental build within a derivation impossible.
7 However, we can tell Nix explicitly what the previous build state was, by representing that previous state as a derivation output. This allows the passed build state to be used for an incremental build.
9 To change a normal derivation to a checkpoint based build, these steps must be taken:
10 - apply `prepareCheckpointBuild` on the desired derivation, e.g.
13 checkpointArtifacts = (pkgs.checkpointBuildTools.prepareCheckpointBuild pkgs.virtualbox);
16 - change something you want in the sources of the package, e.g. use a source override:
19 changedVBox = pkgs.virtualbox.overrideAttrs (old: {
20 src = path/to/vbox/sources;
24 - use `mkCheckpointBuild changedVBox checkpointArtifacts`
25 - enjoy shorter build times
27 ## Example {#sec-checkpoint-build-example}
29 { pkgs ? import <nixpkgs> {} }:
31 inherit (pkgs.checkpointBuildTools)
32 prepareCheckpointBuild
35 helloCheckpoint = prepareCheckpointBuild pkgs.hello;
36 changedHello = pkgs.hello.overrideAttrs (_: {
39 sed -i 's/Hello, world!/Hello, Nix!/g' src/hello.c
42 in mkCheckpointBuild changedHello helloCheckpoint