Omahub
← All plugins
C

Auto Theme

by cvatca

Rotates through every installed Omarchy theme on a timer (24 hours by default), with a one-click skip for a theme you are not in the mood for and an "Auto Theme" tile in the theme carousel.

Security review

No obvious issues detected

Deterministic scan — not a security guarantee

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

The plugin is a straightforward theme rotator that only writes to user state/cache and changes themes when explicitly enabled. The code is clear, uses proper quoting for shell commands, and performs no destructive or hidden actions. The deterministic scan found no issues, and manual review confirms no malicious 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/cristian-v/autotheme --enable
Appearance #system

Auto Theme

Walks through every installed Omarchy theme, one per interval (24 hours by default), so the whole collection actually gets seen instead of one pick sitting there forever. Skipping a theme you are not in the mood for is one click, and the rotation itself is selectable from the theme carousel like any other theme.

Parts

File Role
Service.qml The rotation itself, plus the autotheme IPC surface
BarWidget.qml Bar icon, tooltip, and the skip/pause panel
bin/autotheme-switcher Theme carousel with the "Auto Theme" tile in it
bin/autotheme-tile Draws that tile from every theme's palette

State lives in ~/.local/state/omarchy/autotheme/state.json.

Install

omarchy plugin add https://github.com/cristian-v/autotheme.git --enable

That clones the repo into ~/.config/omarchy/plugins/cvatca.autotheme/ and puts the bar icon in the bar — answer right when it asks which section, or run omarchy plugin enable cvatca.autotheme --section right afterwards.

The carousel tile and the Style menu rows are menu entries, which a plugin cannot register for itself. Add them to ~/.config/omarchy/extensions/omarchy-menu.jsonc (create the file if it is not there; it hot-reloads on save):

{
  // Reuse the stock "Theme" id so both the Style > Theme row and the
  // SUPER + SHIFT + CTRL + SPACE keybind open the same carousel, now with an
  // "Auto Theme" tile at the head of it.
  "style.theme": {"icon":"󰸌","label":"Theme","aliases":["theme","themes"],"action":"~/.config/omarchy/plugins/cvatca.autotheme/bin/autotheme-switcher"},

  "style.autotheme": {"icon":"󰑙","label":"Auto Theme","aliases":["auto theme","autotheme","rotate"],"description":"Rotate through every installed theme on a timer"},
  "style.autotheme.toggle": {"icon":"󰔡","label":"Rotate themes automatically","checked":"jq -e '.enabled == true' ~/.local/state/omarchy/autotheme/state.json","action":"omarchy-shell autotheme toggle"},
  "style.autotheme.skip": {"icon":"󰒭","label":"Skip this theme","description":"Not in the mood? Jump straight to the next one","action":"omarchy-shell autotheme skip"},
  "style.autotheme.block": {"icon":"󰈉","label":"Never show this theme","action":"omarchy-shell autotheme blockCurrent"},
  "style.autotheme.clear": {"icon":"󰃢","label":"Clear the never-show list","when":"jq -e '(.blocked // []) | length > 0' ~/.local/state/omarchy/autotheme/state.json","action":"omarchy-shell autotheme clearBlocked"}
}

Nothing rotates until the rotation is turned on, so an install never changes the theme out from under you: pick the "Auto Theme" tile in the carousel, or run omarchy-shell autotheme enable.

Later updates come from the same place:

omarchy plugin update cvatca.autotheme

Uninstall

omarchy plugin remove cvatca.autotheme --yes

That unloads the plugin, takes the icon off the bar, and deletes the clone. Three things it leaves behind:

  • The Auto Theme block in ~/.config/omarchy/extensions/omarchy-menu.jsonc. Delete it, or Style → Theme and the carousel keybind keep pointing at a script that is no longer there.

  • The cvatca.autotheme entry in the plugins[] array of ~/.config/omarchy/shell.json, if settings were put there.

  • The saved rotation state and the generated tile:

    rm -rf ~/.local/state/omarchy/autotheme ~/.cache/omarchy/autotheme
    

Whichever theme the rotation last applied stays applied; omarchy theme set <name> picks a different one.

Using it

  • Bar icon (󰸌, right side): hover for the current theme and the countdown, click for the panel, middle-click to skip without opening anything.

  • Notification: every change announces itself; clicking it skips to the next theme.

  • Carousel: SUPER + SHIFT + CTRL + SPACE, or Style → Theme. The first tile is "Auto Theme" — a grid of every theme's palette, so it never reads as one more theme. Picking it turns the rotation on and moves to a new theme right away. Picking any real theme turns the rotation off and pins that theme, because an explicit choice should stick until it is explicitly handed back to the rotation.

  • Menu: Style → Auto Theme has toggle, skip, never-show, and clear.

  • Terminal:

    omarchy-shell autotheme status        # JSON: current theme, countdown, order
    omarchy-shell autotheme toggle        # or enable / disable
    omarchy-shell autotheme skip          # not in the mood — next one now
    omarchy-shell autotheme blockCurrent  # never show this theme again
    omarchy-shell autotheme unblock nord  # take one back off that list
    omarchy-shell autotheme clearBlocked
    

A keybind for skipping, if you want one, in ~/.config/hypr/bindings.lua:

o.bind("SUPER + SHIFT + CTRL + N", "Skip theme", "omarchy-shell autotheme skip")

Settings

In the plugins[] array of ~/.config/omarchy/shell.json:

{ "id": "cvatca.autotheme", "intervalHours": 24, "shuffle": true, "notify": true }
  • intervalHours — how long a theme gets. Fractional values work, which is also how to test the rotation without waiting a day (0.02 is ~72 seconds).
  • shuffle — walk the themes in a random order that reshuffles each time the list is exhausted, rather than alphabetically. Either way every theme comes up once per pass.
  • notify — announce each change with a click-to-skip notification.

How it decides when to switch

Rotation is driven by a wall-clock timestamp in the state file, checked every 30 seconds, rather than by a 24-hour Timer. A suspend, a reboot, or a shell restart therefore never loses or double-fires a rotation: the service just notices on the next tick that the interval has elapsed and moves on once. A machine that was off for three days rotates once when it comes back, not three times.

The order is persisted, so installing or removing a theme folds into the current pass instead of restarting it.

License

MIT — see LICENSE.