Fortunately this command also works on Linux but its not required there. ```console $ hostname -s ```
158 lines
5.4 KiB
Bash
158 lines
5.4 KiB
Bash
# Set global hooks to perform actions when events occur
|
|
set-hook -g session-created 'run ~/.config/tmux/hooks/session-create.sh'
|
|
|
|
# Set the tmux version to check for command support
|
|
run 'tmux setenv -g TMUX_VERSION $(tmux -V | cut -c 6-8)'
|
|
|
|
# Use vim keybindings in copy mode
|
|
set -g mode-keys vi
|
|
|
|
# Change prefix to C-Space
|
|
unbind C-b
|
|
set -g prefix C-Space
|
|
bind Space send-prefix
|
|
|
|
# Address vim mode switching delay
|
|
set -s escape-time 0
|
|
|
|
# Increase scrollback buffer size
|
|
set -g history-limit 1000000
|
|
|
|
# Set tmux messages display time to 4 seconds
|
|
set -g display-time 4000
|
|
|
|
# Refresh 'status-left' and 'status-right' more often
|
|
set -g status-interval 2
|
|
|
|
# Upgrade $TERM
|
|
set -g default-terminal "tmux-256color"
|
|
|
|
# Focus events enabled for terminals that support them
|
|
set -g focus-events on
|
|
|
|
# TODO: Change this comment to something that explains the setting
|
|
# super useful when using "grouped sessions" and multi-monitor setup
|
|
setw -g aggressive-resize on
|
|
|
|
# Start window & pane index at 1
|
|
set -g pane-base-index 1
|
|
|
|
# Enable mouse support
|
|
set-option -g mouse on
|
|
# Prevent mouse click up events exiting copy mode
|
|
unbind -T copy-mode-vi MouseDragEnd1Pane
|
|
|
|
# Enable changing cursor shape per pane, vim or zsh should emit escape
|
|
# sequences to change cursor shape.
|
|
# iTerm2 only requires this before tmux 2.9
|
|
if '[ -n $ITERM_PROFILE ] && [[ "$TMUX_VERSION" < "2.9" ]]' \
|
|
'set -ga terminal-overrides "*:Ss=\E]1337;CursorShape=%p1%d\7"'
|
|
# VTE compatible terminals.
|
|
if '[ ! -n $ITERM_PROFILE ]' \
|
|
'set -ga terminal-overrides "*:Ss=\E[%p1%d q:Se=\E[2 q"'
|
|
|
|
# Enable strikethrough on VTE compatible terminals.
|
|
set -ga terminal-overrides 'xterm*:smxx=\E[9m'
|
|
|
|
# Set only on macOS where it's required
|
|
if -b '[ "`uname`" = "Darwin" ]' \
|
|
'set -g default-command "reattach-to-user-namespace -l $SHELL"'
|
|
|
|
# Restore old next/previous window bindings
|
|
bind C-n next-window
|
|
bind C-p previous-window
|
|
|
|
# Make new splits open in current directory
|
|
bind '"' split-window -c '#{pane_current_path}'
|
|
bind '%' split-window -h -c '#{pane_current_path}'
|
|
|
|
# Change word separators to better match Vim.
|
|
set -g word-separators "<>(){}[]/'\";@*+,.-_=!£$%^&:#~?`¬|\\ "
|
|
|
|
# Integrate pane selection with vim
|
|
in_vim='tmux show-window-options | grep -q "@vim#{pane_id}"'
|
|
bind -n C-h if $in_vim 'send-keys C-h' 'select-pane -L'
|
|
bind -n C-j if $in_vim 'send-keys C-j' 'select-pane -D'
|
|
bind -n C-k if $in_vim 'send-keys C-k' 'select-pane -U'
|
|
bind -n C-l if $in_vim 'send-keys C-l' 'select-pane -R'
|
|
|
|
# Integrate urlscan or fallback to urlview
|
|
if -b 'which urlscan' \
|
|
'bind u capture-pane \; split-window "tmux show-buffer | urlscan"' \
|
|
'bind u capture-pane \; split-window "tmux show-buffer | urlview -"'
|
|
|
|
# Unbind copy mode defaults so pane selection works
|
|
unbind -T copy-mode-vi C-h
|
|
unbind -T copy-mode-vi C-j
|
|
# Enter copy mode with C-U
|
|
bind C-u copy-mode -u
|
|
# Begin selection in copy mode with v not Space
|
|
bind -T copy-mode-vi v send-keys -X begin-selection
|
|
|
|
# Enable mouse scrolling up in alternate buffers.
|
|
# If #{mouse_any_flag} is 1 the pane is running with mouse support, e.g. vim.
|
|
# If #{alternate_on} is 1 the terminal is in alternate buffer mode, e.g. less.
|
|
# If #{pane_in_mode} is 1 the pane is in copy-mode.
|
|
bind -n WheelUpPane \
|
|
if -Ft= "#{mouse_any_flag}" \
|
|
"send-keys -M" \
|
|
"if -Ft= \"#{alternate_on}\" \
|
|
\"send-keys -t= Up ; \
|
|
send-keys -t= Up ; \
|
|
send-keys -t= Up ; \" \
|
|
\"select-pane -t= ; \
|
|
if -Ft= '#{pane_in_mode}' \
|
|
'send-keys -M' \
|
|
'copy-mode -e ; send-keys -M' \" "
|
|
# Emulate mouse scrolling down in alternate buffers.
|
|
bind -n WheelDownPane \
|
|
if -Ft= "#{mouse_any_flag}" \
|
|
"send-keys -M" \
|
|
"if -Ft= \"#{alternate_on}\" \
|
|
\"send-keys -t= Down ; \
|
|
send-keys -t= Down ; \
|
|
send-keys -t= Down ; \" \
|
|
\"select-pane -t= ; \
|
|
send-keys -M\" "
|
|
|
|
# Yank to the system clipboard in copy mode.
|
|
# TODO: reattach-to-user-namespace not necessary with tmux > 2.6
|
|
if -b '[ "`uname`" = "Darwin" ]' \
|
|
'bind -T copy-mode-vi y send-keys -X copy-pipe "reattach-to-user-namespace pbcopy"'
|
|
# When not in WSL2 use xsel, when in WSL use win32yank.exe to avoid UI lockups.
|
|
if -b '[ "$WSLENV" = "" ]' \
|
|
'bind -T copy-mode-vi y send-keys -X copy-pipe "xsel -i --clipboard"' \
|
|
'bind -T copy-mode-vi y send-keys -X copy-pipe "win32yank.exe -i -crlf"'
|
|
|
|
# Left status style
|
|
if -b '[ "$WSL_DISTRO_NAME" != "" ]' \
|
|
'setw -g status-left " #(hostname)|#{WSL_DISTRO_NAME}|#{session_name}"' \
|
|
'setw -g status-left " #(hostname -s)|#{session_name}"'
|
|
setw -g status-left-style fg=colour240,bg=colour233
|
|
setw -g status-left-length 32
|
|
|
|
# Centre status style
|
|
setw -g status-style fg=colour240,bg=colour233
|
|
|
|
# Right status style shows system info, date, and time.
|
|
setw -g status-right "#[fg=colour240]#(cat ~/.cache/tmux/system-info)#[fg=white] %a %d-%m-%y %H:%M "
|
|
setw -g status-right-style fg=white,bg=colour233
|
|
if -b '[ "`uname`" != "Darwin" ]' \
|
|
'run "tmux setw -g status-right-length $((`nproc --all` + 32))"'
|
|
|
|
# Active window status style
|
|
setw -g window-status-current-format " #{window_index}: #{window_name}"
|
|
setw -g window-status-current-style fg=white,bg=colour233
|
|
|
|
# Inactive window status style
|
|
setw -g window-status-format " #{window_index}: #{window_name}"
|
|
setw -g window-status-style fg=colour240,bg=colour233
|
|
|
|
# Pane border style
|
|
set -g pane-border-style fg=colour233,bg=colour233
|
|
set -g pane-active-border-style fg=colour235,bg=colour235
|
|
|
|
# Command line window list selection
|
|
set-window-option -g mode-style fg=white,bg=colour237
|
|
set-option -g message-style fg=white,bg=colour237
|