115 lines
2.9 KiB
Bash
Executable file
115 lines
2.9 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
#
|
|
# qvm-reset - Wipe VM overlay and workspace registry
|
|
#
|
|
# This script resets the VM to a clean state by deleting the overlay.qcow2
|
|
# and workspaces.json files. This is useful when you want to start fresh
|
|
# or if the VM state has become corrupted.
|
|
#
|
|
# IMPORTANT: This does NOT delete the base image (base.qcow2), so you won't
|
|
# need to re-download or rebuild the NixOS image.
|
|
#
|
|
# Usage: qvm reset [-f|--force]
|
|
# -f, --force Skip confirmation prompt
|
|
#
|
|
|
|
set -euo pipefail
|
|
|
|
# Source common library
|
|
readonly QVM_LIB_DIR="${QVM_LIB_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../lib" && pwd)}"
|
|
source "${QVM_LIB_DIR}/common.sh"
|
|
|
|
# Get path to qvm-stop script
|
|
readonly QVM_STOP="${QVM_BIN_DIR:-$(dirname "$0")}/qvm-stop"
|
|
|
|
#
|
|
# confirm_reset - Prompt user for confirmation
|
|
# Returns: 0 if user confirms, exits script if user cancels
|
|
#
|
|
confirm_reset() {
|
|
echo
|
|
log_warn "This will delete:"
|
|
|
|
if [[ -f "$QVM_OVERLAY" ]]; then
|
|
echo " - $QVM_OVERLAY"
|
|
fi
|
|
|
|
if [[ -f "$QVM_WORKSPACES_FILE" ]]; then
|
|
echo " - $QVM_WORKSPACES_FILE"
|
|
fi
|
|
|
|
if [[ ! -f "$QVM_OVERLAY" ]] && [[ ! -f "$QVM_WORKSPACES_FILE" ]]; then
|
|
log_info "No files to delete (already clean)"
|
|
exit 0
|
|
fi
|
|
|
|
echo
|
|
echo "The base image (base.qcow2) and cache directories will NOT be deleted."
|
|
echo
|
|
read -p "Continue with reset? [y/N] " -n 1 -r
|
|
echo
|
|
|
|
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
|
log_info "Reset cancelled"
|
|
exit 0
|
|
fi
|
|
}
|
|
|
|
#
|
|
# main - Main reset orchestration
|
|
#
|
|
main() {
|
|
local force=false
|
|
|
|
# Parse arguments
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
-f|--force)
|
|
force=true
|
|
shift
|
|
;;
|
|
*)
|
|
die "Unknown option: $1"
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# Confirm unless --force is used
|
|
if [[ "$force" != true ]]; then
|
|
confirm_reset
|
|
fi
|
|
|
|
# Stop VM if running
|
|
if is_vm_running; then
|
|
log_info "VM is running, stopping it first..."
|
|
"$QVM_STOP"
|
|
fi
|
|
|
|
# Delete overlay if it exists
|
|
if [[ -f "$QVM_OVERLAY" ]]; then
|
|
log_info "Deleting overlay: $QVM_OVERLAY"
|
|
rm -f "$QVM_OVERLAY"
|
|
else
|
|
log_info "Overlay does not exist (nothing to delete)"
|
|
fi
|
|
|
|
# Delete workspaces registry if it exists
|
|
if [[ -f "$QVM_WORKSPACES_FILE" ]]; then
|
|
log_info "Deleting workspaces registry: $QVM_WORKSPACES_FILE"
|
|
rm -f "$QVM_WORKSPACES_FILE"
|
|
else
|
|
log_info "Workspaces registry does not exist (nothing to delete)"
|
|
fi
|
|
|
|
# Print success message with next steps
|
|
echo
|
|
log_info "Reset complete!"
|
|
echo
|
|
echo "Next steps:"
|
|
echo " - Run 'qvm start' to boot the VM with a fresh overlay"
|
|
echo " - Your base image (base.qcow2) is still intact"
|
|
echo " - Cache directories (cargo-home, pnpm-store, etc.) are preserved"
|
|
echo
|
|
}
|
|
|
|
main "$@"
|