-
Notifications
You must be signed in to change notification settings - Fork 28
/
.tmux.conf
222 lines (175 loc) · 7.31 KB
/
.tmux.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
# Github: https://github.com/Karmenzind/dotfiles-and-scripts
# simply do:
# wget https://raw.githubusercontent.com/Karmenzind/dotfiles-and-scripts/master/home_k/.tmux.conf -O ~/.tmux.conf
# --------------------------------------------
# Basic
# --------------------------------------------
set -g history-limit 5000
# change prefix
set -g prefix C-a
bind C-a send-prefix
unbind C-b
set -g default-terminal "tmux-256color"
# set -ga terminal-overrides ",xterm-256color:Tc"
set -ga terminal-overrides ",xterm-256color:RGB"
# fix: tmux pane separators dashed rather than continuous lines
set -as terminal-overrides ",*:U8=0"
# set -g default-terminal "${TERM}"
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 colours - needs tmux-3.0
setw -g automatic-rename off
# /* status line */
set -g status-keys vi
set -g status-interval 2
set -g status-position bottom
# status line's colors
# set -g status-style fg=white,bold,bg=black
set -g status-style bg=default,fg=cyan
# window list colors
setw -g window-status-style fg=colour12
setw -g window-status-current-style fg=white,bg=red,bold,underscore
# set -g set-titles on
# set -g set-titles-string '#h ❐ #S ● #I #W'
set -g status-right "#[fg=cyan,bold] #S #I:#P ❐ #[default] @#(hostname -i | awk '{print $1}') "
%if '#{==:#{DISPLAY},}' # no x server
set -g status-left "#{prefix_highlight} #[fg=cyan]ﯲ #{download_speed}#[default] #[fg=black,reverse]#{cpu_bg_color} #{cpu_icon} #{cpu_percentage} #[default] #[bold] %R"
%else
set -g status-left "#{prefix_highlight} "
%endif
set -g status-justify centre
# /* panes */
# pane border
set -g pane-border-status bottom
set -g pane-border-format "#{pane_index} #{pane_current_command}"
setw -g pane-border-style fg=colour240
setw -g pane-active-border-style fg=colour14,bold
# pane movement
bind-key C-t command-prompt -p "send pane to:" "join-pane -t ':%%'"
# /* windows */
# active pane normal, other shaded out
# setw -g window-style fg=colour240 # ,bg=colour235
# setw -g window-active-style fg=white # ,bg=black
# /* cmd line */
# Command / message line
set -g message-style fg=white,bold
# /* others */
# enable activity alerts
setw -g monitor-activity on
set -g visual-activity off
# Use mouse
set -g mouse on
bind-key M set-option -g mouse \; display "[Toggled] Mouse: #{?mouse,ON,OFF}"
# --------------------------------------------
# Copy mode
# --------------------------------------------
bind / copy-mode \; send-keys /
bind C-b copy-mode \; send-keys C-b
bind Escape copy-mode
bind-key -T copy-mode-vi 'v' send -X begin-selection
unbind p
# [ X clipboard integration ]
# 0. y and p as in vim (no system clipboard access)
# bind-key -T copy-mode-vi 'y' send -X copy-selection
# bind p paste-buffer
# 1. Emacs style with xsel
# bind-key -T copy-mode y send-keys -X copy-pipe-and-cancel "xsel -i -p && xsel -o -p | xsel -i -b"
# bind-key C-y run "xsel -o | tmux load-buffer - ; tmux paste-buffer"
# 2. Vim style with xsel
# bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xsel -i -p && xsel -o -p | xsel -i -b"
# bind-key p run "xsel -o | tmux load-buffer - ; tmux paste-buffer"
# 3. Vim style with xclip
# bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xclip -i -sel clip > /dev/null"
# bind-key p run "xclip -o -sel clip | tmux load-buffer - ; tmux paste-buffer"
# 4. Vim style in WSL
# bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "clip.exe"
# bind p paste-buffer
%if '#{==:#{DISPLAY},}' # no x server
bind-key -T copy-mode-vi 'y' send -X copy-selection
%else
bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xsel -i -p && xsel -o -p | xsel -i -b"
# set -s copy-command 'xsel -i'
bind-key p run "xsel -o | tmux load-buffer - ; tmux paste-buffer"
%endif
# others
bind-key -T copy-mode-vi 'Space' send -X halfpage-down
bind-key -T copy-mode-vi 'Bspace' send -X halfpage-up
# --------------------------------------------
# Vim friendly
# --------------------------------------------
set -g mode-keys vi
set -sg escape-time 1
set -g base-index 0
setw -g pane-base-index 0
# easy-to-remember split pane commands
# bind | split-window -h
# bind - split-window -v
# unbind '"'
# unbind %
# moving between panes with vim movement keys
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# moving between windows with vim movement keys
bind -r C-h select-window -t :-
bind -r C-l select-window -t :+
# resize panes with vim movement keys
bind -r H resize-pane -L 2
bind -r J resize-pane -D 2
bind -r K resize-pane -U 2
bind -r L resize-pane -R 2
# --------------------------------------------
# Others
# --------------------------------------------
bind-key R source-file ~/.tmux.conf \; display-message "source-file done"
# shortcut for synchronize-panes toggle
# bind C-s set-window-option synchronize-panes
bind C-s set-window-option synchronize-panes # \; display-message "synchronize-panes is now #{?pane_synchronized,ON,OFF}"
# split pane and retain the current directory of existing pane
bind _ split-window -v -c "#{pane_current_path}"
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
bind \\ split-window -h -c "#{pane_current_path}"
# /* copied from on-my-tmux */
# general
set -s escape-time 10 # faster command sequences
set -sg repeat-time 600 # increase repeat timeout
set -s focus-events on
# set -q -g status-utf8 on # expect UTF-8 (tmux < 2.2)
setw -q -g utf8 on
# edit configuration
bind e new-window -n '~/.tmux.conf' "sh -c '\${EDITOR:-vim} ~/.tmux.conf && tmux source ~/.tmux.conf && tmux display \"~/.tmux.conf sourced\"'"
# display
set -g display-panes-time 800 # slightly longer pane indicators display time
set -g display-time 1000 # slightly longer status messages display time
# --------------------------------------------
# Plugins
# --------------------------------------------
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-prefix-highlight'
# set -g @plugin 'tmux-plugins/tmux-copycat'
# set -g @plugin 'tmux-plugins/tmux-urlview'
# set -g @plugin 'tmux-plugins/tmux-mode-indicator'
# set -g @plugin 'tmux-plugins/tmux-open'
# set -g @plugin 'schasse/tmux-jump'
# set -g @plugin 'ChanderG/tmux-notify' # TODO (k): <2022-10-28>
%if '#{==:#{DISPLAY},}' # no x server
set -g @plugin 'tmux-plugins/tmux-net-speed'
set -g @plugin 'tmux-plugins/tmux-cpu'
%endif
# /* prefix highlight */
set -g @prefix_highlight_show_copy_mode 'on'
set -g @prefix_highlight_copy_mode_attr 'fg=black,bg=yellow,bold' # default is 'fg=default,bg=yellow'
set -g @prefix_highlight_output_prefix ''
set -g @prefix_highlight_output_suffix ''
set -g @prefix_highlight_show_sync_mode 'on'
set -g @prefix_highlight_sync_mode_attr 'fg=black,bg=white' # default is 'fg=default,bg=yellow'
# /* net speed */
# set -g @net_speed_interfaces "enp0s31f6"
# set -g @download_speed_format "%8s"
# set -g @upload_speed_format "%10s"
# set -g @net_speed_format "D:%10s U:%10s"
if-shell -b 'test -f ~/.tmux.conf.local' 'source-file ~/.tmux.conf.local'
# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
run 'test -f ~/.tmux/plugins/tpm/tpm && ~/.tmux/plugins/tpm/tpm'