Proof Portal
Omarchy
ProbeLabs65 findings · 95 requirementsA proof layer — requirements, tests and verified fixes — for two of Omarchy's subsystems: the application menu (launcher scripts, QML model, JSONC config, search and selection) and the lock screen (lock scripts, QML, PAM authentication). Scope is deliberately limited to those components of omacom/omarchy; the rest of the distribution is not covered.
Kernel panic after update: /boot/EFI/Limine/limine.conf not synced with /boot/limine.conf
Reported by tsurelad · filed Nov 11, 2025Closed upstream on 2025-11-21 by ryanrhughes. GitHub close reason: completed. No closing PR or commit is recorded — "completed" alone is not evidence of a fix.
At a glance
- 1 · What is claimed?
- Only the report text below — no validator has restated it as checkable claims yet.
- 2 · What does it affect?
- Not yet mapped to any requirement or component.
- 3 · Is it reproducible?
- No validation has been run yet.
- 4 · What remains unclear?
- Not validated yet: no claims, no reproducer.
- 5 · What happens next?
- Our staff decide whether the report is valid. Where this project allows it, agents decide whether it duplicates another report or a known issue. No decision has been recorded yet.
Original report
System details
Omarchy Version: 3.1.7, Kernel: 6.17.3-arch2-1 → 6.17.7-arch1-1, limine: 10.1.1 → 10.3.0
What's wrong?
## Problem Description
After updating Omarchy today (kernel 6.17.3-arch2-1 → 6.17.7-arch1-1, limine 10.1.1 → 10.3.0), booting via the "Limine" BIOS entry resulted in a kernel panic. The system booted successfully via the "Omarchy" direct UKI BIOS entry.
## Root Cause
Limine EFI bootloader searches for configuration in a specific order:
When the BIOS loads the Limine bootloader at /boot/EFI/Limine/limine_x64.efi, Limine searches for its config in this order:
1. First: <EFI app path>/limine.conf → /boot/EFI/Limine/limine.conf
2. Fallback: /boot/limine/limine.conf, /boot/limine.conf, etc.
The issue: Only /boot/limine.conf gets updated by the limine-mkinitcpio-hook package during kernel updates. If /boot/EFI/Limine/limine.conf exists, it takes precedence but never gets updated, causing a stale config to be used.
## How This Happens
Looking at Omarchy's installation script ~/.local/share/omarchy/install/login/limine-snapper.sh:
# Lines 8-20: Check if old config exists from archinstall
[[ -f /boot/EFI/limine/limine.conf ]] || [[ -f /boot/EFI/BOOT/limine.conf ]] && EFI=true
# Lines 59-79: Create new /boot/limine.conf with Omarchy branding
sudo tee /boot/limine.conf <<EOF >/dev/null
...
EOF
# Lines 82-84: Attempt to remove old config
if [[ "$limine_config" != "/boot/limine.conf" ]] && [[ -f "$limine_config" ]]; then
sudo rm "$limine_config"
fiThe problem: The deletion at line 83 doesn't always succeed or the file gets recreated. Since /boot is FAT32 (case-insensitive), /boot/EFI/limine/ and /boot/EFI/Limine/ are the same directory, which can cause confusion.
## Evidence
File timestamps after kernel update:
$ stat /boot/limine.conf -c "Modified: %y"
Modified: 2025-11-11 10:15:44 ✅ Updated by mkinitcpio hook
$ stat /boot/EFI/Limine/limine.conf -c "Modified: %y"
Birth: 2025-10-17 13:53:03 ❌ NOT updated, stale since installation
Stale config references non-existent files:
$ cat /boot/EFI/Limine/limine.conf
timeout: 2
/Arch Linux (linux)
protocol: linux
path: boot():/vmlinuz-linux # ❌ Doesn't exist
module_path: boot():/initramfs-linux.img # ❌ Doesn't exist
$ ls /boot/vmlinuz-linux
ls: /boot/vmlinuz-linux: No such file or directory
After the update, the system uses UKI (Unified Kernel Images), but the stale config still references the old split kernel/initramfs files.
## Impact
- ❌ Kernel panic when booting via "Limine" BIOS entry
- ❌ No snapshot menu available for btrfs rollbacks
- ✅ Direct "Omarchy" UKI boot still works (bypasses the issue)
This particularly affects users who:
- Installed Arch with archinstall + Limine, then installed Omarchy
- Rely on Limine's menu for accessing btrfs snapshots via Snapper
- Have both "Limine" and "Omarchy" BIOS entries
## Reproduction Steps
- Install Arch Linux using archinstall with Limine bootloader
- Install/update Omarchy (which creates /boot/limine.conf)
- Check if /boot/EFI/Limine/limine.conf still exists
- Perform a kernel update (e.g., via yay -Syu)
- Reboot via the "Limine" BIOS entry → kernel panic
## Proposed Solutions
Option 1: Force Delete During Installation (Most reliable)
Modify install/login/limine-snapper.sh to explicitly remove both case variants:
# After line 84, add:
sudo rm -f /boot/EFI/limine/limine.conf /boot/EFI/Limine/limine.conf /boot/EFI/BOOT/limine.conf Option 2: Add Sync Hook (More user-friendly)
Create an Omarchy pacman hook to sync the config after updates:
# /etc/pacman.d/hooks/99-omarchy-limine-sync.hook
[Trigger]
Operation = Install
Operation = Upgrade
Type = Package
Target = linux
Target = linux-lts
Target = limine
Target = limine-mkinitcpio-hook
[Action]
Description = Syncing Limine config to EFI directory...
When = PostTransaction
Exec = /bin/sh -c "[ -f /boot/EFI/Limine/limine.conf ] && cp -f /boot/limine.conf /boot/EFI/Limine/limine.conf || true" Option 3: Document the Issue (Minimal)
Add to Omarchy docs/troubleshooting:
> If you experience boot issues after updates, check if /boot/EFI/Limine/limine.conf exists and remove it, or sync it with /boot/limine.conf.
## Workaround
Users can manually sync the configs after updates:
sudo cp /boot/limine.conf /boot/EFI/Limine/limine.conf
Or permanently fix by removing the EFI directory config:
sudo rm /boot/EFI/Limine/limine.conf # Forces fallback to /boot/limine.conf
## System Details
- Omarchy Version: 3.1.7
- Kernel: 6.17.3-arch2-1 → 6.17.7-arch1-1
- limine: 10.1.1 → 10.3.0
- limine-mkinitcpio-hook: 1.24.0-3 → 1.25.3-1
- Boot method: UKI (Unified Kernel Images)
- Filesystem: Btrfs with LUKS encryption + Snapper
## Related
- #2431 - Issues with limine.conf location finding
- #1068 - Limine + Snapper documentation request
## Additional Notes
The case-insensitivity of FAT32 means /boot/EFI/Limine/ and /boot/EFI/limine/ are the same directory, but Linux tools may reference them inconsistently. This can cause the deletion logic in limine-snapper.sh to fail silently.
View raw text
### System details
Omarchy Version: 3.1.7, Kernel: 6.17.3-arch2-1 → 6.17.7-arch1-1, limine: 10.1.1 → 10.3.0
### What's wrong?
## Problem Description
After updating Omarchy today (kernel 6.17.3-arch2-1 → 6.17.7-arch1-1, limine 10.1.1 → 10.3.0), booting via the "Limine" BIOS entry resulted in a **kernel panic**. The system booted successfully via the "Omarchy" direct UKI BIOS entry.
## Root Cause
**Limine EFI bootloader searches for configuration in a specific order:**
When the BIOS loads the Limine bootloader at `/boot/EFI/Limine/limine_x64.efi`, Limine [searches for its config](https://github.com/limine-bootloader/limine/blob/trunk/CONFIG.md) in this order:
1. **First**: `<EFI app path>/limine.conf` → `/boot/EFI/Limine/limine.conf`
2. **Fallback**: `/boot/limine/limine.conf`, `/boot/limine.conf`, etc.
**The issue:** Only `/boot/limine.conf` gets updated by the `limine-mkinitcpio-hook` package during kernel updates. If `/boot/EFI/Limine/limine.conf` exists, it takes precedence but never gets updated, causing a stale config to be used.
## How This Happens
Looking at Omarchy's installation script `~/.local/share/omarchy/install/login/limine-snapper.sh`:
```bash
# Lines 8-20: Check if old config exists from archinstall
[[ -f /boot/EFI/limine/limine.conf ]] || [[ -f /boot/EFI/BOOT/limine.conf ]] && EFI=true
# Lines 59-79: Create new /boot/limine.conf with Omarchy branding
sudo tee /boot/limine.conf <<EOF >/dev/null
...
EOF
# Lines 82-84: Attempt to remove old config
if [[ "$limine_config" != "/boot/limine.conf" ]] && [[ -f "$limine_config" ]]; then
sudo rm "$limine_config"
fi
```
The problem: The deletion at line 83 doesn't always succeed or the file gets recreated. Since /boot is FAT32 (case-insensitive), /boot/EFI/limine/ and /boot/EFI/Limine/ are the same directory, which can cause confusion.
## Evidence
File timestamps after kernel update:
$ stat /boot/limine.conf -c "Modified: %y"
Modified: 2025-11-11 10:15:44 ✅ Updated by mkinitcpio hook
$ stat /boot/EFI/Limine/limine.conf -c "Modified: %y"
Birth: 2025-10-17 13:53:03 ❌ NOT updated, stale since installation
Stale config references non-existent files:
$ cat /boot/EFI/Limine/limine.conf
timeout: 2
/Arch Linux (linux)
protocol: linux
path: boot():/vmlinuz-linux # ❌ Doesn't exist
module_path: boot():/initramfs-linux.img # ❌ Doesn't exist
$ ls /boot/vmlinuz-linux
ls: /boot/vmlinuz-linux: No such file or directory
After the update, the system uses UKI (Unified Kernel Images), but the stale config still references the old split kernel/initramfs files.
## Impact
- ❌ Kernel panic when booting via "Limine" BIOS entry
- ❌ No snapshot menu available for btrfs rollbacks
- ✅ Direct "Omarchy" UKI boot still works (bypasses the issue)
This particularly affects users who:
- Installed Arch with archinstall + Limine, then installed Omarchy
- Rely on Limine's menu for accessing btrfs snapshots via Snapper
- Have both "Limine" and "Omarchy" BIOS entries
## Reproduction Steps
1. Install Arch Linux using archinstall with Limine bootloader
2. Install/update Omarchy (which creates /boot/limine.conf)
3. Check if /boot/EFI/Limine/limine.conf still exists
4. Perform a kernel update (e.g., via yay -Syu)
5. Reboot via the "Limine" BIOS entry → kernel panic
## Proposed Solutions
Option 1: Force Delete During Installation (Most reliable)
Modify install/login/limine-snapper.sh to explicitly remove both case variants:
```bash
# After line 84, add:
sudo rm -f /boot/EFI/limine/limine.conf /boot/EFI/Limine/limine.conf /boot/EFI/BOOT/limine.conf
```
Option 2: Add Sync Hook (More user-friendly)
Create an Omarchy pacman hook to sync the config after updates:
```bash
# /etc/pacman.d/hooks/99-omarchy-limine-sync.hook
[Trigger]
Operation = Install
Operation = Upgrade
Type = Package
Target = linux
Target = linux-lts
Target = limine
Target = limine-mkinitcpio-hook
[Action]
Description = Syncing Limine config to EFI directory...
When = PostTransaction
Exec = /bin/sh -c "[ -f /boot/EFI/Limine/limine.conf ] && cp -f /boot/limine.conf /boot/EFI/Limine/limine.conf || true"
```
Option 3: Document the Issue (Minimal)
Add to Omarchy docs/troubleshooting:
> If you experience boot issues after updates, check if /boot/EFI/Limine/limine.conf exists and remove it, or sync it with /boot/limine.conf.
## Workaround
Users can manually sync the configs after updates:
`sudo cp /boot/limine.conf /boot/EFI/Limine/limine.conf`
Or permanently fix by removing the EFI directory config:
`sudo rm /boot/EFI/Limine/limine.conf # Forces fallback to /boot/limine.conf`
## System Details
- Omarchy Version: 3.1.7
- Kernel: 6.17.3-arch2-1 → 6.17.7-arch1-1
- limine: 10.1.1 → 10.3.0
- limine-mkinitcpio-hook: 1.24.0-3 → 1.25.3-1
- Boot method: UKI (Unified Kernel Images)
- Filesystem: Btrfs with LUKS encryption + Snapper
## Related
- #2431 - Issues with limine.conf location finding
- #1068 - Limine + Snapper documentation request
## Additional Notes
The case-insensitivity of FAT32 means /boot/EFI/Limine/ and /boot/EFI/limine/ are the same directory, but Linux tools may reference them inconsistently. This can cause the deletion logic in limine-snapper.sh to fail silently.
Validation
Not checked yet. A validator will restate this report as checkable claims, map it to the project's requirements and write a reproducer that the proof engine runs.
Linked
Not linked to any known issue, other report or change yet.
Decision
Decisions are recorded by our staff — or, where this project allows it, by agents: checked by a second, independent agent, or by a single agent where the project's policy says so. Any decision reached so far is shown below.
No decision has been recorded yet.