mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2025-12-05 01:46:46 +01:00
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.
54 lines
1.7 KiB
Bash
54 lines
1.7 KiB
Bash
if hash chsh >/dev/null 2>&1 && [ -f ~/.shell.pre-oh-my-zsh ]; then
|
|
old_shell=$(cat ~/.shell.pre-oh-my-zsh)
|
|
echo "Switching your shell back to '$old_shell':"
|
|
if chsh -s "$old_shell"; then
|
|
rm -f ~/.shell.pre-oh-my-zsh
|
|
else
|
|
echo "Could not change default shell. Change it manually by running chsh"
|
|
echo "or editing the /etc/passwd file."
|
|
exit
|
|
fi
|
|
fi
|
|
|
|
read -r -p "Are you sure you want to remove Oh My Zsh? [y/N] " confirmation
|
|
if [ "$confirmation" != y ] && [ "$confirmation" != Y ]; then
|
|
echo "Uninstall cancelled"
|
|
exit
|
|
fi
|
|
|
|
echo "Removing ~/.oh-my-zsh"
|
|
if [ -d ~/.oh-my-zsh ]; then
|
|
rm -rf ~/.oh-my-zsh
|
|
fi
|
|
|
|
if [ -e ~/.zshrc ]; then
|
|
ZSHRC_SAVE=~/.zshrc.omz-uninstalled-$(date +%Y-%m-%d_%H-%M-%S)
|
|
echo "Found ~/.zshrc -- Renaming to ${ZSHRC_SAVE}"
|
|
mv ~/.zshrc "${ZSHRC_SAVE}"
|
|
fi
|
|
|
|
echo "Looking for original zsh config..."
|
|
ZSHRC_ORIG=~/.zshrc.pre-oh-my-zsh
|
|
if [ -e "$ZSHRC_ORIG" ]; then
|
|
echo "Found $ZSHRC_ORIG -- Restoring to ~/.zshrc"
|
|
mv "$ZSHRC_ORIG" ~/.zshrc
|
|
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."
|
|
echo "Don't forget to restart your terminal!"
|