Converge and conquer β on Arch.
β οΈ Development Status: The Dagger build pipeline produces a bootable Arch-based rootfs, SquashFS live image, and QCOW2 VM image. COSMIC boots to a greeter, theregicideuser can log in, and core apps (podman, distrobox, Rio, NVIDIA open drivers) are pre-installed. The ARM64 build is tested on NVIDIA Spark. This is a side project of the main RegicideOS effort and is not the primary distribution.
Latest release: RegicideOS v0.0.1 β includes a prebuilt
regicide-arch.isolive ISO, released in split chunks with SHA256 checksums because GitHub caps individual assets at 2 GiB.
RegicideOSArch is an Arch Linux-based experimental variant of RegicideOS. It shares the same design goals β immutable Btrfs root, COSMIC desktop, container-first tooling, and AI-native system integration β but uses Arch Linux and pacman instead of Gentoo/Portage. The primary reason is that Arch provides official COSMIC packages in the extra repository and a clean pacman-based install model, making the build pipeline simpler and faster inside nested containers.
Default install size: the current image ships 536 packages (binary, no compiler toolchain) β the Gentoo variant ships 905 (source-built, full toolchain included).
This is a side project. The main RegicideOS distribution remains the Gentoo-based effort in the RegicideOS repository.
Target note: The current package set is optimized for the bootable QCOW2 VM image. A future ISO/bare-metal profile will diverge where needed. You can make this ISO-friendly by removing the following packages from the default install:
qemu-guest-agent,spice-vdagentd, and the fulllinux-firmwarebundle (replace it with targetedlinux-firmware-*split packages such aslinux-firmware-iwlwifi,linux-firmware-rtw88,amd-ucode, andintel-ucode).
| Component | Technology | Purpose | Status |
|---|---|---|---|
| Base distro | Arch Linux | Rolling binary distribution | β Working |
| Init System | systemd | Service management | β Working |
| Filesystem | Btrfs (read-only root + overlays) | Immutable system image with writable layers | β Working |
| Initramfs | mkinitcpio | Btrfs, LUKS, systemd hooks | β Working |
| Bootloader | systemd-boot (unencrypted) / GRUB (encrypted) | UEFI boot | β Working |
| Desktop | COSMIC (official extra group) |
Wayland-native GPU desktop | β Working |
| Container Runtime | podman + distrobox | Rootless containers and distro compatibility | β Working |
| GPU | NVIDIA open-source driver (nvidia-open-dkms) |
Proprietary-free NVIDIA stack; optional via --no-nvidia |
β Optional |
| Terminal | Rio (Flatpak) | GPU-accelerated terminal | β Working |
| Packages | build-system/packages/*.txt |
Shared package lists for VM/container variants | β Added |
build-system/
βββ arch/
β βββ build-qemu-image.sh # Encrypted LUKS + Btrfs + GRUB builder
β βββ build-qemu-image-guestfish.sh # Unencrypted systemd-boot builder (default)
β βββ build-qemu-image-guestmount.sh # FUSE/guestmount GRUB builder
β βββ post-install.sh # Services, initramfs, users, flatpak
β βββ output/ # Generated images and runner scripts
βββ packages/ # Shared package lists (VM, future ISO)
β βββ vm.txt # Default VM package set
βββ dagger_pipeline.py # Dagger orchestration
βββ README.md # Build-system reference
Note: The pipeline produces a compressed rootfs tarball, a SquashFS live image, a bootable QCOW2 VM image, and β with
--isoβ a bootable live ISO (build-system/arch/output/regicide-arch.iso). A prebuilt live ISO is also available in v0.0.1.
- 64-bit x86 processor
- 12GB disk space minimum (20GB recommended)
- UEFI firmware (or OVMF for VMs)
- Internet connection
- Docker or Podman for Dagger
Note: the Dagger engine image needs to create the
dagger0bridge, so it cannot run under rootless Podman. If your defaultdockerendpoint is a rootless Podman socket, start the rootful Podman socket and point Dagger at it:sudo systemctl enable --now podman.socket DOCKER_HOST=unix:///run/podman/podman.sock sudo -E dagger run python build-system/dagger_pipeline.py --plain
curl -fsSL https://dl.dagger.io/dagger/install.sh | bashcd /path/to/RegicideOSArch
DAGGER_PROGRESS=plain dagger run python build-system/dagger_pipeline.py --qcow2Outputs:
build-system/arch/output/regicide-arch.tar.xzβ compressed rootfsbuild-system/arch/output/regicide-arch.imgβ live SquashFS imagebuild-system/arch/output/regicide-arch.qcow2β bootable VM disk
Note:
regicide-arch.imgis not a bootable USB image; it is the live SquashFS payload (the ROOTS filesystem). The bootable USB/VM image is the ISO, built with--iso.
Download the split ISO chunks from the v0.0.1 release, reassemble, and verify:
cat regicide-arch.iso.part* > regicide-arch.iso
sha256sum -c regicide-arch.iso.sha256The ISO boots under UEFI in QEMU/virt-manager or can be written to a USB drive to boot on bare metal. Identify the USB device (/dev/sdX), unmount any partitions on it, and write the ISO:
sudo umount /dev/sdX*
sudo dd if=regicide-arch.iso of=/dev/sdX bs=4M status=progress conv=fsyncRegenerate the live ISO from an existing build:
If you already have a tarball and SquashFS and want a matching bootable ISO without a full rebuild, reuse them:
DAGGER_PROGRESS=plain dagger run python build-system/dagger_pipeline.py --plain \
--iso \
--from-tarball build-system/arch/output/regicide-arch.tar.xz \
--from-squashfs build-system/arch/output/regicide-arch.imgsudo ./build-system/arch/output/run-qemu.shOr manually:
cp /usr/share/OVMF/OVMF_VARS.fd /tmp/ovmf-vars.fd
qemu-system-x86_64 \
-enable-kvm -m 8G -smp 4 -cpu host -machine type=q35,accel=kvm \
-drive if=pflash,format=raw,readonly=on,file=/usr/share/OVMF/OVMF_CODE.fd \
-drive if=pflash,format=raw,file=/tmp/ovmf-vars.fd \
-drive file=build-system/arch/output/regicide-arch.qcow2,format=qcow2,if=virtio \
-netdev user,id=net0,hostfwd=tcp::2222-:22 \
-device virtio-net-pci,netdev=net0 \
-vga qxl -vnc localhost:1 \
-serial file:/tmp/regicide-serial.log \
-monitor unix:/tmp/regicide-monitor.sock,server,nowait \
-daemonizeConnect via noVNC:
python -m websockify --web /usr/share/novnc 6081 localhost:5901Then open http://localhost:6081/vnc.html?host=localhost&port=6081&autoconnect=true.
Default credentials:
regicide/regicide. Root password is alsoregicide; change it immediately on first boot.
You can boot the live ISO headlessly and attach a VNC viewer to watch the COSMIC greeter come up:
cp /usr/share/OVMF/OVMF_VARS.fd /tmp/regicide-iso-vars.fd
chmod u+w /tmp/regicide-iso-vars.fd
qemu-img create -f qcow2 /tmp/regicide-iso-test.qcow2 30G
qemu-system-x86_64 -enable-kvm -m 8G -smp 4 -cpu host \
-machine type=q35,accel=kvm \
-drive if=pflash,format=raw,readonly=on,file=/usr/share/OVMF/OVMF_CODE.fd \
-drive if=pflash,format=raw,file=/tmp/regicide-iso-vars.fd \
-cdrom build-system/arch/output/regicide-arch.iso \
-drive file=/tmp/regicide-iso-test.qcow2,format=qcow2,if=virtio \
-netdev user,id=net0,hostfwd=tcp::2225-:22 \
-device virtio-net-pci,netdev=net0 \
-vga std -vnc :0Then connect any VNC client to localhost:5900 and log in as regicide / regicide over forwarded SSH on port 2225.
| Flag | Purpose |
|---|---|
--no-nvidia |
Skip the NVIDIA open-source driver stack (useful for CPU-only VMs or ISO prep). |
--no-defer-flatpaks |
Install all Flatpak apps during the image build instead of on first boot. |
--qcow2-size SIZE |
Set the output disk size, e.g. 30G (default: 20G). |
--qcow2-output PATH |
Set a custom output path for the QCOW2 image. |
--iso |
Also build a bootable live ISO (build-system/arch/output/regicide-arch.iso). |
--from-tarball PATH |
Reuse an existing tarball instead of rebuilding it in Dagger. |
--from-squashfs PATH |
Reuse an existing SquashFS image instead of rebuilding it in Dagger. |
Examples:
# Slim CPU-only VM image with no NVIDIA drivers and all Flatpaks pre-installed
DAGGER_PROGRESS=plain dagger run python build-system/dagger_pipeline.py --qcow2 --no-nvidia --no-defer-flatpaks
# Encrypted build (uses GRUB + LUKS2; prompts for a passphrase)
DAGGER_PROGRESS=plain dagger run python build-system/dagger_pipeline.py --encryptThe QCOW2 builders read optional environment variables to size partitions. Defaults preserve the original layout.
| Variable | Default | Notes |
|---|---|---|
REGICIDE_DISK_SIZE |
20G |
Total raw disk size before QCOW2 conversion. |
REGICIDE_EFI_SIZE |
512M |
EFI system partition. |
REGICIDE_ROOTS_SIZE |
14G (12G for encrypted builds) |
Btrfs root partition. Increase if pre-installing many packages. |
REGICIDE_OVERLAY_SIZE |
4G |
Overlay upperdir partition for writable /etc, /var, /usr. |
Example:
REGICIDE_ROOTS_SIZE=20G REGICIDE_OVERLAY_SIZE=8G \
DAGGER_PROGRESS=plain dagger run python build-system/dagger_pipeline.py --qcow2A separate Dagger pipeline builds a WSL2-ready rootfs tarball.
DAGGER_PROGRESS=plain dagger run python build-system/dagger_pipeline_wsl.py --plainOutput:
build-system/arch/output/regicide-arch-wsl.tar.gzβ gzip-compressed rootfs forwsl --import
From Windows PowerShell or CMD:
wsl --import RegicideOSArch C:\WSL\RegicideOSArch \
\\wsl$\<distro>\home\<user>\code\personal\RegicideOSArch\build-system\arch\output\regicide-arch-wsl.tar.gz \
--version 2Then start it:
wsl -d RegicideOSArchDefault credentials:
regicide/regicide.wsl.confsetsregicideas the default user and enables systemd.
RegicideOSArch ships with a small update/rollback toolkit installed in the image. These tools operate on the Btrfs /overlay subvolumes (etc, var, usr) and snapshot them under /roots/.regicide-snapshots. All commands require root privileges.
Use regicide-update instead of running pacman directly so every transaction is snapshotted and can be rolled back:
# Sync package databases
sudo regicide-update sync
# Upgrade all installed packages
sudo regicide-update upgrade
# Install or remove packages
sudo regicide-update install rio firefox
sudo regicide-update remove firefoxIf a transaction fails, regicide-update automatically schedules a revert to the pre-transaction snapshot; reboot to roll back.
# List available snapshot sets
sudo regicide-rollback list
# Revert to a snapshot at the next boot
sudo regicide-rollback revert 2026-07-08_12:00:00_pre_upgrade
# Cancel a pending revert
sudo regicide-rollback revert --cancelThe regicide-rollback-apply.service applies the chosen snapshot before /etc, /var, and /usr are mounted.
To replace the base rootfs with a newer release tarball:
# Download a release image
sudo regicide-image fetch https://example.com/regicide-arch.tar.xz \
--checksum-url https://example.com/regicide-arch.tar.xz.sha256
# Install it into /roots
sudo regicide-image install /var/cache/regicide-image/regicide-arch.tar.xzThis extracts the tarball into /roots and reseeds the overlay subvolumes so the next boot uses the new base system while preserving user data on the HOME partition.
Deterministic steps an AI agent can follow. All paths assume the repo was cloned into the current working directory.
-
Run the Dagger pipeline.
cd "$(pwd)" DAGGER_PROGRESS=plain dagger run python build-system/dagger_pipeline.py --qcow2
-
Verify the tarball exists.
test -f "$(pwd)/build-system/arch/output/regicide-arch.tar.xz"
-
Verify the SquashFS image exists and is non-empty.
test -s "$(pwd)/build-system/arch/output/regicide-arch.img"
-
Verify the QCOW2 image exists.
test -s "$(pwd)/build-system/arch/output/regicide-arch.qcow2"
-
Success criterion: all commands return exit code
0and the QCOW2 file has a partition table.sudo parted -s "$(pwd)/build-system/arch/output/regicide-arch.qcow2" print > /dev/null 2>&1
-
Ensure no other QEMU process is holding the image.
pkill -9 -f 'qemu-system-x86_64.*regicide-arch' 2>/dev/null || true
-
Start the VM with the generated runner script.
sudo ./build-system/arch/output/run-qemu.sh
-
Success criterion: the VM reaches the COSMIC greeter. Log in as
regicide/regicideand run:systemctl status systemd-logind
It should report
active (running).
- Bootable Arch-based QCOW2 VM image
- COSMIC Desktop integration
- NVIDIA open-source driver installation
- podman + distrobox container tooling
- Rio terminal Flatpak with Wayland launch fix
- SSH and sudo enabled for default user
- Bootable ISO / bare-metal installer
- Rust replacements of core utilities
- AI-native system agents
- Merge learnings back into main RegicideOS (Gentoo)
This is a side project; primary development focus remains on RegicideOS. Contributions here are welcome for Arch-specific improvements, faster CI builds, and COSMIC packaging experiments.
Found a bug? File an issue in this repository with the command you ran, full logs, and your environment.
RegicideOSArch is licensed under the GNU General Public License v3.0.
Built on the foundation of Arch Linux and the COSMIC Desktop ecosystem.
Β© 2026 Andrew White Β· RegicideOSArch (side project of RegicideOS)