183 lines
4.6 KiB
Bash
183 lines
4.6 KiB
Bash
# Needed for some graphics to work properly
|
|
# set -g default-terminal "tmux-256color"
|
|
# set -as terminal-features ',xterm-kitty:RGB'
|
|
# So keystrokes are forwarded correctly
|
|
set -g xterm-keys on
|
|
set -s extended-keys on
|
|
set -ag terminal-overrides ",foot*:Tc:extkeys:RGB"
|
|
set -as terminal-overrides ',*:Smulx=\E[4::%p1%dm' # undercurl support
|
|
|
|
# set -as terminal-features 'xterm*:extkeys'
|
|
# THIS IS WHAT MAKES EXTENDED MODIFIERS WORK IN TMUX
|
|
# set -as terminal-features '*ghostty*:extkeys'
|
|
# set -g default-terminal "tmux-256color"
|
|
set-option -g update-environment "WAYLAND_DISPLAY XDG_RUNTIME_DIR"
|
|
# # don't let programs rename window
|
|
set -g allow-rename off
|
|
# # don't wait after escape sequences
|
|
set -s escape-time 1
|
|
#
|
|
# # Fix some graphics issues
|
|
# set -gq allow-passthrough on
|
|
# set -g visual-activity off
|
|
|
|
# max lines in window history
|
|
set -g history-limit 10000
|
|
|
|
# bind to reload config
|
|
unbind r
|
|
bind r source-file ~/.config/tmux/tmux.conf
|
|
unbind -n C-Enter
|
|
# unbind -n C-m
|
|
|
|
# bind C-t to prefix
|
|
unbind C-t
|
|
unbind C-b
|
|
|
|
set -g prefix C-t
|
|
# cringe: will disable later
|
|
set -g mouse on
|
|
|
|
# tmux renames window automatically
|
|
setw -g automatic-rename on
|
|
|
|
# start indexing at 1 (based)
|
|
set -g base-index 1
|
|
set -g pane-base-index 1
|
|
set-window-option -g pane-base-index 1
|
|
# reset window numbers if layout changes
|
|
set-option -g renumber-windows on
|
|
|
|
# ignore terminal bell
|
|
set -g bell-action none
|
|
|
|
### PLUGINS
|
|
|
|
# plugin manager
|
|
set -g @plugin 'tmux-plugins/tpm'
|
|
# sensible defaults
|
|
set -g @plugin 'tmux-plugins/tmux-sensible'
|
|
# better yank
|
|
set -g @plugin 'tmux-plugins/tmux-yank'
|
|
# pretty minimal status
|
|
set -g @plugin 'niksingh710/minimal-tmux-status'
|
|
|
|
# Theme Settings
|
|
set -g @minimal-tmux-use-arrow false
|
|
set -g @minimal-tmux-status "top"
|
|
set -g @minimal-tmux-right true
|
|
set -g @minimal-tmux-justify "centre"
|
|
set -g @minimal-tmux-bg "#933737"
|
|
set -g @minimal-tmux-fg "#000000"
|
|
|
|
set -g @plugin 'tmux-plugins/tmux-resurrect'
|
|
set -g @resurrect-strategy-nvim 'session'
|
|
set -g @plugin 'tmux-plugins/tmux-continuum'
|
|
set -g @continuum-boot 'on'
|
|
|
|
# Awesome Tmux
|
|
# note: prefix + Tab to trigger
|
|
set -g @plugin 'laktak/extrakto'
|
|
# prefix + ?: keybindings help
|
|
set -g @plugin 'lost-melody/tmux-command-palette'
|
|
# easymotion
|
|
set -g @plugin 'ddzero2c/tmux-easymotion'
|
|
set -g @easymotion-key 's'
|
|
|
|
# prefix + T
|
|
set -g @plugin '27medkamal/tmux-session-wizard'
|
|
# prefix + g
|
|
set -g @plugin 'sturob/tmux-teleport'
|
|
|
|
# Prefix f to open main fzf
|
|
# Prefix C-w to open window switcher
|
|
TMUX_FZF_LAUNCH_KEY="C-f"
|
|
set -g @plugin 'sainnhe/tmux-fzf'
|
|
bind-key C-w run-shell -b "/home/fic/.config/tmux/plugins/tmux-fzf/scripts/window.sh switch"
|
|
|
|
# TODO:
|
|
# https://github.com/whame/tmux-modal
|
|
# https://github.com/gcla/tmux-wormhole
|
|
|
|
### NAVIGATION KEYBINDINGS
|
|
#
|
|
### Note: m:n:e:i are h:j:k:l on colemak-dh
|
|
|
|
# focus panes
|
|
bind -n M-m select-pane -L
|
|
bind -n M-n select-pane -D
|
|
bind -n M-e select-pane -U
|
|
bind -n M-i select-pane -R
|
|
|
|
# If we pressed prefix it's intentional; no need to confirm
|
|
bind x kill-window
|
|
|
|
# This will kill the pane
|
|
# ONLY asks for confirmation if it's the last
|
|
# pane in the window
|
|
bind -n M-x run-shell "~/.config/tmux/confirm_kill_pane.sh; true"
|
|
|
|
# Fullscreen pane
|
|
bind -n M-f resize-pane -Z
|
|
|
|
# Swap the split bindings to be consistent with nvim
|
|
# v -> split right
|
|
# s -> split down
|
|
bind -n M-v split-window -h -c "#{pane_current_path}"
|
|
bind -n M-s split-window -v -c "#{pane_current_path}"
|
|
|
|
# Resize pane
|
|
bind Left resize-pane -L 5
|
|
bind Right resize-pane -R 5
|
|
bind Up resize-pane -U 5
|
|
bind Down resize-pane -D 5
|
|
|
|
# Focus windows
|
|
bind -n M-u next-window
|
|
bind -n M-l previous-window
|
|
# Swap window left/right (keeping focus)
|
|
bind -n M-U swap-window -t + \; next-window
|
|
bind -n M-L swap-window -t - \; previous-window
|
|
|
|
# Swap active pane with direction
|
|
bind C-j swap-pane -t left
|
|
bind C-l swap-pane -D
|
|
bind C-u swap-pane -U
|
|
bind C-y swap-pane -t right
|
|
|
|
# m to mark a pane, M to "swap" it with current pane
|
|
# Note: this does not "unmark" the marked pane!
|
|
bind M swap-pane
|
|
|
|
# Unbind these resizing defaults
|
|
# as they conflict with Neovim
|
|
unbind -n M-Left
|
|
unbind -n M-Right
|
|
unbind -n M-Up
|
|
unbind -n M-Down
|
|
|
|
# Toggle status bar
|
|
bind-key b set-option status
|
|
|
|
# Enable vi keys in copy mode
|
|
set-window-option -g mode-keys vi
|
|
|
|
|
|
# Copy mode
|
|
# TODO: binding to cancel copy mode without selecting
|
|
bind v copy-mode
|
|
bind-key -T copy-mode-vi v send-keys -X begin-selection
|
|
bind-key -T copy-mode-vi C-v send-keys -X rectangle-toggle
|
|
bind-key -T copy-mode-vi y send-keys -X copy-selection-and-cancel
|
|
|
|
# Do not preserve the current working directory for new windows
|
|
bind c new-window -c ""
|
|
|
|
# TESTING
|
|
|
|
# DO NOT bind -n M-T display-message "Testing"
|
|
# bind -n C-Enter display-message "test?"
|
|
|
|
|
|
# WARN: This line must come last!
|
|
run '~/.tmux/plugins/tpm/tpm'
|