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