dotfiles/tmux/tmux.conf

180 lines
4.9 KiB
Plaintext
Raw Normal View History

2023-12-23 20:13:47 -07:00
# General Settings ==================================================
# Ctrl-space as prefix
unbind-key C-b
unbind-key C-Space
set-option -g prefix C-Space
bind-key C-Space send-prefix
set -s copy-command 'wl-copy'
set -g mouse on
# vi keybinds in copy mode
set-window-option -g mode-keys vi
set -g mode-keys vi
2024-08-31 20:06:16 -06:00
set-option -s set-clipboard on
set -g allow-passthrough on
2023-12-23 20:13:47 -07:00
# Start window index at 1, for chromium-like tab switching
set -g base-index 1
# 100k line scrollback
set-option -g history-limit 100000
# Avoid ESC delay
set -s escape-time 0
# Full colors
set -g default-terminal "xterm-256color" # 'xterm' not 'tmux' for vim's sake
set -ag terminal-overrides ",*256*:RGB"
# Window and Panes ==================================================
# Fast Alt-bound keybinds
# Adjacent windows
bind-key -n M-l next
bind-key -n M-h prev
# Move between panes. Mix of vim up/down and vimium's tabs left/right
bind-key -n M-k select-pane -t '{top-right}'
bind-key -n M-j select-pane -t '{bottom-left}'
# Move windows
bind-key -n M-[ swap-window -t -1 \; prev
bind-key -n M-] swap-window -t +1 \; next
# Goto window, like chromium tabs
bind-key -n M-1 select-window -t 1
bind-key -n M-2 select-window -t 2
bind-key -n M-3 select-window -t 3
bind-key -n M-4 select-window -t 4
bind-key -n M-5 select-window -t 5
bind-key -n M-6 select-window -t 6
bind-key -n M-7 select-window -t 7
bind-key -n M-8 select-window -t '{end}'
# Slower prefix-bound keybinds
# Move between panes
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# Resize panes
bind -r C-h resize-pane -L
bind -r C-j resize-pane -D
bind -r C-k resize-pane -U
bind -r C-l resize-pane -R
# Swap panes
bind-key L swap-pane -s '{right-of}'
bind-key K swap-pane -s '{up-of}'
bind-key J swap-pane -s '{down-of}'
bind-key H swap-pane -s '{left-of}'
# Split panes like vim
bind v split-window -h -c '#{pane_current_path}'
bind s split-window -v -c '#{pane_current_path}'
2023-12-23 20:13:58 -07:00
bind t new-window -c "#{pane_current_path}"
2023-12-23 20:13:47 -07:00
# Move current pane between windows
bind-key g command-prompt -p "grab pane from:" "join-pane -s '%%'"
bind-key m command-prompt -p "move pane to:" "join-pane -t '%%'"
# Pop out current pane into a new window
bind-key p break-pane -t :
# Toggle pane synchronization
bind-key C-s setw synchronize-panes
2023-12-23 20:13:58 -07:00
# Show the time
bind T clock-mode
2023-12-23 20:13:47 -07:00
# Switch sessions with ( )
bind-key -n M-0 switch-client -n
bind-key -n M-9 switch-client -p
2023-12-23 20:14:18 -07:00
unbind-key w
bind-key w choose-session
2023-12-23 20:13:47 -07:00
# Tmux Keybinds =====================================================
# Reload tmux quickly
unbind R
bind R source-file ~/.config/tmux/tmux.conf \; display 'Reloaded tmux config'
# Faster command prompt
bind ';' command-prompt -I ""
# F12 toggles the outer tmux session's key interception. Keys get passed
# through to the inner session
bind -T root F12 \
set prefix None \;\
set key-table off \;\
if -F '#{pane_in_mode}' 'send-keys -X cancel' \;\
set status-position top \;\
refresh-client -S
bind -T off F12 \
set -u prefix C-Space \;\
set -u key-table \;\
set status-position bottom \;\
refresh-client -S
# Copy mode keybinds
# Move to line ends
bind-key -T copy-mode-vi 'L' send-keys '$'
bind-key -T copy-mode-vi 'H' send-keys '^'
# Navigate to previous command prompt
bind-key b copy-mode\;\
send-keys -X start-of-line\;\
2023-12-23 20:14:18 -07:00
send-keys -X search-backward "( |Compiling)" # For Cargo compiles too
2023-12-23 20:13:47 -07:00
# Copy mode selection
bind P paste-buffer
bind-key -T copy-mode-vi v send-keys -X begin-selection
bind-key -T copy-mode-vi C-v send-keys -X rectangle-toggle
bind-key -T copy-mode-vi C-k send-keys -X cancel
# Copy via mouse selection or y key
bind-key -T copy-mode-vi y send-keys -X copy-pipe 'wl-copy'
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe 'wl-copy'
# Statusline ========================================================
set-option -g status-position bottom
set -g status-left-length 32
set -g status-bg "black"
2024-09-30 17:41:38 -06:00
set -g status-fg "color250"
2023-12-23 20:13:47 -07:00
set-option -g status-left "#[fg=yellow, bg=black bold] #H "
set-window-option -g window-status-current-format "\
#[fg=black, bg=green] #I* \
#[fg=black, bg=green bold] #W \
#[fg=green, bg=black]"
set-window-option -g window-status-format "\
2024-09-30 17:41:38 -06:00
#[fg=black, bg=color250]\
#[fg=black, bg=color250] #I  #W \
#[fg=color250, bg=black]"
2023-12-23 20:13:47 -07:00
set-option -g status-right "\
#[fg=yellow, bg=black] #S  #(whoami) \
#[fg=black, bg=yellow] #(uname -s) "
2023-12-23 20:13:47 -07:00
set-window-option -g window-status-separator ''
# Plugins ===========================================================
set -g @plugin 'nhdaly/tmux-better-mouse-mode'
set -g @scroll-speed-num-lines-per-scroll "1"
set -g @emulate-scroll-for-no-mouse-alternate-buffer "on" # Scroll manpages
set -g @plugin 'mattdavis90/base16-tmux'
set -g @colors-base16 'gruvbox-light-soft'
run '~/.config/tmux/plugins/tpm/tpm'
# Overwriting options ===============================================
set -g pane-active-border-style "fg=white"
set -g pane-border-style "fg=brightblack"