1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
|
# Custom Keybinds Reference
All non-default keybinds across neovim, zellij, zsh, ghostty, and sway.
## Neovim
Leader: `Space` | Local leader: `,`
### General (config/keymaps.lua)
| Mode | Key | Action |
| ---- | ------------ | ----------------------------------- |
| n | `Esc` | Clear search highlight |
| n | `gV` | Select last inserted text |
| n | `↓` / `↑` | Scroll viewport (C-e / C-y) |
| v | `p` | Paste without clobbering register |
| n | `,s` | Find and replace (whole file) |
| v | `,s` | Find and replace (selection) |
| n | `Space x` | Write all buffers |
| n | `Space z` | Write all and quit |
| n | `Space q` | Quit all |
| t | `Esc Esc` | Exit terminal mode |
| n | `[w` / `]w` | Prev/next warning+ diagnostic |
| n | `[e` / `]e` | Prev/next error diagnostic |
| n | `yp` | Yank current file path to clipboard |
| | `:SudoWrite` | Write file with sudo privileges |
### Navigation (plugins/init.lua)
| Mode | Key | Action |
| ---- | -------------- | ---------------------------------------- |
| n | `Ctrl-h/j/k/l` | Move to split/zellij pane (smart-splits) |
| n | `Space ?` | Show buffer-local keymaps (which-key) |
| n | `Space tq` | Toggle quickfix |
| n | `Space tl` | Toggle loclist |
| qf | `>` / `<` | Expand/collapse quickfix context |
### Search (plugins/search.lua)
| Mode | Key | Action |
| ---- | ------------- | ------------------------------ |
| n | `,b` | fzf-lua buffers |
| n | `,/` | fzf-lua live grep |
| n | `,f` | fzf-lua files |
| n | `Space Space` | fzf-lua global picker |
| n | `,d` | fzf-lua diagnostics |
| n | `,r` | fzf-lua resume |
| n | `,gc` | Git buffer commits |
| v | `,gc` | Git commits for selected range |
| n | `,gC` | Git all commits |
| n | `,gb` | Git branches |
| n | `,gs` | Git status |
| n | `,gS` | Git stash |
| fzf | `Alt-p` | Toggle preview |
| fzf | `Ctrl-x` | Open in horizontal split |
### LSP (plugins/lsp.lua)
Neovim 0.12 built-in defaults (not listed): `grn` rename, `grr` references,
`gri` implementation, `gO` document symbols, `gra` code action, `grt` type def,
`grx` codelens run, `Ctrl-S` (insert) signature help, `]d`/`[d` diagnostic nav.
| Mode | Key | Action |
| ---- | ------------------------ | ---------------------------------------- |
| n | `Ctrl-]` | Goto definition (native) |
| n | `gD` | Goto declaration |
| n | `gd` | Goto definition (fzf-lua) |
| n | `gvd` / `gxd` / `gtd` | Definition in vsplit / hsplit / tab |
| n | `gvt` / `gxt` / `gtt` | Type definition in vsplit / hsplit / tab |
| n | `gri` | Implementation (fzf-lua override) |
| n | `grvi` / `grxi` / `grti` | Implementation in vsplit / hsplit / tab |
| n | `grr` | References (fzf-lua override) |
| n | `gvr` / `gxr` / `gtr` | References in vsplit / hsplit / tab |
| n | `Space ci` | Incoming calls |
| n | `Space co` | Outgoing calls |
| n | `gO` | Document symbols (fzf-lua override) |
| n | `Space ws` | Workspace symbols |
| n | `Space wd` | Workspace diagnostics |
| n | `Space th` | Toggle inlay hints |
| n,v | `Space f` | Format buffer (conform.nvim) |
### Git (plugins/git.lua)
| Mode | Key | Action |
| ---- | ----------- | ----------------------------------- |
| n | `Space go` | Open Neogit |
| n,v | `Space gy` | Copy git permalink |
| n | `]c` / `[c` | Next/prev git change (or diff hunk) |
| n | `Space hs` | Stage hunk |
| n | `Space hr` | Reset hunk |
| v | `Space hs` | Stage hunk (visual) |
| v | `Space hr` | Reset hunk (visual) |
| n | `Space hS` | Stage buffer |
| n | `Space hR` | Reset buffer |
| n | `Space hp` | Preview hunk |
| n | `Space hb` | Blame line |
| n | `Space tb` | Toggle blame line |
| n | `Space hd` | Diff against index |
| n | `Space hD` | Diff against last commit |
| n | `Space hc` | Change base to index |
| n | `Space hC` | Change base to HEAD |
| n | `Space tgd` | Toggle inline deleted |
| n | `Space tgw` | Toggle word diff |
| n | `Space tgl` | Toggle line highlighting |
| o,x | `ih` | Git hunk text object |
| n | `]x` / `[x` | Next/prev git conflict |
### Git Rebase (after/ftplugin/gitrebase.lua)
| Mode | Key | Action |
| ---- | ---- | ------------ |
| n,v | `gc` | Cycle action |
| n,v | `gp` | Pick |
| n,v | `ge` | Edit |
| n,v | `gf` | Fixup |
| n,v | `gd` | Drop |
| n,v | `gs` | Squash |
| n,v | `gr` | Reword |
### Editing (plugins/editing.lua)
| Mode | Key | Action |
| ---- | ----------------------- | --------------------------------- |
| n | `Ctrl-a` / `Ctrl-x` | Increment / decrement (dial.nvim) |
| v | `Ctrl-a` / `Ctrl-x` | Increment / decrement (visual) |
| v | `g Ctrl-a` / `g Ctrl-x` | Sequential increment / decrement |
| x | `Space re` | Extract function |
| x | `Space rf` | Extract function to file |
| x | `Space rv` | Extract variable |
| n | `Space rI` | Inline function |
| n,x | `Space ri` | Inline variable |
| n | `Space rb` | Extract block |
| n | `Space rB` | Extract block to file |
| n | `Space rp` | Debug printf |
| n,x | `Space rV` | Debug print variable |
| n | `Space rc` | Cleanup debug statements |
### Treesitter (plugins/treesitter.lua)
| Mode | Key | Action |
| ---- | ----------------------------- | ---------------------------- |
| n,v | `Alt-k` / `Alt-j` | Treewalker up / down |
| n,v | `Alt-h` / `Alt-l` | Treewalker left / right |
| n | `Shift-Alt-k` / `Shift-Alt-j` | Treewalker swap up / down |
| n | `Shift-Alt-h` / `Shift-Alt-l` | Treewalker swap left / right |
### AI (plugins/ai.lua)
| Mode | Key | Action |
| ---- | ---------- | -------------------------------- |
| n | `Space p` | Accept Copilot NES + goto end |
| n | `Esc` | Dismiss Copilot NES |
| i | `Ctrl-f` | Accept Copilot NES (insert mode) |
| n | `Space tc` | Toggle Copilot |
### Completion (plugins/completion.lua)
Uses blink.cmp `cmdline` preset defaults plus:
| Mode | Key | Action |
| ---- | ---- | ----------------- |
| i | `CR` | Accept completion |
### Debug (plugins/debug.lua)
| Mode | Key | Action |
| ---- | ---------- | ------------------------------- |
| n | `Space td` | Toggle debug mode (debugmaster) |
### Runner (plugins/runner.lua)
| Mode | Key | Action |
| ---- | ---------- | ------------------------------- |
| n | `Space to` | Toggle Overseer |
| n | `Space ob` | Build (just build, no prompt) |
| n | `Space oB` | Build (just build, with prompt) |
| n | `Space ot` | Test (just test, no prompt) |
| n | `Space oT` | Test (just test, with prompt) |
| n | `Space of` | Test current file (no prompt) |
| n | `Space oF` | Test current file (with prompt) |
| n | `Space od` | Debug test file (no prompt) |
| n | `Space oD` | Debug test file (with prompt) |
| n | `Space oa` | Autofix |
| n | `Space or` | Run task picker |
| n | `Space os` | Overseer shell |
| n | `Space ol` | Restart last task |
### Autocmds (config/autocmds.lua)
| Filetype | Key | Action |
| --------------------------- | --- | ------------ |
| help, qf, checkhealth, etc. | `q` | Close buffer |
## Zellij
All binds are in `shared_except "locked"` mode (active everywhere except locked mode).
| Key | Action |
| ----------------------- | --------------------------------- |
| `Alt-1` through `Alt-9` | Go to tab N |
| `Alt-t` | New tab |
| `Alt-[` / `Alt-]` | Previous / next tab |
| `Alt-\` | Cycle swap layouts (reset sizes) |
| `Alt-w` | Toggle pane fullscreen |
| `Alt-x` | Close focused pane |
| <code>Alt-|</code> | Vertical split (new pane right) |
| `Alt-_` | Horizontal split (new pane below) |
| `Alt-e` | Edit scrollback |
| `Alt-q` | Detach session |
| `Alt--` / `Alt-=` | Resize decrease / increase |
| `Ctrl-h/j/k/l` | Move focus (vim-zellij-navigator) |
| `Alt-Shift-P` | Enter Pane mode |
| `Alt-Shift-T` | Enter Tab mode |
| `Alt-Shift-R` | Enter Resize mode |
| `Alt-Shift-S` | Enter Scroll mode |
| `Alt-Shift-O` | Enter Session mode |
| `Alt-Shift-Z` | Enter Locked mode |
| `Alt-Shift-Q` | Quit zellij |
Mode-entry keys are relocated from their zellij defaults (`Ctrl-p/t/r/s/o/g/q`, `Ctrl-b` TMUX dropped) to `Alt-Shift-*` so the `Ctrl-*` keys pass through to zsh and nvim. Only `Ctrl-h/j/k/l` remain intercepted (for pane navigation).
## Zsh
Emacs mode (`bindkey -e`) is the base.
### Custom bindings (.zshrc)
| Key | Action |
| ---------------- | ---------------------------------------- |
| `Ctrl-U` | Backward kill line |
| `Ctrl-Right` | Forward word |
| `Ctrl-Left` | Backward word |
| `Alt-Right` | Forward word |
| `Alt-Left` | Backward word |
| `Ctrl-Backspace` | Backward kill word |
| `Ctrl-Delete` | Kill word |
| `Ctrl-Z` | Toggle foreground/background |
| `Ctrl-D` | Exit shell (even on non-empty line) |
| `Ctrl-X Ctrl-E` | Edit command in $EDITOR |
| `Ctrl-Y` | Copy command line to clipboard (OSC 52) |
| `.` | Smart dot expansion (.. → ../..) |
| `Shift-Tab` | Accept autosuggestion |
| `Up` / `Down` | History substring search |
| `Ctrl-R` | fzf history search (built-in) |
| `Ctrl-X Ctrl-R` | fzf history search + execute |
| `Ctrl-T` | fzf file picker (built-in) |
| `Alt-C` | fzf cd (built-in) |
| `Alt-Shift-Y` | Copy last command's output (zellij only) |
## Ghostty
### Unbound (disabled defaults)
| Key | Reason |
| ------------------ | --------------------- |
| `Ctrl-Shift-T` | Zellij handles tabs |
| `Ctrl-Shift-N` | Zellij handles panes |
| `Ctrl-Shift-O` | Unneeded |
| `Ctrl-Shift-Enter` | Zellij handles splits |
### Custom bindings
| Key | Action |
| ----------------------------------- | ---------------------------------- |
| `Ctrl-Shift-Up` / `Ctrl-Shift-Down` | Scroll one line up / down |
| `Ctrl-Shift-u` | Copy URL under cursor to clipboard |
| `Alt-u` | Scroll page up |
| `Alt-d` | Scroll page down |
| `Alt-g` | Scroll to top |
| `Alt-Shift-g` | Scroll to bottom |
## Yazi
Only non-default keybinds listed. See `yazi --help` for built-in keys.
| Key | Action |
| ----- | -------------------------- |
| `!` | Open shell here (blocking) |
| `g r` | Go to git root |
| `g .` | Go to dotfiles |
| `g x` | Go to doxfiles |
| `g s` | Go to sync |
| `g S` | Go to screenshots |
Shell: `y` function wraps yazi with cd-on-exit.
## Cross-tool Shared Keys
| Key | Neovim | Zellij | Zsh | Ghostty | Sway |
| --------------- | ------------------------ | ------------------------------- | --- | ---------------- | -------------------- |
| `Ctrl-h/j/k/l` | Split nav (smart-splits) | Pane nav (vim-zellij-navigator) | — | — | — |
| `Alt-h/j/k/l` | Treewalker nav | — | — | — | — |
| `Alt-1..9` | — | Go to tab N | — | — | — |
| `Alt-t` | — | New tab | — | — | — |
| `Alt-q` | — | Detach | — | — | — |
| `Alt-u` | — | — | — | Scroll page up | — |
| `Alt-d` | — | — | — | Scroll page down | — |
| `Super+h/j/k/l` | — | — | — | — | Focus direction |
| `Super+n` | — | — | — | — | Dismiss notification |
## Sway
Mod key: `Super` (Mod4). Only personal additions beyond sway defaults listed.
### Personal keybinds (sway/config)
| Key | Action |
| ----------------------- | ------------------------------------------------------------- |
| `XF86AudioRaiseVolume` | Volume +5% |
| `Super+Ctrl+k` | Volume +5% (non-XF86 alt) |
| `XF86AudioLowerVolume` | Volume -5% |
| `Super+Ctrl+j` | Volume -5% (non-XF86 alt) |
| `XF86AudioMute` | Mute toggle |
| `Super+m` | Mic mute toggle |
| `Super+Shift+m` | Speaker mute toggle |
| `XF86AudioPlay` | Play/pause |
| `Super+Ctrl+space` | Play/pause (non-XF86 alt) |
| `XF86AudioNext` | Next track |
| `Super+Ctrl+l` | Next track (non-XF86 alt) |
| `XF86AudioPrev` | Previous track |
| `Super+Ctrl+h` | Previous track (non-XF86 alt) |
| `XF86MonBrightnessUp` | Brightness +5% (brightnessctl) |
| `Super+Ctrl+]` | Brightness +5% (non-XF86 alt) |
| `XF86MonBrightnessDown` | Brightness -5% (brightnessctl) |
| `Super+Ctrl+[` | Brightness -5% (non-XF86 alt) |
| `XF86AudioMicMute` | Mic mute toggle |
| `XF86Bluetooth` | Bluetooth power toggle (bluetoothctl) |
| `XF86ScreenSaver` | Lock screen + pause media (same as Super+Shift+s) |
| `XF86Sleep` | Suspend system (systemctl suspend) |
| `XF86WLAN` | Toggle Wi-Fi (rfkill) |
| `XF86RFKill` | Toggle all radios (rfkill) |
| `Super+Shift+Return` | Open ghostty with yazi (file manager) |
| `Super+Shift+b` | Launch librewolf |
| `Super+Shift+t` | Floating nvim with a fresh scratch txt under $XDG_RUNTIME_DIR |
| `Super+c` | Floating ipython REPL (quick calculator / scratch python) |
| `Print` | Region screenshot (grim+slurp) |
| `Shift+Print` | Full screenshot (grim) |
| `Super+i` | Dictate toggle (whisper.cpp → wtype + clipboard) |
| `Super+Shift+o` | OCR region (tesseract → clipboard) |
| `Super+Shift+s` | Lock screen + pause media |
| `Super+n` | Dismiss visible notification (also marks it seen) |
| `Super+Shift+n` | Dismiss all visible notifications (mark all seen) |
| `Super+Ctrl+n` | Restore last dismissed; pop it back into the pending set |
| `XF86Favorites` | Notification history picker (Enter copies + dismisses) |
| `Super+p` | Clipboard history picker (wofi; Enter pastes, Alt-d deletes) |
| `Super+Shift+p` | Clipboard history delete entry (Enter deletes) |
| `Super+period` | Emoji picker (bemoji → wofi; types + copies) |
| `Super+Tab` | Next workspace |
| `Super+Shift+Tab` | Previous workspace |
| `Super+]` | Focus next window in container (monocle cycling) |
| `Super+[` | Focus prev window in container (monocle cycling) |
| `XF86Display` | Toggle display mode (laptop-off/side-by-side) |
| `XF86Tools` | Floating pulsemixer (audio mixer TUI) |
| `XF86Keyboard` | Floating glow pager for `~/dotfiles/KEYBINDS.md` |
| `Super+z` then `w` | Display QR for clipboard (wqr) |
| `Super+z` then `r` | Scan QR via webcam, copy to clipboard (rqr) |
| `Super+t` | Toggle Thunderbird (tiled on current workspace) |
### System submode (sway/config)
`Super+x` enters `mode "system"` (mode name shown in waybar). One letter
runs the action and exits the mode; `Escape` or `Return` exits without
acting. Provides non-XF86 access to the rare hardware toggles and TUI
launchers.
| In `system` mode | XF86 equivalent | Action |
| ----------------- | --------------- | --------------------------- |
| `b` | `XF86Bluetooth` | Bluetooth power toggle |
| `w` | `XF86WLAN` | Wi-Fi toggle (rfkill wifi) |
| `r` | `XF86RFKill` | Toggle all radios (rfkill) |
| `s` | `XF86Sleep` | Suspend (systemctl suspend) |
| `d` | `XF86Display` | Display mode toggle |
| `v` | `XF86Tools` | Floating pulsemixer |
| `k` | `XF86Keyboard` | Floating glow KEYBINDS.md |
| `m` | `XF86Favorites` | mako notification history |
| `Escape`/`Return` | — | exit submode |
## Typing / Input
Layout: `us(altgr-intl)` with Caps→Esc and Right Ctrl as Compose
(`xkb_options caps:escape,compose:rctrl`). Normal `'` `"` `` ` `` `~` `^`
behave as-is; accents only fire through AltGr or Compose.
### AltGr (Right Alt) — one or two keystrokes
| Keys | Output |
| ---------------- | ----------------------------- |
| `AltGr+5` | `€` |
| `AltGr+'` then v | `á é í ó ú ý` (dead acute) |
| `AltGr+~` then v | `ã õ ñ` (dead tilde) |
| `AltGr+^` then v | `â ê î ô û` (dead circumflex) |
| `` AltGr+` `` v | `à è ì ò ù` (dead grave) |
| `AltGr+,` then c | `ç` (dead cedilla) |
| `AltGr+Shift+1` | `¡` |
| `AltGr+Shift+/` | `¿` |
| `AltGr+s` | `ß` |
Capitals: hold Shift while pressing the target letter (`AltGr+'` then
`Shift+a` → `Á`).
### Compose (Right Ctrl) — discoverable, extensible
Standard sequences from the system Compose table plus custom PT-PT extras
in `~/.XCompose`. Press and release Compose, then the sequence.
| Sequence | Output |
| --------------- | --------------- |
| `Compose ' a` | `á` (any vowel) |
| `Compose ~ a` | `ã` / `õ` / `ñ` |
| `Compose ^ a` | `â` / `ê` / `ô` |
| `Compose , c` | `ç` |
| `Compose < <` | `«` (PT-PT) |
| `Compose > >` | `»` (PT-PT) |
| `Compose = e` | `€` |
| `Compose o _` | `º` |
| `Compose a _` | `ª` |
| `Compose - - -` | `—` (em dash) |
| `Compose - - .` | `–` (en dash) |
| `Compose . . .` | `…` |
|