# `Lumis.Theme`
[🔗](https://github.com/leandrocp/lumis/blob/elixir@v0.3.0/packages/elixir/lumis/lib/lumis/theme.ex#L1)

A Neovim theme.

Contains the name, appearance, and a map of highlight `Lumis.Theme.Style`'s.

Lumis bundles the most popular themes from the Neovim community,
you can see the full list with `Lumis.available_themes/0` and
then fetch one of the bundled themes with `Lumis.Theme.get/1`.

Or check out all the [available themes](https://docs.rs/lumis/latest/lumis/#themes-available).

## Example

    %Lumis.Theme{
       name: "github_light",
       appearance: :light,
       revision: "fe70a27afefa6e10db4a59262d31f259f702fd6a",
       highlights: %{
         "function.macro" => %Lumis.Theme.Style{
           fg: "#6639ba",
           bg: nil,
           bold: false,
           italic: false,
           text_decoration: %Lumis.Theme.TextDecoration{
             underline: :solid,
             strikethrough: false
           }
         },
         ...
       }
    }

# `appearance`

```elixir
@type appearance() :: :light | :dark
```

# `t`

```elixir
@type t() :: %Lumis.Theme{
  appearance: appearance(),
  highlights: %{required(String.t()) =&gt; Lumis.Theme.Style.t()},
  name: String.t(),
  revision: String.t()
}
```

A Neovim theme with name, appearance (:light or :dark), revision, and highlight styles.

# `from_file`

```elixir
@spec from_file(String.t()) :: {:ok, t()} | {:error, term()}
```

Load a theme from a JSON file.

# `from_json`

```elixir
@spec from_json(String.t()) :: {:ok, t()} | {:error, term()}
```

Load a theme from a JSON string.

# `get`

```elixir
@spec get(String.t(), any()) :: t() | nil
```

Get a theme by name.

---

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