restore-nvim-dirs.sh
1 #!/usr/bin/env bash 2 # Restore the most recent Neovim backup created by backup-nvim-dirs.sh. 3 # Current (broken) dirs are renamed with a .broken-TIMESTAMP suffix before restore. 4 # Usage: ./scripts/restore-nvim-dirs.sh 5 6 set -e 7 8 # Find the latest backup timestamp across all three dirs 9 latest=$( 10 { 11 ls -d ~/.local/share/nvim.bak-* 2>/dev/null 12 ls -d ~/.local/state/nvim.bak-* 2>/dev/null 13 ls -d ~/.cache/nvim.bak-* 2>/dev/null 14 } \ 15 | sed 's/.*\.bak-//' \ 16 | sort -r \ 17 | head -1 18 ) 19 20 if [ -z "$latest" ]; then 21 echo "No Neovim backups found (looked for nvim.bak-* in share/state/cache)." >&2 22 exit 1 23 fi 24 25 echo "Latest backup: bak-${latest}" 26 echo "" 27 28 broken_suffix="broken-$(date '+%Y%m%d-%H%M%S')" 29 restored=0 30 31 restore_dir() { 32 local base="$1" # e.g. ~/.local/share/nvim 33 local backup="${base}.bak-${latest}" 34 35 if [ ! -d "$backup" ]; then 36 echo " skip ${base} (no backup for this timestamp)" 37 return 38 fi 39 40 if [ -d "$base" ]; then 41 mv "$base" "${base}.${broken_suffix}" 42 echo " stashed ${base} -> ${base##*/}.${broken_suffix}" 43 fi 44 45 mv "$backup" "$base" 46 echo " restored ${backup##*/} -> ${base##*/}" 47 restored=1 48 } 49 50 restore_dir ~/.local/share/nvim 51 restore_dir ~/.local/state/nvim 52 restore_dir ~/.cache/nvim 53 54 echo "" 55 if [ "$restored" -eq 0 ]; then 56 echo "Nothing restored." 57 else 58 echo "Done. Restart Neovim." 59 fi