Keybindings reference
Every keyboard shortcut configured across this desktop, and where it is defined.
Everything here is managed declaratively through Nix — edit the listed file and
rebuild, never the generated dotfiles.
| Area |
Defined in |
| Sway (compositor) |
sway.nix config.keybindings + config.modes, plus the home-manager Sway module's built-in defaults |
| tmux |
shell.nix programs.tmux |
| zsh line editor |
shell.nix programs.zsh.historySubstringSearch |
| Neovim |
editor.nix programs.nixvim |
| foot (terminal) |
foot package defaults — only colours are themed (in sway.nix) |
Conventions
- Super is the
Mod4 / logo (Windows/Command) key; Alt is Mod1.
- Letter keys are keysyms (the character produced), not physical positions.
The keyboard is Dvorak (
us/dvorak), so e.g. "Super+s" is whatever key
types s in Dvorak.
- Shortcuts apply to every Sway host (MBP, T400, Mac Pro); brightness keys are
laptop-only, as noted.
Sway
Applications & session
| Shortcut |
Action |
Super+Return |
Open a terminal (foot) |
Super+Space |
App launcher (sway-launcher-desktop in a floating foot) |
Super+d |
App launcher (same as above; module default) |
Super+e |
File manager (nemo) |
Super+c |
Clipboard history picker (clipman → fuzzel) |
Super+l |
Lock screen (swaylock) |
Super+Shift+q |
Close the focused window |
Super+Shift+c |
Reload the Sway config |
Super+Shift+e |
Exit Sway (asks for confirmation) |
Focus
| Shortcut |
Action |
Super+←/↓/↑/→ |
Move focus by direction |
Super+h/j/k |
Move focus left / down / up (vim-style) |
Super+a |
Focus the parent container |
Super+Alt+Space |
Toggle focus between tiling and floating |
Note: vim focus-right would be Super+l, but that is bound to lock here;
use Super+→.
Moving windows
| Shortcut |
Action |
Super+Shift+←/↓/↑/→ |
Move the window by direction |
Super+Shift+h/j/k/l |
Move the window left / down / up / right |
Super+Shift+Space |
Toggle the window floating |
Mouse (with Super held): left-drag moves a window, right-drag resizes it.
Layout
| Shortcut |
Action |
Super+b |
Split horizontally |
Super+v |
Split vertically |
Super+s |
Stacking layout |
Super+w |
Tabbed layout |
Super+f |
Toggle fullscreen |
Super+y |
Layout submenu: s stacking · w tabbed · e toggle split · Return/Esc exit |
The layout submenu's e (toggle split) is the home for that action since
Super+e now opens the file manager.
Workspaces
| Shortcut |
Action |
Super+1…0 |
Switch to workspace 1…10 |
Super+Shift+1…0 |
Move the window to workspace 1…10 |
Super+z |
Previous workspace |
Super+x |
Next workspace |
Scratchpad
| Shortcut |
Action |
Super+Shift+- |
Move the window to the scratchpad |
Super+- |
Show / cycle the scratchpad |
| Shortcut |
Action |
Super+r |
Resize mode: arrow keys resize; Return/Esc exit |
Super+y |
Layout mode (see Layout above) |
Super+Shift+x |
Power menu: l lock · e log out · s sleep · r reboot · Shift+s shutdown · Return/Esc exit |
Screenshots
| Shortcut |
Action |
Print |
Select a region → swappy (annotate/save) |
Shift+Print |
Focused window → swappy |
Audio & media
| Shortcut |
Action |
XF86AudioRaiseVolume / XF86AudioLowerVolume |
Volume ±5% (wpctl) |
XF86AudioMute |
Toggle output mute |
XF86AudioMicMute |
Toggle microphone mute |
XF86AudioPlay |
Play/pause (playerctl) |
XF86AudioNext / XF86AudioPrev |
Next / previous track |
Brightness — laptops only
| Shortcut |
Action |
XF86MonBrightnessUp / XF86MonBrightnessDown |
Backlight ±5% (brightnessctl) |
Present only on portable hosts (T400, MBP); desktops have no internal backlight.
tmux
Prefix is Ctrl+b (default). Copy mode uses vi keys.
| Shortcut |
Action |
Ctrl+b then v |
Split into left/right panes |
Ctrl+b then s |
Split into top/bottom panes |
Ctrl+h/j/k/l |
Move between panes — and into/out of vim splits — seamlessly (vim-tmux-navigator, no prefix) |
Alt+←/→/↑/↓ |
Switch pane by direction (no prefix needed) |
Ctrl+b then [ |
Enter copy mode (then vi motions; Space/Enter to select/copy) |
Ctrl+b then z |
Zoom / unzoom the focused pane |
Ctrl+b then c |
New window |
Ctrl+b then n / p |
Next / previous window |
Ctrl+b then d |
Detach |
Ctrl+b then Ctrl+s / Ctrl+r |
Save / restore the session (resurrect; continuum also auto-saves and restores on start) |
| Mouse |
Enabled — click to focus, drag borders, scroll, select |
The stock split keys % and " are unbound; use v / s above. Ctrl+b
then s is therefore a split, not the session tree.
Sessions persist across reboots (resurrect + continuum). Terminals auto-start
tmux; NO_TMUX=1 <terminal> opens a bare shell instead.
Only colours are themed; these are foot's default key bindings.
| Shortcut |
Action |
Ctrl+Shift+c / Ctrl+Shift+v |
Copy / paste (clipboard) |
Shift+Insert |
Paste primary selection |
Ctrl+Shift+r |
Search scrollback |
Ctrl++ / Ctrl+- / Ctrl+0 |
Font larger / smaller / reset |
Ctrl+Shift+u |
URL mode (jump to/open links) |
Ctrl+Shift+n |
Spawn a new terminal |
Shift+PageUp / Shift+PageDown |
Scroll back / forward |
Neovim
Leader is Space. Ctrl+h/j/k/l is shared with tmux (see above): it moves
across vim splits and tmux panes seamlessly. Everything else is stock vim, plus:
| Shortcut |
Action |
,``, |
Toggle the file tree (nvim-tree) — comma pressed twice |
Ctrl+h/j/k/l |
Move between vim splits / tmux panes (vim-tmux-navigator) |
<leader>ff |
Find files (telescope) |
<leader>fg |
Live grep (telescope) |
<leader>fb |
Switch buffer (telescope) |
<leader>xx |
Diagnostics list (trouble) |
gc / gcc |
Toggle comment (selection / line) |
gd |
Go to definition (LSP) |
gr |
List references (LSP) |
K |
Hover documentation (LSP) |
<leader>rn |
Rename symbol (LSP; <leader> is Space) |
<leader>ca |
Code action (LSP) |
Active only while the completion popup is open (it appears as you type, e.g.
file paths):
| Shortcut |
Action |
Tab / Shift+Tab |
Select next / previous item |
Ctrl+n / Ctrl+p |
Select next / previous item |
Ctrl+Space |
Open the completion menu |
Enter |
Confirm the highlighted item (no auto-select; otherwise a newline) |
Ctrl+e |
Dismiss the menu |
LSP covers Nix, Lua, Python and Terraform (the work box adds C# and Helm).
Files are formatted on save (conform-nvim). :Git opens fugitive; gitsigns
shows gutter signs. which-key pops up after <leader> to show the rest.
zsh
| Shortcut |
Action |
↑ / ↓ |
History substring search — type a fragment first, then the arrows cycle matching past commands |
Bound for both CSI and SS3 cursor sequences, so it works in foot, iTerm2 and
the Linux TTY alike.