Files
nixfiles/docs/keybindings.md
Emma Thorpe dcc13f94e0
CI / flake (push) Skipped
CI / flake (pull_request) Successful in 4m21s
docs: move prose documentation into docs/ so the docs site publishes it
The docs-site build syncs this repo's README.md and docs/ into the site
tree; nothing else is copied. All prose apart from the README therefore lived
outside the sync and never appeared on https://docs.lyrapup.pet/nixfiles/, and
the one page that did publish carried 18 link targets that resolved to nothing.

Moves:

  home/README.md           -> docs/shell.md
  home/KEYBINDINGS.md      -> docs/keybindings.md
  hosts/<Name>/README.md   -> docs/hosts/<name>.md

docs/.pages and docs/hosts/.pages give the awesome-pages plugin an explicit
order; new pages are picked up by the trailing '...' without an edit.

Links are rewritten so a single URL is correct in both Gitea and the published
site: absolute Gitea source URLs for .nix files and directories, relative links
between pages under docs/, and absolute docs.lyrapup.pet URLs from the root
README, which the build republishes at a different depth from the rest of the
tree. In-code comments that pointed at a moved README are updated to the new
path.

The README gains a Documentation section covering the sync contract and the
linking rules, and CLAUDE.md carries the short version so future edits do not
reintroduce unsynced pages or dead links.

Verified by reproducing the docs-site assembly locally against its pinned
toolchain (mkdocs 1.6.1, mkdocs-material 9.7.7, awesome-pages 2.10.1): pages
render at the URLs used above and in the declared order.
2026-08-19 17:38:50 +01:00

13 KiB

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+10 Switch to workspace 1…10
Super+Shift+10 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

Modes (submenus)

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.


foot (terminal)

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)

Completion menu (nvim-cmp)

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.