Files
dotfiles/README.md
T
ddadmin 227fc93514 docs(readme): описана установка statusline-command.sh
- Зачем:
  - в таблице настроек Claude не было упоминания скрипта статусной строки,
    хотя install.sh теперь копирует его в ~/.claude.
- Что:
  - в строку про Claude добавлено «statusline-command.sh → копия из репозитория».
- Проверка:
  - grep -n statusline README.md.
2026-07-26 17:14:14 +03:00

208 lines
13 KiB
Markdown
Raw 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 конфиг: одинаковые оформление и горячие клавиши |
| `zed` | Конфигурация Zed редактора |
| `vscode` | `server-env-setup` для VS Code Server в WSL: секреты + авто-прокси |
`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](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`)
```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`.
`Claude Proxy` поддерживает как обычную установку в
`%LOCALAPPDATA%\AnthropicClaude`, так и пакет из Microsoft Store. В обоих
случаях он передаёт параметры Electron `--proxy-server` и
`--proxy-bypass-list`, чтобы прокси применялся ко всему трафику Claude Desktop.
Ярлык использует скрытый промежуточный запускатель, поэтому Claude не открывает
и не удерживает окно Windows Terminal.
Если Claude уже запущен обычным способом, его нужно полностью закрыть перед
запуском через `Claude Proxy`.
### 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 и их дочерних процессов |
| `~/.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` |
| `~/.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.