-
Notifications
You must be signed in to change notification settings - Fork 0
Development (RU)
English · Русский
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: в дереве все статусы (stagedutils.py, modifiedcore.py/test_core.py, renamedapp.py, untrackednotify.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— панель подробностей).
English
Русский