[Original question]: How to actually coerce set to string?
Many people encountered this error but sometimes you really mean it:
let
some-set = { a = 1; b = { c = "foo"; }; };
in
coerceSetToString some-set
Of course, if some (sub)set contains a function, this should result in an error. I couldn’t find this magic function, maybe it exists already. It should not be hard to implement with what we have in nix language, though I don’t want to do this myself. Dealing with formatting seems boring. There are deterministic formatters like alejandra so many of the formatting issues can go away maybe…
I think it’s typically best to just use builtins.toJSON
for this purpose. JSON isn’t Nix, but for data serialization it’s perfectly capable and invertible with builtins.fromJSON
Thanks for your reply!
Well, yes, but I want to generate some nix code (to create config files like plasma-manager does). The problem then becomes converting json to nix and I couldn’t find such tool either.
To rephrase the question: how can one generate nix code? It doesn’t quite matter what the source format is (since we can make it json and every sane language knows how to deal with json).
I don’t understand; what’s wrong with builtins.fromJSON
?
As I understand, builtins.fromJSON
returns a nix value (e.g. set or list) and I want to get a string representation of this value
then that’s builtins.toJSON
@heinwol As nix can’t know how your string should look like, you might need to create your own (recursive) string builder.