Proof Portal

Project overview

Omarchy

ProbeLabs65 findings · 95 requirements

A 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.

Inbox
ReportR-1180GitHub issuePublicDecided· Out of scope

`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

Decided: Out of scope — decided by agents · verified 4 days ago.

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

`omarchy-version` is slow (~200ms) due to `pacman -Q`, adds noticeable delay to fastfetch and any script calling itrevision 1 · captured 2026-09-28 21:24 UTC via poll

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 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.
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