201 lines
6.5 KiB
Plaintext
201 lines
6.5 KiB
Plaintext
# vi: syntax=tmux
|
|
# vi: filetype=tmux
|
|
#
|
|
# mkdir -p $HOME/.config/tmux/plugins
|
|
# cd $HOME/.config/tmux
|
|
# git init
|
|
# cd plugins
|
|
# git submodule init
|
|
# git submodule add https://github.com/tmux-plugins/tpm
|
|
# git submodule add https://github.com/tmux-plugins/tmux-prefix-highlight
|
|
# git submodule add https://github.com/jaclu/tmux-menus
|
|
# git submodule add https://github.com/laktak/extrakto
|
|
# git submodule add https://github.com/tmux-plugins/tmux-sidebar
|
|
|
|
# ----- Prefix -----
|
|
|
|
# Rebind the prefix to Ctrl+x
|
|
unbind-key C-b
|
|
set-option -g prefix C-x
|
|
bind-key C-x send-prefix
|
|
|
|
|
|
# ----- Panes -----
|
|
|
|
# Splits open in the current working directory
|
|
bind-key '"' split-window -c "#{pane_current_path}"
|
|
bind-key '%' split-window -h -c "#{pane_current_path}"
|
|
|
|
# Bind "a" to toggle sync mode on all panes with an active border color
|
|
bind-key a if -F '#{pane_synchronized}' \
|
|
'set-window-option synchronize-panes off; \
|
|
set-window-option pane-active-border-style fg=colour02; \
|
|
set-window-option pane-border-style fg=colour04' \
|
|
'set-window-option synchronize-panes on; \
|
|
set-window-option pane-active-border-style fg=colour02; \
|
|
set-window-option pane-border-style fg=colour02'
|
|
|
|
# Bind "z" & "e" repeatable keys to switch panes and zoom in. Just zomming in is rebinded to "Z"
|
|
unbind-key z
|
|
bind-key Z resize-pane -Z
|
|
bind-key -r e select-pane -t .+1 \; resize-pane -Z
|
|
bind-key -r z select-pane -t .-1 \; resize-pane -Z
|
|
|
|
# Add a status for each pane with index, title and command
|
|
set -g pane-border-status bottom
|
|
set -g pane-border-format '#{pane_index} #{pane_title} > #(sleep 1; ps -t #{pane_tty} --no-headers -o command | tail -1)'
|
|
|
|
# Bind "P" to interactively rename the title of the current pane
|
|
bind-key P command-prompt -I 'select-pane -T '
|
|
|
|
# Seperator colors for current pane
|
|
set-option -g pane-active-border-style fg=colour02
|
|
|
|
# Seperator color for other panes
|
|
set-option -g pane-border-style fg=colour04
|
|
|
|
# ----- Status Bar -----
|
|
|
|
# Colors for the status bar
|
|
set -g status-bg 'colour00'
|
|
set -g status-fg 'colour08'
|
|
|
|
# Contents (gitmux & prefix) on the right of the status bar
|
|
set -g status-right '#(gitmux -timeout 3s -cfg ~/.config/gitmux.conf "#{pane_current_path}") #{prefix_highlight}'
|
|
set -g status-interval 1
|
|
set -g status-right-length 45
|
|
|
|
# Contents on the left of the status bar
|
|
set -g status-left '#[fg=colour03,bg=colour08,bold][#S]#[bg=default] '
|
|
set -g status-left-length 32
|
|
|
|
# Position of the status bar
|
|
# (top/bottom)
|
|
set -g status-position bottom
|
|
|
|
# Position of the window status
|
|
# (left/centre/right)
|
|
set -g status-justify left
|
|
|
|
# Color of the status bar message
|
|
set-option -g message-style bg=colour04,fg=colour08
|
|
|
|
|
|
# ----- Windows -----
|
|
|
|
# open a fzf popup session changer
|
|
bind-key C-j display-popup -E "tmux list-sessions | sed -E 's/:.*$//' | grep -v \"^$(tmux display-message -p '#S')\$\" | fzf --reverse | xargs tmux switch-client -t"
|
|
|
|
# open/close a popup scratch session
|
|
bind-key C-g if-shell -F '#{==:#{session_name},scratch}' {
|
|
detach-client
|
|
} {
|
|
display-popup -E "tmux new-session -A -s scratch"
|
|
}
|
|
|
|
# Status format for the current window
|
|
setw -g window-status-current-format '#[fg=colour06,bg=colour08,bold] #I #W '
|
|
|
|
# Status format for other windows
|
|
setw -g window-status-format '#[fg=colour04,bg=colour08] #I #W '
|
|
|
|
# Seperator between each window names
|
|
set -wg window-status-separator ' '
|
|
|
|
# Show alert if other window changes?
|
|
setw -g monitor-activity off
|
|
|
|
# Should automatically rename other windows based on the current program?
|
|
set -g automatic-rename on
|
|
|
|
# ----- More options -----
|
|
|
|
# Emacs key bindings in tmux command prompt (prefix + :) are better than
|
|
# vi keys, even for vim users
|
|
set -g status-keys emacs
|
|
|
|
# Focus events enabled for terminals that support them
|
|
set -g focus-events on
|
|
|
|
# Super useful when using "grouped sessions" and multi-monitor setup
|
|
setw -g aggressive-resize on
|
|
|
|
# Delay for the repeat key (-r) to be available, default is 500
|
|
set-option -g repeat-time 1000
|
|
|
|
# History limit for scrolling back
|
|
set -g history-limit 10000
|
|
|
|
# Increase tmux messages display duration from 750ms to 4s
|
|
set -g display-time 4000
|
|
|
|
# Use mouse to switch windows, adjust panes, etc...
|
|
set -g mouse off
|
|
|
|
# Delay after escape key is passed into the program
|
|
set -s escape-time 0
|
|
|
|
# Use vi styled keys for scrolling & copying
|
|
set-window-option -g mode-keys vi
|
|
|
|
# True color support
|
|
set -g default-terminal tmux-256color
|
|
set-option -ga terminal-overrides ',rxvt-unicode-256color:Ms=\E]52;%p1%s;%p2%s\007'
|
|
|
|
# set-clipboard for copying with OSC 52
|
|
# to make it work through tmux and ssh you need to use X11Forwarding (default) and "sudo apt install xauth"
|
|
set -g allow-passthrough on
|
|
set -s set-clipboard on
|
|
set -as terminal-features ',rxvt-unicode-256color:clipboard'
|
|
|
|
# modified copy mode with clipboard output
|
|
bind-key -T prefix v copy-mode
|
|
bind-key -T copy-mode-vi v send-keys -X begin-selection
|
|
bind-key -T copy-mode-vi y send-keys -X rectangle-toggle
|
|
|
|
|
|
# ----- Plugins -----
|
|
|
|
# Tmux plugin manager
|
|
set -g @plugin 'tmux-plugins/tpm'
|
|
set-environment -g TMUX_PLUGIN_MANAGER_PATH "~/.config/tmux/plugins/"
|
|
|
|
# Import plugins
|
|
set -g @plugin 'tmux-plugins/tmux-prefix-highlight'
|
|
set -g @plugin 'jaclu/tmux-menus'
|
|
set -g @plugin 'tmux-plugins/tmux-sidebar'
|
|
set -g @plugin 'laktak/extrakto'
|
|
|
|
# tmux-prefix_highlight configs
|
|
set -g @prefix_highlight_prefix_prompt 'Wait'
|
|
set -g @prefix_highlight_copy_prompt 'Copy'
|
|
set -g @prefix_highlight_sync_prompt 'Sync'
|
|
set -g @prefix_highlight_fg 'colour05'
|
|
set -g @prefix_highlight_bg 'colour08'
|
|
set -g @prefix_highlight_show_copy_mode 'on'
|
|
set -g @prefix_highlight_copy_mode_attr 'fg=colour08,bg=colour03,bold'
|
|
set -g @prefix_highlight_show_sync_mode 'on'
|
|
set -g @prefix_highlight_sync_mode_attr 'fg=colour08,bg=colour02,bold'
|
|
|
|
# extrakto configs, open with "Prefix-Tab"
|
|
set -g @extrakto_grab_area 'recent'
|
|
set -g @extrakto_filter_order 'line word all'
|
|
set -g @extrakto_popup_size '90%,60%'
|
|
set -g @extrakto_clip_tool_run 'tmux_osc52'
|
|
set -g @extrakto_copy_key 'ctrl-y'
|
|
set -g @extrakto_insert_key 'enter'
|
|
set -g @extrakto_filter_key 'ctrl-f'
|
|
set -g @extrakto_grab_key 'ctrl-g'
|
|
set -g @extrakto_edit_key 'ctrl-e'
|
|
set -g @extrakto_open_key 'ctrl-o'
|
|
|
|
# tmux-sidebar configs
|
|
set -g @sidebar-tree-width '40'
|
|
set -g @sidebar-tree-command 'exa -ab --long --git --color always --icons --sort Name --group-directories-first --no-permissions --no-time --no-user'
|
|
set -g @sidebar-tree 'C-e'
|
|
set -g @sidebar-tree-focus 'C-z'
|
|
|
|
# Initialize TMUX plugin manager
|
|
# (keep this line at the very bottom of tmux.conf)
|
|
run -b '~/.config/tmux/plugins/tpm/tpm'
|