Niri keybindings on Mac: every default bind, mapped

Your hands already know niri. This is the full list of niri's default binds — straight from its default-config.kdl — and the closest macOS equivalent for each, including the ones that don't translate.

tl;dr

niri can't run on macOS (here's why), but its keyboard layout can. In ChainYourMac 2.1, niri's Mod becomes ⌃⌥ (Control+Option) and niri's Mod+Ctrl "move" layer becomes ⌃⌥⇧. Focus, move, preset widths, full width, center, stacking, tabs and floating all have direct equivalents. Workspaces, the Overview and app launching go to macOS's own tools instead.

Try it right here — this is a working model of ChainYourMac, not a video.

A working model of ChainYourMac, not a video. Drag a title bar to reorder, click a Dock icon to open an app, close a window with its red button. In the real app you hold ⌃⌥ with each key. The demo answers to both.

  • Notarized by Apple
  • Signed with Developer ID
  • No account, no telemetry in the app
  • Only needs the Accessibility permission
  • Automatic updates

Where these binds come from

The niri column below is taken from niri's resources/default-config.kdl on the main branch (checked 6 October 2026; the latest release is v26.04). In niri, Mod is Super when it runs as your session and Alt when it runs nested. Your own config may differ, since niri binds are entirely user-defined.

The ChainYourMac column shows the defaults for new installs of 2.1. If you upgraded from 2.0 you keep your old shortcuts, and the Shortcuts page offers a one-click switch to this set. Every binding can be re-recorded, and one action can have several shortcuts. That's how both arrows and H/L work at the same time, just like niri.

Why ⌃⌥ instead of ⌘

