Цветные вкладки iTerm2 — каждый проект своим цветом

У меня одновременно открыто несколько проектов: диссертация, клиентские задачи, личные инструменты. Каждый — в своей вкладке iTerm2. Через час работы я уже не помню, какая вкладка чья.

Решение простое: цвет вкладки = проект. Диссертация всегда зелёная, Klemma жёлтая, Sokin голубой — мозг быстро запоминает.

Как это работает

ZSH поддерживает хук chpwd — он срабатывает при каждом cd. Добавляем в него вызов функции, которая отправляет iTerm2 escape-последовательность для смены цвета вкладки:

printf '\033]6;1;bg;red;brightness;%d\a'   "$R"
printf '\033]6;1;bg;green;brightness;%d\a' "$G"
printf '\033]6;1;bg;blue;brightness;%d\a'  "$B"

Три команды — три канала RGB. iTerm2 читает их и красит вкладку.

Функция _iterm2_project_color сравнивает текущий путь с паттернами проектов через case "$PWD" in ... esac и вызывает нужный RGB. Файл с паттернами генерируется автоматически из JSON-конфига.

Команда proj

Чтобы не лезть в конфиги вручную, написал скрипт ~/bin/proj:

proj list              # все проекты и цвета
proj add sokin         # добавить проект (авто-цвет из палитры)
proj add foo 255 0 0   # добавить с конкретным RGB
proj remove sokin      # удалить
proj scan              # авто-добавить все новые папки из ~/projects/ и _pipeline/

proj scan — особенно удобен: он смотрит в оба источника проектов, дедуплицирует имена и добавляет всё новое. После — генерирует ZSH-файл и просит сделать source ~/.zshrc.

Конфиг хранится в ~/.config/iterm2-projects.json, ZSH-файл с case-паттернами — в ~/.cache/iterm2-project-colors.zsh. .zshrc просто сорсит кэш-файл, не захламляется.

Бонус: шпаргалка при открытии вкладки

Параллельно добавил: при каждом открытии нового терминала показывается компактный список кастомных команд.

╭─ Commands ──────────────────────────────────────╮
│  brain       Second Brain: утренний брифинг     │
│  proj        Tab colors: add · scan · list      │
│  quiz        Claude quiz skill                  │
│  cly         Claude Code без подтверждений      │
╰─────────────────────────────────────────────────╯

Список читается из ~/.config/zsh-commands.conf (формат команда|описание). При source ~/.zshrc не повторяется — спасибо флагу CHEAT_SHOWN в окружении. Команда cheat — показать в любой момент.


Весь код — три файла: ~/bin/proj (~130 строк Python), ~/.config/iterm2-projects.json, ~/.config/zsh-cheatsheet.conf. Никаких зависимостей, только стандартный Python 3 и ZSH.