diff --git a/README.md b/README.md index 96ca6b7..6200f93 100644 --- a/README.md +++ b/README.md @@ -89,6 +89,7 @@ cd ~/dotfiles - Создаёт `~/.claude/settings.local.json` с дефолтными model/effortLevel - Защищает `settings.json` от перезаписи (`chmod 444`) - Автоматически добавляет подключение bash_custom в `~/.bashrc` +- В WSL предлагает настроить автоматический резолв `hproxy.local` (см. ниже) ### Stow вручную @@ -201,6 +202,40 @@ 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 и делает две вещи: diff --git a/install.sh b/install.sh index cad2107..7f72998 100755 --- a/install.sh +++ b/install.sh @@ -65,4 +65,28 @@ else info "Добавлено в ~/.bashrc: $BASHRC_LINE" fi +# --- WSL: hproxy.local (автоматический резолв при старте) --- +if [ -n "${WSL_DISTRO_NAME:-}" ]; then + HPROXY_SCRIPT="$DOTFILES_DIR/scripts/setup-hproxy.sh" + if grep -q "hproxy.local" /etc/wsl.conf 2>/dev/null; then + warn "/etc/wsl.conf уже содержит hproxy.local, пропускаю" + else + echo "" + info "Обнаружен WSL. Скрипт $HPROXY_SCRIPT может автоматически" + info "прописывать hproxy.local в /etc/hosts при каждом старте WSL (NAT mode)." + echo -ne "${YELLOW}[?]${NC} Добавить boot command в /etc/wsl.conf? [y/N] " + read -r answer + if [[ "$answer" =~ ^[Yy]$ ]]; then + # Добавляем [boot] секцию, если её нет + if ! grep -q '^\[boot\]' /etc/wsl.conf 2>/dev/null; then + printf '\n[boot]\n' | sudo tee -a /etc/wsl.conf > /dev/null + fi + sudo sed -i "/^\[boot\]/a command = \"$HPROXY_SCRIPT\"" /etc/wsl.conf + info "Добавлено в /etc/wsl.conf. Перезапустите WSL: wsl --shutdown" + else + warn "Пропущено. Можно настроить вручную — см. README.md" + fi + fi +fi + info "Готово!" diff --git a/scripts/setup-hproxy.sh b/scripts/setup-hproxy.sh new file mode 100755 index 0000000..a07566f --- /dev/null +++ b/scripts/setup-hproxy.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# Прописывает hproxy.local в /etc/hosts (WSL NAT mode). +# Gateway IP WSL = адрес хоста, на котором слушает прокси. +# +# Использование: +# Вручную: sudo ./setup-hproxy.sh +# При старте WSL — добавить в /etc/wsl.conf: +# [boot] +# command = "/path/to/setup-hproxy.sh" + +sed -i '/hproxy.local/d' /etc/hosts +ip route show default | awk '{print $3 " hproxy.local"}' >> /etc/hosts