dotfiles/private_dot_config/kitty/private_executable_repair-auto-themes.sh
Anton Volnuhin 8c9e5e2c99 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.
2026-08-06 14:34:19 +03:00

71 lines
2.6 KiB
Bash

#!/bin/sh
set -eu
# Settings the generated theme files must carry whatever theme was saved into
# them. kitty applies <appearance>-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
# before failing -- so try one at a time and only accept an octal answer.
file_mode() {
_m=$(stat -c '%a' "$1" 2>/dev/null) || _m=''
case "$_m" in
[0-7][0-7][0-7] | [0-7][0-7][0-7][0-7]) printf '%s\n' "$_m"; return 0 ;;
esac
_m=$(stat -f '%Lp' "$1" 2>/dev/null) || _m=''
case "$_m" in
[0-7][0-7][0-7] | [0-7][0-7][0-7][0-7]) printf '%s\n' "$_m"; return 0 ;;
esac
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
tmp=$(mktemp "$config_file.tmp.XXXXXX")
trap 'rm -f "$tmp"' EXIT HUP INT TERM
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