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
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 "Готово!"
|
||||
Reference in new issue
Block a user