add colors.toml and 0x-hex support, rescuing 44 more community themes

Poked at the 62 "no parseable source" skips from the first pass and found two things
the pipeline didn't handle: several community repos genuinely ship colors.toml too — some
in Omarchy 4's own semantic schema (best case, no derivation needed at all, same quality
as the official 22), others reusing the filename for an unrelated flat color0..color15
scheme — and a handful of alacritty.toml files use 0xrrggbb instead of #rrggbb.

palette.ts's loadPalette is now a thin wrapper over two exported pieces (parseTomlText,
paletteFromRecord) so the community pipeline can attempt the real schema first without
duplicating the reader; falls through to the color16 or ANSI-derived paths otherwise.
generate-themes.ts --check still reports 0 changes for the official set — the refactor
is behavior-preserving there, the lowercase-hex normalization it picked up along the way
touched 7 official theme files cosmetically (their source colors.toml has uppercase hex),
regenerated for real rather than left inconsistent with their own source.

147 -> 191 community themes ported. Of the original 62 unparseable repos, most turned out
to be simply gone (404 on GitHub — repos deleted or renamed since the site listed them);
the rest needed one of the two format additions above. 20 themes remain stuck: 16 dead
repos, 2 with no repo link at all, and the same handful of genuinely low-contrast source
palettes (mostly Solarized variants) where fixing contrast would mean changing the
author's actual colours rather than porting them.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-22 01:48:21 +00:00
co-authored by Claude Sonnet 5
parent a58f4d2b32
commit 861fc4a58b
57 changed files with 4859 additions and 124 deletions
@@ -7,56 +7,56 @@
Source: basecamp/omarchy themes/flexoki-light/colors.toml (mode: light)
*/
[data-theme='flexoki-light'] {
--background: #FFFCF0;
--foreground: #100F0F;
--card: #E6E4D9;
--card-foreground: #100F0F;
--popover: #E6E4D9;
--popover-foreground: #100F0F;
--background: #fffcf0;
--foreground: #100f0f;
--card: #e6e4d9;
--card-foreground: #100f0f;
--popover: #e6e4d9;
--popover-foreground: #100f0f;
--muted: #f2efe4;
--muted-foreground: #403E3C;
--muted-foreground: #403e3c;
--accent: #f2efe4;
--accent-foreground: #100F0F;
--primary: #205EA6;
--accent-foreground: #100f0f;
--primary: #205ea6;
--primary-foreground: #e5e2d8;
--secondary: #f2efe4;
--secondary-foreground: #100F0F;
--cta: #205EA6;
--secondary-foreground: #100f0f;
--cta: #205ea6;
--cta-foreground: #e5e2d8;
--ctahover: #1c5392;
--success: #879A39;
--success-foreground: #100F0F;
--warning: #D0A215;
--warning-foreground: #100F0F;
--destructive: #D14D41;
--success: #879a39;
--success-foreground: #100f0f;
--warning: #d0a215;
--warning-foreground: #100f0f;
--destructive: #d14d41;
--destructive-foreground: #0d0c0c;
--info: #205EA6;
--info: #205ea6;
--info-foreground: #e5e2d8;
--busy: #d0772b;
--busy-foreground: #100F0F;
--busy-foreground: #100f0f;
--busy-ink: #ac6223;
--border: #cbc9c0;
--input: #cbc9c0;
--ring: #205EA6;
--ring: #205ea6;
--radius: 0.625rem;
--chart-primary: #205EA6;
--chart-secondary: #CE5D97;
--status-success: #879A39;
--status-warning: #D0A215;
--status-in-progress: #205EA6;
--page-bg: #FFFCF0;
--chart-primary: #205ea6;
--chart-secondary: #ce5d97;
--status-success: #879a39;
--status-warning: #d0a215;
--status-in-progress: #205ea6;
--page-bg: #fffcf0;
--page-bg-src: '';
--panel-bg: rgb(230 228 217 / 0.72);
--panel-border: rgb(203 201 192 / 0.9);
--panel-border-bare: rgb(203 201 192 / 0.55);
--panel-raised-bg: rgb(230 228 217 / 0.95);
--panel-raised-border: rgb(203 201 192 / 1);
--panel-accent: #205EA6;
--panel-accent: #205ea6;
--panel-header-bg: rgb(242 239 228 / 0.6);
--panel-header-fg: #100F0F;
--panel-header-fg: #100f0f;
--panel-radius: 0.75rem;
--panel-blur: 12px;
--card-bg: #E6E4D9;
--card-bg: #e6e4d9;
--glass-bg: rgb(230 228 217 / 0.55);
--glass-border: rgb(203 201 192 / 0.7);
--dock-bg: rgb(230 228 217 / 0.7);
@@ -64,7 +64,7 @@
--dock-tooltip-bg: #f2efe4;
--header-bg: rgb(230 228 217 / 0.8);
--header-border: rgb(203 201 192 / 0.9);
--header-fg: #100F0F;
--header-fg: #100f0f;
--header-blur: 12px;
--pixel-grid-color: rgb(132 130 125 / 0.07);
--card-grid-color: rgb(132 130 125 / 0.05);
@@ -73,22 +73,22 @@
--scrollbar-thumb-hover: rgb(183 181 172 / 0.85);
--scrollbar-thin-thumb: rgb(183 181 172 / 0.45);
--scrollbar-thin-thumb-hover: rgb(183 181 172 / 0.7);
--brand: #205EA6;
--brand: #205ea6;
--brand-foreground: #e5e2d8;
--brand-primary: #205EA6;
--brand-accent: #3AA99F;
--brand-primary: #205ea6;
--brand-accent: #3aa99f;
--brand-warm: #d0772b;
--brand-deep: #f2efe4;
--brand-muted: #B7B5AC;
--ink: #100F0F;
--surface-warm: #E6E4D9;
--naturegreen: #879A39;
--naturegreen-foreground: #100F0F;
--duck-dark: #100F0F;
--duck-teal: #3AA99F;
--duck-yellow: #D0A215;
--brand-muted: #b7b5ac;
--ink: #100f0f;
--surface-warm: #e6e4d9;
--naturegreen: #879a39;
--naturegreen-foreground: #100f0f;
--duck-dark: #100f0f;
--duck-teal: #3aa99f;
--duck-yellow: #d0a215;
--duck-orange: #d0772b;
--duck-forest: #879A39;
--duck-forest: #879a39;
--duck-beige: #d1cfc5;
--logo-src: '/officer-logo.svg';
}