#!/bin/bash -eu getmaxram() { local ram; ram="$(free -g | awk '/^Mem:/{print $2 - 2}')" if [ "$ram" -le 2 ]; then ram=2 elif [ "$ram" -gt 32 ]; then ram=32; fi echo "${ram}G" } ISO="$1"; shift DISK="$HOME/${ISO%.*}.qcow2" MAXMEM="$(getmaxram)" if ! [ -f "$DISK" ]; then (set -x qemu-img create -f qcow2 "$DISK" 64G ) fi (set -x qemu-system-x86_64 \ -accel kvm \ -M q35 \ -bios /usr/share/edk2/x64/OVMF.4m.fd \ -monitor stdio \ -cpu host \ -m "2G,maxmem=$MAXMEM" \ -vga virtio \ -audio pipewire,model=hda \ -nic model=virtio-net-pci,type=user \ -device qemu-xhci \ -object "memory-backend-ram,id=mem,size=2G,share=on" \ -numa node,memdev=mem \ -drive "if=virtio,file=$DISK" \ -drive "file=$ISO,media=cdrom,readonly=on" \ "$@" )