From 91592c589368a5309c254be39b1382d0ee1d1dd1 Mon Sep 17 00:00:00 2001 From: Dmitry Dementiev Date: Sun, 26 Jul 2026 17:30:42 +0300 Subject: [PATCH] =?UTF-8?q?feat(kitty):=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20stow-=D0=BF=D0=B0=D0=BA=D0=B5=D1=82=20?= =?UTF-8?q?=D1=81=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B8=D0=B3=D0=BE=D0=BC=20?= =?UTF-8?q?=D0=B8=20=D1=82=D0=B5=D0=BC=D0=BE=D0=B9=20kitty?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Зачем: - конфиг kitty не был под контролем версий, а свёрнутый stow-каталог приводил бы к попаданию рантайм-файлов kitty в репозиторий. - Что: - добавлен пакет kitty с минимальным kitty.conf и current-theme.conf вместо 112 КБ sample-конфига от старой версии. - в install.sh kitty добавлен в PACKAGES, а ~/.config/kitty создаётся заранее настоящим каталогом, чтобы stow линковал по файлам. - тест folding переведён с невыпиленного zed на kitty, устаревшая проверка ~/.config/zed в тесте миграции заменена на assert_not_exists. - Проверка: - bash tests/test_install.sh --- README.md | 1 + install.sh | 10 ++++- kitty/.config/kitty/current-theme.conf | 51 ++++++++++++++++++++++++++ kitty/.config/kitty/kitty.conf | 15 ++++++++ tests/test_install.sh | 29 ++++++++++----- 5 files changed, 96 insertions(+), 10 deletions(-) create mode 100644 kitty/.config/kitty/current-theme.conf create mode 100644 kitty/.config/kitty/kitty.conf diff --git a/README.md b/README.md index e07c38f..7244dae 100644 --- a/README.md +++ b/README.md @@ -52,6 +52,7 @@ Chezmoi использует отдельный source dir `chezmoi/` внутр | `tmux` | Два префикса (`Ctrl+b`, `Ctrl+Space`), vi-режим, split по `\|` / `-` | | `vim` | Минимальный .vimrc без плагинов, 2 пробела, leader = `Space` | | `wezterm` | Общий для Linux и Windows конфиг: одинаковые оформление и горячие клавиши | +| `kitty` | `kitty.conf` и тема; `~/.config/kitty` остаётся настоящим каталогом, чтобы файлы kitty не попадали в репозиторий | | `zed` | Конфигурация Zed редактора | | `vscode` | `server-env-setup` для VS Code Server в WSL: секреты + авто-прокси | diff --git a/install.sh b/install.sh index 6d307a6..a0bd5d7 100755 --- a/install.sh +++ b/install.sh @@ -302,7 +302,7 @@ if ! command -v "$STOW_BIN" &>/dev/null; then exit 1 fi -PACKAGES=(bash tmux vim wezterm vscode agents codex gemini proxy-client) +PACKAGES=(bash tmux vim wezterm kitty vscode agents codex gemini proxy-client) AVAILABLE_PACKAGES=() info "Применяю stow пакеты..." @@ -333,6 +333,14 @@ if [ -d "$HOME/.config" ] && [ ! -L "$HOME/.config" ] \ mkdir -p "$HOME/.config/proxy-client" fi +# ~/.config/kitty создаётся заранее настоящим каталогом, чтобы stow не свернул +# его в один симлинк: kitty пишет туда свои файлы (kitty.conf.bak от +# `kitten themes`), и при свёрнутом каталоге они попадали бы в репозиторий. +if [ -d "$HOME/.config" ] && [ ! -L "$HOME/.config" ] \ + && [ ! -L "$HOME/.config/kitty" ]; then + mkdir -p "$HOME/.config/kitty" +fi + if [ "${#AVAILABLE_PACKAGES[@]}" -gt 0 ]; then stow_package "${AVAILABLE_PACKAGES[@]}" fi diff --git a/kitty/.config/kitty/current-theme.conf b/kitty/.config/kitty/current-theme.conf new file mode 100644 index 0000000..6a4892e --- /dev/null +++ b/kitty/.config/kitty/current-theme.conf @@ -0,0 +1,51 @@ +# vim:ft=kitty + +## name: Adwaita dark +## license: MIT +## author: Emil Löfquist (https://github.com/ewal) +## upstream: https://github.com/ewal/kitty-adwaita/blob/main/adwaita_dark.conf +## blurb: Adwaita dark - based on https://github.com/Mofiqul/adwaita.nvim + +background #1d1d20 +foreground #deddda + +selection_background #303030 +selection_foreground #c0bfbc + +url_color #1a5fb4 + +wayland_titlebar_color system +macos_titlebar_color system + +cursor #deddda +cursor_text_color #1d1d20 + +active_border_color #4f4f4f +inactive_border_color #282828 +bell_border_color #ed333b +visual_bell_color none + +active_tab_background #242424 +active_tab_foreground #fcfcfc +inactive_tab_background #303030 +inactive_tab_foreground #b0afac +tab_bar_background none +tab_bar_margin_color none + +color0 #1d1d20 +color1 #ed333b +color2 #57e389 +color3 #ff7800 +color4 #62a0ea +color5 #9141ac +color6 #5bc8af +color7 #deddda + +color8 #9a9996 +color9 #f66151 +color10 #8ff0a4 +color11 #ffa348 +color12 #99c1f1 +color13 #dc8add +color14 #93ddc2 +color15 #f6f5f4 diff --git a/kitty/.config/kitty/kitty.conf b/kitty/.config/kitty/kitty.conf new file mode 100644 index 0000000..b7ee987 --- /dev/null +++ b/kitty/.config/kitty/kitty.conf @@ -0,0 +1,15 @@ +# vim:fileencoding=utf-8:ft=kitty + +# Только собственные настройки. Полный образец опций с комментариями: +# kitty +runpy 'from kitty.config import commented_out_default_config; print(commented_out_default_config())' + +font_family family="JetBrains Mono" +bold_font auto +italic_font auto +bold_italic_font auto + +# Блок ниже перезаписывает `kitten themes`, править вручную не нужно. +# BEGIN_KITTY_THEME +# Adwaita dark +include current-theme.conf +# END_KITTY_THEME diff --git a/tests/test_install.sh b/tests/test_install.sh index c412699..f91795b 100755 --- a/tests/test_install.sh +++ b/tests/test_install.sh @@ -37,7 +37,7 @@ setup_fixture() { # zed/.config/opencode и т.п.) весят гигабайты, переполняют /tmp и ломают # stow конфликтами, поэтому в тестовое дерево не попадает. git -C "$REPO_ROOT" ls-files -z --cached -- \ - install.sh bash tmux vim zed vscode agents opencode codex gemini \ + install.sh bash tmux vim zed kitty vscode agents opencode codex gemini \ claude proxy-client scripts \ | tar -C "$REPO_ROOT" --null -T - -cf - \ | tar -xf - -C "$repo_root" @@ -114,24 +114,33 @@ test_fresh_install_uses_home_target() { assert_not_exists "$fixture/.bash_custom" } -test_fresh_install_does_not_fold_config_into_zed() { +test_fresh_install_does_not_fold_config_into_kitty() { local fixture repo_root home_dir target expected fixture="$(setup_fixture)" repo_root="$fixture/repo" home_dir="$fixture/home" mkdir -p "$home_dir" - # Неполный клон: zed остаётся единственным stow-пакетом с каталогом .config. + # Неполный клон: kitty остаётся единственным stow-пакетом с каталогом .config. mv "$repo_root/proxy-client" "$fixture/proxy-client-disabled" run_install "$repo_root" "$home_dir" env WSL_DISTRO_NAME= INSTALL_INTERACTIVE_MODE=never >"$fixture/install.out" [ -d "$home_dir/.config" ] || fail "Expected ~/.config directory" [ ! -L "$home_dir/.config" ] || fail "Expected ~/.config to stay a real directory" - [ -L "$home_dir/.config/zed" ] || fail "Expected ~/.config/zed symlink" - target="$(readlink -f "$home_dir/.config/zed")" - expected="$(readlink -f "$repo_root/zed/.config/zed")" - [ "$target" = "$expected" ] || fail "~/.config/zed points to $target, expected $expected" + # Каталог остаётся настоящим, симлинки ставятся по файлам: kitty пишет в + # ~/.config/kitty свои файлы, и они не должны попадать в репозиторий. + [ -d "$home_dir/.config/kitty" ] || fail "Expected ~/.config/kitty directory" + [ ! -L "$home_dir/.config/kitty" ] || fail "Expected ~/.config/kitty to stay a real directory" + [ -L "$home_dir/.config/kitty/kitty.conf" ] || fail "Expected ~/.config/kitty/kitty.conf symlink" + [ -L "$home_dir/.config/kitty/current-theme.conf" ] || fail "Expected ~/.config/kitty/current-theme.conf symlink" + target="$(readlink -f "$home_dir/.config/kitty/kitty.conf")" + expected="$(readlink -f "$repo_root/kitty/.config/kitty/kitty.conf")" + [ "$target" = "$expected" ] || fail "~/.config/kitty/kitty.conf points to $target, expected $expected" + + # Файл, созданный kitty рядом с управляемыми, остаётся вне репозитория. + printf '%s\n' '# backup' > "$home_dir/.config/kitty/kitty.conf.bak" + assert_not_exists "$repo_root/kitty/.config/kitty/kitty.conf.bak" } test_migrates_legacy_zed_config_symlink() { @@ -155,7 +164,9 @@ test_migrates_legacy_zed_config_symlink() { [ -d "$home_dir/.config" ] || fail "Expected migrated ~/.config directory" [ ! -L "$home_dir/.config" ] || fail "Expected migrated ~/.config to stop being a symlink" - [ -L "$home_dir/.config/zed" ] || fail "Expected managed ~/.config/zed symlink" + # zed больше не stow-пакет (см. PACKAGES), поэтому после миграции каталог + # zed остаётся в репозитории и в ~/.config не появляется. + assert_not_exists "$home_dir/.config/zed" [ -d "$home_dir/.config/btop" ] || fail "Expected btop config to be migrated" [ ! -L "$home_dir/.config/btop" ] || fail "Expected btop config outside the repository" [ -f "$home_dir/.config/proxy-client/default.url" ] || fail "Expected profile to be migrated" @@ -527,7 +538,7 @@ main() { command -v stow >/dev/null 2>&1 || fail "stow is required for tests" test_fresh_install_uses_home_target - test_fresh_install_does_not_fold_config_into_zed + test_fresh_install_does_not_fold_config_into_kitty test_migrates_legacy_zed_config_symlink test_stops_legacy_migration_when_listing_fails test_does_not_migrate_unrelated_config_symlink