On Linux, Super is mostly unused by apps, which is why niri can claim it. On a Mac, ⌘ is the app modifier. ⌘W closes, ⌘H hides, ⌘[ goes back, and the list goes on. Plain ⌥ types characters (⌥E, ⌥U) and ⌥←/→ jumps by word in every text field. Control+Option is the combination macOS and apps leave free, so it's the closest thing a Mac has to a "Super layer". If you use Karabiner-Elements or a Hyper key, you can record those combinations instead.

Navigation: focus and move

Actionniri defaultChainYourMac 2.1
Focus column left / rightMod+Left / Mod+Right, Mod+H / Mod+L⌃⌥← / ⌃⌥→, ⌃⌥H / ⌃⌥L
Focus window up / down (in a column)Mod+Up / Mod+Down, Mod+K / Mod+J⌃⌥↑ / ⌃⌥↓, ⌃⌥K / ⌃⌥J
Focus first / last columnMod+Home / Mod+End⌃⌥⌘← / ⌃⌥⌘→
Move column left / rightMod+Ctrl+Left / Right, Mod+Ctrl+H / L⌃⌥⇧← / ⌃⌥⇧→, ⌃⌥⇧H / ⌃⌥⇧L
Move window up / down (in a column)Mod+Ctrl+Up / Down, Mod+Ctrl+K / J⌃⌥⇧↑ / ⌃⌥⇧↓, ⌃⌥⇧K / ⌃⌥⇧J
Move column to first / lastMod+Ctrl+Home / Mod+Ctrl+End⌃⌥⌘⇧← / ⌃⌥⌘⇧→
Focus column with mouse wheelMod+WheelScrollLeft / RightTrackpad swipe, or click the window

The pattern is easy to remember: niri adds Ctrl to move what Mod focuses, and ChainYourMac adds ⇧. You can also drag a window by its title bar onto another column to reorder, which is the Mac version of niri's Mod+drag.

Column width and height

Actionniri defaultChainYourMac 2.1
Cycle preset column widthsMod+R⌃⌥R
Cycle presets backwardsMod+Shift+RNo separate action (⌃⌥R cycles forward)
Maximize columnMod+F⌃⌥F (full width)
Expand to available widthMod+Ctrl+FNo direct equivalent
Column width −10% / +10%Mod+Minus / Mod+Equal⌃⌥− / ⌃⌥= (narrower / wider)
Window height −10% / +10%Mod+Shift+Minus / Mod+Shift+Equal⌃⌥⇧− / ⌃⌥⇧= (shorter / taller)
Reset window heightMod+Ctrl+R⌃⌥0 (equalize heights in the column)
Center columnMod+C⌃⌥C
Center visible columnsMod+Ctrl+CNo direct equivalent

The width presets themselves are configurable in both. niri's default list is 1/3, 1/2 and 2/3. ChainYourMac's is 25, 33, 50, 67 and 75%, and you can change it under "Preset Window Widths". For a niri-identical feel, set it to 33/50/67. See niri config on macOS.

Stacking, tabs and floating

Actionniri defaultChainYourMac 2.1
Consume or expel window leftMod+BracketLeft⌃⌥] stacks into the left column; ⌃⌥⇧[ pops out to the left
Consume or expel window rightMod+BracketRight⌃⌥[ stacks into the right column; ⌃⌥⇧] pops out to the right
Consume window into columnMod+CommaNo "pull the neighbour in" action; stack the focused window instead with ⌃⌥] or ⌃⌥[
Expel window from columnMod+Period⌃⌥⇧] (pop out)
Tabbed column displayMod+W⌃⌥⇧T
Toggle floatingMod+V⌃⌥T
Switch focus floating ↔ tilingMod+Shift+VNo direct equivalent (click, or ⌘`/⌘Tab)

niri combines "consume" and "expel" into one key that does whichever makes sense. ChainYourMac keeps them separate: plain ⌃⌥ with a bracket stacks, and adding ⇧ pops out. Inside a stack, ⌃⌥⇧↑/↓ reorders windows, just like niri's move-window-up/down.

Monitors

Actionniri defaultOn macOS
Focus monitor left / right / up / downMod+Shift+arrows (or H/J/K/L)No dedicated key in 2.1; click a window on the other display
Move column to monitorMod+Shift+Ctrl+arrows⌃⌥N sends the window to the next display
Power off monitorsMod+Shift+PmacOS: lock the screen with ⌃⌘Q

Like niri, every display has its own strip, and windows never spill onto the neighbour. Dragging a window onto another display also moves it into that display's strip.

Workspaces, overview and system keys

This is where the two worlds part. niri owns the whole session, so its config also binds workspaces, launching apps and quitting. On a Mac those belong to macOS:

Actionniri defaultOn macOS
Focus workspace up / downMod+U / Mod+I, Mod+Page_Up/Down⌃← / ⌃→ (switch Space), or a swipe
Focus workspace 1–9Mod+1 … Mod+9⌃1 … ⌃9 once enabled in Keyboard Shortcuts → Mission Control
Move column to workspaceMod+Ctrl+1…9, Mod+Ctrl+U/IDrag the window to a Space in Mission Control
OverviewMod+O, or 4-finger swipe upMission Control (⌃↑ or a swipe up). ChainYourMac also shows a strip minimap while you navigate
Close windowMod+Q⌘W (⌘Q quits the app)
Fullscreen windowMod+Shift+F⌃⌘F (native full screen, which ChainYourMac leaves alone)
Spawn terminal / launcherMod+T / Mod+DSpotlight (⌘Space), Raycast or Alfred
Show hotkey overlayMod+Shift+/Shortcuts page in the ChainYourMac app
Quit the compositorMod+Shift+E⌃⌥Q stops the window manager

Touchpad and mouse gestures

niri's wiki lists these touchpad gestures: three-finger horizontal swipes move the view, three-finger vertical swipes switch workspaces, and four-finger vertical swipes open the Overview. On a Mac, macOS already uses three-finger swipes (and often four) for Spaces and Mission Control, so ChainYourMac's strip swipe defaults to four fingers horizontally. The strip follows your fingers 1:1 and then glides to the nearest window. You can switch it to three fingers, and the in-app Mac Setup screen checks for clashing macOS settings (setup guide). For the mouse, niri's Mod+drag to move a window becomes dragging by the title bar onto another column.

Setting niri-style binds by hand

You never need to touch a file, since the shortcut recorder handles everything. But if you keep dotfiles, ChainYourMac's optional TOML config (~/.paneru) uses readable binding names:

[bindings]
window_focus_west  = ["ctrl + alt - leftarrow", "ctrl + alt - h"]
window_focus_east  = ["ctrl + alt - rightarrow", "ctrl + alt - l"]
window_swap_west   = ["ctrl + alt + shift - leftarrow", "ctrl + alt + shift - h"]
window_swap_east   = ["ctrl + alt + shift - rightarrow", "ctrl + alt + shift - l"]
window_resize      = "ctrl + alt - r"       # niri: switch-preset-column-width
window_fullwidth   = "ctrl + alt - f"       # niri: maximize-column
window_center      = "ctrl + alt - c"       # niri: center-column
window_tabbed      = "ctrl + alt + shift - t" # niri: toggle-column-tabbed-display
window_manage      = "ctrl + alt - t"       # niri: toggle-window-floating

Other names include window_focus_first/_last, window_swap_first/_last, window_wider, window_narrower, window_taller, window_shorter, window_equalize, window_stack, window_unstack, window_consume_east, window_expel_west and window_nextdisplay. For the layout options (widths, gaps, centering), continue to niri config on macOS.

Keep the niri muscle memory on your Mac.

ChainYourMac's defaults follow niri's layout on Control+Option, and every shortcut can be re-recorded — including several keys per action.

Get ChainYourMac — $19.99 one-time purchase · free updates forever · macOS 13+ on Apple silicon

FAQ

What is the Mod key in niri?

niri's wiki defines Mod as Super (the Windows/logo key) when niri runs as a normal session on a TTY, and Alt when niri runs nested in a window. Since niri 25.05 you can choose a different Mod key in the config's input section.

Why doesn't ChainYourMac use ⌘ as the Mod key?

On a Mac, ⌘ is the app modifier — ⌘W, ⌘Q, ⌘H, ⌘[ and ⌘] already mean something in nearly every app. Plain ⌥ types special characters and moves the cursor by word. Control+Option is free in almost every app, so ChainYourMac 2.1 uses it for everything. You can re-record any shortcut, including onto ⌘ if you prefer.

Can I make ChainYourMac use exactly niri's keys?

As close as macOS allows. Record any shortcut in Settings → Shortcuts; an action can hold several bindings. Or edit the optional TOML file, e.g. window_swap_west = ["ctrl + alt + shift - leftarrow", "ctrl + alt + shift - h"]. Actions niri has but ChainYourMac doesn't (like the Overview) can't be bound.

What's the niri touchpad gesture equivalent on Mac?

niri scrolls the view with a three-finger horizontal swipe and switches workspaces with a three-finger vertical swipe. In ChainYourMac a four-finger horizontal swipe (three optional) scrolls the strip under your fingers; macOS keeps its own vertical swipes for Mission Control and Spaces. The setup guide lists which macOS gesture settings to change.

Do the shortcuts work on AZERTY, QWERTZ or Dvorak?

Yes. The shortcut recorder records the key you actually press on your layout.