Я давно привык к тому, что всё настраивается через файл: vim, tmux, zsh, docker-compose — всё в yaml/toml/conf и лежит в git. iTerm на этом фоне всегда немного раздражал: кликаешь по меню, идёшь в Preferences, настраиваешь через GUI, потом пытаешься это как-то экспортнуть.

Kitty — это как neovim, только для терминала. Весь конфиг в одном файле. Перезагрузка без рестарта. И ты точно знаешь, что происходит.

Что сломало меня на iTerm

Не то чтобы iTerm плохой. Просто в какой-то момент начинаешь замечать: ты не управляешь своим терминалом — ты пользуешься тем, что кто-то нажмаклал в GUI.

Главная боль — невозможность нормально держать конфигурацию в файле и воспроизводить её на любой машине за минуту.

Вау-момент

Я понял, что не вернусь, когда запустил Kitty с startup session-файлом.

Окно развернулось на весь экран (не fullscreen, а именно maximized — с доком и менюбаром), автоматически открылись две вкладки:

  • первая: нужный сервис, уже в правильной директории,
  • вторая: Claude для этого же сервиса.

Это выглядело вот так:

os_window_state maximized

new_tab Back console
cd ~/Develop/some_app
launch zsh

new_tab Back Claude
cd ~/Develop/some_app
launch zsh -ic "claude; exec zsh"

Это встроенный механизм Kitty — startup sessions. Никаких скриптов, никаких alias. Путь к файлу сессии указывается прямо в основном kitty.conf:

startup_session ~/.config/kitty/sessions/myapp.conf

Kitty подхватит его при запуске автоматически. Это был момент «окей, всё, я остаюсь».

Разбор kitty.conf по секциям

Шрифты

font_family JetBrainsMono Nerd Font Mono
font_size 12.0
modify_font cell_height 120%
disable_ligatures never

Nerd Font обязателен если используешь starship, neovim с иконками или powerline-таббар. cell_height 120% — чуть больше воздуха между строками, глаза не устают. Лигатуры включены: ->, =>, != отображаются как надо.

Тема

include current-theme.conf

Тему выбираешь интерактивно:

kitty +kitten themes

Я остановился на Catppuccin-Mocha — тёплая тёмная тема, нормально работает и в терминале, и с neovim.

Прозрачность и размытие

background_opacity 0.92
background_blur 25

Слегка прозрачный фон с blur — выглядит чисто, не мешает читать код. На macOS работает из коробки.

Курсор

cursor_shape beam
cursor_beam_thickness 2.0
cursor_blink_interval 0.5
cursor_stop_blinking_after 15.0

Beam-курсор привычен после vim. Мигание останавливается через 15 секунд бездействия — не отвлекает.

Scrollback

scrollback_lines 10000

10k строк — минимум для комфортной работы с логами.

Уведомления

enable_audio_bell no
notify_on_cmd_finish invisible 30

Звуковой звонок отключён. Зато если команда выполняется дольше 30 секунд в фоне — придёт уведомление. Удобно для долгих билдов.

Мышь и URL

copy_on_select yes
detect_urls yes
url_style curly

Выделил — скопировалось. URL подчёркивается, открывается по cmd+click.

Окно

hide_window_decorations titlebar-only
window_padding_width 8
active_border_color #89b4fa
inactive_border_color #313244

Titlebar убран — больше пространства. Активный сплит подсвечивается синим, неактивный — серым. Сразу видно, где ты.

Tab bar

tab_bar_style powerline
tab_powerline_style slanted

Powerline-стиль с наклонными разделителями. Смотрится опрятно, особенно с Catppuccin.

Layouts — сплиты

enabled_layouts splits:split_axis=horizontal,fat,tall,stack

Сплиты — основная причина не использовать tmux для простых сессий.

map f5 launch --location=hsplit --cwd=current
map f6 launch --location=vsplit --cwd=current
map ctrl+shift+z toggle_layout stack

F5/F6 — горизонтальный/вертикальный сплит прямо в текущей директории. ctrl+shift+z — развернуть текущий сплит на весь экран (toggle stack). Без закрытия остальных.

Remote control и shell integration

allow_remote_control yes
shell_integration enabled

Shell integration даёт подсветку промпта, навигацию по командам, scroll to prompt. Remote control позволяет управлять Kitty из скриптов.

Полный kitty.conf

Ниже прикладываю весь конфиг целиком, без сокращений:

# Kitty Configuration
# Путь: ~/.config/kitty/kitty.conf
# Перезагрузка без рестарта: Ctrl+Shift+F5 (Linux) / Ctrl+Cmd+, (macOS)

# ─────────────────────────────────────────────
# 1. ШРИФТЫ
# ─────────────────────────────────────────────
# Установи Nerd Font: https://www.nerdfonts.com/font-downloads
# brew install --cask font-jetbrains-mono-nerd-font  (macOS)
# Или: font_family FiraCode Nerd Font Mono

font_family      JetBrainsMono Nerd Font Mono
bold_font        auto
italic_font      auto
bold_italic_font auto
font_size        12.0

# Межстрочный интервал — чуть увеличен для читаемости
modify_font cell_height 120%

# Лигатуры (->  =>  !=  ===  и т.д.)
disable_ligatures never

# ─────────────────────────────────────────────
# 2. ТЕМА
# ─────────────────────────────────────────────
# Выбрать тему интерактивно: kitty +kitten themes
# После выбора тема сохранится в current-theme.conf

# BEGIN_KITTY_THEME
# Catppuccin-Mocha
include current-theme.conf
# END_KITTY_THEME

# ─────────────────────────────────────────────
# 3. ПРОЗРАЧНОСТЬ И РАЗМЫТИЕ
# ─────────────────────────────────────────────

background_opacity 0.92
background_blur    25

