diff --git a/README.md b/README.md index d61d277..27ad237 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Персональные конфигурации для Linux/WSL (stow) и Windows (chezmoi). -## 🚀 Quick start +## Quick start ### Linux / WSL @@ -19,13 +19,13 @@ cd ~/dotfiles ```powershell winget install --id Microsoft.PowerShell winget install twpayne.chezmoi -# ⚠️ Перезапустить терминал, чтобы pwsh и chezmoi попали в PATH +# Перезапустить терминал, чтобы pwsh и chezmoi попали в PATH chezmoi -S "$HOME\dotfiles\chezmoi" apply ``` Chezmoi использует отдельный source dir `chezmoi/` внутри этого репозитория, не трогая stow/install.sh workflow. -## 🔧 Требования +## Требования ### Linux / WSL @@ -35,13 +35,13 @@ Chezmoi использует отдельный source dir `chezmoi/` внутр ### Windows -- Windows 10/11 + Developer Mode (Settings → System → For developers) +- Windows 10/11 + Developer Mode (Settings -> System -> For developers) - PowerShell 7.x - [chezmoi](https://www.chezmoi.io/) -> `Windows PowerShell 5.1` остаётся legacy-режимом совместимости — не форсируется в UTF-8 и не тюнится. +> `Windows PowerShell 5.1` остается legacy-режимом совместимости - не форсируется в UTF-8 и не тюнится. -## 📦 Что включено +## Что включено ### Linux / WSL (stow) @@ -52,7 +52,7 @@ Chezmoi использует отдельный source dir `chezmoi/` внутр | `tmux` | Два префикса (`Ctrl+b`, `Ctrl+Space`), vi-режим, split по `\|` / `-` | | `vim` | Минимальный .vimrc без плагинов, 2 пробела, leader = `Space` | | `wezterm` | Общий для Linux и Windows конфиг: одинаковые оформление и горячие клавиши | -| `kitty` | `kitty.conf` и тема; `~/.config/kitty` остаётся настоящим каталогом, чтобы файлы kitty не попадали в репозиторий | +| `kitty` | `kitty.conf` и тема; `~/.config/kitty` остается настоящим каталогом, чтобы файлы kitty не попадали в репозиторий | | `vscode` | `server-env-setup` для VS Code Server в WSL: секреты + авто-прокси | | `chatgpt` | Отдельный ярлык `ChatGPT Proxy` с запретом прямого запуска при ошибке | @@ -60,14 +60,14 @@ Chezmoi использует отдельный source dir `chezmoi/` внутр ### 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` для локальных добавок +- **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-инструменты (кросс-платформа) @@ -76,12 +76,12 @@ Chezmoi использует отдельный source dir `chezmoi/` внутр | Инструмент | Что настраивается | |------------|-------------------| | **Agents** | Каноничное хранилище скиллов: `~/.agents/skills//SKILL.md` | -| **Claude** | `~/.claude/skills` → симлинк на agents; `settings.local.json` → симлинк на репозиторий (базовые permissions + statusLine); `statusline-command.sh` → копия из репозитория; `settings.json` — управляется Claude Code | -| **[Opencode](https://github.com/anomalyco/opencode)** | MCP-серверы (context7, web-reader, playwright и др.), `~/.config/opencode/skills` → симлинк на agents | -| **Codex** | `~/.codex/skills/` → симлинки на agents | +| **Claude** | `~/.claude/skills` -> симлинк на agents; `settings.local.json` -> симлинк на репозиторий (базовые permissions + statusLine); `statusline-command.sh` -> копия из репозитория; `settings.json` - управляется Claude Code | +| **[Opencode](https://github.com/anomalyco/opencode)** | MCP-серверы (context7, web-reader, playwright и др.), `~/.config/opencode/skills` -> симлинк на agents | +| **Codex** | `~/.codex/skills/` -> симлинки на agents | | **Gemini** | Политики для CLI: pre-approved readonly команды | -## ⚙️ Настройка +## Настройка ### Секреты (`.env.secrets`) @@ -89,7 +89,7 @@ Chezmoi использует отдельный source dir `chezmoi/` внутр cp bash/.env.secrets.example ~/.env.secrets ``` -Содержимое — API-ключи для AI-инструментов: +Содержимое - API-ключи для AI-инструментов: ```bash export CONTEXT7_API_KEY="..." # https://context7.com @@ -108,7 +108,7 @@ Linux/Bash-интерфейс `proxy-client` поддерживает внешн [Установка, выбор режима, WSL и ежедневное использование](proxy-client/README.md) описаны рядом с пакетом. Windows PowerShell и ярлык `Codex Proxy` сохраняют прежнюю интеграцию с `hproxy.local:12334`. Ярлык запускает упакованное -приложение через системный идентификатор и передаёт параметры Chromium +приложение через системный идентификатор и передает параметры Chromium `--proxy-server` и `--proxy-bypass-list`. Сам Codex и его дочерние процессы читают общие proxy-переменные из `~/.codex/.env`; пользовательское окружение Windows не меняется. Если Codex уже запущен, его нужно полностью закрыть перед @@ -116,7 +116,7 @@ Windows не меняется. Если Codex уже запущен, его ну `Claude Proxy` поддерживает как обычную установку в `%LOCALAPPDATA%\AnthropicClaude`, так и пакет из Microsoft Store. В обоих -случаях он передаёт параметры Electron `--proxy-server` и +случаях он передает параметры Electron `--proxy-server` и `--proxy-bypass-list`, чтобы прокси применялся ко всему трафику Claude Desktop. Ярлык использует скрытый промежуточный запускатель, поэтому Claude не открывает и не удерживает окно Windows Terminal. @@ -124,14 +124,14 @@ Windows не меняется. Если Codex уже запущен, его ну запуском через `Claude Proxy`. Список хостов, которые идут мимо прокси, продублирован в профилях Codex, -PowerShell и VS Code: одного общего файла у Windows и WSL нет. Эталон — +PowerShell и VS Code: одного общего файла у Windows и WSL нет. Эталон - `DEFAULT_NO_PROXY_EXTRA` в `proxy-client/.local/bin/proxy-client`; меняя его, -поправь и копии. Расхождение ловит `tests/test_proxy_env_sync.py` — раньше -копии разъезжались, и один и тот же хост то шёл мимо прокси, то нет. +поправь и копии. Расхождение ловит `tests/test_proxy_env_sync.py` - раньше +копии разъезжались, и один и тот же хост то шел мимо прокси, то нет. На Linux Stow-пакет `chatgpt` добавляет отдельный пользовательский ярлык -`ChatGPT Proxy`. Штатный `ChatGPT` остаётся прямым. Прокси-ярлык получает -активные настройки от `proxy-client`, передаёт Chromium явные параметры прокси +`ChatGPT Proxy`. Штатный `ChatGPT` остается прямым. Прокси-ярлык получает +активные настройки от `proxy-client`, передает Chromium явные параметры прокси и сохраняет proxy-переменные для дочерних процессов. Повторный запуск поднимает окно уже работающего проксированного экземпляра. Если ChatGPT открыт напрямую или прокси недоступен, новый режим не подмешивается: GNOME показывает @@ -148,13 +148,13 @@ PowerShell и VS Code: одного общего файла у Windows и WSL н | `core.eol` | `lf` | Дефолт ближе к Linux/macOS | | `core.quotepath` | `false` | Кириллица в путях читаема | | `core.longpaths` | `true` | Длинные пути на Windows | -| `fetch.prune` | `true` | Убирать удалённые ветки | +| `fetch.prune` | `true` | Убирать удаленные ветки | | `pull.ff` | `only` | Защита от случайных merge commit | -| `init.defaultBranch` | `main` | — | +| `init.defaultBranch` | `main` | - | Персональные настройки (`user.name`, `user.email`, `core.editor`, `core.sshCommand`) живут в `~/.gitconfig.local`. -На Windows chezmoi при первом apply мигрирует существующий `~/.gitconfig` в `~/.gitconfig.local` и подставляет managed baseline. На Linux baseline задаётся вручную или через скрипты. +На Windows chezmoi при первом apply мигрирует существующий `~/.gitconfig` в `~/.gitconfig.local` и подставляет managed baseline. На Linux baseline задается вручную или через скрипты. Проверка: `git config --global --includes --list --show-origin`. @@ -166,7 +166,7 @@ PowerShell и VS Code: одного общего файла у Windows и WSL н *.cmd text eol=crlf ``` -## 📖 Справочник +## Справочник ### Bash-функции (`~/.config/proxy-client/shell.bash`) @@ -176,7 +176,7 @@ PowerShell и VS Code: одного общего файла у Windows и WSL н | `proxy_off` | Очищает proxy-переменные | | `pclaude` / `pcodex` | Запуск Claude/Codex CLI через прокси с fail-fast pre-flight | | `myip` | Показывает текущий внешний IP | -| `update_hproxy` | Остаётся в `~/.bash_functions` и обновляет WSL NAT-алиас | +| `update_hproxy` | Остается в `~/.bash_functions` и обновляет WSL NAT-алиас | ### PowerShell-функции (`~/.config/powershell/profile.ps1`) @@ -188,9 +188,9 @@ PowerShell и VS Code: одного общего файла у Windows и WSL н | `myip` | Показывает текущий внешний IP | | `Reload-Profile` | Перечитывает профиль без перезапуска сессии | | `which` | `Get-Command -All` по имени | -| `touch` | Создаёт файл или обновляет `LastWriteTime` | -| `mkcd` | Создаёт директорию и переходит в неё | -| `open` | `Invoke-Item` — открывает путь | +| `touch` | Создает файл или обновляет `LastWriteTime` | +| `mkcd` | Создает директорию и переходит в нее | +| `open` | `Invoke-Item` - открывает путь | | `croot` | Переходит в корень текущего Git-репозитория | | `wt-here` | Новое окно Windows Terminal в текущей директории | | `wt-tab-here` | Новая вкладка в текущей директории | @@ -206,20 +206,20 @@ PowerShell и VS Code: одного общего файла у Windows и WSL н | `~/.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-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 | +| `~/.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 — режим совместимости. +Если форсировать 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. +**Почему 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.