Theme Manager Plus is a TUI and CLI tool that switches Omarchy themes exactly the same way the Omarchy menu does, with additional flexibility and automation.
It is not a replacement for Omarchy’s theming system.
Think of it as a direct, expanded interface for driving Omarchy’s existing theme flow—script-compatible, hook-compatible, and future-proof.
- Materializes
~/.config/omarchy/current/themeand writestheme.nameso Omarchy apps know which theme is active - Runs Omarchy’s own theme scripts to keep behavior identical to the menu
- Reloads common components (Waybar, terminals, notifications, etc.)
- Optionally applies:
- A Waybar theme
- A Walker theme
- A Hyprlock theme
- A Starship preset or user theme
- Supports presets (theme + Waybar + Walker + Hyprlock + Starship bundles)
curl -fsSL https://raw.githubusercontent.com/OldJobobo/theme-manager-plus/master/install.sh | bash
theme-managerIf the command is not found, open a new terminal or run:
source ~/.profile- Omarchy installed on this machine
- Omarchy scripts available in
PATH- or configured via
OMARCHY_BIN_DIR
- or configured via
- Optional:
starship(for Starship presets or themes)kittyorchafa(for browse previews)awww(for wallpaper transitions; daemon is not auto-started)
Install latest (Linux x86_64):
curl -fsSL https://raw.githubusercontent.com/OldJobobo/theme-manager-plus/master/install.sh | bashInstall a specific version:
THEME_MANAGER_VERSION=0.2.6 \
curl -fsSL https://raw.githubusercontent.com/OldJobobo/theme-manager-plus/master/install.sh | bashUninstall:
curl -fsSL https://raw.githubusercontent.com/OldJobobo/theme-manager-plus/master/uninstall.sh | bashUninstall and remove config:
curl -fsSL https://raw.githubusercontent.com/OldJobobo/theme-manager-plus/master/uninstall.sh | bash -s -- --purgetheme-manager— open the full-screen browser (default)theme-manager list— list available themestheme-manager set <Theme>— switch to a themetheme-manager set <Theme> -w— switch theme and apply Waybartheme-manager set <Theme> -k— switch theme and apply bundled Walker themetheme-manager set <Theme> --hyprlock— switch theme and apply bundled Hyprlock themetheme-manager browse— interactive selector (theme + Waybar + Walker + Hyprlock + Starship)theme-manager waybar <mode>— apply Waybar onlytheme-manager walker <mode>— apply Walker onlytheme-manager hyprlock <mode>— apply Hyprlock onlytheme-manager starship <mode>— apply Starship onlytheme-manager preset save|load|list|removetheme-manager version
Switch themes.
-w(no name): use the theme’swaybar-theme/if present-w <name>: use~/.config/waybar/themes/<name>/-k(no name): use the theme’swalker-theme/if present-k <name>: use~/.config/walker/themes/<name>/--hyprlock(no name): use the theme’shyprlock-theme/if present--hyprlock <name>: use~/.config/hypr/themes/hyprlock/<name>/-q: suppress external command output
Full-screen selector with previews.
- Tabs: Theme, Waybar, Walker, Hyprlock, Starship, Presets, Review
- Apply with Ctrl+Enter by default
- Includes a “No theme change” option
- Component tabs include “No Waybar change”, “No Walker change”, “No Hyprlock change”, and “No Starship change” (leave current config as-is)
- Supports search and preset saving
next: cycle to the next themecurrent: print current theme namebg-next: cycle background via Omarchy
Experimental
install: clone and activate a themeupdate: pull updates for git-based themesremove: delete a theme directory
Presets store a theme + Waybar + Walker + Hyprlock + Starship bundle.
Save example:
theme-manager preset save "Daily Driver" \
--theme noir \
--waybar auto \
--walker auto \
--hyprlock auto \
--starship preset:bracketed-segmentedLoad example:
theme-manager preset load "Daily Driver" -w
# or override Walker too:
theme-manager preset load "Daily Driver" -w -k omarchy-default
# or override Hyprlock:
theme-manager preset load "Daily Driver" --hyprlock omarchy-defaultPrecedence:
CLI flags > preset values > config defaults
Apply Waybar without changing the theme.
Modes:
autonone<name>(shared Waybar theme)
Apply Starship without changing the theme.
Modes:
nonethemepreset:<name>named:<name><name>(named theme if it exists, otherwise preset)
Apply Walker without changing the theme.
Modes:
autonone<name>(shared Walker theme)
Apply Hyprlock without changing the theme.
Modes:
autonone<name>(shared Hyprlock theme)
Print resolved configuration values.
Print CLI version.
preview.png(preferred)theme.png- First image in
backgrounds/
All checks are case-insensitive.
- Apply:
Ctrl+Enter(default) - Save preset:
Ctrl+S - Clear search:
Ctrl+U
Change apply key:
[tui]
apply_key = "ctrl+m"Or unbind in Ghostty:
keybind = ctrl+enter=unboundRestart Ghostty after changes.
Two supported layouts:
Per-theme
theme/
└── waybar-theme/
├── config.jsonc
└── style.css
Shared
~/.config/waybar/themes/<name>/
Behavior:
- Files are symlinked into
~/.config/waybar/by default - Set
WAYBAR_APPLY_MODE="copy"to copy instead - Waybar is restarted after apply
- If Omarchy default Waybar files are found,
omarchy-defaultis auto-linked into~/.config/waybar/themes/
Supported sources:
- Theme-specific:
walker-theme/(requiresstyle.css, optionallayout.xml) - Shared themes:
~/.config/walker/themes/<name>/
Behavior:
- Named Walker mode updates
~/.config/walker/config.toml(theme = "...") - Auto mode builds
theme-manager-autounder~/.config/walker/themes/ - Walker is restarted after apply
- If Omarchy default Walker files are found,
omarchy-defaultis auto-linked into~/.config/walker/themes/
Supported sources:
- Starship presets
- User themes:
~/.config/starship-themes/*.toml - Theme-specific:
starship.toml
Behavior:
- Active config is written to
~/.config/starship.toml - Presets appear automatically in browse mode
- Example themes live in
extras/starship-themes/ - If Omarchy default Starship files are found,
omarchy-default.tomlis auto-linked into~/.config/starship-themes/
Supported layouts:
- Theme-specific:
hyprlock-theme/hyprlock.conf - Shared:
~/.config/hypr/themes/hyprlock/<name>/hyprlock.conf
Behavior:
- Applied to
~/.config/omarchy/current/theme/hyprlock.confby symlink by default (copyvia config/env) - Expects
~/.config/hypr/hyprlock.confto source~/.config/omarchy/current/theme/hyprlock.conf No Hyprlock changeleaves current Hyprlock config untouched- Host
~/.config/hypr/hyprlock.confhandling is automatic:- Style-only Hyprlock themes keep/restore the Omarchy wrapper layout.
- Full-layout Hyprlock themes use a minimal source-only host config to avoid duplicate widgets.
- If host config is custom and does not source current theme, it is preserved and a warning is printed.
- If Omarchy default Hyprlock files are found,
omarchy-defaultis auto-linked into~/.config/hypr/themes/hyprlock/and shown in TUI.
Theme Manager Plus calls Omarchy’s own scripts to stay compatible.
Scripts invoked include:
omarchy-theme-bg-nextomarchy-restart-terminalomarchy-restart-waybaromarchy-restart-walkeromarchy-restart-swayosdomarchy-theme-set-*omarchy-hook theme-set
- Materialize theme and write
theme.name - Apply Waybar / Walker / Hyprlock / Starship (if selected)
- Update background
- Reload components
- Run Omarchy app setters
- Trigger Omarchy theme hook
Supports Omarchy templates via:
$OMARCHY_PATH/default/themed~/.config/omarchy/themed(user overrides)
Configuration precedence:
- CLI flags
- Environment variables
./.theme-manager.toml~/.config/theme-manager/config.toml- Defaults
Example (awww transitions):
[behavior]
awww_transition = true
awww_transition_type = "grow"
awww_transition_duration = 2.4
awww_transition_fps = 60Presets are stored in:
~/.config/theme-manager/presets.toml
- Theme not found → check spelling or
THEME_ROOT_DIR - Omarchy scripts missing → ensure they are in
PATH - Waybar not changing → verify
waybar-theme/contents - Missing previews → check
preview.png,theme.png, orbackgrounds/ - GTK / browser warnings → usually harmless; use
-q
- Rust CLI entry:
rust/src/main.rs - Legacy Bash CLI:
bin/theme-manager - Rust tests:
rust/tests/ - Bats tests:
tests/
Run tests:
cd rust
cargo testWhy not replace Omarchy’s theming?
Because Omarchy owns the system; this tool just drives it.
Why symlink Waybar files?
To preserve Omarchy’s expected paths and imports.
Can I use custom theme paths?
Yes—configure THEME_ROOT_DIR.
Does browse require fzf?
No. The Rust TUI replaces it entirely.