# `Minga.Extensions.LanguagePacks`
[🔗](https://github.com/jsmestad/minga/blob/main/lib/minga/extensions/language_packs.ex#L1)

Starts bundled language packs and registers their catalog data through extension-owned sources.

Bundled packs use the same `Minga.Language.Registry.register/2` path as third-party language packs. Each `%Minga.Language{}` carries its own extensions, filenames, shebangs, devicon, grammar, formatter, and LSP defaults, so stopping or reloading a pack removes the whole language record from the registry instead of leaving stale derived data behind.

# `pack_module`

```elixir
@type pack_module() :: module()
```

A module that implements the language-pack extension callbacks.

# `pack_validation_error`

```elixir
@type pack_validation_error() :: {:duplicate_pack_key, term(), module(), module()}
```

Pack validation error when two language definitions claim the same key.

# `state`

```elixir
@type state() :: %{loaded: [atom()], failed: [{atom(), term()}]}
```

Runtime state for the bundled pack starter.

# `child_spec`

Returns a specification to start this module under a supervisor.

See `Supervisor`.

# `packs`

```elixir
@spec packs() :: [pack_module()]
```

Returns bundled language pack modules in startup order.

# `register_pack`

```elixir
@spec register_pack(pack_module()) :: :ok | {:error, term()}
```

Registers all languages owned by a pack, replacing stale entries from an earlier load.

# `reload_pack`

```elixir
@spec reload_pack(pack_module()) :: :ok | {:error, term()}
```

Reloads a pack by removing its previous source-owned entries, then registering its current modules.

# `source_for`

```elixir
@spec source_for(pack_module()) :: {:extension, atom()}
```

Returns the contribution source used for a pack.

# `start_link`

```elixir
@spec start_link(keyword()) :: Agent.on_start()
```

Starts the bundled language pack loader.

# `unregister_pack`

```elixir
@spec unregister_pack(pack_module()) :: :ok
```

Unregisters all language catalog data owned by a pack.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
