{
  config,
  lib,
  pkgs,
  modulesPath,
  ...
}: {
  imports = [
    (modulesPath + "/profiles/qemu-guest.nix")
  ];

  boot.initrd.availableKernelModules = ["ata_piix" "uhci_hcd" "virtio_pci" "virtio_scsi" "sd_mod"];
  boot.initrd.kernelModules = ["dm-snapshot"];
  boot.kernelModules = [];
  boot.extraModulePackages = [];

  # https://elis.nu/blog/2020/05/nixos-tmpfs-as-root/
  fileSystems."/" = {
    device = "none";
    fsType = "tmpfs";
    options = ["defaults" "size=3G" "mode=755"]; # mode=755 so only root can write to those files
  };
  fileSystems."/boot" = {
    device = "/dev/disk/by-label/BOOT";
    fsType = "vfat";
  };
  fileSystems."/nix" = {
    device = "/dev/disk/by-label/nix";
    neededForBoot = true;
    fsType = "ext4";
  };

  swapDevices = [
    {
      device = "/nix/persist/swapfile";
      size = 4 * 1024; # 4 GiB
    }
  ];

  # Enable hot-adding memory. Otherwise, the machine will be left with 1GB of
  # memory only.
  # https://pve.proxmox.com/wiki/Hotplug_(qemu_disk,nic,cpu,memory)
  # Nix code inspired by (this isn't hyperv):
  # https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/virtualisation/hyperv-guest.nix
  services.udev.packages = lib.singleton (pkgs.writeTextFile {
    name = "proxmox-memory-hotadd-udev-rules";
    destination = "/etc/udev/rules.d/80-hotplug-mem.rules";
    text = ''
      SUBSYSTEM=="memory", ACTION=="add", TEST=="state", ATTR{state}=="offline", ATTR{state}="online"
    '';
  });

  nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
}