refactor: switch to catppuccin mocha across tmux and neovim
- tmux: hand-rolled catppuccin theme, three-way status bar toggle, plugin cleanup - nvim: switch colorscheme to catppuccin-mocha, update lualine colors - nvim: add tmuxline.vim for tmux statusline generation - kitty: fix MesloLGS NF font typo, remove deprecated config keys Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,59 +0,0 @@
|
||||
# Reset prefix to Ctrl-b
|
||||
unbind C-a # Unbind any custom prefixes (e.g., Ctrl-a)
|
||||
set-option -g prefix C-b
|
||||
bind C-b send-prefix # Ensure Ctrl-b works as the prefix
|
||||
# Sensible Defaults
|
||||
set -g mouse on # Enable mouse support
|
||||
set -g history-limit 10000 # Large scrollback history
|
||||
setw -g automatic-rename off # Keep pane names static
|
||||
set -g base-index 1 # Pane numbering starts at 1
|
||||
setw -g pane-base-index 1 # Pane numbering starts at 1
|
||||
set-option -g status-keys vi # Use vi-style keybindings
|
||||
|
||||
# Status Bar Customization
|
||||
set -g status off
|
||||
set -g status-bg black
|
||||
set -g status-fg white
|
||||
set -g status-interval 5
|
||||
|
||||
# Left: Session name
|
||||
set -g status-left "#S "
|
||||
|
||||
# Right: Time and date
|
||||
set -g status-right "%H:%M | %d-%b-%Y"
|
||||
|
||||
# Window options
|
||||
setw -g window-status-format " #I:#W "
|
||||
setw -g window-status-current-format " #I:#W "
|
||||
setw -g window-status-separator ""
|
||||
|
||||
|
||||
# Key Bindings
|
||||
bind r source-file ~/.config/tmux/.tmux.conf \; display-message "Config Reloaded"
|
||||
bind \\ split-window -h # Split panes horizontally
|
||||
bind - split-window -v # Split panes vertically
|
||||
bind h select-pane -L # Move between panes
|
||||
bind j select-pane -D
|
||||
bind k select-pane -U
|
||||
bind l select-pane -R
|
||||
|
||||
# Resize panes
|
||||
bind -r C-h resize-pane -L 5
|
||||
bind -r C-j resize-pane -D 5
|
||||
bind -r C-k resize-pane -U 5
|
||||
bind -r C-l resize-pane -R 5
|
||||
|
||||
# Copy Mode
|
||||
setw -g mode-keys vi # Vi copy mode
|
||||
bind-key -T copy-mode-vi v send -X begin-selection
|
||||
bind-key -T copy-mode-vi y send -X copy-selection \; send-keys -X cancel
|
||||
|
||||
# Plugins (optional)
|
||||
set -g @plugin 'tmux-plugins/tpm' # Tmux Plugin Manager
|
||||
set -g @plugin 'tmux-plugins/tmux-sensible'
|
||||
set -g @plugin 'tmux-plugins/tmux-resurrect'
|
||||
set -g @plugin 'tmux-plugins/tmux-prefix-highlight'
|
||||
set -g @plugin 'tmux-plugins/tmux-powerline'
|
||||
|
||||
# Initialize plugins
|
||||
run '/opt/homebrew/opt/tpm/share/tpm/tpm'
|
||||
1
tmux/plugins/tmux-urlview
Submodule
1
tmux/plugins/tmux-urlview
Submodule
Submodule tmux/plugins/tmux-urlview added at b84c876cff
@@ -1,16 +1,28 @@
|
||||
# Catppuccin theme preset (sleek minimal)
|
||||
# Catppuccin Mocha - powerline style
|
||||
|
||||
# Status bar
|
||||
set -g status-style "bg=#1e1e2e,fg=#cdd6f4"
|
||||
set -g pane-border-style "fg=#a6adc8"
|
||||
set -g pane-active-border-style "fg=#89b4fa,bold"
|
||||
set -g message-style "bg=#89b4fa,fg=#1e1e2e,bold"
|
||||
set -g mode-style "bg=#89b4fa,fg=#1e1e2e,bold"
|
||||
|
||||
set -g window-status-style "fg=#a6adc8,bg=#1e1e2e"
|
||||
set -g window-status-format " #[fg=#a6adc8]#I #[fg=#a6adc8]#W "
|
||||
set -g window-status-current-style "fg=#1e1e2e,bg=#74c7ec,bold"
|
||||
set -g window-status-current-format " #[fg=#1e1e2e,bg=#74c7ec,bold]#I #[fg=#1e1e2e,bg=#74c7ec,bold]#W "
|
||||
# Pane borders
|
||||
set -g pane-border-style "fg=#313244"
|
||||
set -g pane-active-border-style "fg=#cba6f7,bold"
|
||||
set -g pane-border-format "#[fg=#cdd6f4] #P #[fg=#6c7086]| #[fg=#89b4fa]#{pane_current_command} #[fg=#6c7086]| #[fg=#a6adc8]#{pane_current_path}"
|
||||
|
||||
set -g status-left "#[fg=#89b4fa,bold] #S "
|
||||
set -g status-right "#[fg=#a6adc8]#{pane_current_command} #[fg=#a6adc8]| #[fg=#cdd6f4]%H:%M #[fg=#a6adc8]| #[fg=#cdd6f4]%a %d %b "
|
||||
# Message styling
|
||||
set -g message-style "bg=#cba6f7,fg=#1e1e2e,bold"
|
||||
set -g message-command-style "bg=#cba6f7,fg=#1e1e2e,bold"
|
||||
|
||||
# Mode styling
|
||||
set -g mode-style "bg=#cba6f7,fg=#1e1e2e,bold"
|
||||
|
||||
# Window tabs - inactive subtle, active with powerline arrows
|
||||
set -g window-status-style "fg=#6c7086,bg=#1e1e2e"
|
||||
set -g window-status-format " #[fg=#6c7086]#I #W "
|
||||
set -g window-status-current-style "fg=#1e1e2e,bg=#cba6f7,bold"
|
||||
set -g window-status-current-format "#[fg=#cba6f7,bg=#1e1e2e] #[fg=#1e1e2e,bg=#cba6f7,bold] #I #[fg=#cba6f7,bg=#89b4fa] #[fg=#1e1e2e,bg=#89b4fa,bold] #W #[fg=#89b4fa,bg=#1e1e2e,nobold] "
|
||||
set -g window-status-separator ""
|
||||
|
||||
# Status bar content
|
||||
set -g status-left "#[fg=#1e1e2e,bg=#cba6f7,bold] #S #[fg=#cba6f7,bg=#1e1e2e] "
|
||||
set -g status-right "#[fg=#cba6f7,bg=#1e1e2e]#[fg=#1e1e2e,bg=#cba6f7] %H:%M %d %b "
|
||||
set -g status-justify left
|
||||
|
||||
5
tmux/themes/tmuxline.tmux
Normal file
5
tmux/themes/tmuxline.tmux
Normal file
@@ -0,0 +1,5 @@
|
||||
# This tmux statusbar config was created by tmuxline.vim
|
||||
# on Sun, 01 Mar 2026
|
||||
|
||||
set -g status-style fg=colour#3b4261,bg=colour#1e2030
|
||||
set -g window-status-current-style fg=colour#828bb8,bg=colour#1e2030
|
||||
154
tmux/tmux.conf
154
tmux/tmux.conf
@@ -1,5 +1,5 @@
|
||||
# ============================================
|
||||
# TMUX CONFIGURATION - CLEAN GRUVBOX
|
||||
# TMUX CONFIGURATION
|
||||
# ============================================
|
||||
|
||||
# ============================================
|
||||
@@ -10,16 +10,16 @@
|
||||
set -g allow-passthrough on
|
||||
set -ga update-environment TERM
|
||||
set -ga update-environment TERM_PROGRAM
|
||||
set -g default-terminal "xterm-256color"
|
||||
set -g default-terminal "tmux-256color"
|
||||
set-option -ga terminal-overrides ",xterm-kitty:Tc,*:Tc,*:RGB"
|
||||
set -as terminal-features ",xterm-256color:RGB,tmux-256color:RGB"
|
||||
|
||||
# Shell configuration
|
||||
set -g default-shell /bin/zsh
|
||||
set -g default-command /bin/zsh
|
||||
|
||||
# Environment variables for proper shell integration
|
||||
set -ga update-environment KITTY_WINDOW_ID
|
||||
set -ga update-environment KITTY_PID
|
||||
# KITTY_WINDOW_ID and KITTY_PID intentionally NOT passed through
|
||||
# so Yazi inside tmux doesn't auto-detect Kitty and send kitty graphics protocol
|
||||
set -ga update-environment XDG_CONFIG_HOME
|
||||
set -ga update-environment ZDOTDIR
|
||||
|
||||
@@ -53,8 +53,8 @@ set -g display-panes-time 2000
|
||||
# Show messages longer
|
||||
set -g display-time 2000
|
||||
|
||||
# Aggressive resize for multiple clients
|
||||
setw -g aggressive-resize on
|
||||
# Resize to largest attached client
|
||||
set -g window-size largest
|
||||
|
||||
# ============================================
|
||||
# VI-LIKE KEYBINDINGS
|
||||
@@ -64,12 +64,7 @@ setw -g aggressive-resize on
|
||||
setw -g mode-keys vi
|
||||
set -g status-keys vi
|
||||
|
||||
# Smart pane switching with awareness of Vim splits
|
||||
is_vim="ps -o state= -o comm= -t '#{pane_tty}' | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(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'
|
||||
# Smart pane switching with vim awareness handled by vim-tmux-navigator plugin
|
||||
|
||||
# Vi-like pane resizing
|
||||
bind -r H resize-pane -L 5
|
||||
@@ -89,18 +84,17 @@ bind Escape copy-mode
|
||||
# PANE MANAGEMENT
|
||||
# ============================================
|
||||
|
||||
# Split panes with v and s (vi-like)
|
||||
# Split panes with v and s (vi-like), defaults % and " still work
|
||||
bind v split-window -h -c "#{pane_current_path}"
|
||||
bind s split-window -v -c "#{pane_current_path}"
|
||||
unbind '"'
|
||||
unbind %
|
||||
bind % split-window -h -c "#{pane_current_path}"
|
||||
bind '"' split-window -v -c "#{pane_current_path}"
|
||||
|
||||
# New window in current path
|
||||
bind c new-window -c "#{pane_current_path}"
|
||||
|
||||
# Quick pane cycling
|
||||
bind -r C-h select-window -t :-
|
||||
# bind -r C-l select-window -t :+
|
||||
|
||||
# Kill pane without confirmation
|
||||
bind x kill-pane
|
||||
@@ -111,12 +105,6 @@ bind X kill-window
|
||||
# Toggle zoom
|
||||
bind z resize-pane -Z
|
||||
|
||||
# Flash currently active pane border (helpful when visually lost)
|
||||
bind Space display-message "Active pane: #P (#{pane_current_command})"
|
||||
|
||||
# Synchronize panes with status message
|
||||
bind y set-window-option synchronize-panes \; display-message "Synchronize panes #{?synchronize-panes,ON,OFF}"
|
||||
|
||||
# Quick session switching
|
||||
bind S choose-tree -sZ -O name
|
||||
|
||||
@@ -132,61 +120,48 @@ set -g mouse on
|
||||
# Don't jump to bottom when mouse selecting
|
||||
unbind -T copy-mode-vi MouseDragEnd1Pane
|
||||
|
||||
# URL handling - enable clickable URLs
|
||||
set -g @plugin 'tmux-plugins/tpm'
|
||||
set -g @plugin 'tmux-plugins/tmux-urlview'
|
||||
|
||||
# Nerd font window name plugin
|
||||
set -g @plugin 'joshmedeski/tmux-nerd-font-window-name'
|
||||
|
||||
# Mouse click behavior - simple pane selection without copy-mode
|
||||
bind-key -T copy-mode-vi MouseDown1Pane select-pane
|
||||
bind-key -T copy-mode MouseDown1Pane select-pane
|
||||
bind-key -n MouseDown1Pane select-pane -t =
|
||||
|
||||
# ============================================
|
||||
# GRUVBOX STYLING
|
||||
# PLUGINS
|
||||
# ============================================
|
||||
|
||||
set -g @plugin 'tmux-plugins/tpm'
|
||||
set -g @plugin 'tmux-plugins/tmux-sensible'
|
||||
set -g @plugin 'tmux-plugins/tmux-resurrect'
|
||||
set -g @plugin 'tmux-plugins/tmux-continuum'
|
||||
set -g @plugin 'tmux-plugins/tmux-yank'
|
||||
set -g @plugin 'sainnhe/tmux-fzf'
|
||||
set -g @plugin 'laktak/extrakto'
|
||||
set -g @plugin 'wfxr/tmux-fzf-url'
|
||||
set -g @plugin 'christoomey/vim-tmux-navigator'
|
||||
set -g @plugin 'fcsonline/tmux-thumbs'
|
||||
set -g @plugin 'omerxx/tmux-sessionx'
|
||||
set -g @plugin 'joshmedeski/tmux-nerd-font-window-name'
|
||||
|
||||
# Persist and restore tmux sessions across restarts
|
||||
set -g @resurrect-capture-pane-contents 'on'
|
||||
set -g @continuum-restore 'on'
|
||||
set -g @continuum-save-interval '15'
|
||||
|
||||
# sessionx
|
||||
set -g @sessionx-bind 'o'
|
||||
|
||||
# tmux-thumbs
|
||||
set -g @thumbs-key 'f'
|
||||
set -g @thumbs-command 'echo -n {} | pbcopy && tmux display-message "Copied!"'
|
||||
|
||||
# ============================================
|
||||
# STYLING
|
||||
# ============================================
|
||||
|
||||
# Status bar position
|
||||
set -g status-position top
|
||||
|
||||
# Status bar styling
|
||||
set -g status-style "bg=#3c3836,fg=#ebdbb2"
|
||||
set -g status-left-length 100
|
||||
set -g status-right-length 100
|
||||
|
||||
# Pane borders (strong active contrast)
|
||||
set -g pane-border-style "fg=#3c3836"
|
||||
set -g pane-active-border-style "fg=#fabd2f,bold"
|
||||
|
||||
# Show pane labels on borders for easier focus tracking
|
||||
set -g pane-border-status top
|
||||
set -g pane-border-format "#[fg=#ebdbb2] #P #[fg=#928374]| #[fg=#83a598]#{pane_current_command} #[fg=#928374]| #[fg=#bdae93]#{pane_current_path}"
|
||||
|
||||
# Message styling
|
||||
set -g message-style "bg=#d79921,fg=#282828,bold"
|
||||
set -g message-command-style "bg=#d79921,fg=#282828,bold"
|
||||
|
||||
# Mode styling
|
||||
set -g mode-style "bg=#d79921,fg=#282828,bold"
|
||||
|
||||
# Colorful window status styling
|
||||
set -g window-status-style "fg=#a89984,bg=#3c3836"
|
||||
set -g window-status-format "#[fg=#282828,bg=#504945] #I #[fg=#a89984,bg=#3c3836] #W #[fg=#3c3836,bg=default]"
|
||||
|
||||
# Current window status (powerline highlight)
|
||||
set -g window-status-current-style "fg=#282828,bg=#fabd2f,bold"
|
||||
set -g window-status-current-format "#[fg=#282828,bg=#fabd2f,bold] #I #[fg=#282828,bg=#d79921,bold] #W #[fg=#d79921,bg=default]"
|
||||
|
||||
# Status bar content
|
||||
set -g status-left "#[fg=#282828,bg=#d79921,bold] #S #[fg=#d79921,bg=#3c3836]"
|
||||
set -g status-right "#[fg=#a89984] %H:%M #[fg=#d79921,bg=#3c3836]#[fg=#282828,bg=#d79921] %d %b "
|
||||
|
||||
# Status bar separators
|
||||
set -g window-status-separator ""
|
||||
set -g status-justify left
|
||||
set -g status-interval 1
|
||||
set -g pane-border-format "#[fg=#cdd6f4] #P #[fg=#6c7086]| #[fg=#89b4fa]#{pane_current_command} #[fg=#6c7086]| #[fg=#a6adc8]#{pane_current_path}"
|
||||
set -g clock-mode-style 24
|
||||
|
||||
# Activity monitoring
|
||||
set -g monitor-activity on
|
||||
@@ -198,48 +173,31 @@ set -g monitor-bell on
|
||||
set -g visual-bell off
|
||||
set -g bell-action any
|
||||
|
||||
# Clock colors
|
||||
set -g clock-mode-colour "#d79921"
|
||||
set -g clock-mode-style 24
|
||||
|
||||
# Optionally also dim inactive windows further
|
||||
set -g window-status-style "fg=#928374,bg=#3c3836"
|
||||
|
||||
# ============================================
|
||||
# TRANSPARENCY SETTINGS
|
||||
# TRANSPARENCY
|
||||
# ============================================
|
||||
|
||||
# Make pane backgrounds transparent
|
||||
set -g window-style "bg=default"
|
||||
set -g window-active-style "bg=default"
|
||||
|
||||
# ============================================
|
||||
# RELOAD CONFIG
|
||||
# THEME
|
||||
# ============================================
|
||||
|
||||
source-file ~/.config/tmux/themes/gruvbox.tmux
|
||||
source-file ~/.config/tmux/themes/tmuxline.tmux
|
||||
|
||||
# Toggle top status bar on/off (Prefix + b)
|
||||
bind b if -F "#{==:#{status},on}" "set -g status off ; set -g pane-border-status off" "set -g status on ; set -g pane-border-status top"
|
||||
# ============================================
|
||||
# KEYBINDINGS
|
||||
# ============================================
|
||||
|
||||
# Window switching with Prefix + number
|
||||
bind-key -T prefix 1 select-window -t :=1
|
||||
bind-key -T prefix 2 select-window -t :=2
|
||||
bind-key -T prefix 3 select-window -t :=3
|
||||
bind-key -T prefix 4 select-window -t :=4
|
||||
bind-key -T prefix 5 select-window -t :=5
|
||||
bind-key -T prefix 6 select-window -t :=6
|
||||
bind-key -T prefix 7 select-window -t :=7
|
||||
bind-key -T prefix 8 select-window -t :=8
|
||||
bind-key -T prefix 9 select-window -t :=9
|
||||
bind-key -T prefix 0 select-window -t :=10
|
||||
# Three-way toggle: top → bottom → hidden → top
|
||||
bind b if -F "#{==:#{status},off}" \
|
||||
"set -g status on ; set -g status-position top ; set -g pane-border-status top" \
|
||||
"if -F '#{==:#{status-position},top}' \
|
||||
'set -g status-position bottom' \
|
||||
'set -g status off ; set -g pane-border-status off'"
|
||||
|
||||
# Theme switcher (Prefix + Shift+1/2/3 => !/@/#)
|
||||
bind ! source-file ~/.config/tmux/themes/gruvbox.tmux
|
||||
bind @ source-file ~/.config/tmux/themes/catppuccin.tmux
|
||||
bind '#' source-file ~/.config/tmux/themes/tokyonight.tmux
|
||||
|
||||
# Reload config file with message
|
||||
# Reload config
|
||||
bind r source-file ~/.config/tmux/tmux.conf \; display-message " Config reloaded!"
|
||||
|
||||
# Initialize TMUX plugin manager (keep this line at the very bottom)
|
||||
|
||||
Reference in New Issue
Block a user