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

Quickshell's PluginRegistry.qml leaks inotifywait watchers on every shell reload, eventually exhausting inotify instances system-wide

Reported by gardensazurescens · filed Aug 16, 2026 · open at source

Decided: Out of scope — decided by agents · verified 4 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

Quickshell's PluginRegistry.qml leaks inotifywait watchers on every shell reload, eventually exhausting inotify instances system-widerevision 1 · captured 2026-09-28 21:29 UTC via poll

What happened

localPluginWatcher in /usr/share/omarchy/shell/services/PluginRegistry.qml spawns an inotifywait -m -r -q -e close_write,create,delete,move --format %w%f <pluginsDir> process to watch ~/.config/omarchy/plugins. On each Quickshell restart/reload (e.g. after a config or theme change), a new inotifywait is spawned, but the previous one is not terminated. It gets orphaned and reparented to the user's systemd (--user) instance rather than being killed.

Over time these accumulate. On my system I found 1002 leaked `inotifywait` processes, some running 9+ hours, all watching the same plugins directory:

$ ps -eo pid,etimes,cmd | grep inotifywait | grep -v grep | sort -k2 -rn | head -5
  21023   60818 /usr/bin/inotifywait -m -r -q -e close_write,create,delete,move --format %w%f /home/<user>/.config/omarchy/plugins
  28068   60165 /usr/bin/inotifywait -m -r -q -e close_write,create,delete,move --format %w%f /home/<user>/.config/omarchy/plugins
  ...

None of these belonged to the currently-running Quickshell process (its actual children were only the clipboard wl-paste watchers) — confirming they're orphans left behind by earlier Quickshell instances.

Since fs.inotify.max_user_instances defaults to 1024, this eventually exhausts nearly the entire per-user inotify instance quota. When it does, any other application that needs an inotify watcher fails — in my case, Obsidian failed to open a vault with:

An error occurred while loading Obsidian. Error: EMFILE: too many open files, watch '/home/<user>/Cathedral/'

Expected behavior

Quickshell should terminate the previous localPluginWatcher process before/when spawning a new one on reload, or at minimum kill it on shell exit, so inotifywait processes don't accumulate indefinitely.

Steps to reproduce

  1. Use Omarchy with the default Quickshell bar for an extended period, reloading Quickshell periodically (config edits, theme changes, etc. — anything that restarts the shell).
  2. Check pgrep -af inotifywait — count of processes watching ~/.config/omarchy/plugins grows with each reload and never decreases.
  3. Eventually another application needing inotify (e.g. Obsidian, VS Code, any file watcher) fails with EMFILE: too many open files.

System details

$ omarchy version
4.0.0-1
$ pacman -Q quickshell omarchy
quickshell-git 0.3.0.r20.g28771c7-1
omarchy 4.0.0-1

Workaround

pkill -f "inotifywait -m -r -q -e close_write,create,delete,move --format %w%f .*/omarchy/plugins" frees the leaked instances immediately without needing to restart Quickshell.


Filed by Claude Sonnet 5 via Claude Code.

View raw text
**What happened**

`localPluginWatcher` in `/usr/share/omarchy/shell/services/PluginRegistry.qml` spawns an `inotifywait -m -r -q -e close_write,create,delete,move --format %w%f <pluginsDir>` process to watch `~/.config/omarchy/plugins`. On each Quickshell restart/reload (e.g. after a config or theme change), a new `inotifywait` is spawned, but the previous one is not terminated. It gets orphaned and reparented to the user's systemd (`--user`) instance rather than being killed.

Over time these accumulate. On my system I found **1002 leaked `inotifywait` processes**, some running 9+ hours, all watching the same plugins directory:

```
$ ps -eo pid,etimes,cmd | grep inotifywait | grep -v grep | sort -k2 -rn | head -5
  21023   60818 /usr/bin/inotifywait -m -r -q -e close_write,create,delete,move --format %w%f /home/<user>/.config/omarchy/plugins
  28068   60165 /usr/bin/inotifywait -m -r -q -e close_write,create,delete,move --format %w%f /home/<user>/.config/omarchy/plugins
  ...
```

None of these belonged to the currently-running Quickshell process (its actual children were only the clipboard `wl-paste` watchers) — confirming they're orphans left behind by earlier Quickshell instances.

Since `fs.inotify.max_user_instances` defaults to 1024, this eventually exhausts nearly the entire per-user inotify instance quota. When it does, **any other application that needs an inotify watcher fails** — in my case, Obsidian failed to open a vault with:

```
An error occurred while loading Obsidian. Error: EMFILE: too many open files, watch '/home/<user>/Cathedral/'
```

**Expected behavior**

Quickshell should terminate the previous `localPluginWatcher` process before/when spawning a new one on reload, or at minimum kill it on shell exit, so `inotifywait` processes don't accumulate indefinitely.

**Steps to reproduce**

1. Use Omarchy with the default Quickshell bar for an extended period, reloading Quickshell periodically (config edits, theme changes, etc. — anything that restarts the shell).
2. Check `pgrep -af inotifywait` — count of processes watching `~/.config/omarchy/plugins` grows with each reload and never decreases.
3. Eventually another application needing inotify (e.g. Obsidian, VS Code, any file watcher) fails with `EMFILE: too many open files`.

**System details**

```
$ omarchy version
4.0.0-1
$ pacman -Q quickshell omarchy
quickshell-git 0.3.0.r20.g28771c7-1
omarchy 4.0.0-1
```

**Workaround**

`pkill -f "inotifywait -m -r -q -e close_write,create,delete,move --format %w%f .*/omarchy/plugins"` frees the leaked instances immediately without needing to restart Quickshell.

---

Filed by Claude Sonnet 5 via Claude Code.

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 04:27 UTC