Initial commit: Win-Omarchy dual-boot installer
Patches the Omarchy ISO to install alongside Windows with a firmware-proof Limine-first boot (bootmgfw spoof), LUKS2 encryption, and btrfs snapshots. Includes repair mode for re-applying Limine after a Windows feature update. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
commit
3dc211a7a1
3 changed files with 1532 additions and 0 deletions
16
.gitignore
vendored
Normal file
16
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
# Built/source ISOs (too large for git; rebuild with patch-win-omarchy.sh)
|
||||
*.iso
|
||||
|
||||
# VM test runtime state
|
||||
vm/
|
||||
|
||||
# Patcher work dirs (auto-created/removed during a build)
|
||||
.omarchy-patch-*/
|
||||
|
||||
# Backups / archives
|
||||
*.bak
|
||||
|
||||
# Local dev-only files — not part of the user-facing repo
|
||||
vm-test.sh
|
||||
NOTES.md
|
||||
VIDEO-NOTES.md
|
||||
145
README.md
Normal file
145
README.md
Normal file
|
|
@ -0,0 +1,145 @@
|
|||
# Win-Omarchy
|
||||
|
||||
Patch the [Omarchy](https://omarchy.com) installer ISO to install Omarchy alongside an
|
||||
existing Windows 11 system, with LUKS2 encryption and btrfs snapshots. After install the
|
||||
machine boots the **Limine menu first on every power-on** — no F12, no firmware boot-menu
|
||||
interaction — and Windows is offered as a menu entry alongside Omarchy and bootable
|
||||
snapshots.
|
||||
|
||||
Forked from [Dual-Boot-Omarchy](https://git.no-signal.uk/nosignal/Dual-Boot-Omarchy).
|
||||
|
||||
## How Limine-first boot is guaranteed
|
||||
|
||||
Many consumer firmwares ignore the UEFI boot order and always boot
|
||||
`\EFI\Microsoft\Boot\bootmgfw.efi` (the Windows Boot Manager), so a normal Linux
|
||||
bootloader never appears. Rather than rely on boot order, the installer **replaces
|
||||
`bootmgfw.efi` with Limine** and preserves the genuine Windows loader alongside it as
|
||||
`bootmgfwbackup.efi`. When the firmware boots "Windows Boot Manager" it launches Limine,
|
||||
which then offers Omarchy and chainloads the real Windows loader on demand. An
|
||||
`efibootmgr` BootOrder lock is also set as best-effort for firmware that honours it.
|
||||
|
||||
## Requirements
|
||||
|
||||
- **OS to run the patcher**: Arch Linux or Omarchy
|
||||
- **Omarchy ISO**: from [omarchy.com](https://omarchy.com) — version-agnostic (tested through 3.8)
|
||||
- **UEFI** firmware (no legacy BIOS)
|
||||
- **20GB+ unallocated space** on the target drive
|
||||
- **USB drive** for booting the patched ISO
|
||||
- **Secure Boot OFF** — Limine is unsigned; with Secure Boot on the firmware silently
|
||||
rejects it and falls through to Windows. The installer detects this and stops by default.
|
||||
|
||||
## Before installing — BitLocker / Device Encryption
|
||||
|
||||
Changing the bootloader changes the TPM PCR 4/7 measurements, so Windows may demand the
|
||||
48-digit BitLocker recovery key on its next boot. Before booting the installer USB, in
|
||||
Windows:
|
||||
|
||||
1. **Back up your recovery key** (`https://account.microsoft.com/devices/recoverykey` or
|
||||
Settings → Privacy & security → Device encryption → Back up your recovery key).
|
||||
2. **Suspend BitLocker** in an admin PowerShell:
|
||||
```powershell
|
||||
manage-bde -protectors -disable C: -RebootCount 0
|
||||
```
|
||||
3. **Shut down fully** (not "Restart" — Fast Startup leaves the NTFS dirty):
|
||||
`shutdown /s /f /t 0`
|
||||
|
||||
The installer will not proceed past Windows detection until you confirm you have the key.
|
||||
|
||||
## Quick start
|
||||
|
||||
```bash
|
||||
# With the Omarchy ISO in this directory:
|
||||
sudo ./patch-win-omarchy.sh
|
||||
|
||||
# Or point it at the ISO directly:
|
||||
sudo ./patch-win-omarchy.sh /path/to/omarchy-3.8.0.iso
|
||||
```
|
||||
|
||||
This produces `win-omarchy-YYYY.MM.DD.iso`. It's a hybrid ISO — write it to USB with
|
||||
`dd` (or Ventoy) and boot the target machine from it.
|
||||
|
||||
## Installer menu
|
||||
|
||||
| # | Option | Action |
|
||||
|---|--------|--------|
|
||||
| 1 | Dual Boot (Heaven and Hell mode) | Install Omarchy alongside Windows (dual-boot) |
|
||||
| 2 | Consider that a divorce | Remove a failed/old install; restores the genuine Windows bootloader |
|
||||
| 3 | Nuke the site from orbit | Standard install — wipes the whole drive (no dual-boot) |
|
||||
| 4 | Exit to Ghost in the… | Drop to a terminal |
|
||||
| 5 | I'll be back | Repair: re-apply Limine after a Windows update overwrote it |
|
||||
|
||||
### Option 1 — Dual-boot install
|
||||
|
||||
1. Drive selection (auto-detects a single non-USB drive; detects Windows)
|
||||
2. Free-space check (20GB+)
|
||||
3. LUKS2 encryption password
|
||||
4. Partitioning in free space: 1GB `LINUXEFI` (FAT32) + LUKS2 root
|
||||
5. Btrfs subvolumes: `@`, `@home`, `@log`, `@pkg`
|
||||
6. Omarchy configurator (username, hostname, timezone, keyboard)
|
||||
7. `archinstall` base system + full Omarchy desktop (offline, from the ISO)
|
||||
8. Limine + unified kernel image (encrypt hook), snapper, Plymouth
|
||||
9. **bootmgfw spoof** + Windows chainload entry (by GPT PARTUUID) + BootOrder lock
|
||||
|
||||
Windows partitions are untouched apart from the single `bootmgfw.efi` swap (original
|
||||
preserved as `bootmgfwbackup.efi`).
|
||||
|
||||
### Option 5 — Repair after a Windows update
|
||||
|
||||
A Windows **feature update** can reinstall `bootmgfw.efi`, overwriting Limine; the
|
||||
machine then boots straight to Windows and the Limine menu disappears. Option 5 re-applies
|
||||
the spoof — refreshing the backup with the current Windows loader and re-installing
|
||||
Limine. It is idempotent (does nothing if the spoof is already intact).
|
||||
|
||||
## Target drive layout
|
||||
|
||||
```
|
||||
Drive:
|
||||
├── Windows partitions (preserved)
|
||||
│ └── EFI System Partition
|
||||
│ ├── EFI/Microsoft/Boot/bootmgfw.efi ← replaced with Limine
|
||||
│ └── EFI/Microsoft/Boot/bootmgfwbackup.efi ← original Windows loader (chainloaded)
|
||||
├── LINUXEFI (1GB FAT32) ← Limine, EFI/Linux/omarchy_linux.efi (UKI), limine.conf
|
||||
└── Linux root (LUKS2 → btrfs) ← @ / @home / @log / @pkg
|
||||
```
|
||||
|
||||
## How the patcher works
|
||||
|
||||
Extracts the ISO and its squashfs, injects a dual-boot setup script into the live
|
||||
environment, re-points the boot sequence to run it on tty1, then repacks the squashfs and
|
||||
rebuilds the ISO via `xorriso` boot-image replay — preserving the original MBR/GPT/El
|
||||
Torito layout byte-for-byte, so it works across Omarchy versions without per-version
|
||||
tweaks. Build dependencies (`xorriso`, `squashfs-tools`, `cdrtools`) are installed
|
||||
automatically if missing.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
**Boots straight to Windows, no Limine menu.** A Windows feature update likely reinstalled
|
||||
its bootloader over the spoof — boot the USB and run **option 5**. On a fresh install that
|
||||
never showed Limine, confirm **Secure Boot is OFF**.
|
||||
|
||||
**No LUKS prompt / won't unlock.** Check the encrypt hook:
|
||||
`lsinitcpio /boot/EFI/Linux/omarchy_linux.efi | grep encrypt`, then `sudo mkinitcpio -P`.
|
||||
|
||||
**Windows missing from the Limine menu.** The entry chainloads `bootmgfwbackup.efi` on the
|
||||
Windows ESP by GPT PARTUUID — verify it's present in `/boot/limine.conf` and on the ESP.
|
||||
(`FIND_BOOTLOADERS` does **not** detect Windows; the entry is written explicitly.)
|
||||
|
||||
**Failed install left orphan partitions.** Boot the USB and pick **option 2** — it removes
|
||||
the Linux partitions and restores the genuine Windows bootloader.
|
||||
|
||||
## Uninstalling (keeping Windows)
|
||||
|
||||
Boot the USB and choose **option 2**: restores the real `bootmgfw.efi`, removes the Linux
|
||||
EFI + LUKS partitions, cleans up UEFI entries. Reclaim the free space from Windows Disk
|
||||
Management.
|
||||
|
||||
## Credits
|
||||
|
||||
- [Omarchy](https://omarchy.com) — Arch-based distribution
|
||||
- [archinstall](https://github.com/archlinux/archinstall) — Arch installer framework
|
||||
- [Limine](https://limine-bootloader.org/) — bootloader
|
||||
- [Snapper](http://snapper.io/) — btrfs snapshot management
|
||||
|
||||
## License
|
||||
|
||||
Provided as-is for the Omarchy community.
|
||||
1371
patch-win-omarchy.sh
Executable file
1371
patch-win-omarchy.sh
Executable file
File diff suppressed because it is too large
Load diff
Loading…
Add table
Reference in a new issue