Read a nix file as a config.
Essentially just wraps nix eval (--json) --expr
.
Allows parsing the following:
let
user = "jolheiser";
in {
log = {
level = "warn";
# Name the log file after the user....for reasons
file = "${user}.log";
};
http = {
host = "0.0.0.0";
port = 1234;
# Make user an admin, but also make a generic admin user
admins = [user "admin"];
};
}
Into a struct like:
type Config struct {
Log struct {
Level string // warn
File string // jolheiser.log
}
HTTP struct {
Host string // 0.0.0.0
Port int // 1234
Admins []string // [jolheiser admin]
}
}
It can also marshal a struct into a valid (albeit minified) nix expression.