Skip to content

omarchy-vm

Recipe card from the charly-vm plugin (Kinds — schema authoring).

Three entities in opencharly/distro-omarchy (box/omarchy inside charly), all in that repo’s unified charly.yml.

omarchy-vm — the official ISO, installed unattended

Section titled “omarchy-vm — the official ISO, installed unattended”

source.kind: iso. Boots Omarchy’s own 5.8 GiB installer ISO with a charly-rendered cidata answers volume and lets Omarchy install itself with nobody at the keyboard.

Setting Value
Source kind: iso, distro: omarchy, checksum from the publisher’s .sha256 sidecar
Credentials user / user, no disk encryption
Disk / RAM / CPU 40G / 8G / 4
Machine / firmware q35 / uefi-insecure (Omarchy requires Secure Boot off)
Backend libvirt — REQUIRED; auto falls back to qemu and every libvirt probe then fails “Domain not found”

Why unencrypted is the right default here: an encrypted install is not actually unattended (someone types the LUKS passphrase at first boot), and its passphrase would sit in PLAINTEXT in the seed’s disk_encryption block. With encrypt: false there is no such block and nothing on the seed that is not already public.

The boot order removes a whole subsystem. The blank disk is first in the boot order and the ISO second, so the firmware falls through to the ISO on the first boot and the installed system boots from disk ever after. No eject, no detach, no ISO-removal step, and the “installer loops forever” failure mode cannot occur.

omarchy-pacstrap-vm — the composable sibling

Section titled “omarchy-pacstrap-vm — the composable sibling”

source.kind: bootstrap via omarchy-pacstrap-builder + pacstrap: charly’s own machinery reproducing Omarchy from packages, for fast rebuilds and derived images. It is NOT a claim of byte-identity with an ISO install — the ISO runs Omarchy’s own orchestrator, which does work charly’s bootstrap does not.

The builder is built on omarchy, not on arch.arch, and that is the one decision that matters: pacstrap resolves against the BUILDER’s /etc/pacman.conf, and charly appends a distro’s extra_repo there without rewriting [core]/[extra]. On a plain-Arch builder the target rootfs would be a MIX — Omarchy’s own packages plus a newer upstream Arch snapshot — and pacman reports success either way.

charly-omarchy — the ready-to-run keeper

Section titled “charly-omarchy — the ready-to-run keeper”

A DEPLOY of omarchy-vm (from:), not a third template: a deploy’s from: carries deploy-scope fields only, and the VM spec comes wholly from the named kind: vm entity, so the ISO, the seed and the credentials are stated once. Adds the charly toolchain. NOT disposable — it is meant to be kept.

Bed Proves
check-omarchy-iso-vm Omarchy installs itself UNATTENDED from its own ISO. Every assertion is a fact about the installed system that cannot be true unless charly’s rendered answers were found, parsed and acted on
check-charly-omarchy-vm the charly toolchain installs onto a guest Omarchy installed from its own ISO. Derives from the TEMPLATE, not from the keeper — a bed’s from: names a kind: vm entity
check-omarchy-pacstrap-vm the from-packages path produces a BOOTABLE Omarchy

All three are disposable: true, so charly check run executes the full R10 sequence including a destroy and a genuine reinstall.

Terminal window
charly -C box/omarchy vm build omarchy-vm
charly -C box/omarchy check run check-omarchy-iso-vm
charly -C box/omarchy vm ssh charly-omarchy
  • A bootstrap VM is not the distro by default. pacstrap.base_package is a minimal bootstrap set carrying neither omarchy nor omarchy-settings, so without the metapackage in source.package the guest reports ID=arch.
  • The ESP is at /boot, not /boot/efi, and the cmdline uses root=PARTUUID=… with rootflags=subvol=@. Omarchy boots a Unified Kernel Image at /boot/EFI/Linux/omarchy_linux.efi.
  • The bootstrap path registers no named NVRAM entry. efibootmgr --create runs inside the builder against a loop device, so the guest boots through the firmware’s auto-created removable-media entry. Assert /proc/cmdline instead — it carries flags only that distro’s limine.conf sets.
  • These builds need ~22 GiB free on the STAGING dir. /tmp is often a tmpfs too small; set TMPDIR to a real filesystem.

MUST be invoked when the task involves any omarchy VM entity, its seed answers, or its check beds. Invoke this skill BEFORE reading source code or launching Explore agents.