Set up a new nixos-vm-template context for managing VMs on a hypervisor (libvirt or proxmox)...
Configure the .env file for managing VMs on a hypervisor.
Use AskUserQuestion to ask which backend:
nas profile)Most users can accept defaults. Only ask about non-default settings if user indicates special requirements (like running from a container).
Create .env with just:
BACKEND=libvirt
Ask the user (as plain text prompts, not multiple choice):
pve) or hostname/IPExplain that they should configure their SSH connection in ~/.ssh/config:
Host pve
HostName 192.168.1.100
User root
Port 22
And use ssh-agent for key authentication:
eval $(ssh-agent)
ssh-add ~/.ssh/id_ed25519
Same SSH setup as proxmox. Ask the user (plain text prompts):
pve) or hostname/IPzfspool or dir storage, e.g. local-zfs or a pool name like rust; NOT a bare ZFS pool path). Check with ssh <host> pvesm status.Notes specific to this backend:
nixos-rebuild runs inside). There is no immutable/semi-mutable mode.nas profile (NFS + Samba) is LXC-only and runs the container privileged with an apparmor-unconfined override (for kernel NFS).<dataset>:<container-path>, e.g. rust/nas:/srv/nas); a bare dataset name is created on the host if missing. Configure these in the create wizard.Example .env:
BACKEND=proxmox-lxc
PVE_HOST=pve
PVE_STORAGE=local-zfs
PVE_BRIDGE=vmbr0
PVE_BACKUP_STORAGE=local
Create/overwrite the .env file at the project root.
Example .env for libvirt:
BACKEND=libvirt
Example .env for proxmox:
BACKEND=proxmox
PVE_HOST=pve
PVE_STORAGE=local-lvm
PVE_BRIDGE=vmbr0
PVE_BACKUP_STORAGE=local
After creating the .env file, run the connection test:
just test-connection
Important: Warn the user that they may need to authenticate multiple times during the test (SSH key passphrase prompts if not using ssh-agent, or host key verification).
If the test passes, tell the user the setup is complete and they can now use just commands.
| Variable | Default | Description |
|---|---|---|
BACKEND |
libvirt |
Set to libvirt |
LIBVIRT_URI |
qemu:///system |
Libvirt connection URI |
HOST_CMD |
(empty) | Prefix for host commands (e.g., host-spawn for distrobox) |
| Variable | Default | Description |
|---|---|---|
BACKEND |
- | Set to proxmox |
PVE_HOST |
(required) | SSH config host name (or hostname/IP) |
PVE_NODE |
$PVE_HOST |
Proxmox node name (for clusters) |
PVE_STORAGE |
local |
Proxmox storage for VM disks |
PVE_BRIDGE |
vmbr0 |
Network bridge name |
PVE_DISK_FORMAT |
qcow2 |
Disk format (qcow2, raw, vmdk) |
PVE_BACKUP_STORAGE |
local |
Proxmox storage for backups |
| Variable | Default | Description |
|---|---|---|
BACKEND |
- | Set to proxmox-lxc |
PVE_HOST |
(required) | SSH config host name (or hostname/IP) |
PVE_NODE |
$PVE_HOST |
Proxmox node name (for clusters) |
PVE_STORAGE |
local |
CT-capable rootfs storage (zfspool/dir; NOT a bare pool path) |
PVE_BRIDGE |
vmbr0 |
Network bridge name |
PVE_BACKUP_STORAGE |
local |
Proxmox storage for backups |
PVE_TEMPLATE_DIR |
/var/lib/vz/template/cache |
Where the LXC template tarball is staged |
LXC_FEATURES |
nesting=1 |
pct create --features value |