Explore and debug option values

Sometimes the public interface of a flake is not enough. To inspect all option values, you can enable debug and explore otherwise private values with the repl.

Start debugging

  1. Add debug = true; Example:

    { debug = true; systems = /* ... */; perSystem = /* ... */; }
  2. Load the flake

    $ nix repl nix-repl> :lf .

Inspect the perSystem configuration for your machine

nix-repl> currentSystem.allModuleArgs.pkgs.stdenv.hostPlatform.system "x86_64-linux"

Inspect the perSystem configuration for a different system type

nix-repl> debug.allSystems.armv7l-linux.allModuleArgs.pkgs.stdenv.hostPlatform.system "armv7l-linux"

Inspect a top level option

nix-repl> debug.systems [ "x86_64-linux" "aarch64-darwin" ]

Where is a per system value defined?

nix-repl> currentSystem.options.pre-commit.settings.files [ "/nix/store/pqp5kwdihyyymfnqq9sk9jsm9xw2lw6s-source/dev-module.nix, via option perSystem" "/nix/store/4wl7k0dp7cjyc4nxy5cm9wdb8jshlg0j-source/flake-module.nix" ]

Where is a top level value defined?

nix-repl> debug.options.system.files [ "/nix/store/3na6c6mmyw2yf5chzwwwrp54b8yf96ry-source/flake.nix" ]

Where is a top level option declared?

nix-repl> debug.options.systems.declarations [ "/nix/store/3na6c6mmyw2yf5chzwwwrp54b8yf96ry-source/modules/perSystem.nix" ]

See also