Merge pull request #3 from kforney/master
Add autologin and custom tmux config.
BIN
debs/resilio-sync_2.6.0-1_amd64.deb
Normal file
33
filesystem/etc/gdm3/daemon.conf
Normal file
|
@ -0,0 +1,33 @@
|
|||
# GDM configuration storage - modified by kali-root-login
|
||||
#
|
||||
# See /usr/share/gdm/gdm.schemas for a list of available options.
|
||||
|
||||
[daemon]
|
||||
# Enabling automatic login
|
||||
AutomaticLoginEnable = true
|
||||
AutomaticLogin = root
|
||||
|
||||
# Enabling timed login
|
||||
# TimedLoginEnable = true
|
||||
# TimedLogin = user1
|
||||
# TimedLoginDelay = 10
|
||||
|
||||
# Reserving more VTs for test consoles (default is 7)
|
||||
# FirstVT = 9
|
||||
|
||||
[security]
|
||||
AllowRoot = true
|
||||
|
||||
[xdmcp]
|
||||
|
||||
[greeter]
|
||||
# Only include selected logins in the greeter
|
||||
# IncludeAll = false
|
||||
# Include = user1,user2
|
||||
|
||||
[chooser]
|
||||
|
||||
[debug]
|
||||
# More verbose logs
|
||||
# Additionally lets the X server dump core if it crashes
|
||||
# Enable = true
|
79
filesystem/root/.tmux.conf
Normal file
|
@ -0,0 +1,79 @@
|
|||
# List of plugins
|
||||
set -g @plugin 'tmux-plugins/tpm'
|
||||
set -g @plugin 'tmux-plugins/tmux-sensible'
|
||||
set -g @plugin 'tmux-plugins/tmux-cpu'
|
||||
set -g @plugin 'tmux-plugins/tmux-net-speed'
|
||||
#set -g @plugin 'tmux-plugins/tmux-battery'
|
||||
set -g @plugin 'tmux-plugins/tmux-prefix-highlight'
|
||||
|
||||
#If you don't want TMUX Resurrect, comment these three out...
|
||||
set -g @plugin 'tmux-plugins/tmux-resurrect'
|
||||
set -g @plugin 'tmux-plugins/tmux-continuum'
|
||||
set -g @continuum-restore 'on'
|
||||
|
||||
set -g mouse off
|
||||
|
||||
# panes
|
||||
set -g pane-border-fg black
|
||||
set -g pane-active-border-fg brightred
|
||||
|
||||
## Status bar design
|
||||
# status line
|
||||
# set -g status-utf8 on
|
||||
set -g status-justify left
|
||||
set -g status-interval 2
|
||||
|
||||
|
||||
# Info on left (I don't have a session display for now)
|
||||
set -g status-left ''
|
||||
|
||||
# loud or quiet?
|
||||
set-option -g visual-activity off
|
||||
set-option -g visual-bell off
|
||||
set-option -g visual-silence off
|
||||
set-window-option -g monitor-activity off
|
||||
set-option -g bell-action none
|
||||
|
||||
set -g default-terminal "screen-256color"
|
||||
|
||||
# The modes {
|
||||
setw -g clock-mode-colour colour135
|
||||
setw -g mode-attr bold
|
||||
|
||||
# }
|
||||
# The panes {
|
||||
|
||||
# }
|
||||
# The statusbar {
|
||||
|
||||
set -g @net_speed_interfaces "enp3s0f2 wlp2s0"
|
||||
set -g @download_speed_format "%10s"
|
||||
set -g @upload_speed_format "%10s"
|
||||
set -g @net_speed_format "D:%10s U:%10s"
|
||||
|
||||
set -g status-position bottom
|
||||
set -g status-attr dim
|
||||
set -g status-left '#{prefix_highlight}'
|
||||
set -g status-right 'CPU: #{cpu_percentage} | #[fg=colour233,bg=colour245,bold] #H | %H:%M:%S '
|
||||
set -g status-right-length 50
|
||||
set -g status-left-length 20
|
||||
|
||||
setw -g window-status-current-attr bold
|
||||
|
||||
|
||||
setw -g window-status-attr none
|
||||
setw -g window-status-format ' #I#[fg=colour237]:#[fg=colour250]#W#[fg=colour244]#F '
|
||||
setw -g window-status-bell-attr bold
|
||||
setw -g window-status-bell-fg colour255
|
||||
setw -g window-status-bell-bg colour1
|
||||
|
||||
# }
|
||||
# The messages {
|
||||
|
||||
set -g message-attr bold
|
||||
|
||||
# }
|
||||
|
||||
|
||||
# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
|
||||
run '~/.tmux/plugins/tpm/tpm'
|
41
filesystem/root/.tmux/plugins/tmux-battery/CHANGELOG.md
Normal file
|
@ -0,0 +1,41 @@
|
|||
# Changelog
|
||||
|
||||
### master
|
||||
- Added `#{battery_status_bg}` feature (@RyanFrantz)
|
||||
- Added multibattery output support for `upower` (@futuro)
|
||||
- Added Chromebook support (@forkjoseph)
|
||||
- Added battery graph, simplify interpolation (@levens)
|
||||
|
||||
### v1.2.0, 2016-09-24
|
||||
- show output for `#{battery_remain}` interpolation only if the battery is
|
||||
discharging
|
||||
- prevent displaying "(No" for `#{battery_remain}` interpolation (when battery
|
||||
status is "No estimate"
|
||||
- display all batteries that upower knows about (@JanAhrens)
|
||||
- acpi battery status (@cpb)
|
||||
- fix issue with status-right and status-left whitespace being cut out
|
||||
- fix issue with the `pmset -g batt` command output for macOS Sierra and further
|
||||
|
||||
### v1.1.0, 2015-03-14
|
||||
- change the default icon for "attached" battery state from :snail: to :warning:
|
||||
- add support for OS X "attached" battery state (@m1foley)
|
||||
- add `#{battery_remain}` feature (@asethwright)
|
||||
|
||||
### v1.0.0, 2014-08-31
|
||||
- update readme to reflect github organization change
|
||||
- bring in linux support
|
||||
- small refactoring
|
||||
- rename plugin to tmux-battery
|
||||
- add contributors to the readme
|
||||
|
||||
### v0.0.2, 2014-06-03
|
||||
- switch to tab indentation
|
||||
- do not automatically prepend battery status
|
||||
- change format interpolation strings to more Tmux-idiomatic
|
||||
`#{battery_percentage}` and `#{battery_icon}`
|
||||
- refactoring for simplicity
|
||||
- support interpolation in `status-left` option too
|
||||
- README update
|
||||
|
||||
### v0.0.1, 2014-06-03
|
||||
- tag version 0.0.1
|
19
filesystem/root/.tmux/plugins/tmux-battery/LICENSE.md
Normal file
|
@ -0,0 +1,19 @@
|
|||
Copyright (C) 2014 Bruno Sutic
|
||||
|
||||
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.
|
128
filesystem/root/.tmux/plugins/tmux-battery/README.md
Normal file
|
@ -0,0 +1,128 @@
|
|||
# Tmux battery status
|
||||
|
||||
Enables displaying battery percentage and status icon in tmux status-right.
|
||||
|
||||
## Installation
|
||||
### Intallation with [Tmux Plugin Manager](https://github.com/tmux-plugins/tpm) (recommended)
|
||||
|
||||
Add plugin to the list of TPM plugins in `.tmux.conf`:
|
||||
|
||||
set -g @plugin 'tmux-plugins/tmux-battery'
|
||||
|
||||
Hit `prefix + I` to fetch the plugin and source it.
|
||||
|
||||
If format strings are added to `status-right`, they should now be visible.
|
||||
|
||||
### Manual Installation
|
||||
|
||||
Clone the repo:
|
||||
|
||||
$ git clone https://github.com/tmux-plugins/tmux-battery ~/clone/path
|
||||
|
||||
Add this line to the bottom of `.tmux.conf`:
|
||||
|
||||
run-shell ~/clone/path/battery.tmux
|
||||
|
||||
Reload TMUX environment:
|
||||
|
||||
# type this in terminal
|
||||
$ tmux source-file ~/.tmux.conf
|
||||
|
||||
If format strings are added to `status-right`, they should now be visible.
|
||||
|
||||
## Usage
|
||||
|
||||
Add `#{battery_icon}`, `#{battery_percentage}` `#{battery_remain}`, or
|
||||
`#{battery_status_bg}` format strings to existing `status-right` tmux option.
|
||||
Example:
|
||||
|
||||
# in .tmux.conf
|
||||
set -g status-right '#{battery_status_bg} Batt: #{battery_icon} #{battery_percentage} #{battery_remain} | %a %h-%d %H:%M '
|
||||
|
||||
|
||||
## Examples
|
||||
Battery full (for OS X):<br/>
|
||||
![battery full](/screenshots/battery_full.png)
|
||||
|
||||
Battery discharging, custom discharge icon:<br/>
|
||||
![battery discharging, custom icon](/screenshots/battery_discharging.png)
|
||||
|
||||
Battery charging:<br/>
|
||||
![battery charging](/screenshots/battery_charging.png)
|
||||
|
||||
Battery remain:<br/>
|
||||
![battery remain](/screenshots/battery_remain.png)
|
||||
|
||||
Battery fully charged:<br/>
|
||||
![battery_status_bg_green](/screenshots/battery_status_bg_green.png)
|
||||
|
||||
Battery between 99% and 51% charged:<br/>
|
||||
![battery_status_bg_yellow](/screenshots/battery_status_bg_yellow.png)
|
||||
|
||||
Battery between 50% and 16% charged:<br/>
|
||||
![battery_status_bg_orange](/screenshots/battery_status_bg_orange.png)
|
||||
|
||||
Battery between 15% and dead:<br/>
|
||||
![battery_status_bg_red](/screenshots/battery_status_bg_red.png)
|
||||
|
||||
This is done by introducing 4 new format strings that can be added to
|
||||
`status-right` option:
|
||||
- `#{battery_icon}` - will display a battery status icon
|
||||
- `#{battery_percentage}` - will show battery percentage
|
||||
- `#{battery_remain}` - will show remaining time of battery charge
|
||||
- `#{battery_status_bg}` - will set the background color of the status bar based on the battery percentage
|
||||
- `#{battery_status_fg}` - will set the foreground color of the status bar based on the battery percentage
|
||||
- `#{battery_graph}` - will show battery percentage as a bar graph ▁▂▃▅▇
|
||||
|
||||
## Changing icons
|
||||
|
||||
By default, these icons are displayed:
|
||||
|
||||
- charged: ":battery:" ("❇ " when not on OS X)
|
||||
- charging: ":zap:"
|
||||
- discharging: (nothing shown)
|
||||
- attached but not charging: ":warning:"
|
||||
|
||||
You can change these defaults by adding the following to `.tmux.conf` (the
|
||||
following lines are not in the code block so that emojis can be seen):
|
||||
|
||||
- set -g @batt_charged_icon ":sunglasses:"
|
||||
- set -g @batt_charging_icon ":+1:"
|
||||
- set -g @batt_discharging_icon ":thumbsdown:"
|
||||
- set -g @batt_attached_icon ":neutral_face:"
|
||||
|
||||
Don't forget to reload tmux environment (`$ tmux source-file ~/.tmux.conf`)
|
||||
after you do this.
|
||||
|
||||
*Warning*: The battery icon change most likely will not be instant. When you un-plug the power cord, it will take some time (15 - 60 seconds) for the icon to change. This depends on the `status-interval` tmux option. Setting it to 15 seconds should be good enough.
|
||||
|
||||
### Tmux Plugins
|
||||
|
||||
This plugin is part of the [tmux-plugins](https://github.com/tmux-plugins) organisation. Checkout plugins as [resurrect](https://github.com/tmux-plugins/tmux-resurrect), [logging](https://github.com/tmux-plugins/tmux-logging), [online status](https://github.com/tmux-plugins/tmux-online-status), and many more over at the [tmux-plugins](https://github.com/tmux-plugins) organisation page.
|
||||
|
||||
You might want to follow [@brunosutic](https://twitter.com/brunosutic) on
|
||||
twitter if you want to hear about new tmux plugins or feature updates.
|
||||
|
||||
### Maintainer
|
||||
|
||||
- [Martin Beentjes](https://github.com/martinbeentjes)
|
||||
|
||||
### Contributors
|
||||
|
||||
- Adam Biggs
|
||||
- Aleksandar Djurdjic
|
||||
- Bruno Sutic
|
||||
- Caleb
|
||||
- Evan N-D
|
||||
- Jan Ahrens
|
||||
- Joey Geralnik
|
||||
- Joseph
|
||||
- Martin Beentjes
|
||||
- Mike Foley
|
||||
- Ryan Frantz
|
||||
- Seth Wright
|
||||
- Tom Levens
|
||||
|
||||
### License
|
||||
|
||||
[MIT](LICENSE.md)
|
49
filesystem/root/.tmux/plugins/tmux-battery/battery.tmux
Executable file
|
@ -0,0 +1,49 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
source "$CURRENT_DIR/scripts/helpers.sh"
|
||||
|
||||
battery_interpolation=(
|
||||
"\#{battery_percentage}"
|
||||
"\#{battery_remain}"
|
||||
"\#{battery_icon}"
|
||||
"\#{battery_status_bg}"
|
||||
"\#{battery_status_fg}"
|
||||
"\#{battery_graph}"
|
||||
)
|
||||
battery_commands=(
|
||||
"#($CURRENT_DIR/scripts/battery_percentage.sh)"
|
||||
"#($CURRENT_DIR/scripts/battery_remain.sh)"
|
||||
"#($CURRENT_DIR/scripts/battery_icon.sh)"
|
||||
"#($CURRENT_DIR/scripts/battery_status_bg.sh)"
|
||||
"#($CURRENT_DIR/scripts/battery_status_fg.sh)"
|
||||
"#($CURRENT_DIR/scripts/battery_graph.sh)"
|
||||
)
|
||||
|
||||
set_tmux_option() {
|
||||
local option="$1"
|
||||
local value="$2"
|
||||
tmux set-option -gq "$option" "$value"
|
||||
}
|
||||
|
||||
do_interpolation() {
|
||||
local all_interpolated="$1"
|
||||
for ((i=0; i<${#battery_commands[@]}; i++)); do
|
||||
all_interpolated=${all_interpolated/${battery_interpolation[$i]}/${battery_commands[$i]}}
|
||||
done
|
||||
echo "$all_interpolated"
|
||||
}
|
||||
|
||||
update_tmux_option() {
|
||||
local option="$1"
|
||||
local option_value="$(get_tmux_option "$option")"
|
||||
local new_option_value="$(do_interpolation "$option_value")"
|
||||
set_tmux_option "$option" "$new_option_value"
|
||||
}
|
||||
|
||||
main() {
|
||||
update_tmux_option "status-right"
|
||||
update_tmux_option "status-left"
|
||||
}
|
||||
main
|
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 5.7 KiB |
After Width: | Height: | Size: 5.8 KiB |
After Width: | Height: | Size: 5.7 KiB |
After Width: | Height: | Size: 6 KiB |
27
filesystem/root/.tmux/plugins/tmux-battery/scripts/battery_graph.sh
Executable file
|
@ -0,0 +1,27 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
source "$CURRENT_DIR/helpers.sh"
|
||||
|
||||
print_graph() {
|
||||
if [ -z "$1" ]; then
|
||||
echo ""
|
||||
elif [ "$1" -lt "20" ]; then
|
||||
echo "▁"
|
||||
elif [ "$1" -lt "40" ]; then
|
||||
echo "▂"
|
||||
elif [ "$1" -lt "60" ]; then
|
||||
echo "▃"
|
||||
elif [ "$1" -lt "80" ]; then
|
||||
echo "▅"
|
||||
else
|
||||
echo "▇"
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
local percentage=$($CURRENT_DIR/battery_percentage.sh)
|
||||
print_graph ${percentage%?}
|
||||
}
|
||||
main
|
53
filesystem/root/.tmux/plugins/tmux-battery/scripts/battery_icon.sh
Executable file
|
@ -0,0 +1,53 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
source "$CURRENT_DIR/helpers.sh"
|
||||
|
||||
# script global variables
|
||||
charged_icon=""
|
||||
charging_icon=""
|
||||
attached_icon=""
|
||||
discharging_icon=""
|
||||
|
||||
charged_default="❇ "
|
||||
charged_default_osx="🔋 "
|
||||
charging_default="⚡️ "
|
||||
attached_default="⚠️ "
|
||||
discharging_default=""
|
||||
|
||||
charged_default() {
|
||||
if is_osx; then
|
||||
echo "$charged_default_osx"
|
||||
else
|
||||
echo "$charged_default"
|
||||
fi
|
||||
}
|
||||
|
||||
# icons are set as script global variables
|
||||
get_icon_settings() {
|
||||
charged_icon=$(get_tmux_option "@batt_charged_icon" "$(charged_default)")
|
||||
charging_icon=$(get_tmux_option "@batt_charging_icon" "$charging_default")
|
||||
attached_icon=$(get_tmux_option "@batt_attached_icon" "$attached_default")
|
||||
discharging_icon=$(get_tmux_option "@batt_discharging_icon" "$discharging_default")
|
||||
}
|
||||
|
||||
print_icon() {
|
||||
local status=$1
|
||||
if [[ $status =~ (charged) ]]; then
|
||||
printf "$charged_icon"
|
||||
elif [[ $status =~ (^charging) ]]; then
|
||||
printf "$charging_icon"
|
||||
elif [[ $status =~ (^discharging) ]]; then
|
||||
printf "$discharging_icon"
|
||||
elif [[ $status =~ (attached) ]]; then
|
||||
printf "$attached_icon"
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
get_icon_settings
|
||||
local status=$(battery_status)
|
||||
print_icon "$status"
|
||||
}
|
||||
main
|
28
filesystem/root/.tmux/plugins/tmux-battery/scripts/battery_percentage.sh
Executable file
|
@ -0,0 +1,28 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
source "$CURRENT_DIR/helpers.sh"
|
||||
|
||||
print_battery_percentage() {
|
||||
# percentage displayed in the 2nd field of the 2nd row
|
||||
if command_exists "pmset"; then
|
||||
pmset -g batt | grep -o "[0-9]\{1,3\}%"
|
||||
elif command_exists "upower"; then
|
||||
local batteries=( $(upower -e | grep battery) )
|
||||
local energy
|
||||
local energy_full
|
||||
for battery in ${batteries[@]}; do
|
||||
energy=$(upower -i $battery | awk -v nrg="$energy" '/energy:/ {print nrg+$2}')
|
||||
energy_full=$(upower -i $battery | awk -v nrgfull="$energy_full" '/energy-full:/ {print nrgfull+$2}')
|
||||
done
|
||||
echo $energy $energy_full | awk '{printf("%d%%", ($1/$2)*100)}'
|
||||
elif command_exists "acpi"; then
|
||||
acpi -b | grep -Eo "[0-9]+%"
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
print_battery_percentage
|
||||
}
|
||||
main
|
49
filesystem/root/.tmux/plugins/tmux-battery/scripts/battery_remain.sh
Executable file
|
@ -0,0 +1,49 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
source "$CURRENT_DIR/helpers.sh"
|
||||
|
||||
battery_discharging() {
|
||||
local status="$(battery_status)"
|
||||
[[ $status =~ (discharging) ]]
|
||||
}
|
||||
|
||||
pmset_battery_remaining_time() {
|
||||
pmset -g batt | grep -o '[0-9]\{1,2\}:[0-9]\{1,2\}'
|
||||
}
|
||||
|
||||
print_battery_remain() {
|
||||
if command_exists "pmset"; then
|
||||
pmset_battery_remaining_time
|
||||
elif command_exists "upower"; then
|
||||
battery=$(upower -e | grep battery | head -1)
|
||||
if is_chrome; then
|
||||
if battery_discharging; then
|
||||
upower -i $battery | grep 'time to empty' | awk '{printf "- %s %s left", $4, $5}'
|
||||
else
|
||||
upower -i $battery | grep 'time to full' | awk '{printf "- %s %s till full", $4, $5}'
|
||||
fi
|
||||
else
|
||||
upower -i $battery | grep -E '(remain|time to empty)' | awk '{print $(NF-1)}'
|
||||
fi
|
||||
elif command_exists "acpi"; then
|
||||
acpi -b | grep -Eo "[0-9]+:[0-9]+:[0-9]+"
|
||||
fi
|
||||
}
|
||||
|
||||
print_battery_full() {
|
||||
if command_exists "upower"; then
|
||||
battery=$(upower -e | grep battery | head -1)
|
||||
upower -i $battery | grep 'time to full' | awk '{printf "- %s %s till full", $4, $5}'
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
if battery_discharging; then
|
||||
print_battery_remain
|
||||
else
|
||||
print_battery_full
|
||||
fi
|
||||
}
|
||||
main
|
42
filesystem/root/.tmux/plugins/tmux-battery/scripts/battery_status_bg.sh
Executable file
|
@ -0,0 +1,42 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
source "$CURRENT_DIR/helpers.sh"
|
||||
|
||||
color_full_charge_default="#[bg=green]"
|
||||
color_high_charge_default="#[bg=yellow]"
|
||||
color_medium_charge_default="#[bg=colour208]" # orange
|
||||
color_low_charge_default="#[bg=red]"
|
||||
|
||||
color_full_charge=""
|
||||
color_high_charge=""
|
||||
color_medium_charge=""
|
||||
color_low_charge=""
|
||||
|
||||
get_charge_color_settings() {
|
||||
color_full_charge=$(get_tmux_option "@batt_color_full_charge" "$color_full_charge_default")
|
||||
color_high_charge=$(get_tmux_option "@batt_color_high_charge" "$color_high_charge_default")
|
||||
color_medium_charge=$(get_tmux_option "@batt_color_medium_charge" "$color_medium_charge_default")
|
||||
color_low_charge=$(get_tmux_option "@batt_color_low_charge" "$color_low_charge_default")
|
||||
}
|
||||
|
||||
print_battery_status_bg() {
|
||||
# Call `battery_percentage.sh`.
|
||||
percentage=$($CURRENT_DIR/battery_percentage.sh | sed -e 's/%//')
|
||||
if [ $percentage -eq 100 ]; then
|
||||
printf $color_full_charge
|
||||
elif [ $percentage -le 99 -a $percentage -ge 51 ];then
|
||||
printf $color_high_charge
|
||||
elif [ $percentage -le 50 -a $percentage -ge 16 ];then
|
||||
printf $color_medium_charge
|
||||
else
|
||||
printf $color_low_charge
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
get_charge_color_settings
|
||||
print_battery_status_bg
|
||||
}
|
||||
main
|
42
filesystem/root/.tmux/plugins/tmux-battery/scripts/battery_status_fg.sh
Executable file
|
@ -0,0 +1,42 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
source "$CURRENT_DIR/helpers.sh"
|
||||
|
||||
color_full_charge_default="#[fg=green]"
|
||||
color_high_charge_default="#[fg=yellow]"
|
||||
color_medium_charge_default="#[fg=colour208]" # orange
|
||||
color_low_charge_default="#[fg=red]"
|
||||
|
||||
color_full_charge=""
|
||||
color_high_charge=""
|
||||
color_medium_charge=""
|
||||
color_low_charge=""
|
||||
|
||||
get_charge_color_settings() {
|
||||
color_full_charge=$(get_tmux_option "@batt_color_full_charge" "$color_full_charge_default")
|
||||
color_high_charge=$(get_tmux_option "@batt_color_high_charge" "$color_high_charge_default")
|
||||
color_medium_charge=$(get_tmux_option "@batt_color_medium_charge" "$color_medium_charge_default")
|
||||
color_low_charge=$(get_tmux_option "@batt_color_low_charge" "$color_low_charge_default")
|
||||
}
|
||||
|
||||
print_battery_status_fg() {
|
||||
# Call `battery_percentage.sh`.
|
||||
percentage=$($CURRENT_DIR/battery_percentage.sh | sed -e 's/%//')
|
||||
if [ $percentage -eq 100 ]; then
|
||||
printf $color_full_charge
|
||||
elif [ $percentage -le 99 -a $percentage -ge 51 ];then
|
||||
printf $color_high_charge
|
||||
elif [ $percentage -le 50 -a $percentage -ge 16 ];then
|
||||
printf $color_medium_charge
|
||||
else
|
||||
printf $color_low_charge
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
get_charge_color_settings
|
||||
print_battery_status_fg
|
||||
}
|
||||
main
|
|
@ -0,0 +1,41 @@
|
|||
get_tmux_option() {
|
||||
local option="$1"
|
||||
local default_value="$2"
|
||||
local option_value="$(tmux show-option -gqv "$option")"
|
||||
if [ -z "$option_value" ]; then
|
||||
echo "$default_value"
|
||||
else
|
||||
echo "$option_value"
|
||||
fi
|
||||
}
|
||||
|
||||
is_osx() {
|
||||
[ $(uname) == "Darwin" ]
|
||||
}
|
||||
|
||||
is_chrome() {
|
||||
chrome="/sys/class/chromeos/cros_ec"
|
||||
if [ -d "$chrome" ]; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
command_exists() {
|
||||
local command="$1"
|
||||
type "$command" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
battery_status() {
|
||||
if command_exists "pmset"; then
|
||||
pmset -g batt | awk -F '; *' 'NR==2 { print $2 }'
|
||||
elif command_exists "upower"; then
|
||||
# sort order: attached, charging, discharging
|
||||
for battery in $(upower -e | grep battery); do
|
||||
upower -i $battery | grep state | awk '{print $2}'
|
||||
done | sort | head -1
|
||||
elif command_exists "acpi"; then
|
||||
acpi -b | grep -oi 'discharging' | awk '{print tolower($0)}'
|
||||
fi
|
||||
}
|
42
filesystem/root/.tmux/plugins/tmux-continuum/CHANGELOG.md
Normal file
|
@ -0,0 +1,42 @@
|
|||
# Changelog
|
||||
|
||||
### master
|
||||
|
||||
### v3.1.0, 2015-03-14
|
||||
- properly quote scripts
|
||||
- bugfix: "auto restore" feature does not work on tmux `1.9a`
|
||||
- bugfix: do not count `tmux source-file .tmux.conf` as a tmux process (when
|
||||
checking if other tmux server is running). Previously, this caused
|
||||
interpolation command not to be inserted into `status-right` because `tmux
|
||||
source-file` was falsely detected as another tmux server.
|
||||
- add `#{continuum_status}` status line interpolation
|
||||
|
||||
### v3.0.0, 2015-02-20
|
||||
- rename the plugin from `tmux-resurrect-auto` to `tmux-continuum`
|
||||
|
||||
### v2.2.0, 2015-02-20
|
||||
- document tmux multi-server behavior in the readme
|
||||
- do not auto-restore tmux environment if another tmux server is already running
|
||||
(we don't want to duplicate stuff)
|
||||
- bugfixes for 'tmux auto start' OS X Terminal.app and iTerm scripts
|
||||
- prevent saving for the first 15 minutes only when plugin is sourced the first
|
||||
time (not on subsequent sources or tmux.conf reloads)
|
||||
- do not start auto-saving if there's another tmux server running (we don't want
|
||||
for save files from various tmux environments to override each other)
|
||||
|
||||
### v2.1.0, 2015-02-18
|
||||
- enable "tmux auto start" for OS X
|
||||
- enable customizing "tmux auto start" for OS X
|
||||
- fix errors when creating a launchd plist file for auto-start on OS X
|
||||
|
||||
### v2.0.0, 2015-02-15
|
||||
- enable automatic environment restore when tmux is started
|
||||
|
||||
### v1.0.0, 2015-02-12
|
||||
- first working version
|
||||
- run the save script in the background
|
||||
- do not start saving right after tmux is started
|
||||
- add a check for tmux version to the initializer script
|
||||
- when interval is set to '0' autosave is disabled
|
||||
- bugfix: helper files not loaded
|
||||
- update readme with the instructions how to disable auto saving
|
15
filesystem/root/.tmux/plugins/tmux-continuum/CONTRIBUTING.md
Normal file
|
@ -0,0 +1,15 @@
|
|||
### Contributing
|
||||
|
||||
Code contributions are welcome!
|
||||
|
||||
If you wanna contribute a bigger feature, please open a github issue so we can
|
||||
discuss it together first.
|
||||
|
||||
### Reporting a bug
|
||||
|
||||
If you find a bug please report it in the issues. When reporting a bug please
|
||||
attach:
|
||||
- a file symlinked to `~/.tmux/resurrect/last`.
|
||||
- your `.tmux.conf`
|
||||
- if you're getting an error paste it to a [gist](https://gist.github.com/) and
|
||||
link it in the issue
|
19
filesystem/root/.tmux/plugins/tmux-continuum/LICENSE.md
Normal file
|
@ -0,0 +1,19 @@
|
|||
Copyright (C) Bruno Sutic
|
||||
|
||||
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.
|
101
filesystem/root/.tmux/plugins/tmux-continuum/README.md
Normal file
|
@ -0,0 +1,101 @@
|
|||
# tmux-continuum
|
||||
|
||||
Features:
|
||||
|
||||
- continuous saving of tmux environment
|
||||
- automatic tmux start when computer/server is turned on
|
||||
- automatic restore when tmux is started
|
||||
|
||||
Together these features enable uninterrupted tmux usage. No matter the computer
|
||||
or server restarts, if the machine is on, tmux will be there how you left it off
|
||||
the last time it was used.
|
||||
|
||||
Tested and working on Linux, OSX and Cygwin.
|
||||
|
||||
#### Continuous saving
|
||||
|
||||
Tmux environment will be saved at the interval of 15 minutes. All the saving
|
||||
happens in the background without the impact to your workflow.
|
||||
|
||||
This action starts automatically when the plugin is installed.
|
||||
|
||||
#### Automatic tmux start
|
||||
|
||||
Tmux is automatically started after the computer/server is turned on.
|
||||
|
||||
See the [instructions](docs/automatic_start.md) how to enable this for your
|
||||
system.
|
||||
|
||||
#### Automatic restore
|
||||
|
||||
Last saved environment is automatically restored when tmux is started.
|
||||
|
||||
Put `set -g @continuum-restore 'on'` in `tmux.conf` to enable this.
|
||||
|
||||
Note: automatic restore happens **exclusively** on tmux server start. No other
|
||||
action (e.g. sourcing `tmux.conf`) triggers this.
|
||||
|
||||
#### Dependencies
|
||||
|
||||
`tmux 1.9` or higher, `bash`,
|
||||
[tmux-resurrect](https://github.com/tmux-plugins/tmux-resurrect) plugin.
|
||||
|
||||
### Installation with [Tmux Plugin Manager](https://github.com/tmux-plugins/tpm) (recommended)
|
||||
|
||||
Please make sure you have
|
||||
[tmux-resurrect](https://github.com/tmux-plugins/tmux-resurrect) installed.
|
||||
|
||||
Add plugin to the list of TPM plugins in `.tmux.conf`:
|
||||
|
||||
set -g @plugin 'tmux-plugins/tmux-resurrect'
|
||||
set -g @plugin 'tmux-plugins/tmux-continuum'
|
||||
|
||||
Hit `prefix + I` to fetch the plugin and source it. The plugin will
|
||||
automatically start "working" in the background, no action required.
|
||||
|
||||
### Manual Installation
|
||||
|
||||
Please make sure you have
|
||||
[tmux-resurrect](https://github.com/tmux-plugins/tmux-resurrect) installed.
|
||||
|
||||
Clone the repo:
|
||||
|
||||
$ git clone https://github.com/tmux-plugins/tmux-continuum ~/clone/path
|
||||
|
||||
Add this line to the bottom of `.tmux.conf`:
|
||||
|
||||
run-shell ~/clone/path/continuum.tmux
|
||||
|
||||
Reload TMUX environment with: `$ tmux source-file ~/.tmux.conf`
|
||||
|
||||
The plugin will automatically start "working" in the background, no action
|
||||
required.
|
||||
|
||||
### Docs
|
||||
|
||||
- [frequently asked questions](docs/faq.md)
|
||||
- [behavior when running multiple tmux servers](docs/multiple_tmux_servers.md) -
|
||||
this doc is safe to skip, but you might want to read it if you're using tmux
|
||||
with `-L` or `-S` flags
|
||||
- [automatically start tmux after the computer is turned on](docs/automatic_start.md)
|
||||
- [continuum status in tmux status line](docs/continuum_status.md)
|
||||
|
||||
### Other goodies
|
||||
|
||||
- [tmux-copycat](https://github.com/tmux-plugins/tmux-copycat) - a plugin for
|
||||
regex searches in tmux and fast match selection
|
||||
- [tmux-yank](https://github.com/tmux-plugins/tmux-yank) - enables copying
|
||||
highlighted text to system clipboard
|
||||
- [tmux-open](https://github.com/tmux-plugins/tmux-open) - a plugin for quickly
|
||||
opening highlighted file or a url
|
||||
|
||||
You might want to follow [@brunosutic](https://twitter.com/brunosutic) on
|
||||
twitter if you want to hear about new tmux plugins or feature updates.
|
||||
|
||||
### Reporting bugs and contributing
|
||||
|
||||
Both contributing and bug reports are welcome. Please check out
|
||||
[contributing guidelines](CONTRIBUTING.md).
|
||||
|
||||
### License
|
||||
[MIT](LICENSE.md)
|
92
filesystem/root/.tmux/plugins/tmux-continuum/continuum.tmux
Executable file
|
@ -0,0 +1,92 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -x
|
||||
|
||||
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
source "$CURRENT_DIR/scripts/helpers.sh"
|
||||
source "$CURRENT_DIR/scripts/variables.sh"
|
||||
source "$CURRENT_DIR/scripts/shared.sh"
|
||||
|
||||
save_command_interpolation="#($CURRENT_DIR/scripts/continuum_save.sh)"
|
||||
|
||||
supported_tmux_version_ok() {
|
||||
"$CURRENT_DIR/scripts/check_tmux_version.sh" "$SUPPORTED_VERSION"
|
||||
}
|
||||
|
||||
handle_tmux_automatic_start() {
|
||||
"$CURRENT_DIR/scripts/handle_tmux_automatic_start.sh"
|
||||
}
|
||||
|
||||
another_tmux_server_running() {
|
||||
if just_started_tmux_server; then
|
||||
another_tmux_server_running_on_startup
|
||||
else
|
||||
# script loaded after tmux server start can have multiple clients attached
|
||||
[ "$(number_tmux_processes_except_current_server)" -gt "$(number_current_server_client_processes)" ]
|
||||
fi
|
||||
}
|
||||
|
||||
delay_saving_environment_on_first_plugin_load() {
|
||||
if [ -z "$(get_tmux_option "$last_auto_save_option" "")" ]; then
|
||||
# last save option not set, this is first time plugin load
|
||||
set_last_save_timestamp
|
||||
fi
|
||||
}
|
||||
|
||||
add_resurrect_save_interpolation() {
|
||||
local status_right_value="$(get_tmux_option "status-right" "")"
|
||||
# check interpolation not already added
|
||||
if ! [[ "$status_right_value" == *"$save_command_interpolation"* ]]; then
|
||||
local new_value="${save_command_interpolation}${status_right_value}"
|
||||
set_tmux_option "status-right" "$new_value"
|
||||
fi
|
||||
}
|
||||
|
||||
number_of_sessions() {
|
||||
tmux list-sessions |
|
||||
wc -l |
|
||||
sed "s/ //g"
|
||||
}
|
||||
|
||||
# when tmux server is first started, number of sessions is 0
|
||||
just_started_tmux_server() {
|
||||
[ "$(number_of_sessions)" -eq 0 ]
|
||||
}
|
||||
|
||||
start_auto_restore_in_background() {
|
||||
"$CURRENT_DIR/scripts/continuum_restore.sh" &
|
||||
}
|
||||
|
||||
update_tmux_option() {
|
||||
local option="$1"
|
||||
local option_value="$(get_tmux_option "$option")"
|
||||
# replace interpolation string with a script to execute
|
||||
local new_option_value="${option_value/$status_interpolation_string/$status_script}"
|
||||
set_tmux_option "$option" "$new_option_value"
|
||||
}
|
||||
|
||||
main() {
|
||||
if supported_tmux_version_ok; then
|
||||
handle_tmux_automatic_start
|
||||
|
||||
# Advanced edge case handling: start auto-saving only if this is the
|
||||
# only tmux server. We don't want saved files from more environments to
|
||||
# overwrite each other.
|
||||
if ! another_tmux_server_running; then
|
||||
# give user a chance to restore previously saved session
|
||||
delay_saving_environment_on_first_plugin_load
|
||||
add_resurrect_save_interpolation
|
||||
fi
|
||||
|
||||
if just_started_tmux_server; then
|
||||
start_auto_restore_in_background
|
||||
fi
|
||||
|
||||
# Put "#{continuum_status}" interpolation in status-right or
|
||||
# status-left tmux option to get current tmux continuum status.
|
||||
update_tmux_option "status-right"
|
||||
update_tmux_option "status-left"
|
||||
fi
|
||||
}
|
||||
main
|
|
@ -0,0 +1,35 @@
|
|||
# Automatic Tmux start
|
||||
|
||||
Tmux is automatically started after the computer/server is turned on.
|
||||
|
||||
### OS X
|
||||
|
||||
To enable this feature:
|
||||
- put `set -g @continuum-boot 'on'` in `tmux.conf`
|
||||
- reload tmux config with this shell command: `$ tmux source-file ~/.tmux.conf`
|
||||
|
||||
Next time the computer is started:
|
||||
- `Terminal.app` window will open and resize to maximum size
|
||||
- `tmux` command will be executed in the terminal window
|
||||
- if "auto restore" feature is enabled, tmux will start restoring previous env
|
||||
|
||||
Config options:
|
||||
- `set -g @continuum-boot-options 'fullscreen'` - terminal window
|
||||
will go fullscreen
|
||||
- `set -g @continuum-boot-options 'iterm'` - start `iTerm` instead
|
||||
of `Terminal.app`
|
||||
- `set -g @continuum-boot-options 'iterm,fullscreen'` - start `iTerm`
|
||||
in fullscreen
|
||||
|
||||
### Linux
|
||||
|
||||
Help with this would be greatly appreciated. Please get in touch.
|
||||
|
||||
#### Systemd
|
||||
|
||||
##### this will only start the tmux server, it will *not* start any terminal emulator
|
||||
|
||||
To enable automatic start with systemd:
|
||||
- Put `set -g @continuum-boot 'on'` in tmux.conf
|
||||
- reload tmux config with this shell command: `$ tmux source-file ~/.tmux.conf`
|
||||
- see [systemd](./systemd_details.md) for more details about how this is implemented
|
|
@ -0,0 +1,17 @@
|
|||
## Continuum status in tmux status line
|
||||
|
||||
There is an option to display current status of tmux continuum in tmux status
|
||||
line. This is done via `#{continuum_status}` interpolation and it works with
|
||||
both `status-right` and `status-left` tmux native options.
|
||||
|
||||
Example usage:
|
||||
|
||||
set -g status-right 'Continuum status: #{continuum_status}'
|
||||
|
||||
When running, `#{continuum_status}` will show continuum save interval:
|
||||
|
||||
Continuum status: 15
|
||||
|
||||
or if continuous saving is disabled:
|
||||
|
||||
Continuum status: off
|
57
filesystem/root/.tmux/plugins/tmux-continuum/docs/faq.md
Normal file
|
@ -0,0 +1,57 @@
|
|||
### FAQ
|
||||
|
||||
> Will a previous save be overwritten immediately after I start tmux?
|
||||
|
||||
No, first automatic save starts 15 minutes after tmux is started. If automatic
|
||||
restore is not enabled, that gives you enough time to manually restore from a
|
||||
previous save.
|
||||
|
||||
> I want to make a restore to a previous point in time, but it seems that save
|
||||
is now overwritten?
|
||||
|
||||
None of the previous saves are deleted (unless you explicitly do that). All save
|
||||
files are kept in `~/.tmux/resurrect/` directory.<br/>
|
||||
Here are the steps to restore to a previous point in time:
|
||||
|
||||
- make sure you start this with a "fresh" tmux instance
|
||||
- `$ cd ~/.tmux/resurrect/`
|
||||
- locate the save file you'd like to use for restore (file names have a timestamp)
|
||||
- symlink the `last` file to the desired save file: `$ ln -sf <file_name> last`
|
||||
- do a restore with `tmux-resurrect` key: `prefix + Ctrl-r`
|
||||
|
||||
You should now be restored to the time when `<file_name>` save happened.
|
||||
|
||||
> Will this plugin fill my hard disk?
|
||||
|
||||
Most likely no. A regular save file is in the range of 5Kb. That said, it
|
||||
would be good to clean out old save files from `~/.tmux/resurrect/` dir from
|
||||
time to time.
|
||||
|
||||
> How do I change the save interval to i.e. 1 hour?
|
||||
|
||||
The interval is always measured in minutes. So setting the interval to `60`
|
||||
(minutes) will do the trick. Put this in `.tmux.conf`:
|
||||
|
||||
set -g @continuum-save-interval '60'
|
||||
|
||||
and then source `tmux.conf` by executing this command in the shell
|
||||
`$ tmux source-file ~/.tmux.conf`.
|
||||
|
||||
> How do I stop automatic saving?
|
||||
|
||||
Just set the save interval to `0`. Put this in `.tmux.conf`
|
||||
|
||||
set -g @continuum-save-interval '0'
|
||||
|
||||
and then source `tmux.conf` by executing this command in the shell
|
||||
`$ tmux source-file ~/.tmux.conf`.
|
||||
|
||||
> I had automatic restore turned on, how do I disable it now?
|
||||
|
||||
Just remove `set -g @continuum-restore 'on'` from `tmux.conf`.
|
||||
|
||||
To be absolutely sure automatic restore doesn't happen, create a
|
||||
`tmux_no_auto_restore` file in your home directory (command:
|
||||
`$ touch ~/tmux_no_auto_restore`). Automatic restore won't happen if this file
|
||||
exists.
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
### Behavior when running multiple tmux servers
|
||||
|
||||
(This is safe to skip if you're always running a single tmux server.)
|
||||
|
||||
If you're an advanced tmux user, you might be running multiple tmux servers at
|
||||
the same time. Maybe you start the first tmux server with `$ tmux` and then
|
||||
later another one with e.g. `$ tmux -S/tmp/foo`.
|
||||
|
||||
You probably don't want to "auto restore" the same environment in the second
|
||||
tmux that uses `/tmp/foo` socket. You also probably don't want two tmux
|
||||
environments both having "auto save" feature on (think about overwrites).
|
||||
|
||||
This plugin handles multi-server scenario by giving precedence to the tmux
|
||||
server that was first started.
|
||||
|
||||
In the above example, the server started with `$ tmux` will do "auto
|
||||
restore" (if enabled) and will start "auto saving".
|
||||
"Auto restore" or "auto saving" **will not** happen for the second server that
|
||||
was started later with the `$ tmux -S/tmp/foo` command. The plugin will
|
||||
detect the presence of another server (`$ tmux`) and give it precedence.
|
|
@ -0,0 +1,13 @@
|
|||
# Systemd automatic start for tmux
|
||||
|
||||
The first time tmux starts when `@continuum-boot` is set to 'on' tmux-continuum will generate a user level systemd unit file which it will save to `${HOME}/.config/systemd/user/tmux.service` and enable it. From then on when that user logs in, either through a GUI session or on the console or via ssh, Systemd will start the tmux server.
|
||||
|
||||
The command used to start the tmux server is determined via the `@continuum-systemd-start-cmd` option that can be set in .tmux.conf. (Remember to reload your configuration with `tmux source ~/.tmux.conf` afterwards.
|
||||
|
||||
The default command to use is `new-session -d`. If you want more control over what sessions get started then you should set up your sessions in tmux.conf and set `@continuum-systemd-start-cmd = 'start-server'`. As this will be executed as part of systemd's ExecStart statement there will be no shell parsing. See [Systemd manual](http://www.freedesktop.org/software/systemd/man/systemd.service.html#Command%20lines) for more details.
|
||||
|
||||
To control the tmux service you can use all the standard `systemctl` commands using the `--user` argument. eg to see if the tmux server has started:
|
||||
|
||||
systemctl --user status tmux.service
|
||||
|
||||
|
33
filesystem/root/.tmux/plugins/tmux-continuum/scripts/check_tmux_version.sh
Executable file
|
@ -0,0 +1,33 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
VERSION="$1"
|
||||
UNSUPPORTED_MSG="$2"
|
||||
|
||||
# this is used to get "clean" integer version number. Examples:
|
||||
# `tmux 1.9` => `19`
|
||||
# `1.9a` => `19`
|
||||
get_digits_from_string() {
|
||||
local string="$1"
|
||||
local only_digits="$(echo "$string" | tr -dC '[:digit:]')"
|
||||
echo "$only_digits"
|
||||
}
|
||||
|
||||
tmux_version_int() {
|
||||
local tmux_version_string=$(tmux -V)
|
||||
echo "$(get_digits_from_string "$tmux_version_string")"
|
||||
}
|
||||
|
||||
exit_if_unsupported_version() {
|
||||
local current_version="$1"
|
||||
local supported_version="$2"
|
||||
if [ "$current_version" -lt "$supported_version" ]; then
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
local supported_version_int="$(get_digits_from_string "$VERSION")"
|
||||
local current_version_int="$(tmux_version_int)"
|
||||
exit_if_unsupported_version "$current_version_int" "$supported_version_int"
|
||||
}
|
||||
main
|
29
filesystem/root/.tmux/plugins/tmux-continuum/scripts/continuum_restore.sh
Executable file
|
@ -0,0 +1,29 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
source "$CURRENT_DIR/helpers.sh"
|
||||
source "$CURRENT_DIR/variables.sh"
|
||||
|
||||
auto_restore_enabled() {
|
||||
local auto_restore_value="$(get_tmux_option "$auto_restore_option" "$auto_restore_default")"
|
||||
[ "$auto_restore_value" == "on" ] && [ ! -f "$auto_restore_halt_file" ]
|
||||
}
|
||||
|
||||
fetch_and_run_tmux_resurrect_restore_script() {
|
||||
# give tmux some time to start and source all the plugins
|
||||
sleep 1
|
||||
local resurrect_restore_script_path="$(get_tmux_option "$resurrect_restore_path_option" "")"
|
||||
if [ -n "$resurrect_restore_script_path" ]; then
|
||||
"$resurrect_restore_script_path"
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
# Advanced edge case handling: auto restore only if this is the only tmux
|
||||
# server. If another tmux server exists, it is assumed auto-restore is not wanted.
|
||||
if auto_restore_enabled && ! another_tmux_server_running_on_startup; then
|
||||
fetch_and_run_tmux_resurrect_restore_script
|
||||
fi
|
||||
}
|
||||
main
|
42
filesystem/root/.tmux/plugins/tmux-continuum/scripts/continuum_save.sh
Executable file
|
@ -0,0 +1,42 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
source "$CURRENT_DIR/helpers.sh"
|
||||
source "$CURRENT_DIR/variables.sh"
|
||||
source "$CURRENT_DIR/shared.sh"
|
||||
|
||||
supported_tmux_version_ok() {
|
||||
"$CURRENT_DIR/check_tmux_version.sh" "$SUPPORTED_VERSION"
|
||||
}
|
||||
|
||||
get_interval() {
|
||||
get_tmux_option "$auto_save_interval_option" "$auto_save_interval_default"
|
||||
}
|
||||
|
||||
auto_save_not_disabled() {
|
||||
[ "$(get_interval)" -gt 0 ]
|
||||
}
|
||||
|
||||
enough_time_since_last_run_passed() {
|
||||
local last_saved_timestamp="$(get_tmux_option "$last_auto_save_option" "0")"
|
||||
local interval_minutes="$(get_interval)"
|
||||
local interval_seconds="$((interval_minutes * 60))"
|
||||
local next_run="$((last_saved_timestamp + $interval_seconds))"
|
||||
[ "$(current_timestamp)" -ge "$next_run" ]
|
||||
}
|
||||
|
||||
fetch_and_run_tmux_resurrect_save_script() {
|
||||
local resurrect_save_script_path="$(get_tmux_option "$resurrect_save_path_option" "")"
|
||||
if [ -n "$resurrect_save_script_path" ]; then
|
||||
"$resurrect_save_script_path" "quiet" >/dev/null 2>&1 &
|
||||
set_last_save_timestamp
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
if supported_tmux_version_ok && auto_save_not_disabled && enough_time_since_last_run_passed; then
|
||||
fetch_and_run_tmux_resurrect_save_script
|
||||
fi
|
||||
}
|
||||
main
|
25
filesystem/root/.tmux/plugins/tmux-continuum/scripts/continuum_status.sh
Executable file
|
@ -0,0 +1,25 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
source "$CURRENT_DIR/helpers.sh"
|
||||
source "$CURRENT_DIR/variables.sh"
|
||||
|
||||
print_status() {
|
||||
local save_int="$(get_tmux_option "$auto_save_interval_option")"
|
||||
local status=""
|
||||
local style_wrap
|
||||
if [ $save_int -gt 0 ]; then
|
||||
style_wrap="$(get_tmux_option "$status_on_style_wrap_option" "")"
|
||||
status="$save_int"
|
||||
else
|
||||
style_wrap="$(get_tmux_option "$status_off_style_wrap_option" "")"
|
||||
status="off"
|
||||
fi
|
||||
|
||||
if [ -n "$style_wrap" ]; then
|
||||
status="${style_wrap/$status_wrap_string/$status}"
|
||||
fi
|
||||
echo "$status"
|
||||
}
|
||||
print_status
|
|
@ -0,0 +1,36 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
source "$CURRENT_DIR/helpers.sh"
|
||||
source "$CURRENT_DIR/variables.sh"
|
||||
|
||||
is_tmux_automatic_start_enabled() {
|
||||
local auto_start_value="$(get_tmux_option "$auto_start_option" "$auto_start_default")"
|
||||
[ "$auto_start_value" == "on" ]
|
||||
}
|
||||
|
||||
is_osx() {
|
||||
[ $(uname) == "Darwin" ]
|
||||
}
|
||||
|
||||
is_systemd() {
|
||||
[ $(ps -o comm= -p1) == 'systemd' ]
|
||||
}
|
||||
|
||||
main() {
|
||||
if is_tmux_automatic_start_enabled; then
|
||||
if is_osx; then
|
||||
"$CURRENT_DIR/handle_tmux_automatic_start/osx_enable.sh"
|
||||
elif is_systemd; then
|
||||
"$CURRENT_DIR/handle_tmux_automatic_start/systemd_enable.sh"
|
||||
fi
|
||||
else
|
||||
if is_osx; then
|
||||
"$CURRENT_DIR/handle_tmux_automatic_start/osx_disable.sh"
|
||||
elif is_systemd; then
|
||||
"$CURRENT_DIR/handle_tmux_automatic_start/systemd_disable.sh"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
main
|
|
@ -0,0 +1 @@
|
|||
docs/automatic_start.md
|
|
@ -0,0 +1,10 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
source "$CURRENT_DIR/../variables.sh"
|
||||
|
||||
main() {
|
||||
rm "$osx_auto_start_file_path" > /dev/null 2>&1
|
||||
}
|
||||
main
|
|
@ -0,0 +1,66 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
source "$CURRENT_DIR/../helpers.sh"
|
||||
source "$CURRENT_DIR/../variables.sh"
|
||||
|
||||
template() {
|
||||
local tmux_start_script="$1"
|
||||
local is_fullscreen="$2"
|
||||
|
||||
local fullscreen_tag=""
|
||||
if [ "$is_fullscreen" == "true" ]; then
|
||||
# newline and spacing so tag is aligned with other tags in template
|
||||
fullscreen_tag=$'\n <string>fullscreen</string>'
|
||||
fi
|
||||
|
||||
local content
|
||||
read -r -d '' content <<-EOF
|
||||
<?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>${osx_auto_start_file_name}</string>
|
||||
<key>ProgramArguments</key>
|
||||
<array>
|
||||
<string>${tmux_start_script}</string>$fullscreen_tag
|
||||
</array>
|
||||
<key>RunAtLoad</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
EOF
|
||||
echo "$content"
|
||||
}
|
||||
|
||||
get_iterm_or_teminal_option_value() {
|
||||
local options="$1"
|
||||
if [[ "$options" =~ "iterm" ]]; then
|
||||
echo "iterm"
|
||||
else
|
||||
# Terminal.app is the default console app
|
||||
echo "terminal"
|
||||
fi
|
||||
}
|
||||
|
||||
get_fullscreen_option_value() {
|
||||
local options="$1"
|
||||
if [[ "$options" =~ "fullscreen" ]]; then
|
||||
echo "true"
|
||||
else
|
||||
echo "false"
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
local options="$(get_tmux_option "$auto_start_config_option" "$auto_start_config_default")"
|
||||
local iterm_or_terminal_value="$(get_iterm_or_teminal_option_value "$options")"
|
||||
local fullscreen_option_value="$(get_fullscreen_option_value "$options")"
|
||||
local tmux_start_script_path="${CURRENT_DIR}/osx_${iterm_or_terminal_value}_start_tmux.sh"
|
||||
|
||||
local launchd_plist_file_content="$(template "$tmux_start_script_path" "$fullscreen_option_value")"
|
||||
echo "$launchd_plist_file_content" > "$osx_auto_start_file_path"
|
||||
}
|
||||
main
|
|
@ -0,0 +1,66 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# for "true full screen" call the script with "fullscreen" as the first argument
|
||||
TRUE_FULL_SCREEN="$1"
|
||||
|
||||
start_iterm_and_run_tmux() {
|
||||
osascript <<-EOF
|
||||
tell application "iTerm"
|
||||
activate
|
||||
|
||||
# open iterm window
|
||||
try
|
||||
set _session to current session of current terminal
|
||||
on error
|
||||
set _term to (make new terminal)
|
||||
tell _term
|
||||
launch session "Tmux"
|
||||
set _session to current session
|
||||
end tell
|
||||
end try
|
||||
|
||||
# start tmux
|
||||
tell _session
|
||||
write text "tmux"
|
||||
end tell
|
||||
end tell
|
||||
EOF
|
||||
}
|
||||
|
||||
resize_window_to_full_screen() {
|
||||
osascript <<-EOF
|
||||
tell application "iTerm"
|
||||
set winID to id of window 1
|
||||
tell i term application "Finder"
|
||||
set desktopSize to bounds of window of desktop
|
||||
end tell
|
||||
set bounds of window id winID to desktopSize
|
||||
end tell
|
||||
EOF
|
||||
}
|
||||
|
||||
resize_to_true_full_screen() {
|
||||
osascript <<-EOF
|
||||
tell application "iTerm"
|
||||
# wait for iTerm to start
|
||||
delay 1
|
||||
activate
|
||||
# short wait for iTerm to gain focus
|
||||
delay 0.1
|
||||
# Command + Enter for fullscreen
|
||||
tell i term application "System Events"
|
||||
key code 36 using {command down}
|
||||
end tell
|
||||
end tell
|
||||
EOF
|
||||
}
|
||||
|
||||
main() {
|
||||
start_iterm_and_run_tmux
|
||||
if [ "$TRUE_FULL_SCREEN" == "fullscreen" ]; then
|
||||
resize_to_true_full_screen
|
||||
else
|
||||
resize_window_to_full_screen
|
||||
fi
|
||||
}
|
||||
main
|
|
@ -0,0 +1,52 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# for "true full screen" call the script with "fullscreen" as the first argument
|
||||
TRUE_FULL_SCREEN="$1"
|
||||
|
||||
start_terminal_and_run_tmux() {
|
||||
osascript <<-EOF
|
||||
tell application "Terminal"
|
||||
if not (exists window 1) then reopen
|
||||
activate
|
||||
set winID to id of window 1
|
||||
do script "tmux" in window id winID
|
||||
end tell
|
||||
EOF
|
||||
}
|
||||
|
||||
resize_window_to_full_screen() {
|
||||
osascript <<-EOF
|
||||
tell application "Terminal"
|
||||
set winID to id of window 1
|
||||
tell application "Finder"
|
||||
set desktopSize to bounds of window of desktop
|
||||
end tell
|
||||
set bounds of window id winID to desktopSize
|
||||
end tell
|
||||
EOF
|
||||
}
|
||||
|
||||
resize_to_true_full_screen() {
|
||||
osascript <<-EOF
|
||||
tell application "Terminal"
|
||||
# waiting for Terminal.app to start
|
||||
delay 1
|
||||
activate
|
||||
# short wait for Terminal to gain focus
|
||||
delay 0.1
|
||||
tell application "System Events"
|
||||
keystroke "f" using {control down, command down}
|
||||
end tell
|
||||
end tell
|
||||
EOF
|
||||
}
|
||||
|
||||
main() {
|
||||
start_terminal_and_run_tmux
|
||||
if [ "$TRUE_FULL_SCREEN" == "fullscreen" ]; then
|
||||
resize_to_true_full_screen
|
||||
else
|
||||
resize_window_to_full_screen
|
||||
fi
|
||||
}
|
||||
main
|
|
@ -0,0 +1,10 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
source "$CURRENT_DIR/../variables.sh"
|
||||
|
||||
main() {
|
||||
systemctl --user disable ${systemd_service_name}
|
||||
}
|
||||
main
|
|
@ -0,0 +1,55 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
CURRENT_DIR="$( dirname ${BASH_SOURCE[0]} )"
|
||||
|
||||
source "$CURRENT_DIR/../helpers.sh"
|
||||
source "$CURRENT_DIR/../variables.sh"
|
||||
|
||||
template() {
|
||||
local tmux_start_script="$1"
|
||||
shift
|
||||
local options="$@"
|
||||
local content=""
|
||||
|
||||
read -r -d '' content <<-EOF
|
||||
[Unit]
|
||||
Description=tmux default session (detached)
|
||||
Documentation=man:tmux(1)
|
||||
|
||||
[Service]
|
||||
Type=forking
|
||||
Environment=DISPLAY=:0
|
||||
ExecStart=/usr/bin/tmux ${systemd_tmux_server_start_cmd}
|
||||
|
||||
ExecStop=${HOME}/.tmux/plugins/tmux-resurrect/scripts/save.sh
|
||||
ExecStop=/usr/bin/tmux kill-server
|
||||
KillMode=none
|
||||
|
||||
RestartSec=2
|
||||
|
||||
[Install]
|
||||
WantedBy=default.target
|
||||
EOF
|
||||
|
||||
echo "$content"
|
||||
}
|
||||
|
||||
systemd_tmux_is_enabled() {
|
||||
systemctl --user is_enabled $(basename "${systemd_unit_file_path}") >/dev/null 2>&1
|
||||
}
|
||||
|
||||
enable_tmux_unit_on_boot() {
|
||||
if ! systemd_tmux_is_enabled; then
|
||||
systemctl --user enable ${systemd_service_name}
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
local options="$(get_tmux_option "$auto_start_config_option" "${auto_start_config_default}")"
|
||||
local systemd_tmux_server_start_cmd="$(get_tmux_option "${systemd_tmux_server_start_cmd_option}" "${systemd_tmux_server_start_cmd_default}" )"
|
||||
local tmux_start_script_path="${CURRENT_DIR}/linux_start_tmux.sh"
|
||||
local systemd_unit_file=$(template "${tmux_start_script_path}" "${options}")
|
||||
echo "$systemd_unit_file" > "${systemd_unit_file_path}"
|
||||
enable_tmux_unit_on_boot
|
||||
}
|
||||
main
|
|
@ -0,0 +1,48 @@
|
|||
get_tmux_option() {
|
||||
local option="$1"
|
||||
local default_value="$2"
|
||||
local option_value=$(tmux show-option -gqv "$option")
|
||||
if [ -z "$option_value" ]; then
|
||||
echo "$default_value"
|
||||
else
|
||||
echo "$option_value"
|
||||
fi
|
||||
}
|
||||
|
||||
set_tmux_option() {
|
||||
local option="$1"
|
||||
local value="$2"
|
||||
tmux set-option -gq "$option" "$value"
|
||||
}
|
||||
|
||||
# multiple tmux server detection helpers
|
||||
|
||||
current_tmux_server_pid() {
|
||||
echo "$TMUX" |
|
||||
cut -f2 -d","
|
||||
}
|
||||
|
||||
all_tmux_processes() {
|
||||
# ignores `tmux source-file .tmux.conf` command used to reload tmux.conf
|
||||
ps -Ao "command pid" |
|
||||
\grep "^tmux" |
|
||||
\grep -v "^tmux source"
|
||||
}
|
||||
|
||||
number_tmux_processes_except_current_server() {
|
||||
all_tmux_processes |
|
||||
\grep -v " $(current_tmux_server_pid)$" |
|
||||
wc -l |
|
||||
sed "s/ //g"
|
||||
}
|
||||
|
||||
number_current_server_client_processes() {
|
||||
tmux list-clients |
|
||||
wc -l |
|
||||
sed "s/ //g"
|
||||
}
|
||||
|
||||
another_tmux_server_running_on_startup() {
|
||||
# there are 2 tmux processes (current tmux server + 1) on tmux startup
|
||||
[ "$(number_tmux_processes_except_current_server)" -gt 1 ]
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
current_timestamp() {
|
||||
echo "$(date +%s)"
|
||||
}
|
||||
|
||||
set_last_save_timestamp() {
|
||||
set_tmux_option "$last_auto_save_option" "$(current_timestamp)"
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
SUPPORTED_VERSION="1.9"
|
||||
|
||||
# these tmux options contain paths to tmux resurrect save and restore scripts
|
||||
resurrect_save_path_option="@resurrect-save-script-path"
|
||||
resurrect_restore_path_option="@resurrect-restore-script-path"
|
||||
|
||||
auto_save_interval_option="@continuum-save-interval"
|
||||
auto_save_interval_default="15"
|
||||
|
||||
# time when the tmux environment was last saved (unix timestamp)
|
||||
last_auto_save_option="@continuum-save-last-timestamp"
|
||||
|
||||
auto_restore_option="@continuum-restore"
|
||||
auto_restore_default="off"
|
||||
|
||||
auto_restore_halt_file="${HOME}/tmux_no_auto_restore"
|
||||
|
||||
# tmux auto start options
|
||||
auto_start_option="@continuum-boot"
|
||||
auto_start_default="off"
|
||||
|
||||
# comma separated list of additional options for tmux auto start
|
||||
auto_start_config_option="@continuum-boot-options"
|
||||
auto_start_config_default=""
|
||||
|
||||
osx_auto_start_file_name="Tmux.Start.plist"
|
||||
osx_auto_start_file_path="${HOME}/Library/LaunchAgents/${osx_auto_start_file_name}"
|
||||
|
||||
status_interpolation_string="\#{continuum_status}"
|
||||
status_script="#($CURRENT_DIR/scripts/continuum_status.sh)"
|
||||
# below options set style/color for #{continuum_status} interpolation
|
||||
status_on_style_wrap_option="@continuum-status-on-wrap-style" # example value: "#[fg=green]#{value}#[fg=white]"
|
||||
status_off_style_wrap_option="@continuum-status-off-wrap-style" # example value: "#[fg=yellow,bold]#{value}#[fg=white,nobold]"
|
||||
status_wrap_string="\#{value}"
|
||||
|
||||
systemd_service_name="tmux.service"
|
||||
systemd_unit_file_path="$HOME/.config/systemd/user/${systemd_service_name}"
|
||||
|
||||
systemd_tmux_server_start_cmd_option="@continuum-systemd-start-cmd"
|
||||
systemd_tmux_server_start_cmd_default="new-session -d"
|
22
filesystem/root/.tmux/plugins/tmux-cpu/CHANGELOG.md
Normal file
|
@ -0,0 +1,22 @@
|
|||
# Changelog
|
||||
|
||||
### master
|
||||
|
||||
### v1.0.0, 2014-08-31
|
||||
- update readme to reflect github organization change
|
||||
- bring in linux support
|
||||
- small refactoring
|
||||
- rename plugin to tmux-battery
|
||||
- add contributors to the readme
|
||||
|
||||
### v0.0.2, 2014-06-03
|
||||
- switch to tab indentation
|
||||
- do not automatically prepend battery status
|
||||
- change format interpolation strings to more Tmux-idiomatic
|
||||
`#{battery_percentage}` and `#{battery_icon}`
|
||||
- refactoring for simplicity
|
||||
- support interpolation in `status-left` option too
|
||||
- README update
|
||||
|
||||
### v0.0.1, 2014-06-03
|
||||
- tag version 0.0.1
|
22
filesystem/root/.tmux/plugins/tmux-cpu/LICENSE
Normal file
|
@ -0,0 +1,22 @@
|
|||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2014 ctjhoa
|
||||
|
||||
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.
|
||||
|
85
filesystem/root/.tmux/plugins/tmux-cpu/README.md
Normal file
|
@ -0,0 +1,85 @@
|
|||
# Tmux cpu status
|
||||
|
||||
Enables displaying cpu percentage and status icon in Tmux status-right.
|
||||
|
||||
CPU:<br/>
|
||||
`CPU: ❏ 8.7%`
|
||||
|
||||
This is done by introducing 2 new format strings that can be added to
|
||||
`status-right` option:
|
||||
- `#{cpu_icon}` - will display a cpu status icon
|
||||
- `#{cpu_percentage}` - will show cpu percentage
|
||||
|
||||
### Usage
|
||||
|
||||
Add `#{cpu_icon}` or `#{cpu_percentage}` format strings to existing
|
||||
`status-right` Tmux option. Example:
|
||||
|
||||
# in .tmux.conf
|
||||
set -g status-right "CPU: #{cpu_icon} #{cpu_percentage} | %a %h-%d %H:%M "
|
||||
|
||||
### Optional requirement (Linux, BSD, OSX)
|
||||
|
||||
`iostat` or `sar` are the best way to get an accurate cpu percentage
|
||||
|
||||
A fallback is included using `ps -aux` but could be inaccurate.
|
||||
|
||||
### Installation with [Tmux Plugin Manager](https://github.com/tmux-plugins/tpm) (recommended)
|
||||
|
||||
Add plugin to the list of TPM plugins in `.tmux.conf`:
|
||||
|
||||
set -g @plugin 'tmux-plugins/tmux-cpu'
|
||||
|
||||
Hit `prefix + I` to fetch the plugin and source it.
|
||||
|
||||
If format strings are added to `status-right`, they should now be visible.
|
||||
|
||||
### Manual Installation
|
||||
|
||||
Clone the repo:
|
||||
|
||||
$ git clone https://github.com/tmux-plugins/tmux-cpu ~/clone/path
|
||||
|
||||
Add this line to the bottom of `.tmux.conf`:
|
||||
|
||||
run-shell ~/clone/path/cpu.tmux
|
||||
|
||||
Reload TMUX environment:
|
||||
|
||||
# type this in terminal
|
||||
$ tmux source-file ~/.tmux.conf
|
||||
|
||||
If format strings are added to `status-right`, they should now be visible.
|
||||
|
||||
### Changing icons
|
||||
|
||||
By default, these icons are displayed:
|
||||
|
||||
- cpu: "❏"
|
||||
|
||||
You can change these defaults by adding the following to `.tmux.conf` (the
|
||||
following lines are not in the code block so that emojis can be seen):
|
||||
|
||||
- set-option -g @cpu_icon ":sunglasses:"
|
||||
|
||||
Don't forget to reload TMUX environment (`$ tmux source-file ~/.tmux.conf`)
|
||||
after you do this.
|
||||
|
||||
### Limitations
|
||||
|
||||
- CPU change most likely won't be instant.<br/>
|
||||
It will take some time (15 - 60 seconds) for the value to change.
|
||||
This depends on the `status-interval` TMUX option.
|
||||
|
||||
### Other plugins
|
||||
|
||||
You might also find these useful:
|
||||
|
||||
- [battery](https://github.com/tmux-plugins/tmux-battery) - Plug and play battery percentage and icon indicator for Tmux.
|
||||
- [online status](https://github.com/tmux-plugins/tmux-online-status) - online status
|
||||
indicator in Tmux `status-right`. Useful when on flaky connection to see if
|
||||
you're online.
|
||||
|
||||
### License
|
||||
|
||||
[MIT](LICENSE)
|
36
filesystem/root/.tmux/plugins/tmux-cpu/cpu.tmux
Executable file
|
@ -0,0 +1,36 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
source "$CURRENT_DIR/scripts/helpers.sh"
|
||||
|
||||
cpu_percentage="#($CURRENT_DIR/scripts/cpu_percentage.sh)"
|
||||
cpu_icon="#($CURRENT_DIR/scripts/cpu_icon.sh)"
|
||||
cpu_percentage_interpolation="\#{cpu_percentage}"
|
||||
cpu_icon_interpolation="\#{cpu_icon}"
|
||||
|
||||
set_tmux_option() {
|
||||
local option=$1
|
||||
local value=$2
|
||||
tmux set-option -gq "$option" "$value"
|
||||
}
|
||||
|
||||
do_interpolation() {
|
||||
local string=$1
|
||||
local percentage_interpolated=${string/$cpu_percentage_interpolation/$cpu_percentage}
|
||||
local all_interpolated=${percentage_interpolated/$cpu_icon_interpolation/$cpu_icon}
|
||||
echo $all_interpolated
|
||||
}
|
||||
|
||||
update_tmux_option() {
|
||||
local option=$1
|
||||
local option_value=$(get_tmux_option "$option")
|
||||
local new_option_value=$(do_interpolation "$option_value")
|
||||
set_tmux_option "$option" "$new_option_value"
|
||||
}
|
||||
|
||||
main() {
|
||||
update_tmux_option "status-right"
|
||||
update_tmux_option "status-left"
|
||||
}
|
||||
main
|
21
filesystem/root/.tmux/plugins/tmux-cpu/scripts/cpu_icon.sh
Executable file
|
@ -0,0 +1,21 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
source "$CURRENT_DIR/helpers.sh"
|
||||
|
||||
# script global variables
|
||||
cpu_icon=""
|
||||
|
||||
cpu_default="❏ "
|
||||
|
||||
# icons are set as script global variables
|
||||
get_icon_settings() {
|
||||
cpu_icon=$(get_tmux_option "@cpu_icon" "$cpu_default")
|
||||
}
|
||||
|
||||
main() {
|
||||
get_icon_settings
|
||||
printf "$cpu_icon"
|
||||
}
|
||||
main
|
36
filesystem/root/.tmux/plugins/tmux-cpu/scripts/cpu_percentage.sh
Executable file
|
@ -0,0 +1,36 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
source "$CURRENT_DIR/helpers.sh"
|
||||
|
||||
print_cpu_percentage() {
|
||||
if command_exists "iostat"; then
|
||||
|
||||
if is_linux_iostat; then
|
||||
iostat -c 1 2 | tail -n 2 | head -n 1 | awk '{usage=100-$NF} END {printf("%5.1f%%", usage)}'
|
||||
elif is_osx; then
|
||||
iostat -c 2 disk0 | tail -n 1 | awk '{usage=100-$6} END {printf("%5.1f%%", usage)}'
|
||||
elif is_freebsd || is_openbsd; then
|
||||
iostat -c 2 | tail -n 1 | awk '{usage=100-$NF} END {printf("%5.1f%%", usage)}'
|
||||
else
|
||||
echo "Unknown iostat version please create an issue"
|
||||
fi
|
||||
elif command_exists "sar"; then
|
||||
sar -u 1 1 | tail -n 1 | awk '{usage=100-$NF} END {printf("%5.1f%%", usage)}'
|
||||
else
|
||||
if is_cygwin; then
|
||||
usage="$(WMIC cpu get LoadPercentage | grep -Eo '^[0-9]+')"
|
||||
printf "%5.1f%%" $usage
|
||||
else
|
||||
load=`ps -aux | awk '{print $3}' | tail -n+2 | awk '{s+=$1} END {print s}'`
|
||||
cpus=$(cpus_number)
|
||||
echo "$load $cpus" | awk '{printf "%5.2f%%", $1/$2}'
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
print_cpu_percentage
|
||||
}
|
||||
main
|
48
filesystem/root/.tmux/plugins/tmux-cpu/scripts/helpers.sh
Normal file
|
@ -0,0 +1,48 @@
|
|||
get_tmux_option() {
|
||||
local option="$1"
|
||||
local default_value="$2"
|
||||
local option_value="$(tmux show-option -gqv "$option")"
|
||||
if [ -z "$option_value" ]; then
|
||||
echo "$default_value"
|
||||
else
|
||||
echo "$option_value"
|
||||
fi
|
||||
}
|
||||
|
||||
is_osx() {
|
||||
[ $(uname) == "Darwin" ]
|
||||
}
|
||||
|
||||
is_freebsd() {
|
||||
[ $(uname) == "FreeBSD" ]
|
||||
}
|
||||
|
||||
is_openbsd() {
|
||||
[ $(uname) == "OpenBSD" ]
|
||||
}
|
||||
|
||||
is_linux() {
|
||||
[ $(uname) == "Linux" ]
|
||||
}
|
||||
|
||||
is_cygwin() {
|
||||
command -v WMIC &> /dev/null
|
||||
}
|
||||
|
||||
is_linux_iostat() {
|
||||
# Bug in early versions of linux iostat -V return error code
|
||||
iostat -c &> /dev/null
|
||||
}
|
||||
|
||||
cpus_number() {
|
||||
if is_linux; then
|
||||
nproc
|
||||
else
|
||||
sysctl -n hw.ncpu
|
||||
fi
|
||||
}
|
||||
|
||||
command_exists() {
|
||||
local command="$1"
|
||||
command -v "$command" &> /dev/null
|
||||
}
|
22
filesystem/root/.tmux/plugins/tmux-net-speed/LICENSE
Normal file
|
@ -0,0 +1,22 @@
|
|||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2015 Travis Goldie
|
||||
|
||||
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.
|
||||
|
81
filesystem/root/.tmux/plugins/tmux-net-speed/README.md
Normal file
|
@ -0,0 +1,81 @@
|
|||
# tmux-net-speed
|
||||
Tmux plugin to monitor upload and download speed of one or all interfaces.
|
||||
|
||||
## Usage
|
||||
Add one of the following format string to `status-right` tmux option.
|
||||
|
||||
## Special Credit
|
||||
This plugin is roughly based on the various plugins in [https://github.com/tmux-plugins]("tmux-plugins").
|
||||
|
||||
## Formats
|
||||
Shows value in either MB/s, KB/s, or B/s.
|
||||
|
||||
- `#{download_speed}` - Shows only download speed,
|
||||
- `#{upload_speed}` - Shows only upload speed,
|
||||
- `#{net_speed}` - Shows both the upload and download speeds.
|
||||
**Example**: "D: 123 MB/s U: 25 MB/s"
|
||||
|
||||
## Past Values
|
||||
Since this is a difference, the old values are stored in files in `/tmp/`. The user must be able to
|
||||
read and write to this directory.
|
||||
|
||||
### Set Options
|
||||
|
||||
Set the following options in your `.tmux.conf`.
|
||||
|
||||
To change which interfaces to pull from, use a space-separated list. If not set,
|
||||
grabs all the interfaces listed in "/sys/class/net/"
|
||||
|
||||
```
|
||||
set -g @net_speed_interfaces "eth0 eth1"
|
||||
```
|
||||
|
||||
To change the formatter sting passed to `printf`.
|
||||
|
||||
```
|
||||
set -g @download_speed_format "%10s"
|
||||
set -g @upload_speed_format "%10s"
|
||||
set -g @net_speed_format "D:%10s U:%10s"
|
||||
```
|
||||
|
||||
### Installation with [Tmux Plugin Manager](https://github.com/tmux-plugins/tpm) (recommended)
|
||||
|
||||
Add plugin to the list of TPM plugins in `.tmux.conf`:
|
||||
|
||||
set -g @plugin 'tmux-plugins/tmux-net-speed'
|
||||
|
||||
Hit `prefix + I` to fetch the plugin and source it.
|
||||
|
||||
If format strings are added to `status-right`, they should now be visible.
|
||||
|
||||
### Manual Installation
|
||||
|
||||
Clone the repo:
|
||||
|
||||
$ git clone https://github.com/tmux-plugins/tmux-net-speed ~/clone/path
|
||||
|
||||
Add this line to the bottom of `.tmux.conf`:
|
||||
|
||||
run-shell ~/clone/path/net_speed.tmux
|
||||
|
||||
Reload TMUX environment (type this in terminal)
|
||||
|
||||
$ tmux source-file ~/.tmux.conf
|
||||
|
||||
If format strings are added to `status-right`, they should now be visible.
|
||||
|
||||
|
||||
### Storage of Past Values
|
||||
This plugin stores the total output for all the interfaces in a file in `/tmp/`. Therefore, the current user must be able to write and read from that directory.
|
||||
|
||||
|
||||
### TODO
|
||||
- Add unit tests
|
||||
- Add error handling
|
||||
- Configure which interfaces to calculate
|
||||
- Configure format string for `#{net_speed}`
|
||||
- Handle other OSs (currently only supports Linux)
|
||||
|
||||
### License
|
||||
|
||||
[MIT](LICENSE)
|
13
filesystem/root/.tmux/plugins/tmux-net-speed/init.sh
Executable file
|
@ -0,0 +1,13 @@
|
|||
#!/bin/bash -
|
||||
|
||||
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
source "$CURRENT_DIR/scripts/helpers.sh"
|
||||
|
||||
# Initialize files
|
||||
main()
|
||||
{
|
||||
# TODO Add error checking
|
||||
echo "0" > $DOWNLOAD_FILE
|
||||
echo "0" > $UPLOAD_FILE
|
||||
}
|
||||
main
|
36
filesystem/root/.tmux/plugins/tmux-net-speed/net_speed.tmux
Executable file
|
@ -0,0 +1,36 @@
|
|||
#!/bin/bash -
|
||||
|
||||
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
source "$CURRENT_DIR/scripts/helpers.sh"
|
||||
|
||||
download_speed="#($CURRENT_DIR/scripts/download_speed.sh)"
|
||||
net_speed="#($CURRENT_DIR/scripts/net_speed.sh)"
|
||||
upload_speed="#($CURRENT_DIR/scripts/upload_speed.sh)"
|
||||
|
||||
download_interpolation="\#{download_speed}"
|
||||
net_interpolation="\#{net_speed}"
|
||||
upload_interpolation="\#{upload_speed}"
|
||||
|
||||
do_interpolation() {
|
||||
local input=$1
|
||||
local result=""
|
||||
|
||||
result=${input/$download_interpolation/$download_speed}
|
||||
result=${result/$net_interpolation/$net_speed}
|
||||
result=${result/$upload_interpolation/$upload_speed}
|
||||
|
||||
echo $result
|
||||
}
|
||||
|
||||
update_tmux_option() {
|
||||
local option=$1
|
||||
local option_value=$(get_tmux_option "$option")
|
||||
local new_option_value=$(do_interpolation "$option_value")
|
||||
set_tmux_option "$option" "$new_option_value"
|
||||
}
|
||||
|
||||
main() {
|
||||
update_tmux_option "status-right"
|
||||
update_tmux_option "status-left"
|
||||
}
|
||||
main
|
6
filesystem/root/.tmux/plugins/tmux-net-speed/run-tests.sh
Executable file
|
@ -0,0 +1,6 @@
|
|||
#!/bin/bash -
|
||||
CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
|
||||
for testSuite in $CURRENT_DIR/tests/suites/* ; do
|
||||
$testSuite
|
||||
done
|
28
filesystem/root/.tmux/plugins/tmux-net-speed/scripts/download_speed.sh
Executable file
|
@ -0,0 +1,28 @@
|
|||
#!/bin/bash -
|
||||
|
||||
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
source "$CURRENT_DIR/helpers.sh"
|
||||
|
||||
sum_download_speed()
|
||||
{
|
||||
# Output uses first column
|
||||
sum_speed 1
|
||||
}
|
||||
|
||||
main()
|
||||
{
|
||||
# TODO make configurable
|
||||
#local file=$(get_tmux_option $DOWNLOAD_FILE)
|
||||
local file=$DOWNLOAD_FILE
|
||||
local old_val=$(read_file $file)
|
||||
local new_val=$(sum_download_speed)
|
||||
|
||||
write_file $file $new_val
|
||||
local vel=$(get_velocity $new_val $old_val)
|
||||
|
||||
## Format output
|
||||
local format=$(get_tmux_option @download_speed_format "%s")
|
||||
printf "$format" "$vel"
|
||||
}
|
||||
main
|
||||
|
129
filesystem/root/.tmux/plugins/tmux-net-speed/scripts/helpers.sh
Normal file
|
@ -0,0 +1,129 @@
|
|||
#!/bin/bash -
|
||||
|
||||
##
|
||||
# Varialbes
|
||||
##
|
||||
DOWNLOAD_FILE="/tmp/tmux_net_speed.download"
|
||||
UPLOAD_FILE="/tmp/tmux_net_speed.upload"
|
||||
|
||||
get_tmux_option() {
|
||||
local option=$1
|
||||
local default_value=$2
|
||||
local option_value="$(tmux show-option -gqv "$option")"
|
||||
|
||||
if [[ -z "$option_value" ]]; then
|
||||
echo "$default_value"
|
||||
else
|
||||
echo "$option_value"
|
||||
fi
|
||||
}
|
||||
|
||||
set_tmux_option() {
|
||||
local option=$1
|
||||
local value=$2
|
||||
tmux set-option -gq "$option" "$value"
|
||||
}
|
||||
|
||||
get_velocity()
|
||||
{
|
||||
local new_value=$1
|
||||
local old_value=$2
|
||||
|
||||
# Consts
|
||||
local THOUSAND=1024
|
||||
local MILLION=1048576
|
||||
|
||||
local vel=$(( new_value - old_value ))
|
||||
local vel_kb=$(( vel / THOUSAND ))
|
||||
local vel_mb=$(( vel / MILLION ))
|
||||
|
||||
if [[ $vel_mb != 0 ]] ; then
|
||||
echo -n "$vel_mb MB/s"
|
||||
elif [[ $vel_kb != 0 ]] ; then
|
||||
echo -n "$vel_kb KB/s";
|
||||
else
|
||||
echo -n "$vel B/s";
|
||||
fi
|
||||
}
|
||||
|
||||
# Reads from value from file. If file does not exist,
|
||||
# is empty, or not readable, starts back at 0
|
||||
read_file()
|
||||
{
|
||||
local path="$1"
|
||||
local fallback_val=0
|
||||
|
||||
# File exists and is readdable?
|
||||
if [[ ! -f "$path" ]] ; then
|
||||
echo $fallback_val
|
||||
return 1
|
||||
elif [[ ! -r "$path" ]]; then
|
||||
echo $fallback_val
|
||||
return 1
|
||||
fi
|
||||
|
||||
|
||||
# Does the file have content?
|
||||
tmp=$(< "$path")
|
||||
if [[ "x${tmp}" == "x" ]] ; then
|
||||
echo $fallback_val
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Now return known value
|
||||
echo $tmp
|
||||
}
|
||||
|
||||
# Update values in file
|
||||
write_file()
|
||||
{
|
||||
local path="$1"
|
||||
local val="$2"
|
||||
|
||||
# TODO Add error checking
|
||||
echo "$val" > "$path"
|
||||
}
|
||||
|
||||
get_interfaces()
|
||||
{
|
||||
local interfaces=$(get_tmux_option @net_speed_interfaces "")
|
||||
|
||||
if [[ -z "$interfaces" ]] ; then
|
||||
for interface in /sys/class/net/*; do
|
||||
interfaces+=$(echo $(basename $interface) " ");
|
||||
done
|
||||
fi
|
||||
|
||||
# Do not quote the variable. This way will handle trailing whitespace
|
||||
echo -n $interfaces
|
||||
}
|
||||
|
||||
sum_speed()
|
||||
{
|
||||
local column=$1
|
||||
|
||||
declare -a interfaces=$(get_interfaces)
|
||||
|
||||
local line=""
|
||||
local val=0
|
||||
for intf in ${interfaces[@]} ; do
|
||||
line=$(cat /proc/net/dev | grep "$intf" | cut -d':' -f 2)
|
||||
speed="$(echo -n $line | cut -d' ' -f $column)"
|
||||
let val+=${speed:=0}
|
||||
done
|
||||
|
||||
echo $val
|
||||
}
|
||||
|
||||
is_osx() {
|
||||
[ $(uname) == "Darwin" ]
|
||||
}
|
||||
|
||||
is_cygwin() {
|
||||
command -v WMIC > /dev/null
|
||||
}
|
||||
|
||||
command_exists() {
|
||||
local command="$1"
|
||||
type "$command" >/dev/null 2>&1
|
||||
}
|
15
filesystem/root/.tmux/plugins/tmux-net-speed/scripts/net_speed.sh
Executable file
|
@ -0,0 +1,15 @@
|
|||
#!/bin/bash -
|
||||
|
||||
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
source "$CURRENT_DIR/helpers.sh"
|
||||
|
||||
main()
|
||||
{
|
||||
local download=$("$CURRENT_DIR/download_speed.sh")
|
||||
local upload=$("$CURRENT_DIR/upload_speed.sh")
|
||||
|
||||
## Format output
|
||||
local format=$(get_tmux_option @net_speed_format "D:%10s U:%10s")
|
||||
printf "$format" "$download" "$upload"
|
||||
}
|
||||
main
|
28
filesystem/root/.tmux/plugins/tmux-net-speed/scripts/upload_speed.sh
Executable file
|
@ -0,0 +1,28 @@
|
|||
#!/bin/bash -
|
||||
|
||||
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
source "$CURRENT_DIR/helpers.sh"
|
||||
|
||||
sum_upload_speed()
|
||||
{
|
||||
# Output uses ninth column
|
||||
sum_speed 9
|
||||
}
|
||||
|
||||
main()
|
||||
{
|
||||
# TODO make configurable
|
||||
#local upload_file=$(get_tmux_option $UPLOAD_FILE)
|
||||
local file=$UPLOAD_FILE
|
||||
local old_val=$(read_file $file)
|
||||
local new_val=$(sum_upload_speed)
|
||||
|
||||
write_file $file $new_val
|
||||
local vel=$(get_velocity $new_val $old_val)
|
||||
|
||||
## Format output
|
||||
local format=$(get_tmux_option @upload_speed_format "%s")
|
||||
printf "$format" "$vel"
|
||||
}
|
||||
main
|
||||
|
132
filesystem/root/.tmux/plugins/tmux-net-speed/tests/suites/helpers.test.sh
Executable file
|
@ -0,0 +1,132 @@
|
|||
#!/bin/bash -
|
||||
|
||||
CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
SCRIPTS="$CURRENT_DIR/../../scripts"
|
||||
source "$CURRENT_DIR/../test_utils.sh"
|
||||
|
||||
##
|
||||
# Description:
|
||||
# General setup before each test
|
||||
##
|
||||
setup()
|
||||
{
|
||||
source "$SCRIPTS/helpers.sh"
|
||||
}
|
||||
|
||||
##
|
||||
# get_tmux_option
|
||||
##
|
||||
setup_get_tmux_option()
|
||||
{
|
||||
setup
|
||||
|
||||
## Set generic property
|
||||
tmux set @get_tmux_option_name "get_tmux_option_val"
|
||||
}
|
||||
|
||||
cleanup_get_tmux_option()
|
||||
{
|
||||
# Unset value
|
||||
tmux set -u @get_tmux_option_name
|
||||
}
|
||||
|
||||
test_get_tmux_option()
|
||||
{
|
||||
##
|
||||
# Should return set value
|
||||
##
|
||||
setup_get_tmux_option
|
||||
|
||||
result=$( get_tmux_option "@get_tmux_option_name")
|
||||
assertEqual "$result" "get_tmux_option_val" "should get tmux prop when given no default" -v
|
||||
|
||||
cleanup_get_tmux_option
|
||||
|
||||
##
|
||||
# Should show set value
|
||||
##
|
||||
setup_get_tmux_option
|
||||
|
||||
result=$( get_tmux_option "@get_tmux_option_name_unset")
|
||||
assertEqual "$result" "" "should get empty string when tmux prop unset"
|
||||
|
||||
cleanup_get_tmux_option
|
||||
|
||||
##
|
||||
# Should show set value
|
||||
##
|
||||
setup_get_tmux_option
|
||||
|
||||
result=$( get_tmux_option @get_tmux_option_name_unset my_default)
|
||||
assertEqual "$result" "my_default" "should get default if provided for unset prop"
|
||||
|
||||
cleanup_get_tmux_option
|
||||
}
|
||||
|
||||
##
|
||||
# get_velocity
|
||||
##
|
||||
setup_get_velocity()
|
||||
{
|
||||
setup
|
||||
}
|
||||
|
||||
cleanup_get_velocity() { :; }
|
||||
|
||||
test_get_velocity()
|
||||
{
|
||||
setup_get_velocity
|
||||
let input=200
|
||||
result=$(get_velocity $input 0)
|
||||
assertEqual "$result" "200 B/s" "should show B/s"
|
||||
cleanup_get_velocity
|
||||
|
||||
setup_get_velocity
|
||||
let input=2*1024
|
||||
result=$(get_velocity $input 0)
|
||||
assertEqual "$result" "2 KB/s" "should show KB/s"
|
||||
cleanup_get_velocity
|
||||
|
||||
setup_get_velocity
|
||||
let input=3*1048576
|
||||
result=$(get_velocity $input 0)
|
||||
assertEqual "$result" "3 MB/s" "should show MB/s"
|
||||
cleanup_get_velocity
|
||||
|
||||
|
||||
setup_get_velocity
|
||||
let subtract_from=100*1048576
|
||||
let subtract_with=50*1048576
|
||||
result=$(get_velocity $subtract_from subtract_with)
|
||||
assertEqual "$result" "50 MB/s" "should show MB/s if subraction done"
|
||||
cleanup_get_velocity
|
||||
}
|
||||
|
||||
##
|
||||
# get_interfaces
|
||||
##
|
||||
setup_get_interfaces()
|
||||
{
|
||||
setup
|
||||
}
|
||||
|
||||
cleanup_get_interfaces() { :; }
|
||||
|
||||
test_get_interfaces()
|
||||
{
|
||||
setup_get_interfaces
|
||||
result=$(get_interfaces)
|
||||
assertEqual "$result" "eth0 lo wlan0" "should output space-delimited list of interfaces" -v
|
||||
cleanup_get_interfaces
|
||||
}
|
||||
|
||||
suites()
|
||||
{
|
||||
#test_get_tmux_option
|
||||
#test_get_velocity
|
||||
test_get_interfaces
|
||||
}
|
||||
|
||||
# Run tests
|
||||
suites
|
||||
|
|
@ -0,0 +1,91 @@
|
|||
#!/bin/bash -
|
||||
###############################################################################
|
||||
# Author: Travis Goldie
|
||||
# Purpose: Util funcs for unit tests
|
||||
###############################################################################
|
||||
##
|
||||
# Description:
|
||||
# Asserts if `$1` equals `$2`
|
||||
##
|
||||
assertEqual()
|
||||
{
|
||||
local input=$1
|
||||
local expected=$2
|
||||
local msg=$3
|
||||
|
||||
if [[ "$4" == "-v" ]] ; then
|
||||
echo $@
|
||||
fi
|
||||
|
||||
if [[ -z msg ]] ; then
|
||||
msg="Failed test"
|
||||
fi
|
||||
|
||||
test "$1" == "$2"
|
||||
err=$?
|
||||
|
||||
if [[ $err == 0 ]] ; then
|
||||
echo "[PASSED]: ${msg}"
|
||||
echo
|
||||
return $err
|
||||
fi
|
||||
|
||||
if [[ $err != 0 ]] ; then
|
||||
echo "[FAILED]: ${msg}"
|
||||
echo
|
||||
return $err
|
||||
fi
|
||||
}
|
||||
|
||||
##
|
||||
# Description:
|
||||
# Asserts if `$1` not equals `$2`
|
||||
##
|
||||
assertNotEqual()
|
||||
{
|
||||
local input=$1
|
||||
local expected=$2
|
||||
local msg=$3
|
||||
|
||||
if [[ -z msg ]] ; then
|
||||
msg="Failed test"
|
||||
fi
|
||||
|
||||
test "$1" != "$2"
|
||||
err=$?
|
||||
|
||||
if [[ $err == 0 ]] ; then
|
||||
echo "[PASSED]: ${msg}"
|
||||
echo
|
||||
return $err
|
||||
fi
|
||||
|
||||
if [[ $err != 0 ]] ; then
|
||||
echo "[FAILED]: ${msg}"
|
||||
echo
|
||||
return $err
|
||||
fi
|
||||
}
|
||||
|
||||
##
|
||||
# @description
|
||||
# Checks to see if error code is non-zero. If so, echo message and exit
|
||||
# with the given error code.
|
||||
#
|
||||
# ``` bash
|
||||
# $ someCmd blah blah2
|
||||
# $ err=$?
|
||||
# $ die $err "If err is non-zero this script will exit"
|
||||
# ```
|
||||
##
|
||||
die()
|
||||
{
|
||||
local err=$1
|
||||
local msg=$2
|
||||
local name=$( basename $0 )
|
||||
|
||||
if [[ $err != 0 ]] ; then
|
||||
echo "[ERROR]:${name}:code $err:${msg}"
|
||||
exit $err
|
||||
fi
|
||||
}
|
22
filesystem/root/.tmux/plugins/tmux-prefix-highlight/LICENSE
Normal file
|
@ -0,0 +1,22 @@
|
|||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2015 Erick Pintor
|
||||
|
||||
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.
|
||||
|
|
@ -0,0 +1,86 @@
|
|||
# Tmux prefix highlight
|
||||
|
||||
Plugin that highlights when you press tmux prefix key. Inspired by
|
||||
[this](http://stackoverflow.com/questions/12003726/give-a-hint-when-press-prefix-key-in-tmux)
|
||||
thread on stackoverflow.
|
||||
|
||||
Many thanks to [@obxhdx](https://github.com/obxhdx) for showing me this trick.
|
||||
|
||||
Prefix off:
|
||||
![prefix_off](screenshots/prefix_off.png)
|
||||
|
||||
Prefix on:
|
||||
![prefix_on](screenshots/prefix_on.png)
|
||||
|
||||
### Usage
|
||||
|
||||
Just add `#{prefix_highlight}` to your left/right status bar.
|
||||
|
||||
```tmux.confi
|
||||
set -g status-right '#{prefix_highlight} | %a %Y-%m-%d %H:%M'
|
||||
```
|
||||
|
||||
The plugin can also be configured to show when copy mode is active; see the
|
||||
**Configurations** section for details.
|
||||
|
||||
### Installation with Tmux Plugin Manager (recommended)
|
||||
|
||||
Add plugin to the list of TPM plugins:
|
||||
|
||||
```tmux.conf
|
||||
set -g @plugin 'tmux-plugins/tmux-prefix-highlight'
|
||||
```
|
||||
|
||||
Press prefix + I to install it.
|
||||
|
||||
### Manual Installation
|
||||
|
||||
Clone the repo:
|
||||
|
||||
```bash
|
||||
$ git clone https://github.com/tmux-plugins/tmux-prefix-highlight.git ~/clone/path
|
||||
```
|
||||
|
||||
Add this line to your .tmux.conf:
|
||||
|
||||
```tmux.conf
|
||||
run-shell ~/clone/path/prefix_highlight.tmux
|
||||
```
|
||||
|
||||
Reload TMUX environment with:
|
||||
|
||||
```bash
|
||||
$ tmux source-file ~/.tmux.conf
|
||||
```
|
||||
|
||||
### Configurations
|
||||
|
||||
The colors used for the prefix highlight can be configured:
|
||||
|
||||
```tmux.conf
|
||||
set -g @prefix_highlight_fg 'white' # default is 'colour231'
|
||||
set -g @prefix_highlight_bg 'blue' # default is 'colour04'
|
||||
```
|
||||
|
||||
The plugin can also be configured to show when copy mode is active. If enabled,
|
||||
the `#{prefix_highlight}` token will be replaced with the string `Copy` when
|
||||
copy mode is enabled. The style for copy mode can be configured as a
|
||||
comma-separated list of colors and attributes:
|
||||
|
||||
```tmux.conf
|
||||
set -g @prefix_highlight_show_copy_mode 'on'
|
||||
set -g @prefix_highlight_copy_mode_attr 'fg=black,bg=yellow,bold' # default is 'fg=default,bg=yellow'
|
||||
```
|
||||
|
||||
Additionally, the plugin can be configured to attach optional affixes to the
|
||||
value contained in `#{prefix_highlight}`.
|
||||
(e.g. `< ^B >`)
|
||||
|
||||
```tmux.conf
|
||||
set -g @prefix_highlight_output_prefix '< '
|
||||
set -g @prefix_highlight_output_suffix ' >'
|
||||
```
|
||||
|
||||
### License
|
||||
|
||||
[MIT](LICENSE)
|
92
filesystem/root/.tmux/plugins/tmux-prefix-highlight/prefix_highlight.tmux
Executable file
|
@ -0,0 +1,92 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
|
||||
# Place holder for status left/right
|
||||
place_holder="\#{prefix_highlight}"
|
||||
|
||||
# Possible configurations
|
||||
fg_color_config='@prefix_highlight_fg'
|
||||
bg_color_config='@prefix_highlight_bg'
|
||||
output_prefix='@prefix_highlight_output_prefix'
|
||||
output_suffix='@prefix_highlight_output_suffix'
|
||||
show_copy_config='@prefix_highlight_show_copy_mode'
|
||||
copy_attr_config='@prefix_highlight_copy_mode_attr'
|
||||
|
||||
# Defaults
|
||||
default_fg='colour231'
|
||||
default_bg='colour04'
|
||||
default_copy_attr='fg=default,bg=yellow'
|
||||
|
||||
tmux_option() {
|
||||
local -r value=$(tmux show-option -gqv "$1")
|
||||
local -r default="$2"
|
||||
|
||||
if [ ! -z "$value" ]; then
|
||||
echo "$value"
|
||||
else
|
||||
echo "$default"
|
||||
fi
|
||||
}
|
||||
|
||||
highlight() {
|
||||
local -r \
|
||||
status="$1" \
|
||||
prefix="$2" \
|
||||
prefix_highlight="$3" \
|
||||
show_copy_mode="$4" \
|
||||
copy_highlight="$5" \
|
||||
output_prefix="$6" \
|
||||
output_suffix="$7" \
|
||||
copy="Copy"
|
||||
|
||||
local -r status_value="$(tmux_option "$status")"
|
||||
local -r prefix_with_optional_affixes="$output_prefix$prefix$output_suffix"
|
||||
local -r copy_with_optional_affixes="$output_prefix$copy$output_suffix"
|
||||
|
||||
if [[ "on" = "$show_copy_mode" ]]; then
|
||||
local -r fallback="${copy_highlight}#{?pane_in_mode,$copy_with_optional_affixes,}"
|
||||
else
|
||||
local -r fallback=""
|
||||
fi
|
||||
|
||||
local -r highlight_on_prefix="${prefix_highlight}#{?client_prefix,$prefix_with_optional_affixes,$fallback}#[default]"
|
||||
tmux set-option -gq "$status" "${status_value/$place_holder/$highlight_on_prefix}"
|
||||
}
|
||||
|
||||
main() {
|
||||
local -r \
|
||||
prefix=$(tmux_option prefix) \
|
||||
fg_color=$(tmux_option "$fg_color_config" "$default_fg") \
|
||||
bg_color=$(tmux_option "$bg_color_config" "$default_bg") \
|
||||
show_copy_mode=$(tmux_option "$show_copy_config" "off") \
|
||||
output_prefix=$(tmux_option "$output_prefix" " ") \
|
||||
output_suffix=$(tmux_option "$output_suffix" " ") \
|
||||
copy_attr=$(tmux_option "$copy_attr_config" "$default_copy_attr")
|
||||
|
||||
local -r short_prefix=$(
|
||||
echo "$prefix" | tr "[:lower:]" "[:upper:]" | sed 's/C-/\^/'
|
||||
)
|
||||
|
||||
local -r \
|
||||
prefix_highlight="#[fg=$fg_color,bg=$bg_color]" \
|
||||
copy_highlight="${copy_attr:+#[default,$copy_attr]}"
|
||||
|
||||
highlight "status-right" \
|
||||
"$short_prefix" \
|
||||
"$prefix_highlight" \
|
||||
"$show_copy_mode" \
|
||||
"$copy_highlight" \
|
||||
"$output_prefix" \
|
||||
"$output_suffix"
|
||||
|
||||
highlight "status-left" \
|
||||
"$short_prefix" \
|
||||
"$prefix_highlight" \
|
||||
"$show_copy_mode" \
|
||||
"$copy_highlight" \
|
||||
"$output_prefix" \
|
||||
"$output_suffix"
|
||||
}
|
||||
|
||||
main
|
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 12 KiB |
14
filesystem/root/.tmux/plugins/tmux-resurrect/.travis.yml
Normal file
|
@ -0,0 +1,14 @@
|
|||
# generic packages and latest Tmux 1.9a
|
||||
before_install:
|
||||
- sudo apt-get update
|
||||
- sudo apt-get install -y git-core expect
|
||||
- sudo apt-get install -y python-software-properties software-properties-common
|
||||
- sudo add-apt-repository -y ppa:pi-rho/dev
|
||||
- sudo apt-get update
|
||||
- sudo apt-get install -y tmux=1.9a-1~ppa1~p
|
||||
|
||||
install:
|
||||
- git fetch --unshallow --recurse-submodules || git fetch --recurse-submodules
|
||||
- lib/tmux-test/setup
|
||||
|
||||
script: ./tests/run_tests_in_isolation
|
140
filesystem/root/.tmux/plugins/tmux-resurrect/CHANGELOG.md
Normal file
|
@ -0,0 +1,140 @@
|
|||
# Changelog
|
||||
|
||||
### master
|
||||
- save and restore tmux pane contents (@laomaiweng)
|
||||
- update tmux-test to solve issue with recursing git submodules in that project
|
||||
- set options quietly in `resurrect.tmux` script
|
||||
- improve pane contents restoration: `cat <file>` is no longer shown in pane
|
||||
content history
|
||||
- refactoring: drop dependency on `paste` command
|
||||
- bugfix for pane contents restoration
|
||||
- expand tilde char `~` if used with `@resurrect-dir`
|
||||
- do not save empty trailing lines when pane content is saved
|
||||
- do not save pane contents if pane is empty (only for 'save pane contents'
|
||||
feature)
|
||||
- "save pane contents" feature saves files to a separate directory
|
||||
- archive and compress pane contents file
|
||||
- make archive & compress pane contents process more portable
|
||||
- `mutt` added to the list of automatically restored programs
|
||||
- added guide for migrating from tmuxinator
|
||||
|
||||
### v2.4.0, 2015-02-23
|
||||
- add "tmux-test"
|
||||
- add test for "resurrect save" feature
|
||||
- add test for "resurrect restore" feature
|
||||
- make the tests work and pass on travis
|
||||
- add travis badge to the readme
|
||||
|
||||
### v2.3.0, 2015-02-12
|
||||
- Improve fetching proper window_layout for zoomed windows. In order to fetch
|
||||
proper value, window has to get unzoomed. This is now done faster so that
|
||||
"unzoom,fetch value,zoom" cycle is almost unnoticable to the user.
|
||||
|
||||
### v2.2.0, 2015-02-12
|
||||
- bugfix: zoomed windows related regression
|
||||
- export save and restore script paths so that 'tmux-resurrect-save' plugin can
|
||||
use them
|
||||
- enable "quiet" saving (used by 'tmux-resurrect-save' plugin)
|
||||
|
||||
### v2.1.0, 2015-02-12
|
||||
- if restore is started when there's only **1 pane in the whole tmux server**,
|
||||
assume the users wants the "full restore" and overrwrite that pane.
|
||||
|
||||
### v2.0.0, 2015-02-10
|
||||
- add link to the wiki page for "first pane/window issue" to the README as well
|
||||
as other tweaks
|
||||
- save and restore grouped sessions (used with multi-monitor workflow)
|
||||
- save and restore active and alternate windows in grouped sessions
|
||||
- if there are no grouped sessions, do not output empty line to "last" file
|
||||
- restore active and alternate windows only if they are present in the "last" file
|
||||
- refactoring: prefer using variable with tab character
|
||||
- remove deprecated `M-s` and `M-r` key bindings (breaking change)
|
||||
|
||||
### v1.5.0, 2014-11-09
|
||||
- add support for restoring neovim sessions
|
||||
|
||||
### v1.4.0, 2014-10-25
|
||||
- plugin now uses strategies when fetching pane full command. Implemented
|
||||
'default' strategy.
|
||||
- save command strategy: 'pgrep'. It's here only if fallback is needed.
|
||||
- save command strategy: 'gdb'
|
||||
- rename default strategy name to 'ps'
|
||||
- create `expect` script that can fully restore tmux environment
|
||||
- fix default save command strategy `ps` command flags. Flags are different for
|
||||
FreeBSD.
|
||||
- add bash history saving and restoring (@rburny)
|
||||
- preserving layout of zoomed windows across restores (@Azrael3000)
|
||||
|
||||
### v1.3.0, 2014-09-20
|
||||
- remove dependency on `pgrep` command. Use `ps` for fetching process names.
|
||||
|
||||
### v1.2.1, 2014-09-02
|
||||
- tweak 'new_pane' creation strategy to fix #36
|
||||
- when running multiple tmux server and for a large number of panes (120 +) when
|
||||
doing a restore, some panes might not be created. When that is the case also
|
||||
don't restore programs for those panes.
|
||||
|
||||
### v1.2.0, 2014-09-01
|
||||
- new feature: inline strategies when restoring a program
|
||||
|
||||
### v1.1.0, 2014-08-31
|
||||
- bugfix: sourcing `variables.sh` file in save script
|
||||
- add `Ctrl` key mappings, deprecate `Alt` keys mappings.
|
||||
|
||||
### v1.0.0, 2014-08-30
|
||||
- show spinner during the save process
|
||||
- add screencast script
|
||||
- make default program running list even more conservative
|
||||
|
||||
### v0.4.0, 2014-08-29
|
||||
- change plugin name to `tmux-resurrect`. Change all the variable names.
|
||||
|
||||
### v0.3.0, 2014-08-29
|
||||
- bugfix: when top is running the pane `$PWD` can't be saved. This was causing
|
||||
issues during the restore and is now fixed.
|
||||
- restoring sessions multiple times messes up the whole environment - new panes
|
||||
are all around. This is now fixed - pane restorations are now idempotent.
|
||||
- if pane exists from before session restore - do not restore the process within
|
||||
it. This makes the restoration process even more idempotent.
|
||||
- more panes within a window can now be restored
|
||||
- restore window zoom state
|
||||
|
||||
### v0.2.0, 2014-08-29
|
||||
- bugfix: with vim 'session' strategy, if the session file does not exist - make
|
||||
sure vim does not contain `-S` flag
|
||||
- enable restoring programs with arguments (e.g. "rails console") and also
|
||||
processes that contain program name
|
||||
- improve `irb` restore strategy
|
||||
|
||||
### v0.1.0, 2014-08-28
|
||||
- refactor checking if saved tmux session exists
|
||||
- spinner while tmux sessions are restored
|
||||
|
||||
### v0.0.5, 2014-08-28
|
||||
- restore pane processes
|
||||
- user option for disabling pane process restoring
|
||||
- enable whitelisting processes that will be restored
|
||||
- expand readme with configuration options
|
||||
- enable command strategies; enable restoring vim sessions
|
||||
- update readme: explain restoring vim sessions
|
||||
|
||||
### v0.0.4, 2014-08-26
|
||||
- restore pane layout for each window
|
||||
- bugfix: correct pane ordering in a window
|
||||
|
||||
### v0.0.3, 2014-08-26
|
||||
- save and restore current and alternate session
|
||||
- fix a bug with non-existing window names
|
||||
- restore active pane for each window that has multiple panes
|
||||
- restore active and alternate window for each session
|
||||
|
||||
### v0.0.2, 2014-08-26
|
||||
- saving a new session does not remove the previous one
|
||||
- make the directory where sessions are stored configurable
|
||||
- support only Tmux v1.9 or greater
|
||||
- display a nice error message if saved session file does not exist
|
||||
- added README
|
||||
|
||||
### v0.0.1, 2014-08-26
|
||||
- started a project
|
||||
- basic saving and restoring works
|
12
filesystem/root/.tmux/plugins/tmux-resurrect/CONTRIBUTING.md
Normal file
|
@ -0,0 +1,12 @@
|
|||
### Contributing
|
||||
|
||||
Code contributions are welcome!
|
||||
|
||||
### Reporting a bug
|
||||
|
||||
If you find a bug please report it in the issues. When reporting a bug please
|
||||
attach:
|
||||
- a file symlinked to `~/.tmux/resurrect/last`.
|
||||
- your `.tmux.conf`
|
||||
- if you're getting an error paste it to a [gist](https://gist.github.com/) and
|
||||
link it in the issue
|
19
filesystem/root/.tmux/plugins/tmux-resurrect/LICENSE.md
Normal file
|
@ -0,0 +1,19 @@
|
|||
Copyright (C) 2014 Bruno Sutic
|
||||
|
||||
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.
|
135
filesystem/root/.tmux/plugins/tmux-resurrect/README.md
Normal file
|
@ -0,0 +1,135 @@
|
|||
# Tmux Resurrect
|
||||
|
||||
[![Build Status](https://travis-ci.org/tmux-plugins/tmux-resurrect.png?branch=master)](https://travis-ci.org/tmux-plugins/tmux-resurrect)
|
||||
|
||||
Restore `tmux` environment after system restart.
|
||||
|
||||
Tmux is great, except when you have to restart the computer. You lose all the
|
||||
running programs, working directories, pane layouts etc.
|
||||
There are helpful management tools out there, but they require initial
|
||||
configuration and continuous updates as your workflow evolves or you start new
|
||||
projects.
|
||||
|
||||
`tmux-resurrect` saves all the little details from your tmux environment so it
|
||||
can be completely restored after a system restart (or when you feel like it).
|
||||
No configuration is required. You should feel like you never quit tmux.
|
||||
|
||||
It even (optionally)
|
||||
[restores vim and neovim sessions](docs/restoring_vim_and_neovim_sessions.md)!
|
||||
|
||||
Automatic restoring and continuous saving of tmux env is also possible with
|
||||
[tmux-continuum](https://github.com/tmux-plugins/tmux-continuum) plugin.
|
||||
|
||||
### Screencast
|
||||
|
||||
[![screencast screenshot](/video/screencast_img.png)](https://vimeo.com/104763018)
|
||||
|
||||
### Key bindings
|
||||
|
||||
- `prefix + Ctrl-s` - save
|
||||
- `prefix + Ctrl-r` - restore
|
||||
|
||||
### About
|
||||
|
||||
This plugin goes to great lengths to save and restore all the details from your
|
||||
`tmux` environment. Here's what's been taken care of:
|
||||
|
||||
- all sessions, windows, panes and their order
|
||||
- current working directory for each pane
|
||||
- **exact pane layouts** within windows (even when zoomed)
|
||||
- active and alternative session
|
||||
- active and alternative window for each session
|
||||
- windows with focus
|
||||
- active pane for each window
|
||||
- "grouped sessions" (useful feature when using tmux with multiple monitors)
|
||||
- programs running within a pane! More details in the
|
||||
[restoring programs doc](docs/restoring_programs.md).
|
||||
|
||||
Optional:
|
||||
|
||||
- [restoring vim and neovim sessions](docs/restoring_vim_and_neovim_sessions.md)
|
||||
- [restoring pane contents](docs/restoring_pane_contents.md)
|
||||
- [restoring bash history](docs/restoring_bash_history.md) (experimental)
|
||||
|
||||
Requirements / dependencies: `tmux 1.9` or higher, `bash`.
|
||||
|
||||
Tested and working on Linux, OSX and Cygwin.
|
||||
|
||||
`tmux-resurrect` is idempotent! It will not try to restore panes or windows that
|
||||
already exist.<br/>
|
||||
The single exception to this is when tmux is started with only 1 pane in order
|
||||
to restore previous tmux env. Only in this case will this single pane be
|
||||
overwritten.
|
||||
|
||||
### Installation with [Tmux Plugin Manager](https://github.com/tmux-plugins/tpm) (recommended)
|
||||
|
||||
Add plugin to the list of TPM plugins in `.tmux.conf`:
|
||||
|
||||
set -g @plugin 'tmux-plugins/tmux-resurrect'
|
||||
|
||||
Hit `prefix + I` to fetch the plugin and source it. You should now be able to
|
||||
use the plugin.
|
||||
|
||||
### Manual Installation
|
||||
|
||||
Clone the repo:
|
||||
|
||||
$ git clone https://github.com/tmux-plugins/tmux-resurrect ~/clone/path
|
||||
|
||||
Add this line to the bottom of `.tmux.conf`:
|
||||
|
||||
run-shell ~/clone/path/resurrect.tmux
|
||||
|
||||
Reload TMUX environment with: `$ tmux source-file ~/.tmux.conf`.
|
||||
You should now be able to use the plugin.
|
||||
|
||||
### Docs
|
||||
|
||||
- [Guide for migrating from tmuxinator](docs/migrating_from_tmuxinator.md)
|
||||
|
||||
**Configuration**
|
||||
|
||||
- [Changing the default key bindings](docs/custom_key_bindings.md).
|
||||
- Only a conservative list of programs is restored by default:<br/>
|
||||
`vi vim nvim emacs man less more tail top htop irssi mutt`.<br/>
|
||||
[Restoring programs doc](docs/restoring_programs.md) explains how to restore
|
||||
additional programs.
|
||||
- [Change a directory](docs/save_dir.md) where `tmux-resurrect` saves tmux
|
||||
environment.
|
||||
|
||||
**Optional features**
|
||||
|
||||
- [Restoring vim and neovim sessions](docs/restoring_vim_and_neovim_sessions.md)
|
||||
is nice if you're a vim/neovim user.
|
||||
- [Restoring pane contents](docs/restoring_pane_contents.md) feature.
|
||||
|
||||
**Experimental features (also optional)**
|
||||
|
||||
- [restoring bash history](docs/restoring_bash_history.md)
|
||||
|
||||
### Other goodies
|
||||
|
||||
- [tmux-copycat](https://github.com/tmux-plugins/tmux-copycat) - a plugin for
|
||||
regex searches in tmux and fast match selection
|
||||
- [tmux-yank](https://github.com/tmux-plugins/tmux-yank) - enables copying
|
||||
highlighted text to system clipboard
|
||||
- [tmux-open](https://github.com/tmux-plugins/tmux-open) - a plugin for quickly
|
||||
opening highlighted file or a url
|
||||
- [tmux-continuum](https://github.com/tmux-plugins/tmux-continuum) - automatic
|
||||
restoring and continuous saving of tmux env
|
||||
|
||||
You might want to follow [@brunosutic](https://twitter.com/brunosutic) on
|
||||
twitter if you want to hear about new tmux plugins or feature updates.
|
||||
|
||||
### Reporting bugs and contributing
|
||||
|
||||
Both contributing and bug reports are welcome. Please check out
|
||||
[contributing guidelines](CONTRIBUTING.md).
|
||||
|
||||
### Credits
|
||||
|
||||
[Mislav Marohnić](https://github.com/mislav) - the idea for the plugin came from his
|
||||
[tmux-session script](https://github.com/mislav/dotfiles/blob/2036b5e03fb430bbcbc340689d63328abaa28876/bin/tmux-session).
|
||||
|
||||
### License
|
||||
[MIT](LICENSE.md)
|
|
@ -0,0 +1,11 @@
|
|||
# Custom key bindings
|
||||
|
||||
The default key bindings are:
|
||||
|
||||
- `prefix + Ctrl-s` - save
|
||||
- `prefix + Ctrl-r` - restore
|
||||
|
||||
To change these, add to `.tmux.conf`:
|
||||
|
||||
set -g @resurrect-save 'S'
|
||||
set -g @resurrect-restore 'R'
|
|
@ -0,0 +1,72 @@
|
|||
# Migrating from `tmuxinator`
|
||||
|
||||
### Why migrate to `tmux-resurrect`?
|
||||
|
||||
Here are some reasons why you'd want to migrate from `tmuxinator` to
|
||||
`tmux-resurrect`:
|
||||
|
||||
- **Less dependencies**<br/>
|
||||
`tmuxinator` depends on `ruby` which can be a hassle to set up if you're not a
|
||||
rubyist.<br/>
|
||||
`tmux-resurrect` depends just on `bash` which is virtually
|
||||
omnipresent.
|
||||
|
||||
- **Simplicity**<br/>
|
||||
`tmuxinator` has an executable, CLI interface with half dozen commands and
|
||||
command completion.<br/>
|
||||
`tmux-resurrect` defines just 2 tmux key bindings.
|
||||
|
||||
- **No configuration**<br/>
|
||||
`tmuxinator` is all about config files (and their constant updating).<br/>
|
||||
`tmux-resurrect` requires no configuration to work.
|
||||
|
||||
- **Better change handling**<br/>
|
||||
When you make a change to any aspect of tmux layout, you also have to
|
||||
update related `tmuxinator` project file (and test to make sure change is
|
||||
ok).<br/>
|
||||
With `tmux-resurrect` there's nothing to do: your change will be
|
||||
remembered on the next save.
|
||||
|
||||
### How to migrate?
|
||||
|
||||
1. Install `tmux-resurrect`.
|
||||
2. Open \*all* existing `tmuxinator` projects.<br/>
|
||||
Verify all projects are open by pressing `prefix + s` and checking they are
|
||||
all on the list.
|
||||
3. Perform a `tmux-resurrect` save.
|
||||
|
||||
That's it! You can continue using just `tmux-resurrect` should you choose so.
|
||||
|
||||
Note: it probably makes no sense to use both tools at the same time as they do
|
||||
the same thing (creating tmux environment for you to work in).
|
||||
Technically however, there should be no issues.
|
||||
|
||||
### Usage differences
|
||||
|
||||
`tmuxinator` focuses on managing individual tmux sessions (projects).
|
||||
`tmux-resurrect` keeps track of the \*whole* tmux environment: all sessions are
|
||||
saved and restored together.
|
||||
|
||||
A couple tips if you decide to switch to `tmux-resurrect`:
|
||||
|
||||
- Keep all tmux sessions (projects) running all the time.<br/>
|
||||
If you want to work on an existing project, you should be able to just
|
||||
\*switch* to an already open session using `prefix + s`.<br/>
|
||||
This is different from `tmuxinator` where you'd usually run `mux new [project]`
|
||||
in order to start working on something.
|
||||
|
||||
- No need to kill sessions with `tmux kill-session` (unless you really don't
|
||||
want to work on it ever).<br/>
|
||||
It's the recurring theme by now: just keep all the sessions running all the
|
||||
time. This is convenient and also cheap in terms of resources.
|
||||
|
||||
- The only 2 situations when you need `tmux-resurrect`:<br/>
|
||||
1) Save tmux environment just before restarting/shutting down your
|
||||
computer.<br/>
|
||||
2) Restore tmux env after you turn the computer on.
|
||||
|
||||
### Other questions?
|
||||
|
||||
Still have questions? Feel free to open an
|
||||
[issue](ihttps://github.com/tmux-plugins/tmux-resurrect/issues). We'll try to
|
||||
answer it and also update this doc.
|
|
@ -0,0 +1,12 @@
|
|||
# Restoring bash history (experimental)
|
||||
|
||||
Enable feature with this option in `.tmux.conf`:
|
||||
|
||||
set -g @resurrect-save-bash-history 'on'
|
||||
|
||||
Bash `history` for individual panes will now be saved and restored. Due to
|
||||
technical limitations, this only works for panes which have no program running
|
||||
in foreground when saving. `tmux-resurrect` will send history write command to
|
||||
each such pane. To prevent these commands from being added to history
|
||||
themselves, add `HISTCONTROL=ignoreboth` to your `.bashrc`
|
||||
(this is set by default in Ubuntu).
|
|
@ -0,0 +1,31 @@
|
|||
# Restoring pane contents
|
||||
|
||||
This plugin enables saving and restoring tmux pane contents.
|
||||
|
||||
This feature can be enabled by adding this line to `.tmux.conf`:
|
||||
|
||||
set -g @resurrect-capture-pane-contents 'on'
|
||||
|
||||
##### Known issue
|
||||
|
||||
When using this feature, please check the value of `default-command`
|
||||
tmux option. That can be done with `$ tmux show -g default-command`.
|
||||
|
||||
The value should NOT contain `&&` or `||` operators. If it does, simplify the
|
||||
option so those operators are removed.
|
||||
|
||||
Example:
|
||||
|
||||
- this will cause issues (notice the `&&` and `||` operators):
|
||||
|
||||
set -g default-command "which reattach-to-user-namespace > /dev/null && reattach-to-user-namespace -l $SHELL || $SHELL -l"
|
||||
|
||||
- this is ok:
|
||||
|
||||
set -g default-command "reattach-to-user-namespace -l $SHELL"
|
||||
|
||||
Related [bug](https://github.com/tmux-plugins/tmux-resurrect/issues/98).
|
||||
|
||||
Alternatively, you can let
|
||||
[tmux-sensible](https://github.com/tmux-plugins/tmux-sensible)
|
||||
handle this option in a cross-platform way and you'll have no problems.
|
|
@ -0,0 +1,100 @@
|
|||
# Restoring programs
|
||||
|
||||
Only a conservative list of programs is restored by default:<br/>
|
||||
`vi vim nvim emacs man less more tail top htop irssi mutt`.
|
||||
|
||||
This can be configured with `@resurrect-processes` option in `.tmux.conf`. It
|
||||
contains space-separated list of additional programs to restore.
|
||||
|
||||
- Example restoring additional programs:
|
||||
|
||||
set -g @resurrect-processes 'ssh psql mysql sqlite3'
|
||||
|
||||
- Programs with arguments should be double quoted:
|
||||
|
||||
set -g @resurrect-processes 'some_program "git log"'
|
||||
|
||||
- Start with tilde to restore a program whose process contains target name:
|
||||
|
||||
set -g @resurrect-processes 'irb pry "~rails server" "~rails console"'
|
||||
|
||||
- Use `->` to specify a command to be used when restoring a program (useful if
|
||||
the default restore command fails ):
|
||||
|
||||
set -g @resurrect-processes 'some_program "grunt->grunt development"'
|
||||
|
||||
- Don't restore any programs:
|
||||
|
||||
set -g @resurrect-processes 'false'
|
||||
|
||||
- Restore **all** programs (be careful with this!):
|
||||
|
||||
set -g @resurrect-processes ':all:'
|
||||
|
||||
### Clarifications
|
||||
|
||||
> I don't understand tilde `~`, what is it and why is it used when restoring
|
||||
programs?
|
||||
|
||||
Let's say you use `rails server` command often. You want `tmux-resurrect` to
|
||||
save and restore it automatically. You might try adding `rails server` to the
|
||||
list of programs that will be restored:
|
||||
|
||||
set -g @resurrect-processes '"rails server"' # will NOT work
|
||||
|
||||
Upon save, `rails server` command will actually be saved as this command:
|
||||
`/Users/user/.rbenv/versions/2.0.0-p481/bin/ruby script/rails server`
|
||||
(if you wanna see how is any command saved, check it yourself in
|
||||
`~/.tmux/resurrect/last` file).
|
||||
|
||||
When programs are restored, the `rails server` command will NOT be restored
|
||||
because it does not **strictly** match the long
|
||||
`/Users/user/.rbenv/versions/2.0.0-p481/bin/ruby script/rails server` string.
|
||||
|
||||
The tilde `~` at the start of the string relaxes process name matching.
|
||||
|
||||
set -g @resurrect-processes '"~rails server"' # OK
|
||||
|
||||
The above option says: "restore full process if `rails server` string is found
|
||||
ANYWHERE in the process name".
|
||||
|
||||
If you check long process string, there is in fact a `rails server` string at
|
||||
the end, so now the process will be successfully restored.
|
||||
|
||||
> What is arrow `->` and why is is used?
|
||||
|
||||
(Please read the above clarification about tilde `~`).
|
||||
|
||||
Continuing with our `rails server` example, when the process is finally restored
|
||||
correctly it might not look pretty as you'll see the whole
|
||||
`/Users/user/.rbenv/versions/2.0.0-p481/bin/ruby script/rails server` string in
|
||||
the command line.
|
||||
|
||||
Naturally, you'd rather want to see just `rails server` (what you initially
|
||||
typed), but that information is now unfortunately lost.
|
||||
|
||||
To aid this, you can use arrow `->`:
|
||||
|
||||
set -g @resurrect-processes '"~rails server->rails server"' # OK
|
||||
|
||||
This option says: "when this process is restored use `rails server` as the
|
||||
command name".
|
||||
|
||||
Full (long) process name is now ignored and you'll see just `rails server` in
|
||||
the command line when the program is restored.
|
||||
|
||||
> Now I understand the tilde and the arrow, but things still don't work for me
|
||||
|
||||
Here's the general workflow for figuring this out:
|
||||
|
||||
- Set up your whole tmux environment manually.<br/>
|
||||
In our example case, we'd type `rails server` in a pane where we want it to
|
||||
run.
|
||||
- Save tmux env (it will get saved to `~/.tmux/resurrect/last`).
|
||||
- Open `~/.tmux/resurrect/last` file and try to find full process string for
|
||||
your program.<br/>
|
||||
Unfortunately this is a little vague but it should be easy. A smart
|
||||
thing to do for our example is to search for string `rails` in the `last`
|
||||
file.
|
||||
- Now that you know the full and the desired process string use tilde `~` and
|
||||
arrow `->` in `.tmux.conf` to make things work.
|
|
@ -0,0 +1,15 @@
|
|||
# Restoring vim and neovim sessions
|
||||
|
||||
- save vim/neovim sessions. I recommend
|
||||
[tpope/vim-obsession](https://github.com/tpope/vim-obsession) (as almost every
|
||||
plugin, it works for both vim and neovim).
|
||||
- in `.tmux.conf`:
|
||||
|
||||
# for vim
|
||||
set -g @resurrect-strategy-vim 'session'
|
||||
# for neovim
|
||||
set -g @resurrect-strategy-nvim 'session'
|
||||
|
||||
`tmux-resurrect` will now restore vim and neovim sessions if `Session.vim` file
|
||||
is present.
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
# Resurrect save dir
|
||||
|
||||
By default Tmux environment is saved to a file in `~/.tmux/resurrect` dir.
|
||||
Change this with:
|
||||
|
||||
set -g @resurrect-dir '/some/path'
|
2
filesystem/root/.tmux/plugins/tmux-resurrect/lib/tmux-test/.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
.vagrant/
|
||||
lib/
|
|
@ -0,0 +1,14 @@
|
|||
# generic packages and latest Tmux 1.9a
|
||||
before_install:
|
||||
- sudo apt-get update
|
||||
- sudo apt-get install -y git-core expect
|
||||
- sudo apt-get install -y python-software-properties software-properties-common
|
||||
- sudo add-apt-repository -y ppa:pi-rho/dev
|
||||
- sudo apt-get update
|
||||
- sudo apt-get install -y tmux=1.9a-1~ppa1~p
|
||||
|
||||
install:
|
||||
- git clone https://github.com/tmux-plugins/tmux-test lib/tmux-test
|
||||
- lib/tmux-test/setup
|
||||
|
||||
script: ./tests/run_tests_in_isolation
|
|
@ -0,0 +1,38 @@
|
|||
# Changelog
|
||||
|
||||
### master
|
||||
- move `setup` task to `.travis.yml` for travis tests
|
||||
- "merge" travis.yml and travis_for_plugins.yml files (no need to keep em
|
||||
separate)
|
||||
- add more useful helper functions
|
||||
- remove tmux-test repo as a submodule from self, this causes issues with
|
||||
`$ git submodule update --recursive --init` command that some users use for
|
||||
managing other plugins
|
||||
|
||||
### v0.2.0, 2015-02-22
|
||||
- `setup` script gitignores `tests/helpers.sh`
|
||||
- move `tests/helpers.sh` to `tests/helpers/helpers.sh`
|
||||
- `setup` undo removes added lines from gitignore file
|
||||
|
||||
### v0.1.0, 2015-02-22
|
||||
- changes so that 'tmux-test' can be included with tmux plugins
|
||||
- do not gitignore submodules directory
|
||||
- add installation and usage instructions
|
||||
- copy `.travis.yml` to the project root when running `setup` script
|
||||
- add a brief mention of travis CI to the readme
|
||||
- add test helpers
|
||||
- `setup` script symlinks helpers file to `tests/` directory
|
||||
- `setup` script can undo most of its actions
|
||||
- add a tmux scripting test
|
||||
- `tmux-test` uses `tmux-test` to test itself
|
||||
- update `tmux-test` submodule
|
||||
- a different `travis.yml` for `tmux-test` and for plugins
|
||||
|
||||
### v0.0.1, 2015-02-21
|
||||
- git init
|
||||
- add vagrant provisioning scripts for ubuntu and debian
|
||||
- add a ".travis.yml" file
|
||||
- generic "run_tests" script
|
||||
- "run_tests_in_isolation" script
|
||||
- add "Vagrantfile"
|
||||
- enable passing VM names as arguments to "run_tests" script
|
|
@ -0,0 +1,19 @@
|
|||
Copyright (C) Bruno Sutic
|
||||
|
||||
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.
|
|
@ -0,0 +1,134 @@
|
|||
# tmux-test
|
||||
|
||||
[![Build Status](https://travis-ci.org/tmux-plugins/tmux-test.png?branch=master)](https://travis-ci.org/tmux-plugins/tmux-test)
|
||||
|
||||
A small framework for isolated testing of tmux plugins. Isolation is achieved by
|
||||
running the tests in `Vagrant`. Works on [travis](travis-ci.org) too.
|
||||
|
||||
Extracted from [tmux plugin manager](https://github.com/tmux-plugins/tpm) and
|
||||
[tmux-copycat](https://github.com/tmux-plugins/tmux-copycat).
|
||||
|
||||
Dependencies: `Vagrant` (no required when running on travis).
|
||||
|
||||
### Setup
|
||||
|
||||
Let's say you made tmux plugin with the following file hierarchy:
|
||||
|
||||
```text
|
||||
/tmux-plugin
|
||||
|-- plugin.tmux
|
||||
`-- scripts
|
||||
`-- plugin_script.sh
|
||||
```
|
||||
|
||||
From your project root directory (tmux-plugin/) execute the following shell
|
||||
command to fetch `tmux-test` and add it as a submodule:
|
||||
|
||||
$ git submodule add https://github.com/tmux-plugins/tmux-test.git lib/tmux-test
|
||||
|
||||
Run the `setup` script:
|
||||
|
||||
$ lib/tmux-test/setup
|
||||
|
||||
The project directory will now look like this (additions have comments):
|
||||
|
||||
```text
|
||||
/tmux-plugin
|
||||
|-- plugin.tmux
|
||||
|-- run_tests # symlink, gitignored
|
||||
|-- .gitignore # 2 lines appended to gitignore
|
||||
|-- .travis.yml # added
|
||||
|-- lib/tmux-test/ # git submodule
|
||||
|-- scripts
|
||||
| `-- plugin_script.sh
|
||||
`-- tests # dir to put the tests in
|
||||
`-- run_tests_in_isolation.sh # symlink, gitignored
|
||||
`-- helpers
|
||||
`-- helpers.sh # symlinked bash helpers, gitignored
|
||||
```
|
||||
|
||||
`tmux-test` is now set up. You are ok to commit the additions to the repo.
|
||||
|
||||
### Writing and running tests
|
||||
|
||||
A test is any executable with a name starting with `test_` in `tests/`
|
||||
directory.
|
||||
|
||||
Now that you installed `tmux-test` let's create an example test.
|
||||
|
||||
- create a `tests/test_example.sh` file with the following content (it's a
|
||||
`bash` script but it can be any executable):
|
||||
|
||||
#/usr/bin/env bash
|
||||
|
||||
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
# bash helpers provided by 'tmux-test'
|
||||
source $CURRENT_DIR/helpers/helpers.sh
|
||||
|
||||
# installs plugin from current repo in Vagrant (or on Travis)
|
||||
install_tmux_plugin_under_test_helper
|
||||
|
||||
# start tmux in background (plugin under test is sourced)
|
||||
tmux new -d
|
||||
|
||||
# get first session name
|
||||
session_name="$(tmux list-sessions -F "#{session_name}")"
|
||||
|
||||
# fail the test if first session name is not "0"
|
||||
if [ "$session_name" == "0" ]; then
|
||||
# fail_helper is also provided by 'tmux-test'
|
||||
fail_helper "First session name is not '0' by default"
|
||||
fi
|
||||
|
||||
# sets the right script exit code ('tmux-test' helper)
|
||||
exit_helper
|
||||
|
||||
- make the test file executable with `$ chmod +x tests/test_example.sh`
|
||||
- run the test by executing `./run_tests` from the project root directory
|
||||
- the first invocation might take some time because Vagrant's ubuntu virtual
|
||||
machine is downloading. You should see `Success, tests pass!` message when it's
|
||||
done.
|
||||
|
||||
Check out more example test scripts in this project's [tests/ directory](tests/).
|
||||
|
||||
### Continuous integration
|
||||
|
||||
The setup script (`lib/tmux-test/setup`) added a `.travis.yml` file to the
|
||||
project root. To setup continuous integration, just add/enable the project on
|
||||
[travis](travis-ci.org).
|
||||
|
||||
### Notes
|
||||
|
||||
- The `tests/` directory for tests and `lib/tmux-test/` for cloning `tmux-test`
|
||||
into cannot be changed currently
|
||||
- Don't run `tests/run_tests_in_isolation` script on your local development
|
||||
environment. That's an internal test runner meant to be executed in an
|
||||
isolated environment like `vagrant` or `travis`.<br/>
|
||||
Use `./run_tests` script.
|
||||
- You can use `KEEP_RUNNING=true ./run_tests` for faster test running cycle.
|
||||
If this case `Vagrant` will keep running even after the tests are done.
|
||||
- You can use `VAGRANT_CWD=lib/tmux-text/ vagrant ssh ubuntu` for ssh login to
|
||||
`Vagrant`.
|
||||
|
||||
### Running `tmux-test` framework tests
|
||||
|
||||
`tmux-test` uses itself to test itself. To run framework tests:
|
||||
|
||||
- clone this project `$ git clone git@github.com:tmux-plugins/tmux-test.git`
|
||||
- `$ cd tmux-test`
|
||||
- run `$ ./run_framework_tests`
|
||||
|
||||
### Other goodies
|
||||
|
||||
- [tmux-copycat](https://github.com/tmux-plugins/tmux-copycat) - a plugin for
|
||||
regex searches in tmux and fast match selection
|
||||
- [tmux-continuum](https://github.com/tmux-plugins/tmux-continuum) - automatic
|
||||
restoring and continuous saving of tmux env
|
||||
|
||||
You might want to follow [@brunosutic](https://twitter.com/brunosutic) on
|
||||
twitter if you want to hear about new tmux plugins or feature updates.
|
||||
|
||||
### License
|
||||
|
||||
[MIT](LICENSE.md)
|
17
filesystem/root/.tmux/plugins/tmux-resurrect/lib/tmux-test/Vagrantfile
vendored
Normal file
|
@ -0,0 +1,17 @@
|
|||
VAGRANTFILE_API_VERSION = "2"
|
||||
|
||||
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
|
||||
|
||||
config.vm.synced_folder "../../", "/vagrant"
|
||||
|
||||
config.vm.define :ubuntu do |ubuntu|
|
||||
ubuntu.vm.box = "hashicorp/precise64"
|
||||
ubuntu.vm.provision "shell", path: "vagrant_ubuntu_provisioning.sh"
|
||||
end
|
||||
|
||||
config.vm.define :centos do |centos|
|
||||
centos.vm.box = "chef/centos-6.5"
|
||||
centos.vm.provision "shell", path: "vagrant_centos_provisioning.sh"
|
||||
end
|
||||
|
||||
end
|
|
@ -0,0 +1,17 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# This file is used to run "tmux-test" framework tests.
|
||||
|
||||
# "setup" script is needed to run the tests, but it overrides some working dir
|
||||
# files. To address that, "setup" is run before the tests and it's actions are
|
||||
# undone after.
|
||||
|
||||
main() {
|
||||
git clone https://github.com/tmux-plugins/tmux-test lib/tmux-test
|
||||
lib/tmux-test/setup
|
||||
./run_tests
|
||||
local exit_value=$?
|
||||
lib/tmux-test/setup "undo"
|
||||
exit "$exit_value"
|
||||
}
|
||||
main
|
91
filesystem/root/.tmux/plugins/tmux-resurrect/lib/tmux-test/run_tests
Executable file
|
@ -0,0 +1,91 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# This file is a symlink from 'tmux-test' plugin.
|
||||
# You probably don't want to edit it.
|
||||
|
||||
# Invoke this script when running a test suite.
|
||||
# Example invocations:
|
||||
# ./run_tests # runs tests on default VM ubuntu
|
||||
# ./run_tests ubuntu # runs tests on ubuntu VM
|
||||
# ./run_tests ubuntu centos # runs tests on ubuntu and cents VMs
|
||||
|
||||
# For each virtual machine where tests run, this script performs the following:
|
||||
# - starts VM
|
||||
# - starts the test suite witin a VM
|
||||
# - stops the VM after the test suite is done
|
||||
|
||||
export BOXES="$*"
|
||||
|
||||
# global variable for script exit value
|
||||
export EXIT_VALUE=0
|
||||
|
||||
register_failing_tests() {
|
||||
EXIT_VALUE=1
|
||||
}
|
||||
|
||||
run_vagrant() {
|
||||
local box="$1"
|
||||
VAGRANT_CWD=lib/tmux-test/ vagrant up "$box"
|
||||
}
|
||||
|
||||
# Halt vagrant after tests are done running, unless KEEP_RUNNING environment
|
||||
# variable is set to 'true'.
|
||||
stop_vagrant() {
|
||||
local box="$1"
|
||||
if [ -z "$KEEP_RUNNING" ]; then
|
||||
VAGRANT_CWD=lib/tmux-test/ vagrant halt "$box"
|
||||
else
|
||||
echo
|
||||
echo "KEEP_RUNNING is set. Vagrant not halted."
|
||||
fi
|
||||
}
|
||||
|
||||
run_tests() {
|
||||
local box="$1"
|
||||
local test_file="/vagrant/tests/run_tests_in_isolation"
|
||||
echo "Running test suite on $box from: $test_file"
|
||||
echo
|
||||
VAGRANT_CWD=lib/tmux-test/ vagrant ssh "$box" -c "cd /vagrant; $test_file"
|
||||
}
|
||||
|
||||
exit_message() {
|
||||
local exit_val="$1"
|
||||
echo
|
||||
if [ "$exit_val" == 0 ]; then
|
||||
echo "Success, tests pass!"
|
||||
else
|
||||
echo "Tests failed!" 1>&2
|
||||
fi
|
||||
}
|
||||
|
||||
run_tests_on_vm() {
|
||||
local vm="$1"
|
||||
run_vagrant "$vm"
|
||||
run_tests "$vm"
|
||||
local tests_exit_value="$?"
|
||||
stop_vagrant "$vm"
|
||||
if [ "$tests_exit_value" -gt 0 ]; then
|
||||
register_failing_tests
|
||||
fi
|
||||
}
|
||||
|
||||
run_tests_on_virtual_machines() {
|
||||
if [ -z "$BOXES" ]; then
|
||||
# no script arguments, run on 'ubuntu' by default
|
||||
run_tests_on_vm "ubuntu"
|
||||
else
|
||||
# run on VMs provided as script arguments
|
||||
local box
|
||||
for box in $BOXES; do
|
||||
run_tests_on_vm "$box"
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
echo "$BOXES"
|
||||
run_tests_on_virtual_machines
|
||||
exit_message "$EXIT_VALUE"
|
||||
exit "$EXIT_VALUE"
|
||||
}
|
||||
main
|
93
filesystem/root/.tmux/plugins/tmux-resurrect/lib/tmux-test/setup
Executable file
|
@ -0,0 +1,93 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# invoke this script from your projects root directory
|
||||
|
||||
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
# pass "undo" as a script arg to undo most of the setup actions
|
||||
UNDO_SETUP="$1"
|
||||
undo() {
|
||||
[ "$UNDO_SETUP" == "undo" ]
|
||||
}
|
||||
|
||||
restore() {
|
||||
local file="$1"
|
||||
rm -f "$file"
|
||||
git checkout -- "$file" 2>/dev/null
|
||||
}
|
||||
|
||||
gitignore() {
|
||||
local file="$1"
|
||||
grep -q "^${file}$" .gitignore 2>/dev/null || echo "$file" >> .gitignore
|
||||
}
|
||||
|
||||
remove_from_gitignore() {
|
||||
local file="$1"
|
||||
local escaped_filename="$(echo "$file" | sed "s,/,\\\/,g")"
|
||||
sed -i"" "/^${escaped_filename}$/d" .gitignore
|
||||
}
|
||||
|
||||
add_files_to_gitignore() {
|
||||
if ! undo; then
|
||||
gitignore "run_tests"
|
||||
gitignore "tests/run_tests_in_isolation"
|
||||
gitignore "tests/helpers/helpers.sh"
|
||||
else
|
||||
remove_from_gitignore "run_tests"
|
||||
remove_from_gitignore "tests/run_tests_in_isolation"
|
||||
remove_from_gitignore "tests/helpers/helpers.sh"
|
||||
fi
|
||||
}
|
||||
|
||||
symlink_user_test_runner() {
|
||||
local file="run_tests"
|
||||
if ! undo; then
|
||||
ln -sf "lib/tmux-test/${file}" "$file"
|
||||
else
|
||||
restore "$file"
|
||||
fi
|
||||
}
|
||||
|
||||
create_directory_for_tests() {
|
||||
if ! undo; then
|
||||
mkdir -p tests/helpers/
|
||||
fi
|
||||
}
|
||||
|
||||
symlink_internal_test_runner() {
|
||||
local file="tests/run_tests_in_isolation"
|
||||
if ! undo; then
|
||||
ln -sf "../lib/tmux-test/${file}" "$file"
|
||||
else
|
||||
restore "$file"
|
||||
fi
|
||||
}
|
||||
|
||||
symlink_test_helpers() {
|
||||
local file="tests/helpers/helpers.sh"
|
||||
if ! undo; then
|
||||
ln -sf "../../lib/tmux-test/${file}" "$file"
|
||||
else
|
||||
restore "$file"
|
||||
fi
|
||||
}
|
||||
|
||||
copy_travis_yml() {
|
||||
local file=".travis.yml"
|
||||
if ! undo; then
|
||||
cp "lib/tmux-test/${file}" "$file"
|
||||
else
|
||||
restore "$file"
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
add_files_to_gitignore
|
||||
symlink_user_test_runner
|
||||
create_directory_for_tests
|
||||
symlink_internal_test_runner
|
||||
symlink_test_helpers
|
||||
copy_travis_yml
|
||||
}
|
||||
main
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
# This file is a symlink from 'tmux-test' plugin.
|
||||
# You probably don't want to edit it.
|
||||
|
||||
|
||||
# Global variable that keeps the value of test status (success/fail).
|
||||
# Suggested usage is via `fail_helper` and `exit_helper` functions.
|
||||
TEST_STATUS="success"
|
||||
|
||||
# PRIVATE FUNCTIONS
|
||||
|
||||
_teardown() {
|
||||
rm -f ~/.tmux.conf
|
||||
rm -rf ~/.tmux/
|
||||
tmux kill-server >/dev/null 2>&1
|
||||
}
|
||||
|
||||
_clone_the_plugin() {
|
||||
local plugin_path="${HOME}/.tmux/plugins/tmux-plugin-under-test/"
|
||||
rm -rf "$plugin_path"
|
||||
git clone --recursive "${CURRENT_DIR}/../" "$plugin_path" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
_add_plugin_to_tmux_conf() {
|
||||
set_tmux_conf_helper<<-HERE
|
||||
run-shell '~/.tmux/plugins/tmux-plugin-under-test/*.tmux'
|
||||
HERE
|
||||
}
|
||||
|
||||
# PUBLIC HELPER FUNCTIONS
|
||||
|
||||
set_tmux_conf_helper() {
|
||||
> ~/.tmux.conf # empty tmux.conf file
|
||||
while read -r line; do
|
||||
echo "$line" >> ~/.tmux.conf
|
||||
done
|
||||
}
|
||||
|
||||
fail_helper() {
|
||||
local message="$1"
|
||||
echo "$message" >&2
|
||||
TEST_STATUS="fail"
|
||||
}
|
||||
|
||||
exit_helper() {
|
||||
_teardown
|
||||
if [ "$TEST_STATUS" == "fail" ]; then
|
||||
echo "FAIL!"
|
||||
echo
|
||||
exit 1
|
||||
else
|
||||
echo "SUCCESS"
|
||||
echo
|
||||
exit 0
|
||||
fi
|
||||
}
|
||||
|
||||
install_tmux_plugin_under_test_helper() {
|
||||
_clone_the_plugin
|
||||
_add_plugin_to_tmux_conf
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# This file is a symlink from 'tmux-test' plugin.
|
||||
# You probably don't want to edit it.
|
||||
|
||||
# This script should be run within an isolated enviroment (Vagrant, travis).
|
||||
# Depending on what the tests do, it might NOT be safe to run this script
|
||||
# directly on the development machine.
|
||||
|
||||
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
EXIT_VALUE=0 # running a test suite is successful by default
|
||||
|
||||
test_files() {
|
||||
ls -1 "$CURRENT_DIR" | # test files are in the current dir
|
||||
\grep -i "^test" | # test file names start with "test"
|
||||
xargs # file names in a single line
|
||||
}
|
||||
|
||||
set_exit_val_to_false() {
|
||||
EXIT_VALUE=1
|
||||
}
|
||||
|
||||
run_tests() {
|
||||
local test_file
|
||||
for test_file in $(test_files); do
|
||||
echo "Running test: $test_file"
|
||||
"${CURRENT_DIR}/${test_file}"
|
||||
|
||||
# handling exit value
|
||||
local test_exit_value="$?"
|
||||
if [ "$test_exit_value" -ne 0 ]; then
|
||||
set_exit_val_to_false
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
main() {
|
||||
run_tests
|
||||
exit "$EXIT_VALUE"
|
||||
}
|
||||
main
|
|
@ -0,0 +1,3 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
exit 0
|
|
@ -0,0 +1,24 @@
|
|||
#/usr/bin/env bash
|
||||
|
||||
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
# bash helpers provided by 'tmux-test'
|
||||
source $CURRENT_DIR/helpers/helpers.sh
|
||||
|
||||
# installs plugin from current repo in Vagrant (or on Travis)
|
||||
install_tmux_plugin_under_test_helper
|
||||
|
||||
# start tmux in background (plugin under test is sourced)
|
||||
tmux new -d
|
||||
|
||||
# get first session name
|
||||
session_name="$(tmux list-sessions -F "#{session_name}")"
|
||||
|
||||
# fail the test if first session name is not "0"
|
||||
if ! [ "$session_name" == "0" ]; then
|
||||
# fail_helper is also provided by 'tmux-test'
|
||||
fail_helper "First session name is not '0' by default"
|
||||
fi
|
||||
|
||||
# sets the right script exit code ('tmux-test' helper)
|
||||
exit_helper
|
|
@ -0,0 +1,24 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
source $CURRENT_DIR/helpers/helpers.sh
|
||||
|
||||
number_of_windows() {
|
||||
tmux list-windows |
|
||||
wc -l |
|
||||
sed "s/ //g"
|
||||
}
|
||||
|
||||
main() {
|
||||
# start tmux in the background
|
||||
tmux new -d
|
||||
tmux new-window
|
||||
|
||||
local number_of_windows="$(number_of_windows)"
|
||||
if ! [ "$number_of_windows" -eq 2 ]; then
|
||||
fail_helper "Incorrect number of windows. Expected 2, got $number_of_windows"
|
||||
fi
|
||||
exit_helper
|
||||
}
|
||||
main
|
|
@ -0,0 +1,30 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# tmux installation instructions from here
|
||||
# https://gist.github.com/rschuman/6168833
|
||||
|
||||
sudo su -
|
||||
|
||||
yum -y install gcc kernel-devel make ncurses-devel
|
||||
yum -y install git-core expect vim ruby ruby-devel ruby-irb
|
||||
|
||||
# download tmux and libevent
|
||||
mkdir ~/downloads && cd ~/downloads
|
||||
curl http://sourceforge.net/projects/levent/files/latest/download?source=files -L -o libevent2.tar.gz -w 'Last URL was: %{url_effective}'
|
||||
curl http://sourceforge.net/projects/tmux/files/latest/download?source=files -L -o tmux.tar.gz -w 'Last URL was: %{url_effective}'
|
||||
|
||||
# compile libevent
|
||||
cd ~/downloads
|
||||
tar zxvf libevent2.tar.gz
|
||||
cd libevent-*-stable
|
||||
./configure --prefix=/usr/local
|
||||
make
|
||||
make install
|
||||
|
||||
# compile tmux
|
||||
cd ~/downloads
|
||||
tar zxvf tmux.tar.gz
|
||||
cd tmux-*
|
||||
LDFLAGS="-L/usr/local/lib -Wl,-rpath=/usr/local/lib" ./configure --prefix=/usr/local
|
||||
make
|
||||
make install
|
|
@ -0,0 +1,10 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y git-core expect vim
|
||||
sudo apt-get install -y python-software-properties software-properties-common
|
||||
|
||||
# install latest Tmux 1.9a
|
||||
sudo add-apt-repository -y ppa:pi-rho/dev
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y tmux=1.9a-1~ppa1~p
|
39
filesystem/root/.tmux/plugins/tmux-resurrect/resurrect.tmux
Executable file
|
@ -0,0 +1,39 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
source "$CURRENT_DIR/scripts/variables.sh"
|
||||
source "$CURRENT_DIR/scripts/helpers.sh"
|
||||
|
||||
set_save_bindings() {
|
||||
local key_bindings=$(get_tmux_option "$save_option" "$default_save_key")
|
||||
local key
|
||||
for key in $key_bindings; do
|
||||
tmux bind-key "$key" run-shell "$CURRENT_DIR/scripts/save.sh"
|
||||
done
|
||||
}
|
||||
|
||||
set_restore_bindings() {
|
||||
local key_bindings=$(get_tmux_option "$restore_option" "$default_restore_key")
|
||||
local key
|
||||
for key in $key_bindings; do
|
||||
tmux bind-key "$key" run-shell "$CURRENT_DIR/scripts/restore.sh"
|
||||
done
|
||||
}
|
||||
|
||||
set_default_strategies() {
|
||||
tmux set-option -gq "${restore_process_strategy_option}irb" "default_strategy"
|
||||
}
|
||||
|
||||
set_script_path_options() {
|
||||
tmux set-option -gq "$save_path_option" "$CURRENT_DIR/scripts/save.sh"
|
||||
tmux set-option -gq "$restore_path_option" "$CURRENT_DIR/scripts/restore.sh"
|
||||
}
|
||||
|
||||
main() {
|
||||
set_save_bindings
|
||||
set_restore_bindings
|
||||
set_default_strategies
|
||||
set_script_path_options
|
||||
}
|
||||
main
|
1
filesystem/root/.tmux/plugins/tmux-resurrect/run_tests
Symbolic link
|
@ -0,0 +1 @@
|
|||
lib/tmux-test/run_tests
|