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-5004GitHub issuePublicReceived

omarchy-theme-set-browser blocks forever when brave-bin and brave-origin-bin are both installed

Reported by haydenmckay · filed Sep 10, 2026Closed upstream on 2026-09-21 by bjarneo via an automated message, as a duplicate of #8158 (R-1486). GitHub close reason: completed.

Received and recorded verbatim. Nothing has been checked yet.

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?
Not yet mapped to any requirement or component.
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?
Our staff decide whether the report is valid. Where this project allows it, agents decide whether it duplicates another report or a known issue. No decision has been recorded yet.

Original report

omarchy-theme-set-browser blocks forever when brave-bin and brave-origin-bin are both installedrevision 1 · captured 2026-10-04 12:10 UTC via poll

On a machine with both brave-bin and brave-origin-bin installed and only brave-origin running, omarchy theme set <name> never returns. Every theme change hangs — the menu, omarchy theme set, and anything scripted on top of them.

Cause

bin/omarchy-theme-set-browser:

refresh_running_browser() {
  local process="$1"
  local command="$2"
  local pgrep_args="${3:--x}"

  if omarchy-cmd-present "$command" && pgrep $pgrep_args "$process" >/dev/null; then
    "$command" --refresh-platform-policy --no-startup-window &>/dev/null
  fi
}
...
refresh_running_browser brave brave
# Match on the binary path: the running process is named plain "brave", and a
# bare -f brave-origin pattern would also match the installer's own terminal.
refresh_running_browser /opt/brave-origin-bin/ brave-origin -f

refresh_running_browser brave brave gates on pgrep -x brave. Both packages install a binary named brave (/opt/brave-bin/brave and /opt/brave-origin-bin/brave), so that match fires on brave-origin's processes. omarchy-cmd-present brave is also true, so the guard passes and the script runs /opt/brave-bin/brave --refresh-platform-policy --no-startup-window.

With no brave-bin instance to hand the message to, that does not ping-and-exit — it cold-starts a full windowless browser that never exits. The call is not backgrounded and has no timeout, so omarchy-theme-set-browser blocks on it indefinitely, and omarchy-theme-set waits on it via run_parallel.

The comment directly below notes this same binary-name collision; the path-specific fix was applied only to the brave-origin line.

Reproduce

  1. Install both brave-bin and brave-origin-bin.
  2. Run brave-origin. Do not run brave-bin.
  3. omarchy theme set nord — never returns.

Observed process tree:

omarchy-theme-set nord            do_wait
  omarchy-theme-set-browser       do_wait
    /opt/brave-bin/brave --refresh-platform-policy --no-startup-window   <- never exits

Evidence

$ pgrep -cx brave
18
$ for p in $(pgrep -x brave); do readlink /proc/$p/exe; done | sort -u
/opt/brave-origin-bin/brave

All 18 matches are brave-origin; not one brave-bin process is running, yet the brave branch fires.

Verified on omarchy 4.0.3 (brave-bin 1:1.94.121-1, brave-origin-bin 1:1.94.121-1, Arch, Hyprland). The code is unchanged on quattro @ 8ea51516. Uninstalling brave-bin resolves it, which confirms the branch is the trigger.

Suggested fix

Make the check path-specific, matching what the brave-origin line already does, and bound the refresh so a future mis-detect degrades instead of hanging:

-refresh_running_browser brave brave
+refresh_running_browser /opt/brave-bin/ brave -f
-    "$command" --refresh-platform-policy --no-startup-window &>/dev/null
+    timeout 10 "$command" --refresh-platform-policy --no-startup-window &>/dev/null

The timeout matters independently of the pgrep fix: any browser in this list that fails to hand off will wedge every theme change on the system with no error surfaced.

View raw text
On a machine with both `brave-bin` and `brave-origin-bin` installed and only brave-origin running, `omarchy theme set <name>` never returns. Every theme change hangs — the menu, `omarchy theme set`, and anything scripted on top of them.

## Cause

`bin/omarchy-theme-set-browser`:

```bash
refresh_running_browser() {
  local process="$1"
  local command="$2"
  local pgrep_args="${3:--x}"

  if omarchy-cmd-present "$command" && pgrep $pgrep_args "$process" >/dev/null; then
    "$command" --refresh-platform-policy --no-startup-window &>/dev/null
  fi
}
...
refresh_running_browser brave brave
# Match on the binary path: the running process is named plain "brave", and a
# bare -f brave-origin pattern would also match the installer's own terminal.
refresh_running_browser /opt/brave-origin-bin/ brave-origin -f
```

`refresh_running_browser brave brave` gates on `pgrep -x brave`. Both packages install a binary named `brave` (`/opt/brave-bin/brave` and `/opt/brave-origin-bin/brave`), so that match fires on brave-origin's processes. `omarchy-cmd-present brave` is also true, so the guard passes and the script runs `/opt/brave-bin/brave --refresh-platform-policy --no-startup-window`.

With no brave-bin instance to hand the message to, that does not ping-and-exit — it cold-starts a full windowless browser that never exits. The call is not backgrounded and has no timeout, so `omarchy-theme-set-browser` blocks on it indefinitely, and `omarchy-theme-set` waits on it via `run_parallel`.

The comment directly below notes this same binary-name collision; the path-specific fix was applied only to the `brave-origin` line.

## Reproduce

1. Install both `brave-bin` and `brave-origin-bin`.
2. Run brave-origin. Do not run brave-bin.
3. `omarchy theme set nord` — never returns.

Observed process tree:

```
omarchy-theme-set nord            do_wait
  omarchy-theme-set-browser       do_wait
    /opt/brave-bin/brave --refresh-platform-policy --no-startup-window   <- never exits
```

## Evidence

```
$ pgrep -cx brave
18
$ for p in $(pgrep -x brave); do readlink /proc/$p/exe; done | sort -u
/opt/brave-origin-bin/brave
```

All 18 matches are brave-origin; not one brave-bin process is running, yet the `brave` branch fires.

Verified on omarchy 4.0.3 (`brave-bin 1:1.94.121-1`, `brave-origin-bin 1:1.94.121-1`, Arch, Hyprland). The code is unchanged on `quattro` @ 8ea51516. Uninstalling `brave-bin` resolves it, which confirms the branch is the trigger.

## Suggested fix

Make the check path-specific, matching what the `brave-origin` line already does, and bound the refresh so a future mis-detect degrades instead of hanging:

```diff
-refresh_running_browser brave brave
+refresh_running_browser /opt/brave-bin/ brave -f
```

```diff
-    "$command" --refresh-platform-policy --no-startup-window &>/dev/null
+    timeout 10 "$command" --refresh-platform-policy --no-startup-window &>/dev/null
```

The timeout matters independently of the pgrep fix: any browser in this list that fails to hand off will wedge every theme change on the system with no error surfaced.

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.

No decision has been recorded yet.