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

[Proposal] Protection against accidental trashing of critical configuration directories (~/.config, ~/.local/share) in file managers

Reported by roonakyadav · filed Oct 3, 2026Closed upstream. GitHub close reason: deleted.

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

[Proposal] Protection against accidental trashing of critical configuration directories (~/.config, ~/.local/share) in file managersrevision 1 · captured 2026-10-03 10:36 UTC via poll

Problem Description

In Omarchy Quattro, modern GNOME Files (Nautilus 50+) is configured as the default file manager. When users toggle "Show Hidden Files" (Ctrl+H) to manage dotfiles or inspect their home directory, critical configuration roots and shell assets become visible directly alongside ordinary files:
- ~/.config
- ~/.local/share
- ~/.local/state
- Top-level shell configs (~/.bashrc, ~/.profile, ~/.gitconfig)
- Credential directories (~/.ssh, ~/.gnupg)

Under current FreeDesktop/GLib behavior in Nautilus, pressing Delete moves items directly to Trash (g_file_trash()) without an upfront confirmation dialog. While an undo toast is displayed, moving ~/.config or ~/.local/share even momentarily causes active background processes, compositor settings, and desktop shell singletons to lose their configuration paths immediately. This can lead to session instability, broken keybindings, and desktop corruption that cannot always be reverted simply through Nautilus's transient undo notification.

In a configuration-heavy Linux desktop environment like Omarchy, accidental trashing of ~/.config represents a severe usability and data integrity hazard for users.

Suggested Behavior & Protection Model

We propose introducing a lightweight safety barrier around critical desktop configuration paths:
1. Configurable Critical Paths: Top-level configuration roots (~/.config, ~/.local/share, ~/.local/state, ~/.ssh, ~/.gnupg) and direct Omarchy/Hyprland configuration directories (~/.config/omarchy, ~/.config/hypr) should be protected against unintentional trashing.
2. Immediate Restoration / Intervention: When an unprivileged file manager moves a protected path to $XDG_DATA_HOME/Trash, the system detects the .trashinfo metadata and automatically restores the path to its original location before background daemons and applications crash.
3. Intentional Overrides: Users who intentionally wish to delete or reset a configuration path can explicitly bypass or override the barrier (e.g. via CLI or an override action).
4. Zero Impact on Ordinary File Operations: Ordinary documents, downloads, project files, and disposable caches (~/.cache) must remain completely undisturbed. Project dotfiles (e.g. .gitignore, local repo dotfiles) are not blocked.

Implementation Direction

Because modern Nautilus does not provide pre-trash extension hooks or native deletion confirmation settings, interception can be handled cleanly at the FreeDesktop Trash specification boundary:
- A headless user service (e.g. an omarchy-shell service plugin) monitors ~/.local/share/Trash/info via inotify (inotifywait or kernel inotify).
- When a .trashinfo creation event fires, the service decodes the RFC 2396 URI path.
- If the path matches protected configurations and no active override token exists, it calls gio trash --restore immediately.
- A native Omarchy notification (omarchy-notification-send) alerts the user with details and an override option.
- Debouncing ensures multi-item deletions produce a single consolidated alert.
- Destination conflicts are checked defensively to prevent overwriting existing destinations.

We have implemented and tested a reference plugin for this architecture (roonakyadav.trash-guard at https://github.com/roonakyadav/omarchy-plugin), which demonstrates zero-CPU idle monitoring, instant auto-restoration, and safe override semantics on Omarchy Quattro. We welcome discussion on whether this or an equivalent safety barrier would be appropriate as a built-in Omarchy core service.

View raw text
## Problem Description

In Omarchy Quattro, modern GNOME Files (Nautilus 50+) is configured as the default file manager. When users toggle "Show Hidden Files" (`Ctrl+H`) to manage dotfiles or inspect their home directory, critical configuration roots and shell assets become visible directly alongside ordinary files:
- `~/.config`
- `~/.local/share`
- `~/.local/state`
- Top-level shell configs (`~/.bashrc`, `~/.profile`, `~/.gitconfig`)
- Credential directories (`~/.ssh`, `~/.gnupg`)

Under current FreeDesktop/GLib behavior in Nautilus, pressing `Delete` moves items directly to Trash (`g_file_trash()`) without an upfront confirmation dialog. While an undo toast is displayed, moving `~/.config` or `~/.local/share` even momentarily causes active background processes, compositor settings, and desktop shell singletons to lose their configuration paths immediately. This can lead to session instability, broken keybindings, and desktop corruption that cannot always be reverted simply through Nautilus's transient undo notification.

In a configuration-heavy Linux desktop environment like Omarchy, accidental trashing of `~/.config` represents a severe usability and data integrity hazard for users.

## Suggested Behavior & Protection Model

We propose introducing a lightweight safety barrier around critical desktop configuration paths:
1. **Configurable Critical Paths:** Top-level configuration roots (`~/.config`, `~/.local/share`, `~/.local/state`, `~/.ssh`, `~/.gnupg`) and direct Omarchy/Hyprland configuration directories (`~/.config/omarchy`, `~/.config/hypr`) should be protected against unintentional trashing.
2. **Immediate Restoration / Intervention:** When an unprivileged file manager moves a protected path to `$XDG_DATA_HOME/Trash`, the system detects the `.trashinfo` metadata and automatically restores the path to its original location before background daemons and applications crash.
3. **Intentional Overrides:** Users who intentionally wish to delete or reset a configuration path can explicitly bypass or override the barrier (e.g. via CLI or an override action).
4. **Zero Impact on Ordinary File Operations:** Ordinary documents, downloads, project files, and disposable caches (`~/.cache`) must remain completely undisturbed. Project dotfiles (e.g. `.gitignore`, local repo dotfiles) are not blocked.

## Implementation Direction

Because modern Nautilus does not provide pre-trash extension hooks or native deletion confirmation settings, interception can be handled cleanly at the FreeDesktop Trash specification boundary:
- A headless user service (e.g. an `omarchy-shell` service plugin) monitors `~/.local/share/Trash/info` via inotify (`inotifywait` or kernel inotify).
- When a `.trashinfo` creation event fires, the service decodes the RFC 2396 URI path.
- If the path matches protected configurations and no active override token exists, it calls `gio trash --restore` immediately.
- A native Omarchy notification (`omarchy-notification-send`) alerts the user with details and an override option.
- Debouncing ensures multi-item deletions produce a single consolidated alert.
- Destination conflicts are checked defensively to prevent overwriting existing destinations.

We have implemented and tested a reference plugin for this architecture (`roonakyadav.trash-guard` at https://github.com/roonakyadav/omarchy-plugin), which demonstrates zero-CPU idle monitoring, instant auto-restoration, and safe override semantics on Omarchy Quattro. We welcome discussion on whether this or an equivalent safety barrier would be appropriate as a built-in Omarchy core service.

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 20:59 UTC