chore(linting): refresh configs and sweep auto-fix

Pull in the refreshed linter and tooling configs (editorconfig,
gitignore, gitattributes, prettierignore, prettierrc, markdownlint,
yamllint, env.example, dotnet-tools) and run prettier and markdownlint
in --fix / --write mode across the repo so the existing tree matches
the new rules.

- prettier 2-space indent on yaml/yml and json overrides, asterisk
  strong, underscore emphasis, proseWrap always
- markdownlint MD007 indent aligned to 2 and MD049 to underscore so
  prettier output stays passing
- preflight Block F also ignores CLAUDE.md (gitignored personal file)
- prettierignore extended to keep HellionChat.yaml manifest and the
  NuGet packages.lock.json out of the formatter

No semantic content changed; csharpier, build, full build-suite
(729/729) and the new prettier/markdownlint/yamllint checks all green.
This commit is contained in:
2026-05-17 17:20:55 +02:00
parent 2315f10d91
commit 0220e5d756
53 changed files with 3501 additions and 2630 deletions
+41 -33
View File
@@ -4,8 +4,9 @@
# Theme Authoring Guide
> Built by **Hellion Forge** — the plugin workshop arm of [Hellion Online Media](https://hellion-media.de). HellionChat
> ships with nine built-in themes; this guide walks you through writing your own.
> Built by **Hellion Forge** — the plugin workshop arm of
> [Hellion Online Media](https://hellion-media.de). HellionChat ships with nine built-in themes;
> this guide walks you through writing your own.
## TL;DR
@@ -23,10 +24,11 @@ That's the whole loop. The rest of this document is reference.
%APPDATA%\XIVLauncher\pluginConfigs\HellionChat\themes\
```
(or the equivalent path on Linux/macOS — Settings → Themes → "Open themes folder" opens it directly).
(or the equivalent path on Linux/macOS — Settings → Themes → "Open themes folder" opens it
directly).
Each `*.json` file in this folder is loaded as one theme. The `example-theme.json` that HellionChat seeds on first
launch is your starting template.
Each `*.json` file in this folder is loaded as one theme. The `example-theme.json` that HellionChat
seeds on first launch is your starting template.
## File format
@@ -60,7 +62,8 @@ Theme JSON has four blocks:
### Color slots
All values are 6-digit `#RRGGBB` or 8-digit `#RRGGBBAA` hex strings. Six-digit values get an implicit `FF` alpha.
All values are 6-digit `#RRGGBB` or 8-digit `#RRGGBBAA` hex strings. Six-digit values get an
implicit `FF` alpha.
| Slot | Role |
| ---------------------------- | ------------------------------------------------------------------------------- |
@@ -87,7 +90,8 @@ All values are 6-digit `#RRGGBB` or 8-digit `#RRGGBBAA` hex strings. Six-digit v
### Layout slots
All values are floats in pixels. `BorderSize` is 0 or 1 (no thicker borders look right with ImGui's edge anti-aliasing).
All values are floats in pixels. `BorderSize` is 0 or 1 (no thicker borders look right with ImGui's
edge anti-aliasing).
| Slot | Typical range | Notes |
| ------------------- | ------------- | ------------------------------------------------- |
@@ -103,8 +107,8 @@ All values are floats in pixels. `BorderSize` is 0 or 1 (no thicker borders look
### Optional `chatChannels`
If present, your theme proposes its own chat-channel colors. Property names are `ChatType` enum values
(case-insensitive). Unknown names are skipped silently — safe for forward-compat.
If present, your theme proposes its own chat-channel colors. Property names are `ChatType` enum
values (case-insensitive). Unknown names are skipped silently — safe for forward-compat.
```json
"chatChannels": {
@@ -120,8 +124,9 @@ If present, your theme proposes its own chat-channel colors. Property names are
}
```
The user is asked **once per theme switch** whether to apply these colors — never auto-overwriting existing picks. The
banner shows up only if your suggested colors differ from the user's current `Configuration.ChatColours`.
The user is asked **once per theme switch** whether to apply these colors — never auto-overwriting
existing picks. The banner shows up only if your suggested colors differ from the user's current
`Configuration.ChatColours`.
#### Channel-identity rule
@@ -137,25 +142,26 @@ banner shows up only if your suggested colors differ from the user's current `Co
| FreeCompany | cyan-teal | Guild ops. |
| NoviceNetwork | lime-green | Mentor channel. |
A theme can tint these toward its brand family (e.g., a purple theme can shift Tell from `#FF99CC` to `#E090FF`), but
**don't** flip them (Tell suddenly green, Yell suddenly cyan). RP groups and combat-spec setups depend on the visual
hierarchy.
A theme can tint these toward its brand family (e.g., a purple theme can shift Tell from `#FF99CC`
to `#E090FF`), but **don't** flip them (Tell suddenly green, Yell suddenly cyan). RP groups and
combat-spec setups depend on the visual hierarchy.
The eight colored built-in themes (Hellion Arctic, Hellion Spectrum, Event Horizon, Crystal Nocturne, Mint Grove, Night
Blue, Indigo Violet, Forge Merchantman) all follow this rule — read their source for reference. Chat 2 Klassik
intentionally ships without `chatChannels` so the user keeps their existing picks.
The eight colored built-in themes (Hellion Arctic, Hellion Spectrum, Event Horizon, Crystal
Nocturne, Mint Grove, Night Blue, Indigo Violet, Forge Merchantman) all follow this rule — read
their source for reference. Chat 2 Klassik intentionally ships without `chatChannels` so the user
keeps their existing picks.
## Theme families
Naming convention `<color>-<modifier>` is recommended for theme families. The first member of a family is the
lightest/brightest:
Naming convention `<color>-<modifier>` is recommended for theme families. The first member of a
family is the lightest/brightest:
- `mint-grove` (current built-in, light mint)
- `forest-grove` (planned, dark emerald)
- `moss-grove` (planned, mid muted)
Code-wise families have no special handling — only the slug naming hints at the relationship. The picker may group
families later, but that's not required.
Code-wise families have no special handling — only the slug naming hints at the relationship. The
picker may group families later, but that's not required.
## Validation and errors
@@ -164,8 +170,8 @@ When HellionChat loads your theme:
- **Schema mismatch** (`schemaVersion != 1`): theme is skipped, warning written to `/xllog`.
- **Missing required field** (e.g., no `slug`): theme is skipped, warning written.
- **Invalid hex** (e.g., `#GGHHII`): theme is skipped, warning written.
- **Unknown channel name** in `chatChannels`: that one channel is skipped silently, the rest of the theme loads
normally.
- **Unknown channel name** in `chatChannels`: that one channel is skipped silently, the rest of the
theme loads normally.
Check `/xllog` after a plugin reload to see what loaded and what didn't.
@@ -177,23 +183,25 @@ Check `/xllog` after a plugin reload to see what loaded and what didn't.
4. Watch every plugin window (chat, settings, pop-out) and pick something to fix.
5. Tweak. Reload. Repeat.
Tip: the **Settings → Themes** picker shows a mini-mockup per theme — your colors are visible before you switch.
Tip: the **Settings → Themes** picker shows a mini-mockup per theme — your colors are visible before
you switch.
## Sharing themes
Themes are JSON, so sharing is just a file. Drop it into someone's `pluginConfigs/HellionChat/themes/` folder and their
plugin picks it up on next reload.
Themes are JSON, so sharing is just a file. Drop it into someone's
`pluginConfigs/HellionChat/themes/` folder and their plugin picks it up on next reload.
A community theme repository is on the Hellion Forge roadmap. Until then: share via Discord or any pastebin.
A community theme repository is on the Hellion Forge roadmap. Until then: share via Discord or any
pastebin.
## Reference
- `docs/example-theme.json` (seeded automatically on first launch into `pluginConfigs/HellionChat/themes/`) — minimal
valid theme.
- The five built-in themes live in source under `HellionChat/Themes/Builtin/`. They are a good reference for Color
choices that work.
- [Hellion Online Media branding](https://hellion-media.de) — the Arctic Cyan + Ember Glow palette that drives the
default Hellion Arctic theme.
- `docs/example-theme.json` (seeded automatically on first launch into
`pluginConfigs/HellionChat/themes/`) — minimal valid theme.
- The five built-in themes live in source under `HellionChat/Themes/Builtin/`. They are a good
reference for Color choices that work.
- [Hellion Online Media branding](https://hellion-media.de) — the Arctic Cyan + Ember Glow palette
that drives the default Hellion Arctic theme.
---