This has been bugging me for a while, but I’ve never gotten around to writing something coherent about it. So I’ll just put the idea here since I’m curious if the community agrees.
I don’t like
lib.optional. I think its highly counterintuitive that it wraps the result in a list. Here’s an example of an abuse: https://github.com/NixOS/nixpkgs/commit/bbb813279055ee2563054d839ff7a2ee696a9ce7
Can’t we just use
lib.optionals instead? Yes, it requires two additional characters (
) but I think that is well worth the clarity.
generally I use
[ ], even for single elements, just to avoid this scenario. Also makes adding new elements easier on the diffs.
I like the idea.
$ rg "optional " | wc -l
$ rg "optionals " | wc -l
Personally I prefer
optional. It feels “cleaner” and is easier to type. I don’t mind if this becomes policy with enough people agreeing that it’s a good thing though.
What I’m not keen on is people changing this without it being a documented policy, because otherwise we can end up with it being changed back and forth, wasting people’s time and introducing meaningless code churn.
So, people who feel strongly about this: please work on making it a policy (deprecate lib.optional?) before changing it willy-nilly in nixpkgs.