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-612GitHub issuePublicFixed

launcher.hides entry "hermes" removes Hermes Desktop from the launcher even when the hermes-desktop package is not installed

Reported by pablo-io · filed Sep 13, 2026 · open at source

Decided: Out of scope — decided by agents · verified 3 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

launcher.hides entry "hermes" removes Hermes Desktop from the launcher even when the hermes-desktop package is not installedrevision 1 · captured 2026-09-28 21:23 UTC via poll

<img width="304" height="130" alt="Image" src="https://github.com/user-attachments/assets/8f71ca18-b080-4366-8753-fadee710442f" />

System details

AMD Ryzen 7 8745HS (Radeon 780M / AMD HawkPoint), Omarchy 4.0.3-1, omarchy-settings 4.0.3-1, Hyprland 0.56.2-2, kernel 7.2.3-arch1-3.
omarchy-debug --no-sudo --print log: https://logs.omarchy.org/1sBFFB (expires in 24h)

What's wrong?

hermes was added to default/omarchy/launcher.hides in 9fb73b005 ("Hide the upstream Hermes launcher in Omarchy"). Configured hides are applied to every desktop entry, including the user's own in ~/.local/share/applications, and they are matched purely on the entry id (= file name):

  • shell/services/AppLibrary.qml:221 — the only hides file read is OMARCHY_PATH/default/omarchy/launcher.hides (i.e. the package-owned copy under /usr/share/omarchy).
  • AppLibrary.isHiddenEntry() — returns true for configuredHiddenEntryIds[id], no matter which directory the entry came from.

The intent, per the commit message and the new test/shell.d/app-search-test.sh case, is to keep exactly one row when both the packaged hermes-desktop launcher and Hermes's self-registered hermes entry exist. But the hide is unconditional, so on a machine where the hermes-desktop package is not installed it hides the user's only Hermes launcher, and the app silently vanishes from the launcher.

Hermes Desktop registers/refreshes that exact file name itself (from its own docs): "On Linux, launches refresh `$XDG_DATA_HOME/applications/hermes.desktop` (by default `~/.local/share/applications/hermes.desktop`) so Hermes appears in the application menu."

Reproduce

  1. Omarchy 4.0.3, no Hermes package installed: pacman -Qs hermes → nothing, and ls /usr/share/applications | grep -i hermes → nothing.
  2. Install Hermes Desktop from source (hermes desktop), which writes ~/.local/share/applications/hermes.desktop.
  3. Open the launcher and search hermes → No matches for "hermes".

The entry itself is fine:

$ desktop-file-validate ~/.local/share/applications/hermes.desktop   # clean
$ gtk-launch hermes.desktop                                          # app starts
$ grep -x hermes /usr/share/omarchy/default/omarchy/launcher.hides
hermes

Capture: launcher search for hermes returning No matches for "hermes" — screenshot attached by the reporter (gh cannot upload media).

Expected

Hermes shows in the launcher unless the duplicate it was added to suppress is actually present.

Notes on fixability

There is currently no supported way for a user to un-hide an entry: the hides list is package-owned (/usr/share/omarchy/default/omarchy/launcher.hides, owned by omarchy-settings) and editing it is overwritten on the next omarchy update.

Options, roughly in order of preference:

  1. Make the hide conditional, e.g. only hide hermes when a hermes-desktop entry exists (a when:-style entry in the hides file, or a check in AppLibrary.loadConfiguredHides()).
  2. Only apply configured hides to entries coming from system XDG_DATA_DIRS application dirs, leaving ~/.local/share/applications under user control.
  3. Add a user-level hides file (e.g. ~/.config/omarchy/launcher.hides) that can override packaged hides, so this is at least escapable without touching package files.

Workaround in use

Copying the entry to an id that isn't hidden (~/.local/share/applications/hermes-desktop.desktop). It works, but it collides with the id of Omarchy's own packaged launcher and is not discoverable — anyone who installs Hermes Desktop from source on Omarchy just gets a missing app.

