{ imports = [ ./estuary ./shill ]; nixos.systems.colony.configuration = { lib, pkgs, config, systems, ... }: let inherit (builtins) listToAttrs; inherit (lib) mkIf mkMerge optionals; vmLVM = vm: lv: { name = lv; backend = { driver = "host_device"; filename = "/dev/ssds/vm-${vm}-${lv}"; # It appears this needs to be set on the backend _and_ the format discard = "unmap"; }; format = { driver = "raw"; discard = "unmap"; }; frontend = "virtio-blk"; }; installerDisk = { name = "installer"; backend = { driver = "file"; filename = "${systems.installer.configuration.config.my.buildAs.iso}/iso/nixos-installer-devplayer0.iso"; read-only = "on"; }; format.driver = "raw"; frontend = "ide-cd"; frontendOpts = { bootindex = 1; }; }; in { systemd = { network = { links = { "10-wan10g" = { matchConfig.Path = "pci-0000:2d:00.0"; linkConfig.Name = "wan10g"; }; }; netdevs = { "25-vm-wan10g" = { netdevConfig = { Name = "vm-wan10g"; Kind = "macvtap"; }; # TODO: Upstream this missing section extraConfig = '' [MACVTAP] Mode=passthru ''; }; }; networks = { "75-wan10g" = { matchConfig.Name = "wan10g"; networkConfig.MACVTAP = "vm-wan10g"; }; "75-vm-wan10g" = { matchConfig.Name = "vm-wan10g"; linkConfig.RequiredForOnline = "no"; }; }; }; services = { "vm@estuary" = let vtapUnit = "sys-subsystem-net-devices-vm\\x2dwan10g.device"; in { requires = [ vtapUnit ]; after = [ vtapUnit ]; }; }; }; my = { vms = { instances = { estuary = { uuid = "27796a09-c013-4031-9595-44791d6126b9"; cpu = "host,topoext"; smp = { cpus = 2; threads = 2; }; memory = 3072; networks = { wan = { ifname = "vm-wan10g"; bridge = null; tapFD = 100; # Real hardware MAC mac = "00:02:c9:56:24:6e"; waitOnline = false; }; base = { waitOnline = "carrier"; mac = "52:54:00:15:1a:53"; }; }; drives = [ ] ++ (optionals (!config.my.build.isDevVM) [ (mkMerge [ (vmLVM "estuary" "esp") { frontendOpts.bootindex = 0; } ]) (vmLVM "estuary" "nix") (vmLVM "estuary" "persist") ]); hostDevices = { net-wan0 = { index = 0; hostBDF = if config.my.build.isDevVM then "00:02.0" else "27:00.0"; }; }; }; shill = { uuid = "fc02d8c8-6f60-4b69-838a-e7aed6ee7617"; cpu = "host,topoext"; smp = { cpus = 12; threads = 2; }; memory = 65536; networks.vms.mac = "52:54:00:27:3d:5c"; cleanShutdown.timeout = 120; drives = [ ] ++ (optionals (!config.my.build.isDevVM) [ (vmLVM "shill" "esp") (vmLVM "shill" "nix") (vmLVM "shill" "persist") { name = "media"; backend = { driver = "host_device"; filename = "/dev/hdds/media"; discard = "unmap"; }; format = { driver = "raw"; discard = "unmap"; }; frontend = "virtio-blk"; } ]); }; }; }; }; }; }