- Зачем: - старая команда в wsl.conf дублировала записи в /etc/hosts при каждом ребуте. - настройка hproxy.local не была задокументирована в репозитории. - Что: - создан идемпотентный скрипт scripts/setup-hproxy.sh (sed + append). - в install.sh добавлен интерактивный вопрос о подключении скрипта в wsl.conf. - в README.md добавлена документация по настройке hproxy.local (NAT и Mirror). - Проверка: - cat /etc/wsl.conf, wsl --shutdown, getent hosts hproxy.local. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
93 lines
3.2 KiB
Bash
Executable File
93 lines
3.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
DOTFILES_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
|
|
# --- Цвета ---
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m'
|
|
|
|
info() { echo -e "${GREEN}[+]${NC} $*"; }
|
|
warn() { echo -e "${YELLOW}[!]${NC} $*"; }
|
|
error() { echo -e "${RED}[✗]${NC} $*"; }
|
|
|
|
# --- Проверка stow ---
|
|
if ! command -v stow &>/dev/null; then
|
|
error "stow не найден. Установите: sudo apt install stow"
|
|
exit 1
|
|
fi
|
|
|
|
# --- Stow пакеты ---
|
|
PACKAGES=(bash tmux vim zed vscode agents opencode codex claude gemini)
|
|
|
|
info "Применяю stow пакеты..."
|
|
cd "$DOTFILES_DIR"
|
|
for pkg in "${PACKAGES[@]}"; do
|
|
if [ -d "$pkg" ]; then
|
|
stow -v --restow "$pkg" 2>&1 | sed "s/^/ /"
|
|
else
|
|
warn "Пакет $pkg не найден, пропускаю"
|
|
fi
|
|
done
|
|
|
|
# --- Claude: settings.local.json ---
|
|
CLAUDE_LOCAL="$HOME/.claude/settings.local.json"
|
|
if [ ! -f "$CLAUDE_LOCAL" ]; then
|
|
info "Создаю $CLAUDE_LOCAL (локальные настройки Claude)..."
|
|
cat > "$CLAUDE_LOCAL" <<'EOF'
|
|
{
|
|
"model": "opus",
|
|
"effortLevel": "high"
|
|
}
|
|
EOF
|
|
else
|
|
warn "$CLAUDE_LOCAL уже существует, пропускаю"
|
|
fi
|
|
|
|
# --- Claude: защита settings.json от перезаписи ---
|
|
CLAUDE_SETTINGS="$DOTFILES_DIR/claude/.claude/settings.json"
|
|
if [ -f "$CLAUDE_SETTINGS" ]; then
|
|
chmod 444 "$CLAUDE_SETTINGS"
|
|
info "settings.json защищён от записи (chmod 444)"
|
|
fi
|
|
|
|
# --- Bash: подключение в .bashrc ---
|
|
BASHRC="$HOME/.bashrc"
|
|
BASHRC_LINE='[ -f ~/.bash_custom ] && source ~/.bash_custom'
|
|
if grep -q 'bash_custom' "$BASHRC" 2>/dev/null; then
|
|
warn "~/.bashrc уже содержит bash_custom, пропускаю"
|
|
else
|
|
echo "" >> "$BASHRC"
|
|
echo "# dotfiles" >> "$BASHRC"
|
|
echo "$BASHRC_LINE" >> "$BASHRC"
|
|
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 "Готово!"
|