fix accent/secondary foreground derivation; 202 community themes

The nine remaining contrast failures all had the same cause, and it was a real bug in
map.ts rather than a limit of the source palettes: --accent and --secondary are both
s.high, but their foregrounds were taken from fgRaised, which is checked against
s.raised. That is precisely the near-miss the file already documents and fixes for
--muted-foreground, one token over. Deriving them against s.high instead rescues all
nine (every Solarized variant among them) and is provably a no-op for the official 22 —
each already clears 4.5:1 on s.high by 1.3x or more, and ensureContrast returns its
input untouched when it passes. Measured all 22 before the change; generate-themes.ts
--check reports 0 changes after it.

Also: GitLab-hosted repos are now discoverable (one theme lives there, and the raw-URL
and default-branch shapes differ from GitHub's), and sourceFor probes a directory named
after the theme's own slug, for the packs that nest one directory per theme. An exact
slug match is the only prefix tried on purpose — a pack whose variants have names of
their own has no single theme that is "the" one, so guessing would be wrong.

Every community theme is regenerated in this commit, not just the new ones. aura turned
up generated under an older pickAccent rule than its neighbours, because it was ported
before that rule changed — the same drift generate-themes.ts was written to prevent, and
the reason both halves are written from one source. All 202 now come from one mapping
version. Verified afterwards: 227 stylesheets, 227 imports, 227 registry entries, no
orphans in either direction.

Still out: 14 repos that 404 (deleted or renamed since the site indexed them),
grimdark-solarized (no source link at all), cobalt2 (its page links an awesome-list
README with no theme in it), and oasis (a six-variant pack with no variant named oasis —
porting it means inventing six slugs the site does not list, which is a naming decision).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-22 02:42:43 +00:00
co-authored by Claude Opus 5
parent 861fc4a58b
commit cbcd8d65df
163 changed files with 3219 additions and 2296 deletions
+138 -60
View File
@@ -3,7 +3,7 @@
"id": "aamis",
"name": "Aamis",
"repo": "vyrx-dev/omarchy-aamis-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
@@ -24,14 +24,14 @@
"id": "aetheria",
"name": "Aetheria",
"repo": "JJDizz1L/aetheria",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
"id": "akaito",
"name": "Akaito",
"repo": "stannorbvb-cmd/akaito",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": false
},
{
@@ -52,7 +52,7 @@
"id": "amekoji",
"name": "Amekoji",
"repo": "atif-1402/omarchy-amekoji-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
@@ -129,7 +129,7 @@
"id": "atelier",
"name": "Atelier",
"repo": "atif-1402/omarchy-atelier-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
@@ -178,21 +178,21 @@
"id": "bad-hand",
"name": "Bad Hand",
"repo": "bjornramberg/omarchy-bad-hand-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
"id": "batman",
"name": "Batman",
"repo": "OldJobobo/omarchy-batman-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
"id": "batou",
"name": "Batou",
"repo": "HANCORE-linux/omarchy-batou-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
@@ -213,7 +213,7 @@
"id": "beta",
"name": "Beta",
"repo": "jjdizz1l/beta",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
@@ -227,7 +227,7 @@
"id": "black-arch",
"name": "Black Arch",
"repo": "ankur311sudo/black_arch",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
@@ -251,6 +251,13 @@
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
"id": "blackwall",
"name": "Blackwall",
"repo": "rlind3r/omarchy-blackwall-theme",
"kind": "alacritty.toml",
"dark": true
},
{
"id": "blueridge",
"name": "Blueridge",
@@ -262,14 +269,14 @@
"id": "brutalism",
"name": "Brutalism",
"repo": "bjornramberg/omarchy-brutalism-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
"id": "caroline-skyline",
"name": "Caroline Skyline",
"repo": "OldJobobo/omarchy-caroline-skyline-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
@@ -290,14 +297,14 @@
"id": "city-783",
"name": "City 783",
"repo": "OldJobobo/omarchy-city-783-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
"id": "copper-night",
"name": "Copper Night",
"repo": "hembramnishant50-glitch/omarchy-coppernight-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
@@ -311,7 +318,7 @@
"id": "cpunk",
"name": "Cpunk",
"repo": "stannorbvb-cmd/cpunk",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
@@ -360,14 +367,14 @@
"id": "deckard",
"name": "Deckard",
"repo": "OldJobobo/omarchy-deckard-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
"id": "delete",
"name": "Delete",
"repo": "signaldirective/delete-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
@@ -381,7 +388,7 @@
"id": "demon",
"name": "Demon",
"repo": "HANCORE-linux/omarchy-demon-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
@@ -402,7 +409,7 @@
"id": "dotrb",
"name": "Dotrb",
"repo": "dotsilva/omarchy-dotrb-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
@@ -451,14 +458,14 @@
"id": "eva-unit-01",
"name": "Eva Unit 01",
"repo": "OldJobobo/omarchy-01-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
"id": "event-horizon",
"name": "Event Horizon",
"repo": "OldJobobo/omarchy-event-horizon-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
@@ -486,7 +493,7 @@
"id": "felix",
"name": "Felix",
"repo": "TyRichards/omarchy-felix-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
@@ -514,7 +521,7 @@
"id": "flat-dracula",
"name": "Flat Dracula",
"repo": "OldJobobo/omarchy-flat-dracula-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
@@ -528,7 +535,7 @@
"id": "florida-man",
"name": "Florida Man",
"repo": "OldJobobo/omarchy-florida-man-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
@@ -577,9 +584,17 @@
"id": "gold-rush",
"name": "Gold Rush",
"repo": "tahayvr/omarchy-gold-rush-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
"id": "gornergrat-station",
"name": "Gornergrat Station",
"repo": "bhavabhuthi/omarchy-gornergrat-station-theme",
"host": "gitlab",
"kind": "alacritty.toml",
"dark": false
},
{
"id": "gotham-city",
"name": "Gotham City",
@@ -591,7 +606,7 @@
"id": "greek-noir",
"name": "Greek Noir",
"repo": "HANCORE-linux/omarchy-greek-noir-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
@@ -626,7 +641,7 @@
"id": "harbor",
"name": "Harbor",
"repo": "HANCORE-linux/omarchy-harbor-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": false
},
{
@@ -640,7 +655,7 @@
"id": "hex",
"name": "Hex",
"repo": "OldJobobo/omarchy-hex-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
@@ -654,7 +669,7 @@
"id": "hinterlands",
"name": "Hinterlands",
"repo": "OldJobobo/omarchy-hinterlands-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
@@ -696,7 +711,7 @@
"id": "killer-klowns",
"name": "Killer Klowns",
"repo": "Deoxizn/omarchy-killer-klowns-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
@@ -717,7 +732,7 @@
"id": "kurayami",
"name": "Kurayami",
"repo": "bjornramberg/omarchy-kurayami-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
@@ -745,14 +760,21 @@
"id": "latch-dark",
"name": "Latch Dark",
"repo": "atif-1402/omarchy-latchdark-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
"id": "lilly",
"name": "Lilly",
"repo": "JJDizz1L/lilly",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
"id": "lowlight",
"name": "Lowlight",
"repo": "atif-1402/omarchy-lowlight-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
@@ -787,7 +809,7 @@
"id": "mecha-no-onna",
"name": "Mecha NO Onna",
"repo": "HANCORE-linux/omarchy-mechanoonna-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
@@ -801,7 +823,7 @@
"id": "midnight",
"name": "Midnight",
"repo": "JaxonWright/omarchy-midnight-theme",
"kind": "ghostty.conf",
"kind": "colors.toml (Omarchy schema)",
"dark": true
},
{
@@ -811,11 +833,18 @@
"kind": "alacritty.toml",
"dark": true
},
{
"id": "milkmatcha-light",
"name": "Milkmatcha Light",
"repo": "hipsterusername/omarchy-milkmatcha-light-theme",
"kind": "alacritty.toml",
"dark": false
},
{
"id": "mocha",
"name": "Mocha",
"repo": "gitcoder89431/omarchy-mocha-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
@@ -843,7 +872,7 @@
"id": "monolith",
"name": "Monolith",
"repo": "OldJobobo/omarchy-monolith-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (Omarchy schema)",
"dark": true
},
{
@@ -860,6 +889,13 @@
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
"id": "moon-orbit",
"name": "Moon Orbit",
"repo": "JJDizz1L/moon-orbit",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
"id": "nagai-poolside",
"name": "Nagai Poolside",
@@ -909,6 +945,13 @@
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
"id": "night-owl",
"name": "Night Owl",
"repo": "maxberggren/omarchy-night-owl-theme",
"kind": "alacritty.toml",
"dark": true
},
{
"id": "nyc",
"name": "Nyc",
@@ -927,14 +970,14 @@
"id": "oxford",
"name": "Oxford",
"repo": "HANCORE-linux/omarchy-oxford-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
"id": "oxocarbon-dark",
"name": "Oxocarbon Dark",
"repo": "HANCORE-linux/omarchy-oxocarbon-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
@@ -944,6 +987,13 @@
"kind": "alacritty.toml",
"dark": true
},
{
"id": "phosphor-os",
"name": "Phosphor OS",
"repo": "OldJobobo/omarchy-phosphor-os-theme",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
"id": "pina",
"name": "Pina",
@@ -983,28 +1033,28 @@
"id": "purplewave",
"name": "Purplewave",
"repo": "dotsilva/omarchy-purplewave-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
"id": "rainy-night",
"name": "Rainy Night",
"repo": "atif-1402/omarchy-rainynight-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
"id": "rdddcs",
"name": "Rdddcs",
"repo": "mohamedredachakir/LINUX-OMARCHY-REDDCS",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
"id": "red-monarch",
"name": "Red Monarch",
"repo": "kamatealip/omarchy-red-monarch-theme",
"kind": "ghostty.conf",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
@@ -1025,14 +1075,14 @@
"id": "robco",
"name": "Robco",
"repo": "signaldirective/robco-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
"id": "robco-mojave",
"name": "Robco Mojave",
"repo": "signaldirective/robco-mojave",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
@@ -1046,7 +1096,7 @@
"id": "roseofdune",
"name": "Roseofdune",
"repo": "HANCORE-linux/omarchy-roseofdune-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": false
},
{
@@ -1084,6 +1134,13 @@
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
"id": "seashells",
"name": "Seashells",
"repo": "odysseyalive/omarchy-seashells-theme",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
"id": "serenity",
"name": "Serenity",
@@ -1109,6 +1166,27 @@
"id": "snow-black",
"name": "Snow Black",
"repo": "ankur311sudo/snow_black",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
"id": "solarized",
"name": "Solarized",
"repo": "Gazler/omarchy-solarized-theme",
"kind": "alacritty.toml",
"dark": true
},
{
"id": "solarized-light",
"name": "Solarized Light",
"repo": "dfrico/omarchy-solarized-light-theme",
"kind": "alacritty.toml",
"dark": false
},
{
"id": "solarized-osaka",
"name": "Solarized Osaka",
"repo": "motorsss/omarchy-solarizedosaka-theme",
"kind": "alacritty.toml",
"dark": true
},
@@ -1116,21 +1194,21 @@
"id": "space-bound",
"name": "Space Bound",
"repo": "Deoxizn/omarchy-space-bound-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
"id": "space-monkey",
"name": "Space Monkey",
"repo": "TyRichards/omarchy-space-monkey-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
"id": "spark",
"name": "Spark",
"repo": "stefanomainardi/omarchy-sf-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
@@ -1172,7 +1250,7 @@
"id": "synthetica",
"name": "Synthetica",
"repo": "stannorbvb-cmd/synthetica",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
@@ -1193,7 +1271,7 @@
"id": "tarot",
"name": "Tarot",
"repo": "jjdizz1l/base16-tarot",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
@@ -1207,21 +1285,21 @@
"id": "terramour",
"name": "Terramour",
"repo": "atif-1402/omarchy-terramour-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
"id": "thegreek",
"name": "Thegreek",
"repo": "HANCORE-linux/omarchy-thegreek-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": false
},
{
"id": "turbonite",
"name": "Turbonite",
"repo": "HANCORE-linux/omarchy-turbonite-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
@@ -1242,14 +1320,14 @@
"id": "unicorn-dream",
"name": "Unicorn Dream",
"repo": "Deoxizn/omarchy-unicorn-dream-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": false
},
{
"id": "van-gogh",
"name": "Van Gogh",
"repo": "Nirmal314/omarchy-van-gogh-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
@@ -1263,7 +1341,7 @@
"id": "velvet-night",
"name": "Velvet Night",
"repo": "HANCORE-linux/omarchy-velvetnight-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
@@ -1277,7 +1355,7 @@
"id": "vhs80",
"name": "Vhs80",
"repo": "tahayvr/omarchy-vhs80-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
@@ -1291,7 +1369,7 @@
"id": "void",
"name": "Void",
"repo": "vyrx-dev/omarchy-void-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": true
},
{
@@ -1319,7 +1397,7 @@
"id": "white-gold",
"name": "White Gold",
"repo": "HANCORE-linux/omarchy-whitegold-theme",
"kind": "alacritty.toml",
"kind": "colors.toml (16-colour ANSI)",
"dark": false
},
{
+9 -2
View File
@@ -49,6 +49,13 @@ export function mapPalette(p: Palette): Tokens {
// miasma at 4.00 — close enough to look fine and still fail, which is the kind of near-miss that a
// person eyeballing a screenshot would have shipped.
const fgMuted = ensureContrast(p.lightForeground, s.high);
// Same reasoning as `fgMuted`, for the same surface: `--accent` and `--secondary` are BOTH `s.high`,
// so their text has to be checked against `s.high` too. It was deriving from `fgRaised` — the weight
// for `s.raised` — which is the identical near-miss the comment above describes, just one token over.
// A no-op for all 22 official palettes (each already clears 4.5:1 on `s.high` by 1.4x or more, and
// `ensureContrast` returns its input untouched when it passes); what it fixes is the ported palettes
// whose foreground sits between the two surfaces' thresholds.
const fgHigh = ensureContrast(p.foreground, s.high);
const fgFaint = ensureContrast(p.darkForeground, s.raised, UI);
/**
@@ -88,13 +95,13 @@ export function mapPalette(p: Palette): Tokens {
'--muted': s.high,
'--muted-foreground': fgMuted,
'--accent': s.high,
'--accent-foreground': fgRaised,
'--accent-foreground': fgHigh,
// ── Actions ──
'--primary': accent,
'--primary-foreground': on(accent),
'--secondary': s.high,
'--secondary-foreground': fgRaised,
'--secondary-foreground': fgHigh,
'--cta': accent,
'--cta-foreground': on(accent),
'--ctahover': mix(accent, s.dark ? '#ffffff' : '#000000', 0.12),