stow_dotfiles/tmux/.config/tmux/tmux.conf.bak
2024-09-16 14:27:10 -04:00

181 lines
12 KiB
Text

# GENERAL SETTINGS
set -g default-terminal "screen-256color" # 256 color
set -sa terminal-features ",*256col*:RGB" # True color support
set -as terminal-overrides ',*:Smulx=\E[4::%p1%dm' # Undercurl support
set -as terminal-overrides ',*:Setulc=\E[58::2::%p1%{65536}%/%d::%p1%{256}%/%{255}%&%d::%p1%{255}%&%d%;m' # Underscore colors
set -sg escape-time 0 # Time for tmux to wait for key sequence
set -g history-limit 50000 # Maximum number of lines held in window history
set -s buffer-limit 20 # Number of buffers, older than limit buffer will be removed
set -g display-time 1500 # Time for which status line messages and indicators are displayed in miliseconds, 0 means diplay until a key is pressed
setw -g remain-on-exit off # Destroy window when program exits
set -g repeat-time 500 # Typing command without pressing prefix key again in the specified time in miliseconds
setw -g automatic-rename on # Automatic window renaming
setw -g automatic-rename-format '#{pane_current_command}' # Format of automatic window renaming
setw -g allow-rename off # Allow programs to change the window name
setw -g xterm-keys on # Xterm style function key sequences
set -g mouse on # Enable mouse support
set -g status-keys vi # Use vi style keybindings in command prompt
setw -g mode-keys vi # Use vi style keybindings in copy mode
set -g base-index 1 # Starting index for new window
set -g pane-base-index 1 # Starting index for new pane
setw -g aggressive-resize on # Fix from a smaller client issue
# KEYBINDING SETTINGS
# Unbind the default key bindings
unbind C-b # send-prefix
unbind '"' # split-window
unbind '$' # command-prompt -I'#S' \"rename-session -- '%%'\"
unbind % # split-window -h
unbind & # confirm-before -p\"kill-window #W? (y/n)\" kill-window
unbind , # command-prompt -I'#W' \"rename-window -- '%%'\"
unbind - # delete-buffer
unbind . # command-prompt \"move-window -t '%%'\"
unbind \; # last-pane
unbind = # choose-buffer -Z
unbind E # select-layout -E
unbind L # switch-client -l
unbind M # select-pane -M
unbind [ # copy-mode
unbind ] # paste-buffer
unbind f # command-prompt \"find-window -Z -- '%%'\"
unbind l # last-window
unbind n # next-window
unbind o # select-pane -t:.+
unbind p # previous-window
unbind r # refresh-client
unbind s # choose-tree -Zs
unbind w # choose-tree -Zw
unbind x # confirm-before -p\"kill-pane #P? (y/n)\" kill-pane"
unbind '{' # swap-pane -U
unbind '}' # swap-pane -D
unbind M-n # next-window -a
unbind M-p # previous-window -a
unbind M-Up # resize-pane -U 5
unbind M-Down # resize-pane -D 5
unbind M-Left # resize-pane -L 5
unbind M-Right # resize-pane -R 5
unbind C-Up # resize-pane -U
unbind C-Down # resize-pane -D
unbind C-Left # resize-pane -L
unbind C-Right # resize-pane -R
# Now set our custom key bindings
set -g prefix M-a # Prefix key is now Alt+a
bind -n M-z send-prefix # Prefix key for client Tmux is Alt+z
# After pressing prefix key, you can continue with keybindings below to do stuffs
bind M-r source-file $HOME/.tmux.conf \; display 'Tmux Reloaded' # Alt+r to reload configuration
bind f choose-tree # f to find session, window, or pane from a list
bind M-s split-window -h # Alt+s to make new split window
bind M-v split-window -v # Alt+v to make new vertical split window
bind r command-prompt -I'#W' "rename-window -- '%%'" # r to rename current window
bind R command-prompt -I'#S' "rename-session -- '%%'" # R to rename current session
# Alt+e to edit tmux.conf.local file
bind M-e new-window "sh -c '\${EDITOR:-vim} ~/.tmux.conf.local && tmux source ~/.tmux.conf && tmux display \"Tmux Reloaded\"'"
# Moving between panes
bind -r h select-pane -L # h to move left
bind -r j select-pane -D # j to move down
bind -r k select-pane -U # k to move up
bind -r l select-pane -R # l to move right
bind -r > swap-pane -D # > to swap to the next pane
bind -r < swap-pane -U # < to swap to the previous pane
# Resizing panes
bind -r H resize-pane -L 2 # H to resize to the left
bind -r J resize-pane -D 2 # J to resize downwards
bind -r K resize-pane -U 2 # K to resize upwards
bind -r L resize-pane -R 2 # L to resize to the right
# Moving between windows
bind -r M-n next-window # Alt+n to move next window
bind -r M-p previous-window # Alt+p to move previous window
bind -r Tab next-window # Tab to move next window (in case your window manager use M-l already)
bind S choose-window "join-pane -v -t "%%"" # S to join pane to selected window in horizontal split
bind V choose-window "join-pane -h -t "%%"" # V to join pane to selected window in vertical split
# Closing everything
bind x kill-pane # x to close pane
bind X kill-window # X to close window
bind M-x confirm-before -p"kill other windows? (y/n)" "kill-window -a" # Alt+x to close other windows
# Copy and paste to bufer
bind a copy-mode # a to trigger copy mode
bind p paste-buffer # p to paste from top buffer
bind P choose-buffer # Alt+p to choose buffer to paste
# Copy mode keybindings
bind -T copy-mode-vi v send -X begin-selection # v in copy mode to begin selection
bind -T copy-mode-vi M-v send -X rectangle-toggle # Alt+v in copy mode to toggle rectangle select
bind -T copy-mode-vi y send -X copy-selection-and-cancel # y in copy mode to yank selection
bind -T copy-mode-vi Y send -X copy-line # Y in copy mode to yank a line
bind -T copy-mode-vi Escape send -X cancel # Esc in copy mode to exit copy mode
# macOS clipboard support with pbcopy
if -b "command -v reattach-to-user-namespace > /dev/null 2>&1" "\
run 'tmux set -g default-command \"exec $(tmux show -gv default-shell) 2>/dev/null & reattach-to-user-namespace -l $(tmux show -gv default-shell)\"'"
if -b "command -v pbcopy > /dev/null 2>&1" " \
bind -T copy-mode-vi y send -X copy-pipe-and-cancel 'reattach-to-user-namespace pbcopy'; \
bind -T copy-mode-vi Y send -X copy-line \\; run 'tmux save-buffer - | reattach-to-user-namespace pbcopy'; \
bind -T copy-mode-vi D send -X copy-end-of-line \\; run 'tmux save-buffer - | reattach-to-user-namespace pbcopy'; \
bind -T copy-mode-vi MouseDragEnd1Pane send -X copy-pipe-and-cancel 'reattach-to-user-namespace pbcopy'"
# Linux clipboard support with xsel or xclip
if -b "command -v xsel > /dev/null 2>&1" " \
bind -T copy-mode-vi y send -X copy-pipe-and-cancel 'xsel -i -b'; \
bind -T copy-mode-vi Y send -X copy-line \\; run 'tmux save-buffer - | xsel -i -b'; \
bind -T copy-mode-vi D send -X copy-end-of-line \\; run 'tmux save-buffer - | xsel -i -b'; \
bind -T copy-mode-vi MouseDragEnd1Pane send -X copy-pipe-and-cancel 'xsel -i -b'"
if -b "! command -v xsel > /dev/null 2>&1 && command -v xclip > /dev/null 2>&1" " \
bind -T copy-mode-vi y send -X copy-pipe-and-cancel 'xclip -i -selection clipboard >/dev/null 2>&1'; \
bind -T copy-mode-vi Y send -X copy-line \\; run 'tmux save-buffer - | xclip -i -selection clipboard >/dev/null 2>&1'; \
bind -T copy-mode-vi D send -X copy-end-of-line \\; run 'tmux save-buffer - | xclip -i -selection clipboard >/dev/null 2>&1'; \
bind -T copy-mode-vi MouseDragEnd1Pane send -X copy-pipe-and-cancel 'xclip -i -selection clipboard >/dev/null 2>&1'"
# APPEARANCE SETTINGS
# Default value for statusline format
POWERLINE_SEPARATOR_LEFT=""
POWERLINE_SEPARATOR_RIGHT=""
POWERLINE_SESSION_ICON=" "
POWERLINE_USER_ICON=" "
POWERLINE_WINDOW_ICON=""
POWERLINE_WINDOW_ACTIVE_ICON=" "
POWERLINE_CALENDAR_ICON=" "
POWERLINE_CLOCK_ICON=" "
POWERLINE_PREFIX_ACTIVE_ICON="󰌿 "
POWERLINE_PREFIX_ICON="󰌾 "
setw -g mode-style "fg=black,bg=yellow" # Window mode style
set -g message-style "fg=green" # Status line message style
set -g message-command-style "fg=green" # Status line message command style
set -g status on # Show or hide status line
set -g status-interval 1 # Update status line every interval second
set -g status-justify left # Set the position of the window list component of status line
set -g status-position bottom # Set the position of status line
setw -g clock-mode-colour yellow # Set clock color
setw -g clock-mode-style 12 # Set clock hour format
setw -g window-status-activity-style "fg=red" # Window with activity alert style
setw -g window-status-separator "" # Set the separator drawn between windows in status line
set -g status-left-length 100 # Set the maximum length of left status line
set -g status-right-length 100 # Set the maximum length of right status line
set -g status-style "fg=white" # Status line style
setw -g pane-border-status off # Pane border status line
setw -g pane-border-style "fg=blue" # Pane border style
setw -g pane-active-border-style "fg=red" # Active pane border style
# Move status line to top if tmux is nested inside another tmux so they don't colide
if -b "test -n '$SSH_CLIENT'" "set -g status-position top"
# Left status line configurations
set -g status-left " #[fg=blue,bold]$POWERLINE_SEPARATOR_LEFT$POWERLINE_SESSION_ICON#S$POWERLINE_SEPARATOR_RIGHT#[fg=yellow] $POWERLINE_SEPARATOR_LEFT$POWERLINE_USER_ICON#(whoami)$POWERLINE_SEPARATOR_RIGHT#[bg=terminal] #{?client_prefix,#[fg=green]$POWERLINE_PREFIX_ACTIVE_ICON,#[fg=red]$POWERLINE_PREFIX_ICON}"
# Right status line configurations
set -g status-right "#[fg=green,bold]$POWERLINE_SEPARATOR_LEFT$POWERLINE_CALENDAR_ICON %a, %d %b %y$POWERLINE_SEPARATOR_RIGHT#[fg=magenta] $POWERLINE_SEPARATOR_LEFT$POWERLINE_CLOCK_ICON %I:%M %p$POWERLINE_SEPARATOR_RIGHT "
# Window status line configurations
setw -g window-status-current-format "#[fg=blue,bold]$POWERLINE_SEPARATOR_LEFT$POWERLINE_WINDOW_ACTIVE_ICON#I:#W$POWERLINE_SEPARATOR_RIGHT "
setw -g window-status-format "#[bg=terminal,fg=white,bold]#I:$POWERLINE_WINDOW_ICON#W "
# Use user defined overrides if .config/tmux/tmux.conf.local file is found
if "[-f ~/.config/tmux/tmux.conf.local]" "source ~/.config/tmux/tmux.conf.local"