#!/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"