Dome is a constraint-aware scrollable tiling window manager that works on Windows and macOS.
Before Dome, there were already plenty of excellent window managers for macOS and Windows. The problem is, I'd like to enjoy gaming with friends on Windows, while still having to ship code handed to me by my manager on macOS, and maintaining two sets of configuration and getting them to behave consistently takes a lot of work. So I just decided to put in even more work and build Dome.
Windows (Scoop)
scoop bucket add dome https://github.com/l0ngvh/scoop-dome
scoop install dome-nightlymacOS (Homebrew)
brew install --cask l0ngvh/homebrew-dome/dome-nightlyOr build from source with a Rust toolchain:
git clone https://github.com/l0ngvh/Dome
cd Dome
cargo install --path .
domeOn macOS, Dome needs Accessibility permissions to manage windows, and Screen Capture permissions to render float windows. macOS will prompt you for both on first launch. No extra permissions are required on Windows.
By default, Dome uses a modified version of the i3 layout, where each window is a leaf of a layout tree rooted at the workspace. Each window has a cap on how small (or big) it can be, and thus the whole workspace can be scrolled when the windows can't all fit on the screen. Dome ships with the following default keybindings:
| Key | Action |
|---|---|
| Meta + H / J / K / L | Focus left/down/up/right |
| Meta + Shift + H / J / K / L | Move window left/down/up/right |
| Meta + 0–9 | Focus workspace 0–9 |
| Meta + Shift + 0–9 | Move window to workspace 0–9 |
| Meta + Alt + H / J / K / L | Focus monitor left/down/up/right |
| Meta + Alt + Shift + H / J / K / L | Move window to monitor left/down/up/right |
| Meta + Shift + F | Toggle floating |
| Meta + B | Toggle split/tabbed layout |
| Meta + Shift + Q | Close focused window |
Dome can also be controlled via the CLI:
dome focus left|down|up|right # Move focus
dome move left|down|up|right # Move window
dome toggle float|fullscreen # Toggle floating or fullscreen
dome toggle layout # Toggle split/tabbed
dome focus workspace <name> # Switch workspace
dome close # Close focused window
dome exit # Quit DomeSee the keybinding configuration and command reference for the complete list.
To check why Dome did what it did, look at dome.log. It's written fresh on each
launch to ~/Library/Logs/dome/dome.log on macOS, or
%APPDATA%\dome\logs\dome.log on Windows.
Dome doesn't ship with a status bar by default. Here's how you can configure SketchyBar to display Dome's status.
sketchybar --add item dome_focused left \
--set dome_focused label="--" \
--subscribe dome_focused dome_update
sketchybar --add event dome_poll "1s" \
"dome query workspaces | jq -r '.[] | select(.is_focused) | .name' \
| xargs -I{} sketchybar --set dome_focused label={}"Dome is configured by editing two TOML files. The default locations are:
- macOS:
~/.config/dome/config.tomland~/.config/dome/layout.toml(or under$XDG_CONFIG_HOME/dome/). - Windows:
%APPDATA%\dome\config.tomland%APPDATA%\dome\layout.toml.
config.toml covers general settings, keybindings, and window rules. layout.toml covers tiling strategy, window-size constraints, and per-strategy parameters. Changes take effect when you save.
- Configuration: config file reference, window rules, and keybindings
- Layout: layout strategy, window-size constraints, and per-strategy parameters
- Commands: full command reference
- CLI: command-line interface usage
- FQG: command-line interface usage
Dome draws a lot of inspiration from these awesome WMs and likely wouldn't exist without them:
Dome is released under the MIT License.