~/oleksandr-ponomarov

Portfolio · Notes · Dotfiles

Search everything

Search case studies, engineering notes, and Dotfiles documentation.

    Keyboard shortcuts

    Keyboard shortcuts configured for macOS, Alacritty, fish, tmux, Neovim, and OpenCode.

    On this page15 sections

    Choose the layer where the shortcut runs. Alacritty, the terminal application, sends many macOS-style shortcuts directly to tmux; fish adds command-line bindings; tmux commands use Ctrl + A as their prefix.

    macOS system shortcuts

    These mappings are applied by the system_defaults Ansible role.

    ShortcutAction
    Cmd+GOpen Spotlight
    Cmd+SpaceSelect the next input source

    The default shortcut for selecting the previous input source is disabled so it does not conflict with the configured next-source binding.

    Alacritty and tmux

    These shortcuts work from Alacritty without first entering the tmux prefix.

    Windows and sessions

    ShortcutAction
    Cmd+NOpen a new Alacritty window
    Cmd+TCreate a tmux window in the current directory
    Cmd+Shift+RRename the tmux session
    Cmd+WKill the current tmux window
    Cmd+XKill the current tmux pane
    ShortcutAction
    Ctrl+TabSelect the next tmux window
    Ctrl+Shift+TabSelect the previous tmux window
    Cmd+1Cmd+9Select tmux window 1–9
    Cmd+FEnter copy mode and search forward
    Cmd+0Reset the Alacritty font size
    ShortcutAction
    Ctrl+Shift+OOpen a URL or path under the pointer: URLs go to the system opener, files open in a new tmux Neovim window
    Cmd+Shift+PCopy a visible file path, including its line number when one is present
    Shift+EnterSend a Shift-modified Enter that a TUI can tell apart from plain Enter

    fish shell

    These bindings act on the current fish command line.

    ShortcutAction
    Alt+SPrepend sudo unless the command line already starts with it
    Ctrl+GOpen the project chooser powered by fzf
    Ctrl+TOpen the fzf directory picker
    Alt+Left / Alt+RightMove the cursor one word backward or forward

    Alacritty sets option_as_alt = "OnlyLeft", so the Alt bindings above use the left Option key. fzf runs with --tmux, so its pickers open in a tmux popup whenever one is available. The fzf.fish plugin installs further pickers on its own default keys.

    tmux prefix commands

    Press Ctrl+A, release it, and then press the command key. Press Ctrl+A twice to send a literal Ctrl+A through to the program in the pane.

    Prefix Ctrl+A then release

    Create and arrange

    CommandAction
    Ctrl+A then cCreate a window in the current directory
    Ctrl+A then rRename the current window
    Ctrl+A then RRename the current session
    Ctrl+A then |Split the pane horizontally
    Ctrl+A then _Split the pane vertically
    Ctrl+A then +Toggle pane zoom
    Ctrl+A then mMove the current window to a prompted index
    Ctrl+A then LLink a window from another session

    Move around

    CommandAction
    Ctrl+A then h / j / k / lMove one pane left, down, up, or right
    Ctrl+A then [ / ]Select the previous / next pane
    Ctrl+A then { / }Select the previous / next window
    Ctrl+A then TabReturn to the most recently used window
    Ctrl+A then \Swap the current pane with pane 1, or select pane 1
    Ctrl+A then Ctrl+ORotate the panes downward

    Agentic tasks

    CommandAction
    Ctrl+A then Ctrl+GStart or reopen an agent task: pick a repository, name the task, get a git worktree with an OpenCode window
    Ctrl+A then SCreate or attach a context session by name, then open the task launcher
    Ctrl+A then Ctrl+DOpen the workmux agent dashboard

    Close and detach

    CommandAction
    Ctrl+A then xKill the current pane
    Ctrl+A then XKill the current window
    Ctrl+A then Ctrl+XConfirm and kill every other window
    Ctrl+A then QConfirm and kill the session
    Ctrl+A then dDetach this client
    Ctrl+A then DDetach other clients when present

    Configuration and copy mode

    CommandAction
    Ctrl+A then Ctrl+EEdit tmux.conf, then reload it
    Ctrl+A then Ctrl+RReload tmux.conf
    Ctrl+SEnter copy mode without the prefix
    Ctrl+A then pPaste the latest tmux buffer
    Ctrl+A then Ctrl+PChoose a tmux buffer

    Copy mode uses vi keys and supports the mouse wheel, Page Up and Page Down, and Option-based scrolling by line or half page.

    Neovim additions

    LazyVim provides most editor mappings. This repository overrides or adds the following:

    ModeShortcutAction
    NormaloCreate a blank line below without staying in Insert mode
    NormalOCreate a blank line above without staying in Insert mode
    Normal<leader><leader>Clear search highlights
    Normalys / ds / csAdd, delete, or replace a surrounding pair
    Normal and Visual<leader>/Comment the current line or the selection
    Normal and Visual<S-h> / <S-l>Move the line or selection left or right
    Normal and Visual<S-j> / <S-k>Move the line or selection down or up
    Normal and VisualgzTitle-case the line or the selection
    Normal, Operator, and Visualw / bStep by subword, so camelCase and snake_case split into parts
    Visual> / <Indent or outdent while keeping the selection active
    Insert<C-j> / <C-k>Select the next or previous completion item

    Three LazyVim defaults are removed rather than remapped: <C-s> for save in every mode, and the fzf-lua pickers on <leader><space> and <leader>/. The second of those keys is reused for commenting above.

    OpenCode

    These act inside the OpenCode TUI, so the tmux prefix is not involved.

    ShortcutAction
    Ctrl+RRecord a voice prompt, transcribe it, and insert the cleaned text

    Ctrl+R is OpenCode’s factory binding for renaming a session. The managed tui.json disables that binding so the voice plugin can own the key; rename a session with the /rename command instead.

    Source of truth