diff --git a/.config/tmux/hooks/tmux.regular.conf b/.config/tmux/hooks/tmux.regular.conf new file mode 100644 index 0000000..aab40e6 --- /dev/null +++ b/.config/tmux/hooks/tmux.regular.conf @@ -0,0 +1 @@ +set -g status-style bg=default diff --git a/.config/tmux/hooks/tmux.ssh.conf b/.config/tmux/hooks/tmux.ssh.conf new file mode 100644 index 0000000..78df0bc --- /dev/null +++ b/.config/tmux/hooks/tmux.ssh.conf @@ -0,0 +1 @@ +set -g status-style bg=blue,fg=black; diff --git a/.config/tmux/tmux.conf b/.config/tmux/tmux.conf index 1dec0b6..e4924cc 100644 --- a/.config/tmux/tmux.conf +++ b/.config/tmux/tmux.conf @@ -1,62 +1,77 @@ -# General +# statusbar +setw -g monitor-activity on +set -g visual-activity on +set -g history-limit 100000 +set -g default-command "${SHELL}" +setw -g aggressive-resize on +set -sg escape-time 0 -unbind C-b -set -g prefix C-a -bind-key C-a send-prefix -set -g base-index 1 - -setw -g monitor-activity on -set -g status-keys vi +# keybindings +# NOTE: I intend to use defaults whenever feasible +# - my prefix key is still C-b +# - however, I do use vi mode setw -g mode-keys vi -set -g history-limit 10000 - -set-window-option -g automatic-rename on -set-option -g set-titles on -set-option -sg escape-time 10 - -# Minimal status bar -set -g status-left '' -set -g status-right '' - -bind r source-file ~/.config/tmux/tmux.conf # reload tmux conf - -# Keybindings - -# Split +set -g status-keys vi +bind r source-file ~/.config/tmux/tmux.conf # reload tmux conf +# Splits unbind v unbind s -unbind % # vsplit +unbind % # vsplit unbind '"' # hsplit -bind v split-window -h -c "#{pane_current_path}" -bind s split-window -v -c "#{pane_current_path}" -# Split navigate -bind -r h select-pane -L -bind -r j select-pane -D -bind -r k select-pane -U -bind -r l select-pane -R -# Split resize -bind -r H resize-pane -L 4 -bind -r J resize-pane -D 4 -bind -r K resize-pane -U 4 -bind -r L resize-pane -R 4 +bind v split-window -h -c "#{pane_current_path}" +bind s split-window -v -c "#{pane_current_path}" +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 H resize-pane -L 4 +bind -r J resize-pane -D 4 +bind -r K resize-pane -U 4 +bind -r L resize-pane -R 4 -# Theming +bind-key -T root F1 select-window -t 1 +bind-key -T root F2 select-window -t 2 +bind-key -T root F3 select-window -t 3 +bind-key -T root F4 select-window -t 4 +bind-key -T root F5 select-window -t 5 +bind-key -T root F6 select-window -t 6 +bind-key -T root F7 select-window -t 7 +bind-key -T root F8 select-window -t 8 +bind-key -T root F9 select-window -t 9 -set -g pane-border-style fg=#222222 -set -g pane-active-border-style fg=#222222 -set -g display-panes-active-colour blue -set -g default-terminal "tmux-256color" -set -g message-style bg=#111111,fg=#aaaaaa -set -g status-interval 1 +# 1-based indexing makes most sense for keyboard layouts (where number row start at 1) +set -g base-index 1 +set -g pane-base-index 1 +setw -g automatic-rename # statusbar -set -g status-position bottom -set -g window-status-separator '' -set -g status-style 'bg=#111111 fg=#aaaaaa dim' -set -g status-left '' -set -g status-right '#[fg=black,bg=#aaaaaa] #(task status:pending count) #(echo "☐") ' -setw -g window-status-current-style 'fg=black bg=#aaaaaa' -setw -g window-status-current-format ' #I:#W#F ' -setw -g window-status-style 'bg=#111111 fg=#aaaaaa' -setw -g window-status-format ' #I:#W#F ' -setw -g window-status-activity-style 'fg=#aaaaaa bg=#111111' +set -g status-position top +set -g status-left-length 20 +set -g window-status-separator "" +%if "#{==:#{host},desktop-arch}" +set -g status-left "#[bg=colour235,fg=colour255] #S #[fg=colour235,bg=default] " +set -g status-right "" +%else +set -g status-left '#h ' +set -g status-right '#(uptime | cut -f 4-5 -d " " | cut -f 1 -d ",") %a%l:%M:%S %p %Y-%m-%d' +%endif + +# theming +%if "#{==:#{host},desktop-arch}" +set -g default-terminal "tmux-256color" +setw -g window-status-style fg=colour244,bg=default +setw -g window-status-current-style fg=colour232,bg=default,bold +set -g message-style fg=colour232,bg=default +setw -g clock-mode-colour colour235 +set -g status-style bg=default +set -g pane-border-style fg=#cccccc +set -g pane-active-border-style fg=#555555 +set -g message-style bg=#cccccc,fg=#000000 +%endif + +set-hook -g after-new-session 'if -F "#{==:#{session_name},ssh}" "source ${XDG_CONFIG_HOME}/tmux/hooks/tmux.ssh.conf" "source ${XDG_CONFIG_HOME}/tmux/hooks/tmux.regular.conf"' + +# Vi copypaste mode +if-shell "test '\( #{$TMUX_VERSION_MAJOR} -eq 2 -a #{$TMUX_VERSION_MINOR} -ge 4 \)'" 'bind-key -Tcopy-mode-vi v send -X begin-selection; bind-key -Tcopy-mode-vi y send -X copy-selection-and-cancel' +if-shell '\( #{$TMUX_VERSION_MAJOR} -eq 2 -a #{$TMUX_VERSION_MINOR} -lt 4\) -o #{$TMUX_VERSION_MAJOR} -le 1' 'bind-key -t vi-copy v begin-selection; bind-key -t vi-copy y copy-selection' +if-shell '\( #{$TMUX_VERSION_MAJOR} -eq 2 -a #{$TMUX_VERSION_MINOR} -lt 2\) -o #{$TMUX_VERSION_MAJOR} -le 1' 'set-option -g status-utf8 on'