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.
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
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
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
- Use Omarchy with the default Quickshell bar for an extended period, reloading Quickshell periodically (config edits, theme changes, etc. — anything that restarts the shell).
- Check
pgrep -af inotifywait— count of processes watching~/.config/omarchy/pluginsgrows with each reload and never decreases. - 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-1Workaround
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