2026-08-27 00:19:15 -05:00
2026-08-28 14:10:42 -05:00
2026-08-27 00:19:15 -05:00

Omarchy Multi-Monitor Bar

SUBCULT

SUBCULT · Support on Patreon

Omarchy Multi-Monitor Bar settings with a Full primary display and two Minimal secondary displays

Omarchy Multi-Monitor Bar assigns a separate bar layout to each connected monitor. It keeps the stock Omarchy bar on the primary monitor and supports smaller or hidden bars on other outputs.

Features

  • Full, Minimal, or Hidden mode per monitor
  • One primary monitor locked to Full mode
  • A configurable glyph and workspace list for each Minimal bar
  • Monitor-scoped workspace buttons and labels
  • Stock bar position, transparency, widgets, panels, and trusted local commands on Full bars
  • A settings panel with validation, conflict handling, and stock-source checks
  • Localized settings and accessibility text in 10 languages

Screenshots and media

The preview above is an edited desktop capture of the settings panel: DP-1 is the Full primary display, while DP-3 and HDMI-A-1 use Minimal bars. The large empty area was shortened and the title and background were added for presentation.

The following captures show the installed Minimal bars on the two secondary outputs. Each has its own glyph and workspace labels.

DP-3, portrait output

Minimal bar on DP-3 with its monitor glyph and workspace labels

HDMI-A-1, landscape output

Minimal bar on HDMI-A-1 with a different glyph and workspace labels

These are unretouched captures of the 30-pixel bars. The active Omarchy theme supplies their colours and transparent background. Glyphs, labels and monitor names reflect this setup; configure your own in settings.

See media notes for capture provenance and reuse.

Languages

The plugin follows the system UI language when the Omarchy shell starts. It supports English, German, Spanish, French, Italian, Brazilian Portuguese, Dutch, Polish, Croatian, and Simplified Chinese. Unsupported locales use English. Restart the shell after changing the system language.

Runtime dependencies

  • Omarchy package 4.0.4-1
  • Quickshell, Hyprland, hyprctl, and the Omarchy shell commands included with that package
  • Noto Sans Symbols 2, included with Omarchy, for monitor glyphs
  • The stock bar sources under /usr/share/omarchy/shell/plugins/bar
  • Bash for trusted command entries inherited from the stock bar
  • Python 3 for the settings panel's stock-source Check and Sync actions

The gear and configuration UI otherwise run without Node.js. Node.js is required only for development checks.

The generated Bar.qml and BarModel.js are pinned to the exact stock files from Omarchy 4.0.4-1. Other Omarchy versions are unsupported until their stock sources are reviewed and the pinned hashes are updated.

Install

omarchy plugin add https://github.com/PatrickFanella/omarchy-monitor-bar.git --enable --yes

No shell.settings patch is required.

Open settings

Select the gear button on the primary bar, or run:

omarchy-shell shell summon patrickfanella.monitor-bar '{}'

Configure monitor bars

  1. Select a monitor.
  2. Choose Full, Minimal, or Hidden.
  3. To move the Full bar, select Make primary. The primary monitor is always Full.
  4. For a Minimal bar, enter a glyph and add workspace IDs and labels. Workspace IDs must be unique positive integers.
  5. Select Save.

Full uses the configured stock bar layout. Minimal shows only the monitor glyph and configured workspaces. Hidden removes the visible bar and its reserved screen space from that monitor.

Keyboard and accessibility

The settings window supports Tab and Shift+Tab across Close, Save, position, transparency, monitor selection, Make primary, mode, glyph and workspace fields, Add and Remove, Check, Sync, Restart shell, Reload, and Rebase draft. Enter or Space activates buttons, toggles, and grouped choices. Dropdowns use Enter or Space to open, arrow keys to move, Enter to select, and Escape to close. Focused fields in the settings scroller are brought into view.

The unsaved-changes dialog traps focus across Cancel, Discard, and Save. The restart dialog owns focus and uses Left, Right, Tab, or Shift+Tab to choose an action. Enter or Space activates it. Escape cancels either dialog. Closing a dialog returns focus to the control that opened it when that control still exists. Adding a workspace focuses its new ID field. Removing one focuses the next Remove button, the previous row when needed, or Add when no rows remain.

The bar's layer-shell windows explicitly use WlrKeyboardFocus.None. Giving a persistent bar keyboard focus would steal keys from the active application, so the gear and workspace buttons cannot be reached by Tab while they remain in the bar. Their roles, names, descriptions, and selected state are exposed for accessibility APIs, and the controls retain pointer operation. Open settings with the summon command above. Use the configured Hyprland workspace shortcuts as the keyboard path for switching workspaces.

