diff --git a/.gitattributes b/.gitattributes new file mode 100755 index 0000000..162dd30 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +# Force text files to have unix eols, so Windows/Cygwin does not break them +*.* eol=lf +*.png -text diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100755 index 0000000..f74594e --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,4 @@ +# Changelog + +### v0.1.0, 2020-07-30 +- Initial release diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..2815ec5 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,13 @@ +## Sending PR's + +1. Fork repo +2. Create your feature branch: `git checkout -b my-new-feature` +3. Commit your changes: `git commit -am "Add some feature"` +4. Push to the branch: `git push -u origin my-new-feature` +5. Create new Pull Request + +## Submitting a Pull Request + +Please go through [existing issues](../../issues/) and [pull requests](../../pulls/) to check if somebody else is already working on the issue. + +#### Thank you for taking the time to contribute! 💙 💚 💛 💜 diff --git a/LICENSE.md b/LICENSE.md new file mode 100755 index 0000000..399604d --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Fedor Lukyanov + +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. diff --git a/README.md b/README.md new file mode 100755 index 0000000..174387a --- /dev/null +++ b/README.md @@ -0,0 +1,118 @@ +# Tmux Wifi Signal Strength + +Enables displaying transmit rate value and status icon in tmux status line. + +## TPM Installation + +Add plugin to the list of TPM plugins in `.tmux.conf`: + +``` +set -g @plugin 'sleekybadger/tmux-wifi-signal-strength' +``` + +Hit `prefix + I` to fetch the plugin and source it. + +If format strings are added to `status-left` or `status-right`, they should be visible now. + +## Manual Installation + +Clone the repo: + +``` +$ git clone git@github.com:sleekybadger/tmux-wifi-signal-strength.git ~/clone/path +``` + +Add this line to the bottom of `.tmux.conf`: + +``` +run-shell ~/clone/path/wifi_signal_strength.tmux +``` + +Reload TMUX environment: + +``` +$ tmux source-file ~/.tmux.conf +``` + +If format strings are added to `status-left` or `status-right`, they should now be visible. + +## Usage + +Add `#{wifi_signal_strength}`, `#{wifi_signal_strength_bg}` `#{wifi_signal_strength_fg}`, or +`#{wifi_signal_strength_icon}` format strings to `status-left` or `status-right` tmux options. + +Example: + +``` +set -g status-right "#{wifi_signal_strength_icon} #{wifi_signal_strength}" +``` + +## Examples + +Signal strength low:
+![signal strength low](/screenshots/wifi_signal_strength_high.png) + +Signal strength medium:
+![signal strength medium](/screenshots/wifi_signal_strength_medium.png) + +Signal strength high:
+![signal strength high](/screenshots/wifi_signal_strength_low.png) + +Signal absent:
+![signal absent](/screenshots/wifi_signal_strength_off.png) + +This is done by introducing new format strings that can be added to status options: +- `#{wifi_signal_strength}` - will display transmit rate value +- `#{wifi_signal_strength_icon}` - will show a icon +- `#{wifi_signal_strength_bg}` - will set the background color of the status bar based on the transmit rate value +- `#{wifi_signal_strength_fg}` - will set the foreground color of the status bar based on the transmit rate value + +## Customization + +By default, these values are used: + +| Option | Value. | Description | +| --------------------------------- | :-----------: | -------------------------------------------------------- | +| @wifi_signal_strength_high_msg | #{rate} Mb/s | Used to display rate when rate >= 200 | +| @wifi_signal_strength_medium_msg | #{rate} Mb/s | Used to display rate when rate >= 100 && rate < 200 | +| @wifi_signal_strength_low_msg | #{rate} Mb/s | Used to display rate when rate > 0 && rate < 100 | +| @wifi_signal_strength_off_msg | Off | Used to display rate when rate == 0 | +| @wifi_signal_strength_high_bg | colour015 | Used for background color when rate >= 200 | +| @wifi_signal_strength_medium_bg | colour015 | Used for background color when rate >= 100 && rate < 200 | +| @wifi_signal_strength_low_bg | colour015 | Used for background color when rate > 0 && rate < 100 | +| @wifi_signal_strength_off_bg | colour015 | Used for background color when rate == 0 | +| @wifi_signal_strength_high_fg | colour034 | Used for foreground color when rate >= 200 | +| @wifi_signal_strength_medium_fg | colour202 | Used for foreground color when rate >= 100 && rate < 200 | +| @wifi_signal_strength_low_fg | colour196 | Used for foreground color when rate > 0 && rate < 100 | +| @wifi_signal_strength_off_fg | colour000 | Used for foreground color when rate == 0 | +| @wifi_signal_strength_high_icon | █ | Used for status icon when rate >= 200 | +| @wifi_signal_strength_medium_icon | ▆ | Used for status icon when rate >= 100 && rate < 200 | +| @wifi_signal_strength_low_icon | ▄ | Used for status icon when rate > 0 && rate < 100 | +| @wifi_signal_strength_off_icon | | Used for status icon when rate == 0 | + +You can change these defaults by adding the following to `.tmux.conf`: + +``` +set -g @wifi_signal_strength_high_msg "Hello world #{rate}" +set -g @wifi_signal_strength_low_bg "colour000" +set -g @wifi_signal_strength_medium_fg "colour201" +set -g @wifi_signal_strength_off_icon "⮃" +``` + +Don't forget to reload tmux environment after you do this: + +``` +$ tmux source-file ~/.tmux.conf +``` + +## History + +See [changelog](CHANGELOG.md). + +## Contributing + +See [contribution guidelines](CONTRIBUTING.md). + +## License + +Tmux Wifi Signal Strength is released under the [MIT](LICENSE.md) license. diff --git a/screenshots/wifi_signal_strength_high.png b/screenshots/wifi_signal_strength_high.png new file mode 100644 index 0000000..95ae121 Binary files /dev/null and b/screenshots/wifi_signal_strength_high.png differ diff --git a/screenshots/wifi_signal_strength_low.png b/screenshots/wifi_signal_strength_low.png new file mode 100644 index 0000000..ad50be2 Binary files /dev/null and b/screenshots/wifi_signal_strength_low.png differ diff --git a/screenshots/wifi_signal_strength_medium.png b/screenshots/wifi_signal_strength_medium.png new file mode 100644 index 0000000..3c83356 Binary files /dev/null and b/screenshots/wifi_signal_strength_medium.png differ diff --git a/screenshots/wifi_signal_strength_off.png b/screenshots/wifi_signal_strength_off.png new file mode 100644 index 0000000..9030721 Binary files /dev/null and b/screenshots/wifi_signal_strength_off.png differ diff --git a/scripts/helpers.sh b/scripts/helpers.sh new file mode 100755 index 0000000..1b1893a --- /dev/null +++ b/scripts/helpers.sh @@ -0,0 +1,41 @@ +set_tmux_option() { + local option="$1" + local value="$2" + + echo "$option" + echo "$value" + + tmux set-option -gqo "$option" "$value" +} + +get_tmux_option() { + local option="$1" + local default_value="$2" + + local option_value="$(tmux show-option -gqv "$option")" + if [ "$option_value" = "__wifi_signal_strength_default__" ]; then + echo "$default_value" + else + echo "$option_value" + fi +} + +is_osx() { + [ $(uname) == "Darwin" ] +} + +get_tx_rate_from_airport() { + local wireless_info="$(airport -I | grep "lastTxRate" | sed "s/.*: //")" + + if [ -z "$wireless_info" ]; then + echo "0" + else + echo $wireless_info + fi +} + +get_tx_rate() { + if is_osx; then + get_tx_rate_from_airport + fi +} diff --git a/scripts/variables.sh b/scripts/variables.sh new file mode 100755 index 0000000..1a7fcd8 --- /dev/null +++ b/scripts/variables.sh @@ -0,0 +1,47 @@ +wifi_signal_strength_high_msg_option="@wifi_signal_strength_high_msg" +wifi_signal_strength_high_msg_default="\#{rate} Mb/s" + +wifi_signal_strength_medium_msg_option="@wifi_signal_strength_medium_msg" +wifi_signal_strength_medium_msg_default="\#{rate} Mb/s" + +wifi_signal_strength_low_msg_option="@wifi_signal_strength_low_msg" +wifi_signal_strength_low_msg_default="\#{rate} Mb/s" + +wifi_signal_strength_off_msg_option="@wifi_signal_strength_off_msg" +wifi_signal_strength_off_msg_default="Off" + +wifi_signal_strength_high_bg_option="@wifi_signal_strength_high_bg" +wifi_signal_strength_high_bg_default="colour015" + +wifi_signal_strength_medium_bg_option="@wifi_signal_strength_medium_bg" +wifi_signal_strength_medium_bg_default="colour015" + +wifi_signal_strength_low_bg_option="@wifi_signal_strength_low_bg" +wifi_signal_strength_low_bg_default="colour015" + +wifi_signal_strength_off_bg_option="@wifi_signal_strength_off_bg" +wifi_signal_strength_off_bg_default="colour015" + +wifi_signal_strength_high_fg_option="@wifi_signal_strength_high_fg" +wifi_signal_strength_high_fg_default="colour034" + +wifi_signal_strength_medium_fg_option="@wifi_signal_strength_medium_fg" +wifi_signal_strength_medium_fg_default="colour202" + +wifi_signal_strength_low_fg_option="@wifi_signal_strength_low_fg" +wifi_signal_strength_low_fg_default="colour196" + +wifi_signal_strength_off_fg_option="@wifi_signal_strength_off_fg" +wifi_signal_strength_off_fg_default="colour000" + +wifi_signal_strength_high_icon_option="@wifi_signal_strength_high_icon" +wifi_signal_strength_high_icon_default="█" + +wifi_signal_strength_medium_icon_option="@wifi_signal_strength_medium_icon" +wifi_signal_strength_medium_icon_default="▆" + +wifi_signal_strength_low_icon_option="@wifi_signal_strength_low_icon" +wifi_signal_strength_low_icon_default="▄" + +wifi_signal_strength_off_icon_option="@wifi_signal_strength_off_icon" +wifi_signal_strength_off_icon_default="" diff --git a/scripts/wifi_signal_strength.sh b/scripts/wifi_signal_strength.sh new file mode 100755 index 0000000..181d990 --- /dev/null +++ b/scripts/wifi_signal_strength.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env bash + +CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +source "$CURRENT_DIR/variables.sh" +source "$CURRENT_DIR/helpers.sh" + +interpolate() { + local message="$1" + local value="$2" + + echo "${message//"\#{rate}"/$value}" +} + +print_wifi_signal_strength() { + local tx_rate="$(get_tx_rate)" + local message + + if [ $tx_rate -gt 200 ]; then + message="$(get_tmux_option "$wifi_signal_strength_high_msg_option" "$wifi_signal_strength_high_msg_default")" + elif [ $tx_rate -gt 100 ]; then + message="$(get_tmux_option "$wifi_signal_strength_medium_msg_option" "$wifi_signal_strength_medium_msg_default")" + elif [ $tx_rate -gt 0 ]; then + message="$(get_tmux_option "$wifi_signal_strength_low_msg_option" "$wifi_signal_strength_low_msg_default")" + elif [ $tx_rate == 0 ]; then + message="$(get_tmux_option "$wifi_signal_strength_off_msg_option" "$wifi_signal_strength_off_msg_default")" + fi + + echo "$(interpolate "$message" "$tx_rate")" +} + +main() { + print_wifi_signal_strength +} + +main diff --git a/scripts/wifi_signal_strength_bg.sh b/scripts/wifi_signal_strength_bg.sh new file mode 100755 index 0000000..88feafc --- /dev/null +++ b/scripts/wifi_signal_strength_bg.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +source "$CURRENT_DIR/variables.sh" +source "$CURRENT_DIR/helpers.sh" + +print_wifi_signal_strength_bg() { + local tx_rate="$(get_tx_rate)" + + if [ $tx_rate -gt 200 ]; then + echo $(get_tmux_option "$wifi_signal_strength_high_bg_option" "$wifi_signal_strength_high_bg_default") + elif [ $tx_rate -gt 100 ]; then + echo $(get_tmux_option "$wifi_signal_strength_medium_bg_option" "$wifi_signal_strength_medium_bg_default") + elif [ $tx_rate -gt 0 ]; then + echo $(get_tmux_option "$wifi_signal_strength_low_bg_option" "$wifi_signal_strength_low_bg_default") + elif [ $tx_rate == 0 ]; then + echo $(get_tmux_option "$wifi_signal_strength_off_bg_option" "$wifi_signal_strength_off_bg_default") + fi +} + +main() { + print_wifi_signal_strength_bg +} + +main diff --git a/scripts/wifi_signal_strength_fg.sh b/scripts/wifi_signal_strength_fg.sh new file mode 100755 index 0000000..44b622c --- /dev/null +++ b/scripts/wifi_signal_strength_fg.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +source "$CURRENT_DIR/variables.sh" +source "$CURRENT_DIR/helpers.sh" + +print_wifi_signal_strength_fg() { + local tx_rate="$(get_tx_rate)" + + if [ $tx_rate -gt 200 ]; then + echo $(get_tmux_option "$wifi_signal_strength_high_fg_option" "$wifi_signal_strength_high_fg_default") + elif [ $tx_rate -gt 100 ]; then + echo $(get_tmux_option "$wifi_signal_strength_medium_fg_option" "$wifi_signal_strength_medium_fg_default") + elif [ $tx_rate -gt 0 ]; then + echo $(get_tmux_option "$wifi_signal_strength_low_fg_option" "$wifi_signal_strength_low_fg_default") + elif [ $tx_rate == 0 ]; then + echo $(get_tmux_option "$wifi_signal_strength_off_fg_option" "$wifi_signal_strength_off_fg_default") + fi +} + +main() { + print_wifi_signal_strength_fg +} + +main diff --git a/scripts/wifi_signal_strength_icon.sh b/scripts/wifi_signal_strength_icon.sh new file mode 100755 index 0000000..8b306a4 --- /dev/null +++ b/scripts/wifi_signal_strength_icon.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +source "$CURRENT_DIR/variables.sh" +source "$CURRENT_DIR/helpers.sh" + +print_wifi_signal_strength_icon() { + local tx_rate="$(get_tx_rate)" + + if [ $tx_rate -gt 200 ]; then + echo $(get_tmux_option "$wifi_signal_strength_high_icon_option" "$wifi_signal_strength_high_icon_default") + elif [ $tx_rate -gt 100 ]; then + echo $(get_tmux_option "$wifi_signal_strength_medium_icon_option" "$wifi_signal_strength_medium_icon_default") + elif [ $tx_rate -gt 0 ]; then + echo $(get_tmux_option "$wifi_signal_strength_low_icon_option" "$wifi_signal_strength_low_icon_default") + elif [ $tx_rate == 0 ]; then + echo $(get_tmux_option "$wifi_signal_strength_off_icon_option" "$wifi_signal_strength_off_icon_default") + fi +} + +main() { + print_wifi_signal_strength_icon +} + +main diff --git a/wifi_signal_strength.tmux b/wifi_signal_strength.tmux new file mode 100755 index 0000000..582c1ea --- /dev/null +++ b/wifi_signal_strength.tmux @@ -0,0 +1,71 @@ +#!/usr/bin/env bash + +CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +source "$CURRENT_DIR/scripts/variables.sh" +source "$CURRENT_DIR/scripts/helpers.sh" + +wifi_signal_strength_interpolation=( + "\#{wifi_signal_strength}" + "\#{wifi_signal_strength_bg}" + "\#{wifi_signal_strength_fg}" + "\#{wifi_signal_strength_icon}" +) + +wifi_signal_strength_commands=( + "#($CURRENT_DIR/scripts/wifi_signal_strength.sh)" + "#($CURRENT_DIR/scripts/wifi_signal_strength_bg.sh)" + "#($CURRENT_DIR/scripts/wifi_signal_strength_fg.sh)" + "#($CURRENT_DIR/scripts/wifi_signal_strength_icon.sh)" +) + +interpolate() { + local status_bar="$1" + + for ((i=0; i<${#wifi_signal_strength_commands[@]}; i++)); do + local interpolation="${wifi_signal_strength_interpolation[$i]}" + local command="${wifi_signal_strength_commands[$i]}" + + status_bar=${status_bar//$interpolation/$command} + done + + echo "$status_bar" +} + +update_status_bar() { + local side="$1" + + local option_name="status-$side" + local option_value="$(tmux show-option -gqv "$option_name")" + local next_option_value="$(interpolate "$option_value")" + + tmux set-option -gq "$option_name" "$next_option_value" +} + +set_option_defaults() { + set_tmux_option "$wifi_signal_strength_high_msg_option" "__wifi_signal_strength_default__" + set_tmux_option "$wifi_signal_strength_medium_msg_option" "__wifi_signal_strength_default__" + set_tmux_option "$wifi_signal_strength_low_msg_option" "__wifi_signal_strength_default__" + set_tmux_option "$wifi_signal_strength_off_msg_option" "__wifi_signal_strength_default__" + set_tmux_option "$wifi_signal_strength_high_bg_option" "__wifi_signal_strength_default__" + set_tmux_option "$wifi_signal_strength_medium_bg_option" "__wifi_signal_strength_default__" + set_tmux_option "$wifi_signal_strength_low_bg_option" "__wifi_signal_strength_default__" + set_tmux_option "$wifi_signal_strength_off_bg_option" "__wifi_signal_strength_default__" + set_tmux_option "$wifi_signal_strength_high_fg_option" "__wifi_signal_strength_default__" + set_tmux_option "$wifi_signal_strength_medium_fg_option" "__wifi_signal_strength_default__" + set_tmux_option "$wifi_signal_strength_low_fg_option" "__wifi_signal_strength_default__" + set_tmux_option "$wifi_signal_strength_off_fg_option" "__wifi_signal_strength_default__" + set_tmux_option "$wifi_signal_strength_high_icon_option" "__wifi_signal_strength_default__" + set_tmux_option "$wifi_signal_strength_medium_icon_option" "__wifi_signal_strength_default__" + set_tmux_option "$wifi_signal_strength_low_icon_option" "__wifi_signal_strength_default__" + set_tmux_option "$wifi_signal_strength_off_icon_option" "__wifi_signal_strength_default__" +} + +main() { + set_option_defaults + + update_status_bar "left" + update_status_bar "right" +} + +main