# `MishkaCmsCore.Sidebar.MenuSettings`
[🔗](https://github.com/mishka-group/mishka_cms_core/blob/v0.0.1/lib/mishka_cms_core/sidebar/menu_settings.ex#L5)

Registers every sidebar entry's position and on/off switch with the Settings page, through the
`"settings:register"` mishka_installer hook — the same plugin shape
`MishkaCmsCore.Dashboard.WidgetSettings` uses for widgets.

It walks `MishkaCmsCore.Sidebar.collect/0`, so an extension that adds a menu gets its settings for
free: there is no second list to keep in step, and no core file to edit when an extension ships a
new section. Definitions land in the **Sidebar** tab, grouped by the section each entry belongs
to, and each inherits the entry's own permissions so an admin is never shown a switch for a menu
they cannot see.

Registration priority is deliberately late (60): `Settings.load_definitions/0` calls every
`settings:register` plugin, and this one is the only one whose definitions depend on OTHER plugins
having registered first. Should this still run before an extension's `sidebar:menus` plugin is up,
the settings page re-aggregates on mount (`MishkaCmsCoreWeb.Live.Admin.Dashboard.Runtime.SettingsLive`)
and the missing entries appear — and the sidebar itself never depended on the definitions, since
every read passes the declared value as its default.

Registered in `MishkaCmsCore.Application`.

# `error_return`

```elixir
@type error_return() ::
  {:error, [%{action: atom(), field: atom(), message: String.t()}]}
```

# `okey_return`

```elixir
@type okey_return() :: {:ok, struct() | map() | module() | [any()]}
```

# `child_spec`

Returns a specification to start this module under a supervisor.

See `Supervisor`.

# `config`

```elixir
@spec config() :: keyword()
```

# `config`

```elixir
@spec config(atom()) :: any()
```

# `enable`

```elixir
@spec enable() :: okey_return() | error_return()
```

# `get`

```elixir
@spec get() :: keyword()
```

# `health_check`

```elixir
@spec health_check() :: :ok | {:degraded, term()} | {:error, term()}
```

Optional. See `c:MishkaInstaller.Event.Hook.health_check/0`. Override to report health.

# `on_dependency_error`

```elixir
@spec on_dependency_error(term()) :: term()
```

Optional. See `c:MishkaInstaller.Event.Hook.on_dependency_error/1`. Override to react.

# `register`

```elixir
@spec register() :: okey_return() | error_return()
```

# `restart`

```elixir
@spec restart() :: okey_return() | error_return()
```

# `start`

```elixir
@spec start() :: okey_return() | error_return()
```

# `start_link`

# `stop`

```elixir
@spec stop() :: okey_return() | error_return()
```

# `unregister`

```elixir
@spec unregister() :: okey_return() | error_return()
```

---

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