Shares a host directory as /home/user in guest VMs via virtiofs, enabled
by default. Accepts true (/shared/<vmname>), a custom path string, or
false to disable. Host directory is created with correct uid:gid ownership
at VM start.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Allows each VM to choose its Wayland proxy. Defaults to wayland-proxy-virtwl
(existing behavior). Setting waylandProxy = "sommelier" uses the ChromeOS
sommelier compositor instead.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Drop the vm- prefix, add dash separator between VM name and interface
index, and remove the 10-character VM name limit. Long names that would
exceed IFNAMSIZ (15 chars) are truncated with VM ID appended for
uniqueness (e.g., bankingsupe3-22 for id=3).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
TAP interfaces were named tap-<vmname>, which collides when a VM has
multiple TAP interfaces. Use vm-<vmname><ifIndex> instead, where ifIndex
is the PCI slot number (22-36). Add assertion that VM names are at most
10 characters to stay within the 15-char Linux interface name limit.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
/run is tmpfs, so placing the ephemeral disk there defeats the purpose
of moving writes off RAM. Use /var/lib/vmsilo/ which is on real disk.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
VM root overlay writes now go to a sparse qcow2 disk instead of tmpfs,
reducing host RAM usage. The host creates the qcow2 at VM start and
deletes it at stop. The guest formats it as ext4 with discard support.
Adds rootOverlay option (type: qcow2/tmpfs, size: default 10G) with
tmpfs available as fallback for the original behavior.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Change network.interfaces from list to attrset where keys become
guest-visible interface names. Names are passed to the guest via
vmsilo.ifname=<name>,<mac> kernel parameters and applied at early
boot via udev rules.
- Add sortedInterfaceList helper for deterministic PCI slot assignment
- Update all interface iteration to use sorted attrset
- Add vmsilo-ifname-rules initrd service to generate udev rules
- MAC addresses now generated from vmName-userIfName hash
BREAKING: network.interfaces syntax changes from list to attrset:
Before: interfaces = [{ type = "tap"; ... }];
After: interfaces = { wan = { type = "tap"; ... }; };
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>