Special Workspaces (Scratchpads)
Special workspaces are named overlay workspaces that can be toggled on and off over the current workspace. They're useful for quick-access tools like terminals, music players, or chat apps.
Defining a special workspace
In your config:
gar.special_workspace("term", {
position = "center",
width = 0.8,
height = 0.8,
})
This creates a special workspace named "term" that appears as a centered overlay covering 80% of the screen in both dimensions.
Options
| Key | Type | Default | Description |
|---|---|---|---|
position |
string | "center" |
Overlay placement: "center", "top", "bottom" |
width |
number | 0.7 |
Width as fraction of screen (0.0 – 1.0) |
height |
number | 0.7 |
Height as fraction of screen (0.0 – 1.0) |
Position behavior
"center"— the overlay is centered both horizontally and vertically"top"— the overlay is anchored to the top of the screen, centered horizontally"bottom"— the overlay is anchored to the bottom, centered horizontally
Toggling a special workspace
Bind a key to toggle visibility:
gar.bind("mod+grave", "toggle-special term")
When toggled on, all windows in the special workspace are shown as an overlay on the current monitor. When toggled off, they're hidden.
Via IPC:
tarmacctl toggle-special term
Moving windows to a special workspace
gar.bind("mod+shift+grave", "move-to-special term")
tarmacctl move-to-special term
This removes the focused window from its current workspace and places it in the named special workspace. The window will be visible next time the special workspace is toggled on.
Multiple scratchpads
You can define as many special workspaces as you want:
gar.special_workspace("term", {
position = "center",
width = 0.8,
height = 0.8,
})
gar.special_workspace("music", {
position = "bottom",
width = 1.0,
height = 0.4,
})
gar.special_workspace("chat", {
position = "top",
width = 0.6,
height = 0.5,
})
gar.bind("mod+grave", "toggle-special term")
gar.bind("mod+m", "toggle-special music")
gar.bind("mod+c", "toggle-special chat")
Assigning windows via rules
Force a window into a special workspace on creation:
gar.rule({ app_name = "Spotify" }, { workspace = "special:music" })
The workspace value must be "special:NAME" where NAME matches the special workspace name.
Screenshot: Scratchpad terminal
A centered terminal scratchpad overlaying the tiled layout
[ placeholder — add scratchpad.png to public/ ]