From 6da6797f1b4fe9ec08f04273947cefae6d682b37 Mon Sep 17 00:00:00 2001 From: Ismo Vuorinen Date: Fri, 10 Jan 2025 21:56:39 +0200 Subject: [PATCH] chore(config): tmux config tweaks moved config around, did cleanup and moved TMUX_TMPDIR under XDG_STATE_HOME. added the state/tmux folder creation to the dotbot install config. --- config/exports | 1 + config/tmux/tmux.conf | 210 +++++++++++++----------------------------- install.conf.yaml | 1 + 3 files changed, 64 insertions(+), 148 deletions(-) diff --git a/config/exports b/config/exports index cb212ba..eda8025 100755 --- a/config/exports +++ b/config/exports @@ -468,6 +468,7 @@ export TF_PLUGIN_CACHE_DIR="$XDG_CACHE_HOME/terraform/plugin-cache" # tmux # https://tmux.github.io/ msg "Setting up tmux configuration" +export TMUX_TMPDIR="$XDG_STATE_HOME/tmux" export TMUX_PLUGINS="$XDG_CONFIG_HOME/tmux/plugins" export TMUX_CONF="$XDG_CONFIG_HOME/tmux/tmux.conf" ## These settings are for zsh-tmux diff --git a/config/tmux/tmux.conf b/config/tmux/tmux.conf index 236f54e..ecdc8a8 100644 --- a/config/tmux/tmux.conf +++ b/config/tmux/tmux.conf @@ -4,91 +4,6 @@ # - https://tmuxguide.readthedocs.io/en/latest/tmux/tmux.html # - https://github.com/dreamsofcode-io/tmux/blob/main/tmux.conf -# ╭──────────────────────────────────────────────────────────╮ -# │ Bindings │ -# ╰──────────────────────────────────────────────────────────╯ -# bind flags -# -r = repeatable, only needs prefix once -# -n = doesn't need prefix -# -t = binds to a certain key-table (root, copy-mode, prefix, etc.) - -# Set to Control + Space, keeping the default of C-b intact. -# C-Space send-prefix line doubles the prefix when in nested tmux session. -# unbind C-b -set -g prefix C-Space -bind C-Space send-prefix - -# Use Alt-arrow keys without prefix key to switch panes -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 - -# 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" - -# Reload tmux config with + r -unbind r -bind r source-file ~/.dotfiles/config/tmux/tmux.conf \; display "tmux cfg reloaded!" - -# Switch to next client with ( and previous with ) -# Repeatable, only needs prefix once -bind -r '(' switch-client -p\; refresh-client -S -bind -r ')' switch-client -n\; refresh-client -S - -# Switch between previous and next windows with repeatable -# + n and + p -bind -r n next-window -bind -r p previous-window - -# Switch between two most recently used windows -bind Space last-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)" - -bind-key > swap-window -t +1 \; next -bind-key < swap-window -t -1 \; prev - -# Open a new window with + N -bind N new-window - -# Set default directory for new windows in this session to current directory: -bind M-c attach-session -c "#{pane_current_path}" - -# Open a new window in the current directory -bind C new-window -c "#{pane_current_path}" - -# Copy mode -bind -T copy-mode-vi v send-keys -X begin-selection -bind -T copy-mode-vi C-v send-keys -X rectangle-toggle -bind -T copy-mode-vi y send-keys -X copy-selection-and-cancel - -# Splits -bind '"' split-window -v -c "#{pane_current_path}" -bind '!' split-window -h -c "#{pane_current_path}" - -# .local/bin/t triggers -bind -r T new-window ~/.local/bin/t -bind -r D run-shell "t ~/Code/ivuorinen/dotfiles" - -# synchronize all panes in a window -bind y setw synchronize-panes - -#### copy mode : vim #### -# copy mode using 'Esc' -unbind [ -bind Escape copy-mode - -# paste using 'p' -unbind p -bind p paste-buffer - # ╭──────────────────────────────────────────────────────────╮ # │ Settings │ # ╰──────────────────────────────────────────────────────────╯ @@ -103,22 +18,21 @@ bind p paste-buffer set -g default-terminal "tmux-256color" # set -ag terminal-overrides ",xterm-256color:RGB" -# Undercurl -# set -g default-terminal "${TERM}" +# undercurl set -as terminal-overrides ',*:Smulx=\E[4::%p1%dm' # undercurl support set -as terminal-overrides ',*:Setulc=\E[58::2::::%p1%{65536}%/%d::%p1%{256}%/%{255}%&%d::%p1%{255}%&%d%;m' # underscore colors - needs tmux-3.0 # Enable hyperlinks -set -as terminal-overrides ',*:Hls=\E]8;id=%p1%s;%p2%s\E\\:Hlr=\E]8;;\E\\'' +# set -as terminal-overrides ',*:Hls=\E]8;id=%p1%s;%p2%s\E\\:Hlr=\E]8;;\E\\'' -# Setting status on -set -g status "on" - -# Allow tmux to set the terminal title -set -g set-titles on - -# Hide clock -set -g display-time 0 +set -g status-keys vi # vi keys to move between panes +set -g detach-on-destroy off # don't detach tmux when killing a session +set -g display-time 0 # Hide clock +set -g focus-events on # Focus events enabled for terminals that support them +set -g mouse on # Mouse support +set -g set-titles "on" # Allow tmux to set the terminal title +set -g set-titles on # Expose window title +set -g status "on" # Setting status on # Activity Monitoring (for when something happens in another pain) set -g monitor-activity on @@ -128,63 +42,28 @@ set -g visual-bell off # A bell in another window should cause a bell in the current window set -g bell-action any -# Expose window title -set-option -g set-titles on - -# Set bigger history limit -set -g history-limit 20000 - # Keep Tmux alive when the initial command is finished set -g remain-on-exit off -# Mouse support -set -g mouse on - -# Make delay shorter -set -sg escape-time 0 - # Start windows and panes at 1, not 0 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 - -# set vi-mode -set-window-option -g mode-keys vi - -# 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 - -# 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 +set -g renumber-windows on # ╭──────────────────────────────────────────────────────────╮ # │ Theme │ # ╰──────────────────────────────────────────────────────────╯ -set -g status-left-length "0" -set -g status-right-length "30" - -set-option -g status-position "bottom" -set-option -g status-justify left -set-option -g status-left '' -set-option -g window-status-format ' #I:#W ' -set-option -g window-status-current-format ' #I:#W#{?window_zoomed_flag, ◈ ,} ' - -set-option -g status-right "#S@#{hostname_short} #{tmux_mode_indicator}" - -set -g pane-border-style "fg=#3b4261" set -g pane-active-border-style "fg=#7aa2f7" - -# https://github.com/erikw/tmux-dark-notify -set -g @dark-notify-theme-path-light '~/.dotfiles/config/tmux/theme-light.conf' -set -g @dark-notify-theme-path-dark '~/.dotfiles/config/tmux/theme-dark.conf' +set -g pane-border-style "fg=#3b4261" +set -g status-justify "left" +set -g status-left '' +set -g status-left-length "0" +set -g status-position "bottom" +set -g status-right "#S@#{hostname_short} #{tmux_mode_indicator}" +set -g status-right-length "30" +set -g window-status-current-format ' #I:#W#{?window_zoomed_flag, ◈ ,} ' +set -g window-status-format ' #I:#W ' # ╭──────────────────────────────────────────────────────────╮ # │ Plugins related configurations │ @@ -200,33 +79,68 @@ set -g @suspend_key 'F12' ### Maximum name length of a window set -g @tmux_window_name_max_name_len "20" ### Replace $HOME with ~ in window names -set -g @tmux_window_name_use_tilde "True" -set -g @tmux_window_name_shells "['bash', 'fish', 'sh', 'zsh']" set -g @tmux_window_dir_programs "['nvim', 'vim', 'vi', 'git']" set -g @tmux_window_name_ignored_programs "['sqlite3', 'antidote', 'direnv', 'md5']" # Default is [] +set -g @tmux_window_name_shells "['bash', 'fish', 'sh', 'zsh']" set -g @tmux_window_name_substitute_sets "[('.+ipython2', 'ipython2'), ('.+ipython3', 'ipython3'), ('.+\.local', '.local'), ('.+asdf', 'asdf')]" +set -g @tmux_window_name_use_tilde "True" -## https://github.com/tmux-plugins/tmux-continuum -# set -g @continuum-restore 'on' +# https://github.com/erikw/tmux-dark-notify +set -g @dark-notify-theme-path-light '~/.dotfiles/config/tmux/theme-light.conf' +set -g @dark-notify-theme-path-dark '~/.dotfiles/config/tmux/theme-dark.conf' ## https://github.com/MunifTanjim/tmux-mode-indicator -set -g @mode_indicator_prefix_mode_style 'bg=default,fg=#7aa2f7' set -g @mode_indicator_copy_mode_style 'bg=default,fg=yellow' set -g @mode_indicator_empty_mode_style 'bg=default,fg=#7aa2f7' +set -g @mode_indicator_prefix_mode_style 'bg=default,fg=#7aa2f7' set -g @mode_indicator_sync_mode_style 'bg=default,fg=red' # https://github.com/wfxr/tmux-fzf-url set -g @fzf-url-bind 'u' set -g @fzf-url-history-limit '2000' +# ╭──────────────────────────────────────────────────────────╮ +# │ Bindings │ +# ╰──────────────────────────────────────────────────────────╯ +# bind flags +# -r = repeatable, only needs prefix once +# -n = doesn't need prefix +# -t = binds to a certain key-table (root, copy-mode, prefix, etc.) + +# Set to Control + Space, keeping the default of C-b intact. +# C-Space send-prefix line doubles the prefix when in nested tmux session. +set -g prefix C-Space +bind C-Space send-prefix + +# Use Alt-arrow keys without prefix key to switch panes +bind -n M-Down select-pane -D +bind -n M-Left select-pane -L +bind -n M-Right select-pane -R +bind -n M-Up select-pane -U + +# Easier switching between window +bind C-n next-window +bind C-p previous-window +bind C-a last-window + +# Reload tmux config with + r +unbind r +bind r "source-file ~/.dotfiles/config/tmux/tmux.conf; display 'tmux cfg reloaded!'" + +# copy mode using 'Esc' +unbind [ +bind Escape copy-mode + +# paste using 'p' +unbind p +bind p paste-buffer + # ╭──────────────────────────────────────────────────────────╮ # │ Plugins │ # ╰──────────────────────────────────────────────────────────╯ run-shell ~/.dotfiles/config/tmux/plugins/tmux-sensible/sensible.tmux run-shell ~/.dotfiles/config/tmux/plugins/tmux-window-name/tmux_window_name.tmux -# run-shell ~/.dotfiles/config/tmux/plugins/tmux-continuum/continuum.tmux -# run-shell ~/.dotfiles/config/tmux/plugins/tmux-sessionist/sessionist.tmux run-shell ~/.dotfiles/config/tmux/plugins/tmux-mode-indicator/mode_indicator.tmux run-shell ~/.dotfiles/config/tmux/plugins/tmux-suspend/suspend.tmux run-shell ~/.dotfiles/config/tmux/plugins/tmux-yank/yank.tmux diff --git a/install.conf.yaml b/install.conf.yaml index fd2dc3b..6396285 100644 --- a/install.conf.yaml +++ b/install.conf.yaml @@ -21,6 +21,7 @@ ~/.local/share/gnupg: mode: 0700 ~/.local/state: + ~/.local/state/tmux: ~/.local/state/zsh: ~/.ssh: mode: 0700