Discovers and loads user-defined theme files from disk.
Theme files are Elixir scripts (.exs) that return a map describing
face overrides, editor chrome colors, and optional inheritance from
a built-in theme. They live in ~/.config/minga/themes/ and are
evaluated at startup and on :reload_themes.
Theme file format
A theme file must return a map with at least a :name key:
# ~/.config/minga/themes/my_dark.exs
%{
name: :my_dark,
inherits: :doom_one,
faces: %{
"keyword" => [fg: 0xFF79C6, bold: true],
"comment" => [fg: 0x6272A4, italic: true],
"@lsp.type.variable" => [fg: 0xBD93F9]
},
editor: %{bg: 0x282A36, fg: 0xF8F8F2}
}Schema
:name(required) — atom identifying the theme:inherits(optional) — atom name of a built-in theme to extend. The built-in theme's syntax map and editor colors are used as the base; the file's:facesand:editorfields override them.:faces(optional) — map of face name strings to style keyword lists. Merged viaFace.Registry.with_overrides/2.:editor(optional) — map of editor chrome color overrides (:bg,:fg,:tilde_fg,:split_border_fg, etc.)
Discovery
Theme files are found at:
$XDG_CONFIG_HOME/minga/themes/*.exs(if$XDG_CONFIG_HOMEis set)~/.config/minga/themes/*.exs
Summary
Types
An error encountered while loading a theme file.
A loaded user theme with its face registry and metadata.
Functions
Discovers and loads all theme files from the themes directory.
Loads a single theme file.
Returns the themes directory path.
Types
@type load_error() :: MingaEditor.UI.Theme.Loader.LoadError.t()
An error encountered while loading a theme file.
@type loaded_theme() :: MingaEditor.UI.Theme.Loader.LoadedTheme.t()
A loaded user theme with its face registry and metadata.
Functions
@spec load_all(String.t()) :: {%{required(atom()) => loaded_theme()}, [load_error()]}
Discovers and loads all theme files from the themes directory.
Returns {loaded_themes, errors} where loaded_themes is a map
of theme name atoms to loaded theme structs, and errors is a
list of load errors.
@spec load_file(String.t()) :: {:ok, loaded_theme()} | {:error, load_error()}
Loads a single theme file.
Returns {:ok, loaded_theme} or {:error, load_error}.
@spec themes_dir() :: String.t()
Returns the themes directory path.