I believe a lot of the confusion comes from being unclear on what should be configured via config/config.exs. Some of this is due to the ecosystem being new and clearer guidelines will come as we go.
For example, no configuration library that will solve the compile-time issues we have today. The solution is for libraries to rely less on compile-time configuration and document when it happens. We have also tried to make {:system, env} work but, at this point, it is clear that runtime configuration should be moved to runtime. It doesn’t work in Elixir nor did it work on Erlang. Phoenix v1.3 and Ecto v2.1 are pushing to this new direction.
Hopefully drawing a line on what works with Mix config will allow others to work on a unified approach for configuration that could support multiple sources (system env, database, json files, etc). Looking at what other communities do to tackle this can be helpful. However I would also be careful with putting all responsibilities on the config system. For example, a schema for configuration could be useful, but libraries should also be validating whatever they get from external sources.






















