Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Name

nix flake bake - bake a flake

Synopsis

nix flake bake [option…] flake-url

Examples

  • Bake the patchelf flake into the directory ./patchelf-baked:

    # nix flake bake github:NixOS/patchelf --dest-dir ./patchelf-baked
    

    The baked flake can be used like any other flake:

    # nix flake show path:./patchelf-baked
    # nix build path:./patchelf-baked#patchelf
    
  • Bake the outputs for all systems, not just the current one:

    # nix flake bake github:NixOS/patchelf --dest-dir ./patchelf-baked --all-systems
    

Description

This command evaluates the outputs of the flake specified by flake reference flake-url and writes a new, baked flake to the directory path (specified by --dest-dir). The baked flake provides the same outputs as the original flake, but they are pre-evaluated: every derivation is replaced by a baked derivation, that is, a derivation with the builder builtin:substitute that is never built but whose outputs are obtained by substitution from a binary cache. As a result, evaluating a baked flake is much faster than evaluating the original, since it does (almost) no evaluation.

The baked flake has no inputs, so it can be used without access to the inputs of the original flake. It provides its own flake schemas (in the schemas output) that reproduce the structure of the original flake’s outputs, so nix flake show and nix flake check work on it without needing the original flake’s schemas.

Derivation attributes in the baked flake have the same name, system, outPath, outputName, outputs and meta.mainProgram as in the original flake, so commands such as nix build and nix run behave the same. Their drvPath is different, however: it refers to the baked derivation rather than the original one. The outputs of a baked flake can also be used as inputs of other derivations, e.g. by another flake that has the baked flake as an input.

Building the outputs of a baked flake requires that their store paths can be substituted (or are already present in the Nix store). If a store path cannot be substituted, the build fails; Nix will not fall back to building the original derivation.

By default, only the outputs for the current system are baked. Use --all-systems to bake the outputs for all systems.

Limitations

  • Only outputs that are recognised by the flake schemas are baked. Non-derivation outputs, such as overlays, nixosModules and templates, are omitted from the baked flake.

  • Derivations whose output paths are not known at evaluation time cannot be baked. This includes content-addressed derivations and impure derivations. nix flake bake prints a warning for each such derivation and omits it from the baked flake.

  • Outputs whose derivation is nested inside the output attribute (such as nixosConfigurations.<name>.config.system.build.toplevel) are baked at that nested attribute. Other attributes of the output are not included.

This command requires the baked-derivations experimental feature, both in the Nix CLI and in the Nix daemon.

Options

  • --all-systems

    Bake the outputs for all systems, not just the current system.

  • --default-flake-schemas flake-ref

    The URL of the flake providing default flake schema definitions.

  • --dest-dir path

    Directory in which to write the baked flake.nix.

  • --read-only

    Do not instantiate each evaluated derivation. This improves performance, but can cause errors when accessing store paths of derivations during evaluation.

Common evaluation options

  • --arg name expr

    Pass the value expr as the argument name to Nix functions.

  • --arg-from-file name path

    Pass the contents of file path as the argument name to Nix functions.

  • --arg-from-stdin name

    Pass the contents of stdin as the argument name to Nix functions.

  • --argstr name string

    Pass the string string as the argument name to Nix functions.

  • --debugger

    Start an interactive environment if evaluation fails.

  • --eval-store store-url

    The URL of the Nix store to use for evaluation, i.e. to store derivations (.drv files) and inputs referenced by them.

  • --impure

    Allow access to mutable paths and repositories.

  • --include / -I path

    Add path to search path entries used to resolve lookup paths

    This option may be given multiple times.

    Paths added through -I take precedence over the nix-path configuration setting and the NIX_PATH environment variable.

  • --override-flake original-ref resolved-ref

    Override the flake registries, redirecting original-ref to resolved-ref.

  • --debug

    Set the logging verbosity level to ‘debug’.

  • --log-format format

    Set the format of log output; one of raw, internal-json, bar or bar-with-logs.

  • --print-build-logs / -L

    Print full build logs on standard error.

  • --quiet

    Decrease the logging verbosity level.

  • --verbose / -v

    Increase the logging verbosity level.

Miscellaneous global options

  • --help

    Show usage information.

  • --offline

    Disable substituters and consider all previously downloaded files up-to-date.

  • --option name value

    Set the Nix configuration setting name to value (overriding nix.conf).

  • --refresh

    Consider all previously downloaded files out-of-date.

  • --repair

    During evaluation, rewrite missing or corrupted files in the Nix store. During building, rebuild missing or corrupted store paths.

  • --version

    Show version information.

Note

See man nix.conf for overriding configuration settings with command line flags.