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.
Neovim transparency.lua file breaks checkhealth Snacks section
Reported by scossar · filed Dec 15, 2025Closed upstream on 2026-03-07 by dhh; the closing comment says it was fixed by PR omacom-io/omarchy-pkgs#51. GitHub close reason: completed.
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
System details
Omarchy 3.2.2
What's wrong?
With the current ~/.config/nvim/plugin/after/transparency.lua file in place, running :checkhealth or :LazyHealth` renders the following for the Snacks section if either of the health command are run prior to opening any files with Neovim:
Snacks ~
- ✅ OK setup called
- ❌ ERROR Failed to run healthcheck for "snacks" plugin. Exception:
...cal/share/nvim/lazy/snacks.nvim/lua/snacks/util/init.lua:187: attempt to index local 'fg' (a nil value)If I've previously opened a file, then run one of the health commands, I'm getting the following error in the Snacks section:
Snacks ~
- ✅ OK setup called
- ❌ ERROR Failed to run healthcheck for "snacks" plugin. Exception:
...r/.local/share/nvim/lazy/snacks.nvim/lua/snacks/init.lua:7: loop or previous error loading module 'snacks.gh'The first error is more helpful for debugging the issue. The problem seems to be that Snacks is trying to blend a color and getting a nil value for fg:
-- .local/share/nvim/lazy/snacks.nvim/lua/snacks/util/init.lua
---@param fg string foreground color
---@param bg string background color
---@param alpha number number between 0 and 1. 0 results in bg, 1 results in fg
function M.blend(fg, bg, alpha)
local bg_rgb = { tonumber(bg:sub(2, 3), 16), tonumber(bg:sub(4, 5), 16), tonumber(bg:sub(6, 7), 16) }
local fg_rgb = { tonumber(fg:sub(2, 3), 16), tonumber(fg:sub(4, 5), 16), tonumber(fg:sub(6, 7), 16) }
local blend = function(i)
local ret = (alpha * fg_rgb[i] + ((1 - alpha) * bg_rgb[i]))
return math.floor(math.min(math.max(0, ret), 255) + 0.5)
end
return string.format("#%02x%02x%02x", blend(1), blend(2), blend(3))
endThe transparency.lua file doesn't explicitly set fg, but I think that its calls to vim.api.nvim_set_h1 cause the highlight groups to be completely overwritten. So calls like this effectively set fg to nil:
vim.api.nvim_set_hl(0, "Normal", { bg = "none" })Commenting out the entire file fixes the issue with the health section's Snacks entry
Snacks ~
- ✅ OK setup called
Snacks.bigfile ~
- ✅ OK setup {enabled}
Snacks.dashboard ~
- ✅ OK setup {enabled}
- ✅ OK setup ran
- ✅ OK dashboard opened
Snacks.explorer ~
- ⚠️ WARNING setup {disabled}
- ✅ OK 'gio' `2.86.2`
- ✅ OK System trash command found
Snacks.image ~
- ✅ OK setup {enabled}
- ✅ OK 'ghostty' `Ghostty 1.2.3-arch2`
- ✅ OK 'magick' `Version: ImageMagick 7.1.2-8 Q16-HDRI x86_64 2300ae543:20251025 https://imagemagick.org`
...The Snacks section of the health page is one of the more useful sections. That's what got me looking into this.
I'm not confident enough about Neovim hilight groups to make a PR for the issue. I think a fix would be something like:
local function make_transparent(group)
local hl = vim.api.nvim_get_hl(0, { name = group })
-- List of valid nvim_set_hl keys
local valid_keys = {
"fg", "bg", "sp", "blend", "bold", "standout", "underline",
"undercurl", "underdouble", "underdotted", "underdashed",
"strikethrough", "italic", "reverse", "nocombine", "link",
"ctermfg", "ctermbg", "cterm"
}
local new_hl = {}
for _, key in ipairs(valid_keys) do
if key == "bg" then
new_hl[key] = nil -- Make transparent
else
new_hl[key] = hl[key]
end
end
vim.api.nvim_set_hl(0, group, new_hl)
end
local transparent_groups = {
"Normal",
"NormalFloat",
"FloatBorder",
"Pmenu",
-- ...
}
for _, group in pairs(transparent_groups) do
make_transparent(group)
endLooking at this some more, it seems that many of the color schemes (Catppuccin, Tokyonight, Gruvbox) already support transparency. For those themes, I don't think the Omarchy transparency file is needed.
View raw text
### System details
Omarchy 3.2.2
### What's wrong?
With the current ~/.config/nvim/plugin/after/transparency.lua` file in place, running `:checkhealth` or `:LazyHealth` renders the following for the Snacks section if either of the health command are run prior to opening any files with Neovim:
```text
Snacks ~
- ✅ OK setup called
- ❌ ERROR Failed to run healthcheck for "snacks" plugin. Exception:
...cal/share/nvim/lazy/snacks.nvim/lua/snacks/util/init.lua:187: attempt to index local 'fg' (a nil value)
```
If I've previously opened a file, then run one of the health commands, I'm getting the following error in the Snacks section:
```text
Snacks ~
- ✅ OK setup called
- ❌ ERROR Failed to run healthcheck for "snacks" plugin. Exception:
...r/.local/share/nvim/lazy/snacks.nvim/lua/snacks/init.lua:7: loop or previous error loading module 'snacks.gh'
```
The first error is more helpful for debugging the issue. The problem seems to be that Snacks is trying to blend a color and getting a `nil` value for `fg`:
```lua
-- .local/share/nvim/lazy/snacks.nvim/lua/snacks/util/init.lua
---@param fg string foreground color
---@param bg string background color
---@param alpha number number between 0 and 1. 0 results in bg, 1 results in fg
function M.blend(fg, bg, alpha)
local bg_rgb = { tonumber(bg:sub(2, 3), 16), tonumber(bg:sub(4, 5), 16), tonumber(bg:sub(6, 7), 16) }
local fg_rgb = { tonumber(fg:sub(2, 3), 16), tonumber(fg:sub(4, 5), 16), tonumber(fg:sub(6, 7), 16) }
local blend = function(i)
local ret = (alpha * fg_rgb[i] + ((1 - alpha) * bg_rgb[i]))
return math.floor(math.min(math.max(0, ret), 255) + 0.5)
end
return string.format("#%02x%02x%02x", blend(1), blend(2), blend(3))
end
```
The `transparency.lua` file doesn't explicitly set `fg`, but I think that its calls to `vim.api.nvim_set_h1` cause the highlight groups to be completely overwritten. So calls like this effectively set `fg` to `nil`:
```lua
vim.api.nvim_set_hl(0, "Normal", { bg = "none" })
```
Commenting out the entire file fixes the issue with the health section's Snacks entry
```text
Snacks ~
- ✅ OK setup called
Snacks.bigfile ~
- ✅ OK setup {enabled}
Snacks.dashboard ~
- ✅ OK setup {enabled}
- ✅ OK setup ran
- ✅ OK dashboard opened
Snacks.explorer ~
- ⚠️ WARNING setup {disabled}
- ✅ OK 'gio' `2.86.2`
- ✅ OK System trash command found
Snacks.image ~
- ✅ OK setup {enabled}
- ✅ OK 'ghostty' `Ghostty 1.2.3-arch2`
- ✅ OK 'magick' `Version: ImageMagick 7.1.2-8 Q16-HDRI x86_64 2300ae543:20251025 https://imagemagick.org`
...
```
The Snacks section of the health page is one of the more useful sections. That's what got me looking into this.
I'm not confident enough about Neovim hilight groups to make a PR for the issue. I think a fix would be something like:
```lua
local function make_transparent(group)
local hl = vim.api.nvim_get_hl(0, { name = group })
-- List of valid nvim_set_hl keys
local valid_keys = {
"fg", "bg", "sp", "blend", "bold", "standout", "underline",
"undercurl", "underdouble", "underdotted", "underdashed",
"strikethrough", "italic", "reverse", "nocombine", "link",
"ctermfg", "ctermbg", "cterm"
}
local new_hl = {}
for _, key in ipairs(valid_keys) do
if key == "bg" then
new_hl[key] = nil -- Make transparent
else
new_hl[key] = hl[key]
end
end
vim.api.nvim_set_hl(0, group, new_hl)
end
local transparent_groups = {
"Normal",
"NormalFloat",
"FloatBorder",
"Pmenu",
-- ...
}
for _, group in pairs(transparent_groups) do
make_transparent(group)
end
```
Looking at this some more, it seems that many of the color schemes (Catppuccin, Tokyonight, Gruvbox) already support transparency. For those themes, I don't think the Omarchy transparency file is needed.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.