Desktop & WM — SketchyBar, AeroSpace, OmniWM, dual profiles
SketchyBar status bar, AeroSpace and OmniWM tiling window managers, and the dual-config setup that swaps gaps and workspace assignments between laptop and docked use.
This page covers the four layers that make up the desktop: SketchyBar (status bar), your choice of OmniWM or AeroSpace (window manager), and multi-config profiles for switching between the laptop screen and external monitors.
SketchyBar
Floating, notch-aware menu bar replacement. Two frosted-glass pills sit on either side of the MacBook notch.
The bar is organised into four widget groups:
- SPACES — AeroSpace workspaces
- MEDIA — Now playing
- SYSTEM — Battery · Volume · Wi-Fi
- AI — Claude + Gemini usage
brew tap FelixKratz/formulae
brew install sketchybar
brew services start sketchybar
# App font (workspace icons)
curl -fsSL https://github.com/kvndrsslr/sketchybar-app-font/releases/download/v2.0.28/sketchybar-app-font.ttf \
-o ~/Library/Fonts/sketchybar-app-font.ttf
# Symlink + reload
ln -sf ~/dotfiles/sketchybar ~/.config/sketchybar
sketchybar --reload Day-to-day controls:
sketchybar --reload # Reload config
brew services restart sketchybar # Restart service
brew services list | grep sketchybar # Check status
Color Scheme
| Variable | Color | Use |
|---|---|---|
BAR_COLOR | #1a1b26 | Bar / pill background |
ACCENT_COLOR | #7aa2f7 | Active space · Wi-Fi |
PURPLE | #bb9af7 | Calendar icon |
CYAN | #7dcfff | Volume icon |
GREEN | #9ece6a | Battery full · AI low |
YELLOW | #e0af68 | Battery mid · AI mid |
RED | #f7768e | Battery low · AI high |
OmniWM
Hyprland-style dwindle/BSP tiling window manager for macOS by BarutSRB. GUI-configured (no TOML) with a built-in Quake terminal. Peer alternative to AeroSpace — pick one at install time.
brew tap BarutSRB/tap
brew install --cask omniwm
~/dotfiles/omniwm/configure.sh # pre-seed sensible defaults Default hotkeys
| Key | Action |
|---|---|
| Option + 1–9 | Switch to workspace |
| Option + Shift + 1–9 | Move window to workspace |
| Option + ←/↓/↑/→ | Focus window |
| Option + Shift + ←/↓/↑/→ | Move window |
| Option + Shift + B | Balance sizes |
| Option + Return | Toggle fullscreen |
Config flow — omniwm/configure.sh
OmniWM stores settings under the com.barut.OmniWM defaults domain, so the config is binary plist rather than text. configure.sh wraps defaults write / export / import so the settings stay version-controlled.
| Command | What it does |
|---|---|
./configure.sh | Apply repo defaults (borders on, workspace bar off, focus-follows-mouse off) |
./configure.sh --export | Save your current OmniWM settings into omniwm/backup.plist — commit this |
./configure.sh --import | Restore settings from backup.plist on a new machine |
AeroSpace
i3-inspired tiling window manager for macOS. Vim-style keybindings, workspace-based layout. Supports dual-monitor profiles via aerospace-sync.
brew tap nikitabobko/tap
brew install --cask nikitabobko/tap/aerospace
mkdir -p ~/.config/aerospace
ln -sf ~/dotfiles/aerospace/aerospace.toml ~/.config/aerospace/aerospace.toml Navigation
| Key | Action |
|---|---|
| Alt + H/J/K/L | Focus window left / down / up / right |
| Alt + Shift + H/J/K/L | Move window |
| Alt + T | Horizontal tiles (side-by-side) |
| Alt + F | Toggle floating / tiling |
| Alt + Shift + - | Resize smart –50 |
| Alt + Shift + = | Resize smart +50 |
Workspaces
| Key | Action |
|---|---|
| Alt + 1–9 | Switch to workspace |
| Alt + Shift + 1–9 | Move window to workspace |
| Alt + Tab | Previous workspace (back and forth) |
| Alt + Shift + Tab | Move workspace to next monitor |
| Alt + D | Sync profile (laptop / docked auto-detect) |
Service Mode
| Key | Action |
|---|---|
| Alt + Shift + ; | Enter service mode |
| Esc | Reload config + exit service mode |
| R | Flatten workspace tree (reset layout) |
| F | Toggle floating / tiling |
| Backspace | Close all windows but current |
Multi-Config Profiles
AeroSpace has no per-monitor gap support, so two separate config files handle the different setups. The aerospace-sync script auto-detects your monitor count and applies the right profile.
Laptop profile — aerospace/laptop.toml
outer.top= 8- Workspace assignment: none
- Monitors: 1 (built-in)
macOS manages the notch offset automatically. Minimal top gap keeps content flush to the bar.
Docked profile — aerospace/docked.toml
outer.top= 35- Workspaces 1–5 → main monitor
- Workspaces 6–9 → secondary monitor
Top gap of 35px clears SketchyBar (height 36 + margin 10, bottom at y=46) on external monitors.
Three ways to switch
- Terminal — run
dockorundockfrom Zsh or Fish. Both aliases call the same script. - Keybinding — Alt + D from anywhere — no terminal needed. Bound directly in AeroSpace.
- Auto-detect —
aerospace-synccounts connected monitors and picks the right profile every time.
How aerospace-sync works
# Counts monitors via aerospace list-monitors
# 1 monitor → copies laptop.toml → outer.top = 8
# 2+ monitors → copies docked.toml → outer.top = 35, workspace assignments
ln -sf ~/dotfiles/bin/aerospace-sync ~/.local/bin/aerospace-sync
chmod +x ~/.local/bin/aerospace-sync
The script resolves the symlink target with readlink before writing so the symlink is never broken.
Shell aliases
Both shells expose the same two aliases:
alias dock='aerospace-sync'
alias undock='aerospace-sync'
Where to go next
- Terminal & shell — Ghostty, Starship, Zsh, Fish.
- Apps & tools — the rest of the CLI + GUI inventory.
- Symlinks — how each config above lands in
~/.config/.