fix(install): исправлено владение каталогом .config
Зачем: - GNU Stow сворачивал весь ~/.config в пакет zed и помещал рабочие настройки в репозиторий. Что: - добавлена ограниченная миграция старой ссылки с возвратом данных в домашний каталог; - предотвращено повторное сворачивание ~/.config на свежей установке; - добавлены проверки сохранности профиля, повторного запуска и чужих ссылок. Проверка: - bash tests/test_install.sh - bash -n install.sh tests/test_install.sh - git diff --check
This commit is contained in:
1 parent
fd8210db71
commit
e5323284a8
3 files changed
+231
-48
No files matched your search
+77
@@ -169,6 +169,77 @@ migrate_claude_stow_symlink() {
|
||||
fi
|
||||
}
|
||||
|
||||
# Миграция: раскрыть старую stow-ссылку ~/.config -> zed/.config.
|
||||
# В пакете zed остаётся только управляемый каталог zed; остальные настройки
|
||||
# возвращаются в домашний каталог и больше не попадают в репозиторий.
|
||||
migrate_zed_config_stow_symlink() {
|
||||
local config_path="$HOME/.config"
|
||||
local zed_config="$DOTFILES_DIR/zed/.config"
|
||||
local config_real=""
|
||||
local zed_config_real=""
|
||||
local replacement=""
|
||||
local items_file=""
|
||||
local item=""
|
||||
local base=""
|
||||
local moved_items=()
|
||||
|
||||
[ -L "$config_path" ] || return 0
|
||||
|
||||
config_real="$(readlink -f "$config_path" 2>/dev/null || true)"
|
||||
zed_config_real="$(readlink -f "$zed_config" 2>/dev/null || true)"
|
||||
if [ -z "$zed_config_real" ] || [ "$config_real" != "$zed_config_real" ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
info "Миграция: ~/.config больше не должен принадлежать пакету zed..."
|
||||
replacement="$(mktemp -d "$HOME/.config.migrate.XXXXXX")"
|
||||
chmod --reference="$zed_config_real" "$replacement"
|
||||
|
||||
items_file="$(mktemp "$HOME/.config.migrate-items.XXXXXX")"
|
||||
if ! find "$zed_config_real" -mindepth 1 -maxdepth 1 ! -name zed -print0 > "$items_file"; then
|
||||
error "Не удалось получить полный список старого ~/.config"
|
||||
rm -f -- "$items_file"
|
||||
rmdir "$replacement" 2>/dev/null || true
|
||||
return 1
|
||||
fi
|
||||
|
||||
while IFS= read -r -d '' item; do
|
||||
base="${item##*/}"
|
||||
if ! mv -- "$item" "$replacement/$base"; then
|
||||
error "Не удалось перенести ~/.config/$base"
|
||||
for base in "${moved_items[@]}"; do
|
||||
mv -- "$replacement/$base" "$zed_config_real/$base" 2>/dev/null || true
|
||||
done
|
||||
rm -f -- "$items_file"
|
||||
rmdir "$replacement" 2>/dev/null || true
|
||||
return 1
|
||||
fi
|
||||
moved_items+=("$base")
|
||||
done < "$items_file"
|
||||
rm -f -- "$items_file"
|
||||
|
||||
if ! rm -- "$config_path"; then
|
||||
error "Не удалось удалить старую ссылку ~/.config"
|
||||
for base in "${moved_items[@]}"; do
|
||||
mv -- "$replacement/$base" "$zed_config_real/$base" 2>/dev/null || true
|
||||
done
|
||||
rmdir "$replacement" 2>/dev/null || true
|
||||
return 1
|
||||
fi
|
||||
|
||||
if ! mv -- "$replacement" "$config_path"; then
|
||||
error "Не удалось создать новый каталог ~/.config"
|
||||
ln -s "$zed_config_real" "$config_path" 2>/dev/null || true
|
||||
for base in "${moved_items[@]}"; do
|
||||
mv -- "$replacement/$base" "$zed_config_real/$base" 2>/dev/null || true
|
||||
done
|
||||
rmdir "$replacement" 2>/dev/null || true
|
||||
return 1
|
||||
fi
|
||||
|
||||
info "Настройки перенесены из пакета zed в ~/.config"
|
||||
}
|
||||
|
||||
# Настроить boot command для hproxy.local в /etc/wsl.conf.
|
||||
setup_wsl_hproxy() {
|
||||
[ -n "${WSL_DISTRO_NAME:-}" ] || return 0
|
||||
@@ -244,6 +315,12 @@ for pkg in "${PACKAGES[@]}"; do
|
||||
fi
|
||||
done
|
||||
|
||||
migrate_zed_config_stow_symlink
|
||||
|
||||
if [ ! -L "$HOME/.config" ]; then
|
||||
mkdir -p "$HOME/.config"
|
||||
fi
|
||||
|
||||
if [ "${#AVAILABLE_PACKAGES[@]}" -gt 0 ]; then
|
||||
stow_package "${AVAILABLE_PACKAGES[@]}"
|
||||
fi
|
||||
|
||||
Reference in new issue
Block a user