- Зачем: Claude Code с v2.1.273 при старте сессии скачивает скиллы аккаунта claude.ai в ~/.claude/skills/synced/; ~/.claude/skills — симлинк на agents/.agents/skills, поэтому кэш попадал в репозиторий как неотслеживаемый каталог. - Что: agents/.agents/skills/synced/ добавлен в .gitignore. - Проверка: git status после правки чистый, кроме самого .gitignore. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Dotfiles
Персональные конфигурации для Linux/WSL (stow) и Windows (chezmoi).
Quick start
Linux / WSL
git clone https://github.com/ddmitry/dotfiles ~/dotfiles
cd ~/dotfiles
./install.sh
install.sh применяет stow-пакеты, настраивает Claude/Opencode, подключает ~/.bash_custom в ~/.bashrc и в WSL предлагает настроить hproxy.local.
Windows
winget install --id Microsoft.PowerShell
winget install twpayne.chezmoi
# Перезапустить терминал, чтобы pwsh и chezmoi попали в PATH
chezmoi -S "$HOME\dotfiles\chezmoi" apply
Chezmoi использует отдельный source dir chezmoi/ внутри этого репозитория, не трогая stow/install.sh workflow.
Требования
Linux / WSL
- Ubuntu / Debian
- GNU stow
- Bash 4.0+, Tmux 2.0+, Vim 8.0+
Windows
- Windows 10/11 + Developer Mode (Settings -> System -> For developers)
- PowerShell 7.x
- chezmoi
Windows PowerShell 5.1остается legacy-режимом совместимости - не форсируется в UTF-8 и не тюнится.
Что включено
Linux / WSL (stow)
| Пакет | Что делает |
|---|---|
bash |
Кастомный prompt, общие функции, подгрузка секретов |
proxy-client |
Переносимый CLI и Bash-команды для явного запуска через прокси |
tmux |
Два префикса (Ctrl+b, Ctrl+Space), vi-режим, split по | / - |
vim |
Минимальный .vimrc без плагинов, 2 пробела, leader = Space |
wezterm |
Общий для Linux и Windows конфиг: одинаковые оформление и горячие клавиши |
kitty |
kitty.conf и тема; ~/.config/kitty остается настоящим каталогом, чтобы файлы kitty не попадали в репозиторий |
vscode |
server-env-setup для VS Code Server в WSL: секреты + авто-прокси |
chatgpt |
Отдельный ярлык ChatGPT Proxy с запретом прямого запуска при ошибке |
install.sh дополнительно настраивает opencode (симлинки, MCP-конфиг), claude (симлинкает settings.local.json из репозитория) и подключает bash_custom.
Windows (chezmoi)
- PowerShell 7 profile - live-stub в
~/Documents/PowerShell/загружает managed profile из~/.config/powershell/profile.ps1 - Git baseline -
~/.gitconfigс managed настройками,~/.gitconfig.localдля персональных overrides - Windows Terminal - идемпотентный скрипт: PS7 по умолчанию, PS 5.1 как legacy, Azure Cloud Shell скрыт
- WezTerm -
~/.wezterm.luaкак живая ссылка на общий конфиг для Windows и Linux - UTF-8 -
chcp 65001+Console.InputEncoding/OutputEncodingтолько для pwsh 7, не для PS 5.1 - Codex Proxy shortcut - Start Menu ярлык для запуска Codex GUI с proxy-переменными
- Claude Proxy - ярлык меню "Пуск" для запуска Claude Desktop с переменными прокси
- Extension points -
~/.config/powershell/profile.extra.ps1иprofile.d/*.ps1для локальных добавок
AI-инструменты (кросс-платформа)
Общие скиллы живут в agents/.agents/skills/ и расшариваются через симлинки.
| Инструмент | Что настраивается |
|---|---|
| Agents | Каноничное хранилище скиллов: ~/.agents/skills/<name>/SKILL.md |
| Claude | ~/.claude/skills -> симлинк на agents; settings.local.json -> симлинк на репозиторий (базовые permissions + statusLine); statusline-command.sh -> копия из репозитория; settings.json - управляется Claude Code |
| Opencode | MCP-серверы (context7, web-reader, playwright и др.), ~/.config/opencode/skills -> симлинк на agents |
| Codex | ~/.codex/skills/ -> симлинки на agents |
| Gemini | Политики для CLI: pre-approved readonly команды |
Настройка
Секреты (.env.secrets)
cp bash/.env.secrets.example ~/.env.secrets
Содержимое - API-ключи для AI-инструментов:
export CONTEXT7_API_KEY="..." # https://context7.com
export ZAI_API_KEY="..." # https://z.ai
Файл подгружается при старте bash и VS Code Server. Не трекается в git.
Прокси (proxy-client)
Linux/Bash-интерфейс proxy-client поддерживает внешний прокси и управляемый
пользовательский Xray. Без машинного конфига используется прежний Hiddify на
hproxy.local:12334; автоматического запуска Xray и переключения между режимами
нет.
Установка, выбор режима, WSL и ежедневное использование
описаны рядом с пакетом. Windows PowerShell и ярлык Codex Proxy сохраняют
прежнюю интеграцию с hproxy.local:12334. Ярлык запускает упакованное
приложение через системный идентификатор и передает параметры Chromium
--proxy-server и --proxy-bypass-list. Сам Codex и его дочерние процессы
читают общие proxy-переменные из ~/.codex/.env; пользовательское окружение
Windows не меняется. Если Codex уже запущен, его нужно полностью закрыть перед
запуском через Codex Proxy.
Claude Proxy поддерживает как обычную установку в
%LOCALAPPDATA%\AnthropicClaude, так и пакет из Microsoft Store. В обоих
случаях он передает параметры Electron --proxy-server и
--proxy-bypass-list, чтобы прокси применялся ко всему трафику Claude Desktop.
Ярлык использует скрытый промежуточный запускатель, поэтому Claude не открывает
и не удерживает окно Windows Terminal.
Если Claude уже запущен обычным способом, его нужно полностью закрыть перед
запуском через Claude Proxy.
Список хостов, которые идут мимо прокси, продублирован в профилях Codex,
PowerShell и VS Code: одного общего файла у Windows и WSL нет. Эталон -
DEFAULT_NO_PROXY_EXTRA в proxy-client/.local/bin/proxy-client; меняя его,
поправь и копии. Расхождение ловит tests/test_proxy_env_sync.py - раньше
копии разъезжались, и один и тот же хост то шел мимо прокси, то нет.
На Linux Stow-пакет chatgpt добавляет отдельный пользовательский ярлык
ChatGPT Proxy. Штатный ChatGPT остается прямым. Прокси-ярлык получает
активные настройки от proxy-client, передает Chromium явные параметры прокси
и сохраняет proxy-переменные для дочерних процессов. Повторный запуск поднимает
окно уже работающего проксированного экземпляра. Если ChatGPT открыт напрямую
или прокси недоступен, новый режим не подмешивается: GNOME показывает
уведомление с инструкцией. Файлы Debian-пакета не меняются, поэтому настройка
переживает его обновление.
Git baseline
На всех платформах фиксируются настройки для предсказуемого поведения:
| Ключ | Значение | Зачем |
|---|---|---|
core.autocrlf |
false |
Не переписывать line endings |
core.eol |
lf |
Дефолт ближе к Linux/macOS |
core.quotepath |
false |
Кириллица в путях читаема |
core.longpaths |
true |
Длинные пути на Windows |
fetch.prune |
true |
Убирать удаленные ветки |
pull.ff |
only |
Защита от случайных merge commit |
init.defaultBranch |
main |
- |
Персональные настройки (user.name, user.email, core.editor, core.sshCommand) живут в ~/.gitconfig.local.
На Windows chezmoi при первом apply мигрирует существующий ~/.gitconfig в ~/.gitconfig.local и подставляет managed baseline. На Linux baseline задается вручную или через скрипты.
Проверка: git config --global --includes --list --show-origin.
Для кроссплатформенных репозиториев рекомендуется .gitattributes:
* text=auto eol=lf
*.bat text eol=crlf
*.cmd text eol=crlf
Справочник
Bash-функции (~/.config/proxy-client/shell.bash)
| Функция | Описание |
|---|---|
proxy_on |
Проверяет настроенный прокси и атомарно включает восемь переменных |
proxy_off |
Очищает proxy-переменные |
pclaude / pcodex |
Запуск Claude/Codex CLI через прокси с fail-fast pre-flight |
myip |
Показывает текущий внешний IP |
update_hproxy |
Остается в ~/.bash_functions и обновляет WSL NAT-алиас |
PowerShell-функции (~/.config/powershell/profile.ps1)
| Функция | Описание |
|---|---|
proxy_on |
Включает HTTP/HTTPS/SOCKS5 прокси через hproxy.local:12334 |
proxy_off |
Очищает proxy-переменные |
pclaude / pcodex |
Запуск Claude/Codex CLI через прокси с fail-fast pre-flight |
myip |
Показывает текущий внешний IP |
Reload-Profile |
Перечитывает профиль без перезапуска сессии |
which |
Get-Command -All по имени |
touch |
Создает файл или обновляет LastWriteTime |
mkcd |
Создает директорию и переходит в нее |
open |
Invoke-Item - открывает путь |
croot |
Переходит в корень текущего Git-репозитория |
wt-here |
Новое окно Windows Terminal в текущей директории |
wt-tab-here |
Новая вкладка в текущей директории |
wt-split-here |
Split-pane в текущей директории |
Точки расширения
| Файл | Назначение |
|---|---|
~/.env.secrets |
API-ключи, подгружается bash и VS Code Server |
~/.codex/.env |
Общие proxy-переменные для Codex CLI, Codex Desktop и их дочерних процессов |
~/.bash_aliases |
Персональные алиасы bash |
~/.gitconfig.local |
Персональные Git-настройки (user.name, core.editor и т.д.) |
~/.local/bin/start-claude-proxy.ps1 |
Скрипт запуска Claude Desktop для Windows с переменными прокси и параметрами Electron |
~/.local/bin/start-claude-proxy.vbs |
Скрытый запуск PowerShell-скрипта без привязки Claude к видимому окну терминала |
~/.local/bin/start-codex-proxy.ps1 |
Запуск Codex для Windows через системный идентификатор; прокси Electron задается параметрами, а codex.exe читает ~/.codex/.env |
~/.local/bin/start-chatgpt-proxy |
Запуск Linux-приложения ChatGPT через активную настройку proxy-client |
~/.local/share/applications/chatgpt-proxy.desktop |
Отдельный Linux-ярлык ChatGPT Proxy, не подменяющий штатный ChatGPT |
~/.config/powershell/profile.extra.ps1 |
Локальные дополнения к pwsh-профилю |
~/.config/powershell/profile.d/*.ps1 |
Фрагменты, загружаемые по алфавиту |
~/.claude/settings.json |
Управляется Claude Code: model, effortLevel, "always allow" permissions |
Дизайн-решения
Почему stow на Linux + chezmoi на Windows?
stow проще и покрывает весь Linux/WSL workflow. chezmoi нужен на Windows, где stow недоступен и нужны run-скрипты (миграция .gitconfig, настройка Windows Terminal). Два инструмента живут рядом и не мешают друг другу: chezmoi использует отдельный source dir chezmoi/, а .chezmoiignore исключает Linux-файлы на Windows.
Почему Windows PowerShell 5.1 не трогается?
Если форсировать UTF-8 и менять профиль PS 5.1, можно сломать старые скрипты, .bat/.cmd и консольные утилиты. PS 7 - основной shell, PS 5.1 - режим совместимости.
Почему Claude settings.local.json - симлинк, а settings.json - нет?
Claude Code перезаписывает settings.json при каждом "always allow" - этот файл принадлежит Claude Code. Базовые permissions и statusLine живут в settings.local.json, который Claude Code только читает и мержит с settings.json. Симлинк из ~/.claude/settings.local.json на файл в репозитории безопасен. Машинно-специфичные настройки (model, effortLevel) - в settings.json, управляются через Claude Code.