refactor(claude): settings.json отдан Claude Code, базовые настройки в settings.local.json
- Зачем:
- Claude Code перезаписывает settings.json при каждом «always allow», что создавало
конфликт с managed-копией из dotfiles при повторном запуске install.sh.
- Что:
- settings.json удалён из репозитория, Claude Code владеет им полностью.
- создан settings.local.json (базовые permissions + statusLine), деплоится через симлинк.
- install.sh: копирование + шаблон заменены на ln -sf с бэкапом и guard для edge cases.
- check.sh: проверка обновлена под симлинк вместо «файл + chmod 444».
- тесты: старый тест копирования заменён на 4 новых (симлинк, бэкап, директория, stow-миграция).
- Проверка:
- bash tests/test_install.sh (15 тестов).
- bash agents/.agents/skills/dotfiles-check/check.sh.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
bdccd889fe
commit
9341853479
6 files changed
+117
-69
No files matched your search
@@ -28,7 +28,7 @@ echo "════════════════════════
|
||||
for pkg_dir in "$DOTFILES_DIR"/*/; do
|
||||
pkg=$(basename "$pkg_dir")
|
||||
[[ "$pkg" == .* ]] && continue
|
||||
# claude управляется вручную (копирование settings.json), не через stow
|
||||
# claude управляется вручную (симлинк settings.local.json), не через stow
|
||||
[[ "$pkg" == "claude" ]] && continue
|
||||
|
||||
# Точки входа — элементы первого уровня внутри пакета
|
||||
@@ -110,30 +110,21 @@ if [ -f "$install_script" ]; then
|
||||
err "~/.claude — не найден"
|
||||
fi
|
||||
|
||||
# Claude Code: settings.json должен быть копией, не симлинком
|
||||
if [ -L "$HOME/.claude/settings.json" ]; then
|
||||
err "~/.claude/settings.json — симлинк (должна быть копия)"
|
||||
elif [ -f "$HOME/.claude/settings.json" ]; then
|
||||
pass "~/.claude/settings.json — файл (копия)"
|
||||
else
|
||||
err "~/.claude/settings.json — не найден"
|
||||
fi
|
||||
|
||||
# chmod 444 на settings.json в репозитории
|
||||
if [ -f "$DOTFILES_DIR/claude/.claude/settings.json" ]; then
|
||||
perms=$(stat -c %a "$DOTFILES_DIR/claude/.claude/settings.json" 2>/dev/null || true)
|
||||
if [ "$perms" = "444" ]; then
|
||||
pass "claude/settings.json — chmod 444"
|
||||
# Claude Code: settings.local.json должен быть симлинком на репозиторий
|
||||
if [ -L "$HOME/.claude/settings.local.json" ]; then
|
||||
local_target=$(readlink -f "$HOME/.claude/settings.local.json" 2>/dev/null || true)
|
||||
local_expected=$(readlink -f "$DOTFILES_DIR/claude/.claude/settings.local.json" 2>/dev/null || true)
|
||||
if [ "$local_target" = "$local_expected" ]; then
|
||||
pass "~/.claude/settings.local.json → репозиторий"
|
||||
else
|
||||
skip "claude/settings.json — chmod $perms (ожидался 444)"
|
||||
err "~/.claude/settings.local.json → $local_target (ожидался $local_expected)"
|
||||
fi
|
||||
fi
|
||||
|
||||
# settings.local.json
|
||||
if [ -f "$HOME/.claude/settings.local.json" ]; then
|
||||
pass "~/.claude/settings.local.json существует"
|
||||
elif [ -f "$HOME/.claude/settings.local.json" ]; then
|
||||
err "~/.claude/settings.local.json — обычный файл (должен быть симлинк). Запустите install.sh"
|
||||
elif [ -e "$HOME/.claude/settings.local.json" ]; then
|
||||
err "~/.claude/settings.local.json — не файл и не симлинк. Удалите вручную и запустите install.sh"
|
||||
else
|
||||
skip "~/.claude/settings.local.json — не найден (создайте через install.sh)"
|
||||
err "~/.claude/settings.local.json — не найден (запустите install.sh)"
|
||||
fi
|
||||
|
||||
# skills симлинк
|
||||
|
||||
Reference in new issue
Block a user