This document explains how tmux session management and layouts work in this dotfiles setup.
This setup uses a combination of tools to provide powerful tmux session management with predefined layouts:
- tmux - Terminal multiplexer
- TPM (Tmux Plugin Manager) - Plugin management
- Tmuxinator - Full session configurations with commands (
~/.config/tmuxinator/) - sesh - Smart session selector that integrates everything
- fzf - Fuzzy finder for interactive selection
Location: ~/.config/tmuxinator/*.yml
Full session configurations that create new windows/panes with specific commands. Use these when starting fresh on a project.
Available configs:
| Config | Description |
|---|---|
growth-engine |
Devspace dev environment with 7 panes |
Access via sesh (Ctrl+t + s) or tmuxinator start <name>.
The main tmux configuration is in dot_tmux.conf with:
- Prefix key:
Ctrl+t - Custom keybindings for pane navigation using
mnei(Colemak-inspired) - Sesh integration bound to
Ctrl+t + s - Theme: Gruvbox (via tmux-gruvbox plugin)
TPM manages tmux plugins. Installed plugins are defined in dot_tmux.conf:
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'z3z1ma/tmux-gruvbox'Installing plugins:
- Press
Ctrl+t + I(capital I) to install plugins - Press
Ctrl+t + Uto update plugins - Press
Ctrl+t + Alt+uto uninstall removed plugins
Sesh is a smart session manager that aggregates sessions from multiple sources:
- tmux sessions - Currently active tmux sessions
- tmuxinator configs - Predefined layouts from
~/.config/tmuxinator/ - sesh configs - Custom session configs from
~/.config/sesh/sesh.toml - zoxide - Frequently visited directories
Keybinding: Ctrl+t + s opens the sesh fuzzy finder
Within the sesh picker:
Ctrl+a- Show all sources (tmux + configs + tmuxinator + zoxide)Ctrl+t- Show only tmux sessionsCtrl+g- Show only sesh config sessionsCtrl+x- Show only zoxide directoriesCtrl+f- Find directories with fdCtrl+d- Kill selected tmux session
For quick one-off layouts without saving:
-
Create panes:
Ctrl+t + /- Split verticallyCtrl+t + -- Split horizontally
-
Navigate panes:
Alt+m/n/e/i- Move between panes (no prefix needed)
-
Resize panes:
Ctrl+t + Ctrl+Arrow- Resize by 5 pixelsCtrl+t + Alt+m/n/e/i- Resize by 1 pixel
-
Cycle layouts:
Ctrl+t + Space- Cycle through built-in layouts
| Command | Description |
|---|---|
Ctrl+t + s |
Open sesh session picker |
Ctrl+t + t |
Switch to last session (via sesh) |
Ctrl+t + c |
Create new window |
Ctrl+t + / |
Split pane vertically |
Ctrl+t + - |
Split pane horizontally |
Ctrl+t + Space |
Cycle through built-in layouts |
Alt+m/n/e/i |
Navigate panes |
Alt+M/I |
Navigate windows |
Ctrl+t + r |
Reload tmux config |
# Start a session with full setup
tmuxinator start growth-engine
mux start growth-engine
# Edit a config
tmuxinator edit growth-engine
mux e growth-engine
# List all configs
tmuxinator list# List all sessions
sesh list
# List only tmux sessions
sesh list -t
# Connect to a session
sesh connect <session-name>
# Connect to last session
sesh lastInteractive fzf-driven popups available from anywhere in tmux (no prefix needed).
| Keybinding | Description |
|---|---|
Alt+s |
Session picker (sesh) - browse tmux sessions, zoxide dirs, configs |
Alt+t |
Switch to last session |
Alt+Tab / Alt+Shift+Tab |
Cycle sessions forward/backward |
Alt+w |
Worktree branch selector - pick repo + branch, creates worktree session |
Alt+g |
GitHub PR popup (toggle) |
| Keybinding | Description |
|---|---|
Alt+y |
Shell command history browser - search across command, directory, and output |
Alt+H |
Tmux scrollback search - raw pane content, useful inside subshells |
Alt+c |
Claude pane message picker - browse and copy messages from the focused Claude Code pane |
| Keybinding | Description |
|---|---|
Alt+v |
Enter copy mode |
Alt+u |
Enter copy mode and scroll up half page |
m/n/e/i |
Navigate in copy mode (left/down/up/right, homerow) |
Alt+u / Alt+d |
Half page up/down while in copy mode |
v |
Begin selection |
y |
Copy selection to clipboard (pbcopy) |
Requires the command history logger sourced automatically from .zshrc. Output capture is opt-in to avoid prompt latency:
cmd-capture-on # enable output capture for this session
cmd-capture-off # disableHistory is logged to ~/.local/share/cmd-history/history.jsonl. Searches across command text, directory, and captured output. Stage 2 lets you pick what to copy: command, output, command+output, directory+command, or all fields.
Alt+c captures the scrollback of the currently focused pane, parses it into user/assistant messages, and presents them in fzf with a bat-highlighted preview. Press enter to copy the selected message to the clipboard.
Works best when focused on a Claude Code pane. The UI chrome (input box, status line) is automatically stripped from the last message.
-
Use tmuxinator for fresh starts - When you need specific commands running in specific panes
-
Sesh is the main entry point - Use
Ctrl+t + sto access sessions, tmuxinator configs, and directories -
Session switching -
Ctrl+t + tquickly toggles between your last two sessions
Tmuxinator config not showing in sesh:
- Ensure config is in
~/.config/tmuxinator/ - Check that the config has a valid
name:field - Restart tmux or reload:
tmux source ~/.tmux.conf
Plugins not working:
- Install TPM:
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm - Press
Ctrl+t + Ito install plugins - Restart tmux