Files
dotfiles/tmux/tmux.conf
T
2025-09-03 14:17:06 +02:00

211 lines
6.3 KiB
Bash

######################
### SETTINGS ###
######################
# escape time
set -sg escape-time 0
setw -g mode-keys vi
set -g mouse on
# clipboard control
set -g set-clipboard on
set -g allow-passthrough
set -g history-limit 20000
set -g focus-events on
# screen colors
set -as terminal-features ",gnome*:RGB"
# Start with index 1
set -g base-index 1
setw -g pane-base-index 1
# pane title
setw -g pane-border-status top
setw -g pane-border-format ' #{=/-20/…:pane_title} [#{=/-20/…:pane_current_command}] #(pgrep -P "#{pane_pid}" | tr "\n" " ")#{pane_current_path} #{?alternate_on,<Alt Mode> ,}'
set -g pane-border-style "fg=color242"
set -g pane-active-border-style "fg=color252"
set -g @minimal-tmux-fg "color0"
set -g @minimal-tmux-bg "color252"
# Automatically set window title
setw -g automatic-rename on
set -g set-titles on
######################
### KEYBINDS ###
######################
# Config that is very close to a i3 window manager's keybinding.
# Set new prefix
# Note : you can press super key by set M.
# (tested with tty only)
set -g prefix M-a
bind M-a send-prefix
# First remove *all* keybindings
unbind -a
# Basic bindings
bind ? list-keys
bind d detach-client
bind D choose-client
bind : command-prompt
bind '~' show-messages
# Copy mode
bind c copy-mode
# clipboard control
bind p paste-buffer
bind -T copy-mode-vi v send-keys -X begin-selection
bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xclip -i -f -selection primary | xclip -i -selection clipboard"
bind -T copy-mode-vi r send-keys -X rectangle-toggle
bind -T copy-mode-vi Escape send-keys -X cancel
bind -T copy-mode-vi q send-keys -X clear-selection
bind -T copy-mode MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -selection primary -filter | xclip -selection clipboard"
bind -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -selection primary -filter | xclip -selection clipboard"
# Rename window
bind , command-prompt "rename-window %%"
bind . command-prompt "rename-session %%"
# Clock mode
bind t clock-mode
# Show pane numbers
bind i display-panes
# Config Reloads
bind r source-file ~/.config/tmux/tmux.conf \; refresh-client \; display-message "Config reloaded"
# zoom control
bind -n M-o resize-pane -Z
# split panes using | and -, make sure they open in the same path
bind v split-window -h -c "#{pane_current_path}"
bind s split-window -v -c "#{pane_current_path}"
bind V split-window -fh -c "#{pane_current_path}"
bind S split-window -fv -c "#{pane_current_path}"
# Change layouts
bind o rotate-window
bind Space next-layout
bind = select-layout even-horizontal
bind + select-layout main-horizontal
bind - select-layout even-vertical
bind _ select-layout main-vertical
bind / select-layout tiled
bind K swap-pane -d -t "{up-of}"
bind J swap-pane -d -t "{down-of}"
bind H swap-pane -d -t "{left-of}"
bind L swap-pane -d -t "{right-of}"
# Choose
bind w choose-tree
# Change current pane to next window
bind ` break-pane
bind 1 join-pane -t :1 -h
bind 2 join-pane -t :2 -h
bind 3 join-pane -t :3 -h
bind 4 join-pane -t :4 -h
bind 5 join-pane -t :5 -h
bind 6 join-pane -t :6 -h
bind 7 join-pane -t :7 -h
bind 8 join-pane -t :8 -h
bind 9 join-pane -t :9 -h
bind 0 join-pane -t :10 -h
# Switch windows alt+number
bind -n M-1 if-shell 'tmux select-window -t :1' '' 'new-window -t :1'
bind -n M-2 if-shell 'tmux select-window -t :2' '' 'new-window -t :2'
bind -n M-3 if-shell 'tmux select-window -t :3' '' 'new-window -t :3'
bind -n M-4 if-shell 'tmux select-window -t :4' '' 'new-window -t :4'
bind -n M-5 if-shell 'tmux select-window -t :5' '' 'new-window -t :5'
bind -n M-6 if-shell 'tmux select-window -t :6' '' 'new-window -t :6'
bind -n M-7 if-shell 'tmux select-window -t :7' '' 'new-window -t :7'
bind -n M-8 if-shell 'tmux select-window -t :8' '' 'new-window -t :8'
bind -n M-9 if-shell 'tmux select-window -t :9' '' 'new-window -t :9'
bind -n M-0 if-shell 'tmux select-window -t :10' '' 'new-window -t :10'
# Kill Selected Pane
bind q confirm-before -p "kill-pane #P? (y/n)" kill-pane
# clear selected pane
bind b send-keys -R \; clear-history \; send-keys Enter
######################
### PLUGINS ###
######################
# various plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-yank'
######################
### PANE CONTROL ###
######################
set -g @plugin 'mrjones2014/smart-splits.nvim'
# Optional configurations with their default values if omitted:
set -g @smart-splits_no_wrap '' # to disable wrapping. (any value disables wrapping)
set -g @smart-splits_move_left_key 'M-h' # key-mapping for navigation.
set -g @smart-splits_move_down_key 'M-j' # --"--
set -g @smart-splits_move_up_key 'M-k' # --"--
set -g @smart-splits_move_right_key 'M-l' # --"--
set -g @smart-splits_resize_left_key 'C-h' # key-mapping for resizing.
set -g @smart-splits_resize_down_key 'C-j' # --"--
set -g @smart-splits_resize_up_key 'C-k' # --"--
set -g @smart-splits_resize_right_key 'C-l' # --"--
set -g @smart-splits_resize_step_size '3' # change the step-size for resizing.
######################
### THEME ###
######################
set -g @plugin 'niksingh710/minimal-tmux-status'
set -g @minimal-tmux-justify "centre"
set -g @minimal-tmux-indicator-str " tmux "
set -g @minimal-tmux-indicator true
set -g @minimal-tmux-status "bottom"
# Enables or disables the left and right status bar
set -g @minimal-tmux-right true
set -g @minimal-tmux-left true
# expanded icon (fullscreen icon)
set -g @minimal-tmux-expanded-icon "󰊓 "
# on all tabs (default is false)
# false will make it visible for the current tab only
set -g @minimal-tmux-show-expanded-icons-for-all-tabs true
# To add or remove extra text in status bar
set -g @minimal-tmux-status-right-extra ""
set -g @minimal-tmux-status-left-extra ""
# To make the selection box rounded () or edged <>
# Default is nothing, when set to true default is edged
set -g @minimal-tmux-use-arrow true
set -g @minimal-tmux-right-arrow ""
set -g @minimal-tmux-left-arrow ""
# If getting strings cut in left status or right
# Here 20 is the length of the characters in the string
set -g status-right-length 20
set -g status-left-length 20
######################
### KEEP AT BOTTOM ###
######################
run -b '~/.config/tmux/plugins/tpm/tpm'