feat(dotfiles): улучшена установка и управление конфигурацией
- Зачем: - нужен воспроизводимый способ установки на новую машину и защита от перезаписи tracked-файлов ИИ-инструментами. - Что: - добавлен install.sh: stow всех пакетов, создание settings.local.json, chmod 444 на settings.json, автопатч .bashrc. - claude/settings.json разделён на базовый (permissions, statusLine) и локальный (model, effortLevel в settings.local.json). - добавлен .concept-software.ru в NO_PROXY в server-env-setup и bash_functions. - README переработан: install.sh как рекомендуемый способ, документация двухуровневых настроек Claude, Developer Mode hint, расширенное описание VS Code прокси. - Проверка: - git clone + ./install.sh на чистой машине.
This commit is contained in:
1 parent
0009270c6e
commit
984db1b6d7
5 files changed
+118
-61
No files matched your search
@@ -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` для дополнительной информации.
|
||||
@@ -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)"
|
||||
|
||||
@@ -95,10 +95,8 @@
|
||||
"Bash(stow *)"
|
||||
]
|
||||
},
|
||||
"model": "opus",
|
||||
"statusLine": {
|
||||
"type": "command",
|
||||
"command": "bash ~/.claude/statusline-command.sh"
|
||||
},
|
||||
"effortLevel": "high"
|
||||
}
|
||||
}
|
||||
Executable
+68
@@ -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 "Готово!"
|
||||
@@ -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"
|
||||
|
||||
Reference in new issue
Block a user