# Special thanks to Nicholas Marriott. # Enable RGB color if running in xterm set-option -sa terminal-overrides ",xterm*:Tc" # Change the default $TERM to xterm-256color # Necessary because vim ctrl arrows must be defined through TERM set -g default-terminal "xterm-256color" set-window-option -g xterm-keys on # No bells at all set -g bell-action none # Keep windows around after they exit set -g remain-on-exit off # More history lines set -g history-limit 16384 # Base window is Numero Uno set -g base-index 1 set-window-option -g pane-base-index 1 # Set vi mode when copying set-window-option -g mode-keys vi # compatibility with vim for focus based events set -g focus-events on set -g mouse # KEYBINDINGS # Reload config file bind r source-file ~/.config/tmux/tmux.conf \; display "Reloaded ~/.tmux.conf" # Clipboard bind -T copy-mode-vi v send-keys -X begin-selection bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "oclipp" # Unbind ESC set -sg escape-time 0 # Toggle status bar bind t set-option status # Toggle monitoring window activity bind m set monitor-activity\; display 'monitor-activity #{?monitor-activity,on,off}' bind M run-shell "tmux set monitor-silence #{?monitor-silence,0,10}"\; display "monitor-silence #{?monitor-silence,on,off}" # Toggle synchronized panes (sending keys to every pane) bind y set synchronize-panes\; display 'synchronize-panes #{?synchronize-panes,on,off}' # Paste from tmux buffer bind p paste-buffer # Kill all windows bind x confirm -p "Kill Pane?" kill-pane bind X confirm -p "Kill Window?" kill-window bind M-x confirm -p "Kill Session?" kill-session bind M-X confirm -p "Kill Server?" kill-server # Restart pane bind C-r run -C "respawn-pane -k; send-keys !! 'C-j'" bind C-R respawn-pane -k # Splitting bind v split-window -h -c "#{pane_current_path}" bind s split-window -v -c "#{pane_current_path}" # Swapping left and right a la vim bind -r H swap-pane -U bind -r L swap-pane -D ## Resizing panes bind -n M-H resize-pane -L 5 bind -n M-J resize-pane -D 5 bind -n M-K resize-pane -U 5 bind -n M-L resize-pane -R 5 # Join and break windows bind j command-prompt -1p "Take window:" "join-pane -s %%" bind J command-prompt -1p "Send to window:" "join-pane -t \:%% ; select-window -l" # Break pane without losing focus bind b break-pane -t : # Reset length and shit bind z select-layout main-vertical bind-key h select-pane -L bind-key j select-pane -D bind-key k select-pane -U bind-key l select-pane -R # Pane navigating with h|j|k|l a la vim # Smart pane switching with awareness of Vim splits. # See: https://github.com/christoomey/vim-tmux-navigator is_vim="ps -o state= -o comm= -t '#{pane_tty}' \ | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|l?n?vim?x?|fzf)(diff)?$'" bind-key -n 'M-h' if-shell "$is_vim" 'send-keys M-h' 'select-pane -L' bind-key -n 'M-j' if-shell "$is_vim" 'send-keys M-j' 'select-pane -D' bind-key -n 'M-k' if-shell "$is_vim" 'send-keys M-k' 'select-pane -U' bind-key -n 'M-l' if-shell "$is_vim" 'send-keys M-l' 'select-pane -R' tmux_version='$(tmux -V | sed -En "s/^tmux ([0-9]+(.[0-9]+)?).*/\1/p")' if-shell -b '[ "$(echo "$tmux_version < 3.0" | bc)" = 1 ]' \ "bind-key -n 'C-\\' if-shell \"$is_vim\" 'send-keys C-\\' 'select-pane -l'" if-shell -b '[ "$(echo "$tmux_version >= 3.0" | bc)" = 1 ]' \ "bind-key -n 'C-\\' if-shell \"$is_vim\" 'send-keys C-\\\\' 'select-pane -l'" bind -T copy-mode-vi 'M-h' select-pane -L bind -T copy-mode-vi 'M-j' select-pane -D bind -T copy-mode-vi 'M-k' select-pane -U bind -T copy-mode-vi 'M-l' select-pane -R bind -T copy-mode-vi 'M-\' select-pane -l bind -n M-u previous-window bind -n M-i next-window bind -n M-O last-window bind -n M-U switch-client -p bind -n M-I switch-client -n bind -n M-O switch-client -l # Renaming bind n command-prompt "rename-window '%%'" bind N command-prompt "rename-session '%%'" # Starting new windows bind w new-window -c "$HOME" bind W new-session -c "$HOME" # Show tree bind S choose-tree -Z # Menu for mounting and ejecting devices. bind E display-menu -T "#[align=centre]#I:#W" -x W -y W '' Mount 0 "display-popup -E 'amount'" bind-key -r f run-shell "tmux neww tmux-sessionizer" # Theme #+---------+ #+ Options + #+---------+ set -g status-interval 1 set -g status on #+--------+ #+ Status + #+--------+ #+--- Layout ---+ set -g set-titles-string "[#S: #W] #T" set -g set-titles on set -g status-position bottom set -g window-status-current-style "underscore" set -g status-justify left set -g status-left-length 16 set -g status-left "#[fg=black,bg=blue,bold] #S #[fg=blue,bg=black,nobold,noitalics,nounderscore]" set -g status-right "#[fg=brightblack,bg=black,nobold,noitalics,nounderscore]#[fg=white,bg=brightblack] %H:%M #[fg=cyan,bg=brightblack,nobold,noitalics,nounderscore]#[fg=black,bg=cyan,bold] #{user}@#H " #+--- Colors ---+ set -g status-style bg=black,fg=white #+-------+ #+ Panes + #+-------+ set -g pane-border-style bg=default,fg=brightblack set -g pane-active-border-style bg=default,fg=blue set -g display-panes-colour black set -g display-panes-active-colour brightblack #+------------+ #+ Clock Mode + #+------------+ setw -g clock-mode-colour cyan #+----------+ #+ Messages + #+---------+ set -g message-style bg=brightblack,fg=cyan set -g message-command-style bg=brightblack,fg=cyan #+--- Windows ---+ set -g window-status-format "#[fg=black,bg=brightblack,nobold,noitalics,nounderscore] #[fg=white,bg=brightblack]#I #[fg=white,bg=brightblack,nobold,noitalics,nounderscore] #[fg=white,bg=brightblack]#W #F #[fg=brightblack,bg=black,nobold,noitalics,nounderscore]" set -g window-status-current-format "#[fg=black,bg=cyan,nobold,noitalics,nounderscore] #[fg=black,bg=cyan]#I #[fg=black,bg=cyan,nobold,noitalics,nounderscore] #[fg=black,bg=cyan]#W #F #[fg=cyan,bg=black,nobold,noitalics,nounderscore]" set -g window-status-separator ""