feat(windows): добавлен chezmoi-слой для pwsh, terminal и git
- Зачем: - нужно перенести стабильную Windows-конфигурацию в dotfiles без поломки существующего stow/install.sh workflow для Linux и WSL. - нужно убрать типичные проблемы Git на Windows, включая line endings, из ручной настройки машины. - Что: - добавлен отдельный source dir `chezmoi/` с tiny stub для PowerShell 7 и managed profile в `~/.config/powershell`. - добавлены идемпотентная настройка Windows Terminal и managed Git baseline с миграцией локальных настроек в `~/.gitconfig.local`. - обновлён README: описан Windows workflow, helper-функции pwsh и состав Git baseline без персональных данных. - Проверка: - `chezmoi -S "$HOME\dotfiles\chezmoi" apply` - `pwsh -NoLogo -Command ''$PSVersionTable.PSVersion.ToString(); chcp; [Console]::InputEncoding.WebName; [Console]::OutputEncoding.WebName''` - `git config --global --includes --list --show-origin`
This commit is contained in:
1 parent
22d38f80e5
commit
8fd5b9c630
8 files changed
+750
-238
No files matched your search
@@ -1,260 +1,272 @@
|
||||
# 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
|
||||
```
|
||||
|
||||
# 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 используется [chezmoi](https://www.chezmoi.io/) — кросс-платформенный менеджер dotfiles.
|
||||
Для 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
|
||||
- PowerShell 5.0+ или PowerShell Core
|
||||
- `pwsh` 7.x для повседневной работы
|
||||
- `Windows PowerShell 5.1` остаётся legacy-режимом и не тюнится агрессивно
|
||||
|
||||
**Установка (два шага):**
|
||||
**Быстрое применение из уже существующего `~/dotfiles`:**
|
||||
|
||||
```powershell
|
||||
# 1. Установка chezmoi
|
||||
winget install twpayne.chezmoi
|
||||
|
||||
# 2. Инициализация (клонирует репо)
|
||||
chezmoi init ddmitry/dotfiles
|
||||
|
||||
# 3. Первое применение (подготавливает структуру)
|
||||
chezmoi apply
|
||||
|
||||
# 4. Второе применение (копирует файлы в правильные места)
|
||||
chezmoi apply
|
||||
# Применить только Windows-layer из репозитория
|
||||
chezmoi -S "$HOME\dotfiles\chezmoi" apply
|
||||
```
|
||||
|
||||
**Примечания:**
|
||||
- После шага 4 все файлы будут на месте: `~/.vimrc`, `~/.agents/skills/`, `~/.config/opencode/`, и т.д.
|
||||
- Симлинки для skills создаются автоматически только если включен Developer Mode
|
||||
- Без Developer Mode AI-ассистенты будут работать с прямыми копиями skills
|
||||
Этот режим не требует менять глобальный source `chezmoi`: достаточно запускать `chezmoi -S "$HOME\dotfiles\chezmoi" apply` из уже существующего репозитория.
|
||||
|
||||
**Что доступно на Windows:**
|
||||
- ✅ Vim
|
||||
- ✅ Agents (shared skills)
|
||||
- ✅ Codex (с симлинками на skills)
|
||||
- ✅ Claude (с симлинками на skills)
|
||||
- ✅ Opencode (с симлинками на skills)
|
||||
**Что делает текущий Windows-layer:**
|
||||
- ✅ ставит маленький live-stub в `~/Documents/PowerShell/Microsoft.PowerShell_profile.ps1`
|
||||
- ✅ хранит основную логику `pwsh` в `~/.config/powershell/profile.ps1`
|
||||
- ✅ раскладывает Git на managed baseline в `~/.config/git/config` и локальные overrides в `~/.gitconfig.local`
|
||||
- ✅ оставляет hook'и для локальных добавок: `~/.config/powershell/profile.extra.ps1` и `~/.config/powershell/profile.d/*.ps1`
|
||||
- ✅ идемпотентно приводит `Windows Terminal` к базовому состоянию без полной перезаписи всего `settings.json`
|
||||
|
||||
**Что НЕ доступно на Windows:**
|
||||
- ❌ Bash (Linux-only)
|
||||
- ❌ Tmux (Linux-only)
|
||||
- ❌ Zed (пути конфигурации отличаются)
|
||||
**Какие helper-функции есть в `pwsh`:**
|
||||
- `Reload-Profile` — перечитывает текущий профиль без перезапуска сессии
|
||||
- `which` — показывает все найденные команды по имени через `Get-Command -All`
|
||||
- `touch` — создаёт файл или обновляет `LastWriteTime`
|
||||
- `mkcd` — создаёт директорию и сразу переходит в неё
|
||||
- `open` — открывает путь через `Invoke-Item`
|
||||
- `croot` — переходит в корень текущего Git-репозитория
|
||||
- `wt-here` — открывает новое окно Windows Terminal в текущей директории
|
||||
- `wt-tab-here` — открывает новую вкладку Windows Terminal в текущей директории
|
||||
- `wt-split-here` — открывает split-pane Windows Terminal в текущей директории
|
||||
- `codevpn` — запускает `code .` с временно выставленными `HTTP_PROXY` и `HTTPS_PROXY`
|
||||
|
||||
**Что сознательно не делается:**
|
||||
- ❌ `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`
|
||||
|
||||
## 🔧 Требования
|
||||
|
||||
### Linux/WSL
|
||||
- Linux (протестировано на Ubuntu)
|
||||
- Bash 4.0+
|
||||
- Tmux 2.0+
|
||||
- Vim 8.0+
|
||||
|
||||
|
||||
### Linux/WSL
|
||||
- Linux (протестировано на Ubuntu)
|
||||
- Bash 4.0+
|
||||
- Tmux 2.0+
|
||||
- Vim 8.0+
|
||||
|
||||
### Windows
|
||||
- Windows 10/11 с Developer Mode
|
||||
- PowerShell 5.0+ или PowerShell Core
|
||||
- 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
|
||||
```
|
||||
|
||||
## 📝 Дополнительные файлы
|
||||
|
||||
Для полной настройки создайте:
|
||||
- `~/.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
|
||||
```
|
||||
Reference in new issue
Block a user