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

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

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

Themes installed via `omarchy theme install` lose their window decoration — cloned themes' `hyprland.lua` is stripped and never runsrevision 1 · captured 2026-09-28 21:23 UTC via poll

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:

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 T480s

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 19:30 UTC