Marty Oehme
167744e8c8
Tmux needs Tc set to enable truecolor support. At the same time, the file was setting the same variable multiple times and in illogical ways. So it now gets the term env var from the actual variable and simply adds truecolor support. Also removed cursor switching support for nvim, since tmux seems to support it natively now. If it does not, this needs to be reinstituted. Following discussions here: https://www.reddit.com/r/neovim/comments/825dj7/the_endless_litany_of_tmux_and_nvim_color_problems/ and here: https://stackoverflow.com/questions/41783367/tmux-tmux-true-color-is-not-working-properly
179 lines
6.6 KiB
Bash
179 lines
6.6 KiB
Bash
# Layout of this conf file:
|
|
# 1. Global Settings
|
|
# 2. Keybinds
|
|
# 3. Keybinds
|
|
# 4. Theme
|
|
|
|
# For rapid change prototyping, disabled normally:
|
|
# bind-key r source-file ~/.config/tmux/tmux.conf \; display-message "config reloaded."
|
|
|
|
######################
|
|
### 1. GLOBAL SETTINGS
|
|
######################
|
|
|
|
# show that activity happens but don't display a huge 'activity happening' notification
|
|
setw -g monitor-activity on
|
|
set -g visual-activity off
|
|
|
|
# Start counting windows and panes at 1
|
|
set -g base-index 1
|
|
setw -g pane-base-index 1
|
|
set -g renumber-windows on
|
|
|
|
# Terminal improvements
|
|
set-window-option -g automatic-rename on
|
|
set-option -g set-titles on
|
|
set -g mouse on
|
|
set -s default-terminal $TERM
|
|
# allow truecolor support
|
|
set -as terminal-overrides ",*:Tc"
|
|
# Set Cursor terminal override, so nvim can change cursor style when changing modes
|
|
# more info see nvim, :help tui-cursor-shape
|
|
# LEGACY: this should not be necessary anymore
|
|
# set -ga terminal-overrides '*:Ss=\E[%p1%d q:Se=\E[ q'
|
|
set -g status-keys vi
|
|
set -g history-limit 10000
|
|
|
|
# Screen size is based on the smallest client looking at the current windows, not the smallest
|
|
# client connected to the overall session. If two clients are connected to the same session but not
|
|
# looking at the same window, why would they care about each others screen size?
|
|
setw -g aggressive-resize on
|
|
|
|
# No delay for escape key press
|
|
set -sg escape-time 0
|
|
|
|
|
|
####################
|
|
## 2. PLUGINS ##
|
|
####################
|
|
|
|
set -g @tpm_plugins ' \
|
|
tmux-plugins/tpm \
|
|
tmux-plugins/tmux-sensible \
|
|
christoomey/vim-tmux-navigator \
|
|
Morantron/tmux-fingers \
|
|
'
|
|
|
|
set -g @fingers-key F
|
|
|
|
# make sure tpm is installed
|
|
if-shell "test ! -d $TMUX_PLUGIN_MANAGER_PATH/tpm" \
|
|
"run 'git clone https://github.com/tmux-plugins/tpm $TMUX_PLUGIN_MANAGER_PATH/tpm && $TMUX_PLUGIN_MANAGER_PATH/tpm/bin/install_plugins'" \
|
|
|
|
# optinally add this to install plugins on each start -- adds small lag to startup
|
|
# "run-shell $TMUX_PLUGIN_MANAGER_PATH/tpm/bin/install_plugins"
|
|
|
|
#####################
|
|
## 3. KEYBINDINGS ##
|
|
#####################
|
|
|
|
# Unbind some defaults
|
|
unbind '"'
|
|
unbind %
|
|
|
|
# Custom modifier key
|
|
set -g prefix C-a
|
|
unbind-key C-b
|
|
bind-key -r C-a send-prefix
|
|
|
|
# Window Navigation - Prefix + Vim Keys
|
|
bind-key -r C-h select-window -t :-
|
|
bind-key -r C-l select-window -t :+
|
|
|
|
# Resize Panes
|
|
bind-key -r H resize-pane -L 3
|
|
bind-key -r J resize-pane -D 1
|
|
bind-key -r K resize-pane -U 1
|
|
bind-key -r L resize-pane -R 3
|
|
|
|
bind-key -r C-H resize-pane -L 10
|
|
bind-key -r C-J resize-pane -D 5
|
|
bind-key -r C-K resize-pane -U 5
|
|
bind-key -r C-L resize-pane -R 10
|
|
|
|
# Send Pane to a new window (but stay on current window), join it back into the current window
|
|
bind-key B break-pane -d
|
|
bind-key C-b command-prompt -p "join pane from: " "join-pane -h -s '%%'"
|
|
|
|
# Swap panes within the current window (swaps pane # entered with currently selected pane)
|
|
bind-key b display-panes\; command-prompt -p "pane #: " "swap-pane -t '%%'"
|
|
|
|
# Kill tabs quicker
|
|
bind-key x kill-pane
|
|
bind-key C-x kill-window
|
|
|
|
# Split Window into panes - automatically handled by plugin
|
|
bind-key '\' split-window -h -c '#{pane_current_path}'
|
|
bind-key '-' split-window -v -c '#{pane_current_path}'
|
|
|
|
# Open a sessions chooser
|
|
bind C-j split-window -v "tmux list-sessions | sed -E 's/:.*$//' | grep -v \"^$(tmux display-message -p '#S')\$\" | fzf --reverse | xargs tmux switch-client -t"
|
|
|
|
#####################
|
|
## 4. THEME ##
|
|
#####################
|
|
|
|
# Status update interval
|
|
set -g status-interval 1
|
|
# Clock mode
|
|
set -g clock-mode-colour colour24
|
|
set -g clock-mode-style 24
|
|
|
|
# This tmux statusbar config was created by tmuxline.vim
|
|
# on Wed, 13 Mar 2019
|
|
|
|
set -g message-command-style bg="#2e2e2e",fg="#c8c8c8"
|
|
set -g message-style bg="#2e2e2e",fg="#c8c8c8"
|
|
set -g pane-active-border-style fg="#2e2e2e"
|
|
set -g pane-border-style fg="#2e2e2e"
|
|
set -g status-justify "centre"
|
|
set -g status "on"
|
|
set -g status-style "none"
|
|
set -g status-style "none"
|
|
set -g status-left-length "100"
|
|
set -g status-bg "#2e2e2e"
|
|
set -g status-right-length "100"
|
|
setw -g window-status-style fg="#c8c8c8",bg="#2e2e2e","none"
|
|
setw -g window-status-activity-style bg="#2e2e2e",fg="#c8c8c8","underscore"
|
|
setw -g window-status-separator ""
|
|
set -g status-left "#[fg=#c8c8c8,bg=#2e2e2e] #S #[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]#[fg=#c8c8c8,bg=#2e2e2e] #(whoami) #[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]#[fg=#c8c8c8,bg=#2e2e2e] #I:#P #[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]"
|
|
set -g status-right "#[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics] #[fg=#c8c8c8,bg=#2e2e2e] #{?client_prefix,#[fg=colour232]#[bg=brightblue],} %H:%M:%S #[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]#[fg=#c8c8c8,bg=#2e2e2e] %d-%b-%y #[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]#[fg=#c8c8c8,bg=#2e2e2e] #H "
|
|
setw -g window-status-format "#[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]#[default] #I #W #[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]"
|
|
setw -g window-status-current-format "#[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]#[fg=#c8c8c8,bg=#2e2e2e] #I #W #[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]"
|
|
|
|
########################
|
|
## 5. Nested Sessions ##
|
|
########################
|
|
# from: https://github.com/samoshkin/tmux-config/blob/master/tmux/tmux.conf
|
|
# all credit to samoshkin
|
|
|
|
# Session is considered to be remote when we ssh into host
|
|
if-shell 'test -n "$SSH_CLIENT"' \
|
|
'source-file $XDG_CONFIG_HOME/tmux/tmux.remote.conf'
|
|
|
|
# We want to have single prefix key "C-a", usable both for local and remote session
|
|
# we don't want to "C-a" + "a" approach either
|
|
# Idea is to turn off all key bindings and prefix handling on local session,
|
|
# so that all keystrokes are passed to inner/remote session
|
|
|
|
# see: toggle on/off all keybindings · Issue #237 · tmux/tmux - https://github.com/tmux/tmux/issues/237
|
|
|
|
# Also, change some visual styles when window keys are off
|
|
bind -T root F12 \
|
|
set prefix None \;\
|
|
set key-table off \;\
|
|
set status-style fg="colour245",bg="colour238" \;\
|
|
set window-status-current-format "#[fg=$color_window_off_status_bg,bg=$color_window_off_status_current_bg]$separator_powerline_right#[default] #I:#W# #[fg=$color_window_off_status_current_bg,bg=$color_window_off_status_bg]$separator_powerline_right#[default]" \;\
|
|
set window-status-current-style fg="colour232",bg="colour254","bold" \;\
|
|
if -F '#{pane_in_mode}' 'send-keys -X cancel' \;\
|
|
refresh-client -S \;\
|
|
|
|
bind -T off F12 \
|
|
set -u prefix \;\
|
|
set -u key-table \;\
|
|
set -u status-style \;\
|
|
set -u window-status-current-style \;\
|
|
set -u window-status-current-format \;\
|
|
refresh-client -S
|
|
|
|
run -b "$TMUX_PLUGIN_MANAGER_PATH/tpm/tpm"
|