   Persists the given configuration by modifying
   the configured applications environment.
 
-  Returns the configured apps.
+  `config` should be a list of `{app, app_config}` tuples or a
+  `%{app => app_config}` map where `app` are the applications to
+  be configured and `app_config` are the configuration (as key-value
+  pairs) for each of those applications.
+
+  Returns the configured applications.
+
+  ## Examples
+
+      Mix.Config.persist(logger: [level: :error], my_app: [my_config: 1])
+      #=> [:logger, :my_app]
+
   """
   def persist(config) do
     for {app, kw} <- config do

      import_config "../apps/*/config/config.exs"

  """
  defmacro import_config(file) do
    quote do
      Mix.Config.Agent.merge(
        var!(config_agent, Mix.Config),
         Mix.Config.read_wildcard!(Path.expand(unquote(file), __DIR__))
      )
    end
  end

  @doc """
  Reads and validates a configuration file.
  """
  def read!(file) do
    try do

  end

  @doc ~S"""
  Imports configuration from the given file or files.

  If `path_or_wildcard` is a wildcard, then all the files
  matching that wildcard will be imported; if no file matches
  the wildcard, no errors are raised. If `path_or_wildcard` is
  not a wildcard but a path to a single file, then that file is
  imported; in case the file doesn't exist, an error is raised.
  This behaviour is analogous to the one for `read_wildcard!/1`.

  If path/wildcard is a relative path/wildcard, it will be expanded relatively
  to the directory the current configuration file is in.

  ## Examples

