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-2153GitHub issuePublicDecided· Out of scope

omarchy-launch-webapp silently demotes unrecognized default browsers to chromium.desktop — web apps open in the wrong profile

Reported by duketopceo · filed Oct 1, 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

omarchy-launch-webapp silently demotes unrecognized default browsers to chromium.desktop — web apps open in the wrong profilerevision 1 · captured 2026-10-01 20:15 UTC via poll

System details

Apple MacBookPro18,2 (M1 Max, aarch64), Omarchy 4.0.4-mac.1
(omarchy-debug needs an interactive sudo TTY — supplying details inline; the bug is in the script's logic, not environment-dependent.)

What's wrong?

When the XDG default browser is a .desktop file outside the hardcoded allowlist, omarchy-launch-webapp silently substitutes chromium.desktop and launches the web app in a different browser than the user's configured default — typically a different profile with no logins, cookies, or extensions. The app "opens", so the failure looks like the site is broken rather than the launcher.

Repro

  1. Make the default browser a custom launcher .desktop, e.g. browseros.desktop with Exec=/home/user/.local/bin/browseros %U — a wrapper that execs /usr/lib/chromium/chromium --user-data-dir=~/.config/browser-os (a dedicated, signed-in profile).
  2. xdg-settings get default-web-browser → browseros.desktop (also set in mimeapps.list).
  3. Launch any bundled web app, e.g. X.desktop → omarchy-launch-webapp https://x.com/.
  4. Result: the window opens on the stock chromium default profile (~/.config/chromium) — X shows a login wall even though the configured browser is signed in.

Root cause

browser=$(xdg-settings get default-web-browser)
case $browser in
  google-chrome* | brave* | microsoft-edge* | opera* | vivaldi* | helium*) ;;
  *) browser="chromium.desktop" ;;
esac
exec setsid uwsm-app -- $(sed -n 's/^Exec=\([^ ]*\).*/\1/p' .../$browser ...) --app="$1"

browseros.desktop fails the case → is replaced wholesale by chromium.desktop. The configured browser's Exec= line is never even read, so a .desktop that wraps chromium with --user-data-dir/--profile-directory can never be honored.

Verified with bash -x /usr/share/omarchy/bin/omarchy-launch-webapp https://x.com/:

+ browser=chromium.desktop
+ exec setsid uwsm-app -- /usr/bin/chromium --app=https://x.com/
Opening in existing browser session.   # <- default-profile singleton

The spawned window (chrome-x.com__-Default, owned by a chromium with no --user-data-dir) lands in a separate instance from the configured browser (--user-data-dir=~/.config/browser-os), confirmed via hyprctl clients + /proc/<pid>/cmdline.

Related but distinct

  • #13527 — web apps ride whichever Chrome profile is active (no --profile-directory passed). Same symptom family, different seam: this issue is the launcher choosing a different browser executable/profile entirely.
  • #10988 — wrapper Exec= lines (env VAR=... brave) are mis-parsed and fail silently with no window. Here the window opens — in the wrong browser.
  • #7034 — Firefox default unsupported.

Suggested direction

Any of:

  1. Parse the default .desktop's own Exec= first; if the resolved binary is a Chromium-family browser, pass --app to it (honors wrappers, custom --user-data-dir flags, and fixes #10988's parsing gap too). Only fall back to chromium.desktop when the default truly isn't app-capable.
  2. An opt-in override (OMARCHY_WEBAPP_BROWSER env or a config key) forcing which .desktop handles web apps — cheap and covers every custom browser.
  3. At minimum, surface a notification when the configured default is demoted — a silent browser/profile swap is the core UX bug: nothing looks wrong except that every login is missing.
View raw text
## System details

Apple MacBookPro18,2 (M1 Max, aarch64), Omarchy 4.0.4-mac.1
(`omarchy-debug` needs an interactive sudo TTY — supplying details inline; the bug is in the script's logic, not environment-dependent.)

## What's wrong?

When the XDG default browser is a `.desktop` file outside the hardcoded allowlist, `omarchy-launch-webapp` silently substitutes `chromium.desktop` and launches the web app in a **different browser** than the user's configured default — typically a different profile with no logins, cookies, or extensions. The app "opens", so the failure looks like the site is broken rather than the launcher.

### Repro

1. Make the default browser a custom launcher `.desktop`, e.g. `browseros.desktop` with `Exec=/home/user/.local/bin/browseros %U` — a wrapper that execs `/usr/lib/chromium/chromium --user-data-dir=~/.config/browser-os` (a dedicated, signed-in profile).
2. `xdg-settings get default-web-browser` → `browseros.desktop` (also set in `mimeapps.list`).
3. Launch any bundled web app, e.g. `X.desktop` → `omarchy-launch-webapp https://x.com/`.
4. Result: the window opens on the **stock chromium default profile** (`~/.config/chromium`) — X shows a login wall even though the configured browser is signed in.

### Root cause

```bash
browser=$(xdg-settings get default-web-browser)
case $browser in
  google-chrome* | brave* | microsoft-edge* | opera* | vivaldi* | helium*) ;;
  *) browser="chromium.desktop" ;;
esac
exec setsid uwsm-app -- $(sed -n 's/^Exec=\([^ ]*\).*/\1/p' .../$browser ...) --app="$1"
```

`browseros.desktop` fails the case → is replaced wholesale by `chromium.desktop`. The configured browser's `Exec=` line is never even read, so a `.desktop` that wraps chromium with `--user-data-dir`/`--profile-directory` can never be honored.

Verified with `bash -x /usr/share/omarchy/bin/omarchy-launch-webapp https://x.com/`:

```
+ browser=chromium.desktop
+ exec setsid uwsm-app -- /usr/bin/chromium --app=https://x.com/
Opening in existing browser session.   # <- default-profile singleton
```

The spawned window (`chrome-x.com__-Default`, owned by a chromium with no `--user-data-dir`) lands in a separate instance from the configured browser (`--user-data-dir=~/.config/browser-os`), confirmed via `hyprctl clients` + `/proc/<pid>/cmdline`.

### Related but distinct

- #13527 — web apps ride whichever *Chrome profile* is active (no `--profile-directory` passed). Same symptom family, different seam: this issue is the launcher choosing a different *browser executable/profile entirely*.
- #10988 — wrapper `Exec=` lines (`env VAR=... brave`) are mis-parsed and fail *silently with no window*. Here the window opens — in the wrong browser.
- #7034 — Firefox default unsupported.

### Suggested direction

Any of:

1. Parse the default `.desktop`'s own `Exec=` first; if the resolved binary is a Chromium-family browser, pass `--app` to *it* (honors wrappers, custom `--user-data-dir` flags, and fixes #10988's parsing gap too). Only fall back to `chromium.desktop` when the default truly isn't app-capable.
2. An opt-in override (`OMARCHY_WEBAPP_BROWSER` env or a config key) forcing which `.desktop` handles web apps — cheap and covers every custom browser.
3. At minimum, surface a notification when the configured default is demoted — a silent browser/profile swap is the core UX bug: nothing looks wrong except that every login is missing.

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

  • Related PRpr/10446· confirmed
  • Related PRpr/11975· 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 20:27 UTC