TL; DR: Omniconf is a new configuration library for Clojure that unifies environment variables, command-line options and config files; and ensures the configuration is complete and correct before the main application code runs.
Configuring your application is often a daunting and thankless task. It very much depends on the way you launch your program, so it is difficult to solve the configuration problem for the general case. Twelve-factor app guidelines suggest using environment variables for everything, but that rule is unnecessarily rigid. If you have many options, configuration files are more appropriate. When you launch the app from the command line (on a dev machine, for example), command-line arguments are preferable. But now you suddenly need a unified access to all those configuration sources.
There are already libraries that solve the configuration problem in Clojure, namely: Environ, Aero, Nomad, Fluorine. Each of them is quite good at what they do; however, we at Grammarly needed extra functionality — to check the final configuration state before the main program executes, and make sure there are no missing or incorrect options. What began as a few helper functions was extracted into a separate library and called Omniconf.