dotfiles/.tmux.conf

135 lines
4.6 KiB
Text
Raw Normal View History

2024-02-17 20:48:01 -08:00
################################################################################
# Plugins #
################################################################################
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'catppuccin/tmux'
################################################################################
# General #
################################################################################
# Set shell to fish.
set -g default-shell /bin/fish
# Make window index start at 1.
set -g base-index 1
# Make pane index start at 1.
setw -g pane-base-index 1
# Automatically renumber windows when one is deleted.
set -g renumber-windows on
2024-02-21 20:34:38 -08:00
set -g default-terminal "tmux-256color"
2024-02-17 20:48:01 -08:00
set -ag terminal-overrides ",*:RGB"
################################################################################
# Key Mappings #
################################################################################
# Remap prefix.
unbind C-b
set-option -g prefix C-a
bind C-a send-prefix
2024-03-03 14:29:11 -08:00
# Easy reload config.
bind r source-file ~/.tmux.conf \; display-message "Reloaded ~/.tmux.conf"
2024-02-17 20:48:01 -08:00
# Better split commands.
2024-03-03 14:29:11 -08:00
bind -N 'vsplit' | split-window -h -c "#{pane_current_path}"
bind -N 'vsplit' \\ split-window -h -c "#{pane_current_path}"
bind -N 'hsplit' - split-window -v -c "#{pane_current_path}"
2024-02-17 20:48:01 -08:00
unbind '"'
unbind %
# Vi-like pane switching.
2024-03-03 14:29:11 -08:00
bind -N 'Switch to pane (left)' h select-pane -L
bind -N 'Switch to pane (down)' j select-pane -D
bind -N 'Switch to pane (up)' k select-pane -U
bind -N 'Switch to pane (right)' l select-pane -R
2024-02-17 20:48:01 -08:00
# Vi-like resizing.
2024-03-03 14:29:11 -08:00
bind -r -N 'Resize pane (left)' M-h resize-pane -L 5
bind -r -N 'Resize pane (down)' M-j resize-pane -D 5
bind -r -N 'Resize pane (up)' M-k resize-pane -U 5
bind -r -N 'Resize pane (right)' M-l resize-pane -R 5
2024-02-17 20:48:01 -08:00
2024-03-03 14:29:11 -08:00
# Even out panes.
bind -N 'Evenly distribute panes' = select-layout -E
2024-02-17 20:48:01 -08:00
2024-03-03 14:29:11 -08:00
# Swap panes.
bind -r -N 'Swap current pane with the next' H swap-pane -U
bind -r -N 'Swap current pane with the previous' L swap-pane -D
# Window switching.
bind -N 'Previous window' Left previous-window
bind -N 'Next window' Right next-window
2024-02-17 20:48:01 -08:00
# Popup.
unbind i
2024-03-03 14:29:11 -08:00
bind -N 'Popup shell' i if-shell -F '#{==:#{session_name},scratch}' {
2024-02-17 20:48:01 -08:00
detach-client
} {
if-shell "tmux has-session -t scratch" {
display-popup -E -h 90% -w 90% "tmux attach-session -t scratch"
} {
display-popup -E -h 90% -w 90% "tmux new-session -d -c '#{pane_current_path}' -s scratch && tmux set-option -t scratch status off && tmux attach-session -t scratch"
}
}
2024-03-03 14:29:11 -08:00
# Vi copy mode.
setw -g mode-keys vi
set -g set-clipboard external
unbind [
bind -N 'Enter normal (copy) mode' Escape copy-mode
unbind p
bind p paste-buffer
bind -T copy-mode-vi v send -X begin-selection
bind -T copy-mode-vi y send -X copy-selection-and-cancel
2024-02-17 20:48:01 -08:00
################################################################################
# Catppuccin #
################################################################################
# catppuccin
set -g @catppuccin_flavour 'macchiato'
2024-03-03 14:29:11 -08:00
set -g @catppuccin_window_left_separator ""
set -g @catppuccin_window_right_separator " "
set -g @catppuccin_window_middle_separator " █"
2024-02-17 20:48:01 -08:00
set -g @catppuccin_window_number_position "right"
set -g @catppuccin_window_default_fill "number"
2024-03-03 14:29:11 -08:00
set -g @catppuccin_window_default_text "#W"
2024-02-17 20:48:01 -08:00
set -g @catppuccin_window_current_fill "number"
2024-03-03 14:29:11 -08:00
set -g @catppuccin_window_current_text "#W"
set -g @catppuccin_status_modules_right "directory user host session"
set -g @catppuccin_status_left_separator " "
set -g @catppuccin_status_right_separator ""
set -g @catppuccin_status_right_separator_inverse "no"
set -g @catppuccin_status_fill "icon"
set -g @catppuccin_status_connect_separator "no"
2024-02-17 20:48:01 -08:00
set -g @catppuccin_directory_text "#{pane_current_path}"
set -g @catppuccin_date_time_text "%b %d • %I:%M %p"
################################################################################
# tpm #
################################################################################
# Install tpm if not already installed.
if "test ! -d ~/.tmux/plugins/tpm" \
"run 'git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm && ~/.tmux/plugins/tpm/bin/install_plugins'"
# Init tmux plugin manager.
# Must be very last line!!
run '~/.tmux/plugins/tpm/tpm'