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.
`omarchy-version` is slow (~200ms) due to `pacman -Q`, adds noticeable delay to fastfetch and any script calling it
Reported by EBBD88 · filed Aug 31, 2026 · open at source
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?
- AreaOutside the audited area· Decided by agents · verified
- 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?
- Decided by agents and verified by a second, independent agent — see the decision.
Original report
System details
Omarchy Package: omarchy 4.0.1-1 Kernel: 7.2.2-1-cachyos arch: x86_64 Desktop: Hyprland v: 0.56.2 dm: SDDM Distro: Omarchy Machine: HP Victus by HP Gaming Laptop 16-s0xxx CPU: AMD Ryzen 5 7640HS (12 threads) Memory: 32 GiB Packages: pm: pacman pkgs: 1491 Shell: fish v: 4.8.1
What's wrong?
Summary
/usr/bin/omarchy-version takes roughly 200ms to run on my system, almost entirely due to the pacman -Q "$package" call. Since this script is invoked by the default fastfetch config shipped with Omarchy, it adds ~200ms to every fastfetch run which is otherwise a sub-10ms operation.
I Verified this matches the current script on GitHub (no local modifications) — this is the upstream behavior.
Evidence
❯ time omarchy-version
4.0.1-1
________________________________________________________
Executed in 214.14 millis fish external
usr time 67.19 millis 0.00 micros 67.19 millis
sys time 68.03 millis 790.00 micros 67.24 millis
~
❯ fastfetch --stat output, showing the OS module (which calls omarchy-version) taking ~210ms while every other module combined takes under 10ms:
❯ fastfetch --stat
0.018ms
┌──────────────────────Hardware──────────────────────┐ 0.011ms
PC: Victus by HP Gaming Laptop 16-s0xxx 0.144ms
│ ├: AMD Ryzen 5 7640HS (12) @ 5.02 GHz 1.017ms
.-------------------------: │ ├: NVIDIA GeForce RTX 4050 Max-Q / Mobile [Discrete]
.+=========================. │ ├: AMD Radeon 760M Graphics [Integrated] 2.529ms
:++===++==================- :++- │ ├: 1920x1080 in 16", 60 Hz [Built-in] 4.835ms
:*++====+++++=============- .==: │ ├: 52.23 GiB / 115.24 GiB (45%) - btrfs 0.483ms
-*+++=====+***++==========: │ ├: 6.32 GiB / 30.62 GiB (21%) 0.070ms
=*++++========------------: └ └ : 1.13 MiB / 30.62 GiB (0%) 0.022ms
=*+++++=====- ... └────────────────────────────────────────────────────┘ 0.006ms
.+*+++++=-===: .=+++=: 0.003ms
:++++=====-==: -*****+ ┌──────────────────────Software──────────────────────┐ 0.005ms
:++========-=. .=+**+. OS: Omarchy 4.0.1-1 206.931ms
.+==========-. . │ ├: No result generated 0.046ms
:+++++++====- .--==-. │ ├: unknown 0.040ms
:++==========. :+++++++: │ ├: Linux 7.2.2-1-cachyos 0.008ms
.-===========. =*****+*+ │ ├: Hyprland 0.56.2 (Wayland) 0.047ms
.-===========: .+*****+: DE: No DE found 0.007ms
-=======++++:::::::::::::::::::::::::-: .---: │ ├: foot 1.27.0 3.591ms
:======++++====+++******************=. │ ├: 1491 (pacman) 0.516ms
:=====+++==========++++++++++++++*- │ ├: Unknown WM: Hyprland 0.008ms
.====++==============++++++++++*- │ ├: Catppuccin 2.0 ●●●●●●●● 0.052ms
.===+==================+++++++: └ └: JetBrainsMono Nerd Font (9pt) 0.029ms
.-=======================+++: └────────────────────────────────────────────────────┘ 0.013ms
.......................... 0.004ms
┌────────────────Age / Uptime / Update───────────────┐ 0.004ms
OS Age: 102 days 0.038ms
Uptime: 47 mins 0.029ms
Update: Monday, August 31 2026 at 10:50 0.043ms
└────────────────────────────────────────────────────┘ 0.005ms
0.002ms
~
❯ Root cause
pacman -Q initializes the full ALPM library (config parsing, sync-db paths, hooks, etc.) just to look up a single installed package's version. That overhead is roughly constant regardless of what's being queried, and appears to dominate the runtime here not disk I/O or package count.
https://github.com/omacom/omarchy/blob/b686ed892d9c3020c3336203f6d34cc75b544e2b/bin/omarchy-version
Suggested fix
Pacman's local package database is just plain directories under /var/lib/pacman/local/<name>-<version>/, which are world-readable. Reading the version directly from that path avoids the ALPM initialization cost entirely:
#!/bin/bash
# omarchy:summary=Print the installed Omarchy version
omarchy_path=${OMARCHY_PATH:-/usr/share/omarchy}
omarchy_path=${omarchy_path%/}
if [[ $omarchy_path != "/usr/share/omarchy" ]]; then
hash=$(git -C "$omarchy_path" rev-parse --short HEAD 2>/dev/null || true)
if [[ -n $hash ]]; then
echo "dev ($hash)"
else
echo "dev"
fi
exit 0
fi
for package in omarchy-dev omarchy; do
dir=$(compgen -G "/var/lib/pacman/local/${package}-[0-9]*" | head -n1)
if [[ -n $dir ]]; then
base=$(basename "$dir")
version=${base#"${package}-"}
break
fi
done
[[ -n $version ]] || exit 1
echo "$version"With this change, the script drops from ~200ms to low single-digit milliseconds in my testing.
~/Scripts
❯ time ./omarchy-version-test
4.0.1-1
________________________________________________________
Executed in 9.66 millis fish external
usr time 3.52 millis 840.00 micros 2.68 millis
sys time 8.22 millis 0.00 micros 8.22 millis
~/Scripts
❯ Caveats / things that should be considered
- The glob is anchored to
-[0-9]to avoid matching an unrelated package with a similar name prefix (e.g. a hypotheticalomarchy-foo). - Reading
/var/lib/pacman/local/directly bypasses ALPM's transaction-aware consistency guarantees. In the rare case this script runs while a pacman transaction is actively renaming/replacing that directory, it could theoretically miss or misread the version.pacman -Qdoesn't have this edge case. For a status-display tool this risk seems acceptable to me, but it's a real behavioral difference worth a second opinion. - Happy to test further or adjust the approach if there's a preferred way to query the local db that keeps ALPM's guarantees while skipping the slow parts.
View raw text
### System details
Omarchy Package: omarchy 4.0.1-1 Kernel: 7.2.2-1-cachyos arch: x86_64 Desktop: Hyprland v: 0.56.2 dm: SDDM Distro: Omarchy Machine: HP Victus by HP Gaming Laptop 16-s0xxx CPU: AMD Ryzen 5 7640HS (12 threads) Memory: 32 GiB Packages: pm: pacman pkgs: 1491 Shell: fish v: 4.8.1
### What's wrong?
### Summary
`/usr/bin/omarchy-version` takes roughly 200ms to run on my system, almost entirely due to the `pacman -Q "$package"` call. Since this script is invoked by the default fastfetch config shipped with Omarchy, it adds ~200ms to every fastfetch run which is otherwise a sub-10ms operation.
I Verified this matches the current script on GitHub (no local modifications) — this is the upstream behavior.
### Evidence
```fish
❯ time omarchy-version
4.0.1-1
________________________________________________________
Executed in 214.14 millis fish external
usr time 67.19 millis 0.00 micros 67.19 millis
sys time 68.03 millis 790.00 micros 67.24 millis
~
❯
```
`fastfetch --stat` output, showing the OS module (which calls `omarchy-version`) taking ~210ms while every other module combined takes under 10ms:
```fish
❯ fastfetch --stat
0.018ms
┌──────────────────────Hardware──────────────────────┐ 0.011ms
PC: Victus by HP Gaming Laptop 16-s0xxx 0.144ms
│ ├: AMD Ryzen 5 7640HS (12) @ 5.02 GHz 1.017ms
.-------------------------: │ ├: NVIDIA GeForce RTX 4050 Max-Q / Mobile [Discrete]
.+=========================. │ ├: AMD Radeon 760M Graphics [Integrated] 2.529ms
:++===++==================- :++- │ ├: 1920x1080 in 16", 60 Hz [Built-in] 4.835ms
:*++====+++++=============- .==: │ ├: 52.23 GiB / 115.24 GiB (45%) - btrfs 0.483ms
-*+++=====+***++==========: │ ├: 6.32 GiB / 30.62 GiB (21%) 0.070ms
=*++++========------------: └ └ : 1.13 MiB / 30.62 GiB (0%) 0.022ms
=*+++++=====- ... └────────────────────────────────────────────────────┘ 0.006ms
.+*+++++=-===: .=+++=: 0.003ms
:++++=====-==: -*****+ ┌──────────────────────Software──────────────────────┐ 0.005ms
:++========-=. .=+**+. OS: Omarchy 4.0.1-1 206.931ms
.+==========-. . │ ├: No result generated 0.046ms
:+++++++====- .--==-. │ ├: unknown 0.040ms
:++==========. :+++++++: │ ├: Linux 7.2.2-1-cachyos 0.008ms
.-===========. =*****+*+ │ ├: Hyprland 0.56.2 (Wayland) 0.047ms
.-===========: .+*****+: DE: No DE found 0.007ms
-=======++++:::::::::::::::::::::::::-: .---: │ ├: foot 1.27.0 3.591ms
:======++++====+++******************=. │ ├: 1491 (pacman) 0.516ms
:=====+++==========++++++++++++++*- │ ├: Unknown WM: Hyprland 0.008ms
.====++==============++++++++++*- │ ├: Catppuccin 2.0 ●●●●●●●● 0.052ms
.===+==================+++++++: └ └: JetBrainsMono Nerd Font (9pt) 0.029ms
.-=======================+++: └────────────────────────────────────────────────────┘ 0.013ms
.......................... 0.004ms
┌────────────────Age / Uptime / Update───────────────┐ 0.004ms
OS Age: 102 days 0.038ms
Uptime: 47 mins 0.029ms
Update: Monday, August 31 2026 at 10:50 0.043ms
└────────────────────────────────────────────────────┘ 0.005ms
0.002ms
~
❯
```
### Root cause
`pacman -Q` initializes the full ALPM library (config parsing, sync-db paths, hooks, etc.) just to look up a single installed package's version. That overhead is roughly constant regardless of what's being queried, and appears to dominate the runtime here not disk I/O or package count.
https://github.com/omacom/omarchy/blob/b686ed892d9c3020c3336203f6d34cc75b544e2b/bin/omarchy-version
### Suggested fix
Pacman's local package database is just plain directories under `/var/lib/pacman/local/<name>-<version>/`, which are world-readable. Reading the version directly from that path avoids the ALPM initialization cost entirely:
```bash
#!/bin/bash
# omarchy:summary=Print the installed Omarchy version
omarchy_path=${OMARCHY_PATH:-/usr/share/omarchy}
omarchy_path=${omarchy_path%/}
if [[ $omarchy_path != "/usr/share/omarchy" ]]; then
hash=$(git -C "$omarchy_path" rev-parse --short HEAD 2>/dev/null || true)
if [[ -n $hash ]]; then
echo "dev ($hash)"
else
echo "dev"
fi
exit 0
fi
for package in omarchy-dev omarchy; do
dir=$(compgen -G "/var/lib/pacman/local/${package}-[0-9]*" | head -n1)
if [[ -n $dir ]]; then
base=$(basename "$dir")
version=${base#"${package}-"}
break
fi
done
[[ -n $version ]] || exit 1
echo "$version"
```
With this change, the script drops from ~200ms to low single-digit milliseconds in my testing.
```fish
~/Scripts
❯ time ./omarchy-version-test
4.0.1-1
________________________________________________________
Executed in 9.66 millis fish external
usr time 3.52 millis 840.00 micros 2.68 millis
sys time 8.22 millis 0.00 micros 8.22 millis
~/Scripts
❯
```
### Caveats / things that should be considered
- The glob is anchored to `-[0-9]` to avoid matching an unrelated package with a similar name prefix (e.g. a hypothetical `omarchy-foo`).
- Reading `/var/lib/pacman/local/` directly bypasses ALPM's transaction-aware consistency guarantees. In the rare case this script runs while a pacman transaction is actively renaming/replacing that directory, it could theoretically miss or misread the version. `pacman -Q` doesn't have this edge case. For a status-display tool this risk seems acceptable to me, but it's a real behavioral difference worth a second opinion.
- Happy to test further or adjust the approach if there's a preferred way to query the local db that keeps ALPM's guarantees while skipping the slow parts.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.
- Out of scopeDecided by agents · verified · 2026-10-09 10:14 UTC