Omahub
← All plugins
S

Tomato Timer

by SLcode777

Pomodoro timer with per-event sounds, cycles, and full in-panel customization.

Security review

No obvious issues detected

Deterministic scan — not a security guarantee

None
Risk level
None
Analyzed commit
58d0497
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
58d0497
Reviewed
1 month ago

Manual review agrees with the deterministic scan: this is a straightforward Pomodoro timer with a pure-JS state machine, QML UI, and bundled assets. It writes only two JSON files under ~/.local/state/omarchy and invokes only documented, fixed-argument system utilities (pw-play, omarchy-notification-send, omarchy-file-select, mkdir -p); there is no obfuscation, network access, persistence, or destructive behavior.

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/SLcode777/tomato-timer --enable
Widgets #bar #system

Tomato Timer

A Pomodoro timer for the Omarchy bar, with the clock sitting on a full-size background photo and every setting living in the panel itself — no config file to hand-edit.

<p align="center"> <img src="preview.png" alt="The Tomato Timer panel, paused mid-session" width="425"> </p>

Features

  • Work / break cycles. N cycles of work + break, then the session ends. There is no long break, and the last cycle has no break: when its work phase runs out, the session is complete.
  • A different sound for each of the four moments — session start, break start, break end, session complete — chosen from 27 bundled sounds, with a preview button next to each.
  • Background images. Eight bundled wallpapers, or any image of your own by path. The clock sits on top with a darkening veil so it stays readable.
  • Desktop notifications when a break starts, when work resumes, and when the session is done.
  • Runs in a service, so the timer keeps going with the panel closed and shows the same clock on every monitor.
  • Survives suspend and restarts. The clock is deadline-based rather than counted down, phases that elapsed while the machine slept are caught up in one step, and a session interrupted by a shell restart comes back paused rather than silently resuming.

Install

omarchy plugin add https://github.com/SLcode777/tomato-timer
omarchy plugin enable slcode777.tomato-timer
omarchy restart shell

The shell restart matters on first install: a newly added service is not picked up by a running shell.

Removing it

omarchy plugin disable slcode777.tomato-timer
omarchy plugin remove slcode777.tomato-timer

Disabling takes the widget off the bar and stops the service; removing deletes the plugin folder. Neither touches your settings, so reinstalling picks up where you left off. To clear those too:

rm -f ~/.local/state/omarchy/tomato-timer-settings.json \
      ~/.local/state/omarchy/tomato-timer-state.json

Settings

Click the ring in the bar, then the gear. Everything is in there and saves as you change it:

Group What
Timer Work duration (1–120 min), break (1–60), cycles (1–10), auto-start breaks and work
Sounds Global on/off, volume, and the sound for each of the four events
Background The eight bundled wallpapers, your own image by path, or none
Colours & bar Clock colour over the image, break accent colour, clock in the bar, notifications

Settings and session state live in ~/.local/state/omarchy/tomato-timer-settings.json and tomato-timer-state.json.

Keyboard

With the panel open: arrow keys move between the buttons, Enter activates, Esc closes (or leaves the settings view), Tab moves to the next bar panel.

Scripting and keybindings

The panel:

omarchy shell shell summon slcode777.tomato-timer '{}'
omarchy shell shell hide slcode777.tomato-timer

The timer itself, without opening anything — handy for a Hyprland bind:

omarchy shell tomato-timer toggle    # start / pause
omarchy shell tomato-timer start
omarchy shell tomato-timer pause
omarchy shell tomato-timer skip      # jump to the next phase
omarchy shell tomato-timer reset
omarchy shell tomato-timer status    # e.g. "running work 24:12 cycle 2/3 (1 completed)"

Gallery

<table> <tr> <td><img src="assets/preview1.webp" alt="Tomato Timer panel" width="210"></td> <td><img src="assets/preview2.webp" alt="Tomato Timer panel" width="210"></td> <td><img src="assets/preview3.webp" alt="Tomato Timer panel" width="210"></td> <td><img src="assets/preview4.webp" alt="Tomato Timer panel" width="210"></td> </tr> <tr> <td><img src="assets/preview5.webp" alt="Tomato Timer panel" width="210"></td> <td><img src="assets/preview6.webp" alt="Tomato Timer panel" width="210"></td> <td><img src="assets/preview7.webp" alt="Tomato Timer panel" width="210"></td> <td><img src="assets/preview8.webp" alt="Tomato Timer panel" width="210"></td> </tr> </table>

What it runs on your machine

Plugins share the long-running Omarchy shell process and run unsandboxed with your permissions, so here is everything this one touches.

Command When Why
pw-play on each timer sound and on the preview button plays a bundled audio file, in a detached process
omarchy-notification-send at a phase change, if notifications are on the desktop notification
omarchy-file-select only when you press Browse in the settings Omarchy's own file chooser, to pick a custom background
mkdir -p once at startup creates ~/.local/state/omarchy/ if it is missing

All four ship with Omarchy or PipeWire — there is nothing extra to install, no setup step, and no installer or remote build.

The plugin writes exactly two files, both under ~/.local/state/omarchy/: tomato-timer-settings.json and tomato-timer-state.json. It reads nothing else of yours, asks for no elevated privileges, opens no network connection, and never starts a second Quickshell process.

Notes

  • Image formats. Qt here ships decoders for JPEG, PNG, GIF and SVG. WebP needs the qt6-imageformats package, so the bundled photos are JPEG and a custom WebP path will fall back to the plain plate rather than failing.
  • Sound playback goes through pw-play (PipeWire) in a detached process, so a bad audio file can never take the shell down with it.
  • Testing durations. Adding "workSec": 5 / "breakSec": 3 to the settings file runs phases in seconds instead of minutes, which makes a full session testable in under a minute. The minutes fields stay authoritative for the UI.

Credits

Sounds come from Freesound under Creative Commons 0 and Creative Commons Attribution licences — see CREDITS.md for the per-sound attribution.

The bundled backgrounds are wallpapers shipped with Omarchy's own themes, downscaled to 720px tall.

Licence

MIT — see LICENSE. The bundled audio keeps its own licences.