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-3883GitHub issuePublicReceived

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.

Received and recorded verbatim. Nothing has been checked yet.

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

Neovim transparency.lua file breaks checkhealth Snacks sectionrevision 1 · captured 2026-10-04 11:49 UTC via poll

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))
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:

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)
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.

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.