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

Theme change breaks terminal transparency in tmux panes (window-style + OSC 11 into pane ttys)

Reported by ScytheAkira · filed Sep 24, 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

Theme change breaks terminal transparency in tmux panes (window-style + OSC 11 into pane ttys)revision 1 · captured 2026-09-28 21:23 UTC via poll

What happens

On every omarchy theme set, a tmux pane's text area loses terminal
transparency and renders fully opaque. background-opacity (ghostty) and
background_opacity (kitty) stop having any effect until the pane is recreated.

omarchy-theme-set-tmux runs on every theme change (via post_theme_commands)
whenever a tmux server is up, and makes tmux paint an explicit background on
every cell. Terminal transparency only applies to cells using the default
background, so once tmux stamps a background colour on each cell there is
nothing left for the terminal to blend against.

There are two independent mechanisms — neutralising one alone does not fix it:

  1. sync_tmux_window_style()
   tmux set-option -g window-style        "fg=$foreground,bg=$background"
   tmux set-option -g window-active-style "fg=$foreground,bg=$background"
  1. sync_tmux_pane_colors() writes OSC 11 (set background) straight into every pane tty
   theme_osc=$(omarchy-theme-osc "$COLORS_TOML")   # contains ESC]11;<bg>BEL
   printf '%b' "$theme_osc" >"$pane_tty"

This is tmux doing it, not the terminal — which is why it affects ghostty and
kitty identically, and why reloading the terminal's own config never helps.

What I expected

A theme change updates colours without destroying transparency. Terminals that
reload their own config (ghostty, kitty) already pick up the new palette from
the theme's ghostty.conf / kitty.conf via omarchy-restart-terminal, so the
tmux colour push is redundant for them.

Steps to reproduce

  1. Set background-opacity = 0.45 in ~/.config/ghostty/config (or

background_opacity 0.45 + dynamic_background_opacity yes for kitty).
2. Start tmux inside that terminal. The pane is translucent.
3. Run omarchy theme set <any-theme>.
4. The pane is now opaque, and stays opaque for its lifetime.

Evidence

Same ghostty+tmux pane, fixed geometry, same wallpaper. Mean RGB of the window
interior sampled from grim. The wallpaper behind had channel spread 24, so a
translucent window inherits a colour cast and an opaque one goes flat neutral:

statewindow RGBchannel spreadverdict
baseline(43,38,33)10translucent
after omarchy-theme-osc written to pane tty(32,32,32)0opaque
after window-style set(13,13,13)0opaque

Controls:

  • Bare ghostty keeps its opacity across OSC 11. Sending ESC]11;#00aa00BEL

to a ghostty with no tmux gave (23,118,14), not solid (0,170,0) — the
background changed but stayed translucent. The breakage requires tmux in the
middle.
- A brand-new tmux window is clean. The damage is per-pane and cannot be
repaired in place: select-pane -P bg=default and window-style bg=default
both fail, and OSC 111 (reset background) leaves the pane white.

Ruled out

Hyprland window rules / opacity / the opaque prop; hyprctl reload; ghostty
config content (ghostty +show-config still reports background-opacity = 0.45
throughout); ghostty config reload (SIGUSR2); the theme GTK CSS overriding
ghostty's gtk-custom-css; the rm -rf/mv theme-swap window leaving the theme
include briefly missing.

Suggested fix

Skip both the window-style set and the pane OSC push for terminals that reload
their own config, or gate them behind an opt-out. The cursor-colour set and the
gum/COLORFGBG environment sync in the same script are harmless and worth
keeping — dropping only the two above restores transparency with no colour loss.

System

  • Omarchy 4.0.4-1, kernel 7.2.5-3-omarchy
  • CPU Intel i7-10750H · GPU Intel UHD (CometLake-H GT2) + NVIDIA Quadro P620
  • tmux 3.7_c-1, ghostty 1.3.1-2, kitty 0.48.2-1
View raw text
### What happens

