# 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`](https://code.emmathe.dev/lyrathorpe/nixfiles/src/branch/main/home/sway.nix) `config.keybindings` + `config.modes`, plus the home-manager Sway module's built-in defaults | | tmux | [`shell.nix`](https://code.emmathe.dev/lyrathorpe/nixfiles/src/branch/main/home/shell.nix) `programs.tmux` | | zsh line editor | [`shell.nix`](https://code.emmathe.dev/lyrathorpe/nixfiles/src/branch/main/home/shell.nix) `programs.zsh.historySubstringSearch` | | Neovim | [`editor.nix`](https://code.emmathe.dev/lyrathorpe/nixfiles/src/branch/main/home/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 | ### 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 ` 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) | | `ff` | Find files (telescope) | | `fg` | Live grep (telescope) | | `fb` | Switch buffer (telescope) | | `xx` | Diagnostics list (trouble) | | `gc` / `gcc` | Toggle comment (selection / line) | | `gd` | Go to definition (LSP) | | `gr` | List references (LSP) | | `K` | Hover documentation (LSP) | | `rn` | Rename symbol (LSP; `` is `Space`) | | `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 `` 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.