I don’t quite like the way Elixir handles configuration or maybe I got it wrong. Let’s suppose my app need to use the messagebird dependency which has a config like this:
config :ex_messagebird,
token: "YOUR API TOKEN",
originator: "ExMessagebird"
What if I would like to hide this from the user? There is any way to force this config through my own configuration section? Like this:
config :my_app,
messaging:
token: "YOUR API TOKEN"
I don’t want to expose the dependency configuration to the outside world.
I was mainly thinking on simply hiding the initialisation of the other libs from the user. But maybe this is way too much anti pattern on Elixir as each library can be its own application running independent. It’s hard to break the pattern from other languages…
You have still not made clear what or who the user is, but to make one thing clear: libs can not only be applications, they are applications from the BEAM side of view.
I think that the confusion here is who you are considering to be the end-user. I personally wouldn’t consider someone with the source code in hand an end-user unless we are talking about developers (at least in the way I think you meant). Therefore, this person would be able able to modify and by extension, change the configuration of the application.
However, If you want to provide a packaged release to your end-users and also let them configure parts of your application at runtime, perhaps you could use something like the new runtime.exs to read from a file (I haven’t tried that btw).