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.
Themes installed via `omarchy theme install` lose their window decoration — cloned themes' `hyprland.lua` is stripped and never runs
Reported by petealeon · filed Sep 22, 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
Summary
Installing a gallery theme from omarchy.com via the documented omarchy theme install <url> produces a half-applied theme: colors, terminal palettes, and shell theming apply, but all window decoration authored by the theme (blur, rounding, window opacity/dim, shadows, gaps, borders, animations — the "tinted apps" look) is silently dropped. Live Hyprland keeps Omarchy's defaults (rounding 0, blur off, active_opacity 1.0) while the installed theme requests e.g. rounding 16 / blur on / 0.98.
Expected
A theme advertised for omarchy theme install renders as-authored, including its window decoration.
Actual
omarchy theme set <name>completes without error, but prints to stderr e.g.:
Ignored in ~/.config/omarchy/themes/mapquest: alacritty.toml ghostty.conf kitty.conf neovim.lua
(and hyprland.lua for themes that ship one).
- After applying Harbor (declares rounding = 3, shadow.enabled = true):
- hyprctl getoption decoration:rounding → int: 0
- hyprctl getoption decoration:shadow:enabled → bool: false
- After applying Mapquest (declares rounding = 16, blur on, active_opacity = 0.98, inactive_opacity = 0.8):
- hyprctl getoption decoration:rounding → int: 0
- hyprctl getoption decoration:blur:enabled → bool: false
- hyprctl getoption decoration:active_opacity → float: 1.000000
- hyprctl configerrors is empty — the theme's decoration is dropped silently.
- The staged ~/.local/state/omarchy/current/theme/hyprland.lua contains only border-color settings.
Steps to reproduce
omarchy theme install https://github.com/HANCORE-linux/omarchy-harbor-theme(or any gallery theme:OldJobobo/omarchy-hinterlands-theme,ItsABigIgloo/omarchy-mapquest-theme, ...)- Apply it:
omarchy theme set harbor - Inspect:
hyprctl getoption decoration:rounding→0(Harbor declares3);hyprctl getoption decoration:shadow:enabled→false(Harbor declarestrue) - Inspect the staged theme:
~/.local/state/omarchy/current/theme/hyprland.luacontains only border colors, and the git clone's ownhyprland.luawas never staged.
Root cause
omarchy-theme-set distinguishes a git-cloned theme from a user-authored one by the .git directory a clone leaves behind (theme_came_from_a_repo, stage_installed_theme). For installed themes it refuses every *.lua file plus alacritty.toml, foot.ini, ghostty.conf, kitty.conf, and vscode.json — a safety measure, since a theme's hyprland.lua/gum_env.lua run at login, neovim.lua runs at Neovim startup, terminal configs name the launched program, and vscode.json names a VS Code extension. Everything else (e.g. hyprland.conf, CSS, colors.toml) is treated as colour and kept.
omarchy-theme-set-templates then regenerates a minimal hyprland.lua from $OMARCHY_PATH/default/themed/hyprland.lua.tpl, which emits only active_border/inactive_border (and group borders). Every other decoration setting from the author is lost.
Two additional contributing points:
- Themes that ship a classic
hyprland.conf(e.g. mapquest) never get it loaded at runtime. Omarchy's Hyprland config is Lua-only and consumes the theme viarequire("omarchy.current.theme.hyprland")indefault/hypr/omarchy.lua. The.confis carried into the staged theme as dead weight. - Gallery themes ship a
.omarchy-theme.yml(gallery: true), but it is not consulted at staging time, so gallery themes have no way to be treated as trusted.
The gallery themes on omarchy.com are authored as full Omarchy themes (complete hyprland.lua, colors.toml, shell.toml, neovim.lua, etc.) and their READMEs advertise the standard omarchy theme install flow, but omarchy theme set in 4.0.4 drops those Lua files, so the advertised install flow cannot render the theme as-authored.
Suggested fix directions
- Base the Lua/terminal stripping decision on something other than the mere presence of
.git— e.g. honor a gallery/trust marker such as.omarchy-theme.yml(gallery: true), or treat omarchy.com gallery repos as trusted — OR - Keep a trusted theme's
hyprland.luastaged verbatim instead of regenerating it from the border-only template, OR - Have the
hyprland.lua.tpl/staging path carry per-theme decoration by parsing the theme'shyprland.confwhen nohyprland.luais shipped (a theme with only a.confcurrently loses all decoration).
Local workaround found
Deleting the .git directory from the theme folder makes theme_came_from_a_repo return false, so the theme is treated as user-authored and its Lua files are staged verbatim:
rm -rf ~/.config/omarchy/themes/<name>/.git
omarchy theme set <name>This restores the theme's authored window decoration (verified: Mapquest rounding 16, blur on, opacity 0.98/0.8, gaps 0/8, border 3; Harbor rounding 3, shadow range 16, gaps 4/5; Hinterlands blur size 4, shadow range 24, gaps 8/16), but it silently offboards the theme from omarchy theme extras / theme-update tracking.
Environment
- Omarchy: 4.0.4-1
- Hyprland: 0.56.2 (v0.56.2)
- Kernel: 7.2.5-3-omarchy
- CPU: Intel Core i5-8350U @ 1.70GHz
- GPU: Intel UHD Graphics 620 (Kaby Lake-R)
- Hardware: ThinkPad T480s
View raw text
## Summary
Installing a gallery theme from omarchy.com via the documented `omarchy theme install <url>` produces a **half-applied theme**: colors, terminal palettes, and shell theming apply, but all window decoration authored by the theme (blur, rounding, window opacity/dim, shadows, gaps, borders, animations — the "tinted apps" look) is silently dropped. Live Hyprland keeps Omarchy's defaults (`rounding 0`, `blur off`, `active_opacity 1.0`) while the installed theme requests e.g. `rounding 16` / blur on / `0.98`.
## Expected
A theme advertised for `omarchy theme install` renders as-authored, including its window decoration.
## Actual
- `omarchy theme set <name>` completes without error, but prints to stderr e.g.:
`Ignored in ~/.config/omarchy/themes/mapquest: alacritty.toml ghostty.conf kitty.conf neovim.lua`
(and `hyprland.lua` for themes that ship one).
- After applying Harbor (declares `rounding = 3`, `shadow.enabled = true`):
- `hyprctl getoption decoration:rounding` → `int: 0`
- `hyprctl getoption decoration:shadow:enabled` → `bool: false`
- After applying Mapquest (declares `rounding = 16`, blur on, `active_opacity = 0.98`, `inactive_opacity = 0.8`):
- `hyprctl getoption decoration:rounding` → `int: 0`
- `hyprctl getoption decoration:blur:enabled` → `bool: false`
- `hyprctl getoption decoration:active_opacity` → `float: 1.000000`
- `hyprctl configerrors` is empty — the theme's decoration is dropped silently.
- The staged `~/.local/state/omarchy/current/theme/hyprland.lua` contains only border-color settings.
## Steps to reproduce
1. `omarchy theme install https://github.com/HANCORE-linux/omarchy-harbor-theme` (or any gallery theme: `OldJobobo/omarchy-hinterlands-theme`, `ItsABigIgloo/omarchy-mapquest-theme`, ...)
2. Apply it: `omarchy theme set harbor`
3. Inspect: `hyprctl getoption decoration:rounding` → `0` (Harbor declares `3`); `hyprctl getoption decoration:shadow:enabled` → `false` (Harbor declares `true`)
4. Inspect the staged theme: `~/.local/state/omarchy/current/theme/hyprland.lua` contains only border colors, and the git clone's own `hyprland.lua` was never staged.
## Root cause
`omarchy-theme-set` distinguishes a git-cloned theme from a user-authored one by the `.git` directory a clone leaves behind (`theme_came_from_a_repo`, `stage_installed_theme`). For installed themes it refuses every `*.lua` file plus `alacritty.toml`, `foot.ini`, `ghostty.conf`, `kitty.conf`, and `vscode.json` — a safety measure, since a theme's `hyprland.lua`/`gum_env.lua` run at login, `neovim.lua` runs at Neovim startup, terminal configs name the launched program, and `vscode.json` names a VS Code extension. Everything else (e.g. `hyprland.conf`, CSS, `colors.toml`) is treated as colour and kept.
`omarchy-theme-set-templates` then regenerates a minimal `hyprland.lua` from `$OMARCHY_PATH/default/themed/hyprland.lua.tpl`, which emits **only** `active_border`/`inactive_border` (and group borders). Every other decoration setting from the author is lost.
Two additional contributing points:
- Themes that ship a classic `hyprland.conf` (e.g. mapquest) never get it loaded at runtime. Omarchy's Hyprland config is Lua-only and consumes the theme via `require("omarchy.current.theme.hyprland")` in `default/hypr/omarchy.lua`. The `.conf` is carried into the staged theme as dead weight.
- Gallery themes ship a `.omarchy-theme.yml` (`gallery: true`), but it is not consulted at staging time, so gallery themes have no way to be treated as trusted.
The gallery themes on omarchy.com are authored as full Omarchy themes (complete `hyprland.lua`, `colors.toml`, `shell.toml`, `neovim.lua`, etc.) and their READMEs advertise the standard `omarchy theme install` flow, but `omarchy theme set` in 4.0.4 drops those Lua files, so the advertised install flow cannot render the theme as-authored.
## Suggested fix directions
- Base the Lua/terminal stripping decision on something other than the mere presence of `.git` — e.g. honor a gallery/trust marker such as `.omarchy-theme.yml` (`gallery: true`), or treat omarchy.com gallery repos as trusted — OR
- Keep a trusted theme's `hyprland.lua` staged verbatim instead of regenerating it from the border-only template, OR
- Have the `hyprland.lua.tpl`/staging path carry per-theme decoration by parsing the theme's `hyprland.conf` when no `hyprland.lua` is shipped (a theme with only a `.conf` currently loses all decoration).
## Local workaround found
Deleting the `.git` directory from the theme folder makes `theme_came_from_a_repo` return false, so the theme is treated as user-authored and its Lua files are staged verbatim:
```bash
rm -rf ~/.config/omarchy/themes/<name>/.git
omarchy theme set <name>
```
This restores the theme's authored window decoration (verified: Mapquest `rounding 16`, blur on, opacity `0.98/0.8`, gaps `0/8`, border `3`; Harbor `rounding 3`, shadow range `16`, gaps `4/5`; Hinterlands blur size `4`, shadow range `24`, gaps `8/16`), but it silently offboards the theme from `omarchy theme extras` / theme-update tracking.
## Environment
- Omarchy: 4.0.4-1
- Hyprland: 0.56.2 (v0.56.2)
- Kernel: 7.2.5-3-omarchy
- CPU: Intel Core i5-8350U @ 1.70GHz
- GPU: Intel UHD Graphics 620 (Kaby Lake-R)
- Hardware: ThinkPad T480sValidation
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 19:30 UTC