fix(claude): settings.json копируется вместо симлинка через stow
- Зачем:
- stow tree-folding создавал симлинк ~/.claude → dotfiles/claude/.claude/,
из-за чего Claude Code модифицировал settings.json прямо в репозитории,
а рантайм-данные (sessions, credentials) попадали в каталог dotfiles.
- Что:
- claude убран из stow-пакетов, установка через ручную секцию в install.sh.
- settings.json копируется в ~/.claude/ (оригинал защищён chmod 444).
- добавлена автомиграция: симлинк → директория с переносом рантайм-данных.
- грязный settings.json в репо автоматически сбрасывается через git checkout.
- добавлен .stow-local-ignore для защиты от случайного stow claude.
- check.sh дополнен проверками: ~/.claude — директория, settings.json — копия.
- Проверка:
- bash install.sh (на машине с симлинком — мигрирует, иначе — идемпотентно).
- 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
769ef95096
commit
e00611015a
3 files changed
+79
-10
No files matched your search
@@ -28,6 +28,8 @@ echo "════════════════════════
|
||||
for pkg_dir in "$DOTFILES_DIR"/*/; do
|
||||
pkg=$(basename "$pkg_dir")
|
||||
[[ "$pkg" == .* ]] && continue
|
||||
# claude управляется вручную (копирование settings.json), не через stow
|
||||
[[ "$pkg" == "claude" ]] && continue
|
||||
|
||||
# Точки входа — элементы первого уровня внутри пакета
|
||||
entries=()
|
||||
@@ -99,7 +101,25 @@ if [ -f "$install_script" ]; then
|
||||
echo ""
|
||||
echo "Доп. проверки (install.sh):"
|
||||
|
||||
# chmod 444 на settings.json
|
||||
# Claude Code: ~/.claude должна быть директорией, не симлинком
|
||||
if [ -L "$HOME/.claude" ]; then
|
||||
err "~/.claude — симлинк (должна быть директория). Запустите install.sh"
|
||||
elif [ -d "$HOME/.claude" ]; then
|
||||
pass "~/.claude — директория (не симлинк)"
|
||||
else
|
||||
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
|
||||
@@ -116,6 +136,13 @@ if [ -f "$install_script" ]; then
|
||||
skip "~/.claude/settings.local.json — не найден (создайте через install.sh)"
|
||||
fi
|
||||
|
||||
# skills симлинк
|
||||
if [ -L "$HOME/.claude/skills" ]; then
|
||||
pass "~/.claude/skills — симлинк"
|
||||
else
|
||||
skip "~/.claude/skills — не найден"
|
||||
fi
|
||||
|
||||
# bashrc
|
||||
if grep -q 'bash_custom' "$HOME/.bashrc" 2>/dev/null; then
|
||||
pass "~/.bashrc содержит подключение bash_custom"
|
||||
|
||||
Reference in new issue
Block a user