Files
dotfiles/README.md
T
Dmitry Dementiev 9b66fc70fc feat(windows): добавлены proxy-хелперы и упрощен git baseline
- Зачем:
  - нужно перенести привычные proxy_on/proxy_off/myip из bash в pwsh и убрать устаревший codevpn.
  - нужно сделать Windows Git baseline проще и предсказуемее, чтобы effective значения и проверки не путались.
- Что:
  - в managed profile PowerShell 7 добавлены `proxy_on`, `proxy_off`, `myip` и удалён `codevpn`.
  - Git baseline перенесён в `~/.gitconfig`, а `~/.gitconfig.local` оставлен только для локальных и персональных override-настроек.
  - README уточнён: legacy-статус Windows PowerShell 5.1, новые helper-функции и корректная команда проверки Git-конфига.
- Проверка:
  - `chezmoi -S "$HOME\dotfiles\chezmoi" apply --force`
  - `pwsh -NoLogo -Command ''Get-Command proxy_on,proxy_off,myip,Reload-Profile,wt-here; Test-Path function:codevpn''`
  - `git config --global --includes --list --show-origin`
2026-03-22 15:58:10 +03:00

278 lines
14 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
Персональные конфигурационные файлы для настройки рабочего окружения.
## 📦 Содержимое
### Bash
- **Файлы:** `bash/.bash_custom`, `bash/.bash_functions`, `bash/.bash_prompt`
- Подключение кастомных bash-файлов (функции, prompt, секреты) поверх стандартного `~/.bashrc`
- Кастомный двухстрочный prompt (подключается из `~/.bash_prompt`)
- Поддержка цветного вывода и автодополнения
### Tmux
- **Файл:** `tmux/.tmux.conf`
- Два префикса: `Ctrl+b` (стандартный) и `Ctrl+Space` (удобный)
- Визуальный стиль с синей цветовой схемой
- Vi-режим для копирования
- Горячие клавиши:
- `|` / `-` — разделение панелей
- `Alt+стрелки` — изменение размера панелей и переключение окон
- `r` — перезагрузка конфига
### Vim
- **Файл:** `vim/.vimrc`
- Минималистичная конфигурация без плагинов
- 2 пробела вместо табов (оптимально для YAML/XML)
- Поддержка мыши и подсветка поиска
- Leader key: `Space`
- `<Space>w` — сохранить
- `<Space>h` — убрать подсветку поиска
- `<Space>p` — вставка без форматирования
### Zed
- **Директория:** `zed/.config/zed/`
- Структура для конфигурации Zed редактора
### VS Code (WSL)
- **Файл:** `vscode/.vscode-server/server-env-setup`
- Поддержка `~/.vscode-server/server-env-setup` для VS Code Server в WSL
- Подгрузка `~/.env.secrets` для расширений, задач/debug и терминалов VS Code
- Автоматическая настройка прокси: если `hproxy.local` резолвится, выставляются `HTTP_PROXY`, `HTTPS_PROXY`, `ALL_PROXY` (socks5), `NO_PROXY` и их lowercase-варианты
- Режим `fail-open`: если `~/.env.secrets` отсутствует или не загружается — warning в stderr, VS Code продолжает запуск
### Opencode
- **Директория:** `opencode/.config/opencode/`
- Конфигурация AI-ассистента opencode с MCP-серверами:
- **context7** — документация библиотек
- **web-reader** — чтение веб-страниц
- **web-search-prime** — поиск в интернете
- **zread** — чтение GitHub репозиториев
- **playwright** — браузерная автоматизация
- Требует переменных окружения (см. `.env.example`)
- Скиллы берутся из общего пакета `agents/.agents/skills/` через симлинк `~/.config/opencode/skills`
### Agents (shared skills)
- **Директория:** `agents/.agents/skills/`
- Каноничное место для общих скиллов в формате `~/.agents/skills/<name>/SKILL.md`
### Codex
- **Директория:** `codex/.codex/skills/`
- Тонкие симлинки в `~/.codex/skills/` на общие skills из `~/.agents/skills/`
### Claude
- **Директория:** `claude/.claude/`
- Тонкий симлинк `~/.claude/skills` на общие skills из `~/.agents/skills/`
- **Двухуровневые настройки:**
- `settings.json` (в dotfiles, read-only) — стабильная база: permissions, statusLine
- `settings.local.json` (локальный, не в git) — машинно-специфичное: model, effortLevel
- Claude Code мержит оба файла, `settings.local.json` имеет приоритет
- `settings.json` защищён `chmod 444`, чтобы Claude Code не перезаписывал tracked файл
### Gemini
- **Директория:** `gemini/.gemini/`
- Политики для Gemini CLI: pre-approved readonly команды
## 🚀 Установка
### Автоматическая (рекомендуется)
```bash
sudo apt install stow
git clone https://github.com/ddmitry/dotfiles ~/dotfiles
cd ~/dotfiles
./install.sh
```
Скрипт `install.sh`:
- Применяет все stow пакеты
- Создаёт `~/.claude/settings.local.json` с дефолтными model/effortLevel
- Защищает `settings.json` от перезаписи (`chmod 444`)
- Автоматически добавляет подключение bash_custom в `~/.bashrc`
- В WSL предлагает настроить автоматический резолв `hproxy.local` (см. ниже)
### Stow вручную
```bash
sudo apt install stow
cd /path/to/dotfiles
stow bash tmux vim zed vscode agents opencode codex claude gemini
```
После stow добавьте в `~/.bashrc` (если не используете `install.sh`):
```bash
[ -f ~/.bash_custom ] && source ~/.bash_custom
```
Создайте локальные настройки Claude:
```bash
cat > ~/.claude/settings.local.json <<'EOF'
{
"model": "opus",
"effortLevel": "high"
}
EOF
```
### Windows (chezmoi)
Для Windows предпочтителен отдельный source dir `chezmoi/` внутри этого репозитория. Это позволяет держать Windows-слой рядом с остальными dotfiles, не ломая существующий `stow`/`install.sh` workflow для Linux/WSL.
> 💡 **Примечание:** chezmoi также работает на Linux/WSL, но stow предпочтительнее для полной функциональности.
**⚠️ Требования:**
- Developer Mode должен быть включён (для создания симлинков)
> Settings → System → For developers → Developer Mode → On
- `pwsh` 7.x для повседневной работы
- `Windows PowerShell 5.1` остаётся legacy-режимом и не тюнится агрессивно
**Быстрое применение из уже существующего `~/dotfiles`:**
```powershell
winget install twpayne.chezmoi
# Применить только Windows-layer из репозитория
chezmoi -S "$HOME\dotfiles\chezmoi" apply
```
Этот режим не требует менять глобальный source `chezmoi`: достаточно запускать `chezmoi -S "$HOME\dotfiles\chezmoi" apply` из уже существующего репозитория.
Windows-слой в этом репозитории настраивает современный `PowerShell 7` как основной рабочий shell. `Windows PowerShell 5.1` сознательно остаётся legacy-режимом совместимости и не получает новые helper-функции, форсированный UTF-8 или другие агрессивные изменения без отдельного явного запроса.
**Что делает текущий Windows-layer:**
- ✅ ставит маленький live-stub в `~/Documents/PowerShell/Microsoft.PowerShell_profile.ps1`
- ✅ хранит основную логику `pwsh` в `~/.config/powershell/profile.ps1`
- ✅ хранит Git baseline в `~/.gitconfig`, а локальные overrides в `~/.gitconfig.local`
- ✅ оставляет hook'и для локальных добавок: `~/.config/powershell/profile.extra.ps1` и `~/.config/powershell/profile.d/*.ps1`
- ✅ идемпотентно приводит `Windows Terminal` к базовому состоянию без полной перезаписи всего `settings.json`
**Какие helper-функции есть в `pwsh`:**
- `Reload-Profile` — перечитывает текущий профиль без перезапуска сессии
- `which` — показывает все найденные команды по имени через `Get-Command -All`
- `touch` — создаёт файл или обновляет `LastWriteTime`
- `mkcd` — создаёт директорию и сразу переходит в неё
- `open` — открывает путь через `Invoke-Item`
- `croot` — переходит в корень текущего Git-репозитория
- `proxy_on` — включает `HTTP_PROXY`, `HTTPS_PROXY`, `ALL_PROXY`, `NO_PROXY` для `hproxy.local:12334`
- `proxy_off` — очищает proxy-переменные текущей сессии
- `myip` — быстро показывает текущий внешний IP
- `wt-here` — открывает новое окно Windows Terminal в текущей директории
- `wt-tab-here` — открывает новую вкладку Windows Terminal в текущей директории
- `wt-split-here` — открывает split-pane Windows Terminal в текущей директории
**Что сознательно не делается:**
- ❌ `Windows PowerShell 5.1` не форсируется в UTF-8 и не меняется без явного запроса
- ❌ Linux/WSL-поток не переносится в chezmoi и продолжает жить через `stow`/`install.sh`
**Что фиксирует Git baseline для Windows:**
- `core.autocrlf = false`
- `core.eol = lf`
- `core.quotepath = false`
- `core.longpaths = true`
- `fetch.prune = true`
- `pull.ff = only`
- `init.defaultBranch = main`
- `user.name`, `user.email`, `core.editor` и `core.sshCommand` в baseline не входят и должны жить в `~/.gitconfig.local`
- Проверять итоговые значения удобнее через `git config --global --includes --list --show-origin`
## 🔧 Требования
### Linux/WSL
- Linux (протестировано на Ubuntu)
- Bash 4.0+
- Tmux 2.0+
- Vim 8.0+
### Windows
- Windows 10/11 с Developer Mode
- PowerShell 7.x
- [chezmoi](https://www.chezmoi.io/)
## 📝 Дополнительные файлы
Для полной настройки создайте:
- `~/.bash_aliases` — персональные алиасы
- `~/.env.secrets` — приватные переменные окружения (API ключи)
## 🔑 Переменные окружения
### Кастомные функции bash
Файл `bash/.bash_functions` содержит пользовательские функции (proxy_on/off, myip и др.).
При использовании `stow bash` он будет доступен как `~/.bash_functions`.
### Приватные переменные (секреты)
1. Скопируйте шаблон:
```bash
cp bash/.env.secrets.example ~/.env.secrets
```
2. Отредактируйте и добавьте API ключи:
```bash
# Context7 API (https://context7.com)
export CONTEXT7_API_KEY="your_context7_api_key_here"
# Z.AI API для LLM, поиска и чтения (https://z.ai)
export ZAI_API_KEY="your_zai_api_key_here"
```
Файл `~/.env.secrets` автоматически подгружается при старте shell.
### WSL: настройка hproxy.local
Имя `hproxy.local` используется как алиас для хоста, на котором работает прокси-сервер. Это позволяет функциям `proxy_on`/`proxy_off` и VS Code Server не зависеть от конкретного IP-адреса.
**NAT mode** (по умолчанию в WSL2) — IP шлюза меняется при каждом запуске, поэтому нужен автоматический boot-скрипт:
```bash
# Вариант 1: через install.sh (интерактивно)
./install.sh # ответьте "y" на вопрос про wsl.conf
# Вариант 2: вручную
sudo tee -a /etc/wsl.conf <<'EOF'
[boot]
command = "/path/to/dotfiles/scripts/setup-hproxy.sh"
EOF
```
После изменения `wsl.conf` перезапустите WSL: `wsl --shutdown`.
Обновить `hproxy.local` без перезапуска WSL:
```bash
sudo scripts/setup-hproxy.sh
# или
update_hproxy # интерактивная функция из .bash_functions
```
**Mirror mode** (`networkingMode=mirrored` в `.wslconfig`) — WSL разделяет сетевой стек с хостом, IP не меняется. Достаточно один раз прописать запись в Windows hosts:
```
# C:\Windows\System32\drivers\etc\hosts
192.168.1.100 hproxy.local
```
### VS Code Server в WSL
Файл `vscode/.vscode-server/server-env-setup` выполняется при каждом старте VS Code Server в WSL и делает две вещи:
1. **Загружает `~/.env.secrets`** — API ключи становятся доступны расширениям, задачам и терминалам VS Code. Если файл отсутствует или содержит ошибку, выводится warning в stderr, запуск не блокируется.
2. **Настраивает прокси** — если `hproxy.local` резолвится (через `/etc/hosts` или DNS в режиме mirror), автоматически выставляются:
- `HTTP_PROXY` / `http_proxy` → `http://hproxy.local:12334`
- `HTTPS_PROXY` / `https_proxy` → `http://hproxy.local:12334`
- `ALL_PROXY` / `all_proxy` → `socks5://hproxy.local:12334`
- `NO_PROXY` / `no_proxy` → `hproxy.local,localhost,127.0.0.1,.concept-software.ru`
После установки/обновления файла сделайте одно из действий:
- `Developer: Reload Window` в VS Code
- или `Remote-WSL: Reconnect to WSL`
Если у вас уже есть локальный `~/.vscode-server/server-env-setup`, stow может сообщить конфликт.
Тогда сохраните старую версию и примените stow повторно:
```bash
mv ~/.vscode-server/server-env-setup ~/.vscode-server/server-env-setup.bak.$(date +%Y%m%d%H%M%S)
stow -vt ~ vscode
```