[tmux](https://github.com/tmux/tmux/wiki) serves as a "window manager" for the terminal. `~/.tmux.conf` is a magical place for tweaking `tmux` to your liking. Mine began years ago on the careful advice of a friend with the remapping of caps-lock to `Control`. And maybe deep down I just want more control in life? ## Configuration These settings make sense to me both ergonomically and visually. With `<` and `>` as metaphors for left and right and `|` and `-` visually representing a horizontal and vertical line ```bash # Set prefix to Ctrl-a, ergonomic when caps lock is set to Ctrl set-option -g prefix C-a bind-key a send-prefix # Begin numbering at 1 set -g base-index 1 # Next/Previous session with ( ) bind-key 9 switch-client -p bind-key 0 switch-client -n # Tag sessions and windows with T t bind-key T command-prompt -I "#S" "rename-session '%%'" bind-key t command-prompt -I "#W" "rename-window '%%'" # New window with n bind-key n new-window -c "#{pane_current_path}" # Next/Previous window with < > bind-key , previous-window bind-key . next-window # Vertical/horizontal window split with | - bind-key \\ split-window -h -c "#{pane_current_path}" bind-key - split-window -c "#{pane_current_path}" # Resize panes sans-prefix with Alt-arrow bind-key -n M-Left resize-pane -L 5 bind-key -n M-Right resize-pane -R 5 bind-key -n M-Up resize-pane -U 5 bind-key -n M-Down resize-pane -D 5 # When closing a window we auto renumber set-option -g renumber-windows on # Allow mouse click to select pane set -g mouse on # Turn off auto rename! set-window-option -g automatic-rename off set-option -g allow-rename off # Colors, status bar set -g status-style fg=gray set -g pane-active-border-style fg=gray set-window-option -g window-status-current-style "fg=black,bg=gray" set -g status-right '#[fg=gray] %a, %b %d #[fg=gray] %I:%M %p ' # Prevent session name truncation set -g status-left-length 32 # Refresh every second set -g status-interval 4 set -s escape-time 0 # Ensure zsh is used set -g default-shell /bin/zsh # Modal pane selection bind h select-pane -L bind j select-pane -D bind k select-pane -U bind l select-pane -R # Support italics set-option default-terminal "tmux-256color" # Reload configuration with prefix r bind-key r source-file ~/.tmux.conf \; display-message "config reloaded" ``` ## Scripting workspace start-up When I get started with work I run `./dev.sh` to get a preferred layout and open up my brain of notes. `C-m` is the return key to execute the command. ```bash #!/bin/bash sess="dev" tmux new-session -d -s $sess # Open brain-3 win=1 tmux rename-window -t $sess:$win '🧠' tmux send-keys -t $sess:$win 'cd ~/brain-3 && hx .' C-m # Open code in split win=2 tmux new-window -t $sess:$win -n '⚡️' tmux send-keys -t $sess:$win 'cd ~/code && clear' C-m tmux split-window -h tmux send-keys -t $sess:$win 'cd ~/code && clear' C-m # launch the session tmux attach -t $sess ``` ## Defaults The defaults are listed in the [tmux(1)](http://man.openbsd.org/OpenBSD-current/man1/tmux.1#DEFAULT_KEY_BINDINGS) manpage. ## Thanks https://ryan.himmelwright.net/post/scripting-tmux-workspaces/ https://how-to.dev/how-to-create-tmux-session-with-a-script