defmodule Mix.Tasks.DoIt.Config.Init do use Mix.Task import Mix.Generator @shortdoc "Initializes DoIt persistent configuration" @moduledoc """ Initializes DoIt persistent configuration. ## Examples $ mix do_it.config.init """ embed_template(:config, """ config :do_it, DoIt.Commfig, dirname: System.tmp_dir(), filename: "<%= @app %>.json" """) @impl true def run(_args) do config = Mix.Project.config() config_first_line = "import Config" config_path = config[:config_path] || "config/config.exs" app = config[:app] || :YOUR_APP_NAME opts = [app: app] case File.read(config_path) do {:ok, contents} -> new_contents = config_first_line <> "\n\n" <> config_template(opts) Mix.shell().info([:green, "* updating ", :reset, config_path]) File.write!(config_path, String.replace(contents, config_first_line, new_contents)) {:error, _} -> create_file(config_path, "import Config\n\n" <> config_template(opts)) end end end