From 8c9e5e2c9958915814f1c9bed0d0d13a26e104f3 Mon Sep 17 00:00:00 2001 From: Anton Volnuhin Date: Thu, 6 Aug 2026 14:34:19 +0300 Subject: [PATCH] kitty: keep the tab bar on the terminal background Catppuccin Latte sets tab_bar_background #BCC0CC, a grey noticeably darker than its #EFF1F5 background, so in light mode the tab bar sat on a band of its own colour. kitty.conf leaves the setting commented out -- kitty's default is to follow the terminal background -- but the generated *-theme.auto.conf files are applied with priority over kitty.conf, so the theme won and there was nowhere left to override it. repair-auto-themes.sh already normalises macos_titlebar_color for the same reason; give tab_bar_background the same treatment. The canonical copies under theme-modes stay exactly as the themes kitten saved them. Also picks up the current theme choices: SpaceGray Eighties for dark, Catppuccin Latte for light. --- .../private_executable_repair-auto-themes.sh | 54 ++++++-- .../executable_verify_auto_themes.sh | 8 +- .../private_executable_test_theme_mode.sh | 40 ++++++ .../kitty/theme-modes/private_dark.conf | 48 +++---- .../kitty/theme-modes/private_light.conf | 130 ++++++++++-------- 5 files changed, 186 insertions(+), 94 deletions(-) diff --git a/private_dot_config/kitty/private_executable_repair-auto-themes.sh b/private_dot_config/kitty/private_executable_repair-auto-themes.sh index 077c829..e876889 100644 --- a/private_dot_config/kitty/private_executable_repair-auto-themes.sh +++ b/private_dot_config/kitty/private_executable_repair-auto-themes.sh @@ -2,6 +2,22 @@ set -eu +# Settings the generated theme files must carry whatever theme was saved into +# them. kitty applies -theme.auto.conf after -- and with priority +# over -- kitty.conf, so a theme naming one of these wins and there is nowhere +# else left to say otherwise: +# +# macos_titlebar_color background titlebar follows the theme's background +# tab_bar_background none tab bar uses the terminal background, +# kitty's default and what kitty.conf asks +# for; Catppuccin Latte and others pin a +# contrasting grey, which leaves the tab +# bar a visibly different colour from the +# window it sits above +# +# The canonical copies in ./theme-modes stay exactly as the themes kitten wrote +# them; only these generated files are normalised. + # Permission bits of a file, or 600 if they cannot be read. GNU stat spells this # `-c %a` while BSD/macOS spells it `-f %Lp`, and each mis-parses the other's # form -- GNU treats `-f` as --file-system and prints a block of filesystem info @@ -18,27 +34,37 @@ file_mode() { printf '600\n' } +# The theme with those settings stripped and re-appended in a fixed form. +# Trailing blank lines go too, so running this over its own output reproduces it +# byte for byte and repeated repairs cannot make the file grow. +normalised() { + awk ' + $1 == "macos_titlebar_color" || $1 == "tab_bar_background" { next } + { line[++n] = $0 } + END { + while (n > 0 && line[n] ~ /^[ \t]*$/) n-- + for (i = 1; i <= n; i++) print line[i] + } + ' "$1" + printf '\nmacos_titlebar_color background\ntab_bar_background none\n' +} + config_dir=${1:-"$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)"} for appearance in dark light no-preference; do config_file="$config_dir/$appearance-theme.auto.conf" [ -f "$config_file" ] || continue - if awk ' - $1 == "macos_titlebar_color" { - count++ - if ($2 == "background") correct++ - } - END { exit !(count == 1 && correct == 1) } - ' "$config_file"; then - continue - fi - tmp=$(mktemp "$config_file.tmp.XXXXXX") trap 'rm -f "$tmp"' EXIT HUP INT TERM - awk '$1 != "macos_titlebar_color"' "$config_file" > "$tmp" - printf '\nmacos_titlebar_color background\n' >> "$tmp" - chmod "$(file_mode "$config_file")" "$tmp" - mv -f "$tmp" "$config_file" + + normalised "$config_file" > "$tmp" + if cmp -s "$tmp" "$config_file"; then + rm -f "$tmp" + else + chmod "$(file_mode "$config_file")" "$tmp" + mv -f "$tmp" "$config_file" + fi + trap - EXIT HUP INT TERM done diff --git a/private_dot_config/kitty/private_tests/executable_verify_auto_themes.sh b/private_dot_config/kitty/private_tests/executable_verify_auto_themes.sh index 7020439..356d4f8 100644 --- a/private_dot_config/kitty/private_tests/executable_verify_auto_themes.sh +++ b/private_dot_config/kitty/private_tests/executable_verify_auto_themes.sh @@ -21,7 +21,13 @@ if options.macos_titlebar_color != 1: f"{sys.argv[2]} automatic Kitty theme does not use its background " "for the macOS titlebar" ) +if options.tab_bar_background is not None: + raise SystemExit( + f"{sys.argv[2]} automatic Kitty theme pins its own tab bar background " + f"({options.tab_bar_background!r}) instead of following the terminal " + "background" + ) ' "$config_file" "$appearance" done -echo "ok - automatic Kitty themes match their macOS titlebars" +echo "ok - automatic Kitty themes match their macOS titlebars and tab bars" diff --git a/private_dot_config/kitty/private_tests/private_executable_test_theme_mode.sh b/private_dot_config/kitty/private_tests/private_executable_test_theme_mode.sh index 7f00381..23e86d6 100644 --- a/private_dot_config/kitty/private_tests/private_executable_test_theme_mode.sh +++ b/private_dot_config/kitty/private_tests/private_executable_test_theme_mode.sh @@ -148,6 +148,46 @@ expect "adoption is idempotent (dark)" \ expect "adoption is idempotent (light)" \ "$config_dir/theme-modes/light.conf" "$BYPASS_LIGHT" +# --- a theme that pins its own tab bar background is neutralised ---------- +# kitty applies these generated files with priority over kitty.conf, so a theme +# like Catppuccin Latte that sets tab_bar_background leaves the tab bar a +# different colour from the window and kitty.conf cannot override it. +echo auto >"$config_dir/theme-mode" +printf 'background %s\ntab_bar_background #bcc0cc\n' "$LIGHT" \ + >"$config_dir/theme-modes/light.conf" +"$root/apply-theme-mode.sh" "$config_dir" + +tab_bar_lines() { + grep -c '^tab_bar_background' "$1" || true +} + +[ "$(awk '$1 == "tab_bar_background" { print $2 }' \ + "$config_dir/light-theme.auto.conf")" = none ] || { + echo "not ok - generated theme keeps the theme's own tab bar background" >&2 + exit 1 +} +[ "$(tab_bar_lines "$config_dir/light-theme.auto.conf")" -eq 1 ] || { + echo "not ok - generated theme has more than one tab_bar_background" >&2 + exit 1 +} +grep -q '#bcc0cc' "$config_dir/theme-modes/light.conf" || { + echo "not ok - the canonical copy should keep the theme as it was saved" >&2 + exit 1 +} + +# repairing twice must not append a second copy or grow the file +before=$(wc -c <"$config_dir/light-theme.auto.conf") +"$root/apply-theme-mode.sh" "$config_dir" +[ "$(wc -c <"$config_dir/light-theme.auto.conf")" -eq "$before" ] || { + echo "not ok - repeated repair grows the generated theme" >&2 + exit 1 +} +expect "the theme itself still applies" \ + "$config_dir/light-theme.auto.conf" "$LIGHT" + +printf 'background %s\nmacos_titlebar_color background\n' "$LIGHT" \ + >"$config_dir/theme-modes/light.conf" + # --- a bare `theme` records auto when it lands on the macOS appearance ---- echo auto >"$config_dir/theme-mode" "$root/apply-theme-mode.sh" "$config_dir" diff --git a/private_dot_config/kitty/theme-modes/private_dark.conf b/private_dot_config/kitty/theme-modes/private_dark.conf index acbd293..d516afa 100644 --- a/private_dot_config/kitty/theme-modes/private_dark.conf +++ b/private_dot_config/kitty/theme-modes/private_dark.conf @@ -1,29 +1,29 @@ -background #090200 -foreground #a4a1a1 -cursor #a4a1a1 -selection_background #494542 -color0 #090200 -color8 #5b5754 -color1 #da2c20 -color9 #e8bacf -color2 #00a152 -color10 #3a3332 -color3 #fcec02 -color11 #494542 -color4 #00a0e4 -color12 #7f7c7b -color5 #a06994 -color13 #d6d4d3 -color6 #b5e4f4 -color14 #ccab53 -color7 #a4a1a1 -color15 #f7f7f7 -selection_foreground #090200 +background #212121 +foreground #bdb9ae +cursor #bbbbbb +selection_background #262e35 +color0 #15171c +color8 #545454 +color1 #ec5f67 +color9 #ff6973 +color2 #80a763 +color10 #93d393 +color3 #fdc253 +color11 #ffd156 +color4 #5485c0 +color12 #4d83d0 +color5 #bf83c0 +color13 #ff55ff +color6 #57c2c0 +color14 #83e8e4 +color7 #eeece7 +color15 #ffffff +selection_foreground #212121 # START_AUTOGENERATED_TAB_STYLE # Feel free to update these colors manually and remove these comments. active_tab_foreground #eeeeee -active_tab_background #494542 -inactive_tab_foreground #a4a1a1 -inactive_tab_background #070200 +active_tab_background #262e35 +inactive_tab_foreground #bdb9ae +inactive_tab_background #1a1a1a # END_AUTOGENERATED_TAB_STYLE diff --git a/private_dot_config/kitty/theme-modes/private_light.conf b/private_dot_config/kitty/theme-modes/private_light.conf index b94e593..27835ec 100644 --- a/private_dot_config/kitty/theme-modes/private_light.conf +++ b/private_dot_config/kitty/theme-modes/private_light.conf @@ -1,60 +1,80 @@ -## name: GrokDay -## author: xAI (grok build), ported by Anton -## license: see https://github.com/xai-org/grok-build -## upstream: https://github.com/xai-org/grok-build/blob/main/crates/codegen/xai-grok-pager-render/src/theme/grokday.rs -## blurb: The GrokDay theme from grok build's TUI: light counterpart with deepened accents. +# vim:ft=kitty -# GrokDay — neutral light gray base with deepened accents. -# -# Ported from grok build's TUI theme: -# xai-org/grok-build -# crates/codegen/xai-grok-pager-render/src/theme/grokday.rs -# -# Light counterpart to GrokNight: same hue family, darkened for contrast on a -# light background. background is grok's bg_base, the surface the TUI actually -# paints; bg_terminal (#f5f5f5) is for terminal-output blocks and is unused. -# cursor is accent_user, which grok itself sets over OSC 12 on startup. +## name: Catppuccin-Latte +## author: Pocco81 (https://github.com/Pocco81) +## license: MIT +## upstream: https://github.com/catppuccin/kitty/blob/main/themes/latte.conf +## blurb: Soothing pastel theme for the high-spirited! -background #eeeeee -foreground #262626 -cursor #444444 -cursor_text_color #eeeeee -selection_background #c6c6c6 -selection_foreground #262626 -url_color #2f64d2 -# black — text_primary / dark5 -color0 #262626 -color8 #626262 -# red — red1 / red -color1 #af2323 -color9 #cd3048 -# green — green / green1 -color2 #378e23 -color10 #0c947c -# yellow — yellow / orange -color3 #a27612 -color11 #c3691e -# blue — blue0 / blue -color4 #28448a -color12 #2f64d2 -# magenta — purple / magenta (grok's signature accent) -color5 #6c3eb2 -color13 #7d4bc6 -# cyan — teal / cyan -color6 #0a8e70 -color14 #0082aa -# white — fg_gutter / bg (the palette's brightest; bg_storm is now the -# background itself, so it would be invisible here) -color7 #b2b2b2 -color15 #f5f5f5 -# START_AUTOGENERATED_TAB_STYLE -# Feel free to update these colors manually and remove these comments. -active_tab_foreground #f5f5f5 -active_tab_background #7d4bc6 -inactive_tab_foreground #7d4bc6 -inactive_tab_background #f5f5f5 -# END_AUTOGENERATED_TAB_STYLE +# The basic colors +foreground #4C4F69 +background #EFF1F5 +selection_foreground #EFF1F5 +selection_background #DC8A78 -macos_titlebar_color background +# Cursor colors +cursor #DC8A78 +cursor_text_color #EFF1F5 + +# URL underline color when hovering with mouse +url_color #DC8A78 + +# Kitty window border colors +active_border_color #7287FD +inactive_border_color #9CA0B0 +bell_border_color #DF8E1D + +# OS Window titlebar colors +wayland_titlebar_color system +macos_titlebar_color system + +# Tab bar colors +active_tab_foreground #EFF1F5 +active_tab_background #8839EF +inactive_tab_foreground #4C4F69 +inactive_tab_background #9CA0B0 +tab_bar_background #BCC0CC + +# Colors for marks (marked text in the terminal) +mark1_foreground #EFF1F5 +mark1_background #7287fD +mark2_foreground #EFF1F5 +mark2_background #8839EF +mark3_foreground #EFF1F5 +mark3_background #209FB5 + +# The 16 terminal colors + +# black +color0 #5C5F77 +color8 #6C6F85 + +# red +color1 #D20F39 +color9 #D20F39 + +# green +color2 #40A02B +color10 #40A02B + +# yellow +color3 #DF8E1D +color11 #DF8E1D + +# blue +color4 #1E66F5 +color12 #1E66F5 + +# magenta +color5 #EA76CB +color13 #EA76CB + +# cyan +color6 #179299 +color14 #179299 + +# white +color7 #ACB0BE +color15 #BCC0CC