View raw text
<img width="304" height="130" alt="Image" src="https://github.com/user-attachments/assets/8f71ca18-b080-4366-8753-fadee710442f" />

## System details

AMD Ryzen 7 8745HS (Radeon 780M / AMD HawkPoint), Omarchy 4.0.3-1, omarchy-settings 4.0.3-1, Hyprland 0.56.2-2, kernel 7.2.3-arch1-3.
`omarchy-debug --no-sudo --print` log: https://logs.omarchy.org/1sBFFB (expires in 24h)

## What's wrong?

`hermes` was added to `default/omarchy/launcher.hides` in 9fb73b005 ("Hide the upstream Hermes launcher in Omarchy"). Configured hides are applied to **every** desktop entry, including the user's own in `~/.local/share/applications`, and they are matched purely on the entry id (= file name):

- `shell/services/AppLibrary.qml:221` — the only hides file read is `OMARCHY_PATH/default/omarchy/launcher.hides` (i.e. the package-owned copy under `/usr/share/omarchy`).
- `AppLibrary.isHiddenEntry()` — returns true for `configuredHiddenEntryIds[id]`, no matter which directory the entry came from.

The intent, per the commit message and the new `test/shell.d/app-search-test.sh` case, is to keep exactly one row when **both** the packaged `hermes-desktop` launcher and Hermes's self-registered `hermes` entry exist. But the hide is unconditional, so on a machine where the `hermes-desktop` package is not installed it hides the user's *only* Hermes launcher, and the app silently vanishes from the launcher.

Hermes Desktop registers/refreshes that exact file name itself (from its own docs): *"On Linux, launches refresh `$XDG_DATA_HOME/applications/hermes.desktop` (by default `~/.local/share/applications/hermes.desktop`) so Hermes appears in the application menu."*

### Reproduce

1. Omarchy 4.0.3, no Hermes package installed: `pacman -Qs hermes` → nothing, and `ls /usr/share/applications | grep -i hermes` → nothing.
2. Install Hermes Desktop from source (`hermes desktop`), which writes `~/.local/share/applications/hermes.desktop`.
3. Open the launcher and search `hermes` → `No matches for "hermes"`.

The entry itself is fine:

```
$ desktop-file-validate ~/.local/share/applications/hermes.desktop   # clean
$ gtk-launch hermes.desktop                                          # app starts
$ grep -x hermes /usr/share/omarchy/default/omarchy/launcher.hides
hermes
```

Capture: launcher search for `hermes` returning `No matches for "hermes"` — screenshot attached by the reporter (gh cannot upload media).

### Expected

Hermes shows in the launcher unless the duplicate it was added to suppress is actually present.

## Notes on fixability

There is currently no supported way for a user to un-hide an entry: the hides list is package-owned (`/usr/share/omarchy/default/omarchy/launcher.hides`, owned by `omarchy-settings`) and editing it is overwritten on the next `omarchy update`.

Options, roughly in order of preference:

1. Make the hide conditional, e.g. only hide `hermes` when a `hermes-desktop` entry exists (a `when:`-style entry in the hides file, or a check in `AppLibrary.loadConfiguredHides()`).
2. Only apply configured hides to entries coming from system `XDG_DATA_DIRS` application dirs, leaving `~/.local/share/applications` under user control.
3. Add a user-level hides file (e.g. `~/.config/omarchy/launcher.hides`) that can override packaged hides, so this is at least escapable without touching package files.

### Workaround in use

Copying the entry to an id that isn't hidden (`~/.local/share/applications/hermes-desktop.desktop`). It works, but it collides with the id of Omarchy's own packaged launcher and is not discoverable — anyone who installs Hermes Desktop from source on Omarchy just gets a missing app.
  • 8f71ca18-b080-4366-8753-fadee710442f

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

  • Fixed bypr/11000· confirmed

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 13:37 UTC