Я давно привык к тому, что всё настраивается через файл: 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.
