Skip to content

Development (RU)

Baidak.D edited this page Sep 15, 2026 · 5 revisions

English · Русский

Доработка familiar

Homebrew-сборка — для повседневной работы. Чтобы доработать familiar, склонируй репозиторий и переключи конфиг на клон, а по завершении верни релизную сборку — всё на рабочем ~/.config/kitty:

brew tap denoby/familiar https://github.com/DenoBY/familiar
brew install denoby/familiar/familiar
familiar enable --all          # обычное использование — релизная сборка

git clone https://github.com/DenoBY/familiar && cd familiar
./bin/familiar enable --all    # переключить боевой конфиг на этот клон
# правишь plugins/**, reload kitty (Cmd+Ctrl+,) — изменения видны

familiar enable --all          # вернуться на Homebrew-сборку

И familiar из brew, и ./bin/familiar из репо пишут один и тот же ~/.config/kitty/familiar.conf, поэтому переключение — это просто запуск другого, без дублей и без уборки. familiar запекает абсолютные пути от места запуска: brew-сборка → /opt/homebrew/opt/familiar/libexec, клон → твоя папка. familiar status печатает wired root: — установку, которую kitty реально исполняет — рядом с app root: вызванной копии и предупреждает, если они разошлись; familiar disable убирает полностью.

Тесты

unittest из стандартной библиотеки, без внешних зависимостей, гоняются вне kitty:

python3 -m unittest discover -s tests -t tests

Что покрыто — в tests/README.ru.md в репозитории. Стиль проверяет ruff check . (настроен в pyproject.toml).

Иконка приложения

Исходник — config/icon/familiar.svg; из него собираются kitty.app.icns (его familiar enable кладёт в каталог конфига kitty) и familiar.png (логотип в README):

brew install librsvg          # даёт rsvg-convert; iconutil есть в macOS
python3 tools/build_icon.py

В icns попадает не голый арт: macOS рисует squircle в 824 px из холста 1024, и иконка на весь холст выглядит в Dock крупнее соседних. build_icon.py добавляет эти поля (замер совпадает с системными иконками: содержимое — 0.805 холста, поля 25 px при 256×256); в png для README холст остаётся полным.

Свою иконку disable узнаёт побайтовым сравнением с исходником, поэтому пересобирай и коммить оба файла вместе: .icns, не совпавший с установленным, останется на месте как «поставленный пользователем».

Демо-стенд

Все скриншоты этой wiki сняты на воспроизводимом демо-стенде: сгенерированный git-репозиторий с фотогеничной историей и незакоммиченными правками (для review и log), папка с тремя независимыми репозиториями (для их мультирепо-режима) плюс фейковое хранилище Claude Code с живыми сессиями и богатым транскриптом (для session). Когда UI меняется — стенд пересобирается и скрины переснимаются:

python3 tools/demo_stand.py --dir /tmp/familiar-demo    # --wipe для пересоздания

Дальше запускается отдельный инстанс kitty, нацеленный на фейковое хранилище:

FAMILIAR_THEME=ghostty CLAUDE_CONFIG_DIR=/tmp/familiar-demo/claude \
  /Applications/kitty.app/Contents/MacOS/kitty --detach \
  --config <checkout>/config/kitty.conf --directory /tmp/familiar-demo/repo

(Переменные должны попасть в окружение процесса kitty — киты наследуют их оттуда, поэтому запуск из шелла проще всего. --config уводит инстанс от боевого ~/.config/kitty: кадры снимаются в дефолтной теме ghostty, а личный env FAMILIAR_THEME=darcula, запечённый в familiar.conf, иначе перекрасил бы каждый кадр.)

Все кадры wiki снимаются при размере окна 150×45 ячеек (гифка склеивается из одинаковых). Исключение — darcula-кадр: второй инстанс с FAMILIAR_THEME=darcula и ещё одним --config <checkout>/config/look/darcula.conf после первого.

В этом окне:

  • Cmd+Shift+S — session: три проекта; у проекта repo есть живые сессии busy и waiting, фоновый агент ◆, сессия с custom-заголовком и богатый транскрипт («Fix sunset rounding bug») для превью.
  • Cmd+Shift+R — review: в дереве все статусы (staged utils.py, modified core.py / test_core.py, renamed app.py, untracked notify.py); в диффе core.py — word-diff (int(raw_minutes) → round(raw_minutes)) и символы для go-to-definition (normalize_degrees, minutes_to_time определены в utils.py).
  • Cmd+Shift+L — log: ~18 коммитов, merge --no-ff ветки feature/moon-phase и незасли́тая feature/timezones (a — все ветки, i — панель подробностей).

Clone this wiki locally