Extension Icon

OmniCast

Search and run OmniWM commands in plain English.
AvatarLuke
New
Overview
OmniCast icon

OmniCast

Control OmniWM from Raycast, in plain English.

macOS Raycast TypeScript License: MIT

OmniCast gives OmniWM a searchable Raycast command palette and a focused set of first-class commands. It talks directly to OmniWM through omniwmctl; Raycast's own Window Management engine is not involved.

OmniCast controlling an OmniWM workspace through Raycast
OmniCast in a real OmniWM workspace. Select the image to watch the walkthrough.

Why I built this

I wanted OmniWM to own my window layout completely, while keeping Raycast's fast, searchable way of running commands. OmniCast connects the two: common layout actions appear by clear English names and short aliases, without Raycast's Window Management engine competing with OmniWM.

The macOS workflow walkthrough shows OmniCast in daily use: resizing tiles, moving through an OmniWM workspace, and keeping an Android device alongside the development environment.

Highlights

  • Search OmniWM actions using readable names such as “move column right”, “focus workspace 4”, or “balance window sizes”.
  • Keep your most-used layout actions directly in Raycast's root search.
  • Resize columns without accidentally changing their position.
  • Move whole columns left or right while moving individual windows up or down.
  • Recover floating and native-full-screen windows before applying tiled layouts.
  • Use short search aliases such as lh, tr, ml, and w4.

Main commands

OmniCast commands in Raycast root search
Keep common OmniWM layout commands directly in Raycast's root search.

SearchCommandBehaviour
mMaximizeToggle the focused tiled column across the available width
rResetReturn the focused window to a neutral standalone tile
lh, rhLeft Half, Right HalfSet the focused column to half width without moving it
oq, tqOne Quarter, Three QuartersSet the focused column to 25 or 75 percent width
tl, trTop Left, Top RightJoin the neighbouring column and place the window at the top
bl, brBottom Left, Bottom RightJoin the neighbouring column and place the window at the bottom
ml, mrMove Left, Move RightMove the entire focused column
mu, mdMove Up, Move DownMove the focused window within its column
w1 through w5Workspace 1 through 5Switch directly to an OmniWM workspace

Open OmniWM Commands for the extended palette: navigation, workspaces, column and window movement, resizing, layouts, displays, scratchpad actions, and utilities.

Searching OmniWM commands in English through OmniCast
Search the extended OmniWM command palette using plain English.

Requirements

  • macOS on Apple Silicon
  • Raycast
  • OmniWM with omniwmctl installed at /opt/homebrew/bin/omniwmctl
  • Node.js 22 or later

OmniWM IPC must be enabled in ~/.config/omniwm/settings.toml:

[general]
ipcEnabled = true

Restart OmniWM after changing the setting.

Install from source

git clone https://github.com/imprisonedmind/omni-cast.git
cd omni-cast
npm install
npm run dev

Keep npm run dev running while developing. Raycast registers the local extension and reloads it when source files change.

Optional Script Command

omni-ctl.sh opens OmniWM's built-in command palette as a lightweight fallback. Add this repository under Raycast Settings, Extensions, Script Commands if you want to use it.

Troubleshooting

OmniWM has no focused managed window

Focus a window that OmniWM manages, then run the command again. OmniCast retries focus discovery briefly because Raycast itself temporarily owns focus while its window is open.

Commands do nothing

Confirm that OmniWM is running, IPC is enabled, and this succeeds in Terminal:

/opt/homebrew/bin/omniwmctl query focused-window --format json

OmniWM updates can change the IPC protocol used by omniwmctl. Quit and reopen OmniWM after updating so the running app and bundled CLI use the same protocol. If the command still fails, re-enable IPC in OmniWM Settings and reinstall the CLI from OmniWM's status menu.

A window remains floating

Use Reset. It leaves native macOS full screen, returns a floating window to tiling, and separates it into a neutral standalone tile when necessary.

Development

npm run dev
npm run lint
npm run build

License

MIT

Categories
Source code