On every `omarchy theme set`, a tmux pane's text area loses terminal
transparency and renders fully opaque. `background-opacity` (ghostty) and
`background_opacity` (kitty) stop having any effect until the pane is recreated.

`omarchy-theme-set-tmux` runs on every theme change (via `post_theme_commands`)
whenever a tmux server is up, and makes tmux paint an explicit background on
every cell. Terminal transparency only applies to cells using the **default**
background, so once tmux stamps a background colour on each cell there is
nothing left for the terminal to blend against.

There are **two independent mechanisms** — neutralising one alone does not fix it:

1. `sync_tmux_window_style()`
   ```bash
   tmux set-option -g window-style        "fg=$foreground,bg=$background"
   tmux set-option -g window-active-style "fg=$foreground,bg=$background"
   ```
2. `sync_tmux_pane_colors()` writes OSC 11 (set background) straight into every pane tty
   ```bash
   theme_osc=$(omarchy-theme-osc "$COLORS_TOML")   # contains ESC]11;<bg>BEL
   printf '%b' "$theme_osc" >"$pane_tty"
   ```

This is tmux doing it, not the terminal — which is why it affects ghostty and
kitty identically, and why reloading the terminal's own config never helps.

### What I expected

A theme change updates colours without destroying transparency. Terminals that
reload their own config (ghostty, kitty) already pick up the new palette from
the theme's `ghostty.conf` / `kitty.conf` via `omarchy-restart-terminal`, so the
tmux colour push is redundant for them.

### Steps to reproduce

1. Set `background-opacity = 0.45` in `~/.config/ghostty/config` (or
   `background_opacity 0.45` + `dynamic_background_opacity yes` for kitty).
2. Start tmux inside that terminal. The pane is translucent.
3. Run `omarchy theme set <any-theme>`.
4. The pane is now opaque, and stays opaque for its lifetime.

### Evidence

Same ghostty+tmux pane, fixed geometry, same wallpaper. Mean RGB of the window
interior sampled from `grim`. The wallpaper behind had channel spread 24, so a
translucent window inherits a colour cast and an opaque one goes flat neutral:

| state | window RGB | channel spread | verdict |
|---|---|---|---|
| baseline | (43,38,33) | 10 | translucent |
| after `omarchy-theme-osc` written to pane tty | (32,32,32) | 0 | opaque |
| after `window-style` set | (13,13,13) | 0 | opaque |

Controls:

- **Bare ghostty keeps its opacity across OSC 11.** Sending `ESC]11;#00aa00BEL`
  to a ghostty with no tmux gave (23,118,14), not solid (0,170,0) — the
  background changed but stayed translucent. The breakage requires tmux in the
  middle.
- **A brand-new tmux window is clean.** The damage is per-pane and cannot be
  repaired in place: `select-pane -P bg=default` and `window-style bg=default`
  both fail, and OSC 111 (reset background) leaves the pane white.

### Ruled out

Hyprland window rules / `opacity` / the `opaque` prop; `hyprctl reload`; ghostty
config content (`ghostty +show-config` still reports `background-opacity = 0.45`
throughout); ghostty config reload (SIGUSR2); the theme GTK CSS overriding
ghostty's `gtk-custom-css`; the `rm -rf`/`mv` theme-swap window leaving the theme
include briefly missing.

### Suggested fix

Skip both the `window-style` set and the pane OSC push for terminals that reload
their own config, or gate them behind an opt-out. The `cursor-colour` set and the
gum/`COLORFGBG` environment sync in the same script are harmless and worth
keeping — dropping only the two above restores transparency with no colour loss.

### System

- Omarchy 4.0.4-1, kernel 7.2.5-3-omarchy
- CPU Intel i7-10750H · GPU Intel UHD (CometLake-H GT2) + NVIDIA Quadro P620
- tmux 3.7_c-1, ghostty 1.3.1-2, kitty 0.48.2-1

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 17:46 UTC