diff --git a/install.sh b/install.sh index 08c3ee3..c2de390 100755 --- a/install.sh +++ b/install.sh @@ -21,12 +21,12 @@ while IFS= read -r rel || [ -n "$rel" ]; do mkdir -p "$BACKUP_DIR/$(dirname "$rel")" cp -a "$dest" "$BACKUP_DIR/$rel" echo " Backed up: $dest" - rm -f "$dest" + if [ -d "$dest" ]; then rm -rf "$dest"; else rm -f "$dest"; fi elif [ -L "$dest" ]; then rm "$dest" fi [[ "$rel" == .ssh/* ]] && chmod 600 "$src" 2>/dev/null || true - ln -sf "$src" "$dest" + ln -sfn "$src" "$dest" echo " Linked: ~/$rel" done < "$MANIFEST" diff --git a/scripts/dotfiles_manager.sh b/scripts/dotfiles_manager.sh index e2b35f9..7b278f6 100755 --- a/scripts/dotfiles_manager.sh +++ b/scripts/dotfiles_manager.sh @@ -385,12 +385,13 @@ cmd_install() { continue fi - # Back up conflicting file + # Back up conflicting file/directory if [ -e "$dest" ] && [ ! -L "$dest" ]; then mkdir -p "$BACKUP_DIR/$(dirname "$rel")" cp -a "$dest" "$BACKUP_DIR/$rel" warn "Backed up existing $dest" - rm -f "$dest" + # rm -rf needed when $dest is a real directory (e.g. ~/.bashrc.d created manually) + if [ -d "$dest" ]; then rm -rf "$dest"; else rm -f "$dest"; fi elif [ -L "$dest" ]; then rm "$dest" fi @@ -404,7 +405,8 @@ cmd_install() { fi fi - ln -sf "$src" "$dest" + # -n: treat dest as a file (don't place link inside) if dest is a dir symlink + ln -sfn "$src" "$dest" success "Linked: ~/$rel → $src" (( count++ )) || true done < "$MANIFEST" @@ -968,12 +970,12 @@ while IFS= read -r rel || [ -n "\$rel" ]; do mkdir -p "\$BACKUP_DIR/\$(dirname "\$rel")" cp -a "\$dest" "\$BACKUP_DIR/\$rel" echo " Backed up: \$dest" - rm -f "\$dest" + if [ -d "\$dest" ]; then rm -rf "\$dest"; else rm -f "\$dest"; fi elif [ -L "\$dest" ]; then rm "\$dest" fi [[ "\$rel" == .ssh/* ]] && chmod 600 "\$src" 2>/dev/null || true - ln -sf "\$src" "\$dest" + ln -sfn "\$src" "\$dest" echo " Linked: ~/\$rel" done < "\$MANIFEST"