180 lines
4.9 KiB
Plaintext
180 lines
4.9 KiB
Plaintext
# 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
|
||
set-option -s set-clipboard on
|
||
set -g allow-passthrough on
|
||
|
||
# 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}'
|
||
bind t new-window -c "#{pane_current_path}"
|
||
|
||
# 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
|
||
|
||
# Show the time
|
||
bind T clock-mode
|
||
|
||
# Switch sessions with ( )
|
||
bind-key -n M-0 switch-client -n
|
||
bind-key -n M-9 switch-client -p
|
||
|
||
unbind-key w
|
||
bind-key w choose-session
|
||
|
||
# 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\;\
|
||
send-keys -X search-backward "( |Compiling)" # For Cargo compiles too
|
||
|
||
# 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"
|
||
set -g status-fg "color250"
|
||
|
||
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 "\
|
||
#[fg=black, bg=color250]\
|
||
#[fg=black, bg=color250] #I #W \
|
||
#[fg=color250, bg=black]"
|
||
|
||
set-option -g status-right "\
|
||
#[fg=yellow, bg=black] #S #(whoami) \
|
||
#[fg=black, bg=yellow] #(uname -s) "
|
||
|
||
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"
|