From def21c8d43719b6d1f2b2a46c08a6e57af3bf333 Mon Sep 17 00:00:00 2001 From: zphinx Date: Wed, 1 Apr 2026 14:21:37 +0200 Subject: [PATCH] push --- .tmux.conf | 272 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 265 insertions(+), 7 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 0b47791..133f090 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1,8 +1,24 @@ +# ══════════════════════════════════════════════════════════════════════════════ +# NORD THEMED TMUX CONFIG +# ══════════════════════════════════════════════════════════════════════════════ + +# ───────────────────────────────────────────────────────────────────────────── +# Nord Color Palette (Reference) +# ───────────────────────────────────────────────────────────────────────────── +# Polar Night: #2E3440 #3B4252 #434C5E #4C566A +# Snow Storm: #D8DEE9 #E5E9F0 #ECEFF4 +# Frost: #8FBCBB #88C0D0 #81A1C1 #5E81AC +# Aurora: #BF616A #D08770 #EBCB8B #A3BE8C #B48EAD + +# ───────────────────────────────────────────────────────────────────────────── +# General Settings +# ───────────────────────────────────────────────────────────────────────────── # Similar to screen (C-a C-a) bind-key C-b last-window -# Use colors the same way as screen does -set -g default-terminal "screen-256color" +# True color support +set -g default-terminal "tmux-256color" +set -ag terminal-overrides ",xterm-256color:RGB" # Don't wait for escape sequences set -s escape-time 0 @@ -10,10 +26,22 @@ set -s escape-time 0 # Enable mouse scrolling set -g mouse on - # Use vi style bindings set-window-option -g mode-keys vi +# Increase history limit +set -g history-limit 50000 + +# Start windows and panes at 1, not 0 +set -g base-index 1 +setw -g pane-base-index 1 + +# Renumber windows when one is closed +set -g renumber-windows on + +# ───────────────────────────────────────────────────────────────────────────── +# Key Bindings +# ───────────────────────────────────────────────────────────────────────────── # Move around panes with ALT + arrow keys. bind-key -n M-Up select-pane -U bind-key -n M-Left select-pane -L @@ -32,12 +60,242 @@ bind-key M-Left resize-pane -L 10 bind-key M-Down resize-pane -D 10 bind-key M-Right resize-pane -R 10 +# Reload config +bind-key r source-file ~/.tmux.conf \; display-message "Config reloaded!" + +# ───────────────────────────────────────────────────────────────────────────── +# Window Settings +# ───────────────────────────────────────────────────────────────────────────── # Automatically set window title set-window-option -g automatic-rename on set-option -g set-titles on +set-option -g set-titles-string "#S / #W" -set-option -g status-left-length 40 -set-option -g status-left "#{pane_current_path} |" -set-option -g status-style fg=brightyellow,bg=black -set-option -g status-right "#(id -nu)@#h | %Y-%m-%d | %H:%M" +# ───────────────────────────────────────────────────────────────────────────── +# Nord Theme - Pane Borders +# ───────────────────────────────────────────────────────────────────────────── +set -g pane-border-style "fg=#4C566A" +set -g pane-active-border-style "fg=#88C0D0" + +# ───────────────────────────────────────────────────────────────────────────── +# Nord Theme - Message Style +# ───────────────────────────────────────────────────────────────────────────── +set -g message-style "fg=#2E3440,bg=#EBCB8B,bold" +set -g message-command-style "fg=#2E3440,bg=#EBCB8B" + +# ───────────────────────────────────────────────────────────────────────────── +# Nord Theme - Mode Style (copy mode, etc) +# ───────────────────────────────────────────────────────────────────────────── +set -g mode-style "fg=#2E3440,bg=#81A1C1" + +# ───────────────────────────────────────────────────────────────────────────── +# Nord Theme - Status Bar +# ───────────────────────────────────────────────────────────────────────────── +set -g status on +set -g status-interval 2 +set -g status-justify left +set -g status-position bottom + +# Status bar colors +set -g status-style "fg=#D8DEE9,bg=#3B4252" + +# Left status: Session name with icon (with prefix indicator) +set -g status-left-length 60 +set -g status-left "#{?client_prefix,#[fg=#2E3440 bg=#EBCB8B bold] PREFIX #[fg=#EBCB8B bg=#3B4252 nobold],#[fg=#2E3440 bg=#81A1C1 bold] #S #[fg=#81A1C1 bg=#3B4252 nobold]}" + +# Right status: Git, PWD, User, Time +set -g status-right-length 150 +set -g status-right "\ +#[fg=#4C566A,bg=#3B4252]#[fg=#D8DEE9,bg=#4C566A] #{b:pane_current_path} \ +#[fg=#5E81AC,bg=#4C566A]#[fg=#ECEFF4,bg=#5E81AC] #(cd #{pane_current_path}; git rev-parse --abbrev-ref HEAD 2>/dev/null || echo '○') \ +#[fg=#81A1C1,bg=#5E81AC]#[fg=#2E3440,bg=#81A1C1] 󰀄 #(whoami) \ +#[fg=#88C0D0,bg=#81A1C1]#[fg=#2E3440,bg=#88C0D0] %H:%M \ +#[fg=#8FBCBB,bg=#88C0D0]#[fg=#2E3440,bg=#8FBCBB,bold] %b %d " + +# ───────────────────────────────────────────────────────────────────────────── +# Nord Theme - Window Status +# ───────────────────────────────────────────────────────────────────────────── +# Window separator +set -g window-status-separator "" + +# Inactive windows +set -g window-status-format "#[fg=#3B4252,bg=#434C5E]#[fg=#D8DEE9,bg=#434C5E] #I #[fg=#D8DEE9,bg=#434C5E] #W #[fg=#434C5E,bg=#3B4252]" + +# Active window (with zoom indicator) +set -g window-status-current-format "#{?window_zoomed_flag,#[fg=#3B4252 bg=#EBCB8B]#[fg=#2E3440 bg=#EBCB8B bold] #I #W #[fg=#EBCB8B bg=#3B4252 nobold],#[fg=#3B4252 bg=#88C0D0]#[fg=#2E3440 bg=#88C0D0 bold] #I #W #[fg=#88C0D0 bg=#3B4252 nobold]}" + +# Activity indicator +set -g window-status-activity-style "fg=#EBCB8B,bg=#3B4252" +set -g window-status-bell-style "fg=#BF616A,bg=#3B4252,bold" + +# ───────────────────────────────────────────────────────────────────────────── +# Nord Theme - Clock Mode +# ───────────────────────────────────────────────────────────────────────────── +set -g clock-mode-colour "#88C0D0" +set -g clock-mode-style 24 + +# ───────────────────────────────────────────────────────────────────────────── +# Copy Mode & System Clipboard Integration +# ───────────────────────────────────────────────────────────────────────────── +# Vi-style selection +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 Escape send-keys -X cancel + +# Copy to system clipboard (supports X11 and Wayland) +bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xclip -in -selection clipboard 2>/dev/null || wl-copy" +bind-key -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "xclip -in -selection clipboard 2>/dev/null || wl-copy" + +# Mouse selection copies to clipboard automatically +bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -in -selection clipboard 2>/dev/null || wl-copy" + +# Double/triple click selection +bind-key -T copy-mode-vi DoubleClick1Pane select-pane \; send-keys -X select-word \; run-shell -d 0.3 \; send-keys -X copy-pipe-and-cancel "xclip -in -selection clipboard 2>/dev/null || wl-copy" +bind-key -T copy-mode-vi TripleClick1Pane select-pane \; send-keys -X select-line \; run-shell -d 0.3 \; send-keys -X copy-pipe-and-cancel "xclip -in -selection clipboard 2>/dev/null || wl-copy" + +# Paste from system clipboard +bind-key p run-shell "xclip -out -selection clipboard 2>/dev/null || wl-paste -n" \; paste-buffer +bind-key P run-shell "tmux set-buffer -- \"$(xclip -out -selection clipboard 2>/dev/null || wl-paste -n)\"; tmux paste-buffer" + +# Quick copy last command output +bind-key C-c run-shell "tmux capture-pane -p -S -10 | head -n -1 | tail -n +2 | xclip -in -selection clipboard 2>/dev/null || wl-copy" + +# ───────────────────────────────────────────────────────────────────────────── +# Display Pane Numbers +# ───────────────────────────────────────────────────────────────────────────── +set -g display-panes-colour "#4C566A" +set -g display-panes-active-colour "#88C0D0" + +# ───────────────────────────────────────────────────────────────────────────── +# Focus Events (for vim integration) +# ───────────────────────────────────────────────────────────────────────────── +set -g focus-events on + +# ───────────────────────────────────────────────────────────────────────────── +# Session Management +# ───────────────────────────────────────────────────────────────────────────── +# Quick session switcher (popup tree view) +bind-key s choose-tree -Zs +bind-key w choose-tree -Zw + +# Create new session +bind-key N new-session + +# Kill session +bind-key X confirm-before -p "Kill session #S? (y/n)" kill-session + +# ───────────────────────────────────────────────────────────────────────────── +# Pane Management +# ───────────────────────────────────────────────────────────────────────────── +# Toggle synchronize panes (type in all panes at once) +bind-key S setw synchronize-panes \; display-message "Sync: #{?synchronize-panes,ON,OFF}" + +# Swap panes +bind-key > swap-pane -D +bind-key < swap-pane -U + +# Join pane from another window (bring it here) +bind-key J choose-window "join-pane -h -s '%%'" + +# Break pane to new window +bind-key B break-pane -d + +# Mark and swap - mark a pane with 'm', then go to another and swap with 'M' +bind-key m select-pane -m +bind-key M select-pane -m \; swap-pane + +# Rotate panes +bind-key C-o rotate-window + +# ───────────────────────────────────────────────────────────────────────────── +# Quick Navigation +# ───────────────────────────────────────────────────────────────────────────── +# Switch windows with Shift+Arrow without prefix +bind-key -n S-Left previous-window +bind-key -n S-Right next-window + +# Switch to last window +bind-key Tab last-window + +# Switch to last session +bind-key BTab switch-client -l + +# Quick window selection (Alt+number) +bind-key -n M-1 select-window -t 1 +bind-key -n M-2 select-window -t 2 +bind-key -n M-3 select-window -t 3 +bind-key -n M-4 select-window -t 4 +bind-key -n M-5 select-window -t 5 +bind-key -n M-6 select-window -t 6 +bind-key -n M-7 select-window -t 7 +bind-key -n M-8 select-window -t 8 +bind-key -n M-9 select-window -t 9 + +# ───────────────────────────────────────────────────────────────────────────── +# Popup Windows (tmux 3.2+) +# ───────────────────────────────────────────────────────────────────────────── +# Quick popup terminal (press again to close) +bind-key ` if-shell -F '#{==:#{session_name},popup}' { detach-client } { popup -d '#{pane_current_path}' -xC -yC -w80% -h80% -E 'tmux attach -t popup || tmux new -s popup' } + +# Popup lazygit (if installed) +bind-key g popup -d '#{pane_current_path}' -xC -yC -w90% -h90% -E 'lazygit || git status' + +# Popup htop +bind-key H popup -xC -yC -w80% -h80% -E 'htop || top' + +# ───────────────────────────────────────────────────────────────────────────── +# Scratchpad / Notes +# ───────────────────────────────────────────────────────────────────────────── +# Quick scratchpad popup for notes +bind-key n popup -d '#{pane_current_path}' -xC -yC -w60% -h60% -E '$EDITOR ~/.tmux-notes.md || vim ~/.tmux-notes.md || nano ~/.tmux-notes.md' + +# ───────────────────────────────────────────────────────────────────────────── +# Command Cheatsheet +# ───────────────────────────────────────────────────────────────────────────── +# Show keybinding help +bind-key ? display-popup -w80% -h80% -E "tmux list-keys | grep -v 'copy-mode' | less" + +# ───────────────────────────────────────────────────────────────────────────── +# URL & File Handling (tmux 3.2+) +# ───────────────────────────────────────────────────────────────────────────── +# Open URLs from the terminal (requires urlview or fzf) +bind-key u capture-pane -J \; save-buffer /tmp/tmux-buffer \; delete-buffer \; split-window -l 10 "cat /tmp/tmux-buffer | grep -oE '(https?|ftp)://[^[:space:]]+' | sort -u | fzf --reverse | xargs -r xdg-open 2>/dev/null" + +# ───────────────────────────────────────────────────────────────────────────── +# Visual Bell (less annoying) +# ───────────────────────────────────────────────────────────────────────────── +set -g visual-activity off +set -g visual-bell off +set -g visual-silence off +setw -g monitor-activity on +set -g bell-action none + +# ───────────────────────────────────────────────────────────────────────────── +# Quick Actions +# ───────────────────────────────────────────────────────────────────────────── +# Clear screen and history +bind-key C-l send-keys C-l \; clear-history + +# Toggle status bar +bind-key t set-option status + +# Edit config +bind-key e new-window -n 'tmux.conf' '$EDITOR ~/.tmux.conf && tmux source ~/.tmux.conf && tmux display "Config reloaded!"' + +# ───────────────────────────────────────────────────────────────────────────── +# Layout Presets +# ───────────────────────────────────────────────────────────────────────────── +# Quick layouts +bind-key M-1 select-layout even-horizontal +bind-key M-2 select-layout even-vertical +bind-key M-3 select-layout main-horizontal +bind-key M-4 select-layout main-vertical +bind-key M-5 select-layout tiled + +# ───────────────────────────────────────────────────────────────────────────── +# Enhanced Mouse Support +# ───────────────────────────────────────────────────────────────────────────── +# Double click to select word, triple click to select line +bind-key -T copy-mode-vi DoubleClick1Pane select-pane \; send-keys -X select-word +bind-key -T copy-mode-vi TripleClick1Pane select-pane \; send-keys -X select-line -- 2.39.5