-
Notifications
You must be signed in to change notification settings - Fork 60
/
.tmux.conf
173 lines (132 loc) · 5.84 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
#--------------------------------------------------------------------------
# Configuration
#--------------------------------------------------------------------------
# Unbind CTRL-b for tmux control
# Set it to CTRL-s
# -> CTRL-a is needed to kill the QEMU instance
# -> CTRL-b is necessary in VIM
unbind C-a
unbind C-b
set -g prefix C-s
# Rather than constraining window size to the maximum size of any client
# connected to the *session*, constrain window size to the maximum size of any
# client connected to *that window*. Much more reasonable.
setw -g aggressive-resize on
# Modify pane control to allow Alt+<arrow>
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D
# Highlight selected window
setw -g window-status-current-style bg=red
# Use Vi mode
setw -g mode-keys vi
# Increase scrollback buffer size
set -g history-limit 200000
# Allow automatic renaming of windows
set -g allow-rename on
bind v command-prompt -p "rename window" "rename-window '%%'"
unbind -n C-r
set -g automatic-rename off
# Renumber windows when one is removed.
set -g renumber-windows on
# Improve colors
set -g default-terminal "${TERM}"
# Enable undercurl
set -as terminal-overrides ',*:Smulx=\E[4::%p1%dm'
# Enable undercurl colors
set -as terminal-overrides ',*:Setulc=\E[58::2::%p1%{65536}%/%d::%p1%{256}%/%{255}%&%d::%p1%{255}%&%d%;m'
# Use 24bit colors
set-option -sa terminal-overrides ",xterm*:Tc"
# Allow the mouse to resize windows and select tabs
set -g mouse on
# Allow tmux to set the terminal title
set -g set-titles on
# Monitor window activity to display in the status bar
setw -g monitor-activity on
# A bell in another window should cause a bell in the current window
set -g bell-action any
# Don't show distracting notifications
set -g visual-bell off
set -g visual-activity off
# Focus events enabled for terminals that support them
set -g focus-events on
# don't detach tmux when killing a session
set -g detach-on-destroy off
# address vim mode switching delay (http://superuser.com/a/252717/65504)
set -s escape-time 0
#--------------------------------------------------------------------------
# Status line
#--------------------------------------------------------------------------
# Status line customisation
set-option -g status-left-length 100
# set-option -g status-right-length 100
set-option -g status-left " #{session_name} "
# set-option -g status-right "#{pane_title} "
# set-option -g status-style "fg=#7C7D83 bg=#18242e" # ayu
# set-option -g status-style "fg=#7C7D83 bg=#16151d" # tokyo night
# set-option -g status-style "fg=#7C7D83 bg=#24282f" # one dark
# set-option -g status-style "fg=#7C7D83 bg=#272727" # gruvbox dark
set-option -g status-style "fg=#7C7D83 bg=default" # default will set the background to transparent
set-option -g window-status-format "#{window_index}:#{window_name}#{window_flags} " # window_name -> pane_current_command
set-option -g window-status-current-format "#{window_index}:#{window_name}#{window_flags} "
set-option -g window-status-current-style "fg=#dcc7a0"
set-option -g window-status-activity-style none
#--------------------------------------------------------------------------
# Key Bindings
#--------------------------------------------------------------------------
# -r means that the bind can repeat without entering prefix again
# -n means that the bind doesn't use the prefix
# Send prefix to a nested tmux session by doubling the prefix
bind C-a send-prefix
# 'PREFIX r' to reload of the config file
unbind r
bind r source-file ./.tmux.conf\; display-message '~/.tmux.conf reloaded'
# Allow holding Ctrl when using using prefix+p/n for switching windows
bind C-p previous-window
bind C-n next-window
# Move around panes like in vim
bind -r h select-pane -L
bind -r j select-pane -D
bind -r k select-pane -U
bind -r l select-pane -R
bind -r C-h select-window -t :-
bind -r C-l select-window -t :+
# Smart pane switching with awareness of vim splits
is_vim='echo "#{pane_current_command}" | grep -iqE "(^|\/)g?(view|n?vim?)(diff)?$"'
bind -n C-h if-shell "$is_vim" "send-keys C-h" "select-pane -L"
bind -n C-j if-shell "$is_vim" "send-keys C-j" "select-pane -D"
bind -n C-k if-shell "$is_vim" "send-keys C-k" "select-pane -U"
bind -n C-l if-shell "$is_vim" "send-keys C-l" "select-pane -R"
# Switch between previous and next windows with repeatable
bind -r n next-window
bind -r p previous-window
# Move the current window to the next window or previous window position
bind -r N run-shell "tmux swap-window -t $(expr $(tmux list-windows | grep \"(active)\" | cut -d \":\" -f 1) + 1)"
bind -r P run-shell "tmux swap-window -t $(expr $(tmux list-windows | grep \"(active)\" | cut -d \":\" -f 1) - 1)"
# Switch between two most recently used windows
bind Space last-window
# switch between two most recently used sessions
bind b switch-client -l
# use prefix+| (or prefix+\) to split window horizontally and prefix+- or
# (prefix+_) to split vertically also use the current pane path to define the
# new pane path
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
# change the path for newly created windows
bind c new-window -c "#{pane_current_path}"
# Rebind clear screen
bind -n C-l send-keys C-l
# window with a list of sessions to switch to
bind y run -b "tmux show-buffer | xclip -selection clipboard"\; display-message "copied tmux buffer to system clipboard"
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-continuum'
set -g @catppuccin_flavour 'mocha'
set -g @catppuccin_transparent_background 'true'
set -g @plugin 'dreamsofcode-io/catppuccin-tmux'
set -g @plugin 'christoomey/vim-tmux-navigator'
set -g @plugin 'tmux-plugins/tmux-yank'
# git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
# Run <prefix> + I to install plugins
run '~/.tmux/plugins/tpm/tpm'