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.autothemeentry in theplugins[]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.02is ~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.