fix: add bg/fg aliases for theme color resolution (#6546)
* fix: add bg/fg aliases for theme color resolution Themes define bg/fg but the template system expects background/foreground. The fallback chain only checked color0/color7, leaving background/foreground empty for themes using bg/fg naming. * Complete legacy theme palette compatibility --------- Co-authored-by: David Heinemeier Hansson <david@hey.com>
This commit is contained in:
co-authored by
David Heinemeier Hansson
parent
fd02c26230
commit
caeffdc27b
@@ -221,7 +221,12 @@ mode = "light"
|
||||
accent = "#336699"
|
||||
hyprland_active_border = "rgba(010203ee) rgba(040506ee) 45deg"
|
||||
background = "#000000"
|
||||
dark_background = "#010101"
|
||||
darker_background = "#020202"
|
||||
lighter_background = "#030303"
|
||||
foreground = "#ffffff"
|
||||
dark_foreground = "#cccccc"
|
||||
light_foreground = "#dddddd"
|
||||
selection = "#808080"
|
||||
red = "#ff0000"
|
||||
green = "#00ff00"
|
||||
@@ -237,6 +242,16 @@ bright_blue = "#1111ff"
|
||||
bright_magenta = "#ff11ff"
|
||||
bright_cyan = "#11ffff"
|
||||
bright_foreground = "#eeeeee"
|
||||
|
||||
# Canonical values must win when a transitional theme defines both forms.
|
||||
bg = "#abcdef"
|
||||
dark_bg = "#abcdef"
|
||||
darker_bg = "#abcdef"
|
||||
lighter_bg = "#abcdef"
|
||||
fg = "#abcdef"
|
||||
dark_fg = "#abcdef"
|
||||
light_fg = "#abcdef"
|
||||
bright_fg = "#abcdef"
|
||||
EOF
|
||||
|
||||
cat >"$USER_THEMED/mix-test.txt.tpl" <<'EOF'
|
||||
@@ -264,6 +279,15 @@ bright-magenta={{ bright_magenta }}
|
||||
legacy-bright-purple={{ bright_purple }}
|
||||
background={{ background }}
|
||||
foreground={{ foreground }}
|
||||
legacy-background={{ bg }}
|
||||
legacy-dark-background={{ dark_bg }}
|
||||
legacy-darker-background={{ darker_bg }}
|
||||
legacy-lighter-background={{ lighter_bg }}
|
||||
legacy-foreground={{ fg }}
|
||||
legacy-dark-foreground={{ dark_fg }}
|
||||
legacy-light-foreground={{ light_fg }}
|
||||
legacy-bright-foreground={{ bright_fg }}
|
||||
legacy-mix={{ mix bg fg 50% }}
|
||||
selection-background={{ selection_background }}
|
||||
selection-foreground={{ selection_foreground }}
|
||||
cursor-alias={{ cursor }}
|
||||
@@ -290,10 +314,78 @@ grep -qx 'bright-magenta=#ff11ff' "$NEXT_THEME/alias-test.txt" || fail "theme te
|
||||
grep -qx 'legacy-bright-purple=#ff11ff' "$NEXT_THEME/alias-test.txt" || fail "theme template bright purple alias works"
|
||||
grep -qx 'background=#000000' "$NEXT_THEME/alias-test.txt" || fail "theme template resolves background"
|
||||
grep -qx 'foreground=#ffffff' "$NEXT_THEME/alias-test.txt" || fail "theme template resolves foreground"
|
||||
grep -qx 'legacy-background=#000000' "$NEXT_THEME/alias-test.txt" || fail "theme template exposes legacy bg alias"
|
||||
grep -qx 'legacy-dark-background=#010101' "$NEXT_THEME/alias-test.txt" || fail "theme template exposes legacy dark_bg alias"
|
||||
grep -qx 'legacy-darker-background=#020202' "$NEXT_THEME/alias-test.txt" || fail "theme template exposes legacy darker_bg alias"
|
||||
grep -qx 'legacy-lighter-background=#030303' "$NEXT_THEME/alias-test.txt" || fail "theme template exposes legacy lighter_bg alias"
|
||||
grep -qx 'legacy-foreground=#ffffff' "$NEXT_THEME/alias-test.txt" || fail "theme template exposes legacy fg alias"
|
||||
grep -qx 'legacy-dark-foreground=#cccccc' "$NEXT_THEME/alias-test.txt" || fail "theme template exposes legacy dark_fg alias"
|
||||
grep -qx 'legacy-light-foreground=#dddddd' "$NEXT_THEME/alias-test.txt" || fail "theme template exposes legacy light_fg alias"
|
||||
grep -qx 'legacy-bright-foreground=#eeeeee' "$NEXT_THEME/alias-test.txt" || fail "theme template exposes legacy bright_fg alias"
|
||||
grep -qx 'legacy-mix=#808080' "$NEXT_THEME/alias-test.txt" || fail "theme template mix helper accepts legacy palette aliases"
|
||||
grep -qx 'selection-background=#808080' "$NEXT_THEME/alias-test.txt" || fail "theme template derives selection background from selection"
|
||||
grep -qx 'selection-foreground=#eeeeee' "$NEXT_THEME/alias-test.txt" || fail "theme template derives selection foreground from bright_foreground"
|
||||
grep -qx 'cursor-alias=#eeeeee' "$NEXT_THEME/alias-test.txt" || fail "theme template derives cursor alias from bright_foreground"
|
||||
pass "theme template semantic aliases expose legacy colorN helpers"
|
||||
pass "theme template semantic aliases expose legacy palette helpers"
|
||||
|
||||
LEGACY_COLORS_FILE="$PI_TMPDIR/legacy-colors.toml"
|
||||
cat >"$LEGACY_COLORS_FILE" <<'EOF'
|
||||
mode = "dark"
|
||||
accent = "#336699"
|
||||
selection = "#292929"
|
||||
muted = "#404040"
|
||||
bg = "#101010"
|
||||
dark_bg = "#111111"
|
||||
darker_bg = "#121212"
|
||||
lighter_bg = "#131313"
|
||||
fg = "#f0f0f0"
|
||||
dark_fg = "#d0d0d0"
|
||||
light_fg = "#e0e0e0"
|
||||
bright_fg = "#ffffff"
|
||||
red = "#ff0000"
|
||||
green = "#00ff00"
|
||||
yellow = "#ffff00"
|
||||
blue = "#0000ff"
|
||||
magenta = "#ff00ff"
|
||||
cyan = "#00ffff"
|
||||
bright_red = "#ff1111"
|
||||
bright_green = "#11ff11"
|
||||
bright_yellow = "#ffff11"
|
||||
bright_blue = "#1111ff"
|
||||
bright_magenta = "#ff11ff"
|
||||
bright_cyan = "#11ffff"
|
||||
EOF
|
||||
|
||||
while read -r canonical expected; do
|
||||
actual=$("$ROOT/bin/omarchy-theme-color" --file "$LEGACY_COLORS_FILE" "$canonical")
|
||||
[[ $actual == "$expected" ]] || fail "legacy palette resolves $canonical"
|
||||
done <<'EOF'
|
||||
background #101010
|
||||
dark_background #111111
|
||||
darker_background #121212
|
||||
lighter_background #131313
|
||||
foreground #f0f0f0
|
||||
dark_foreground #d0d0d0
|
||||
light_foreground #e0e0e0
|
||||
bright_foreground #ffffff
|
||||
EOF
|
||||
pass "legacy short palette resolves every canonical neutral color"
|
||||
|
||||
LEGACY_THEME_HOME="$PI_TMPDIR/legacy-theme-home"
|
||||
LEGACY_NEXT_THEME="$LEGACY_THEME_HOME/.local/state/omarchy/current/next-theme"
|
||||
mkdir -p "$LEGACY_NEXT_THEME"
|
||||
cp "$LEGACY_COLORS_FILE" "$LEGACY_NEXT_THEME/colors.toml"
|
||||
OMARCHY_PATH="$ROOT" HOME="$LEGACY_THEME_HOME" "$ROOT/bin/omarchy-theme-set-templates"
|
||||
grep -qx 'background = #101010' "$LEGACY_NEXT_THEME/ghostty.conf" || fail "legacy theme generates terminal background"
|
||||
grep -qx 'foreground = #f0f0f0' "$LEGACY_NEXT_THEME/ghostty.conf" || fail "legacy theme generates terminal foreground"
|
||||
grep -Fq 'dark_bg = "#111111"' "$LEGACY_NEXT_THEME/neovim.lua" || fail "legacy theme preserves dark_bg in generated editor theme"
|
||||
grep -Fq 'lighter_bg = "#131313"' "$LEGACY_NEXT_THEME/neovim.lua" || fail "legacy theme preserves lighter_bg in generated editor theme"
|
||||
grep -Fq 'dark_fg = "#d0d0d0"' "$LEGACY_NEXT_THEME/neovim.lua" || fail "legacy theme preserves dark_fg in generated editor theme"
|
||||
grep -Fq 'bright_fg = "#ffffff"' "$LEGACY_NEXT_THEME/neovim.lua" || fail "legacy theme preserves bright_fg in generated editor theme"
|
||||
if rg -q '\{\{[^}]+\}\}' "$LEGACY_NEXT_THEME"; then
|
||||
fail "legacy theme renders every template placeholder"
|
||||
fi
|
||||
pass "legacy short palette renders the complete generated theme"
|
||||
|
||||
osc_summary=$("$ROOT/bin/omarchy-theme-osc" "$NEXT_THEME/colors.toml" | python -c 'import sys; data = sys.stdin.buffer.read(); print(data.count(b"]4;"), b"]4;1;#ff0000" in data, b"]4;7;#ffffff" in data, b"]4;15;#eeeeee" in data, b"]12;#eeeeee" in data, b"]17;#808080" in data, b"]19;#eeeeee" in data)')
|
||||
[[ $osc_summary == "16 True True True True True True" ]] || fail "theme OSC aliases semantic colors to ANSI palette"
|
||||
|
||||
Reference in New Issue
Block a user