CTile
A Cinnamon desktop extension that brings snap layout overlays to window management — drag any window toward the top of your screen and a layout picker appears, letting you tile it into a preset zone without touching the keyboard.
How it works
- Start dragging any window by its titlebar
- Move the cursor within ~50px of the top screen edge — the layout picker appears
- Hover over the desired zone (the overlay stays visible as long as your cursor is within 20px of it)
- Release — the window snaps to that zone
The overlay displays 14 layout presets across three rows:
| Row | Layouts |
|---|---|
| Basic | Full, Left ½, Right ½, Top ½, Bottom ½ |
| Quarters | Top-left, Top-right, Bottom-left, Bottom-right |
| Thirds | Left ⅓, Center ⅓, Right ⅓, Left ⅔, Right ⅔ |
Layout previews are drawn in your system theme's accent color and update automatically when you change themes.
Installation
Copy (or symlink) the repo directory to Cinnamon's extensions folder under the extension's UUID, then enable it:
cp -r /path/to/ctile ~/.local/share/cinnamon/extensions/ctile@ctile
Then open System Settings → Extensions, find CTile, and enable it. Or via the command line:
gsettings set org.cinnamon enabled-extensions "['ctile@ctile']"
Restart Cinnamon (Alt+F2 → r → Enter) if the extension doesn't appear immediately.
Development
After editing, sync and reload without restarting Cinnamon:
cp extension.js stylesheet.css metadata.json ~/.local/share/cinnamon/extensions/ctile@ctile/
Then reload via Looking Glass (Alt+F2 → lg) or with:
dbus-send --session --dest=org.Cinnamon /org/Cinnamon org.Cinnamon.Eval \
string:'const es = imports.ui.extensionSystem; es.disableExtension("ctile@ctile"); es.enableExtension("ctile@ctile");'
Debug output goes to ~/.xsession-errors — search for [ctile].
Tunables
At the top of extension.js:
| Constant | Default | Description |
|---|---|---|
TRIGGER_Y |
50 |
Pixels from top edge that triggers the overlay |
POLL_INTERVAL |
40 |
Milliseconds between pointer polls during a drag |
THUMB_W / THUMB_H |
66 / 44 |
Layout preview thumbnail dimensions |
SHOW_ANIM_MS / HIDE_ANIM_MS |
120 / 100 |
Fade in/out duration |
Compatibility
Tested on Cinnamon 6.6.7 / Muffin 6.6.3.
Note for porters: Muffin 6.6 passes four arguments to
grab-op-begin—(display, screen, window, op)— unlike older versions which passed three. If you see the overlay never appearing, verify the signal arity with Looking Glass.
File structure
ctile/
├── extension.js — all extension logic (~460 lines)
├── metadata.json — UUID, name, supported Cinnamon versions
├── stylesheet.css — overlay and button styles
├── README.md
└── AGENTS.md