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.
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
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
What happens
On every omarchy theme set, a tmux pane's text area loses terminal
transparency and renders fully opaque. background-opacity (ghostty) andbackground_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:
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"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
- Set
background-opacity = 0.45in~/.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
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