anchor.diff:                    end, rebar_state:project_apps(State)),
       _ = code:add_path(filename:join([rebar_dir:base_dir(State), "test"])),
       ok.
  +
  +reread_config(State) ->
  +    case find_config(State) of
  +        no_config ->
  +            ok;
  +        {ok, ConfigList} ->
  +            lists:foreach(fun ({Application, Items}) ->
  +                                  lists:foreach(fun ({Key, Val}) ->
  +                                                        application:set_env(Application, Key, Val)
  +                                                end,
  +                                                Items)
  +                          end,
  +                          ConfigList);
  +        {error, Error} ->
  +            ?ABORT("Error while attempting to read configuration file: ~p", [Error])
  +    end.
  +
  +% First try the --config flag, then try the relx sys_config
  +-spec find_config(rebar_state:t()) -> {ok, [tuple()]}|no_config|{error, tuple()}.
  +find_config(State) ->
  +    case find_config_option(State) of
  +        no_config ->
  +            find_config_relx(State);
  +        Result ->
  +            Result
  +    end.
  +
  +-spec find_config_option(rebar_state:t()) -> {ok, [tuple()]}|no_config|{error, tuple()}.
  +find_config_option(State) ->
  +    {Opts, _} = rebar_state:command_parsed_args(State),
  +    case proplists:get_value(config, Opts) of
  +        undefined ->
  +            no_config;
  +        Filename ->
  +            consult_config(State, Filename)
  +    end.
  +
  +-spec find_config_relx(rebar_state:t()) -> {ok, [tuple()]}|no_config|{error, tuple()}.
  +find_config_relx(State) ->
  +    case proplists:get_value(sys_config, rebar_state:get(State, relx, [])) of
  +        undefined ->
  +            no_config;
  +        Filename ->
  +            consult_config(State, Filename)
  +    end.
  +
  +-spec consult_config(rebar_state:t(), string()) -> {ok, [tuple()]}|{error, tuple()}.
  +consult_config(State, Filename) ->
  +    Fullpath = filename:join(rebar_dir:root_dir(State), Filename),
  +    ?DEBUG("Loading configuration from ~p", [Fullpath]),
  +    case file:consult(Fullpath) of
  +        {ok, [Config]} ->
  +            {ok, Config};
  +        {ok, []} ->
  +            {ok, []};
  +        {error, Error} ->
  +            {error, {Error, Fullpath}}
  +    end.
  
positive.code:     code:add_pathsa(rebar_state:code_paths(State, all_deps)),
      %% add project app test paths
      ok = add_test_paths(State),
      %% this call never returns (until user quits shell)
      timer:sleep(infinity).
  
  
negative.code:                                                                {example, "rebar3 shell"},
                                                                 {short_desc, "Run shell with project apps and deps in path."},
                                                                 {desc, info()},
                                                                 {opts, [{config, undefined, "config", string, "Path to the config file to use. Defaults to the sys_config defined for relx, if present."}]}])),
      {ok, State1}.
  
  -spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}.
  