> ## Documentation Index
> Fetch the complete documentation index at: https://docs.anonymous.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# AeroSpace

> Tiling window manager with a 9x9 workspace grid and SwiftUI picker apps

[AeroSpace](https://github.com/nikitabobko/AeroSpace) is a tiling window manager for macOS.
Rig configures it with a **9x9 workspace grid** — 9 workspace rows, each with 9 desktops.

## Workspace Model

Workspaces are named `W.D` where `W` is the row (1-9) and `D` is the desktop (1-9), giving
81 total workspaces (e.g. `1.1`, `3.5`, `7.2`).

* Starts on workspace `1.1` after login.
* Each workspace row remembers its last active desktop.
* No gaps between windows (inner/outer = 0).

## Keybindings

### Window Navigation

| Shortcut                | Action                               |
| ----------------------- | ------------------------------------ |
| `Alt + h/j/k/l`         | Focus left / down / up / right       |
| `Alt + Shift + h/j/k/l` | Move window left / down / up / right |

### Workspace Navigation

| Shortcut          | Action                                               |
| ----------------- | ---------------------------------------------------- |
| `Cmd + Alt + 1-9` | Switch to workspace row 1-9 (remembers last desktop) |
| `Cmd + Alt + j/k` | Next / previous workspace row                        |
| `Cmd + Alt + h/l` | Switch desktop within workspace (wraps)              |

### Move Windows Between Workspaces

| Shortcut                  | Action                                       |
| ------------------------- | -------------------------------------------- |
| `Cmd + Alt + Shift + 1-9` | Send window to workspace row (stay in place) |
| `Cmd + Alt + Shift + j/k` | Send window to next/prev workspace row       |
| `Cmd + Alt + Shift + h/l` | Send window to next/prev desktop (wraps)     |

### Layout & Resize

| Shortcut    | Action                                                             |
| ----------- | ------------------------------------------------------------------ |
| `Alt + /`   | Cycle tiles / horizontal / vertical                                |
| `Alt + ,`   | Cycle accordion horizontal / vertical                              |
| `Alt + f`   | Toggle fullscreen                                                  |
| `Alt + Tab` | Focus back-and-forth                                               |
| `Alt + v`   | Join with right                                                    |
| `Alt + b`   | Join with down                                                     |
| `Alt + r`   | Enter **resize mode** (`h/j/k/l` to resize, `Esc`/`Enter` to exit) |

### Workspace Management

| Shortcut  | Action                                 |
| --------- | -------------------------------------- |
| `Alt + n` | Create a new unused workspace          |
| `Alt + p` | Open workspace picker (SwiftUI app)    |
| `Alt + i` | Open notification picker (SwiftUI app) |
| `Alt + c` | Open clipboard history (SwiftUI app)   |

### App Launchers

| Shortcut          | Action                |
| ----------------- | --------------------- |
| `Alt + Shift + t` | Launch Kitty terminal |
| `Alt + Shift + s` | Launch Safari         |
| `Alt + Shift + f` | Launch Finder         |

## Configuration Details

```toml theme={null}
start-at-login = true
enable-normalization-flatten-containers = true
enable-normalization-opposite-orientation-for-nested-containers = true
on-focused-monitor-changed = ['move-mouse monitor-lazy-center']

[gaps]
inner.horizontal = 0
inner.vertical = 0
outer.left = 0
outer.right = 0
outer.top = 0
outer.bottom = 0
```

## Swift Picker Apps

Rig includes three custom SwiftUI apps compiled during `init.sh`:

### WorkspacePicker

A visual 9x9 grid overlay showing:

* Currently occupied desktops
* Windows and apps on each desktop
* Notification badges
* Preset workspace layouts (persisted as JSON)
* Desktop reorder mode — press `m` to pick a source desktop, navigate with `h/l`,
  then press Enter to reorder desktops within the same workspace row

Launch with `Alt + p`. Supports a `--goto` flag for direct workspace navigation.

### NotificationPicker

Queries the macOS Notification Center SQLite database to list applications with
active notification badges. Supports a desktop-scoped view that filters notifications
to the current workspace and desktop. Click an entry to jump to the app's workspace
and window.

Launch with `Alt + i`.

### ClipboardHistory

A searchable clipboard history overlay powered by a background daemon (`ClipboardDaemon`).
The daemon polls the system clipboard every second and persists entries to
`~/.clipboard-history.json` (max 500 entries, 10k character cap per entry). Copies from
sensitive apps (1Password, Keychain Access, LastPass, Bitwarden, KeePassXC) are excluded.

The overlay shows recent clipboard entries with source app and relative timestamp:

* `j/k` — navigate entries
* `/` — enter search mode (filters by content or app name)
* `Enter` — copy selected entry to clipboard
* `Esc` — close (or exit search)

Launch with `Alt + c`. The daemon is started via `clipboard-daemon.sh` (launched at login).

### Compiling manually

```bash theme={null}
cd ~/.config/aerospace/scripts
for src in *.swift; do
  name=$(basename "$src" .swift)
  bin=$(echo "$name" | sed 's/\([a-z]\)\([A-Z]\)/\1-\2/g' | tr '[:upper:]' '[:lower:]')-app
  swiftc -O -o "$bin" "$src" -framework SwiftUI -framework AppKit
done
```

## Helper Scripts

All scripts live in `~/.config/aerospace/scripts/`:

| Script                   | Purpose                                       |
| ------------------------ | --------------------------------------------- |
| `switch-workspace.sh`    | Switch workspace row, remember last desktop   |
| `move-to-workspace.sh`   | Move window to workspace row (stay in place)  |
| `switch-desktop.sh`      | Navigate desktops within workspace (circular) |
| `move-to-desktop.sh`     | Move window between desktops (circular)       |
| `new-workspace.sh`       | Find first unused workspace row               |
| `workspace-picker.sh`    | Launch WorkspacePicker app                    |
| `notification-picker.sh` | Launch NotificationPicker app                 |
| `minimap.sh`             | Launch WorkspacePicker in goto mode           |
| `clipboard-daemon.sh`    | Start background clipboard polling daemon     |
| `clipboard-history.sh`   | Launch ClipboardHistory overlay               |