Update or remove

Update the installed Git checkout:

omarchy plugin update patrickfanella.monitor-bar --yes

Remove the plugin:

omarchy plugin remove patrickfanella.monitor-bar --yes

Configuration and recovery

The plugin stores its monitor configuration under the bar["patrickfanella.monitor-bar"] key in ~/.config/omarchy/shell.json. Legacy top-level monitor settings remain readable; selecting Save writes the bar-scoped configuration. It also sets bar.id, bar.position, and bar.transparent through the Omarchy shell API. It does not edit shell.settings.

The settings panel changes shell.json only after you select Save. Full-bar position, transparency, and widget-reordering actions inherited from the stock bar also update their related bar fields after you perform those actions. Sync updates the generated bar files inside the plugin checkout after you select it and only when the installed stock-source hashes match. All plugin processes run as the logged-in desktop user. The plugin does not request elevated privileges, use a network service, or collect telemetry.

If the monitor configuration is absent, the first connected monitor becomes the primary Full monitor. Unknown monitors default to Hidden. The settings panel keeps disconnected configured monitors so you can edit their saved settings while they are offline.

If settings changed outside the open panel, choose Reload to discard the draft or Rebase draft to keep it against the new file state. If the generated stock copy is stale, open settings and use Check or Sync. Sync refuses an unrecognized stock hash instead of rewriting files from an unsupported Omarchy version.

The bar inherits trusted local command behavior from the stock Omarchy bar. Enabled stock widgets can run the same local commands they run in the built-in bar. The monitor workspace widget dispatches workspace focus through hyprctl, and the confirmed restart action runs omarchy-restart-shell. Install only from a source you trust.

Compatibility and stock sync policy

The installed compatibility update supports Omarchy package 4.0.4-1. tools/sync_stock_bar.py verifies the pinned SHA-256 hashes before generating Bar.qml and BarModel.js. The immutable source snapshots in vendor/omarchy-4.0.4-1/bar make this check reproducible in CI; the settings panel and the default CLI invocation check the installed sources. A maintainer must review upstream changes, update the snapshots, transforms, tests, and both hashes before claiming support for another package version.

Do not edit generated files. Change tools/sync_stock_bar.py, then run:

python3 tools/sync_stock_bar.py

To check generated files against the pinned snapshot instead of installed sources, run:

python3 tools/sync_stock_bar.py --upstream-dir vendor/omarchy-4.0.4-1/bar --check

Develop and validate

Run the complete release check on an Omarchy system:

tools/validate.sh

The script runs the Node.js tests, Python tests and compile checks, generated-file check, qmllint, manifest validation, JSON parsing, and git diff --check.

Manual release test matrix

Run these checks before each release:

Case Check
Fresh install Add with --enable --yes; confirm the first connected monitor gets a Full bar.
Settings entry Open from the gear and the summon command; confirm both target the same panel.
Full mode Confirm stock widgets, panel routing, position, transparency, and drag behavior on the primary monitor.
Minimal mode Set a glyph and workspace labels; confirm only configured workspaces appear on the selected monitor.
Hidden mode Confirm no bar or reserved bar space remains on that monitor.
Primary change Make another connected monitor primary; confirm it becomes Full and receives the gear button.
Monitor lifecycle Disconnect and reconnect a configured monitor; confirm its saved mode and workspace list return.
Config conflict Edit shell.json while the panel has an unsaved draft; confirm Reload and Rebase draft block accidental overwrite.
Stock sync Run Check on 4.0.4-1; confirm it reports Current. Test a changed stock file and confirm the hash guard rejects Sync.
Update and remove Update by plugin ID, then remove with --yes; confirm Omarchy reports each operation without manual config patches.

License and attribution

Omarchy Multi-Monitor Bar is licensed under the MIT License. See LICENSE.

Generated Bar.qml and BarModel.js, Workspaces.qml, and the pinned source snapshots derive from Omarchy, Copyright David Heinemeier Hansson, under the MIT License. See THIRD_PARTY_NOTICES.md.

About SUBCULT and support

Made by Patrick Fanella as part of SUBCULT. Explore the tools and projects at subcult.tv.

If this plugin is useful to you, support SUBCULT on Patreon to help fund its development and the wider project.

S
Description
Omarchy Multi-Monitor Bar assigns a separate bar layout to each connected monitor. It keeps the stock Omarchy bar on the primary monitor and supports smaller or hidden bars on other outputs.
https://subcult.tv Readme MIT
1.4 MiB
Languages
QML 68.4%
Python 21%
JavaScript 9.8%
Shell 0.8%