Files
ddadminandClaude Opus 5.5 e36a756bed refactor(proxy-client): шаблоны прокси для агентов копируются вручную
- Зачем: прокси для агента — выбор конкретной машины. Автоматическая
  правка ~/.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>
2026-10-14 18:31:35 +02:00

231 lines
15 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.