From 4bcd3b5757b9de2a98e814b649e8278538a11d0d Mon Sep 17 00:00:00 2001 From: Paul Frederiksen Date: Wed, 10 Sep 2025 12:37:18 -0400 Subject: [PATCH] fix: prevent .zshrc deletion during uninstall when no backup exists Fixes #13156 - Enhanced uninstall script to automatically restore .zshrc from uninstall backup when no original backup (.zshrc.pre-oh-my-zsh) exists - Improved install script to create backup even when KEEP_ZSHRC=yes - Added better user feedback and error handling - Prevents data loss for users who installed with --keep-zshrc option The issue occurred when users installed oh-my-zsh with KEEP_ZSHRC=yes (keeping their existing .zshrc), which didn't create a backup. During uninstall, their .zshrc would be deleted with no backup to restore. Now the uninstall process: 1. Creates a timestamped backup of current .zshrc 2. Looks for original backup (.zshrc.pre-oh-my-zsh) 3. If found, restores the original 4. If not found, automatically restores from the uninstall backup 5. Provides clear feedback to the user This ensures users never lose their .zshrc configuration during uninstall. --- tools/install.sh | 5 +++++ tools/uninstall.sh | 13 +++++++++++++ 2 files changed, 18 insertions(+) diff --git a/tools/install.sh b/tools/install.sh index 8cf62a76e..bcf5f67fc 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -341,6 +341,11 @@ setup_zshrc() { # Skip this if the user doesn't want to replace an existing .zshrc if [ "$KEEP_ZSHRC" = yes ]; then echo "${FMT_YELLOW}Found ${zdot}/.zshrc.${FMT_RESET} ${FMT_GREEN}Keeping...${FMT_RESET}" + # Still create a backup for uninstall safety, but don't overwrite the existing .zshrc + if [ ! -e "$OLD_ZSHRC" ]; then + echo "${FMT_GREEN}Creating backup at ${OLD_ZSHRC} for safe uninstall${FMT_RESET}" + cp "$zdot/.zshrc" "$OLD_ZSHRC" + fi return fi diff --git a/tools/uninstall.sh b/tools/uninstall.sh index 6e3df7aca..5c82666b1 100644 --- a/tools/uninstall.sh +++ b/tools/uninstall.sh @@ -35,6 +35,19 @@ if [ -e "$ZSHRC_ORIG" ]; then echo "Your original zsh config was restored." else echo "No original zsh config found" + # Check if we have a backup from this uninstall session + if [ -e ~/.zshrc.omz-uninstalled-* ]; then + echo "However, your .zshrc was backed up during this uninstall." + echo "Restoring it automatically..." + # Find the most recent backup and restore it + LATEST_BACKUP=$(ls -t ~/.zshrc.omz-uninstalled-* 2>/dev/null | head -1) + if [ -n "$LATEST_BACKUP" ]; then + mv "$LATEST_BACKUP" ~/.zshrc + echo "Your .zshrc has been restored from backup." + fi + else + echo "No backup found. You may need to recreate your .zshrc configuration." + fi fi echo "Thanks for trying out Oh My Zsh. It's been uninstalled."