← На главную

Перешёл на chezmoi: dot-файлы без симлинков, для Codex и Claude Code — один симлинк

18.06.2026 17:09 · hackernews

Автор много лет управлял dotfiles с помощью GNU stow, но на нескольких машинах это превратилось в головную боль. Проблема в том, что stow создаёт симлинки — правка на одном Macbook тут же проходила через ссылку в локальный репозиторий, и через几个月 на другом ноутбуке обнаруживались грязные деревья с конфликтами. На свежей машине stow вообще отказывался накладывать файлы поверх уже существующих (.zshrc, .gitconfig). Всё это плюс отдельные скрипты для Homebrew и macOS настроек — и захотелось найти замену.

Коллега подсказал chezmoi. Инструмент хранит исходники в ~/.local/share/chezmoi — это обычный git-репозиторий. Команда chezmoi add ~/.zshrc копирует файл в репозиторий и переименовывает в dot_zshrc. Префикс dot_ заменяет точку, private_ ставит права 0600, а суффикс .tmpl подключает Go-шаблоны для подстановки данных под конкретную машину. chezmoi apply раскладывает всё обратно — уже обычными файлами, без симлинков. Это главный плюс: изменения в репозиторий попадают только когда автор сам их туда кладёт.

Автор трекает конфиги zsh, git, shellcheck, терминала ghostty, GitHub CLI, а также настройки Claude Code и Codex — чтобы агенты вели себя одинаково на всех машинах. Три gitconfig-файла разводят личные и рабочие проекты с помощью штатной фичи includeIf в git. Вся машино-зависимая конфигурация сводится к одному шаблону chezmoi.toml.tmpl, который один раз спрашивает имя машины.

На новой Mac ставится Homebrew, затем brew install chezmoi, и одной командой chezmoi init --apply репозиторий клонируется, а файлы раскладываются — скрипты из chezmoiscripts выполняются в нужном порядке (сначала установка пакетов, потом правка system settings macOS). Скрипт Homebrew использует хитрость: он встраивает в комментарий хеш от Brewfile, и при изменении кол-ва пакетов chezmoi видит, что скрипт изменился, и запускает его снова.

В повседневной работе — пять команд: chezmoi edit --apply ~/.zshrc правит исходник и сразу применяет; chezmoi re-add подхватывает изменения из живого файла; chezmoi cd + git push и на другой машине chezmoi update.

Отдельная история — навыки для LLM-агентов. Они живут в ~/.agents/skills по спецификации Agent Skills (родом из Anthropic). Codex подхватывает папку сам, а Claude Code требует навыки в ~/.claude/skills. Автор сделал symlink_skills.tmpl с содержимым {{ .chezmoi.homeDir }}/.agents/skills — и теперь chezmoi создаёт один симлинк, который решает несовместимость агентов. Иронично, что ушли от stow ради избавления от симлинков, а вернулись к одному — но винить в этом надо Anthropic, которая пока не поддержала общий стандарт.

Читать оригинал →