Debugging Tips

use builtins.trace or builtins.break

Use trace to print values while debugging or break to enter a repl at some particular evaluation part.

den.aspects.foo = { user, ... }@context:
(builtins.trace context { 
  nixos = { ... };
})

repl is your friend

Use the nix repl command to load your flake and be able to interatively inspect produced outputs.

nix repl
> :lf . # load flake
> nixosConfigurations.igloo.config # inspect values

inspect den tree

temporarely expose den as flake output so you can inspect den.aspects.<foo>

{ den, ... }:
{
  flake.den = den; # remove this once you are done debugging.
}

trace context keys

den.default.includes = [
  (context: builtins.trace context { })
];

manually resolve some aspect

at repl:

# if foo is parametric, use `(den.aspects.foo { params... }).resolve ...`
> module = den.aspects.foo.resolve { class = "homeManager"; aspect-chain = [ ]; }
> config = (lib.evalModules { modules = [ module ]; }).config

obtain a host main module

at repl:

> module = den.hosts.x86_64-linux.igloo.mainModule
> config = (lib.evalModules { modules = [ module ]; }).config