-
Notifications
You must be signed in to change notification settings - Fork 1
/
tmux.conf
155 lines (129 loc) · 5.83 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
############################################################
######################## OPTIONS ###########################
############################################################
set -g status-interval 1
set -s escape-time 10
set -g mouse on
set -g history-limit 5000
set -g focus-events on
# 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
setw -g xterm-keys on
set -g remain-on-exit off
# Don't exit copy mode when mouse drags
unbind -T copy-mode-vi MouseDragEnd1Pane
bind -T copy-mode-vi Escape send-keys -X cancel
set -g mode-style "fg=default,bg=default,reverse"
set -g default-terminal "xterm-256color"
set -sa terminal-overrides ",xterm-256color:RGB"
############################################################
######################## STATUS ############################
############################################################
### Status bar
set -g status-position top
set -g status-keys vi
# set -g status-bg colour236
set -g status-bg "#1d2837"
set -g status-fg white
set -g status-left-length 15
set -g status-right-length 55
# set -g status-left "#[fg=white,bright,bg=colour20] #(hostname) #[fg=colour20,bg=default]#[default]"
set -g status-left "#[fg=#fabc2e,bg=#83a597] #(hostname -s) #[fg=#83a597,bg=default]#[default]"
set -g status-right "#[default]#[fg=#83a597,bg=default]#[fg=#fabc2e,bg=#83a597] %Y-%m-%d #(TZ=America/Denver date +%%H:%%M:%%S) #[fg=#fa1e05][#(TZ="Etc/UTC" date +%%H)]#[default]"
# Window Status
setw -g window-status-format " #[fg=colour243]#W "
# setw -g window-status-current-format " #[fg=colour236,bg=colour20]#[fg=white,bright] #W #[fg=colour20,bg=default] "
setw -g window-status-current-format "#[fg=#1d2837,bg=#83a597]#[fg=#fabc2e] #W #[fg=#83a597,bg=default]"
# light status
bind b set -g status-bg colour255\; setw -g window-status-current-format " #[fg=colour255,bg=colour20]#[fg=colour255,bright] #W #[fg=colour20,bg=default] "
# macos fix
# if-shell "uname | grep -q Darwin" "set-option -g default-command \"reattach-to-user-namespace -l zsh\"" "set -g default-terminal \"screen-256color\""
############################################################
####################### KEYBINDINGS ########################
############################################################
is_vim_pane_no_mode="ps -o state= -o comm= -t '#{pane_tty}' \
| grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$' \
&& [ '#{pane_in_mode}' -eq 0 ]"
# prefix binding
unbind C-b
set -g prefix C-f
bind C-f send-prefix
# Reload source
unbind r
bind r source-file ~/.tmux.conf \; display-message "Config reloaded..."
# yank
if-shell "uname | grep -q Darwin" {
bind-key -T copy-mode-vi 'y' send -X copy-pipe-and-cancel 'reattach-to-user-namespace pbcopy'
}
############################################################
######################## SPLITS ############################
############################################################
# Window Splitting
unbind %
bind | split-window -h -f -c '#{pane_current_path}'
bind \\ split-window -h -c '#{pane_current_path}'
bind _ split-window -v -f -c '#{pane_current_path}'
bind - split-window -v -c '#{pane_current_path}'
# Swap pane
bind -n M-h swap-window -t -1\; select-window -t -1
bind -n M-l swap-window -t +1\; select-window -t +1
# Resizing
bind J resize-pane -D 15
bind K resize-pane -U 15
bind L resize-pane -R 15
bind H resize-pane -L 15
# bind -n C-k if-shell "$is_vim_pane_no_mode" 'send-keys C-k' 'send-keys -R; send-keys C-l; clear-history'
bind -n C-k if-shell "$is_vim_pane_no_mode" 'send-keys C-k' 'send-keys -R; send-keys C-l'
############################################################
####################### LABELS #############################
############################################################
# Rename Window
unbind R
bind R command-prompt "rename-window %%"
# Pane titles
unbind t
bind t setw pane-border-status
set -g pane-border-format "#{pane_title}"
# Rename pane
unbind T
bind T command-prompt -p "(rename-pane)" -I "#T" "select-pane -T '%%'"
############################################################
####################### NAVIGATION #########################
############################################################
### Motion
# Smart pane switching with awareness of vim splits
bind h if-shell "$is_vim_pane_no_mode" 'send-keys C-f Left' 'select-pane -L'
bind j if-shell "$is_vim_pane_no_mode" 'send-keys C-f Down' 'select-pane -D'
bind k if-shell "$is_vim_pane_no_mode" 'send-keys C-f Up' 'select-pane -U'
bind l if-shell "$is_vim_pane_no_mode" 'send-keys C-f Right' 'select-pane -R'
############################################################
######################## PLUGINS ###########################
############################################################
if-shell -b 'test -d ~/.tmux/plugins/tpm' {
# <prefix> I - install
set -g @plugin 'tmux-plugins/tpm'
# rm .tmux/plugins/tmux-resurrect/strategies/nvim_session.sh
# cp .dotfiles/tmux-plugins/tmux-resurrect-patch/nvim_session.sh \
# .tmux/plugins/tmux-resurrect/strategies
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @resurrect-strategy-nvim 'session'
# mkdir -p ~/.tmux/plugins && git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
run '~/.tmux/plugins/tpm/tpm'
}
############################################################
####################### PROBATION ##########################
############################################################
#if-shell -b 'tmux display-popup 2>&1 /dev/null; [ 0 -eq $? ]' {
# popup for note taking
bind i display-popup -E 'cd ~/.notes && nvim journey.md'
# git TODO: actually use this
bind g display-popup -E -d '#{pane_current_path}' 'git status && zsh'
# rest
bind s display-popup -E -d '#{pane_current_path}'
#}
# local changes?
if-shell '[[ -f ~/.tmux.conf.local ]]' 'source-file ~/.tmux.conf.local'