I'm trying to debug a module I'm writing with builtins.trace
, but it's being more complicated than I anticipated.
Let's say I have a module:
{ config, lib, pkgs, modulesPath, ... }:
{
config =
let
some-list = lib.attrsets.mapAttrsToList (n: v: {
some-attr = "${n} ${v}";
}) { n1 = "v1"; n2 = "v2"; };
in {
users.mutableUsers = builtins.trace (some-list) false;
};
}
This will print
trace: [ <code> <code> ]
because builtins.trace
(for whatever reason?) evaluates its first argument only shallowly.
Changing the trace
expression to:
builtins.trace (builtins.toJSON some-list) false;
helps a lot, but as soon as one tries to print a long list or a structure with some complexity the output is completely unreadable, and it's not like it can easily be piped into jq
(I mean... &| grep ^trace: | sed 's/trace: //' | jq
works*, but there must be a "better" way?)
(*) in fish shell, IDK about bash
edit: It's not like I specifically want JSON output: any format will do (ideally, nix would be nice)
That's the thing you want to build (a single project may generate multiple executables - eg. a server and a client) so it won't help in this case but... I must say, I am impressed and really grateful that you went and looked that up for me! Thanks, mate!