OmniWM
OmniWM is a free, open-source, Developer ID-signed and Apple-notarized tiling window manager for Apple Silicon Macs running macOS 26 or later. It combines Niri-style orientation-aware scrolling containers and Hyprland-style Dwindle BSP layouts, selectable per workspace, with multi-monitor routing and optional local CLI/IPC automation.
Website · Documentation · Install · Compatibility · Fluxer
Demo Video

Contributors
Thank you to everyone who contributed to OmniWM. Your ideas and code made a real difference.
🛠️ Maintainers
🏢 By Employer
🎓 By Education
✨ All Contributors
🐞 Bug Reporters
Thank you to everyone whose bug reports led to fixes.
Highlights
- Optional window switcher with previews and separate Command-Tab / Option-Tab workspace scopes
- Ghostty-powered quake/sticky terminal
- Native macOS window-tab support
- Local IPC and
omniwmctl automation
- Scratchpads and sticky windows for any app
- Overview
- Unified command palette for windows, app menus, clipboard history, OmniWM commands, applications, and files
- Menu Anywhere
- Niri-style tabbed containers and Dwindle tile groups
- Niri-style scrolling and Hyprland-style Dwindle BSP layouts
- Status-bar icon concealment (similar to Ice)
- Keep Awake (similar to Caffeine)
- Interactive workspace and app-icon bar
- Many more features not shown in the video.
Compatibility and Limitations
OmniWM requires Apple Silicon, macOS 26 or later, Accessibility, Input Monitoring, and Displays have separate Spaces. Screen Recording is optional. Read the complete Compatibility, Requirements & Limitations page before installing.
- Dwindle restore scope — After a restart OmniWM rebuilds each Dwindle workspace from the persisted placements: split orientation and ratio, tab-group membership, tab order, and the active tab. Fullscreen state and the selected window are not restored, and once a window without a persisted placement is present, later windows insert normally instead of being placed from the catalog.
- Scratchpad membership — Window membership lasts for the current OmniWM process. Scratchpad labels persist, but memberships do not.
OmniWM is built for high responsiveness and smooth, crisp animations.
- Direct macOS integration — OmniWM uses public frameworks and selected Apple private APIs for window management and visual surfaces.
- Refresh-rate-aware animations — Animation pacing follows the active display refresh rate, including 60, 120, and 144 Hz displays.
- SIP stays enabled — Official OmniWM releases do not require disabling System Integrity Protection.
- Signed and notarized releases — Official release builds are Developer ID signed and Apple-notarized.
- Free and open source — OmniWM has no subscriptions, feature paywalls, trial limits, or usage caps and is licensed GPL-2.0-only.
- OmniShell network consent (Unreleased: available when building from
main) — Widgets need declared hosts and user consent or organization preapproval; native programs need trust tied to their executable and command. Settings > Network & Permissions manages those decisions and the built-in Weather and Lyrics switches, both on by default. Organization policies can block them. See network permissions and managed preferences.
Requirements
- macOS 26+ (Tahoe) on Apple Silicon
- Hidden Bar concealment and optional issue-report rewriting require macOS 27 or later; rewriting also requires enabled Apple Intelligence and an available local model
- Accessibility and Input Monitoring permissions (required at launch)
- Screen Recording permission for Overview thumbnails, drag previews, and captured Hidden Bar glyphs (optional)
- Full Disk Access permission for Hidden Bar concealment and the OmniShell Notifications widget (optional); notification replies and dismissal also use Accessibility
- System Audio Recording permission for per-app volume, Calendars access for the calendar widget, Location for the Wi-Fi widget’s network name and Bluetooth for the Bluetooth widget in the Luau shell (optional)
- Displays have separate spaces ON (the macOS default; OmniWM pauses window management until it is enabled)
Installation
Homebrew
OmniWM is in the official Homebrew cask repository:
brew install --cask omniwm
This installs OmniWM.app and puts omniwmctl on your PATH.
Upgrading
Quit OmniWM first, then run brew upgrade omniwm and relaunch it. Homebrew replaces the app bundle underneath a running OmniWM.
Migrating from the project tap
BarutSRB/tap is retired: 0.6.7 was its final release, and every later version ships only through the official cask. If you installed from the tap, quit OmniWM and run these commands in this order:
brew update
brew upgrade omniwm
brew untap BarutSRB/tap
brew update has to come first: it fetches the retired tap’s redirect to the official cask and moves your install over. Untapping before that would offer to uninstall OmniWM. brew reinstall --cask homebrew/cask/omniwm is optional and only switches the install record to the official cask right away.
Nix
OmniWM is packaged in nixpkgs, maintained by mmfallacy and samiser, and Home Manager ships an official
programs.omniwm module, maintained by DavSanchez. The package installs the signed release artifact with bsdtar, so the Developer ID
signature stays valid, and exposes OmniWM and omniwmctl on PATH. Both currently live on unstable branches
only (the nixpkgs unstable channels and Home Manager master) and may trail the latest GitHub release.
Install the package directly:
nix profile install nixpkgs#omniwm
With nix-darwin or Home Manager, add pkgs.omniwm to environment.systemPackages or home.packages.
For a declarative setup, enable the Home Manager module. It installs the package, runs OmniWM as a launchd
agent, and writes ~/.config/omniwm/settings.toml from an attribute set or a tracked TOML file:
programs.omniwm = {
enable = true;
settings = ./omniwm-settings.toml;
};
Treat the declared TOML file or attribute set as authoritative: edit it and run Home Manager switch to apply
changes. OmniWM preserves settings symlinks, so settings backed by a read-only Nix-store file cannot be saved
from the GUI. Set programs.omniwm.launchd.enable = false if you prefer to start and quit OmniWM manually
instead of having Home Manager manage its launchd agent.
After either installation, complete the macOS setup in steps 3-7 below.
GitHub Releases
- Download the
OmniWM-v<version>.zip app archive from the latest release
- Extract and move
OmniWM.app to /Applications
- In System Settings > Desktop & Dock > Mission Control, turn ON
Displays have separate Spaces
- Log out of macOS and log back in for that change to take effect unless you had it on already
- Launch OmniWM and grant Accessibility and Input Monitoring when prompted
- Optionally grant Screen Recording for capture-derived visuals
- Return to OmniWM’s permissions window and click Start OmniWM or Continue Without Screen Recording. If a required permission still appears missing, click Check Again. To skip the window on later launches without Screen Recording, tick Don’t ask about Screen Recording again first; it still appears if a required permission goes missing (Unreleased: available when building from
main)
Canary builds
Stable releases are recommended for everyday use. Canary builds let you try recent changes and help test fixes before the next release. Daily scheduled runs publish a build only when the checked-out main commit, or the app commit beneath any documentation-only commits on top, passes CI and includes app changes since the newest stable or canary tag in its history; documentation-only changes do not trigger a new build. Builds are signed and notarized, but may contain regressions.
To try one with a Homebrew or GitHub Releases install:
- Save a copy of
~/.config/omniwm/settings.toml
- Quit OmniWM, then download the newest canary build and replace
OmniWM.app in /Applications with the app from its ZIP
- Relaunch OmniWM. It uses your existing settings
Canary builds check only for newer published Canary releases. Stable builds continue to check only stable releases. Use Install and Relaunch in the update popup (Unreleased: available when building from main), download from the release page, or use brew upgrade --cask omniwm@canary if you installed that Homebrew cask and its new version is available. Older Canary builds need one manual update to gain Canary update checks.
To return to stable, quit OmniWM. If you installed omniwm@canary, run brew uninstall --cask omniwm@canary followed by brew install --cask omniwm. For an existing omniwm Homebrew install, run brew reinstall --cask omniwm; for a direct download, replace the app with the latest release. If stable cannot read settings saved by a canary, quit OmniWM and restore your copy. When reporting a canary bug, include its release link.
Updates
OmniWM checks for updates by default.
- On launch, OmniWM polls the latest GitHub release at most once per day.
- OmniWM never installs anything on its own.
Install and Relaunch (Unreleased: available when building from main) downloads the release’s app zip from GitHub, checks it against the SHA-256 digest GitHub publishes for it, checks that the new app carries the release’s version and is signed and notarized by the same Developer ID as the running copy, swaps the bundle in place and relaunches. If you cancel the quit, the new version starts on the next launch. The button only appears when the release has an app zip and OmniWM can write to its own bundle, so Nix store and other read-only installs keep the manual actions.
- When a newer release is available, OmniWM shows a centered popup with release notes and actions for
Install and Relaunch (when available), Open Release Page, Copy brew upgrade omniwm, Skip This Version, and Not Now.
- You can control this from
Settings > General > Updates or trigger a manual check from the status bar menu with Check for Updates....
Documentation
The canonical documentation hub lives at omniwm.app. This README and the guides follow current main; features newer than the latest release are marked Unreleased.
IPC and CLI
OmniWM ships with a bundled CLI, omniwmctl, for automation and scripting.
IPC is disabled by default. Enable Enable IPC from the menu bar before using the CLI or any automation.
Diagnostics can be scripted with omniwmctl capture start trace, omniwmctl capture start performance, omniwmctl capture stop, and omniwmctl capture status.
omniwmctl window mark can name, list, focus, summon, and remove runtime window marks. See Window Marks.
For setup, installation options, commands, queries, rules, subscriptions, and security details, see the IPC & CLI Reference.
Quick Start
- Launch OmniWM from your Applications folder
- In System Settings > Desktop & Dock > Mission Control, turn ON
Displays have separate Spaces
- Log out of macOS and log back in for that change to take effect unless you had it on already
- Grant Accessibility and Input Monitoring in the launch permissions window, and optionally Screen Recording. Return to that window and click Start OmniWM or Continue Without Screen Recording; use Check Again if a required permission still appears missing
- Windows will automatically tile in orientation-aware Niri containers: monitors using horizontal orientation show columns that scroll left and right, while vertical orientation shows rows that scroll up and down
- Keep one macOS Space per display and navigate with OmniWM workspaces; extra native Spaces are tolerated (their windows are left to macOS, not tiled)
- Use the defaults in Keyboard Shortcuts to navigate, and customize them in
Settings > Keyboard Shortcuts
- Click the menu bar icon to access Settings, including
Settings > General > Updates
- Enable
Start at Login under Settings > General > Startup to launch OmniWM automatically when you log in
- Use
Check for Updates... from the status bar menu whenever you want to run a manual update check
- On macOS 27+, if you enable Hidden Bar and selected menu-bar icons disappear, right-click or Option-click OmniWM’s menu-bar icon to open the Hidden Icons Bar and click any icon to use it.
User Guide
Multi-Monitor Setup
OmniWM uses two display maps for different jobs:
- Open System Settings > Displays > Arrange. Put the physically largest or widest display at the bottom. Place the next smaller display above and to its right so its bottom-left corner touches the lower display’s top-right corner. Continue the same staircase for every additional display. This macOS map is a technical arrangement used for actual window placement; it does not need to look like your desk.
- Open OmniWM Settings > Displays and arrange the OmniWM routing map to match where the displays really sit on your desk. Tiles can be separated by empty grid cells, but every display must remain connected through a chain of shared rows or columns. A diagonal-only tile is disconnected and cannot exchange directional focus, window moves, or mouse warp.
- Assign at least one workspace to every connected display. Window moves between displays need a destination workspace, so the setup assistant will not finish while a display is uncovered. You can reassign an existing workspace or explicitly add one for that display.
- Leave Mouse Warp turned on for the recommended experience. It lets the pointer cross between displays according to the real-desk OmniWM map even though macOS uses the staircase.
The setup assistant opens automatically when OmniWM first sees multiple displays. To review or redo it later, choose Run Monitor Setup… in Settings > Displays. The assistant’s Show Numbers on Screens action helps match each physical display to its tile. Routing, workspace-home, and Mouse Warp changes remain drafts until you finish the assistant.
Custom arrangements are remembered for each set of connected displays, so home and work can keep different positions for the same laptop display. Reconnecting a saved set restores its arrangement automatically. If there is no exact match, OmniWM inherits the smallest saved arrangement containing every connected display; an uncovered set or an invalid grid follows macOS. Editing, resetting, or finishing setup saves only the connected set, leaving any larger arrangement unchanged. Simply connecting displays or opening Settings does not save an arrangement. Workspace assignments and other per-monitor settings remain separate.
Move Window Across Monitor at Edge sends a window beyond a workspace edge to the adjacent routed display and always follows it. Dedicated monitor-move actions work independently of this setting and use Follow Window to Monitor, which also controls focus after ordinary window or column transfers to another workspace.
Workspace homes can be Main, Secondary, Tertiary, or a specific display. By default Main is the display with the macOS menu bar and Secondary and Tertiary are the next displays in arrangement order. The Monitor Roles list in Settings > Displays lets you rank displays instead: the highest-ranked connected display is Main, then Secondary, then Tertiary, and disconnected entries are skipped, so two external displays can hold fixed roles at your desk while the built-in display takes over when you unplug. The Quake terminal’s Main Monitor option follows the same ranking.
Layout Modes
OmniWM offers two layout engines that you can switch between per workspace:
Niri (Orientation-Aware Scrolling Containers) - On monitors using horizontal orientation, windows form vertical columns that scroll left and right; in vertical orientation, they form horizontal rows that scroll up and down. Each container can hold multiple windows or be “tabbed” (multiple windows, one visible at a time).
Hyprland Dwindle (BSP) - Binary space partition layout that recursively divides screen space. Each new window splits the space in half, and a tile can group multiple windows as tabs. Best for traditional tiling with predictable layouts.
Use the Toggle Workspace Layout shortcut below to switch layouts per workspace or configure them in GUI settings.
Keyboard Shortcuts
All shortcuts are customizable in Settings > Keyboard Shortcuts. Hyper is the literal Control + Option + Shift + Command chord by default; which modifiers make up Hyper is configurable in Settings > Keyboard Shortcuts (for example, exclude Shift to keep Hyper + Shift + … free for extra bindings). Changing the combination retargets every shortcut that currently resolves to Hyper onto the new one, so the shortcut list updates in place as you toggle the modifiers. Optionally pick a System Hyper Trigger — a single key (Caps Lock, F13–F20, or a left- or right-side modifier) or an extra mouse button that acts as Hyper while held (this needs Input Monitoring permission). Leave the trigger as None if you already produce Hyper another way, such as a Karabiner Elements remap. The tables below list all the default hotkeys:
Layout legend:
Shared works in any active layout.
Niri works only when the active workspace uses the Niri layout.
Dwindle works only when the active workspace uses the Dwindle layout.
Settings > Keyboard Shortcuts lists all actions that can be assigned a shortcut, including advanced actions.
If a shortcut does not fire: Check Settings > Keyboard Shortcuts and Settings > Troubleshooting for registration issues, then look for another hotkey tool, such as skhd or Raycast, still running with the same binding. HotkeyClash can help inspect possible conflicts in running apps, supported config files, and macOS shortcuts. It does not parse Raycast’s shortcut settings. Disable or reassign the conflicting binding and retry before editing settings.toml.
Workspace
| Action |
Default Shortcut |
Layout |
| Switch to Workspace 1-9 |
Option + 1-9 |
Shared |
| Move Focused Window to Workspace 1-9 |
Option + Shift + 1-9 |
Shared |
| Switch to Workspace Slot 1-9 (position on the current monitor) |
Unassigned |
Shared |
| Move Focused Window to Workspace Slot 1-9 (position on the current monitor) |
Unassigned |
Shared |
| Switch to Last Active Workspace (Back and Forth) |
Control + Option + Tab |
Shared |
| Switch to Next Workspace |
Unassigned |
Shared |
| Switch to Previous Workspace (Sequential) |
Unassigned |
Shared |
| Move Focused Window to Workspace Up |
Control + Option + Shift + Up Arrow |
Shared |
| Move Focused Window to Workspace Down |
Control + Option + Shift + Down Arrow |
Shared |
| Move Focused Column to Workspace 1-9 |
Unassigned |
Niri |
| Move Focused Column to Workspace Up |
Control + Option + Shift + Page Up |
Niri |
| Move Focused Column to Workspace Down |
Control + Option + Shift + Page Down |
Niri |
When you create workspace 10 or higher, Settings > Keyboard Shortcuts adds its Switch, Move, and Move Column actions as Unassigned.
Focus
| Action |
Default Shortcut |
Layout |
| Focus Left / Right / Up / Down |
Option + Arrow Keys |
Shared |
| Focus Next / Previous Window (Wrap) |
Unassigned |
Shared |
| Focus First / Last Window in Column |
Unassigned |
Niri |
| Focus Window or Workspace Down / Up |
Unassigned |
Niri |
| Focus Previously Focused Window |
Option + Tab |
Shared |
| Traverse Backward |
Unassigned |
Niri |
| Traverse Forward |
Unassigned |
Niri |
| Focus First Column |
Option + Home |
Niri |
| Focus Last Column |
Option + End |
Niri |
| Focus Column 1-9 |
Control + Option + 1-9 |
Niri |
| Focus Window 1-9 in Column |
Unassigned |
Niri |
| Toggle Command Palette |
Control + Option + Space |
Shared |
| Open Menu Anywhere |
Control + Option + M |
Shared |
| Set Mark on Focused Window |
Unassigned |
Shared |
| Remove Mark from Focused Window |
Unassigned |
Shared |
| Close Focused Window |
Unassigned |
Shared |
| Toggle Workspace Bar |
Unassigned |
Shared |
| Toggle Hidden Icons Panel |
Unassigned |
Shared |
| Toggle Quake Terminal |
Option + ` |
Shared |
| Toggle Overview |
Option + Shift + O |
Shared |
| Toggle System Stats |
Unassigned |
Shared |
| Volume Up |
Unassigned |
Shared |
| Volume Down |
Unassigned |
Shared |
| Mute or Unmute Volume |
Unassigned |
Shared |
| Play or Pause Media |
Unassigned |
Shared |
| Next Track |
Unassigned |
Shared |
| Previous Track |
Unassigned |
Shared |
Toggle <drawer or widget> |
Unassigned |
Shared |
Settings > Keyboard Shortcuts lists a Toggle action for every shell drawer and every shell widget with a popout.
Move Window
| Action |
Default Shortcut |
Layout |
| Move Left / Right / Up / Down |
Option + Shift + Arrow Keys |
Shared |
| Move Window to Previous / Next Position |
Unassigned |
Shared |
| Move Window Down or to Workspace Down / Up or to Workspace Up |
Unassigned |
Niri |
| Pull Top Window from Next Column into Focused Column |
Unassigned |
Niri |
| Push Bottom Window from Focused Column into New Column |
Unassigned |
Niri |
The pull action treats the focused column as the destination and does nothing when there is no next column. The push action moves the bottom window from the focused column into a new following column. Neither action wraps, and there is no pull-from-previous action.
Monitor
| Action |
Default Shortcut |
Layout |
| Focus Next Monitor in Order |
Control + Command + Tab |
Shared |
| Focus Previous Monitor in Order |
Unassigned |
Shared |
| Focus Last Active Monitor |
Control + Command + ` |
Shared |
| Move Workspace to Monitor on Left / Right / Above / Below |
Unassigned |
Shared |
| Move Focused Window to Monitor on Left / Right / Above / Below |
Unassigned |
Shared |
The workspace-to-monitor actions target the active workspace and intentionally use the same temporary runtime override as omniwmctl workspace move-to-monitor --force. They do not rewrite the workspace’s Home Monitor or swap workspaces, and unsafe fullscreen, hidden-app, scratchpad, or focus states still block the move.
The window-to-monitor actions send the focused window directly to the current workspace on the adjacent routed display, independently of Move Window Across Monitor at Edge. The destination display must have at least one assigned workspace, which the Monitor Setup assistant verifies. They do not wrap when no monitor exists in that direction. Follow Window to Monitor controls whether focus follows the window; when it is off, you remain in the source workspace.
Layout
| Action |
Default Shortcut |
Layout |
| Toggle OmniWM Fullscreen |
Option + Return |
Shared |
| Toggle Native Fullscreen |
Unassigned |
Shared |
| Balance Sizes |
Option + Shift + B |
Shared |
| Cycle Size Forward |
Option + . |
Shared |
| Cycle Size Backward |
Option + , |
Shared |
| Move to Root |
Unassigned |
Dwindle |
| Toggle Split |
Unassigned |
Dwindle |
| Swap Split |
Unassigned |
Dwindle |
| Grow Horizontally / Vertically |
Unassigned |
Dwindle |
| Shrink Horizontally / Vertically |
Unassigned |
Dwindle |
| Grow / Shrink Focused Window |
Unassigned |
Dwindle |
| Preselect Left / Right / Up / Down |
Unassigned |
Dwindle |
| Clear Preselection |
Unassigned |
Dwindle |
| Raise All Floating Windows |
Option + Shift + R |
Shared |
| Toggle Floating/Tiled Focus |
Unassigned |
Shared |
| Rescue Off-Screen Floating Windows |
Unassigned |
Shared |
| Toggle Focused Window Floating |
Unassigned |
Shared |
| Toggle Scratchpad 1-10 Assignment for Focused Window |
Unassigned |
Shared |
| Toggle Scratchpad 1-10 |
Unassigned |
Shared |
| Toggle Workspace Layout |
Option + Shift + L |
Shared |
Container and Column
| Action |
Default Shortcut |
Layout |
| Move Container Left / Right |
Control + Option + Shift + Left / Right Arrow |
Shared |
| Move Container Up / Down |
Unassigned |
Dwindle |
| Toggle Tabbed Mode for Focused Column |
Option + T |
Niri |
| Toggle Container Full Primary Span |
Option + Shift + F |
Niri |
| Expand Container to Available Primary Span |
Control + Option + F |
Niri |
| Move Focused Column to First / Last Position |
Control + Option + Home / End |
Niri |
| Move Focused Column to Position 1-9 |
Unassigned |
Niri |
| Shrink / Grow Container Primary Span |
Option + - / Option + = |
Niri |
| Shrink / Grow Window Secondary Span |
Option + Shift + - / Option + Shift + = |
Niri |
| Shrink / Grow Window Primary Span |
Unassigned |
Niri |
| Reset Window Secondary Span |
Control + Option + R |
Niri |
| Cycle Window Primary Span Forward / Backward |
Unassigned |
Niri |
| Cycle Window Secondary Span Forward / Backward |
Unassigned |
Niri |
| Center Focused Column |
Unassigned |
Niri |
| Center Visible Columns |
Unassigned |
Niri |
Niri grow/shrink actions use a configurable increment, defaulting to 5% instead of 10%. Change Resize Increment in Niri settings or [niri].resizeStepPercent in TOML (1–100). Explicit omniwmctl size arguments keep their specified amounts.
Consume or Expel Window Left / Right exist as automation-only actions. They are reachable from omniwmctl but never appear in Settings > Keyboard Shortcuts, because they intentionally cannot be bound to a shortcut.
The daily Focus and Move shortcuts adapt to the active layout and Niri orientation. In horizontal Niri orientation, Move Left / Right consumes or expels across columns while Move Up / Down reorders within a column. Vertical orientation rotates those roles: Move Up / Down consumes or expels across rows while Move Left / Right reorders within a row.
Dwindle Groups
Dwindle groups use the existing Focus and Move bindings, so there are no separate group shortcuts to memorize. Only the active member occupies the tile; the other members stay hidden and the clickable tab rail shows their order.
| Goal |
Default Shortcut |
Behavior |
| Focus another tile |
Option + Arrow Keys |
Left / Right are always spatial. Up / Down are spatial for a singleton tile. |
| Select the next / previous tab |
Option + Down / Up Arrow |
Within a group, Down advances and Up goes back. At the group edge OmniWM tries a spatial tile, then the configured monitor transition, and wraps locally only when neither exit succeeds. |
| Join a singleton into a tile or group |
Option + Shift + Arrow Keys |
Joins the focused singleton with the touching tile in that direction. |
| Extract the active tab |
Option + Shift + Arrow Keys |
When the focused tile is grouped, extracts only its active tab onto the requested side. |
| Move the complete tile or group |
Control + Option + Shift + Left / Right Arrow |
Move Container swaps the whole structure. Up / Down are advanced, unassigned Dwindle actions. |
| Select an exact tab |
Click its tab rail item |
Reveals and focuses that member without changing the group order. |
Moving a tab directly from one existing group into another is intentionally a two-step operation: extract it first, then move the resulting singleton toward the destination group. A singleton at a genuine workspace edge can still use the normal cross-monitor Move behavior; a rejected group mutation does not fall through to tile swapping or monitor movement.
The unassigned advanced actions are available in Settings > Keyboard Shortcuts. Focus Next / Previous Window (Wrap) always wraps within the active Niri column or Dwindle group. Move Window to Previous / Next Position changes the active member’s position by one without wrapping. Move Container is the whole-structure escape hatch and never transfers to another monitor at a workspace edge. Dwindle join/extract and Move Container operations are intentionally unavailable while Overview is open; leave Overview before changing a Dwindle tree.
Quake Terminal (Inside Terminal)
Customize tab and pane shortcuts with Ghostty keybind entries in ~/.config/ghostty/config.ghostty (or your existing Ghostty config). User bindings override the defaults below; unbind removes a binding. Reload inside Quake with Cmd + Shift + ,, or relaunch OmniWM. The global toggle stays in Settings → Keyboard Shortcuts and OmniWM’s settings.toml.
keybind = cmd+t=unbind
keybind = ctrl+shift+t=new_tab
keybind = cmd+enter=new_split:right
keybind = cmd+shift+enter=close_surface
See Ghostty’s keybinding syntax. Quake supports new_tab, close_tab, goto_tab, next_tab, previous_tab, last_tab, new_split, goto_split, close_surface, and equalize_splits, alongside Ghostty’s terminal actions such as copy, paste, and font sizing.
| Action |
Default Shortcut |
| New Tab |
Cmd + T |
| Close Tab |
Cmd + W |
| Next Tab |
Cmd + Shift + ] |
| Previous Tab |
Cmd + Shift + [ |
| Next Tab (Alt) |
Ctrl + Tab |
| Previous Tab (Alt) |
Ctrl + Shift + Tab |
| Select Tab 1-9 |
Cmd + 1-9 |
| Split Pane (Horizontal) |
Cmd + D |
| Split Pane (Vertical) |
Cmd + Shift + D |
| Close Pane |
Cmd + Shift + W |
| Equalize Splits |
Cmd + Shift + = |
| Navigate Pane |
Cmd + Option + Arrow Keys |
Features
Quake Terminal
A true quake/sticky terminal powered by Ghostty’s libghostty. The default Center position fades it in place; Top, Bottom, Left, and Right slide it in from that screen edge.
- Toggle it from the global shortcut shown in
Keyboard Shortcuts
- Supports multiple tabs and splits within tabs
- Tab and pane shortcuts are listed in Quake Terminal (Inside Terminal)
- Mouse resize by dragging edges;
Option + drag to move
- Configure position, width and height as percentages of the monitor’s available screen area, opacity, and background effect in Settings
- Choose Standard Blur with an adjustable radius or native Regular Glass/Clear Glass; switching effects preserves the saved Standard Blur radius
- Auto-hides on focus loss (optional)
- Command-click an OSC 8 hyperlink to open
http/https links in your default browser or mailto links in your mail app; other schemes are blocked
OmniWM remembers one custom size and position. It reuses that frame when it fits the selected monitor; otherwise it uses the configured position and percentages. Reset to Default Position appears in Settings once a custom frame is in use.
Quake Terminal loads Ghostty’s normal configuration files and their included files, so font, theme, and other terminal preferences can be shared. OmniWM applies its Quake background opacity and effect afterward; configure those in Settings → Quake Terminal.
Select Kitty under Settings → Quake Terminal → Terminal to use Kitty’s quick-access terminal. Install Kitty separately. It uses quick-access-terminal.conf, with optional placement, auto-hide, and opacity overrides in OmniWM. The Ghostty settings and shortcuts above apply to the embedded provider. See the Kitty provider guide.
Unreleased: available when building from main. Select foot to use the Quake terminal of foot for macOS 1.28.0-macos.8 or newer, installed separately. OmniWM runs a dedicated foot server that it keeps for reuse. It uses foot.ini, with optional placement, auto-hide, opacity and dim overrides that apply the next time the panel is shown; dimming is off by default. foot has no tabs or splits, and the regular foot app’s own Option + ` hotkey can clash with OmniWM’s shortcut. See the foot provider guide.
Command Palette
Quickly search windows, app menus, clipboard history, OmniWM commands, applications, or files from one shared palette:
- Open it from the global shortcut shown in
Keyboard Shortcuts
- Use
Tab / Shift + Tab to cycle forward or backward through the available modes
- Use
Cmd + 1 for Windows, Cmd + 2 for Menu, Cmd + 3 for Clipboard, Cmd + 4 for Commands, Cmd + 5 for Launcher, and Cmd + 6 for Files
- Type to search; mark-name matches come first in Windows mode, then window title, app name, and workspace name, with focus recency breaking ties
- Windows mode shows window marks and finds windows by mark name; its Mark and Remove Mark buttons act on the selected window
- Menu results always show keyboard shortcuts when available
- Commands are grouped by category until you search; each row shows its layout and current shortcut, including unassigned commands
- In Commands mode,
Enter runs the selected command; commands for another layout stay visible but cannot be selected
Up / Down move the selection
Enter activates the selected result
- Windows from macOS-hidden apps remain searchable with a Hidden badge; selecting one unhides its app and focuses that exact window
- In Windows mode,
Shift + Enter summons the selected window to the right when available, or moves it into an empty current workspace, including floating windows. Floating windows cannot be summoned right
- In Clipboard mode,
Enter copies the selected entry; Shift + Enter pastes it into the previous app when that target is still available
- Launcher and Files open in a browse grid; switch either mode to a list from the view menu
- Files shows recent documents before typing, supports type filters, and can reveal a selection in Finder with
Cmd + Enter
Escape dismisses the palette
Unreleased: available when building from main. Launcher adds saved commands, scripts and CLI tool discovery to the former Applications mode. Configure entries in Settings > Launcher; see the Launcher guide and TOML reference.
Clipboard history starts disabled. Open Clipboard mode (Cmd + 3) and click Enable, or set clipboard.historyEnabled = true in settings.toml. History retains text, rich text, HTML, images, file references, and safe native formats within the configured limits; concealed, transient, and recognized password-manager content is skipped. A selected item has a preview, each row can be pasted or pinned, and Clear removes unpinned history. See the command palette guide for storage details.
Open the frontmost app’s menus at your cursor with a global shortcut. Menu Anywhere builds a native floating menu from the menus, submenus, and shortcuts the app exposes through Accessibility.
Overview Mode
Overview supports trackpad opening and closing, with finger tracking when animations are enabled.
See all windows at once with thumbnails:
- Open it from the global shortcut shown in
Keyboard Shortcuts
- Configure the 50–150% zoom, scrolling controls, and backdrop and window-border colors in Settings → Overview
- Click a window to focus it
- Type to filter/search windows;
Backspace deletes search text
Alt (Option) + Shift + Mouse Scroll changes the zoom; closing Overview saves it for the next opening
Arrow Keys navigate spatially; Left / Right stay within the current workspace. Tab / Shift + Tab cycle forward or backward through matching windows, and keyboard navigation automatically scrolls the selected thumbnail into view
- Assigned structural move, reorder, consume/expel, and workspace-transfer shortcuts operate on the selected thumbnail while Overview is open
- In Niri workspaces, r
README 内容过长,已截取前 64 KB。完整内容请前往 GitHub 仓库查看。
评论