# ─────────────────────────────────────────────
# 4. КУРСОР
# ─────────────────────────────────────────────

cursor_shape           beam
cursor_beam_thickness  2.0
cursor_blink_interval  0.5
cursor_stop_blinking_after 15.0

# Анимация следа курсора (kitty 0.38+)
# cursor_trail          3
# cursor_trail_decay    0.1 0.4
# cursor_trail_start_threshold 2

# ─────────────────────────────────────────────
# 5. SCROLLBACK
# ─────────────────────────────────────────────

scrollback_lines 10000

# ─────────────────────────────────────────────
# 6. ЗВУК И УВЕДОМЛЕНИЯ
# ─────────────────────────────────────────────

enable_audio_bell    no
visual_bell_duration 0.0
bell_on_tab          "🔔 "

# Уведомление при завершении долгой команды (30+ сек)
notify_on_cmd_finish invisible 30

# ─────────────────────────────────────────────
# 7. МЫШЬ И КОПИРОВАНИЕ
# ─────────────────────────────────────────────

copy_on_select         yes
strip_trailing_spaces  smart

# URL
url_style        curly
open_url_with    default
detect_urls      yes

# ─────────────────────────────────────────────
# 8. ОКНО
# ─────────────────────────────────────────────

# Убрать рамку окна (titlebar) — на macOS выглядит чисто
hide_window_decorations titlebar-only

# Отступы внутри окна
window_padding_width  8

# Рамки между сплитами
window_border_width   1pt
active_border_color   #89b4fa
inactive_border_color #313244

draw_minimal_borders  yes
confirm_os_window_close 0

# Начальный размер окна
remember_window_size  yes
initial_window_width  120c
initial_window_height 35c

# ─────────────────────────────────────────────
# 9. TAB BAR
# ─────────────────────────────────────────────

tab_bar_edge         bottom
tab_bar_style        powerline
tab_powerline_style  slanted
tab_bar_min_tabs     2

active_tab_foreground   #1e1e2e
active_tab_background   #89b4fa
active_tab_font_style   bold
inactive_tab_foreground #cdd6f4
inactive_tab_background #313244
inactive_tab_font_style normal

# ─────────────────────────────────────────────
# 10. LAYOUTS (сплиты)
# ─────────────────────────────────────────────

enabled_layouts splits:split_axis=horizontal,fat,tall,stack

# ─────────────────────────────────────────────
# 11. SHELL INTEGRATION & REMOTE CONTROL
# ─────────────────────────────────────────────

allow_remote_control yes
shell_integration    enabled
# shell .   # точка = дефолтный шелл системы (zsh/bash)

# ─────────────────────────────────────────────
# 12. ГОРЯЧИЕ КЛАВИШИ
# ─────────────────────────────────────────────

# --- Сплиты ---
map f5                launch --location=hsplit --cwd=current
map f6                launch --location=vsplit --cwd=current

# Навигация между сплитами
map cmd+shift+h neighboring_window left
map cmd+shift+l neighboring_window right
map cmd+shift+k neighboring_window up
map cmd+shift+j neighboring_window down

# Ресайз сплитов
map ctrl+shift+alt+left  resize_window narrower  2
map ctrl+shift+alt+right resize_window wider     2
map ctrl+shift+alt+up    resize_window taller    2
map ctrl+shift+alt+down  resize_window shorter   2

# --- Табы ---
map ctrl+shift+t      new_tab_with_cwd
map ctrl+shift+w      close_tab
map ctrl+shift+right  next_tab
map ctrl+shift+left   previous_tab
map ctrl+shift+.      move_tab_forward
map ctrl+shift+,      move_tab_backward

map cmd+1 goto_tab 1
map cmd+2 goto_tab 2
map cmd+3 goto_tab 3
map cmd+4 goto_tab 4
map cmd+5 goto_tab 5
map cmd+6 goto_tab 6
map cmd+7 goto_tab 7
map cmd+8 goto_tab 8
map cmd+9 goto_tab 9

# --- Новое окно в текущей директории ---
map ctrl+shift+enter  new_window_with_cwd

# --- Полный экран для текущего сплита (toggle stack layout) ---
map ctrl+shift+z      toggle_layout stack

# --- Перезагрузка конфига ---
# Linux:  Ctrl+Shift+F5 (по умолчанию)
# macOS:  Ctrl+Cmd+, (по умолчанию)

# ─────────────────────────────────────────────
# 13. macOS-СПЕЦИФИЧНОЕ
# ─────────────────────────────────────────────

# Opt работает как Alt для терминальных приложений
macos_option_as_alt yes

# Не закрывать Kitty при закрытии последнего окна
macos_quit_when_last_window_closed no

# Иконка в стиле Catppuccin (положить .icns в ~/.config/kitty/)
# macos_custom_beam_cursor no

# Paste по physical key position (не зависит от раскладки)
map cmd+0x76 paste_from_clipboard

Что поломалось при переходе

Одна реальная проблема: tmux на удалённой машине.

При подключении через ssh + tmux внутри Kitty иногда ломались escape-sequences и цвета. Я починил это через kitty +kitten ssh и добавил условный alias в .zshrc:

backend git:(staging) ✗ cat ~/.zshrc| grep kitty
[ "$TERM" = "xterm-kitty" ] && alias ssh="kitty +kitten ssh"

Kitten ssh автоматически передаёт terminfo на удалённую машину. После этого всё работает корректно.

Итог

Kitty — это терминал, которым ты управляешь, а не терминал, который управляет тобой.

Если ты уже работаешь с neovim, tmux, starship — Kitty встроится в этот пайплайн органично. Всё в одном файле, всё воспроизводимо, всё под контролем.

Startup sessions закрыли для меня последний аргумент в пользу iTerm. Теперь это просто файл в git.