{ lib, pkgs, config, systems, ... }:
let
  wanBDF =
    if config.my.build.isDevVM then "00:02.0" else "01:00.0";
in
{
  systemd = {
    services."vm@estuary" = {
      # Depend the interface, networkd wait-online would deadlock...
      requires = [ "sys-subsystem-net-devices-base.device" ];
      preStart = ''
        count=0
        while ! ${pkgs.iproute2}/bin/ip link show dev base > /dev/null 2>&1; do
            count=$((count+1))
            if [ $count -ge 5 ]; then
              echo "Timed out waiting for bridge interface"
            fi
            sleep 0.5
        done
      '';
    };
  };

  my = {
    vms = {
      instances.estuary = {
        uuid = "59f51efb-7e6d-477b-a263-ed9620dbc87b";
        networks.base.mac = "52:54:00:ab:f1:52";
        drives = {
          installer = {
            backend = {
              driver = "file";
              filename = "${systems.installer.configuration.config.my.buildAs.iso}/iso/nixos.iso";
              read-only = "on";
            };
            format.driver = "raw";
            frontend = "ide-cd";
            frontendOpts = {
              bootindex = 1;
            };
          };
          disk = {
            backend = {
              driver = "host_device";
              filename = "/dev/ssds/vm-estuary";
              # It appears this needs to be set on the backend _and_ the format
              discard = "unmap";
            };
            format = {
              driver = "raw";
              discard = "unmap";
            };
            frontend = "virtio-blk";
            frontendOpts = {
              bootindex = 0;
            };
          };
        };
        hostDevices."${wanBDF}" = { };
      };
    };
  };
}