By all means, do your own thing, but > and don't let you write your own docstrings
is (and always has been) simply untrue of (at least) [cligen](https://github.com/c-blake/cligen). proc foo(myParam=1) = discard import cligen; include cligen/mergeCfgEnv dispatch foo, usage="the whole usage message" Run which even takes a config file as a source of flags. Of course, part of its point is to automate usage strings to be informative to CLusers at less effort to CLauthors. As for opinionated, you may not like opinions of The Defaults, but almost everything is adjustable, sometimes even by CLusers (CLauthors may not even know what kind of terminal app will be used, after all!). Package docs could always be better, but that is also more to read. This model has worked well for just me personally for literally 150 CLI utility programs in Nim without cluttering said programs with a lot of CL parsing boilerplate. It's often easier to learn a lower-level API, especially if that is closer to what you are used to. History on this Forum is often unreliable. Another home for your example might be a short tutorial for using `std/parseopt` on [the Nim wiki](https://github.com/nim-lang/Nim/wiki).