Skip to content

Repository files navigation

Dome

Dome is a constraint-aware scrollable tiling window manager that works on Windows and macOS.

Dome screenshot

Background

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.

Install

Windows (Scoop)

scoop bucket add dome https://github.com/l0ngvh/scoop-dome
scoop install dome-nightly

macOS (Homebrew)

brew install --cask l0ngvh/homebrew-dome/dome-nightly

Or build from source with a Rust toolchain:

git clone https://github.com/l0ngvh/Dome
cd Dome
cargo install --path .
dome

On 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.

Usage

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 + 09 Focus workspace 0–9
Meta + Shift + 09 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 Dome

See 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.

Status bar

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={}"

Configuring Dome

Dome is configured by editing two TOML files. The default locations are:

  • macOS: ~/.config/dome/config.toml and ~/.config/dome/layout.toml (or under $XDG_CONFIG_HOME/dome/).
  • Windows: %APPDATA%\dome\config.toml and %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.

Documentation

  • 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

Credits

Dome draws a lot of inspiration from these awesome WMs and likely wouldn't exist without them:

License

Dome is released under the MIT License.

About

A tiling window manager for macOS and Windows

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages