Skip to content

Instantly share code, notes, and snippets.

@cicorias
Last active September 9, 2026 18:06
Show Gist options
  • Select an option

  • Save cicorias/6da75542f9e2b4a7b6f58a61ba3979d6 to your computer and use it in GitHub Desktop.

Select an option

Save cicorias/6da75542f9e2b4a7b6f58a61ba3979d6 to your computer and use it in GitHub Desktop.
Omarchy surface laptop 7 aarm64 snapdobuild

Omarchy on Surface Laptop 7 (15", X Elite, 32/1TB) — full wipe, no Windows

Target: x1e80100-microsoft-romulus15. Revised 9 September 2026.

Evidence levels. Every step is tagged: [T] tested on X Elite hardware by named people in omacom/omarchy-iso#129. [T-other] tested, but on a different board — Yoga Slim 7x, HP EliteBook Ultra G1q, ASUS Vivobook S15. [I] inferred for Romulus from SL7 sources. Not tested by anyone on this machine.

No one has booted this stack on a Surface Laptop 7. Romulus is absent from the tested set. Do not present this as a working build.


What changed, and why the earlier version was wrong

The upstream aarch64 path exists: omacom/omarchy-iso#129 by birkskyum, 30 commits into omacom:quattro, open, one approval (Chessing234, 5 Sep). It carries Sean's #121 work and JimmayVV's Snapdragon work.

This kills three things I previously told you:

  • No custom kernel. ALARM's linux-aarch64 is at 7.2.3-2-aarch64-ARCH. The 6.19.2 figure was a stale package page.
  • No dtbloader. The ISO builds a systemd-stub UKI carrying every Windows-on-ARM DT that linux-aarch64 ships as .dtbauto sections, plus systemd's SMBIOS database as .hwids. The stub picks your board at boot. The 6 Sep build had 32 DT sections.
  • No hand-built ALARM rootfs. There's a real installer.

Prerequisites, all still open: omarchy-pkgs #221 (firmware extraction), #222 (kernel-image shim), #223 (reusable aarch64 repo artifact); omarchy #8672 (generic Snapdragon X on aarch64), #8673 (Yoga board support — Yoga-specific, but the pattern you'd copy for Romulus). Upstream ALARM: archlinuxarm/PKGBUILDs #2215 (vmlinuz/pkgbase so the mkinitcpio hook fires), #2217 (speaker reset, merged).

pkgs.omarchy.org serves no aarch64 tree — 404, confirmed by two testers. You build the repo yourself.


Phase 0 — Harvest firmware, then wipe

The only Windows step. It is irreversible if you skip it. [T-other]

HurlyDesousa hit exactly your case on the Vivobook: Windows already gone, qcom-firmware-extract --install --no-rebuild aborted the install under set -e with no DT blobs, and first boot was a black panel — gpu hw init failed: -2, missing zap shader. Recovery required the genuine vendor zap from the official Qualcomm BSP. Their note is explicit: do not copy another vendor's DSP firmware onto your board.

Boot Windows once. Copy out the whole tree: [I]

C:\Windows\System32\DriverStore\FileRepository\
  → /lib/firmware/qcom/x1e80100/microsoft/Romulus/

Confirm the zap shader is present before you wipe — qcdxkmsuc8380.mbn. Record its SHA-256. Put the tarball on two USB sticks. [I]

Also grab battmgr.jsn if present — without it plus a working ADSP, battery reads return EAGAIN. [T-other]

Enter Surface UEFI: hold Volume-Up at power-on. Disable Secure Boot, enable USB boot. Then wipe the disk. No shrink, no BitLocker, no dual-boot.


Phase 1 — Build the ISO

The omarchy-iso-aarch64-12 artifact expired 13 September. Build it. [T]

You need an aarch64 host — the machine itself once it's up, another ARM box, or a ubuntu-24.04-arm runner. archlinux/archlinux:latest is amd64-only; the build uses menci/archlinuxarm:base-devel.

# 1. aarch64 Omarchy package repo
git clone https://github.com/birkskyum/omarchy-pkgs
cd omarchy-pkgs && bin/repo build --arch aarch64

# 2. ISO against that local repo
git clone -b upstream/snapdragon https://github.com/birkskyum/omarchy-iso
cd omarchy-iso
bin/omarchy-iso-make --local-repo /path/to/omarchy-pkgs/repo

The 6 Sep package job built 31 recipes into 40 arm64/any archives; ISO construction ran 12m51s on a hosted ARM runner. [T]

Gotchas already solved in-tree, so don't re-solve them: archiso hardcodes seven GRUB modules with no arm64-efi build (patch carried); ALARM ships .pkg.tar.xz while Arch ships zstd, and indexing only zstd fails silentlyrepo-add succeeds, pacman -Sy succeeds, then everything including base reports "target not found"; the local repo must sort above distro repos or incompatible Hyprland/Aquamarine ABI builds win; quickshell-git and mise are substituted for their packaged equivalents. [T]

Verify the ISO, not the ZIP. Then confirm your board is actually in there: [I]

objcopy -O binary --only-section=.dtbauto* omarchy-live.efi /dev/null 2>&1 | head
# or unpack the UKI and grep the DT names for romulus

If x1e80100-microsoft-romulus15 is not among the .dtbauto sections, stop. The UKI only carries DTs that linux-aarch64 ships. Check ALARM's kernel package before you burn a stick.


Phase 2 — Install

Write to USB with dd or your usual tool. Boot via firmware boot menu → USB. [T-other]

GRUB is timeout=0 / timeout_style=hidden, so you get no menu. That's intended. Mash Esc to reach grub> if you need to edit args.

Change the boot args before you go further. The shipped live cmdline includes quiet splash, which on OLED gives you a black panel — the ASUS was reported as a hard failure, then corrected: it was ~6–7 seconds of black, then the installer. Worse, it makes the LUKS passphrase prompt invisible. Both testers hit this. [T-other]

set root=(hd0,gpt1)
chainloader /arch/boot/aarch64/omarchy-live.efi archisobasedir=arch archisosearchuuid=<UUID> initramfs_async=0 clk_ignore_unused pd_ignore_unused arm64.nopauth systemd.tpm2_wait=0 modprobe.blacklist=qcom_q6v5_pas console=tty0 loglevel=7
boot

Keep modprobe.blacklist=qcom_q6v5_pas — it's there for installer survival. Drop quiet splash. Add plymouth.enable=0 on the installed system too.

The installer is a console bash ./configurator on tty1. No cursor, by design. Ctrl+Alt+F2 for a root shell.

Expect the firmware phase to abort on a wiped disk. Have the non-fatal patch to qcom-firmware-extract ready, or stage your harvested tree before that phase runs. [T-other]

Full-disk LUKS2 works — Yoga did full-disk, ASUS did ESP p1 + LUKS2 p2 → Btrfs @ @home @log @pkg @factory, Limine UKI at /boot/EFI/Linux/omarchy_linux-aarch64.efi. [T-other]

Time sync waits on Wi-Fi and can delay graphical.target by ~6 minutes. A usable console appears at ~41s. Don't assume it hung. [T]


Phase 3 — After first boot

If the panel is black with gpu hw init failed: -2: your zap shader is missing or wrong. Put the real Romulus qcdxkmsuc8380.mbn in place. This is the single most likely first-boot failure. [T-other]

Then, Romulus-specific and untested against a 7.2 ALARM kernel — these came from the SL7 community work on ELLX 7.0-rc4 and may already be fixed upstream. Check before applying: [I]

  • Trackpad: iptsd 3.1.0, then iptsd-calibrate over the whole pad surface including edges.
  • Wi-Fi rfkill: ath12k feature flags live in the Windows DSDT (f634f534-6147-11ec-90d6-0242ac120003); on DT nothing reads them. Repack board-2.bin if Wi-Fi is blocked.
  • MAC randomization per boot — valeronm/sl7-mac.

Known-broken across boards, so expect them on Romulus: [T-other]

  • Audio. Dead on ASUS (ADSP PAS 0x24 TrustZone reject -22) and on HP (no card registers). It works on Yoga. Needs board-specific topology/UCM plus CONFIG_RESET_GPIO.
  • Battery. EAGAIN without ADSP + battmgr.jsn.
  • Camera. Needs CCI/CSIPHY nodes in your DTS and CONFIG_VIDEO_QCOM_IRIS.
  • Touchscreen. Untested on Romulus. Worth noting: it works on the HP EliteBook Ultra G1q, so the stack isn't the blocker — the DT is.
  • Live-session USB disconnected at ~26s on Yoga, not reproduced on ASUS. Installed systems fine.

What to report back

That thread has Yoga, HP and ASUS. It has no Romulus. A structured SL7 report is genuinely wanted, and the maintainers there are careful about labelling — match that.

Report: whether romulus15 is in the UKI's .dtbauto set; boot result with default vs. modified args, and how long the panel stayed black; zap shader path and SHA-256; LUKS unlock visibility; journalctl -b -k around ADSP; two power-supply snapshots two minutes apart; touchpad byte count over a 10s sample on the 093A:3016-class node.

Say plainly what you tested and what you didn't. Both prior testers publicly corrected their own overclaims and it cost them nothing.


Sources

omacom/omarchy-iso#129 · omacom/omarchy-pkgs#221, #222, #223 · omacom/omarchy#8672, #8673 · archlinuxarm/PKGBUILDs#2215, #2217 · omacom/omarchy/discussions#10426 (installed Yoga report) · bryce-hoehn/linux-surface-laptop-7 and public.hgci.org/software/ELLX/ for the Romulus-specific items marked [I]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment