Omahub
← All plugins
S

Ominder

by Sahzudin Mahmic

Create and review lightweight Omarchy reminders from the bar.

Security review

No obvious issues detected

Deterministic scan — not a security guarantee

None
Risk level
None
Analyzed commit
03a94bc
Scanned
1 month ago

No potentially dangerous behavior detected in the analyzed commit.

Automated analysis only — not a security guarantee.

AI advisory review

No obvious issues detected

Language-model assessment · ~deepseek/deepseek-v4-flash-latest — advisory only

None
AI risk level
None
Recommendation
install
Model
~deepseek/deepseek-v4-flash-latest
Analyzed commit
03a94bc
Reviewed
1 month ago

This plugin is a straightforward reminder widget that interacts only with the expected `omarchy reminder` command and its own state file under the user's XDG state directory. It contains no network access, no dangerous shell operations, and includes tests enforcing plain-text rendering and clean removal. No issues were found by the deterministic scan or manual review.

How this check works

This review combines the deterministic scan (the rule-based results above) with an independent look at the plugin's code by a language model. The model reads a trimmed sample of the repository's files, the manifest, and the README, then gives a plain-language risk level and a recommendation: install (no notable danger), review (look closer first), or avoid (clearly dangerous).

It runs on the same analyzed commit as the deterministic scan and is strictly advisory — it is not a security guarantee and never blocks a plugin by itself. A human moderator still reviews plugins before they are listed.

AI advisory only — automated analysis, not a security guarantee.

Install
$ omarchy plugin add https://github.com/sahzudin/ominder --enable
Productivity #bar #quickshell

Ominder

Ominder is an Omarchy Quattro bar widget for creating and reviewing lightweight reminders. It uses Omarchy's native omarchy reminder command, so reminders fire through the standard desktop notification system.

Ominder reminder panel

Current features

  • Create a reminder with a duration or an exact local date and time, plus an optional message.
  • Use quick presets for 5, 10, 15, 30, or 60 minutes, or 24 hours.
  • Flip Repeat on to keep a reminder firing on its interval.
  • See upcoming reminders and their remaining time.
  • Stop an individual repeat, or clear every reminder at once.
  • Open the panel from the bar or through shell IPC.

The In mode passes a whole-minute duration straight to omarchy reminder. The At mode accepts YYYY-MM-DD and HH:MM, validates them in the local timezone, and converts the selected time to the whole-minute duration that the underlying command requires. Exact-time reminders never fire before the chosen minute, but can arrive less than one minute after it. Interval-based repeating is available in In mode only.

Requirements

  • Omarchy 4 / Quattro shell
  • The built-in omarchy reminder command

Install

Install Ominder from GitHub and enable its bar widget:

omarchy plugin add https://github.com/sahzudin/ominder.git --enable

If you want to choose its bar placement explicitly:

omarchy plugin enable io.github.sahzudin.ominder center

Local development

Validate the source folder first:

omarchy plugin validate .
npm test

The official Omarchy plugin guide loads development plugins from ~/.config/omarchy/plugins/<plugin-id>/. Copy this checkout there while developing. The plugin ID is:

io.github.sahzudin.ominder

After discovery, enable it with:

omarchy plugin enable io.github.sahzudin.ominder center

Open and close the panel without clicking the bar:

omarchy-shell shell summon io.github.sahzudin.ominder '{}'
omarchy-shell shell hide io.github.sahzudin.ominder

Saved plugin files are hot-reloaded. If discovery needs to be forced:

omarchy-shell shell rescanPlugins

Remove

omarchy plugin remove io.github.sahzudin.ominder

Ominder intentionally has no install.sh: installation does not add rows to the shared Omarchy menu, edit shell.json directly, install hooks, or create plugin-owned artifacts outside its plugin directory. The standard removal command disables the bar widget and removes the plugin directory, leaving no Ominder-owned menu rows or commands behind.

Reminders already created through Ominder are user data owned by Omarchy's built-in reminder service. Removing the UI plugin does not cancel them; they remain visible through omarchy reminder show and fire normally.

Repeat rules are the one file Ominder keeps outside its plugin directory. They are user data too, and omarchy plugin remove leaves ~/.local/state/ominder/repeating.json in place; with no widget running, nothing re-arms from it. Delete the file to discard those rules:

rm -f "${XDG_STATE_HOME:-$HOME/.local/state}/ominder/repeating.json"
rmdir --ignore-fail-on-non-empty "${XDG_STATE_HOME:-$HOME/.local/state}/ominder"

Repeating reminders

omarchy reminder only arms one-shot timers, so recurrence is Ominder's own bookkeeping rather than a flag passed through to the command. Turning Repeat on stores a rule in $XDG_STATE_HOME/ominder/repeating.json (falling back to ~/.local/state/ominder/repeating.json); each time that reminder fires, the bar widget arms the next one with a plain omarchy reminder call. Every reminder Ominder creates is therefore an ordinary Omarchy reminder, visible to omarchy reminder show like any other.

Two consequences follow from that design:

  • Rules only advance while the Quattro shell is running. An occurrence due during a reboot is skipped rather than replayed, and the schedule resumes at the next one.
  • Each rule keeps a fixed anchor and measures every re-arm against it, so the rounding to whole minutes that omarchy reminder requires stays within about half a minute instead of accumulating.

Clearing reminders from Ominder also drops the rules behind them. Clearing them elsewhere — omarchy reminder clear, or the built-in reminders panel — leaves the rules with no armed timer; Ominder notices on its next poll and retires them rather than re-arming behind your back.

Architecture

manifest.json declares one bar-widget entry point. BarWidget.qml owns the bar button and loads Panel.qml internally, matching the official Quattro plugin contract. No second Quickshell process is started.

Model.js holds the pure logic — parsing omarchy reminder show --json, validating exact local timestamps, converting them to durations, and planning which repeat rules are due — so it is tested under Node without a shell. test/model-test.js covers those paths.

The removal policy is covered by test/removal-policy-test.js. If a future version adds an installer, the test requires a paired uninstaller and checks that every known shared Omarchy configuration target is handled symmetrically.

License

MIT