aboutsummaryrefslogtreecommitdiff
path: root/tmux/.tmux.conf
blob: d3794a31d401d334aa8d61be610669b5b84e74a5 (plain)
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
# Increase scrollback buffer size
set -g history-limit 10000

# Start window and pane numbering from 1 for easier switching
set -g base-index 1
setw -g pane-base-index 1

# Allow automatic renaming of windows
set -g allow-rename on
# 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'

# 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

# Useful when using sharing a session with different size terminals
setw -g aggressive-resize 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

set -as terminal-features ",*:RGB"
# set -g default-terminal "tmux-256color"
set -ag terminal-overrides ",xterm-256color:RGB"
#--------------------------------------------------------------------------
# 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 " "

# 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=default" # gruvbox dark
# set-option -g status-style "fg=#828bb1 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=#fabd2f #for gruvbox use: dcc7a0 or aeb6ff

#--------------------------------------------------------------------------
# Key Bindings
#--------------------------------------------------------------------------

# -r means that the bind can repeat without entering prefix again
# -n means that the bind doesn't use the prefix

# 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 two most recently used windows
bind Space last-window

# switch between two most recently used sessions
bind b switch-client -l

# open lazygit in a new window with prefix+g
bind-key g new-window -n lazygit -c "#{pane_current_path}" "lazygit"

# open an application in a new window with prefix+o, and allow me to provide the app name
bind-key o command-prompt -p "open app: " "new-window '%%'"

# show a promp to kill a window by id with prefix+X
bind-key X command-prompt -p "kill window: " "kill-window -t '%%'"

# 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}"

bind C-e display-popup -E "\
    tmux list-sessions -F '#{?session_attached,,#{session_name}}' |\
    sed '/^$/d' |\
    fzf --reverse --header jump-to-session |\
    xargs tmux switch-client -t"

# Move tmux status bar to top
bind-key C-k run-shell "tmux set-option -g status-position top;"
# Move tmux status bar to bottom
bind-key C-j run-shell "tmux set-option -g status-position bottom;"

unbind r
unbind '"'
unbind %

bind r source-file ~/.tmux.conf

set -g mouse on

bind \\ split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"

set -g base-index 1
set -g pane-base-index 1
# set-window-option -g pane-base-index 1
set-option -g renumber-windows on
# Makes that when killing a session tmux doesn't detach
set-option -g detach-on-destroy off
set-option -sg escape-time 0

set -g prefix C-s

setw -g mode-keys vi
bind-key h select-pane -L
bind-key j select-pane -D
bind-key k select-pane -U
bind-key l select-pane -R
bind-key b set-option status

set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'christoomey/vim-tmux-navigator'
# set -g @plugin 'niksingh710/minimal-tmux-status'

set -g status-position bottom

run '~/.tmux/plugins/tpm/tpm'