summaryrefslogblamecommitdiff
path: root/.local/bin/livevm
blob: 638386b2e2767f6c78329a317c71d5a5bb4fd91a (plain) (tree)




























































                                                                                                                                             
#!/bin/sh

data_dir="${XDG_DATA_HOME:-${HOME}/.local/share}/vm"
storage="${data_dir}/livevm.qcow2"

# allocate half of available memory and cores to vm
mem="$(($(cat /proc/meminfo | grep MemAvailable | grep -o '[0-9]*')/2))"
cores="$(($(nproc)/2))"
cmd="qemu-system-x86_64 -boot menu=on -enable-kvm -device intel-hda -device hda-duplex -m ${mem}k -cpu host -smp $cores -drive file=$storage"

[ ! -d "${data_dir}" ] &&
	mkdir -p "${data_dir}"
[ ! -f "$storage" ] &&
	qemu-img create -f qcow2 livevm.img 30G

while getopts "wehc:d:" f
do
	case "$f" in
	w)
		cmd="${cmd} -device qxl -display gtk"
		;;
	e)
		[ ! -f "/usr/share/edk2-ovmf/x64/OVMF_CODE.fd" ] &&
			die "ovmf not found, install it"

		[ ! -f "${data_dir}/OVMF_VARS.fd" ] &&
			cp "/usr/share/edk2-ovmf/x64/OVMF_CODE.fd" "${data_dir}/OVMF_VARS.fd"

		cmd="${cmd} -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2-ovmf/x64/OVMF_CODE.fd"
		cmd="${cmd} -drive if=pflash,format=raw,file=${data_dir}/OVMF_VARS.fd"
		;;
	c)
		cmd="${cmd} -cdrom ${OPTARG}"
		;;
	d)
		cmd="${cmd} -drive file=${OPTARG}"
		;;
	h)
		cat <<- EOF
		Usage: ${0##*/} command
		a wrapper for qemu
		Commands:
		  -e	use efi
		  -w	run wangblows
		  -c	[cdrom]
		  -d	[drive]
		EOF
		exit
		;;
	?)
		echo "usage: ${0##*/} [ -weh ] [ -c cdrom ] [ -d drive ]"
		exit 1
		;;
	esac
done

# use virgl by default if wangblows is not set
[ -n "${cmd##*device qxl*}" ] &&
	cmd="${cmd} -device virtio-vga-gl -display gtk,gl=on"

eval "$cmd"