# `Minga.Config.ModelineSegment`
[🔗](https://github.com/jsmestad/minga/blob/main/lib/minga/config/modeline_segment.ex#L1)

A custom modeline segment registered by user config or an extension.

The renderer decides where the segment appears from the configured segment lists. The segment's own `side` is the default placement when the user has not explicitly listed the segment on either side.

# `context`

```elixir
@type context() :: map()
```

Context passed to modeline segment render functions.

# `render_fun`

```elixir
@type render_fun() :: (context() -&gt; [render_segment()] | render_segment() | nil)
```

Custom segment render function.

# `render_segment`

```elixir
@type render_segment() ::
  {String.t(), non_neg_integer(), non_neg_integer(), keyword(), atom() | nil}
```

A normalized modeline draw segment.

# `side`

```elixir
@type side() :: :left | :right
```

Modeline side used for default placement.

# `t`

```elixir
@type t() :: %Minga.Config.ModelineSegment{
  name: atom(),
  priority: integer(),
  render: render_fun(),
  side: side(),
  source: atom() | {:extension, atom()}
}
```

# `validation_error`

```elixir
@type validation_error() :: {:invalid_side, term()} | {:invalid_priority, term()}
```

# `new`

```elixir
@spec new(atom(), keyword(), render_fun(), atom() | {:extension, atom()}) ::
  {:ok, t()} | {:error, validation_error()}
```

Builds a custom modeline segment descriptor.

---

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