docs(readme): убраны эмодзи и машинная типографика

- Зачем:
  - README писался моделью, и в нем остались знаки, которых нет на
    клавиатуре: их некому было подставить, потому что markdown правят
    в редакторе кода, а не в Word с автозаменой.
  - декоративные эмодзи в заголовках в русском тексте вне переписки
    не ставят вовсе, это самый однозначный след генерации.
- Что:
  - сняты эмодзи с шести заголовков и из комментария в блоке кода.
  - 21 длинное тире заменено на дефис, 3 пары елочек на прямые кавычки,
    7 стрелок на ->, буква "е" приведена к авторскому стилю в 14 словах.
  - в разделе "Дизайн-решения" отглагольные существительные развернуты
    в глаголы: "форсирование и изменение может сломать" стало
    "если форсировать и менять, можно сломать".
- Проверка:
  - якорных ссылок на заголовки ни внутри README, ни снаружи нет,
    переименование ничего не ломает.
  - блоки кода не тронуты: ни одно тире не попало внутрь фенсов,
    10 фенсов и 62 строки таблиц на месте.

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Dmitriy DementievandClaude committed 2026-08-21 11:18:28 +03:00
1 parent 31f7fddcde
commit f7e3f0e889
1 file changed
+41 -41
+41 -41
View File
@@ -2,7 +2,7 @@
Персональные конфигурации для Linux/WSL (stow) и Windows (chezmoi). Персональные конфигурации для Linux/WSL (stow) и Windows (chezmoi).
## 🚀 Quick start ## Quick start
### Linux / WSL ### Linux / WSL
@@ -19,13 +19,13 @@ cd ~/dotfiles
```powershell ```powershell
winget install --id Microsoft.PowerShell winget install --id Microsoft.PowerShell
winget install twpayne.chezmoi winget install twpayne.chezmoi
# ⚠️ Перезапустить терминал, чтобы pwsh и chezmoi попали в PATH # Перезапустить терминал, чтобы pwsh и chezmoi попали в PATH
chezmoi -S "$HOME\dotfiles\chezmoi" apply chezmoi -S "$HOME\dotfiles\chezmoi" apply
``` ```
Chezmoi использует отдельный source dir `chezmoi/` внутри этого репозитория, не трогая stow/install.sh workflow. Chezmoi использует отдельный source dir `chezmoi/` внутри этого репозитория, не трогая stow/install.sh workflow.
## 🔧 Требования ## Требования
### Linux / WSL ### Linux / WSL
@@ -35,13 +35,13 @@ Chezmoi использует отдельный source dir `chezmoi/` внутр
### Windows ### Windows
- Windows 10/11 + Developer Mode (Settings → System → For developers) - Windows 10/11 + Developer Mode (Settings -> System -> For developers)
- PowerShell 7.x - PowerShell 7.x
- [chezmoi](https://www.chezmoi.io/) - [chezmoi](https://www.chezmoi.io/)
> `Windows PowerShell 5.1` остаётся legacy-режимом совместимости — не форсируется в UTF-8 и не тюнится. > `Windows PowerShell 5.1` остается legacy-режимом совместимости - не форсируется в UTF-8 и не тюнится.
## 📦 Что включено ## Что включено
### Linux / WSL (stow) ### Linux / WSL (stow)
@@ -52,7 +52,7 @@ Chezmoi использует отдельный source dir `chezmoi/` внутр
| `tmux` | Два префикса (`Ctrl+b`, `Ctrl+Space`), vi-режим, split по `\|` / `-` | | `tmux` | Два префикса (`Ctrl+b`, `Ctrl+Space`), vi-режим, split по `\|` / `-` |
| `vim` | Минимальный .vimrc без плагинов, 2 пробела, leader = `Space` | | `vim` | Минимальный .vimrc без плагинов, 2 пробела, leader = `Space` |
| `wezterm` | Общий для Linux и Windows конфиг: одинаковые оформление и горячие клавиши | | `wezterm` | Общий для Linux и Windows конфиг: одинаковые оформление и горячие клавиши |
| `kitty` | `kitty.conf` и тема; `~/.config/kitty` остаётся настоящим каталогом, чтобы файлы kitty не попадали в репозиторий | | `kitty` | `kitty.conf` и тема; `~/.config/kitty` остается настоящим каталогом, чтобы файлы kitty не попадали в репозиторий |
| `vscode` | `server-env-setup` для VS Code Server в WSL: секреты + авто-прокси | | `vscode` | `server-env-setup` для VS Code Server в WSL: секреты + авто-прокси |
| `chatgpt` | Отдельный ярлык `ChatGPT Proxy` с запретом прямого запуска при ошибке | | `chatgpt` | Отдельный ярлык `ChatGPT Proxy` с запретом прямого запуска при ошибке |
@@ -60,14 +60,14 @@ Chezmoi использует отдельный source dir `chezmoi/` внутр
### Windows (chezmoi) ### Windows (chezmoi)
- **PowerShell 7 profile** — live-stub в `~/Documents/PowerShell/` загружает managed profile из `~/.config/powershell/profile.ps1` - **PowerShell 7 profile** - live-stub в `~/Documents/PowerShell/` загружает managed profile из `~/.config/powershell/profile.ps1`
- **Git baseline** — `~/.gitconfig` с managed настройками, `~/.gitconfig.local` для персональных overrides - **Git baseline** - `~/.gitconfig` с managed настройками, `~/.gitconfig.local` для персональных overrides
- **Windows Terminal** — идемпотентный скрипт: PS7 по умолчанию, PS 5.1 как legacy, Azure Cloud Shell скрыт - **Windows Terminal** - идемпотентный скрипт: PS7 по умолчанию, PS 5.1 как legacy, Azure Cloud Shell скрыт
- **WezTerm** — `~/.wezterm.lua` как живая ссылка на общий конфиг для Windows и Linux - **WezTerm** - `~/.wezterm.lua` как живая ссылка на общий конфиг для Windows и Linux
- **UTF-8** — `chcp 65001` + `Console.InputEncoding/OutputEncoding` только для pwsh 7, не для PS 5.1 - **UTF-8** - `chcp 65001` + `Console.InputEncoding/OutputEncoding` только для pwsh 7, не для PS 5.1
- **Codex Proxy shortcut** — Start Menu ярлык для запуска Codex GUI с proxy-переменными - **Codex Proxy shortcut** - Start Menu ярлык для запуска Codex GUI с proxy-переменными
- **Claude Proxy** — ярлык меню «Пуск» для запуска Claude Desktop с переменными прокси - **Claude Proxy** - ярлык меню "Пуск" для запуска Claude Desktop с переменными прокси
- **Extension points** — `~/.config/powershell/profile.extra.ps1` и `profile.d/*.ps1` для локальных добавок - **Extension points** - `~/.config/powershell/profile.extra.ps1` и `profile.d/*.ps1` для локальных добавок
### AI-инструменты (кросс-платформа) ### AI-инструменты (кросс-платформа)
@@ -76,12 +76,12 @@ Chezmoi использует отдельный source dir `chezmoi/` внутр
| Инструмент | Что настраивается | | Инструмент | Что настраивается |
|------------|-------------------| |------------|-------------------|
| **Agents** | Каноничное хранилище скиллов: `~/.agents/skills/<name>/SKILL.md` | | **Agents** | Каноничное хранилище скиллов: `~/.agents/skills/<name>/SKILL.md` |
| **Claude** | `~/.claude/skills` → симлинк на agents; `settings.local.json` → симлинк на репозиторий (базовые permissions + statusLine); `statusline-command.sh` → копия из репозитория; `settings.json` — управляется Claude Code | | **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 | | **[Opencode](https://github.com/anomalyco/opencode)** | MCP-серверы (context7, web-reader, playwright и др.), `~/.config/opencode/skills` -> симлинк на agents |
| **Codex** | `~/.codex/skills/` → симлинки на agents | | **Codex** | `~/.codex/skills/` -> симлинки на agents |
| **Gemini** | Политики для CLI: pre-approved readonly команды | | **Gemini** | Политики для CLI: pre-approved readonly команды |
## ⚙️ Настройка ## Настройка
### Секреты (`.env.secrets`) ### Секреты (`.env.secrets`)
@@ -89,7 +89,7 @@ Chezmoi использует отдельный source dir `chezmoi/` внутр
cp bash/.env.secrets.example ~/.env.secrets cp bash/.env.secrets.example ~/.env.secrets
``` ```
Содержимое — API-ключи для AI-инструментов: Содержимое - API-ключи для AI-инструментов:
```bash ```bash
export CONTEXT7_API_KEY="..." # https://context7.com export CONTEXT7_API_KEY="..." # https://context7.com
@@ -108,7 +108,7 @@ Linux/Bash-интерфейс `proxy-client` поддерживает внешн
[Установка, выбор режима, WSL и ежедневное использование](proxy-client/README.md) [Установка, выбор режима, WSL и ежедневное использование](proxy-client/README.md)
описаны рядом с пакетом. Windows PowerShell и ярлык `Codex Proxy` сохраняют описаны рядом с пакетом. Windows PowerShell и ярлык `Codex Proxy` сохраняют
прежнюю интеграцию с `hproxy.local:12334`. Ярлык запускает упакованное прежнюю интеграцию с `hproxy.local:12334`. Ярлык запускает упакованное
приложение через системный идентификатор и передаёт параметры Chromium приложение через системный идентификатор и передает параметры Chromium
`--proxy-server` и `--proxy-bypass-list`. Сам Codex и его дочерние процессы `--proxy-server` и `--proxy-bypass-list`. Сам Codex и его дочерние процессы
читают общие proxy-переменные из `~/.codex/.env`; пользовательское окружение читают общие proxy-переменные из `~/.codex/.env`; пользовательское окружение
Windows не меняется. Если Codex уже запущен, его нужно полностью закрыть перед Windows не меняется. Если Codex уже запущен, его нужно полностью закрыть перед
@@ -116,7 +116,7 @@ Windows не меняется. Если Codex уже запущен, его ну
`Claude Proxy` поддерживает как обычную установку в `Claude Proxy` поддерживает как обычную установку в
`%LOCALAPPDATA%\AnthropicClaude`, так и пакет из Microsoft Store. В обоих `%LOCALAPPDATA%\AnthropicClaude`, так и пакет из Microsoft Store. В обоих
случаях он передаёт параметры Electron `--proxy-server` и случаях он передает параметры Electron `--proxy-server` и
`--proxy-bypass-list`, чтобы прокси применялся ко всему трафику Claude Desktop. `--proxy-bypass-list`, чтобы прокси применялся ко всему трафику Claude Desktop.
Ярлык использует скрытый промежуточный запускатель, поэтому Claude не открывает Ярлык использует скрытый промежуточный запускатель, поэтому Claude не открывает
и не удерживает окно Windows Terminal. и не удерживает окно Windows Terminal.
@@ -124,14 +124,14 @@ Windows не меняется. Если Codex уже запущен, его ну
запуском через `Claude Proxy`. запуском через `Claude Proxy`.
Список хостов, которые идут мимо прокси, продублирован в профилях Codex, Список хостов, которые идут мимо прокси, продублирован в профилях Codex,
PowerShell и VS Code: одного общего файла у Windows и WSL нет. Эталон — PowerShell и VS Code: одного общего файла у Windows и WSL нет. Эталон -
`DEFAULT_NO_PROXY_EXTRA` в `proxy-client/.local/bin/proxy-client`; меняя его, `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` добавляет отдельный пользовательский ярлык На Linux Stow-пакет `chatgpt` добавляет отдельный пользовательский ярлык
`ChatGPT Proxy`. Штатный `ChatGPT` остаётся прямым. Прокси-ярлык получает `ChatGPT Proxy`. Штатный `ChatGPT` остается прямым. Прокси-ярлык получает
активные настройки от `proxy-client`, передаёт Chromium явные параметры прокси активные настройки от `proxy-client`, передает Chromium явные параметры прокси
и сохраняет proxy-переменные для дочерних процессов. Повторный запуск поднимает и сохраняет proxy-переменные для дочерних процессов. Повторный запуск поднимает
окно уже работающего проксированного экземпляра. Если ChatGPT открыт напрямую окно уже работающего проксированного экземпляра. Если ChatGPT открыт напрямую
или прокси недоступен, новый режим не подмешивается: GNOME показывает или прокси недоступен, новый режим не подмешивается: GNOME показывает
@@ -148,13 +148,13 @@ PowerShell и VS Code: одного общего файла у Windows и WSL н
| `core.eol` | `lf` | Дефолт ближе к Linux/macOS | | `core.eol` | `lf` | Дефолт ближе к Linux/macOS |
| `core.quotepath` | `false` | Кириллица в путях читаема | | `core.quotepath` | `false` | Кириллица в путях читаема |
| `core.longpaths` | `true` | Длинные пути на Windows | | `core.longpaths` | `true` | Длинные пути на Windows |
| `fetch.prune` | `true` | Убирать удалённые ветки | | `fetch.prune` | `true` | Убирать удаленные ветки |
| `pull.ff` | `only` | Защита от случайных merge commit | | `pull.ff` | `only` | Защита от случайных merge commit |
| `init.defaultBranch` | `main` | — | | `init.defaultBranch` | `main` | - |
Персональные настройки (`user.name`, `user.email`, `core.editor`, `core.sshCommand`) живут в `~/.gitconfig.local`. Персональные настройки (`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`. Проверка: `git config --global --includes --list --show-origin`.
@@ -166,7 +166,7 @@ PowerShell и VS Code: одного общего файла у Windows и WSL н
*.cmd text eol=crlf *.cmd text eol=crlf
``` ```
## 📖 Справочник ## Справочник
### Bash-функции (`~/.config/proxy-client/shell.bash`) ### Bash-функции (`~/.config/proxy-client/shell.bash`)
@@ -176,7 +176,7 @@ PowerShell и VS Code: одного общего файла у Windows и WSL н
| `proxy_off` | Очищает proxy-переменные | | `proxy_off` | Очищает proxy-переменные |
| `pclaude` / `pcodex` | Запуск Claude/Codex CLI через прокси с fail-fast pre-flight | | `pclaude` / `pcodex` | Запуск Claude/Codex CLI через прокси с fail-fast pre-flight |
| `myip` | Показывает текущий внешний IP | | `myip` | Показывает текущий внешний IP |
| `update_hproxy` | Остаётся в `~/.bash_functions` и обновляет WSL NAT-алиас | | `update_hproxy` | Остается в `~/.bash_functions` и обновляет WSL NAT-алиас |
### PowerShell-функции (`~/.config/powershell/profile.ps1`) ### PowerShell-функции (`~/.config/powershell/profile.ps1`)
@@ -188,9 +188,9 @@ PowerShell и VS Code: одного общего файла у Windows и WSL н
| `myip` | Показывает текущий внешний IP | | `myip` | Показывает текущий внешний IP |
| `Reload-Profile` | Перечитывает профиль без перезапуска сессии | | `Reload-Profile` | Перечитывает профиль без перезапуска сессии |
| `which` | `Get-Command -All` по имени | | `which` | `Get-Command -All` по имени |
| `touch` | Создаёт файл или обновляет `LastWriteTime` | | `touch` | Создает файл или обновляет `LastWriteTime` |
| `mkcd` | Создаёт директорию и переходит в неё | | `mkcd` | Создает директорию и переходит в нее |
| `open` | `Invoke-Item` — открывает путь | | `open` | `Invoke-Item` - открывает путь |
| `croot` | Переходит в корень текущего Git-репозитория | | `croot` | Переходит в корень текущего Git-репозитория |
| `wt-here` | Новое окно Windows Terminal в текущей директории | | `wt-here` | Новое окно Windows Terminal в текущей директории |
| `wt-tab-here` | Новая вкладка в текущей директории | | `wt-tab-here` | Новая вкладка в текущей директории |
@@ -206,20 +206,20 @@ PowerShell и VS Code: одного общего файла у Windows и WSL н
| `~/.gitconfig.local` | Персональные Git-настройки (`user.name`, `core.editor` и т.д.) | | `~/.gitconfig.local` | Персональные Git-настройки (`user.name`, `core.editor` и т.д.) |
| `~/.local/bin/start-claude-proxy.ps1` | Скрипт запуска Claude Desktop для Windows с переменными прокси и параметрами Electron | | `~/.local/bin/start-claude-proxy.ps1` | Скрипт запуска Claude Desktop для Windows с переменными прокси и параметрами Electron |
| `~/.local/bin/start-claude-proxy.vbs` | Скрытый запуск PowerShell-скрипта без привязки Claude к видимому окну терминала | | `~/.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/bin/start-chatgpt-proxy` | Запуск Linux-приложения ChatGPT через активную настройку `proxy-client` |
| `~/.local/share/applications/chatgpt-proxy.desktop` | Отдельный Linux-ярлык `ChatGPT Proxy`, не подменяющий штатный `ChatGPT` | | `~/.local/share/applications/chatgpt-proxy.desktop` | Отдельный Linux-ярлык `ChatGPT Proxy`, не подменяющий штатный `ChatGPT` |
| `~/.config/powershell/profile.extra.ps1` | Локальные дополнения к pwsh-профилю | | `~/.config/powershell/profile.extra.ps1` | Локальные дополнения к pwsh-профилю |
| `~/.config/powershell/profile.d/*.ps1` | Фрагменты, загружаемые по алфавиту | | `~/.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 + chezmoi на Windows?**
stow проще и покрывает весь Linux/WSL workflow. chezmoi нужен на Windows, где stow недоступен и нужны run-скрипты (миграция `.gitconfig`, настройка Windows Terminal). Два инструмента живут рядом и не мешают друг другу: chezmoi использует отдельный source dir `chezmoi/`, а `.chezmoiignore` исключает Linux-файлы на Windows. stow проще и покрывает весь Linux/WSL workflow. chezmoi нужен на Windows, где stow недоступен и нужны run-скрипты (миграция `.gitconfig`, настройка Windows Terminal). Два инструмента живут рядом и не мешают друг другу: chezmoi использует отдельный source dir `chezmoi/`, а `.chezmoiignore` исключает Linux-файлы на Windows.
**Почему Windows PowerShell 5.1 не трогается?** **Почему 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 `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 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.