- Зачем: прокси для агента — выбор конкретной машины. Автоматическая правка ~/.codex/.env и ~/.claude/settings.json оказалась слишком навязчивой. - Что: шаблоны перенесены в proxy-client/.config/proxy-client/examples/ (codex.env, claude-settings.json) и попадают на машину вместе с остальными примерами. install.sh больше не трогает настройки Codex и Claude, его тесты на это удалены. Инструкция по копированию — в README proxy-client. - Проверка: tests/test_install.sh и tests/test_proxy_client_install.sh проходят. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
231 lines
15 KiB
Markdown
231 lines
15 KiB
Markdown
# Dotfiles
|
||
|
||
Персональные конфигурации для Linux/WSL (stow) и Windows (chezmoi).
|
||
|
||
## Quick start
|
||
|
||
### Linux / WSL
|
||
|
||
```bash
|
||
git clone https://github.com/ddmitry/dotfiles ~/dotfiles
|
||
cd ~/dotfiles
|
||
./install.sh
|
||
```
|
||
|
||
`install.sh` применяет stow-пакеты, настраивает Claude/Opencode, подключает `~/.bash_custom` в `~/.bashrc` и в WSL предлагает настроить `hproxy.local`.
|
||
|
||
### Windows
|
||
|
||
```powershell
|
||
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](https://www.chezmoi.io/)
|
||
|
||
> `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 (симлинк `~/.claude/skills` на общие скиллы) и подключает 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.json`, `settings.local.json`) - управляются Claude Code на машине |
|
||
| **[Opencode](https://github.com/anomalyco/opencode)** | MCP-серверы (context7, web-reader, playwright и др.); скиллы opencode сам читает из `~/.agents/skills` |
|
||
| **Codex** | `~/.codex` - обычный каталог, управляется Codex; скиллы - из общего хранилища agents |
|
||
| **Gemini** | Политики для CLI: pre-approved readonly команды |
|
||
|
||
## Настройка
|
||
|
||
### Секреты (`.env.secrets`)
|
||
|
||
```bash
|
||
cp bash/.env.secrets.example ~/.env.secrets
|
||
```
|
||
|
||
Содержимое - API-ключи для AI-инструментов:
|
||
|
||
```bash
|
||
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 и ежедневное использование](proxy-client/README.md)
|
||
описаны рядом с пакетом. Windows PowerShell и ярлык `Codex Proxy` сохраняют
|
||
прежнюю интеграцию с `hproxy.local:12334`. Ярлык запускает упакованное
|
||
приложение через системный идентификатор и передает параметры Chromium
|
||
`--proxy-server` и `--proxy-bypass-list`. Сам Codex и его дочерние процессы
|
||
читают общие proxy-переменные из `~/.codex/.env`; пользовательское окружение
|
||
Windows не меняется. Если Codex уже запущен, его нужно полностью закрыть перед
|
||
запуском через `Codex Proxy`.
|
||
|
||
Codex и Claude Code могут брать прокси из своих настроек, независимо от того,
|
||
откуда их запустили. Шаблоны лежат в `~/.config/proxy-client/examples/` и
|
||
копируются вручную; установщик настройки агентов не трогает. Подробнее —
|
||
[в README proxy-client](proxy-client/README.md#прокси-в-настройках-codex-и-claude-code).
|
||
|
||
`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`:
|
||
|
||
```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 и их дочерних процессов. Перекрывают унаследованное окружение. Шаблон: `~/.config/proxy-client/examples/codex.env` |
|
||
| `~/.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 в репозитории нет настроек?**
|
||
Все настройки Claude Code (`settings.json`, `settings.local.json`) принадлежат самому Claude Code: он перезаписывает их при каждом "always allow" и при смене модели. Список разрешений не ведём вручную - работаем с autoapprove. Из репозитория линкуются только скиллы. Машинно-специфичные настройки (`model`, `effortLevel`) - в `settings.json`, управляются через Claude Code.
|