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/.vscode-server/server-env-setup`
|
||||||
- Поддержка `~/.vscode-server/server-env-setup` для VS Code Server в WSL
|
- Поддержка `~/.vscode-server/server-env-setup` для VS Code Server в WSL
|
||||||
- Подгрузка `~/.env.secrets` для расширений, задач/debug и терминалов VS Code
|
- Подгрузка `~/.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
|
||||||
- **Директория:** `opencode/.config/opencode/`
|
- **Директория:** `opencode/.config/opencode/`
|
||||||
@@ -62,68 +63,54 @@
|
|||||||
### Claude
|
### Claude
|
||||||
- **Директория:** `claude/.claude/`
|
- **Директория:** `claude/.claude/`
|
||||||
- Тонкий симлинк `~/.claude/skills` на общие skills из `~/.agents/skills/`
|
- Тонкий симлинк `~/.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
|
```bash
|
||||||
# Установка stow
|
|
||||||
sudo apt install stow
|
sudo apt install stow
|
||||||
|
git clone https://github.com/ddmitry/dotfiles ~/dotfiles
|
||||||
# Применение конфигов
|
cd ~/dotfiles
|
||||||
cd /path/to/dotfiles
|
./install.sh
|
||||||
stow bash tmux vim zed vscode agents opencode codex claude
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Важно: `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
|
```bash
|
||||||
[ -f ~/.bash_custom ] && source ~/.bash_custom
|
[ -f ~/.bash_custom ] && source ~/.bash_custom
|
||||||
```
|
```
|
||||||
|
|
||||||
### Ручная установка
|
Создайте локальные настройки Claude:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Bash
|
cat > ~/.claude/settings.local.json <<'EOF'
|
||||||
cp bash/.bash_custom ~/.bash_custom
|
{
|
||||||
cp bash/.bash_functions ~/.bash_functions
|
"model": "opus",
|
||||||
cp bash/.bash_prompt ~/.bash_prompt
|
"effortLevel": "high"
|
||||||
|
}
|
||||||
# Подключите кастомные настройки в ~/.bashrc (один раз)
|
EOF
|
||||||
# [ -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
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Windows (chezmoi)
|
### Windows (chezmoi)
|
||||||
@@ -134,6 +121,7 @@ ln -snf ~/.agents/skills ~/.claude/skills
|
|||||||
|
|
||||||
**⚠️ Требования:**
|
**⚠️ Требования:**
|
||||||
- Developer Mode должен быть включён (для создания симлинков)
|
- Developer Mode должен быть включён (для создания симлинков)
|
||||||
|
> Settings → System → For developers → Developer Mode → On
|
||||||
- PowerShell 5.0+ или PowerShell Core
|
- PowerShell 5.0+ или PowerShell Core
|
||||||
|
|
||||||
**Установка (два шага):**
|
**Установка (два шага):**
|
||||||
@@ -215,8 +203,15 @@ export ZAI_API_KEY="your_zai_api_key_here"
|
|||||||
|
|
||||||
### VS Code Server в WSL
|
### VS Code Server в WSL
|
||||||
|
|
||||||
Для VS Code в WSL используется файл `~/.vscode-server/server-env-setup`.
|
Файл `vscode/.vscode-server/server-env-setup` выполняется при каждом старте VS Code Server в WSL и делает две вещи:
|
||||||
В этом репозитории он находится в `vscode/.vscode-server/server-env-setup` и подгружает `~/.env.secrets` в окружение VS Code Server.
|
|
||||||
|
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
|
- `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)
|
mv ~/.vscode-server/server-env-setup ~/.vscode-server/server-env-setup.bak.$(date +%Y%m%d%H%M%S)
|
||||||
stow -vt ~ vscode
|
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 HTTP_PROXY="http://hproxy.local:12334"
|
||||||
export HTTPS_PROXY="http://hproxy.local:12334"
|
export HTTPS_PROXY="http://hproxy.local:12334"
|
||||||
export ALL_PROXY="socks5://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..."
|
echo "✅ Proxy enabled. Checking route..."
|
||||||
# Подставляем результат выполнения curl прямо в строку
|
# Подставляем результат выполнения curl прямо в строку
|
||||||
echo "🌍 Current IP: $(curl -s --max-time 3 https://ifconfig.me)"
|
echo "🌍 Current IP: $(curl -s --max-time 3 https://ifconfig.me)"
|
||||||
|
|||||||
@@ -95,10 +95,8 @@
|
|||||||
"Bash(stow *)"
|
"Bash(stow *)"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"model": "opus",
|
|
||||||
"statusLine": {
|
"statusLine": {
|
||||||
"type": "command",
|
"type": "command",
|
||||||
"command": "bash ~/.claude/statusline-command.sh"
|
"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 HTTP_PROXY="$proxy_url"
|
||||||
export HTTPS_PROXY="$proxy_url"
|
export HTTPS_PROXY="$proxy_url"
|
||||||
export ALL_PROXY="socks5://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"
|
||||||
|
|
||||||
# Дублируем в нижнем регистре для лучшей совместимости с инструментами
|
# Дублируем в нижнем регистре для лучшей совместимости с инструментами
|
||||||
export http_proxy="$HTTP_PROXY"
|
export http_proxy="$HTTP_PROXY"
|
||||||
|
|||||||
Reference in new issue
Block a user