diff --git a/README.md b/README.md index 52ebba1..96ca6b7 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,8 @@ - **Файл:** `vscode/.vscode-server/server-env-setup` - Поддержка `~/.vscode-server/server-env-setup` для VS Code Server в WSL - Подгрузка `~/.env.secrets` для расширений, задач/debug и терминалов VS Code -- Режим `fail-open`: при проблеме с файлом выводится warning, запуск 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/` @@ -62,68 +63,54 @@ ### 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 команды ## 🚀 Установка -### Stow (рекомендуется) +### Автоматическая (рекомендуется) ```bash -# Установка stow sudo apt install stow - -# Применение конфигов -cd /path/to/dotfiles -stow bash tmux vim zed vscode agents opencode codex claude +git clone https://github.com/ddmitry/dotfiles ~/dotfiles +cd ~/dotfiles +./install.sh ``` -Важно: `bash` пакет кладет файлы `~/.bash_custom`, `~/.bash_functions`, `~/.bash_prompt`. Убедитесь, что ваш `~/.bashrc` содержит строку: +Скрипт `install.sh`: +- Применяет все stow пакеты +- Создаёт `~/.claude/settings.local.json` с дефолтными model/effortLevel +- Защищает `settings.json` от перезаписи (`chmod 444`) +- Автоматически добавляет подключение bash_custom в `~/.bashrc` + +### 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 -# Bash -cp bash/.bash_custom ~/.bash_custom -cp bash/.bash_functions ~/.bash_functions -cp bash/.bash_prompt ~/.bash_prompt - -# Подключите кастомные настройки в ~/.bashrc (один раз) -# [ -f ~/.bash_custom ] && source ~/.bash_custom -source ~/.bashrc - -# Tmux -cp tmux/.tmux.conf ~/ -tmux source-file ~/.tmux.conf - -# Vim -cp vim/.vimrc ~/ - -# Zed -mkdir -p ~/.config/zed -cp zed/.config/zed/* ~/.config/zed/ 2>/dev/null || true - -# VS Code (WSL) -mkdir -p ~/.vscode-server -cp vscode/.vscode-server/server-env-setup ~/.vscode-server/server-env-setup -chmod +x ~/.vscode-server/server-env-setup - -# Opencode -mkdir -p ~/.config/opencode -cp opencode/.config/opencode/* ~/.config/opencode/ - -# Agents (shared skills) -mkdir -p ~/.agents/skills -cp -r agents/.agents/skills/* ~/.agents/skills/ - -# Codex (bridge to shared skills) -mkdir -p ~/.codex/skills -ln -snf ~/.agents/skills/conventional-commits ~/.codex/skills/conventional-commits - -# Claude (bridge to shared skills) -mkdir -p ~/.claude -ln -snf ~/.agents/skills ~/.claude/skills +cat > ~/.claude/settings.local.json <<'EOF' +{ + "model": "opus", + "effortLevel": "high" +} +EOF ``` ### Windows (chezmoi) @@ -134,6 +121,7 @@ ln -snf ~/.agents/skills ~/.claude/skills **⚠️ Требования:** - Developer Mode должен быть включён (для создания симлинков) + > Settings → System → For developers → Developer Mode → On - PowerShell 5.0+ или PowerShell Core **Установка (два шага):** @@ -215,8 +203,15 @@ export ZAI_API_KEY="your_zai_api_key_here" ### VS Code Server в WSL -Для VS Code в WSL используется файл `~/.vscode-server/server-env-setup`. -В этом репозитории он находится в `vscode/.vscode-server/server-env-setup` и подгружает `~/.env.secrets` в окружение VS Code Server. +Файл `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 @@ -228,7 +223,3 @@ export ZAI_API_KEY="your_zai_api_key_here" mv ~/.vscode-server/server-env-setup ~/.vscode-server/server-env-setup.bak.$(date +%Y%m%d%H%M%S) stow -vt ~ vscode ``` - -Скрипт работает в режиме `fail-open`: если `~/.env.secrets` отсутствует или содержит ошибку, VS Code продолжит запуск, а warning появится в логах. - -См. `.env.example` для дополнительной информации. diff --git a/bash/.bash_functions b/bash/.bash_functions index 86c73e8..3f466a6 100644 --- a/bash/.bash_functions +++ b/bash/.bash_functions @@ -50,7 +50,7 @@ proxy_on() { export HTTP_PROXY="http://hproxy.local:12334" export HTTPS_PROXY="http://hproxy.local:12334" export ALL_PROXY="socks5://hproxy.local:12334" - export NO_PROXY="hproxy.local,localhost,127.0.0.1" + export NO_PROXY="hproxy.local,localhost,127.0.0.1,.concept-software.ru" echo "✅ Proxy enabled. Checking route..." # Подставляем результат выполнения curl прямо в строку echo "🌍 Current IP: $(curl -s --max-time 3 https://ifconfig.me)" diff --git a/claude/.claude/settings.json b/claude/.claude/settings.json index b30b1b9..c43de1d 100644 --- a/claude/.claude/settings.json +++ b/claude/.claude/settings.json @@ -95,10 +95,8 @@ "Bash(stow *)" ] }, - "model": "opus", "statusLine": { "type": "command", "command": "bash ~/.claude/statusline-command.sh" - }, - "effortLevel": "high" + } } diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..cad2107 --- /dev/null +++ b/install.sh @@ -0,0 +1,68 @@ +#!/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 + +info "Готово!" diff --git a/vscode/.vscode-server/server-env-setup b/vscode/.vscode-server/server-env-setup index 770ce2a..b000fee 100755 --- a/vscode/.vscode-server/server-env-setup +++ b/vscode/.vscode-server/server-env-setup @@ -25,7 +25,7 @@ if getent hosts hproxy.local >/dev/null 2>&1; then export HTTP_PROXY="$proxy_url" export HTTPS_PROXY="$proxy_url" export ALL_PROXY="socks5://hproxy.local:12334" - export NO_PROXY="hproxy.local,localhost,127.0.0.1" + export NO_PROXY="hproxy.local,localhost,127.0.0.1,.concept-software.ru" # Дублируем в нижнем регистре для лучшей совместимости с инструментами export http_proxy="$HTTP_PROXY"