mirror of
https://github.com/boxpositron/absolute-dotfiles.git
synced 2026-10-24 08:23:19 +00:00
6fb7007ea9
omo-notify now drives three signals from omo's UserPromptSubmit, Stop and Notification hooks: - A sound through afplay, so Focus modes cannot mute it - A Ghostty notification (OSC 777) written to the session's tmux client terminal, so clicking it opens the tab it came from. This replaces the osascript banner, which opened Script Editor's file picker on click - omo-status markers in front of the tab title: red error, amber waiting for input, green finished, blue working. A tab shows its most urgent agent; focusing it clears red, amber and green and selects the pane that sent the banner tmux puts @omo_status in the title and runs omo-status on client focus.
148 lines
4.8 KiB
Bash
148 lines
4.8 KiB
Bash
set -g mouse on
|
|
bind r source-file ~/.tmux.conf
|
|
set-option -a terminal-features 'xterm*:RGB'
|
|
# Extended keys so TUIs (omo, nvim) receive Shift+Enter and other modified keys
|
|
set -g extended-keys on
|
|
set -g extended-keys-format csi-u
|
|
set-option -a terminal-features 'xterm*:extkeys'
|
|
set-option -sg escape-time 10
|
|
set-option -g focus-events on
|
|
set-window-option -g mode-keys vi
|
|
set-option -g renumber-windows on
|
|
# Allow passthrough
|
|
set -gq allow-passthrough on
|
|
set -g visual-activity off
|
|
|
|
set -ga update-environment TERM
|
|
set -ga update-environment TERM_PROGRAM
|
|
|
|
# Key Bindings
|
|
# Auto Source tmux.conf
|
|
unbind r
|
|
bind r source-file ~/.tmux.conf \; display "Reloaded!"
|
|
|
|
|
|
# Set binding for searching with / and ?
|
|
bind-key / copy-mode \; send-key ?
|
|
|
|
# Setting up vi binds for tmux copy mode
|
|
bind-key -T copy-mode-vi "v" send-keys -X begin-selection
|
|
bind-key -T copy-mode-vi "y" send-keys -X copy-selection
|
|
|
|
unbind -T copy-mode-vi MouseDragEnd1Pane
|
|
|
|
# Setting up vertical split with |
|
|
unbind %
|
|
bind | split-window -h -c '#{pane_current_path}'
|
|
|
|
# Set base index to 1
|
|
set -g base-index 1
|
|
setw -g pane-base-index 1
|
|
|
|
# Set kill pane to Shift + Option + X
|
|
bind -n M-X kill-pane
|
|
|
|
# Setting up horizontal split with -
|
|
unbind '"'
|
|
bind - split-window -v -c '#{pane_current_path}'
|
|
|
|
unbind 'C'
|
|
bind C attach-session -c "#{pane_current_path}"
|
|
|
|
# Setting up window movement with leader key + Left/Right arrow
|
|
bind Left swap-window -t -1\; select-window -t -1
|
|
bind Right swap-window -t +1\; select-window -t +1
|
|
|
|
# Setting up pane resize with hjkl
|
|
bind -r j resize-pane -D 5
|
|
bind -r k resize-pane -U 5
|
|
bind -r l resize-pane -R 5
|
|
bind -r h resize-pane -L 5
|
|
|
|
# Setting up pane minimize/maximize with m
|
|
bind -r m resize-pane -Z
|
|
|
|
# Push tmux window/session info to the terminal title
|
|
set -g set-titles on
|
|
# omo-status puts a coloured marker (@omo_status) in front of the session name;
|
|
# focusing the tab clears the attention markers.
|
|
set -g set-titles-string "#{?@omo_status,#{@omo_status} ,}#{session_name}"
|
|
set-hook -g client-focus-in 'run-shell -b "~/.local/bin/omo-status focus #{q:hook_client}"'
|
|
|
|
# Set plugin manager path before loading plugins
|
|
set-environment -g TMUX_PLUGIN_MANAGER_PATH "$HOME/.tmux/plugins"
|
|
|
|
# List of plugins
|
|
set -g @plugin 'tmux-plugins/tpm'
|
|
set -g @plugin 'tmux-plugins/tmux-sensible'
|
|
|
|
set -g @plugin 'MunifTanjim/tmux-mode-indicator'
|
|
set -g @plugin 'omerxx/catppuccin-tmux'
|
|
set -g @plugin 'omerxx/tmux-sessionx'
|
|
set -g @plugin 'omerxx/tmux-floax'
|
|
|
|
set -g @plugin 'tmux-plugins/tmux-resurrect'
|
|
set -g @plugin 'tmux-plugins/tmux-continuum'
|
|
|
|
set -g @resurrect-dir "~/.tmux/resurrect"
|
|
set -g @resurrect-capture-pane-contents 'on'
|
|
|
|
|
|
set -g @sessionx-bind 's'
|
|
set -g @sessionx-window-mode 'on'
|
|
set -g @sessionx-tree-mode 'off'
|
|
set -g status-position top
|
|
|
|
set -g @catppuccin_window_left_separator ""
|
|
set -g @catppuccin_window_right_separator " "
|
|
set -g @catppuccin_window_middle_separator " █"
|
|
set -g @catppuccin_window_number_position "right"
|
|
set -g @catppuccin_window_default_fill "number"
|
|
set -g @catppuccin_window_default_text "#W"
|
|
set -g @catppuccin_window_current_fill "number"
|
|
set -g @catppuccin_window_current_text "#W#{?window_zoomed_flag,(),}"
|
|
set -g @catppuccin_status_modules_right "directory"
|
|
set -g @catppuccin_status_modules_left "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"
|
|
set -g @catppuccin_directory_text "#{b:pane_current_path}"
|
|
# set -g @catppuccin_date_time_text "%H:%M"
|
|
|
|
# for neovim
|
|
set -g @resurrect-strategy-nvim 'session'
|
|
set -g @continuum-restore 'on'
|
|
|
|
# Is VIM?
|
|
# TMUX Navigation
|
|
|
|
is_vim="ps -o state= -o comm= -t '#{pane_tty}' \
|
|
| grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|l?n?vim?x?|fzf|pipenv)(diff)?$'"
|
|
|
|
bind-key -n 'C-h' if-shell "$is_vim" 'send-keys C-h' 'select-pane -L'
|
|
bind-key -n 'C-j' if-shell "$is_vim" 'send-keys C-j' 'select-pane -D'
|
|
bind-key -n 'C-k' if-shell "$is_vim" 'send-keys C-k' 'select-pane -U'
|
|
bind-key -n 'C-l' if-shell "$is_vim" 'send-keys C-l' 'select-pane -R'
|
|
|
|
tmux_version='$(tmux -V | sed -En "s/^tmux ([0-9]+(.[0-9]+)?).*/\1/p")'
|
|
|
|
bind-key -T copy-mode-vi 'C-h' select-pane -L
|
|
bind-key -T copy-mode-vi 'C-j' select-pane -D
|
|
bind-key -T copy-mode-vi 'C-k' select-pane -U
|
|
bind-key -T copy-mode-vi 'C-l' select-pane -R
|
|
bind-key -T copy-mode-vi 'C-\' select-pane -l
|
|
|
|
|
|
# Clipboard (OSC 52)
|
|
# Required for nested tmux (local tmux -> ssh/mosh -> remote tmux): the inner
|
|
# tmux sends its copies up as OSC 52, and tmux only accepts OSC 52 coming
|
|
# from a pane when set-clipboard is "on". The default "external" drops it.
|
|
set -g set-clipboard on
|
|
set -as terminal-features ',*:clipboard'
|
|
|
|
#
|
|
# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
|
|
run '~/.tmux/plugins/tpm/tpm'
|