# -*- coding: utf-8 -*-
# -*- mode: ruby -*-
# vi: set ft=ruby :

# for Apple silicon Mac: vagrant up --provider=qemu

Vagrant.configure("2") do |config|

  config.vm.box = "takesako/alpine-virt-3.24-x86_64"
  config.vm.box_version = "3.24.1"
  config.vm.box_architecture = "amd64"

  config.vm.box_check_update = false
  config.vm.boot_timeout = 300
  config.ssh.insert_key = false

  # config.ssh.guest_port = 2222
  config.vm.network "forwarded_port", guest: 80, host: 7777
  config.vm.synced_folder "vagrant", "/vagrant"

  config.vm.provider :virtualbox do |virtualbox, override|
    virtualbox.gui = true
  end

  config.vm.provider :vmware_desktop do |vmware, override|
    vmware.gui = true
    vmware.vmx["ethernet0.pcislotnumber"] = "160"
  end

  config.vm.provider "qemu" do |qemu, override|
    qemu.arch = "x86_64"# "aarch64"
    qemu.cpu = "qemu64" # "cortex-a72"
    qemu.machine = "q35" # "virt"
    qemu.memory = "256M"
    qemu.smp = "2"
    qemu.no_daemonize = true # OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
    # qemu.qemu_dir = "C:/Program Files/qemu/share" # for Windows
    if RbConfig::CONFIG["host_os"] =~ /darwin/
      override.vm.synced_folder "vagrant", "/vagrant", disabled: true
      qemu.extra_qemu_args = %w(
        -virtfs 
        local,path=vagrant,mount_tag=shared,security_model=mapped-xattr
      )
    else
      override.vm.synced_folder "vagrant", "/vagrant", type: "rsync"
    end
    qemu.other_default = %w(-parallel none -vga std)
  end

  config.vm.provision "shell", inline: <<-SHELL
    if grep -qi QEMU /sys/class/dmi/id/sys_vendor 2>/dev/null; then
      mount -t 9p -o trans=virtio,version=9p2000.L shared /vagrant
      grep -q "^shared /vagrant 9p" /etc/fstab || \
        echo "shared /vagrant 9p trans=virtio,version=9p2000.L 0 0" >> /etc/fstab
    fi
    apk update
    apk upgrade
    apk add --no-cache linux-virt-dev linux-headers make gcc
    apk add --no-cache g++ gdb file strace nasm micro mini_httpd
    chown -R vagrant:vagrant /vagrant
    ln -s /vagrant/asm /var/www/localhost/htdocs/asm
    ln -s /vagrant/cgi /var/www/localhost/htdocs/cgi
    echo "cgipat=**.cgi" >> /etc/mini_httpd/mini_httpd.conf
    service mini_httpd start 2>/dev/null
    rc-update add mini_httpd default
  SHELL

  Encoding.default_external = "utf-8"
end
