Compare commits
104 Commits
Author | SHA1 | Date | |
---|---|---|---|
d0bc106279 | |||
38f5bb7f9c | |||
9964392ee0 | |||
6580e0b883 | |||
c18df0825b | |||
2005b6140f | |||
d874f095a4 | |||
360f5d0115 | |||
71f3ff3659 | |||
0924e6174e | |||
3391ae2eb5 | |||
7fd94d4f10 | |||
896a9e09d3 | |||
f02e0a20f6 | |||
85c11bc57c | |||
cc475b4400 | |||
2c859ddd93 | |||
14894bdf47 | |||
b9a82c93d9 | |||
7bc20823de | |||
905460fee4 | |||
6aeadd4129 | |||
d4ec662477 | |||
48f8514939 | |||
a4fe049859 | |||
97a94ec036 | |||
cd9e6742f4 | |||
a84ede4494 | |||
22fef1a533 | |||
78afc517ba | |||
201ba38b2a | |||
41cb522d2c | |||
b5c2f8343a | |||
d852c46bc8 | |||
2525d437fe | |||
6dbd391a56 | |||
09379eebc0 | |||
235bf058e5 | |||
f4aed11002 | |||
b2158b5f93 | |||
6c3c7d7373 | |||
1e2c00aa32 | |||
6beb81f972 | |||
6629046ec2 | |||
2bb99ee369 | |||
9a65f59273 | |||
fa263fb95e | |||
d4c2af545d | |||
d4ab398e3b | |||
1e14c8f9c6 | |||
27025bffbd | |||
2050f4f130 | |||
fcb2b02eac | |||
fd76c97c85 | |||
37e1195d66 | |||
bcc6dac2cc | |||
206aa05eee | |||
054b347595 | |||
32d0935e1c | |||
2a1453a061 | |||
1d5b0ed6aa | |||
aa010cbce6 | |||
e912a5902b | |||
1389817cb4 | |||
19ec5794b6 | |||
f7b5a6259f | |||
a52bd76906 | |||
21d1935ef3 | |||
4b2e867721 | |||
f440e0c04d | |||
67dc3dffaf | |||
21a88edfaa | |||
d96a1b7438 | |||
1d2a5f249d | |||
91118d58ac | |||
ed94650f54 | |||
ef4dddfd40 | |||
eda4a020bf | |||
24bdf7a404 | |||
59bba33cf1 | |||
ee4e59b281 | |||
33e2f0f81b | |||
d600c671ef | |||
0e67cca13b | |||
20be7f3bcc | |||
cabd57ae84 | |||
cd1a73f304 | |||
b6ee1bb677 | |||
720271baa5 | |||
6d07c00c2c | |||
28aa1795da | |||
b5526ca42b | |||
43ce79c8c3 | |||
56739ba2e7 | |||
b47c74a33f | |||
25d7c10240 | |||
943412c159 | |||
7cb6fec680 | |||
f9f72c13ba | |||
69ad546317 | |||
eafbe27379 | |||
94ee8df2f9 | |||
a180f60a98 | |||
fdcf4c701c |
@ -1,15 +0,0 @@
|
||||
---
|
||||
- location: ~/.config/tmux
|
||||
- apt:
|
||||
- libevent-dev
|
||||
- ncurses-dev
|
||||
- xsel
|
||||
- repo:
|
||||
- url: 'https://github.com/tmux/tmux.git'
|
||||
location: ~/.local/src/tmux
|
||||
branch: 2.6
|
||||
actions:
|
||||
- command: ./configure --prefix=$HOME/.local
|
||||
- command: {install: make -j8 install, remove: make uninstall}
|
||||
- symlink:
|
||||
- {src: tmux.conf, dst: ~/.tmux.conf}
|
9
hooks/session-create.sh
Executable file
9
hooks/session-create.sh
Executable file
@ -0,0 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
session_name=$(tmux display-message -p '#S')
|
||||
session_layout=~/.local/share/tmux/layouts/session-$session_name
|
||||
if [ -f $session_layout ]; then
|
||||
$session_layout
|
||||
else
|
||||
tmux rename-window home
|
||||
fi
|
43
install.sh
Executable file
43
install.sh
Executable file
@ -0,0 +1,43 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
if [ ! -d $HOME/.local/share/tmux/layouts ]; then
|
||||
mkdir -p $HOME/.local/share/tmux/layouts
|
||||
echo changed created layouts directory
|
||||
fi
|
||||
|
||||
symlink() {
|
||||
local source=$1
|
||||
local dest=$2
|
||||
if [ -L $dest ]; then
|
||||
local target=`readlink $dest`
|
||||
if [ "$target" != "$source" ]; then
|
||||
rm $dest
|
||||
ln -s $source $dest
|
||||
echo changed replace incorrect symlink $dest
|
||||
fi
|
||||
elif [ -f $dest ]; then
|
||||
error symlink failed $dest exists but is a regular file
|
||||
else
|
||||
ln -s $source $dest
|
||||
echo changed created symlink $dest
|
||||
fi
|
||||
}
|
||||
|
||||
symlink $HOME/.config/tmux/tmux.conf \
|
||||
$HOME/.tmux.conf
|
||||
symlink $HOME/.config/tmux/layouts/session-config \
|
||||
$HOME/.local/share/tmux/layouts/session-config
|
||||
symlink $HOME/.config/tmux/layouts/session-infra \
|
||||
$HOME/.local/share/tmux/layouts/session-infra
|
||||
symlink $HOME/.config/tmux/layouts/session-main \
|
||||
$HOME/.local/share/tmux/layouts/session-main
|
||||
symlink $HOME/.config/tmux/layouts/session-visor \
|
||||
$HOME/.local/share/tmux/layouts/session-visor
|
||||
symlink $HOME/.config/tmux/layouts/window-auto \
|
||||
$HOME/.local/share/tmux/layouts/window-auto
|
||||
symlink $HOME/.config/tmux/layouts/window-tall \
|
||||
$HOME/.local/share/tmux/layouts/window-tall
|
||||
symlink $HOME/.config/tmux/layouts/window-wide-left \
|
||||
$HOME/.local/share/tmux/layouts/window-wide-left
|
||||
symlink $HOME/.config/tmux/layouts/window-wide-right \
|
||||
$HOME/.local/share/tmux/layouts/window-wide-right
|
@ -1,4 +0,0 @@
|
||||
# vim: ft=tmux
|
||||
select-pane -t 0
|
||||
split-window -v -p 34
|
||||
select-pane -t 1
|
28
layouts/session-config
Executable file
28
layouts/session-config
Executable file
@ -0,0 +1,28 @@
|
||||
#!/usr/bin/env zsh
|
||||
|
||||
tmux rename-window home
|
||||
|
||||
tmux new-window -c ~/.config/nvim
|
||||
tmux rename-window config/nvim
|
||||
`dirname $0`/window-auto
|
||||
|
||||
tmux new-window -c ~/.config/zsh
|
||||
tmux rename-window config/zsh
|
||||
`dirname $0`/window-auto
|
||||
|
||||
tmux new-window -c ~/.config/tmux
|
||||
tmux rename-window config/tmux
|
||||
`dirname $0`/window-auto
|
||||
|
||||
if [ -d ~/.config/work ]; then
|
||||
tmux new-window -c ~/.config/work
|
||||
tmux rename-window config/work
|
||||
`dirname $0`/window-auto
|
||||
fi
|
||||
|
||||
tmux new-window -c ~/.config/local
|
||||
tmux rename-window config/local
|
||||
tmux move-window -s config:config/local -t 9
|
||||
`dirname $0`/window-auto
|
||||
|
||||
tmux select-window -t config:home
|
12
layouts/session-infra
Executable file
12
layouts/session-infra
Executable file
@ -0,0 +1,12 @@
|
||||
#!/usr/bin/env zsh
|
||||
|
||||
tmux rename-window home
|
||||
|
||||
for entry in ~/Projects/infra/*; do
|
||||
if [ ! -d $entry ]; then
|
||||
continue
|
||||
fi
|
||||
tmux new-window -c $entry
|
||||
tmux rename-window $(basename $entry)
|
||||
`dirname $0`/window-auto
|
||||
done
|
5
layouts/session-main
Executable file
5
layouts/session-main
Executable file
@ -0,0 +1,5 @@
|
||||
#!/usr/bin/env zsh
|
||||
|
||||
tmux rename-session main
|
||||
tmux rename-window home
|
||||
`dirname $0`/window-auto
|
9
layouts/session-visor
Executable file
9
layouts/session-visor
Executable file
@ -0,0 +1,9 @@
|
||||
#!/usr/bin/env -S tmux source-file
|
||||
|
||||
rename-window home
|
||||
if 'command -v btop &> /dev/null' \
|
||||
'split-window -h btop' \
|
||||
'split-window -h htop'
|
||||
select-pane -t visor:home.1
|
||||
|
||||
# vim: ft=tmux
|
27
layouts/window-auto
Executable file
27
layouts/window-auto
Executable file
@ -0,0 +1,27 @@
|
||||
#!/usr/bin/env zsh
|
||||
|
||||
cols=`tmux display -p "#{pane_width}"`
|
||||
lines=`tmux display -p "#{pane_height}"`
|
||||
width=$(( $cols / 2 )).0
|
||||
height=$lines.0
|
||||
ratio=$(( ($width / $height) * 100 ))
|
||||
|
||||
if [[ $cols -lt 140 ]] && [[ $lines -lt 70 ]]; then
|
||||
# terminal is too small
|
||||
exit
|
||||
fi
|
||||
|
||||
if [[ $ratio -ge 100 ]]; then
|
||||
# terminal is wide or square
|
||||
if [[ $cols -gt 240 ]]; then
|
||||
# terminal is wide and large
|
||||
`dirname $0`/window-wide-right
|
||||
else
|
||||
# terminal is wide and small
|
||||
tmux split-window -h -c '#{pane_current_path}'
|
||||
tmux select-pane -t 1
|
||||
fi
|
||||
else
|
||||
# terminal is tall
|
||||
`dirname $0`/window-tall
|
||||
fi
|
6
layouts/window-tall
Executable file
6
layouts/window-tall
Executable file
@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env -S tmux source-file
|
||||
|
||||
split-window -v -l 34% -c '#{pane_current_path}'
|
||||
select-pane -t 1
|
||||
|
||||
# vim: ft=tmux
|
6
layouts/window-wide-left
Executable file
6
layouts/window-wide-left
Executable file
@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env -S tmux source-file
|
||||
|
||||
split-window -h -l 43% -c '#{pane_current_path}'
|
||||
select-pane -t 1
|
||||
|
||||
# vim: ft=tmux
|
6
layouts/window-wide-right
Executable file
6
layouts/window-wide-right
Executable file
@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env -S tmux source-file
|
||||
|
||||
split-window -h -l 57% -c '#{pane_current_path}'
|
||||
select-pane -t 1
|
||||
|
||||
# vim: ft=tmux
|
16
system-info/install.sh
Executable file
16
system-info/install.sh
Executable file
@ -0,0 +1,16 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
script_dir=`dirname $0`
|
||||
|
||||
if [ `uname` = Darwin ]; then
|
||||
cp $script_dir/system-info.plist ~/Library/LaunchAgents/system-info.plist
|
||||
launchctl load -w ~/Library/LaunchAgents/system-info.plist
|
||||
else
|
||||
if [ "$WSL_DISTRO_NAME" = "" ]; then
|
||||
cp $script_dir/system-info.service ~/.config/systemd/user/system-info.service
|
||||
systemctl --user enable system-info
|
||||
systemctl --user start system-info
|
||||
else
|
||||
echo -e "\033[0;33mwarning:\033[0m WSL detected, system-info systemd service disabled"
|
||||
fi
|
||||
fi
|
13
system-info/remove.sh
Executable file
13
system-info/remove.sh
Executable file
@ -0,0 +1,13 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
if [ `uname` = Darwin ]; then
|
||||
launchctl unload ~/Library/LaunchAgents/system-info.plist
|
||||
rm ~/Library/LaunchAgents/system-info.plist
|
||||
else
|
||||
if [ "$WSL_DISTRO_NAME" = "" ]; then
|
||||
systemctl --user stop system-info
|
||||
systemctl --user disable system-info
|
||||
else
|
||||
echo -e "\033[0;33mwarning:\033[0m WSL detected, system-info systemd service disabled"
|
||||
fi
|
||||
fi
|
70
system-info/system-info-Linux.sh
Executable file
70
system-info/system-info-Linux.sh
Executable file
@ -0,0 +1,70 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
cache_dir=~/.cache/tmux
|
||||
cache_file=$cache_dir/system-info
|
||||
|
||||
# Make sure the output directory exists.
|
||||
if [ ! -d $cache_dir ]; then
|
||||
mkdir -p $cache_dir
|
||||
fi
|
||||
|
||||
if command -v sensors &> /dev/null; then
|
||||
if sensors 'coretemp-isa-0000' &> /dev/null; then
|
||||
function get_cpu_temp() {
|
||||
sensors 'coretemp-isa-0000' | awk 'NR == 3 { print $4 }'
|
||||
}
|
||||
elif sensors 'k10temp-pci-00c3' &> /dev/null; then
|
||||
function get_cpu_temp {
|
||||
sensors 'k10temp-pci-00c3' | grep 'Tctl:' | awk '{ print $2 }'
|
||||
}
|
||||
else
|
||||
function get_cpu_temp {
|
||||
echo ''
|
||||
}
|
||||
fi
|
||||
else
|
||||
function get_cpu_temp {
|
||||
echo 'N/A°C'
|
||||
}
|
||||
fi
|
||||
|
||||
if upower -e | grep 'BAT' 2> /dev/null; then
|
||||
function get_battery {
|
||||
local output=$(acpi -b)
|
||||
local charging=$(echo $output | awk '{ print $3 }')
|
||||
local percentage=$(echo $output | awk '{ print $4 }')
|
||||
if [ "$charging" = "Charging," ];then
|
||||
echo $percentage | awk '$battery ~ /.*/ {
|
||||
printf " %d%% %s\n", $battery, substr("", int($battery / 9), 1)
|
||||
}'
|
||||
else
|
||||
echo $percentage | awk '$battery ~ /.*/ {
|
||||
printf " %d%% %s\n", $battery, substr("", int($battery / 9), 1)
|
||||
}'
|
||||
fi
|
||||
}
|
||||
else
|
||||
function get_battery {
|
||||
echo ''
|
||||
}
|
||||
fi
|
||||
|
||||
# Cleanup cache file when interrupted.
|
||||
trap '[ -f $cache_file ] && rm $cache_file; exit' INT
|
||||
trap '[ -f $cache_file ] && rm $cache_file; exit' TERM
|
||||
|
||||
while true; do
|
||||
# Parse the current CPU load on all cores/threads.
|
||||
cpu_load=" `mpstat -P ALL -n 1 -u 1 -o JSON | \
|
||||
jq '.sysstat.hosts[0].statistics[0]["cpu-load"][1:]|.[].idle' | \
|
||||
awk '$idle ~ /[-.0-9]*/ { printf "%s", substr("█▇▆▅▄▃▂▁ ", int($idle / 11), 1) }'`"
|
||||
|
||||
# Parse the current CPU package temperature.
|
||||
cpu_temp=$(get_cpu_temp)
|
||||
|
||||
# Get the battery status if present.
|
||||
battery=$(get_battery)
|
||||
|
||||
# Write to the cache file.
|
||||
echo "$cpu_temp$cpu_load$battery" > $cache_file
|
||||
done
|
49
system-info/system-info-WSL.sh
Executable file
49
system-info/system-info-WSL.sh
Executable file
@ -0,0 +1,49 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
cache_dir=~/.cache/tmux
|
||||
cache_file=$cache_dir/system-info
|
||||
|
||||
# Make sure the output directory exists.
|
||||
if [ ! -d $cache_dir ]; then
|
||||
mkdir -p $cache_dir
|
||||
fi
|
||||
|
||||
# Cleanup cache file when interrupted.
|
||||
trap '[ -f $cache_file ] && rm $cache_file; exit' INT
|
||||
trap '[ -f $cache_file ] && rm $cache_file; exit' TERM
|
||||
|
||||
if cat /proc/cpuinfo | grep -i intel > /dev/null; then
|
||||
cpu_temp_sensor="/intelcpu/0/temperature/0"
|
||||
elif cat /proc/cpuinfo | grep -i amd > /dev/null; then
|
||||
cpu_temp_sensor="/amdcpu/0/temperature/0"
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
|
||||
powershell="/mnt/c/Windows/System32/WindowsPowerShell/v1.0//powershell.exe"
|
||||
|
||||
while true; do
|
||||
# Assumes OpenHardwareMonitor is running and emitting data to WMI so we can
|
||||
# access it via the Windows hosts powershell.exe.
|
||||
raw_cpu_temp=$($powershell -NoProfile \
|
||||
"(Get-WmiObject -Namespace \"root/OpenHardwareMonitor\" -Query 'select Value from Sensor WHERE Identifier LIKE \"$cpu_temp_sensor\"').Value" \
|
||||
| sed 's/\r//')
|
||||
cpu_temp=$(printf "%.1f°C" "$raw_cpu_temp")
|
||||
|
||||
cpu_load=" `mpstat -P ALL -n 1 -u 1 -o JSON | \
|
||||
jq '.sysstat.hosts[0].statistics[0]["cpu-load"][1:]|.[].idle' | \
|
||||
awk '$idle ~ /[-.0-9]*/ { printf "%s", substr("█▇▆▅▄▃▂▁ ", int($idle / 11), 1) }'`"
|
||||
|
||||
raw_battery=$($powershell -NoProfile \
|
||||
"(Get-WmiObject win32_battery).EstimatedChargeRemaining" \
|
||||
| sed 's/\r//')
|
||||
if [ "" != "$raw_battery" ]; then
|
||||
battery="$(echo $raw_battery | awk '$battery ~ /.*/ {
|
||||
printf " %d%% %s\n", $battery, substr("", int($battery / 9), 1)
|
||||
}')"
|
||||
fi
|
||||
|
||||
echo "$cpu_temp$cpu_load$battery" > $cache_file
|
||||
# echo "$(locale)" > $cache_file
|
||||
sleep 2
|
||||
done
|
43
system-info/system-info-macOS.sh
Executable file
43
system-info/system-info-macOS.sh
Executable file
@ -0,0 +1,43 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
cache_dir=~/.cache/tmux
|
||||
cache_file=$cache_dir/system-info
|
||||
|
||||
# Make sure the output directory exists.
|
||||
if [ ! -d $cache_dir ]; then
|
||||
mkdir -p $cache_dir
|
||||
fi
|
||||
|
||||
# Cleanup cache file when interrupted.
|
||||
trap '[ -f $cache_file ] && rm $cache_file; exit' INT
|
||||
trap '[ -f $cache_file ] && rm $cache_file; exit' TERM
|
||||
|
||||
# Check if a battery is installed.
|
||||
ioreg -w0 -l | grep BatteryInstalled &> /dev/null && \
|
||||
has_battery=true || has_battery=false
|
||||
|
||||
while true; do
|
||||
# # Get the current CPU temperature.
|
||||
# cpu_temp="`/usr/local/bin/osx-cpu-temp`"
|
||||
|
||||
cpu_load=$(sudo powermetrics --format text \
|
||||
--sample-rate 1200 --sample-count 1 --samplers cpu_power |
|
||||
grep --color=never -E 'CPU \d idle residency:' |
|
||||
grep --color=never -Eo '\d+\.\d+' |
|
||||
gawk '$idle ~ /[-.0-9]*/ { printf "%s", substr("█▇▆▅▄▃▂▁ ", int($idle / 10), 1) }'
|
||||
)
|
||||
|
||||
# Parse the current battery charge percentage.
|
||||
if $has_battery; then
|
||||
raw_battery="$(pmset -g batt | \
|
||||
grep --color=never 'InternalBattery' | \
|
||||
grep --color=never -Eo '\d+%' | \
|
||||
grep --color=never -Eo '\d+')"
|
||||
battery="$(echo $raw_battery | gawk '$battery ~ /.*/ {
|
||||
printf " %d%% %s\n", $battery, substr("", int($battery / 9), 1)
|
||||
}')"
|
||||
fi
|
||||
|
||||
# Write to the cache file.
|
||||
echo "$cpu_temp$cpu_load$battery" > $cache_file
|
||||
done
|
14
system-info/system-info.plist
Normal file
14
system-info/system-info.plist
Normal file
@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>Label</key>
|
||||
<string>system-info</string>
|
||||
<key>ProgramArguments</key>
|
||||
<array>
|
||||
<string>/Users/benie/.config/tmux/system-info/system-info-macOS.sh</string>
|
||||
</array>
|
||||
<key>KeepAlive</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
163
tmux.conf
163
tmux.conf
@ -1,3 +1,12 @@
|
||||
# Address vim mode switching delay & garbage text on start
|
||||
set -s escape-time 1
|
||||
|
||||
# Set global hooks to perform actions when events occur
|
||||
set-hook -g session-created 'run ~/.config/tmux/hooks/session-create.sh'
|
||||
|
||||
# Set the tmux version to check for command support
|
||||
run 'tmux setenv -g TMUX_VERSION $(tmux -V | cut -c 6-8)'
|
||||
|
||||
# Use vim keybindings in copy mode
|
||||
set -g mode-keys vi
|
||||
|
||||
@ -6,26 +15,27 @@ unbind C-b
|
||||
set -g prefix C-Space
|
||||
bind Space send-prefix
|
||||
|
||||
# Address vim mode switching delay
|
||||
set -s escape-time 0
|
||||
|
||||
# Increase scrollback buffer size
|
||||
set -g history-limit 50000
|
||||
set -g history-limit 1000000
|
||||
|
||||
# Set tmux messages display time to 4 seconds
|
||||
set -g display-time 4000
|
||||
|
||||
# Refresh 'status-left' and 'status-right' more often
|
||||
set -g status-interval 5
|
||||
set -g status-interval 2
|
||||
|
||||
# Upgrade $TERM
|
||||
set -g default-terminal "tmux-256color"
|
||||
|
||||
# Enable true-color
|
||||
if '[[ "$TMUX_VERSION" < "3.2" ]]' \
|
||||
'set-option -as terminal-features ",xterm*:Tc"' \
|
||||
'set-option -as terminal-features ",xterm*:RGB"'
|
||||
|
||||
# Focus events enabled for terminals that support them
|
||||
set -g focus-events on
|
||||
|
||||
# TODO: Change this comment to something that explains the setting
|
||||
# super useful when using "grouped sessions" and multi-monitor setup
|
||||
# Aggressively resize the chosen window to smallest/largest session
|
||||
setw -g aggressive-resize on
|
||||
|
||||
# Start window & pane index at 1
|
||||
@ -33,79 +43,126 @@ set -g pane-base-index 1
|
||||
|
||||
# Enable mouse support
|
||||
set-option -g mouse on
|
||||
# Prevent mouse click up events exiting copy mode
|
||||
unbind -T copy-mode-vi MouseDragEnd1Pane
|
||||
|
||||
# Enable changing cursor shape per pane in iTerm2 or VTE compatible terminals,
|
||||
# vim or zsh should emit VTE compatible escape sequences to change cursor shape
|
||||
if -b '[ -n $ITERM_PROFILE ]' \
|
||||
"set -ga terminal-overrides '*:Ss=\E]1337;CursorShape=%p1%d\7'" \
|
||||
"set -ga terminal-overrides '*:Ss=\E[%p1%d q:Se=\E[2 q'"
|
||||
# Enable changing cursor shape per pane, vim or zsh should emit escape
|
||||
# sequences to change cursor shape.
|
||||
# iTerm2 only requires this before tmux 2.9
|
||||
if '[ -n $ITERM_PROFILE ] && [[ "$TMUX_VERSION" < "2.9" ]]' \
|
||||
'set -ga terminal-overrides "*:Ss=\E]1337;CursorShape=%p1%d\7"'
|
||||
# VTE compatible terminals.
|
||||
if '[ ! -n $ITERM_PROFILE ]' \
|
||||
'set -ga terminal-overrides "*:Ss=\E[%p1%d q:Se=\E[2 q"'
|
||||
|
||||
# Enable strikethrough on VTE compatible terminals.
|
||||
set -ga terminal-overrides 'xterm*:smxx=\E[9m'
|
||||
|
||||
# Set only on OS X where it's required
|
||||
# Set only on macOS where it's required
|
||||
if -b '[ "`uname`" = "Darwin" ]' \
|
||||
"set -g default-command 'reattach-to-user-namespace -l $SHELL'"
|
||||
'set -g default-command "reattach-to-user-namespace -l $SHELL"'
|
||||
|
||||
# Restore old next/previous window bindings
|
||||
bind C-n next-window
|
||||
bind C-p previous-window
|
||||
|
||||
# Make new splits open in current directory
|
||||
bind "\"" split-window -c "#{pane_current_path}"
|
||||
bind "%" split-window -h -c "#{pane_current_path}"
|
||||
bind '"' split-window -c '#{pane_current_path}'
|
||||
bind '%' split-window -h -c '#{pane_current_path}'
|
||||
|
||||
# Change word separators to better match Vim.
|
||||
set -g word-separators "<>(){}[]/'\";@*+,.-_=!£$%^&:#~?`¬|\\ "
|
||||
|
||||
# Integrate pane selection with vim
|
||||
is_vim='echo "#{pane_current_command}" | grep -iqE "(^|\/)g?(view|n?vim?)(diff)?$"'
|
||||
bind -n C-h if-shell "$is_vim" "send-keys C-h" "select-pane -L"
|
||||
bind -n C-j if-shell "$is_vim" "send-keys C-j" "select-pane -D"
|
||||
bind -n C-k if-shell "$is_vim" "send-keys C-k" "select-pane -U"
|
||||
bind -n C-l if-shell "$is_vim" "send-keys C-l" "select-pane -R"
|
||||
bind -n C-\ if-shell "$is_vim" "send-keys C-\\" "select-pane -l"
|
||||
in_vim='tmux show-window-options | grep -q "@vim#{pane_id}"'
|
||||
bind -n C-h if $in_vim 'send-keys C-h' 'select-pane -L'
|
||||
bind -n C-j if $in_vim 'send-keys C-j' 'select-pane -D'
|
||||
bind -n C-k if $in_vim 'send-keys C-k' 'select-pane -U'
|
||||
bind -n C-l if $in_vim 'send-keys C-l' 'select-pane -R'
|
||||
|
||||
# Integrate urlview
|
||||
bind-key u capture-pane \; split-window "tmux show-buffer | urlview -"
|
||||
# Integrate urlscan or fallback to urlview
|
||||
if -b 'which urlscan' \
|
||||
'bind u capture-pane \; split-window "tmux show-buffer | urlscan"' \
|
||||
'bind u capture-pane \; split-window "tmux show-buffer | urlview -"'
|
||||
|
||||
# Unbind copy mode defaults so pane selection works
|
||||
unbind -T copy-mode-vi C-h
|
||||
unbind -T copy-mode-vi C-j
|
||||
# Enter copy mode with C-U
|
||||
bind-key C-u copy-mode -u
|
||||
bind C-u copy-mode -u
|
||||
# Begin selection in copy mode with v not Space
|
||||
bind-key -T copy-mode-vi v send-keys -X begin-selection
|
||||
# Yank to the system clipboard in copy mode
|
||||
if -b '[ "`uname`" = "Linux" ]' \
|
||||
"bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'xsel -i -p && xsel -o -p | xsel -i -b'"
|
||||
bind -T copy-mode-vi v send-keys -X begin-selection
|
||||
# Search without entering copy-mode first
|
||||
bind '/' 'copy-mode;send-keys /'
|
||||
bind '?' 'copy-mode;send-keys ?'
|
||||
|
||||
# Enable mouse scrolling up in alternate buffers.
|
||||
# If #{mouse_any_flag} is 1 the pane is running with mouse support, e.g. vim.
|
||||
# If #{alternate_on} is 1 the terminal is in alternate buffer mode, e.g. less.
|
||||
# If #{pane_in_mode} is 1 the pane is in copy-mode.
|
||||
bind -n WheelUpPane \
|
||||
if -Ft= "#{mouse_any_flag}" \
|
||||
"send-keys -M" \
|
||||
"if -Ft= \"#{alternate_on}\" \
|
||||
\"send-keys -t= Up ; \
|
||||
send-keys -t= Up ; \
|
||||
send-keys -t= Up ; \" \
|
||||
\"select-pane -t= ; \
|
||||
if -Ft= '#{pane_in_mode}' \
|
||||
'send-keys -M' \
|
||||
'copy-mode -e ; send-keys -M' \" "
|
||||
# Emulate mouse scrolling down in alternate buffers.
|
||||
bind -n WheelDownPane \
|
||||
if -Ft= "#{mouse_any_flag}" \
|
||||
"send-keys -M" \
|
||||
"if -Ft= \"#{alternate_on}\" \
|
||||
\"send-keys -t= Down ; \
|
||||
send-keys -t= Down ; \
|
||||
send-keys -t= Down ; \" \
|
||||
\"select-pane -t= ; \
|
||||
send-keys -M\" "
|
||||
|
||||
# Enable setting clipboard with OSC-52 when in an SSH session
|
||||
if -b '[ "$SSH_TTY" != "" ]' \
|
||||
'set-option -g set-clipboard on'
|
||||
|
||||
# Yank to the system clipboard in copy mode.
|
||||
# TODO: reattach-to-user-namespace not necessary with tmux > 2.6
|
||||
if -b '[ "`uname`" = "Darwin" ]' \
|
||||
'bind -T copy-mode-vi y send-keys -X copy-pipe "reattach-to-user-namespace pbcopy"'
|
||||
# When not in WSL2 use xsel, when in WSL use win32yank.exe to avoid UI lockups.
|
||||
if -b '[ "$WSLENV" = "" ]' \
|
||||
'bind -T copy-mode-vi y send-keys -X copy-pipe "xsel -i --clipboard"' \
|
||||
'bind -T copy-mode-vi y send-keys -X copy-pipe "win32yank.exe -i -crlf"'
|
||||
|
||||
# Left status style
|
||||
set-window-option -g status-left " #S"
|
||||
set-window-option -g status-left-fg colour240
|
||||
set-window-option -g status-left-bg colour233
|
||||
if -b '[ "$WSL_DISTRO_NAME" != "" ]' \
|
||||
'setw -g status-left " #(hostname)|#{WSL_DISTRO_NAME}|#{session_name}"' \
|
||||
'setw -g status-left " #(hostname -s)|#{session_name}"'
|
||||
setw -g status-left-style fg=colour240,bg=colour233
|
||||
setw -g status-left-length 32
|
||||
|
||||
# Centre status style
|
||||
set-window-option -g status-fg colour240
|
||||
set-window-option -g status-bg colour233
|
||||
setw -g status-style fg=colour240,bg=colour233
|
||||
|
||||
# Right status style
|
||||
set-window-option -g status-right "%a %d-%m-%y %H:%M "
|
||||
set-window-option -g status-right-fg white
|
||||
set-window-option -g status-right-bg colour233
|
||||
# Right status style shows system info, date, and time.
|
||||
setw -g status-right "#[fg=colour240]#(cat ~/.cache/tmux/system-info)#[fg=white] %a %d-%m-%y %H:%M "
|
||||
setw -g status-right-style fg=white,bg=colour233
|
||||
if -b '[ "`uname`" != "Darwin" ]' \
|
||||
'run "tmux setw -g status-right-length $((`nproc --all` + 48))"'
|
||||
|
||||
# Active window status style
|
||||
set-window-option -g window-status-current-format " #I: #W"
|
||||
set-window-option -g window-status-current-fg white
|
||||
set-window-option -g window-status-current-bg colour233
|
||||
setw -g window-status-current-format " #{window_index}: #{window_name}"
|
||||
setw -g window-status-current-style fg=white,bg=colour233
|
||||
|
||||
# Inactive window status style
|
||||
set-window-option -g window-status-format " #I: #W"
|
||||
set-window-option -g window-status-fg colour240
|
||||
set-window-option -g window-status-bg colour233
|
||||
setw -g window-status-format " #{window_index}: #{window_name}"
|
||||
setw -g window-status-style fg=colour240,bg=colour233
|
||||
|
||||
# Active pane border
|
||||
set-option -g pane-active-border-fg colour235
|
||||
set-option -g pane-active-border-bg colour235
|
||||
|
||||
# Inactive pane border
|
||||
set-option -g pane-border-fg colour233
|
||||
set-option -g pane-border-bg colour233
|
||||
# Pane border style
|
||||
set -g pane-border-style fg=colour233,bg=colour233
|
||||
set -g pane-active-border-style fg=colour235,bg=colour235
|
||||
|
||||
# Command line window list selection
|
||||
set-window-option -g mode-style fg=colour233,bg=colour30
|
||||
set-option -g message-style fg=colour233,bg=colour30
|
||||
set-window-option -g mode-style fg=white,bg=colour237
|
||||
set-option -g message-style fg=white,bg=colour237
|
||||
|
Loading…
x
Reference in New Issue
Block a user