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) \
|
2023-12-23 20:13:51 -07:00
|
|
|
|
#[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"
|