refactor: 将 .tmux 和 tmux 改为 git submodule
- .tmux → https://github.com/gpakosz/.tmux.git - tmux → https://github.com/tmux/tmux.git
This commit is contained in:
parent
f7cc01fcae
commit
be1c545445
|
|
@ -0,0 +1,6 @@
|
||||||
|
[submodule "libs/external/.tmux"]
|
||||||
|
path = libs/external/.tmux
|
||||||
|
url = https://github.com/gpakosz/.tmux.git
|
||||||
|
[submodule "libs/external/tmux"]
|
||||||
|
path = libs/external/tmux
|
||||||
|
url = https://github.com/tmux/tmux.git
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 87dcd13a28aeb5f18baee630e24b3f5765ae3a4f
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
* text=auto
|
|
||||||
|
|
||||||
# git
|
|
||||||
.gitignore text
|
|
||||||
|
|
||||||
.tmux.conf eol=lf
|
|
||||||
.tmux.conf.local eol=lf
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
github: gpakosz
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
plugins/**
|
|
||||||
|
|
@ -1,16 +0,0 @@
|
||||||
Oh my tmux! logo copyright (c) 2024, Gregory Pakosz <gregory.pakosz@gmail.com>
|
|
||||||
|
|
||||||
Original tmux logo copyright (c) 2015, Jason Long <jason@jasonlong.me>
|
|
||||||
See https://github.com/tmux/tmux/tree/master/logo
|
|
||||||
|
|
||||||
Permission to use, copy, modify, and/or distribute this software for any
|
|
||||||
purpose with or without fee is hereby granted, provided that the above
|
|
||||||
copyright notice and this permission notice appear in all copies.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
||||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
||||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
||||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
||||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
||||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
||||||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1254 187"><path fill="#00afff" d="M240 147.4c29.6 0 50.4-25.6 50.4-68.6 0-42.4-20.8-67.4-50.4-67.4s-50.4 25-50.4 67.4c0 43 20.8 68.6 50.4 68.6zm0-14.6c-20 0-33.2-20.4-33.2-54 0-33 13.2-52.8 33.2-52.8s33.2 19.8 33.2 52.8c0 33.6-13.2 54-33.2 54zm68.52 12.2h16.4V77.2c11.4-11.8 19.2-17.6 30.8-17.6 16 0 22.4 8.8 22.4 27.2V145h16.4V84.6c0-25.6-10.6-39.2-33.6-39.2-15.2 0-26.4 8.2-36.4 19h-.6l1-23V2.6h-16.4zm162.85 0h16.4V74.6c4.8-10 9.2-15 16-15 7.2 0 10 5.8 10 17V145h15.2V74.6c5.2-10 8.8-15 15.6-15 7.2 0 10.4 5.8 10.4 17V145h16.4V75.4c0-19.4-8-30-21.6-30-11.2 0-17.2 6.4-22.8 16.8-2.8-11.2-8.8-16.8-18.4-16.8-11.2 0-17.2 6.2-22.2 15.2h-.4l-1.4-12.8h-13.2zm124.52 41.8c22 0 34-14.6 41.2-33.8l42.8-105.2h-15.6l-21.2 53.8c-3.2 8.8-7 19-10.4 28.2h-.8c-4-9.4-8.2-19.6-12-28.2l-23.8-53.8h-16.6l45.4 97.4-3 7.2c-4.8 12-13 20.8-26.6 20.8-3 0-6.2-.6-8.8-1.4l-3.4 13c3.4 1.2 8.2 2 12.8 2zm222.44-39.4c12.2 0 21.6-2.6 30.4-5.8l-3.6-12c-7 2.6-14.2 4.4-23.4 4.4-18.8 0-24.6-9.2-24.6-26.6V61.2h47.8V47.8h-47.8V16.6h-13.6l-2.2 31.2-28 1v12.4h27.4v46c0 24 9.2 40.2 37.6 40.2zm42.72-2.4h16.4V74.6c4.8-10 9.2-15 16-15 7.2 0 10 5.8 10 17V145h15.2V74.6c5.2-10 8.8-15 15.6-15 7.2 0 10.4 5.8 10.4 17V145h16.4V75.4c0-19.4-8-30-21.6-30-11.2 0-17.2 6.4-22.8 16.8-2.8-11.2-8.8-16.8-18.4-16.8-11.2 0-17.2 6.2-22.2 15.2h-.4l-1.4-12.8h-13.2zm147.55 2.4c15 0 26.4-8 36.2-19.4h.8l1.4 17h13.4V47.8H1044v67.4c-10.8 12.6-19 18-30.2 18-16.2 0-22.4-8.8-22.4-27.2V47.8h-16.6v60.4c0 25.6 10.6 39.2 33.8 39.2zm73.5-2.4h17.6l16-22.4c4-6.2 8-11.8 12-17.6h.8c4.2 5.6 8.8 12 12.8 17.6l17 22.4h18l-37.2-49 34.6-48.2h-17.4l-14.6 21c-3.4 5.4-7.4 11.4-11 16.8h-.8c-4-5.4-8-11.2-11.4-16.4l-15.4-21.4h-18.2l34.2 46.8zm151.5-46.4h11.2l2-68.8.4-18.8h-16l.4 18.8zm5.6 48.8c8 0 14.6-6 14.6-15.6 0-9.4-6.6-15.2-14.6-15.2s-14.6 5.8-14.6 15.2c0 9.6 6.6 15.6 14.6 15.6z" aria-label="Oh my tmux!"/><path fill="#fff" d="M76.892 144.526h7.91V76.812h76.014l.03-7.85-76.044-.06V-.131h-7.91z"/><path fill="#3c3c3c" fill-rule="evenodd" d="M83.788 69.866v-70h-6v146h6v-70h77v-6zm-83-54.994C.788 6.584 7.51-.134 15.786-.134h130c8.283 0 14.998 6.725 14.998 15.006v130.99h-160z"/><path fill="#ff0" d="m2 146 23-1v13.719s-14.06 1.335-18.379-2.658C1.471 151.301 2 146.001 2 146.001z" style="mix-blend-mode:normal" transform="translate(.788 -.134)"/><path fill="#ff00af" d="M25 145h30v13.719H25z" style="mix-blend-mode:normal" transform="translate(.788 -.134)"/><path fill="#3c3c3c" d="M55 145h5v13.719h-5z" style="mix-blend-mode:normal" transform="translate(.788 -.134)"/><path fill="#00afff" d="M60 145h17v13.719H60z" style="mix-blend-mode:normal" transform="translate(.788 -.134)"/><path fill="#3c3c3c" d="M77 145h54.248v13.719H77z" style="mix-blend-mode:normal" transform="translate(.788 -.134)"/><path fill="#fff" d="m157.95 146-13.053-1-9.947 13.719s14.06 1.335 18.379-2.658c5.15-4.76 4.62-10.06 4.62-10.06z" style="mix-blend-mode:normal" transform="translate(.788 -.134)"/><path fill="#d70000" d="M131.25 145h13.752v13.719H131.25z" style="mix-blend-mode:normal" transform="translate(.788 -.134)"/><path fill="#3c3c3c" fill-rule="evenodd" d="M2.788 144.866c0 7.189 5.816 13.004 12.998 13.004h130c7.174 0 12.998-5.824 12.998-13.004m2 0c0 8.287-6.722 15.004-14.998 15.004h-130c-8.283 0-14.998-6.706-14.998-15.004m2 1.004-2-2h160l-2 2m2 0h-160"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 3.3 KiB |
|
|
@ -1 +0,0 @@
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 160"><path fill="#fff" d="M76.104 144.66h7.91V76.946h76.014l.03-7.85-76.044-.06V.003h-7.91z"/><path fill="#3c3c3c" fill-rule="evenodd" d="M83 70V0h-6v146h6V76h77v-6zM0 15.006C0 6.718 6.722 0 14.998 0h130c8.283 0 14.998 6.725 14.998 15.006v130.99h-160z"/><path fill="#ff0" d="m2 146 23-1v13.719s-14.06 1.335-18.379-2.658C1.471 151.301 2 146.001 2 146.001z" style="mix-blend-mode:normal"/><path fill="#ff00af" d="M25 145h30v13.719H25z" style="mix-blend-mode:normal"/><path fill="#3c3c3c" d="M55 145h5v13.719h-5z" style="mix-blend-mode:normal"/><path fill="#00afff" d="M60 145h17v13.719H60z" style="mix-blend-mode:normal"/><path fill="#3c3c3c" d="M77 145h54.248v13.719H77z" style="mix-blend-mode:normal"/><path fill="#fff" d="m157.95 146-13.053-1-9.947 13.719s14.06 1.335 18.379-2.658c5.15-4.76 4.62-10.06 4.62-10.06z" style="mix-blend-mode:normal"/><path fill="#d70000" d="M131.25 145h13.752v13.719H131.25z" style="mix-blend-mode:normal"/><path fill="#3c3c3c" fill-rule="evenodd" d="M2 145c0 7.189 5.816 13.004 12.998 13.004h130c7.174 0 12.998-5.824 12.998-13.004m2 0c0 8.287-6.722 15.004-14.998 15.004h-130C6.715 160.004 0 153.298 0 145m2 1.004-2-2h160l-2 2m2 0H0"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 1.2 KiB |
File diff suppressed because it is too large
Load Diff
|
|
@ -1,509 +0,0 @@
|
||||||
# : << 'EOF'
|
|
||||||
# Oh my tmux!
|
|
||||||
# 💛🩷💙🖤❤️🤍
|
|
||||||
# https://github.com/gpakosz/.tmux
|
|
||||||
# (‑●‑●)> dual licensed under the WTFPL v2 license and the MIT license,
|
|
||||||
# without any warranty.
|
|
||||||
# Copyright 2012— Gregory Pakosz (@gpakosz).
|
|
||||||
|
|
||||||
|
|
||||||
# -- bindings ------------------------------------------------------------------
|
|
||||||
|
|
||||||
# preserve tmux stock bindings,
|
|
||||||
# while adding bindings that don't conflict with these stock bindings
|
|
||||||
# /!\ this disables some of Oh my tmux! bindings described in README.md
|
|
||||||
# - true
|
|
||||||
# - false (default)
|
|
||||||
tmux_conf_preserve_stock_bindings=false
|
|
||||||
|
|
||||||
|
|
||||||
# -- 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
|
|
||||||
|
|
||||||
# new session retains current path, possible values are:
|
|
||||||
# - true
|
|
||||||
# - false (default)
|
|
||||||
# - disabled (do not modify new-session bindings)
|
|
||||||
tmux_conf_new_session_retain_current_path=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_left=" ❐ #S | ↑#{?uptime_y, #{uptime_y}y,}#{?uptime_d, #{uptime_d}d,}#{?uptime_h, #{uptime_h}h,}#{?uptime_m, #{uptime_m}m,} | #{pretty_pane_current_path} "
|
|
||||||
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"
|
|
||||||
# - gradient(colour_fg_1,colour_fg_2,...,colour_fg_n)
|
|
||||||
tmux_conf_battery_bar_palette="gradient"
|
|
||||||
#tmux_conf_battery_bar_palette="#d70000,#e4e4e4,#000000" # red, white, black
|
|
||||||
#tmux_conf_battery_bar_palette="gradient(#00afff,#47a2ff,#7c91ff,#ac7afb,#d65be2,#e163df,#eb6cdd,#f475db,#ec9ff1,#eac3fe,#efe2ff,#ffffff)"
|
|
||||||
|
|
||||||
# battery hbar palette, possible values are:
|
|
||||||
# - gradient (default)
|
|
||||||
# - heat
|
|
||||||
# - "colour_low,colour_half,colour_full"
|
|
||||||
# - gradient(colour_fg_1,colour_fg_2,...,colour_fg_n)
|
|
||||||
tmux_conf_battery_hbar_palette="gradient"
|
|
||||||
#tmux_conf_battery_hbar_palette="#d70000,#ff5f00,#5fff00" # red, orange, green
|
|
||||||
#tmux_conf_battery_hbar_palette="gradient(#00afff,#47a2ff,#7c91ff,#ac7afb,#d65be2,#e163df,#eb6cdd,#f475db,#ec9ff1,#eac3fe,#efe2ff,#ffffff)"
|
|
||||||
|
|
||||||
# battery vbar palette, possible values are:
|
|
||||||
# - gradient (default)
|
|
||||||
# - heat
|
|
||||||
# - "colour_low,colour_half,colour_full"
|
|
||||||
# - gradient(colour_fg_1,colour_fg_2,...,colour_fg_n)
|
|
||||||
tmux_conf_battery_vbar_palette="gradient"
|
|
||||||
#tmux_conf_battery_vbar_palette="#d70000,#ff5f00,#5fff00" # red, orange, green
|
|
||||||
#tmux_conf_battery_vbar_palette="gradient(#00afff,#47a2ff,#7c91ff,#ac7afb,#d65be2,#e163df,#eb6cdd,#f475db,#ec9ff1,#eac3fe,#efe2ff,#ffffff)"
|
|
||||||
|
|
||||||
# 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 Linux, this requires xsel, xclip or wl-copy
|
|
||||||
tmux_conf_copy_to_os_clipboard=false
|
|
||||||
|
|
||||||
|
|
||||||
# -- urlscan -------------------------------------------------------------------
|
|
||||||
|
|
||||||
# options passed to urlscan
|
|
||||||
tmux_conf_urlscan_options="--compact --dedupe"
|
|
||||||
|
|
||||||
|
|
||||||
# -- 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 or a setting, use #!important
|
|
||||||
# bind c new-window -c '#{pane_current_path}' #!important
|
|
||||||
|
|
||||||
# display a message after toggling mouse support
|
|
||||||
bind m run "cut -c3- '#{TMUX_CONF}' | sh -s _toggle_mouse" \; display 'mouse #{?#{mouse},on,off}'
|
|
||||||
|
|
||||||
# move status line to top
|
|
||||||
#set -g status-position top
|
|
||||||
|
|
||||||
|
|
||||||
# -- 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'
|
|
||||||
|
|
||||||
# /!\ the 'set -g @tpm_plugins' syntax is not supported
|
|
||||||
# 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
|
|
||||||
#
|
|
||||||
# # usage: #{weather}
|
|
||||||
# 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
|
|
||||||
# }
|
|
||||||
#
|
|
||||||
# # usage: #{online}
|
|
||||||
# online() {
|
|
||||||
# ping -c 1 1.1.1.1 >/dev/null 2>&1 && printf '✔' || printf '✘'
|
|
||||||
# }
|
|
||||||
#
|
|
||||||
# # usage: #{wan_ip_v4}
|
|
||||||
# wan_ip_v4() {
|
|
||||||
# curl -f -s -m 2 -4 ifconfig.me
|
|
||||||
# sleep 300 # sleep for 5 minutes, throttle network requests whatever the value of status-interval
|
|
||||||
# }
|
|
||||||
#
|
|
||||||
# # usage: #{wan_ip_v6}
|
|
||||||
# wan_ip_v6() {
|
|
||||||
# curl -f -s -m 2 -6 ifconfig.me
|
|
||||||
# sleep 300 # sleep for 5 minutes, throttle network requests whatever the value of status-interval
|
|
||||||
# }
|
|
||||||
#
|
|
||||||
# # usage: #{github_stars}, #{github_stars tmux/tmux}, ...
|
|
||||||
# github_stars() {
|
|
||||||
# repository=${1##*https://github.com/}
|
|
||||||
# repository=${repository%% *}
|
|
||||||
# repository=${repository%%.git}
|
|
||||||
# url="https://api.github.com/repos/${repository:-gpakosz/.tmux}"
|
|
||||||
# curl -s "$url" | perl -MJSON::PP=decode_json -CO -0777 -E '$response = decode_json(readline *STDIN); say ($response->{stargazers_count})'
|
|
||||||
# sleep 300 # sleep for 5 minutes, throttle network requests whatever the value of status-interval
|
|
||||||
# }
|
|
||||||
#
|
|
||||||
# "$@"
|
|
||||||
# # /!\ do not remove the previous line
|
|
||||||
# # do not write below this line
|
|
||||||
|
|
@ -1,18 +0,0 @@
|
||||||
Copyright 2012— Gregory Pakosz
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
this software and associated documentation files (the "Software"), to deal in
|
|
||||||
the Software without restriction, including without limitation the rights to
|
|
||||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
||||||
the Software, and to permit persons to whom the Software is furnished to do so,
|
|
||||||
subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
||||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
||||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
@ -1,13 +0,0 @@
|
||||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
|
||||||
Version 2, December 2004
|
|
||||||
|
|
||||||
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
|
|
||||||
|
|
||||||
Everyone is permitted to copy and distribute verbatim or modified
|
|
||||||
copies of this license document, and changing it is allowed as long
|
|
||||||
as the name is changed.
|
|
||||||
|
|
||||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
|
||||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
|
||||||
|
|
||||||
0. You just DO WHAT THE FUCK YOU WANT TO.
|
|
||||||
|
|
@ -1,442 +0,0 @@
|
||||||
<p align="center">
|
|
||||||
<picture>
|
|
||||||
<source media="(prefers-color-scheme: light)" srcset=".logo/logomark+wordmark.svg">
|
|
||||||
<source media="(prefers-color-scheme: dark)" srcset=".logo/logomark+wordmark.svg">
|
|
||||||
<img alt="Oh my tmux! logo and wordmark" src=".logo/logomark+wordmark.svg">
|
|
||||||
</picture>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
˗ˏˋ ★ ˎˊ˗ My self-contained, pretty and versatile tmux configuration, made with ❤️ ˗ˏˋ ★ ˎˊ˗
|
|
||||||
|
|
||||||
<p align="center">
|
|
||||||
<picture>
|
|
||||||
<source media="(prefers-color-scheme: light)" srcset="https://cloud.githubusercontent.com/assets/553208/19740585/85596a5a-9bbf-11e6-8aa1-7c8d9829c008.gif">
|
|
||||||
<source media="(prefers-color-scheme: dark)" srcset="https://cloud.githubusercontent.com/assets/553208/19740585/85596a5a-9bbf-11e6-8aa1-7c8d9829c008.gif">
|
|
||||||
<img alt="Oh my tmux! in action" src="https://cloud.githubusercontent.com/assets/553208/19740585/85596a5a-9bbf-11e6-8aa1-7c8d9829c008.gif">
|
|
||||||
</picture>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
Installation
|
|
||||||
------------
|
|
||||||
|
|
||||||
**Requirements:**
|
|
||||||
|
|
||||||
- tmux **`>= 2.6`** running on Linux, macOS, OpenBSD, Windows (WSL or Cygwin)
|
|
||||||
- awk, perl (with Time::HiRes support), grep, and sed
|
|
||||||
- Outside of tmux, the `TERM` environment variable must be set to
|
|
||||||
`xterm-256color`
|
|
||||||
|
|
||||||
⚠️ Before installing, you may want to backup your existing configuration.
|
|
||||||
|
|
||||||
You can install Oh my tmux! at any of the following locations:
|
|
||||||
- `~`
|
|
||||||
- `$XDG_CONFIG_HOME/tmux`
|
|
||||||
- `~/.config/tmux`
|
|
||||||
|
|
||||||
**Automatic installation**
|
|
||||||
|
|
||||||
Copy the following command and paste it in your terminal.
|
|
||||||
```
|
|
||||||
curl -fsSL "https://github.com/gpakosz/.tmux/raw/refs/heads/master/install.sh#$(date +%s)" | bash
|
|
||||||
```
|
|
||||||
|
|
||||||
**Manual installation in `~`**
|
|
||||||
```
|
|
||||||
$ cd
|
|
||||||
$ git clone --single-branch https://github.com/gpakosz/.tmux.git
|
|
||||||
$ ln -s -f .tmux/.tmux.conf
|
|
||||||
$ cp .tmux/.tmux.conf.local .
|
|
||||||
```
|
|
||||||
|
|
||||||
**Manual installation in `$XDG_CONFIG_HOME/tmux`**
|
|
||||||
```
|
|
||||||
$ git clone --single-branch https://github.com/gpakosz/.tmux.git "/path/to/oh-my-tmux"
|
|
||||||
$ mkdir -p "$XDG_CONFIG_HOME/tmux"
|
|
||||||
$ ln -s /path/to/oh-my-tmux/.tmux.conf "$XDG_CONFIG_HOME/tmux/tmux.conf"
|
|
||||||
$ cp /path/to/oh-my-tmux/.tmux.conf.local "$XDG_CONFIG_HOME/tmux/tmux.conf.local"
|
|
||||||
```
|
|
||||||
|
|
||||||
**Manual installation `~/.config/tmux`**
|
|
||||||
```
|
|
||||||
$ git clone --single-branch https://github.com/gpakosz/.tmux.git "/path/to/oh-my-tmux"
|
|
||||||
$ mkdir -p ~/.config/tmux
|
|
||||||
$ ln -s /path/to/oh-my-tmux/.tmux.conf ~/.config/tmux/tmux.conf
|
|
||||||
$ cp /path/to/oh-my-tmux/.tmux.conf.local ~/.config/tmux/tmux.conf.local
|
|
||||||
```
|
|
||||||
⚠️ When installing `$XDG_CONFIG_HOME/tmux` or `~/.config/tmux`, the configuration
|
|
||||||
file names don't have a leading `.` character.
|
|
||||||
|
|
||||||
🚨 **You should never alter the main `.tmux.conf` or `tmux.conf` file. If you do,
|
|
||||||
you're on your own. Instead, every customization should happen in your
|
|
||||||
`.tmux.conf.local` or `tmux.conf.local` customization file copy.**
|
|
||||||
|
|
||||||
If you're a Vim user, setting the `VIUAL` or `EDITOR` environment variable to
|
|
||||||
`vim` will enable and further customize the `vi-style` key bindings (see tmux
|
|
||||||
manual).
|
|
||||||
|
|
||||||
If you're new to tmux, I recommend you to read the [tmux getting started
|
|
||||||
guide][getting-started], as well as the [tmux 3: Productive Mouse-Free
|
|
||||||
Development][bhtmux3] book by [@bphogan].
|
|
||||||
|
|
||||||
Now proceed to [adjust] your `.local` customization file copy.
|
|
||||||
|
|
||||||
[getting-started]: https://github.com/tmux/tmux/wiki/Getting-Started
|
|
||||||
[bhtmux3]: https://pragprog.com/titles/bhtmux3/tmux-3/
|
|
||||||
[@bphogan]: https://bphogan.com/
|
|
||||||
[adjust]: #configuration
|
|
||||||
|
|
||||||
Troubleshooting
|
|
||||||
---------------
|
|
||||||
|
|
||||||
- **I believe something's not quite right**
|
|
||||||
|
|
||||||
Please, try make sure no tmux client or server process is currently running.
|
|
||||||
|
|
||||||
Then launch tmux with:
|
|
||||||
```
|
|
||||||
$ tmux -f /dev/null -L test
|
|
||||||
```
|
|
||||||
|
|
||||||
Which launches a new tmux client/server pair without loading any
|
|
||||||
configuration.
|
|
||||||
|
|
||||||
If the issue is still reproducing, please reach out to the tmux project for
|
|
||||||
support.
|
|
||||||
|
|
||||||
Otherwise, please open an issue describing what doesn't work and I'll do my
|
|
||||||
best to address it.
|
|
||||||
|
|
||||||
- **I tried to used `set`, `bind` and `unbind` in my `.local` customization
|
|
||||||
file, but Oh my tmux! overwrites my preferences**
|
|
||||||
|
|
||||||
When that happens append `#!important` to the line:
|
|
||||||
|
|
||||||
```
|
|
||||||
bind c new-window -c '#{pane_current_path}' #!important
|
|
||||||
```
|
|
||||||
|
|
||||||
```
|
|
||||||
set -g default-terminal "screen-256color" #!important
|
|
||||||
```
|
|
||||||
|
|
||||||
- **Status line is broken and/or gets duplicated at the bottom of the screen**
|
|
||||||
|
|
||||||
This could happen on Linux when the distribution provides a version of glib
|
|
||||||
that received Unicode 9.0 upgrades (glib `>= 2.50.1`) while providing a
|
|
||||||
version of glibc that didn't (glibc `< 2.26`). You may also configure
|
|
||||||
`LC_CTYPE` to use an `UTF-8` locale. Typically VTE based terminal emulators
|
|
||||||
rely on glib's `g_unichar_iswide()` function while tmux relies on glibc's
|
|
||||||
`wcwidth()` function. When these two functions disagree, display gets messed
|
|
||||||
up.
|
|
||||||
|
|
||||||
This can also happen on macOS when using iTerm2 and "Use Unicode version 9
|
|
||||||
character widths" is enabled in `Preferences... > Profiles > Text`
|
|
||||||
|
|
||||||
For that reason, the sample `.local` customization file stopped using
|
|
||||||
Unicode characters for which width changed in between Unicode 8.0 and 9.0
|
|
||||||
standards, as well as Emojis.
|
|
||||||
|
|
||||||
- **I installed Powerline and/or (patched) fonts but I can't see the Powerline
|
|
||||||
symbols**
|
|
||||||
|
|
||||||
**🤯 Please realize that you don't need to install [Powerline].**
|
|
||||||
|
|
||||||
You only need fonts patched with Powerline symbols or the standalone
|
|
||||||
`PowerlineSymbols.otf` font.
|
|
||||||
|
|
||||||
Then make sure your `.local` customization file copy uses the [Powerline
|
|
||||||
code points] for the
|
|
||||||
`tmux_conf_theme_left_separator_main`,
|
|
||||||
`tmux_conf_theme_left_separator_sub`,
|
|
||||||
`tmux_conf_theme_right_separator_main`
|
|
||||||
and `tmux_conf_theme_right_separator_sub` variables.
|
|
||||||
|
|
||||||
[Powerline]: https://github.com/Lokaltog/powerline
|
|
||||||
[Powerline code points]: #enabling-the-powerline-look
|
|
||||||
|
|
||||||
Features
|
|
||||||
--------
|
|
||||||
|
|
||||||
- `C-a` acts as secondary prefix, while keeping default `C-b` prefix
|
|
||||||
- Visual theme inspired by [Powerline][]
|
|
||||||
- [Maximize any pane to a new window with `<prefix> +`][maximize-pane]
|
|
||||||
- Mouse mode toggle with `<prefix> m`
|
|
||||||
- Laptop battery status line information
|
|
||||||
- Uptime status line information
|
|
||||||
- Optional highlight of focused pane
|
|
||||||
- Configurable new sessions, windows and panes behavior (to optionally retain
|
|
||||||
the current path)
|
|
||||||
- SSH/Mosh aware username and hostname status line information
|
|
||||||
- SSH/Mosh aware pane splitting (with automatic reconnection to the remote
|
|
||||||
server)
|
|
||||||
- Copy to OS clipboard (needs `xsel`, `xclip`, or `wl-copy` on Linux)
|
|
||||||
- Support for 4-digit hexadecimal Unicode characters
|
|
||||||
- [PathPicker][] integration, if available
|
|
||||||
- [Urlscan][] (preferred) or [Urlview][] integration, if available
|
|
||||||
|
|
||||||
[maximize-pane]: http://pempek.net/articles/2013/04/14/maximizing-tmux-pane-new-window/
|
|
||||||
[PathPicker]: https://facebook.github.io/PathPicker/
|
|
||||||
[Urlview]: https://packages.debian.org/stable/misc/urlview
|
|
||||||
[Urlscan]: https://github.com/firecat53/urlscan
|
|
||||||
|
|
||||||
The "Maximize any pane to a new window with `<prefix> +`" feature is different
|
|
||||||
from the builtin `resize-pane -Z` command, as it allows you to further split a maximized
|
|
||||||
pane. It's also more flexible by allowing you to maximize a pane to a new
|
|
||||||
window, then change window, then go back and the pane is still in maximized
|
|
||||||
state in its own window. You can then minimize a pane by using `<prefix> +`
|
|
||||||
either from the source window or the maximized window.
|
|
||||||
|
|
||||||
<p align="center">
|
|
||||||
<picture>
|
|
||||||
<source media="(prefers-color-scheme: light)" srcset="https://cloud.githubusercontent.com/assets/553208/9890858/ee3c0ca6-5c02-11e5-890e-05d825a46c92.gif">
|
|
||||||
<source media="(prefers-color-scheme: dark)" srcset="https://cloud.githubusercontent.com/assets/553208/9890858/ee3c0ca6-5c02-11e5-890e-05d825a46c92.gif">
|
|
||||||
<img alt="Maximizing a pane" src="https://cloud.githubusercontent.com/assets/553208/9890858/ee3c0ca6-5c02-11e5-890e-05d825a46c92.gif">
|
|
||||||
</picture>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
Mouse mode allows you to set the active window, set the active pane, resize
|
|
||||||
panes and automatically switches to copy-mode to select text.
|
|
||||||
|
|
||||||
<p align="center">
|
|
||||||
<picture>
|
|
||||||
<source media="(prefers-color-scheme: light)" srcset="https://cloud.githubusercontent.com/assets/553208/9890797/8dffe542-5c02-11e5-9c06-a25b452e6fcc.gif">
|
|
||||||
<source media="(prefers-color-scheme: dark)" srcset="https://cloud.githubusercontent.com/assets/553208/9890797/8dffe542-5c02-11e5-9c06-a25b452e6fcc.gif">
|
|
||||||
<img alt="Mouse mode" src="https://cloud.githubusercontent.com/assets/553208/9890797/8dffe542-5c02-11e5-9c06-a25b452e6fcc.gif">
|
|
||||||
</picture>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
Bindings
|
|
||||||
--------
|
|
||||||
|
|
||||||
tmux may be controlled from an attached client by using a key combination of a
|
|
||||||
prefix key, followed by a command key. This configuration uses `C-a` as a
|
|
||||||
secondary prefix while keeping `C-b` as the default prefix. In the following
|
|
||||||
list of key bindings:
|
|
||||||
- `<prefix>` means you have to either hit <kbd>Ctrl</kbd> + <kbd>a</kbd> or <kbd>Ctrl</kbd> + <kbd>b</kbd>
|
|
||||||
- `<prefix> c` means you have to hit <kbd>Ctrl</kbd> + <kbd>a</kbd> or <kbd>Ctrl</kbd> + <kbd>b</kbd> followed by <kbd>c</kbd>
|
|
||||||
- `<prefix> C-c` means you have to hit <kbd>Ctrl</kbd> + <kbd>a</kbd> or <kbd>Ctrl</kbd> + <kbd>b</kbd> followed by <kbd>Ctrl</kbd> + <kbd>c</kbd>
|
|
||||||
|
|
||||||
This configuration uses the following bindings:
|
|
||||||
|
|
||||||
- `<prefix> e` opens the `.local` customization file copy with the editor
|
|
||||||
defined by the `VISUAL` or `EDITOR` environment variable (defaults to `vim`
|
|
||||||
when empty)
|
|
||||||
- `<prefix> r` reloads the configuration
|
|
||||||
- `C-l` clears both the screen **and** the tmux history
|
|
||||||
|
|
||||||
- `<prefix> C-c` creates a new session
|
|
||||||
- `<prefix> C-f` lets you switch to another session by name
|
|
||||||
|
|
||||||
- `<prefix> C-h` and `<prefix> C-l` let you navigate windows (default
|
|
||||||
`<prefix> n` is unbound and `<prefix> p` is repurposed)
|
|
||||||
- `<prefix> Tab` brings you to the last active window
|
|
||||||
|
|
||||||
- `<prefix> -` splits the current pane vertically
|
|
||||||
- `<prefix> _` splits the current pane horizontally
|
|
||||||
- `<prefix> h`, `<prefix> j`, `<prefix> k` and `<prefix> l` let you navigate
|
|
||||||
panes ala Vim
|
|
||||||
- `<prefix> H`, `<prefix> J`, `<prefix> K`, `<prefix> L` let you resize panes
|
|
||||||
- `<prefix> <` and `<prefix> >` let you swap panes
|
|
||||||
- `<prefix> +` maximizes the current pane to a new window
|
|
||||||
|
|
||||||
- `<prefix> m` toggles mouse mode on or off
|
|
||||||
|
|
||||||
- `<prefix> U` launches Urlscan (preferred) or Urlview, if available
|
|
||||||
- `<prefix> F` launches Facebook PathPicker, if available
|
|
||||||
|
|
||||||
- `<prefix> Enter` enters copy-mode
|
|
||||||
- `<prefix> b` lists the paste-buffers
|
|
||||||
- `<prefix> p` pastes from the top paste-buffer
|
|
||||||
- `<prefix> P` lets you choose the paste-buffer to paste from
|
|
||||||
|
|
||||||
Additionally, `copy-mode-vi` matches [my own Vim configuration]
|
|
||||||
|
|
||||||
[my own Vim configuration]: https://github.com/gpakosz/.vim.git
|
|
||||||
|
|
||||||
Bindings for `copy-mode-vi`:
|
|
||||||
|
|
||||||
- `v` begins selection / visual mode
|
|
||||||
- `C-v` toggles between blockwise visual mode and visual mode
|
|
||||||
- `H` jumps to the start of line
|
|
||||||
- `L` jumps to the end of line
|
|
||||||
- `y` copies the selection to the top paste-buffer
|
|
||||||
- `Escape` cancels the current operation
|
|
||||||
|
|
||||||
It's also possible to preserve the tmux stock bindings by setting the
|
|
||||||
`tmux_conf_preserve_stock_bindings` variable to `true` in your `.local`
|
|
||||||
customization file copy.
|
|
||||||
|
|
||||||
Configuration
|
|
||||||
-------------
|
|
||||||
|
|
||||||
While this configuration tries to bring sane default settings, you may want to
|
|
||||||
customize it further to your needs.
|
|
||||||
|
|
||||||
🚨 Again, you should never alter the main `.tmux.conf` or `tmux.conf` file.
|
|
||||||
If you do, you're on your own.
|
|
||||||
|
|
||||||
Please refer to the sample `.local` customization file to know more about the
|
|
||||||
variables that allow you to alter different behaviors. Upon successful
|
|
||||||
installation, pressing `<prefix> e` will open your `.local` customization file
|
|
||||||
copy with the editor defined by the `VISUAL` or `EDITOR` environment variable
|
|
||||||
(defaults to `vim` when empty).
|
|
||||||
|
|
||||||
### Enabling the Powerline look
|
|
||||||
|
|
||||||
Powerline originated as a status-line plugin for Vim. Its popular eye-catching
|
|
||||||
look is based on the use of special symbols:
|
|
||||||
|
|
||||||
<p align="center">
|
|
||||||
<picture>
|
|
||||||
<source media="(prefers-color-scheme: light)" srcset="https://github.com/user-attachments/assets/55afd317-150b-42f0-9ef3-fa619be7b160">
|
|
||||||
<source media="(prefers-color-scheme: dark)" srcset="https://github.com/user-attachments/assets/55afd317-150b-42f0-9ef3-fa619be7b160">
|
|
||||||
<img alt="Powerline symbols" src="https://github.com/user-attachments/assets/55afd317-150b-42f0-9ef3-fa619be7b160">
|
|
||||||
</picture>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
To make use of these symbols, there are several options:
|
|
||||||
|
|
||||||
- Use a font that already bundles those: this is the case of the [Source Code
|
|
||||||
Pro][source code pro] font
|
|
||||||
- Use a [pre-patched font][powerline patched fonts]
|
|
||||||
- Use your preferred font along with the standalone [Powerline font][powerline
|
|
||||||
font] (that only contains the Powerline symbols): [this highly depends on
|
|
||||||
your operating system and your terminal emulator][terminal support], for
|
|
||||||
instance here's a screenshot of iTerm2 configured to use
|
|
||||||
`PowerlineSymbols.otf` for non ASCII symbols:
|
|
||||||
<p align="center">
|
|
||||||
<picture>
|
|
||||||
<source media="(prefers-color-scheme: light)" srcset="https://user-images.githubusercontent.com/553208/62243890-8232f500-b3de-11e9-9b8c-51a5d38bdaa8.png">
|
|
||||||
<source media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/553208/62243890-8232f500-b3de-11e9-9b8c-51a5d38bdaa8.png">
|
|
||||||
<img alt="iTerm2 + Powerline font" src="https://user-images.githubusercontent.com/553208/62243890-8232f500-b3de-11e9-9b8c-51a5d38bdaa8.png">
|
|
||||||
</picture>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
[source code pro]: https://github.com/adobe-fonts/source-code-pro/releases/latest
|
|
||||||
[powerline patched fonts]: https://github.com/powerline/fonts
|
|
||||||
[powerline font]: https://github.com/powerline/powerline/raw/develop/font/PowerlineSymbols.otf
|
|
||||||
[terminal support]: http://powerline.readthedocs.io/en/master/usage.html#usage-terminal-emulators
|
|
||||||
|
|
||||||
Then edit your `.local` customization file copy (with `<prefix> e`) and adjust
|
|
||||||
the following variables:
|
|
||||||
|
|
||||||
```
|
|
||||||
tmux_conf_theme_left_separator_main='\uE0B0'
|
|
||||||
tmux_conf_theme_left_separator_sub='\uE0B1'
|
|
||||||
tmux_conf_theme_right_separator_main='\uE0B2'
|
|
||||||
tmux_conf_theme_right_separator_sub='\uE0B3'
|
|
||||||
```
|
|
||||||
|
|
||||||
The [Powerline manual] contains further details on how to install fonts
|
|
||||||
containing the Powerline symbols.
|
|
||||||
|
|
||||||
[Powerline manual]: http://powerline.readthedocs.org/en/latest/installation.html#fonts-installation
|
|
||||||
|
|
||||||
### Configuring the status line
|
|
||||||
|
|
||||||
Edit your `.local` customization file copy (`<prefix> e`) and adjust the
|
|
||||||
`tmux_conf_theme_status_left` and `tmux_conf_theme_status_right` variables to
|
|
||||||
your liking.
|
|
||||||
|
|
||||||
This configuration supports the following builtin variables:
|
|
||||||
|
|
||||||
- `#{battery_bar}`: horizontal battery charge bar
|
|
||||||
- `#{battery_hbar}`: 1 character wide, horizontal battery charge bar
|
|
||||||
- `#{battery_vbar}`: 1 character wide, vertical battery charge bar
|
|
||||||
- `#{battery_percentage}`: battery percentage
|
|
||||||
- `#{battery_status}`: is battery charging or discharging?
|
|
||||||
- `#{circled_session_name}`: circled session number (from ⓪) to ⑳)
|
|
||||||
- `#{hostname}`: SSH/Mosh aware hostname information
|
|
||||||
- `#{hostname_ssh}`: SSH/Mosh aware hostname information, blank when not
|
|
||||||
connected to a remote server through SSH/Mosh
|
|
||||||
- `#{loadavg}`: load average
|
|
||||||
- `#{pairing}`: is the current session attached to more than one client?
|
|
||||||
- `#{pretty_pane_current_path}`: prettified `#{pane_current_path}` when its
|
|
||||||
length is too long
|
|
||||||
- `#{prefix}`: is prefix being depressed?
|
|
||||||
- `#{root}`: is the current user root?
|
|
||||||
- `#{synchronized}`: are the panes synchronized?
|
|
||||||
- `#{uptime_y}`: uptime years
|
|
||||||
- `#{uptime_d}`: uptime days, modulo 365 when `#{uptime_y}` is used
|
|
||||||
- `#{uptime_h}`: uptime hours
|
|
||||||
- `#{uptime_m}`: uptime minutes
|
|
||||||
- `#{uptime_s}`: uptime seconds
|
|
||||||
- `#{username}`: SSH/Mosh aware username information
|
|
||||||
- `#{username_ssh}`: SSH aware username information, blank when not connected
|
|
||||||
to a remote server through SSH/Mosh
|
|
||||||
|
|
||||||
Beside the variables mentioned above, the `tmux_conf_theme_status_left` and
|
|
||||||
`tmux_conf_theme_status_right` variables support the usual tmux syntax, e.g.
|
|
||||||
using `#()` to call an external command that inserts weather information
|
|
||||||
provided by [wttr.in]:
|
|
||||||
```
|
|
||||||
tmux_conf_theme_status_right='#{prefix}#{pairing}#{synchronized} #(curl -m 1 wttr.in?format=3 2>/dev/null; sleep 900) , %R , %d %b | #{username}#{root} | #{hostname} '
|
|
||||||
```
|
|
||||||
The `sleep 900` call makes sure the network request is issued at most every 15
|
|
||||||
minutes whatever the value of `status-interval`.
|
|
||||||
|
|
||||||
<p align="center">
|
|
||||||
<picture>
|
|
||||||
<source media="(prefers-color-scheme: light)" srcset="https://user-images.githubusercontent.com/553208/52175490-07797c00-27a5-11e9-9fb6-42eec4fe4188.png">
|
|
||||||
<source media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/553208/52175490-07797c00-27a5-11e9-9fb6-42eec4fe4188.png">
|
|
||||||
<img alt="Weather information from wttr.in" src="https://user-images.githubusercontent.com/553208/52175490-07797c00-27a5-11e9-9fb6-42eec4fe4188.png">
|
|
||||||
</picture>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
[wttr.in]: https://github.com/chubin/wttr.in#one-line-output
|
|
||||||
|
|
||||||
💡 You can also define your own custom variables by defining your own POSIX
|
|
||||||
shell functions, see the sample `.local` customization file for instructions.
|
|
||||||
|
|
||||||
Finally, remember that `tmux_conf_theme_status_left` and
|
|
||||||
`tmux_conf_theme_status_right` end up being given to tmux as `status-left` and
|
|
||||||
`status-right` which means they're passed through `strftime()`. As such, the `%`
|
|
||||||
character has a special meaning and needs to be escaped by doubling it, e.g.
|
|
||||||
```
|
|
||||||
tmux_conf_theme_status_right='#(echo foo %% bar)'
|
|
||||||
```
|
|
||||||
See also `man 3 strftime`.
|
|
||||||
|
|
||||||
### Using TPM plugins
|
|
||||||
|
|
||||||
This configuration comes with built-in [TPM] support:
|
|
||||||
|
|
||||||
- Use the `set -g @plugin ...` syntax to enable a plugin
|
|
||||||
- Whenever a plugin introduces a variable to be used in `status-left` or
|
|
||||||
`status-right`, you can use it in the `tmux_conf_theme_status_left` and
|
|
||||||
`tmux_conf_theme_status_right` variables, see instructions above 👆
|
|
||||||
- ⚠️ Do not add `set -g @plugin 'tmux-plugins/tpm'` to any configuration file
|
|
||||||
- ⛔️ Do not add `run '~/.tmux/plugins/tpm/tpm'` to any configuration file
|
|
||||||
|
|
||||||
⚠️ The TPM bindings differ slightly from upstream:
|
|
||||||
- Installing plugins: `<prefix> + I`
|
|
||||||
- Uninstalling plugins: `<prefix> + Alt + u`
|
|
||||||
- Updating plugins: `<prefix> + u`
|
|
||||||
|
|
||||||
See the sample `.local` customization file for further instructions.
|
|
||||||
|
|
||||||
[TPM]: https://github.com/tmux-plugins/tpm
|
|
||||||
|
|
||||||
### Using Oh my tmux! on Windows
|
|
||||||
|
|
||||||
<p align="center">
|
|
||||||
<picture>
|
|
||||||
<source media="(prefers-color-scheme: light)" srcset="https://github.com/user-attachments/assets/7f84a687-fb4d-4817-a445-419e63ccfac5">
|
|
||||||
<source media="(prefers-color-scheme: dark)" srcset="https://github.com/user-attachments/assets/7f84a687-fb4d-4817-a445-419e63ccfac5">
|
|
||||||
<img alt="Windows Terminal + WSL" src="https://github.com/user-attachments/assets/7f84a687-fb4d-4817-a445-419e63ccfac5">
|
|
||||||
</picture>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
⚠️ I don't recommend running this configuration with [Cygwin] anymore. Forking
|
|
||||||
under Cygwin is extremely slow and this configuration issues a fair amount
|
|
||||||
`run-shell` commands under the hood. As such, you will experience high CPU
|
|
||||||
usage.
|
|
||||||
|
|
||||||
Instead I recommend [Windows Subsystem for Linux][WSL] along with [Windows
|
|
||||||
Terminal]. As an alternative, you may also consider using [Mintty as a terminal
|
|
||||||
for WSL][wsltty].
|
|
||||||
|
|
||||||
[Cygwin]: https://www.cygwin.com
|
|
||||||
[WSL]: https://learn.microsoft.com/en-us/windows/wsl
|
|
||||||
[wsltty]: https://github.com/mintty/wsltty
|
|
||||||
[Windows Terminal]: https://aka.ms/terminal
|
|
||||||
|
|
@ -1,189 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# Oh my tmux!
|
|
||||||
# 💛🩷💙🖤❤️🤍
|
|
||||||
# https://github.com/gpakosz/.tmux
|
|
||||||
# (‑●‑●)> dual licensed under the WTFPL v2 license and the MIT license,
|
|
||||||
# without any warranty.
|
|
||||||
# Copyright 2012— Gregory Pakosz (@gpakosz).
|
|
||||||
#
|
|
||||||
# ------------------------------------------------------------------------------
|
|
||||||
# 🚨 PLEASE REVIEW THE CONTENT OF THIS FILE BEFORE BLINDING PIPING TO CURL
|
|
||||||
# ------------------------------------------------------------------------------
|
|
||||||
{
|
|
||||||
if [ ${EUID:-$(id -u)} -eq 0 ]; then
|
|
||||||
printf '❌ Do not execute this script as root!\n' >&2 && exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "$BASH_VERSION" ]; then
|
|
||||||
printf '❌ This installation script requires bash\n' >&2 && exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! tmux -V >/dev/null 2>&1; then
|
|
||||||
printf '❌ tmux is not installed\n' >&2 && exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
is_true() {
|
|
||||||
case "$1" in
|
|
||||||
true|yes|1)
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
return 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
if ! is_true "$PERMISSIVE" && [ -n "$TMUX" ]; then
|
|
||||||
printf '❌ tmux is currently running, please terminate the server\n' >&2 && exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
install() {
|
|
||||||
printf '🎢 Installing Oh my tmux! Buckle up!\n' >&2
|
|
||||||
printf '\n' >&2
|
|
||||||
now=$(date +'%Y%d%m%S')
|
|
||||||
|
|
||||||
for dir in "${XDG_CONFIG_HOME:-$HOME/.config}/tmux" "$HOME/.tmux"; do
|
|
||||||
if [ -d "$dir" ]; then
|
|
||||||
printf '⚠️ %s directory exists, making a backup → %s\n' "${dir/#"$HOME"/'~'}" "${dir/#"$HOME"/'~'}.$now" >&2
|
|
||||||
if ! is_true "$DRY_RUN"; then
|
|
||||||
mv "$dir" "$dir.$now"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
for conf in "$HOME/.tmux.conf" \
|
|
||||||
"$HOME/.tmux.conf.local" \
|
|
||||||
"${XDG_CONFIG_HOME:-$HOME/.config}/tmux/tmux.conf" \
|
|
||||||
"${XDG_CONFIG_HOME:-$HOME/.config}/tmux/tmux.conf.local"; do
|
|
||||||
if [ -f "$conf" ]; then
|
|
||||||
if [ -L "$conf" ]; then
|
|
||||||
printf '⚠️ %s symlink exists, removing → 🗑️\n' "${conf/#"$HOME"/'~'}" >&2
|
|
||||||
if ! is_true "$DRY_RUN"; then
|
|
||||||
rm -f "$conf"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
printf '⚠️ %s file exists, making a backup -> %s\n' "${conf/#"$HOME"/'~'}" "${conf/#"$HOME"/'~'}.$now" >&2
|
|
||||||
if ! is_true "$DRY_RUN"; then
|
|
||||||
mv "$conf" "$conf.$now"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ -d "${XDG_CONFIG_HOME:-$HOME/.config}" ]; then
|
|
||||||
mkdir -p "${XDG_CONFIG_HOME:-$HOME/.config}/tmux"
|
|
||||||
TMUX_CONF="${XDG_CONFIG_HOME:-$HOME/.config}/tmux/tmux.conf"
|
|
||||||
else
|
|
||||||
TMUX_CONF="$HOME/.tmux.conf"
|
|
||||||
fi
|
|
||||||
TMUX_CONF_LOCAL="$TMUX_CONF.local"
|
|
||||||
|
|
||||||
OH_MY_TMUX_CLONE_PATH="${XDG_DATA_HOME:-$HOME/.local/share}/tmux/oh-my-tmux"
|
|
||||||
if [ -d "$OH_MY_TMUX_CLONE_PATH" ]; then
|
|
||||||
printf '⚠️ %s exists, making a backup\n' "${OH_MY_TMUX_CLONE_PATH/#"$HOME"/'~'}" >&2
|
|
||||||
printf '%s → %s\n' "${OH_MY_TMUX_CLONE_PATH/#"$HOME"/'~'}" "${OH_MY_TMUX_CLONE_PATH/#"$HOME"/'~'}.$now" >&2
|
|
||||||
if ! is_true "$DRY_RUN"; then
|
|
||||||
mv "$OH_MY_TMUX_CLONE_PATH" "$OH_MY_TMUX_CLONE_PATH.$now"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
printf '\n'
|
|
||||||
printf '✅ Using %s\n' "${OH_MY_TMUX_CLONE_PATH/#"$HOME"/'~'}" >&2
|
|
||||||
printf '✅ Using %s\n' "${TMUX_CONF/#"$HOME"/'~'}" >&2
|
|
||||||
printf '✅ Using %s\n' "${TMUX_CONF_LOCAL/#"$HOME"/'~'}" >&2
|
|
||||||
|
|
||||||
printf '\n'
|
|
||||||
OH_MY_TMUX_REPOSITORY=${OH_MY_TMUX_REPOSITORY:-https://github.com/gpakosz/.tmux.git}
|
|
||||||
printf '⬇️ Cloning Oh my tmux! repository...\n' >&2
|
|
||||||
if ! is_true "$DRY_RUN"; then
|
|
||||||
mkdir -p "$(dirname "$OH_MY_TMUX_CLONE_PATH")"
|
|
||||||
if ! git clone -q --single-branch "$OH_MY_TMUX_REPOSITORY" "$OH_MY_TMUX_CLONE_PATH"; then
|
|
||||||
printf '❌ Failed\n' >&2 && exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
printf '\n'
|
|
||||||
if is_true "$DRY_RUN" || ln -s -f "$OH_MY_TMUX_CLONE_PATH/.tmux.conf" "$TMUX_CONF"; then
|
|
||||||
printf '✅ Symlinked %s → %s\n' "${TMUX_CONF/#"$HOME"/'~'}" "${OH_MY_TMUX_CLONE_PATH/#"$HOME"/'~'}/.tmux.conf" >&2
|
|
||||||
fi
|
|
||||||
if is_true "$DRY_RUN" || cp "$OH_MY_TMUX_CLONE_PATH/.tmux.conf.local" "$TMUX_CONF_LOCAL"; then
|
|
||||||
printf '✅ Copied %s → %s\n' "${OH_MY_TMUX_CLONE_PATH/#"$HOME"/'~'}/.tmux.conf.local" "${TMUX_CONF_LOCAL/#"$HOME"/'~'}" >&2
|
|
||||||
fi
|
|
||||||
|
|
||||||
tmux() {
|
|
||||||
${TMUX_PROGRAM:-tmux} ${TMUX_SOCKET:+-S "$TMUX_SOCKET"} "$@"
|
|
||||||
}
|
|
||||||
if ! is_true "$DRY_RUN" && [ -n "$TMUX" ]; then
|
|
||||||
tmux set-environment -g TMUX_CONF "$TMUX_CONF"
|
|
||||||
tmux set-environment -g TMUX_CONF_LOCAL "$TMUX_CONF_LOCAL"
|
|
||||||
tmux source "$TMUX_CONF"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "$TMUX" ]; then
|
|
||||||
printf '\n' >&2
|
|
||||||
printf '⚠️ Installed Oh my tmux! while tmux was running...\n' >&2
|
|
||||||
printf '→ Existing sessions have outdated environment variables\n' >&2
|
|
||||||
printf ' • TMUX_CONF\n' >&2
|
|
||||||
printf ' • TMUX_CONF_LOCAL\n' >&2
|
|
||||||
printf ' • TMUX_PROGRAM\n' >&2
|
|
||||||
printf ' • TMUX_SOCKET\n' >&2
|
|
||||||
printf '→ Some other things may not work 🤷\n' >&2
|
|
||||||
fi
|
|
||||||
|
|
||||||
printf '\n' >&2
|
|
||||||
printf '🎉 Oh my tmux! successfully installed 🎉\n' >&2
|
|
||||||
}
|
|
||||||
|
|
||||||
if [ -p /dev/stdin ]; then
|
|
||||||
printf '✋ STOP\n' >&2
|
|
||||||
printf ' 🤨 It looks like you are piping commands from the internet to your shell!\n' >&2
|
|
||||||
printf " 🙏 Please take the time to review what's going to be executed...\n" >&2
|
|
||||||
|
|
||||||
(
|
|
||||||
printf '\n'
|
|
||||||
|
|
||||||
self() {
|
|
||||||
printf '# Oh my tmux!\n'
|
|
||||||
printf '# 💛🩷💙🖤❤️🤍\n'
|
|
||||||
printf '# https://github.com/gpakosz/.tmux\n'
|
|
||||||
printf '\n'
|
|
||||||
|
|
||||||
declare -f install
|
|
||||||
}
|
|
||||||
|
|
||||||
while :; do
|
|
||||||
printf ' Do you want to review the content? [Yes/No/Cancel] > ' >&2
|
|
||||||
read -r answer >&2
|
|
||||||
case $(printf '%s\n' "$answer" | tr '[:upper:]' '[:lower:]') in
|
|
||||||
y|yes)
|
|
||||||
case "$(command -v bat)${VISUAL:-${EDITOR}}" in
|
|
||||||
*bat*)
|
|
||||||
self | LESS='' bat --paging always --file-name install.sh
|
|
||||||
;;
|
|
||||||
*vim*) # vim, nvim, neovim ... compatible
|
|
||||||
self | ${VISUAL:-${EDITOR}} -c ':set syntax=tmux' -R -
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
tput smcup
|
|
||||||
clear
|
|
||||||
self | LESS='-R' ${PAGER:-less}
|
|
||||||
tput rmcup
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
break
|
|
||||||
;;
|
|
||||||
n|no)
|
|
||||||
break
|
|
||||||
;;
|
|
||||||
c|cancel)
|
|
||||||
printf '\n'
|
|
||||||
printf '⛔️ Installation aborted...\n' >&2 && exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
) < /dev/tty || exit 1
|
|
||||||
printf '\n'
|
|
||||||
fi
|
|
||||||
|
|
||||||
install
|
|
||||||
}
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 615c27c11789948df2db09e113e882f82dfb3e1c
|
||||||
Loading…
Reference in New Issue