Skip to main content

lib/mix/tasks/vibe_kit.install.ex

Code.ensure_compiled(Igniter)

if Code.ensure_loaded?(Igniter) do
  defmodule Mix.Tasks.VibeKit.Install do
    use Igniter.Mix.Task

    alias VibeKit.Install
    alias VibeKit.Install.Options

    @example "mix igniter.install vibe_kit"
    @shortdoc "Installs Elixir Vibe project conventions"

    @moduledoc """
    #{@shortdoc}

    Adds the shared `mix ci` alias, preferred Mix CLI environment, and quality
    tooling dependencies used across Elixir Vibe projects.

    ## Example

    ```sh
    #{@example}
    ```

    ## Options

    * `--no-reach` - skip Reach and `reach.check --arch --smells`
    * `--no-strict-clones` - run ExDNA as `ex_dna` instead of `ex_dna --max-clones 0`
    * `--no-ex-slop` - skip ExSlop and `.credo.exs` plugin setup
    * `--agents-md` - create `AGENTS.md` with project instructions
    * `--claude-md` - create `CLAUDE.md` with project instructions
    """

    @impl Igniter.Mix.Task
    def info(argv, _parent) do
      %Igniter.Mix.Task.Info{
        group: :vibe_kit,
        adds_deps: Install.deps(argv),
        installs: [],
        example: @example,
        positional: [],
        schema: Options.schema(),
        defaults: Options.defaults(),
        aliases: [],
        required: []
      }
    end

    @impl Igniter.Mix.Task
    def igniter(igniter) do
      Install.run(igniter, igniter.args.options)
    end
  end
else
  defmodule Mix.Tasks.VibeKit.Install do
    @moduledoc "Installs Elixir Vibe project conventions"
    @shortdoc @moduledoc

    use Mix.Task

    @impl Mix.Task
    def run(_argv) do
      Mix.shell().error("""
      The task 'vibe_kit.install' requires igniter.

      Please install igniter and try again.

      For more information, see: https://hexdocs.pm/igniter
      """)

      exit({:shutdown, 1})
    end
  end
end