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