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.
xdg-open on the stock Terminal=true nvim.desktop opens no terminal and blocks the caller
Reported by paolot0rr3s · filed Sep 1, 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 4.0.2-1 (
omarchy-settings4.0.2-1) - Hyprland 0.56.2-1, foot 1.27.0-2
- xdg-utils 1.2.1-2, xdg-terminal-exec 0.14.3-1, neovim 0.12.5-1
- AMD EPYC 7551 / Virtio GPU / kernel 7.1.9-arch1-2 (VM guest)
What's wrong
omarchy-settings ships /usr/share/applications/mimeapps.list, which maps text/plain and 17 other text types to nvim.desktop. That entry comes from the neovim package and is Terminal=true:
Exec=nvim %F
Terminal=trueThrough a GIO-based launcher (Nautilus and friends) this is fine — GIO supplies the terminal.
Through bare `xdg-open` — what most non-GTK apps call — nothing supplies a terminal. nvim starts headless on a stray pts with no window, and xdg-open blocks indefinitely waiting for it to exit.
Steps to reproduce
printf 'int main(void){return 0;}\n' > /tmp/repro.c
xdg-mime query default text/x-csrc # -> nvim.desktop
xdg-open /tmp/repro.c &
sleep 6
ps -o pid=,cmd= -C nvim # nvim running, no terminal window
jobs # xdg-open still blockedObserved: an nvim /tmp/repro.c process with no terminal window, and xdg-open still running after 6s.
Contrast — the exact same handler through GIO:
gio launch /usr/share/applications/nvim.desktop /tmp/repro.cObserved: foot -e nvim /tmp/repro.c — a real window, as intended.
Expected behavior
A text file opened through xdg-open should get a terminal window, and xdg-open should return.
Impact
Any application that shells out to xdg-open to show a config or text file appears to do nothing, then hangs.
I hit this with a locally-run web app (DeepSeek Harness) whose "open configuration file" button calls xdg-open on a YAML file and awaits it. The UI showed a generic failure after the request timed out, while an invisible nvim silently held the file open. A second click produced a swap-file conflict against the first invisible instance.
Not a duplicate
- #2087, #2528, #2667 concerned Omarchy's own custom
nvim.desktop(with$TERMINAL) breaking Nautilus. Removing that was correct. This report is about the stock entry failing on the barexdg-openpath only. - #7810 and #7299 concern switching to a GUI editor and MIME defaults not syncing. This occurs with the shipped default (nvim), no editor change involved.
Suggested fix
Omarchy already ships the right tool — omarchy-launch-tui:
exec setsid uwsm-app -- xdg-terminal-exec --app-id=$APP_ID -e "$1" "${@:2}"Shipping a small Terminal=false desktop entry that routes the editor through omarchy-launch-editor, and pointing mimeapps.list at that entry instead of nvim.desktop, would fix the xdg-open path without touching nvim.desktop — so the Nautilus behaviour restored by #1892 stays intact.
Local workaround that fully resolves it here:
# ~/.local/bin/omarchy-open-editor
#!/bin/bash
export PATH="/usr/share/omarchy/bin:$PATH"
setsid -f omarchy-launch-editor "$@" </dev/null >/dev/null 2>&1
exit 0plus a Terminal=false desktop entry with Exec=/home/<user>/.local/bin/omarchy-open-editor %f, set as the default for the text MIME types.
The setsid -f is the essential part — it is what lets xdg-open return instead of blocking.
View raw text
## System details
- Omarchy 4.0.2-1 (`omarchy-settings` 4.0.2-1)
- Hyprland 0.56.2-1, foot 1.27.0-2
- xdg-utils 1.2.1-2, xdg-terminal-exec 0.14.3-1, neovim 0.12.5-1
- AMD EPYC 7551 / Virtio GPU / kernel 7.1.9-arch1-2 (VM guest)
## What's wrong
`omarchy-settings` ships `/usr/share/applications/mimeapps.list`, which maps `text/plain` and 17 other text types to `nvim.desktop`. That entry comes from the `neovim` package and is `Terminal=true`:
```
Exec=nvim %F
Terminal=true
```
Through a **GIO-based launcher** (Nautilus and friends) this is fine — GIO supplies the terminal.
Through **bare `xdg-open`** — what most non-GTK apps call — nothing supplies a terminal. `nvim` starts headless on a stray pts with no window, and `xdg-open` blocks indefinitely waiting for it to exit.
## Steps to reproduce
```bash
printf 'int main(void){return 0;}\n' > /tmp/repro.c
xdg-mime query default text/x-csrc # -> nvim.desktop
xdg-open /tmp/repro.c &
sleep 6
ps -o pid=,cmd= -C nvim # nvim running, no terminal window
jobs # xdg-open still blocked
```
Observed: an `nvim /tmp/repro.c` process with **no** terminal window, and `xdg-open` still running after 6s.
Contrast — the exact same handler through GIO:
```bash
gio launch /usr/share/applications/nvim.desktop /tmp/repro.c
```
Observed: `foot -e nvim /tmp/repro.c` — a real window, as intended.
## Expected behavior
A text file opened through `xdg-open` should get a terminal window, and `xdg-open` should return.
## Impact
Any application that shells out to `xdg-open` to show a config or text file appears to do nothing, then hangs.
I hit this with a locally-run web app (DeepSeek Harness) whose "open configuration file" button calls `xdg-open` on a YAML file and awaits it. The UI showed a generic failure after the request timed out, while an invisible `nvim` silently held the file open. A second click produced a swap-file conflict against the first invisible instance.
## Not a duplicate
- #2087, #2528, #2667 concerned Omarchy's **own** custom `nvim.desktop` (with `$TERMINAL`) breaking Nautilus. Removing that was correct. This report is about the **stock** entry failing on the bare `xdg-open` path only.
- #7810 and #7299 concern switching to a **GUI** editor and MIME defaults not syncing. This occurs with the shipped default (nvim), no editor change involved.
## Suggested fix
Omarchy already ships the right tool — `omarchy-launch-tui`:
```bash
exec setsid uwsm-app -- xdg-terminal-exec --app-id=$APP_ID -e "$1" "${@:2}"
```
Shipping a small `Terminal=false` desktop entry that routes the editor through `omarchy-launch-editor`, and pointing `mimeapps.list` at that entry instead of `nvim.desktop`, would fix the `xdg-open` path **without** touching `nvim.desktop` — so the Nautilus behaviour restored by #1892 stays intact.
Local workaround that fully resolves it here:
```bash
# ~/.local/bin/omarchy-open-editor
#!/bin/bash
export PATH="/usr/share/omarchy/bin:$PATH"
setsid -f omarchy-launch-editor "$@" </dev/null >/dev/null 2>&1
exit 0
```
plus a `Terminal=false` desktop entry with `Exec=/home/<user>/.local/bin/omarchy-open-editor %f`, set as the default for the text MIME types.
The `setsid -f` is the essential part — it is what lets `xdg-open` return instead of blocking.
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:30 UTC