在 nix 中开发时,我通常使用
builtins.trace
进行调试:
a = { foo = "bar"; ... more complex nested attrset ...};
builtins.trace a a;
在复杂的数据结构上使用
:p a
也确实很难阅读。
但是,输出只是一行,没有任何格式,对于复杂的数据结构,这几乎无法用于调试。
nix 中是否有一个漂亮的打印函数,它可以进行一些缩进和添加换行符?或者更好的彩色输出?
我想看到这样的东西:
default = {
active = {
check_ssl = [
{
tags = [ "mycustomtag" ];
host = "kotalla.de";
ipv6 = false;
name = "ssl11";
}
{
tags = [ "mycustomtag" ];
host = "kotalla.de";
ipv6 = false;
name = "ssl2";
}
];
check_http = [
{
host = "kotalla.de";
port = 80;
url = "/foo";
contains = "Labor";
name = "http";
}
];
check_ssh = [
{
host = "mail.lastlog.de";
port = 20202;
name = "ssh";
}
];
};
Nixfmt 是一种流行的 Nix 代码格式化程序: https://github.com/Gabriel439/nixfmt
https://github.com/haskell-nix/hnix/tree/50e63f80afa8323b25b692533e731eea641e56af#parse--print
使用 hnix 解析文件并漂亮地打印结果:
hnix file.nix
如果这对未来的读者感兴趣,我制作了一个 Nix 的 fork,添加了漂亮的打印,但它仅用于
nix repl
,所以它导出的应用程序是 nix-repl
,我仍然使用上游 Nix 的其他一切。默认情况下它还启用了 Flakes,因此它不应该这么快就发生位腐烂。不过,如果我继续使用 Nix,我计划在有相关更改时每隔一段时间从上游进行合并。