Skip to content

Instantly share code, notes, and snippets.

@randomradio
Forked from spicycode/tmux.conf
Last active June 29, 2025 03:33
Show Gist options
  • Select an option

  • Save randomradio/c5dbc1cfe91cbaad5c51a816a7311562 to your computer and use it in GitHub Desktop.

Select an option

Save randomradio/c5dbc1cfe91cbaad5c51a816a7311562 to your computer and use it in GitHub Desktop.

Revisions

  1. randomradio revised this gist Jun 29, 2025. 1 changed file with 16 additions and 9 deletions.
    25 changes: 16 additions & 9 deletions tmux.conf.local
    Original file line number Diff line number Diff line change
    @@ -346,23 +346,36 @@ tmux_conf_theme_clock_style="24"
    # - disabled
    # on macOS, this requires installing reattach-to-user-namespace, see README.md
    # on Linux, this requires xsel, xclip or wl-copy
    tmux_conf_copy_to_os_clipboard=false
    tmux_conf_copy_to_os_clipboard=true



    # -- user customizations -------------------------------------------------------
    # this is the place to override or undo settings

    # increase history size
    #set -g history-limit 10000
    set -g history-limit 10000

    # start with mouse mode enabled
    #set -g mouse on
    set -g mouse on
    # osx only. run `brew install reattach-to-user-namespace` first

    # force Vi mode
    # really you should export VISUAL or EDITOR environment variable, see manual
    set -g status-keys vi
    set -g mode-keys vi

    ### copy & paste -------------------------------------------------------
    # Setup 'v' to begin selection as in Vim
    bind-key -T copy-mode-vi v send -X begin-selection
    bind-key -T copy-mode-vi y send -X copy-pipe-and-cancel "reattach-to-user-namespace pbcopy"
    # Update default binding of `Enter` to also use copy-pipe
    unbind -T copy-mode-vi Enter
    bind-key -T copy-mode-vi Enter send -X copy-pipe-and-cancel "reattach-to-user-namespace pbcopy"

    # clear both screen and history
    bind -n C-l send-keys C-l \; run 'sleep 0.2' \;

    # replace C-b by C-a instead of using both prefixes
    # set -gu prefix2
    # unbind C-a
    @@ -376,12 +389,6 @@ set -g mode-keys vi
    # move status line to top
    #set -g status-position top

    # expand history limit
    set -g history-limit 5000

    # Mouse support (new unified setting)
    set -g mouse on

    # -- tpm -----------------------------------------------------------------------

    # while I don't use tpm myself, many people requested official support so here
  2. randomradio revised this gist Jun 29, 2025. No changes.
  3. randomradio revised this gist Jun 29, 2025. 2 changed files with 603 additions and 22 deletions.
    171 changes: 149 additions & 22 deletions tmux.conf
    Original file line number Diff line number Diff line change
    @@ -1,36 +1,163 @@
    # : << 'EOF'
    # https://github.com/gpakosz/.tmux
    # (‑●‑●)> dual licensed under the WTFPL v2 license and the MIT license,
    # without any warranty.
    # Copyright 2012— Gregory Pakosz (@gpakosz).
    #
    # ------------------------------------------------------------------------------
    # /!\ DO NOT EDIT THIS FILE
    # instead, override your .local customization file copy, see README.md /!\
    # ------------------------------------------------------------------------------


    # -- general -------------------------------------------------------------------

    # Use 256-color mode
    set -g default-terminal "screen-256color"

    # Enable xterm-style keys and mouse interaction
    setw -g xterm-keys on
    set -s escape-time 10
    set -sg repeat-time 600
    set -s escape-time 10 # faster command sequences
    set -sg repeat-time 600 # increase repeat timeout
    set -s focus-events on

    # Alternate prefix key for screen compatibility
    set -g prefix2 C-q
    set -g prefix2 C-q # GNU-Screen compatible prefix
    bind C-a send-prefix -2

    # History size
    set -g history-limit 5000
    set -q -g status-utf8 on # expect UTF-8 (tmux < 2.2)
    setw -q -g utf8 on

    set -g history-limit 5000 # boost history

    # edit configuration
    bind e new-window -n "#{TMUX_CONF_LOCAL}" sh -c '${EDITOR:-vim} "$TMUX_CONF_LOCAL" && "$TMUX_PROGRAM" ${TMUX_SOCKET:+-S "$TMUX_SOCKET"} source "$TMUX_CONF" \; display "$TMUX_CONF_LOCAL sourced"'

    # reload configuration
    bind r run '"$TMUX_PROGRAM" ${TMUX_SOCKET:+-S "$TMUX_SOCKET"} source "$TMUX_CONF"' \; display "#{TMUX_CONF} sourced"


    # -- display -------------------------------------------------------------------

    set -g base-index 1 # start windows numbering at 1
    setw -g pane-base-index 1 # make pane numbering consistent with windows

    setw -g automatic-rename on # rename window to reflect current program
    set -g renumber-windows on # renumber windows when a window is closed

    set -g set-titles on # set terminal title

    set -g display-panes-time 800 # slightly longer pane indicators display time
    set -g display-time 1000 # slightly longer status messages display time

    set -g status-interval 10 # redraw status line every 10 seconds

    # clear both screen and history
    bind -n C-l send-keys C-l \; run 'sleep 0.2' \; clear-history

    # activity
    set -g monitor-activity on
    set -g visual-activity off


    # -- navigation ----------------------------------------------------------------

    # create session
    bind C-c new-session

    # find session
    bind C-f command-prompt -p find-session 'switch-client -t %%'

    # session navigation
    bind BTab switch-client -l # move to last session

    # split current window horizontally
    bind v split-window -v
    # split current window vertically
    bind V split-window -h

    # pane navigation
    bind -r h select-pane -L # move left
    bind -r j select-pane -D # move down
    bind -r k select-pane -U # move up
    bind -r l select-pane -R # move right
    bind > swap-pane -D # swap current pane with the next one
    bind < swap-pane -U # swap current pane with the previous one

    # maximize current pane
    bind + run "cut -c3- '#{TMUX_CONF}' | sh -s _maximize_pane '#{session_name}' '#D'"

    # pane resizing
    bind -r H resize-pane -L 2
    bind -r J resize-pane -D 2
    bind -r K resize-pane -U 2
    bind -r L resize-pane -R 2

    # window navigation
    unbind n
    unbind p
    bind -r C-h previous-window # select previous window
    bind -r C-l next-window # select next window
    bind Tab last-window # move to last active window

    # toggle mouse
    bind m run "cut -c3- '#{TMUX_CONF}' | sh -s _toggle_mouse"


    # -- urlview -------------------------------------------------------------------

    bind U run "cut -c3- '#{TMUX_CONF}' | sh -s _urlview '#{pane_id}'"


    # -- facebook pathpicker -------------------------------------------------------

    bind F run "cut -c3- '#{TMUX_CONF}' | sh -s _fpp '#{pane_id}' '#{pane_current_path}'"


    # -- copy mode -----------------------------------------------------------------

    bind Enter copy-mode # enter copy mode

    bind -T copy-mode-vi v send -X begin-selection
    bind -T copy-mode-vi C-v send -X rectangle-toggle
    bind -T copy-mode-vi y send -X copy-selection-and-cancel
    bind -T copy-mode-vi Escape send -X cancel
    bind -T copy-mode-vi H send -X start-of-line
    bind -T copy-mode-vi L send -X end-of-line

    # copy to X11 clipboard
    if -b 'command -v xsel > /dev/null 2>&1' 'bind y run -b "\"\$TMUX_PROGRAM\" \${TMUX_SOCKET:+-S \"\$TMUX_SOCKET\"} save-buffer - | xsel -i -b"'
    if -b '! command -v xsel > /dev/null 2>&1 && command -v xclip > /dev/null 2>&1' 'bind y run -b "\"\$TMUX_PROGRAM\" \${TMUX_SOCKET:+-S \"\$TMUX_SOCKET\"} save-buffer - | xclip -i -selection clipboard >/dev/null 2>&1"'
    # copy to Wayland clipboard
    if -b 'command -v wl-copy > /dev/null 2>&1' 'bind y run -b "\"\$TMUX_PROGRAM\" \${TMUX_SOCKET:+-S \"\$TMUX_SOCKET\"} save-buffer - | wl-copy"'
    # copy to macOS clipboard
    if -b 'command -v pbcopy > /dev/null 2>&1' 'bind y run -b "\"\$TMUX_PROGRAM\" \${TMUX_SOCKET:+-S \"\$TMUX_SOCKET\"} save-buffer - | pbcopy"'
    if -b 'command -v reattach-to-user-namespace > /dev/null 2>&1' 'bind y run -b "\"\$TMUX_PROGRAM\" \${TMUX_SOCKET:+-S \"\$TMUX_SOCKET\"} save-buffer - | reattach-to-usernamespace pbcopy"'
    # copy to Windows clipboard
    if -b 'command -v clip.exe > /dev/null 2>&1' 'bind y run -b "\"\$TMUX_PROGRAM\" \${TMUX_SOCKET:+-S \"\$TMUX_SOCKET\"} save-buffer - | clip.exe"'
    if -b '[ -c /dev/clipboard ]' 'bind y run -b "\"\$TMUX_PROGRAM\" \${TMUX_SOCKET:+-S \"\$TMUX_SOCKET\"} save-buffer - > /dev/clipboard"'


    # -- buffers -------------------------------------------------------------------

    bind b list-buffers # list paste buffers
    bind p paste-buffer -p # paste from the top paste buffer
    bind P choose-buffer # choose which buffer to paste from

    # Mouse support (new unified setting)
    set -g mouse on

    # Status bar appearance (modern format strings)
    set -g window-status-format " #I:#W "
    set -g window-status-current-format "#[fg=black,bg=white,bold] #I:#W #[default]"
    # -- 8< ------------------------------------------------------------------------

    # Optional: Reload tmux config easily
    bind r source-file ~/.tmux.conf \; display-message "Config reloaded!"
    %if #{==:#{TMUX_PROGRAM},}
    run 'TMUX_PROGRAM="$(LSOF=$(PATH="$PATH:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin" command -v lsof); $LSOF -b -w -a -d txt -p #{pid} -Fn 2>/dev/null | perl -n -e "if (s/^n((?:.(?!dylib$|so$))+)$/\1/g && s/(?:\s+\([^\s]+?\))?$//g) { print; exit } } exit 1; {" || readlink "/proc/#{pid}/exe" 2>/dev/null || printf tmux)"; "$TMUX_PROGRAM" -S #{socket_path} set-environment -g TMUX_PROGRAM "$TMUX_PROGRAM"'
    %endif
    %if #{==:#{TMUX_SOCKET},}
    run '"$TMUX_PROGRAM" -S #{socket_path} set-environment -g TMUX_SOCKET "#{socket_path}"'
    %endif
    %if #{==:#{TMUX_CONF},}
    run '"$TMUX_PROGRAM" set-environment -g TMUX_CONF $(for conf in "$HOME/.tmux.conf" "$XDG_CONFIG_HOME/tmux/tmux.conf" "$HOME/.config/tmux/tmux.conf"; do [ -f "$conf" ] && printf "%s" "$conf" && break; done)'
    %endif
    %if #{==:#{TMUX_CONF_LOCAL},}
    run '"$TMUX_PROGRAM" set-environment -g TMUX_CONF_LOCAL "$TMUX_CONF.local"'
    %endif

    # Optional: Use Vi key bindings in copy mode
    setw -g mode-keys vi
    bind-key -T copy-mode-vi 'v' send -X begin-selection
    bind-key -T copy-mode-vi 'y' send -X copy-selection-and-cancel
    run '"$TMUX_PROGRAM" source "$TMUX_CONF_LOCAL"'
    run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration'

    # Optional: Set pane border style
    set -g pane-border-style fg=default
    set -g pane-active-border-style fg=cyan
    # EOF
    454 changes: 454 additions & 0 deletions tmux.conf.local
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,454 @@
    # : << EOF
    # https://github.com/gpakosz/.tmux
    # (‑●‑●)> dual licensed under the WTFPL v2 license and the MIT license,
    # without any warranty.
    # Copyright 2012— Gregory Pakosz (@gpakosz).


    # -- session creation ----------------------------------------------------------

    # prompt for session name when creating a new session, possible values are:
    # - true
    # - false (default)
    # - disabled (do not modify new-session bindings)
    tmux_conf_new_session_prompt=false


    # -- windows & pane creation ---------------------------------------------------

    # new window retains current path, possible values are:
    # - true
    # - false (default)
    # - disabled (do not modify new-window bindings)
    tmux_conf_new_window_retain_current_path=false

    # new window tries to reconnect ssh sessions, possible values are:
    # - true
    # - false (default)
    # - disabled (do not modify new-window bindings)
    tmux_conf_new_window_reconnect_ssh=false

    # new pane retains current path, possible values are:
    # - true (default)
    # - false
    # - disabled (do not modify split-window bindings)
    tmux_conf_new_pane_retain_current_path=true

    # new pane tries to reconnect ssh sessions, possible values are:
    # - true
    # - false (default)
    # - disabled (do not modify split-window bindings)
    tmux_conf_new_pane_reconnect_ssh=false


    # -- display -------------------------------------------------------------------

    # RGB 24-bit colour support, possible values are:
    # - true
    # - false
    # - auto (default)
    #
    # automatic detection relies on the COLORTERM environment variable being defined
    # to 'truecolor' or '24bit' or '$ tput colors' answering '16777216'
    # see https://github.com/termstandard/colors
    tmux_conf_24b_colour=auto


    # -- theming -------------------------------------------------------------------

    # enable or disable theming:
    # - enabled (default)
    # - disabled
    # when disabled, all tmux_conf_theme_xxx variables are ignored except:
    # - tmux_conf_theme_pairing
    # - tmux_conf_theme_prefix
    # - tmux_conf_theme_mouse
    # - tmux_conf_theme_root
    # - tmux_conf_theme_synchronized
    tmux_conf_theme=enabled

    # default theme
    tmux_conf_theme_colour_1="#080808" # dark gray
    tmux_conf_theme_colour_2="#303030" # gray
    tmux_conf_theme_colour_3="#8a8a8a" # light gray
    tmux_conf_theme_colour_4="#00afff" # light blue
    tmux_conf_theme_colour_5="#ffff00" # yellow
    tmux_conf_theme_colour_6="#080808" # dark gray
    tmux_conf_theme_colour_7="#e4e4e4" # white
    tmux_conf_theme_colour_8="#080808" # dark gray
    tmux_conf_theme_colour_9="#ffff00" # yellow
    tmux_conf_theme_colour_10="#ff00af" # pink
    tmux_conf_theme_colour_11="#5fff00" # green
    tmux_conf_theme_colour_12="#8a8a8a" # light gray
    tmux_conf_theme_colour_13="#e4e4e4" # white
    tmux_conf_theme_colour_14="#080808" # dark gray
    tmux_conf_theme_colour_15="#080808" # dark gray
    tmux_conf_theme_colour_16="#d70000" # red
    tmux_conf_theme_colour_17="#e4e4e4" # white

    # default theme (ansi)
    #tmux_conf_theme_colour_1="colour0"
    #tmux_conf_theme_colour_2="colour8"
    #tmux_conf_theme_colour_3="colour8"
    #tmux_conf_theme_colour_4="colour14"
    #tmux_conf_theme_colour_5="colour11"
    #tmux_conf_theme_colour_6="colour0"
    #tmux_conf_theme_colour_7="colour15"
    #tmux_conf_theme_colour_8="colour0"
    #tmux_conf_theme_colour_9="colour11"
    #tmux_conf_theme_colour_10="colour13"
    #tmux_conf_theme_colour_11="colour10"
    #tmux_conf_theme_colour_12="colour8"
    #tmux_conf_theme_colour_13="colour15"
    #tmux_conf_theme_colour_14="colour0"
    #tmux_conf_theme_colour_15="colour0"
    #tmux_conf_theme_colour_16="colour1"
    #tmux_conf_theme_colour_17="colour15"

    # window style
    tmux_conf_theme_window_fg="default"
    tmux_conf_theme_window_bg="default"

    # highlight focused pane, possible values are:
    # - true
    # - false (default)
    tmux_conf_theme_highlight_focused_pane=false

    # focused pane colours:
    tmux_conf_theme_focused_pane_bg="$tmux_conf_theme_colour_2"

    # pane border style, possible values are:
    # - thin (default)
    # - fat
    tmux_conf_theme_pane_border_style=thin

    # pane borders colours:
    tmux_conf_theme_pane_border="$tmux_conf_theme_colour_2"
    tmux_conf_theme_pane_active_border="$tmux_conf_theme_colour_4"
    %if #{>=:#{version},3.2}
    tmux_conf_theme_pane_active_border="#{?pane_in_mode,$tmux_conf_theme_colour_9,#{?synchronize-panes,$tmux_conf_theme_colour_16,$tmux_conf_theme_colour_4}}"
    %endif

    # pane indicator colours (when you hit <prefix> + q)
    tmux_conf_theme_pane_indicator="$tmux_conf_theme_colour_4"
    tmux_conf_theme_pane_active_indicator="$tmux_conf_theme_colour_4"

    # status line style
    tmux_conf_theme_message_fg="$tmux_conf_theme_colour_1"
    tmux_conf_theme_message_bg="$tmux_conf_theme_colour_5"
    tmux_conf_theme_message_attr="bold"

    # status line command style (<prefix> : Escape)
    tmux_conf_theme_message_command_fg="$tmux_conf_theme_colour_5"
    tmux_conf_theme_message_command_bg="$tmux_conf_theme_colour_1"
    tmux_conf_theme_message_command_attr="bold"

    # window modes style
    tmux_conf_theme_mode_fg="$tmux_conf_theme_colour_1"
    tmux_conf_theme_mode_bg="$tmux_conf_theme_colour_5"
    tmux_conf_theme_mode_attr="bold"

    # status line style
    tmux_conf_theme_status_fg="$tmux_conf_theme_colour_3"
    tmux_conf_theme_status_bg="$tmux_conf_theme_colour_1"
    tmux_conf_theme_status_attr="none"

    # terminal title
    # - built-in variables are:
    # - #{circled_window_index}
    # - #{circled_session_name}
    # - #{hostname}
    # - #{hostname_ssh}
    # - #{hostname_full}
    # - #{hostname_full_ssh}
    # - #{username}
    # - #{username_ssh}
    tmux_conf_theme_terminal_title="#h ❐ #S ● #I #W"

    # window status style
    # - built-in variables are:
    # - #{circled_window_index}
    # - #{circled_session_name}
    # - #{hostname}
    # - #{hostname_ssh}
    # - #{hostname_full}
    # - #{hostname_full_ssh}
    # - #{username}
    # - #{username_ssh}
    tmux_conf_theme_window_status_fg="$tmux_conf_theme_colour_3"
    tmux_conf_theme_window_status_bg="$tmux_conf_theme_colour_1"
    tmux_conf_theme_window_status_attr="none"
    tmux_conf_theme_window_status_format="#I #W#{?#{||:#{window_bell_flag},#{window_zoomed_flag}}, ,}#{?window_bell_flag,!,}#{?window_zoomed_flag,Z,}"
    #tmux_conf_theme_window_status_format="#{circled_window_index} #W#{?#{||:#{window_bell_flag},#{window_zoomed_flag}}, ,}#{?window_bell_flag,!,}#{?window_zoomed_flag,Z,}"
    #tmux_conf_theme_window_status_format="#I #W#{?#{||:#{window_bell_flag},#{window_zoomed_flag}}, ,}#{?window_bell_flag,🔔,}#{?window_zoomed_flag,🔍,}"

    # window current status style
    # - built-in variables are:
    # - #{circled_window_index}
    # - #{circled_session_name}
    # - #{hostname}
    # - #{hostname_ssh}
    # - #{hostname_full}
    # - #{hostname_full_ssh}
    # - #{username}
    # - #{username_ssh}
    tmux_conf_theme_window_status_current_fg="$tmux_conf_theme_colour_1"
    tmux_conf_theme_window_status_current_bg="$tmux_conf_theme_colour_4"
    tmux_conf_theme_window_status_current_attr="bold"
    tmux_conf_theme_window_status_current_format="#I #W#{?#{||:#{window_bell_flag},#{window_zoomed_flag}}, ,}#{?window_bell_flag,!,}#{?window_zoomed_flag,Z,}"
    #tmux_conf_theme_window_status_current_format="#{circled_window_index} #W#{?#{||:#{window_bell_flag},#{window_zoomed_flag}}, ,}#{?window_bell_flag,!,}#{?window_zoomed_flag,Z,}"
    #tmux_conf_theme_window_status_current_format="#I #W#{?#{||:#{window_bell_flag},#{window_zoomed_flag}}, ,}#{?window_bell_flag,🔔,}#{?window_zoomed_flag,🔍,}"

    # window activity status style
    tmux_conf_theme_window_status_activity_fg="default"
    tmux_conf_theme_window_status_activity_bg="default"
    tmux_conf_theme_window_status_activity_attr="underscore"

    # window bell status style
    tmux_conf_theme_window_status_bell_fg="$tmux_conf_theme_colour_5"
    tmux_conf_theme_window_status_bell_bg="default"
    tmux_conf_theme_window_status_bell_attr="blink,bold"

    # window last status style
    tmux_conf_theme_window_status_last_fg="$tmux_conf_theme_colour_4"
    tmux_conf_theme_window_status_last_bg="$tmux_conf_theme_colour_2"
    tmux_conf_theme_window_status_last_attr="none"

    # status left/right sections separators
    tmux_conf_theme_left_separator_main=""
    tmux_conf_theme_left_separator_sub="|"
    tmux_conf_theme_right_separator_main=""
    tmux_conf_theme_right_separator_sub="|"
    #tmux_conf_theme_left_separator_main='\uE0B0' # /!\ you don't need to install Powerline
    #tmux_conf_theme_left_separator_sub='\uE0B1' # you only need fonts patched with
    #tmux_conf_theme_right_separator_main='\uE0B2' # Powerline symbols or the standalone
    #tmux_conf_theme_right_separator_sub='\uE0B3' # PowerlineSymbols.otf font, see README.md

    # status left/right content:
    # - separate main sections with "|"
    # - separate subsections with ","
    # - built-in variables are:
    # - #{battery_bar}
    # - #{battery_hbar}
    # - #{battery_percentage}
    # - #{battery_status}
    # - #{battery_vbar}
    # - #{circled_session_name}
    # - #{hostname_ssh}
    # - #{hostname}
    # - #{hostname_full}
    # - #{hostname_full_ssh}
    # - #{loadavg}
    # - #{mouse}
    # - #{pairing}
    # - #{prefix}
    # - #{root}
    # - #{synchronized}
    # - #{uptime_y}
    # - #{uptime_d} (modulo 365 when #{uptime_y} is used)
    # - #{uptime_h}
    # - #{uptime_m}
    # - #{uptime_s}
    # - #{username}
    # - #{username_ssh}
    tmux_conf_theme_status_left=" ❐ #S | ↑#{?uptime_y, #{uptime_y}y,}#{?uptime_d, #{uptime_d}d,}#{?uptime_h, #{uptime_h}h,}#{?uptime_m, #{uptime_m}m,} "
    tmux_conf_theme_status_right=" #{prefix}#{mouse}#{pairing}#{synchronized}#{?battery_status,#{battery_status},}#{?battery_bar, #{battery_bar},}#{?battery_percentage, #{battery_percentage},} , %R , %d %b | #{username}#{root} | #{hostname} "

    # status left style
    tmux_conf_theme_status_left_fg="$tmux_conf_theme_colour_6,$tmux_conf_theme_colour_7,$tmux_conf_theme_colour_8"
    tmux_conf_theme_status_left_bg="$tmux_conf_theme_colour_9,$tmux_conf_theme_colour_10,$tmux_conf_theme_colour_11"
    tmux_conf_theme_status_left_attr="bold,none,none"

    # status right style
    tmux_conf_theme_status_right_fg="$tmux_conf_theme_colour_12,$tmux_conf_theme_colour_13,$tmux_conf_theme_colour_14"
    tmux_conf_theme_status_right_bg="$tmux_conf_theme_colour_15,$tmux_conf_theme_colour_16,$tmux_conf_theme_colour_17"
    tmux_conf_theme_status_right_attr="none,none,bold"

    # pairing indicator
    tmux_conf_theme_pairing="⚇" # U+2687
    tmux_conf_theme_pairing_fg="none"
    tmux_conf_theme_pairing_bg="none"
    tmux_conf_theme_pairing_attr="none"

    # prefix indicator
    tmux_conf_theme_prefix="⌨" # U+2328
    tmux_conf_theme_prefix_fg="none"
    tmux_conf_theme_prefix_bg="none"
    tmux_conf_theme_prefix_attr="none"

    # mouse indicator
    tmux_conf_theme_mouse="↗" # U+2197
    tmux_conf_theme_mouse_fg="none"
    tmux_conf_theme_mouse_bg="none"
    tmux_conf_theme_mouse_attr="none"

    # root indicator
    tmux_conf_theme_root="!"
    tmux_conf_theme_root_fg="none"
    tmux_conf_theme_root_bg="none"
    tmux_conf_theme_root_attr="bold,blink"

    # synchronized indicator
    tmux_conf_theme_synchronized="⚏" # U+268F
    tmux_conf_theme_synchronized_fg="none"
    tmux_conf_theme_synchronized_bg="none"
    tmux_conf_theme_synchronized_attr="none"

    # battery bar symbols
    tmux_conf_battery_bar_symbol_full="◼"
    tmux_conf_battery_bar_symbol_empty="◻"
    #tmux_conf_battery_bar_symbol_full="♥"
    #tmux_conf_battery_bar_symbol_empty="·"

    # battery bar length (in number of symbols), possible values are:
    # - auto
    # - a number, e.g. 5
    tmux_conf_battery_bar_length="auto"

    # battery bar palette, possible values are:
    # - gradient (default)
    # - heat
    # - "colour_full_fg,colour_empty_fg,colour_bg"
    tmux_conf_battery_bar_palette="gradient"
    #tmux_conf_battery_bar_palette="#d70000,#e4e4e4,#000000" # red, white, black

    # battery hbar palette, possible values are:
    # - gradient (default)
    # - heat
    # - "colour_low,colour_half,colour_full"
    tmux_conf_battery_hbar_palette="gradient"
    #tmux_conf_battery_hbar_palette="#d70000,#ff5f00,#5fff00" # red, orange, green

    # battery vbar palette, possible values are:
    # - gradient (default)
    # - heat
    # - "colour_low,colour_half,colour_full"
    tmux_conf_battery_vbar_palette="gradient"
    #tmux_conf_battery_vbar_palette="#d70000,#ff5f00,#5fff00" # red, orange, green

    # symbols used to indicate whether battery is charging or discharging
    tmux_conf_battery_status_charging="↑" # U+2191
    tmux_conf_battery_status_discharging="↓" # U+2193
    #tmux_conf_battery_status_charging="🔌" # U+1F50C
    #tmux_conf_battery_status_discharging="🔋" # U+1F50B

    # clock style (when you hit <prefix> + t)
    # you may want to use %I:%M %p in place of %R in tmux_conf_theme_status_right
    tmux_conf_theme_clock_colour="$tmux_conf_theme_colour_4"
    tmux_conf_theme_clock_style="24"


    # -- clipboard -----------------------------------------------------------------

    # in copy mode, copying selection also copies to the OS clipboard
    # - true
    # - false (default)
    # - disabled
    # on macOS, this requires installing reattach-to-user-namespace, see README.md
    # on Linux, this requires xsel, xclip or wl-copy
    tmux_conf_copy_to_os_clipboard=false


    # -- user customizations -------------------------------------------------------
    # this is the place to override or undo settings

    # increase history size
    #set -g history-limit 10000

    # start with mouse mode enabled
    #set -g mouse on

    # force Vi mode
    # really you should export VISUAL or EDITOR environment variable, see manual
    set -g status-keys vi
    set -g mode-keys vi

    # replace C-b by C-a instead of using both prefixes
    # set -gu prefix2
    # unbind C-a
    # unbind C-b
    # set -g prefix C-a
    # bind C-a send-prefix

    # if you don't want Oh my tmux! to alter a binding, use #!important
    # bind c new-window -c '#{pane_current_path}' #!important

    # move status line to top
    #set -g status-position top

    # expand history limit
    set -g history-limit 5000

    # Mouse support (new unified setting)
    set -g mouse on

    # -- tpm -----------------------------------------------------------------------

    # while I don't use tpm myself, many people requested official support so here
    # is a seamless integration that automatically installs plugins in parallel

    # whenever a plugin introduces a variable to be used in 'status-left' or
    # 'status-right', you can use it in 'tmux_conf_theme_status_left' and
    # 'tmux_conf_theme_status_right' variables.

    # by default, launching tmux will update tpm and all plugins
    # - true (default)
    # - false
    tmux_conf_update_plugins_on_launch=true

    # by default, reloading the configuration will update tpm and all plugins
    # - true (default)
    # - false
    tmux_conf_update_plugins_on_reload=true

    # by default, reloading the configuration will uninstall tpm and plugins when no
    # plugins are enabled
    # - true (default)
    # - false
    tmux_conf_uninstall_plugins_on_reload=true

    # /!\ the tpm bindings differ slightly from upstream:
    # - installing plugins: <prefix> + I
    # - uninstalling plugins: <prefix> + Alt + u
    # - updating plugins: <prefix> + u

    # /!\ do not add set -g @plugin 'tmux-plugins/tpm'
    # /!\ do not add run '~/.tmux/plugins/tpm/tpm'

    # to enable a plugin, use the 'set -g @plugin' syntax:
    # visit https://github.com/tmux-plugins for available plugins
    #set -g @plugin 'tmux-plugins/tmux-copycat'
    #set -g @plugin 'tmux-plugins/tmux-cpu'
    #set -g @plugin 'tmux-plugins/tmux-resurrect'
    #set -g @plugin 'tmux-plugins/tmux-continuum'
    #set -g @continuum-restore 'on'


    # -- custom variables ----------------------------------------------------------

    # to define a custom #{foo} variable, define a POSIX shell function between the
    # '# EOF' and the '# "$@"' lines. Please note that the opening brace { character
    # must be on the same line as the function name otherwise the parse won't detect
    # it.
    #
    # then, use #{foo} in e.g. the 'tmux_conf_theme_status_left' or the
    # 'tmux_conf_theme_status_right' variables.

    # # /!\ do not remove the following line
    # EOF
    #
    # # /!\ do not "uncomment" the functions: the leading "# " characters are needed
    #
    # weather() { # see https://github.com/chubin/wttr.in#one-line-output
    # curl -f -s -m 2 'wttr.in?format=3' || printf '\n' # /!\ make sure curl is installed
    # sleep 900 # sleep for 15 minutes, throttle network requests whatever the value of status-interval
    # }
    #
    # online() {
    # ping -c 1 1.1.1.1 >/dev/null 2>&1 && printf '✔' || printf '✘'
    # }
    #
    # "$@"
    # # /!\ do not remove the previous line


  4. randomradio revised this gist Jun 29, 2025. 1 changed file with 27 additions and 57 deletions.
    84 changes: 27 additions & 57 deletions tmux.conf
    Original file line number Diff line number Diff line change
    @@ -1,66 +1,36 @@
    # 0 is too far from ` ;)
    set -g base-index 1
    # -- general -------------------------------------------------------------------

    # Automatically set window title
    set-window-option -g automatic-rename on
    set-option -g set-titles on
    # Use 256-color mode
    set -g default-terminal "screen-256color"

    #set -g default-terminal screen-256color
    set -g status-keys vi
    set -g history-limit 10000
    # Enable xterm-style keys and mouse interaction
    setw -g xterm-keys on
    set -s escape-time 10
    set -sg repeat-time 600
    set -s focus-events on

    setw -g mode-keys vi
    setw -g mode-mouse on
    setw -g monitor-activity on

    bind-key v split-window -h
    bind-key s split-window -v

    bind-key J resize-pane -D 5
    bind-key K resize-pane -U 5
    bind-key H resize-pane -L 5
    bind-key L resize-pane -R 5
    # Alternate prefix key for screen compatibility
    set -g prefix2 C-q
    bind C-a send-prefix -2

    bind-key M-j resize-pane -D
    bind-key M-k resize-pane -U
    bind-key M-h resize-pane -L
    bind-key M-l resize-pane -R
    # History size
    set -g history-limit 5000

    # Vim style pane selection
    bind h select-pane -L
    bind j select-pane -D
    bind k select-pane -U
    bind l select-pane -R
    # Mouse support (new unified setting)
    set -g mouse on

    # Use Alt-vim keys without prefix key to switch panes
    bind -n M-h select-pane -L
    bind -n M-j select-pane -D
    bind -n M-k select-pane -U
    bind -n M-l select-pane -R
    # Status bar appearance (modern format strings)
    set -g window-status-format " #I:#W "
    set -g window-status-current-format "#[fg=black,bg=white,bold] #I:#W #[default]"

    # Use Alt-arrow keys without prefix key to switch panes
    bind -n M-Left select-pane -L
    bind -n M-Right select-pane -R
    bind -n M-Up select-pane -U
    bind -n M-Down select-pane -D
    # Optional: Reload tmux config easily
    bind r source-file ~/.tmux.conf \; display-message "Config reloaded!"

    # Shift arrow to switch windows
    bind -n S-Left previous-window
    bind -n S-Right next-window

    # No delay for escape key press
    set -sg escape-time 0

    # Reload tmux config
    bind r source-file ~/.tmux.conf
    # Optional: Use Vi key bindings in copy mode
    setw -g mode-keys vi
    bind-key -T copy-mode-vi 'v' send -X begin-selection
    bind-key -T copy-mode-vi 'y' send -X copy-selection-and-cancel

    # THEME
    set -g status-bg black
    set -g status-fg white
    set -g window-status-current-bg white
    set -g window-status-current-fg black
    set -g window-status-current-attr bold
    set -g status-interval 60
    set -g status-left-length 30
    set -g status-left '#[fg=green](#S) #(whoami)'
    set -g status-right '#[fg=yellow]#(cut -d " " -f 1-3 /proc/loadavg)#[default] #[fg=white]%H:%M#[default]'
    # Optional: Set pane border style
    set -g pane-border-style fg=default
    set -g pane-active-border-style fg=cyan
  5. @spicycode spicycode created this gist Sep 20, 2011.
    66 changes: 66 additions & 0 deletions tmux.conf
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,66 @@
    # 0 is too far from ` ;)
    set -g base-index 1

    # Automatically set window title
    set-window-option -g automatic-rename on
    set-option -g set-titles on

    #set -g default-terminal screen-256color
    set -g status-keys vi
    set -g history-limit 10000

    setw -g mode-keys vi
    setw -g mode-mouse on
    setw -g monitor-activity on

    bind-key v split-window -h
    bind-key s split-window -v

    bind-key J resize-pane -D 5
    bind-key K resize-pane -U 5
    bind-key H resize-pane -L 5
    bind-key L resize-pane -R 5

    bind-key M-j resize-pane -D
    bind-key M-k resize-pane -U
    bind-key M-h resize-pane -L
    bind-key M-l resize-pane -R

    # Vim style pane selection
    bind h select-pane -L
    bind j select-pane -D
    bind k select-pane -U
    bind l select-pane -R

    # Use Alt-vim keys without prefix key to switch panes
    bind -n M-h select-pane -L
    bind -n M-j select-pane -D
    bind -n M-k select-pane -U
    bind -n M-l select-pane -R

    # Use Alt-arrow keys without prefix key to switch panes
    bind -n M-Left select-pane -L
    bind -n M-Right select-pane -R
    bind -n M-Up select-pane -U
    bind -n M-Down select-pane -D

    # Shift arrow to switch windows
    bind -n S-Left previous-window
    bind -n S-Right next-window

    # No delay for escape key press
    set -sg escape-time 0

    # Reload tmux config
    bind r source-file ~/.tmux.conf

    # THEME
    set -g status-bg black
    set -g status-fg white
    set -g window-status-current-bg white
    set -g window-status-current-fg black
    set -g window-status-current-attr bold
    set -g status-interval 60
    set -g status-left-length 30
    set -g status-left '#[fg=green](#S) #(whoami)'
    set -g status-right '#[fg=yellow]#(cut -d " " -f 1-3 /proc/loadavg)#[default] #[fg=white]%H:%M#[default]'