Add initial QVM CLI, Nix flake, scripts and README
This commit is contained in:
parent
25b1cca0e6
commit
8534f7efb9
14 changed files with 2359 additions and 0 deletions
116
bin/qvm-reset
Executable file
116
bin/qvm-reset
Executable file
|
|
@ -0,0 +1,116 @@
|
|||
#!/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_BIN_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
readonly QVM_STOP="${QVM_BIN_DIR}/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 "$@"
|
||||
Loading…
Add table
Add a link
Reference in a new issue