Files
dotfiles/tmux/tmux.conf
T
Henrik Bakken d770abf8ef updates
2022-04-29 17:17:29 +02:00

186 lines
5.5 KiB
Bash

######################
### SETTINGS ###
######################
# escape time
set -sg escape-time 0
# loud or quiet?
set -g visual-activity off
set -g visual-bell off
set -g visual-silence off
setw -g monitor-activity off
set -g bell-action none
# enable vi mode keys
setw -g mode-keys vi
# mouse control (clickable windows, panes, resizable panes)
setw -g mouse off
set -g mouse off
# clipboard control
set -g set-clipboard on
set -g history-limit 20000
set -g focus-events on
# screen colors
set-option -ga terminal-overrides ",st-256color:Tc"
set -g default-terminal "st-256color"
# 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-format "#P: #{pane_current_command}"
# Automatically set window title
set-window-option -g automatic-rename on
set-option -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
# Rename window
bind , command-prompt "rename-window %%"
# 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"
# resize controls
bind -r h resize-pane -L 10 \; display-message "Resize left"
bind -r l resize-pane -R 10 \; display-message "Resize right"
bind -r k resize-pane -U 10 \; display-message "Resize up"
bind -r j resize-pane -D 10 \; display-message "Resize down"
# 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 M-- select-layout even-horizontal
bind M-| select-layout even-vertical
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 Window
bind w choose-window
# Change current pane to next window
bind 1 join-pane -t :1
bind 2 join-pane -t :2
bind 3 join-pane -t :3
bind 4 join-pane -t :4
bind 5 join-pane -t :5
bind 6 join-pane -t :6
bind 7 join-pane -t :7
bind 8 join-pane -t :8
bind 9 join-pane -t :9
bind 0 join-pane -t :10
# 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 kill-pane
# clear selected pane
bind-key b send-keys -R \; clear-history \; send-keys Enter
# present a menu of URLs to open from the visible pane. sweet.
bind u capture-pane \;\
save-buffer /tmp/tmux-buffer \;\
split-window -l 10 "urlview /tmp/tmux-buffer"
# Smart pane switching with awareness of Vim splits.
# See: https://github.com/christoomey/vim-tmux-navigator
is_vim="ps -o state= -o comm= -t '#{pane_tty}' \
| grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'"
bind-key -n M-h if-shell "$is_vim" "send-keys M-h" "select-pane -L"
bind-key -n M-j if-shell "$is_vim" "send-keys M-j" "select-pane -D"
bind-key -n M-k if-shell "$is_vim" "send-keys M-k" "select-pane -U"
bind-key -n M-l if-shell "$is_vim" "send-keys M-l" "select-pane -R"
#bind-key -n M-\ if-shell "$is_vim" "send-keys M-\\" "select-pane -l"
bind-key -T copy-mode-vi M-h select-pane -L
bind-key -T copy-mode-vi M-j select-pane -D
bind-key -T copy-mode-vi M-k select-pane -U
bind-key -T copy-mode-vi M-l select-pane -R
#bind-key -T copy-mode-vi M-\ select-pane -l
# fzf binding
set -g @tmux-fzf-launch-key 'f'
######################
### PLUGINS ###
######################
# various plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-yank'
set -g @plugin 'arcticicestudio/nord-tmux'
# set -g @plugin 'tmux-plugins/tmux-resurrect'
# set -g @plugin 'tmux-plugins/tmux-continuum'
# set -g @plugin 'odedlaz/tmux-onedark-theme'
# set -g @plugin 'seebi/tmux-colors-solarized'
# set -g @plugin 'jimeh/tmux-themepack'
# keep at bottom
run -b '~/.config/tmux/plugins/tpm/tpm'