View Source Dotenv Config

Erlang/Elixir apps config based on environment variables and .env files

Usage

At the start of your application, load the .env files (later files will overwrite the previous ones values).

dotenv_config:init(parser_module, ["path/to/.env"]).

parser_module is a module that implements the dotenv_config_parser behaviour. It should have a get_parser/0 function that returns a list of {ConfigItemName, ConfigItemType} tuples. See the parser_module example below.

Get the config value:

dotenv_config:get(<<"CLIENT_ID">>).

Set the config value:

dotenv_config:set(<<"CLIENT_ID">>, <<"new_client_id">>).

Get all the config values:

dotenv_config:get_all().

parser_module example

-module(client_config_example).
-behaviour(dotenv_config_parser).

-export([get_parser/0]).

get_parser() ->
    [
        {<<"CLIENT_ID">>, str},
        {<<"PORT">>, int},
        {<<"DEBUG">>, bool},
        {<<"NAMES">>, json},
        {<<"LOG_LEVEL">>, atom},
        {<<"CALLBACK_MODULE">>, module},
        {<<"CHARLIST">>, charlist},
        {<<"SOME_LIST_MODE">>, [{exact, <<"allowlist">>}, {exact, <<"blocklist">>}]},
        {<<"SOME_CALL_TIMEOUT">>, [{exact, <<"infinity">>}, int]},
        {<<"SOME_COMPLEX_TYPE">>, fun (RawValue) -> <<RawValue/binary, "_42">> end}
    ].

json type would be parsed to list or map using jiffy:decode(RawValue, [return_maps]).

module type would be checked for existence.