From cc1fae8bb6182abae9d621b747fa194330f92732 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Ko=C4=8D=C3=AD?= Date: Wed, 1 Mar 2017 00:35:55 +0100 Subject: i3block improve mpd, wifi and iface --- config/i3blocks/config | 18 ++++----- config/i3blocks/scripts/iface | 88 +++++++++++++++++++++++++++++++++++++++++++ config/i3blocks/scripts/mpd | 4 +- config/i3blocks/scripts/wifi | 47 +++++++++++++++++++++++ 4 files changed, 146 insertions(+), 11 deletions(-) create mode 100755 config/i3blocks/scripts/iface create mode 100755 config/i3blocks/scripts/wifi (limited to 'config') diff --git a/config/i3blocks/config b/config/i3blocks/config index aee4139..1ff0616 100644 --- a/config/i3blocks/config +++ b/config/i3blocks/config @@ -104,19 +104,19 @@ interval=30 # If the instance is not specified, use the interface used for default route. # The address can be forced to IPv4 or IPv6 with -4 or -6 switches. [iface] -#instance=wlan0 -color=#00FF00 -interval=10 -separator=false - -[wifi] -#instance=wlp3s0 -interval=10 +command=~/.config/i3blocks/scripts/iface +instance=enp4s0 wlp3s0 +interval=2 separator=false [bandwidth] #instance=eth0 -interval=5 +interval=2 + +[wifi] +command=~/.config/i3blocks/scripts/wifi +instance=wlp3s0 +interval=2 # OpenVPN support # diff --git a/config/i3blocks/scripts/iface b/config/i3blocks/scripts/iface new file mode 100755 index 0000000..7e6ac50 --- /dev/null +++ b/config/i3blocks/scripts/iface @@ -0,0 +1,88 @@ +#!/bin/bash +# Copyright (C) 2014 Julien Bonjean +# Copyright (C) 2014 Alexander Keller + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +#------------------------------------------------------------------------ + +# Locate current default interface +D_IF=$(ip route | awk '/^default/ { print $5 ; exit }') +# Filter if it's one of chosen ones +if [[ -n $BLOCK_INSTANCE ]]; then + for INT in $BLOCK_INSTANCE; do + if [ "$INT" = "$D_IF" ]; then + IF="$D_IF" + break + fi + done +else + IF="$D_IF" +fi + +#------------------------------------------------------------------------ + +# As per #36 -- It is transparent: e.g. if the machine has no battery or wireless +# connection (think desktop), the corresponding block should not be displayed. +[[ ! -d /sys/class/net/${IF} ]] && exit +# Note this passes if IF is empty! + +#------------------------------------------------------------------------ + +# If no IF is selected then we want se down not anything else. +if [ -z "$IF" ] || [[ "$(cat /sys/class/net/$IF/operstate)" = 'down' ]]; then + echo down # full text + echo down # short text + echo \#FF0000 # color + exit +fi + +case $1 in + -4) + AF=inet ;; + -6) + AF=inet6 ;; + *) + AF=inet6? ;; +esac + +# Use the first global scope address +IPADDR=$(ip addr show $IF | perl -n -e "/$AF ([^\/]+).* scope global/ && print \$1 and exit") + +case $BLOCK_BUTTON in + 3) echo -n "$IPADDR" | xclip -q -se c ;; +esac + +#------------------------------------------------------------------------ + +echo "$IPADDR" # full text +echo "$IPADDR" # short text + +#------------------------------------------------------------------------ +# Use fast ping to check if we have connection + +# We ping only once and wait for one second +PINGV="-c 1 -w 1" +# Ping nic.cz +if ping $PINGV nic.cz >/dev/null 2>&1; then + echo \#00FF00 # color +else + if ping $PINGV 217.31.205.50 >/dev/null 2>&1; then + # No DNS + echo \#FFFF00 # color + else + # No internet connection + echo \#FF0000 # color + fi +fi diff --git a/config/i3blocks/scripts/mpd b/config/i3blocks/scripts/mpd index 0b915a6..f8a6644 100755 --- a/config/i3blocks/scripts/mpd +++ b/config/i3blocks/scripts/mpd @@ -11,10 +11,10 @@ case "$BLOCK_BUTTON" in nohup urxvt -title "Music player daemon client" -e ncmpcpp & ;; 4) - mpc next >/dev/null + mpc prev >/dev/null ;; 5) - mpc prev >/dev/null + mpc next >/dev/null ;; esac diff --git a/config/i3blocks/scripts/wifi b/config/i3blocks/scripts/wifi new file mode 100755 index 0000000..a8af5e4 --- /dev/null +++ b/config/i3blocks/scripts/wifi @@ -0,0 +1,47 @@ +#!/bin/bash +# Copyright (C) 2014 Alexander Keller + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +#------------------------------------------------------------------------ + +INTERFACE="${BLOCK_INSTANCE:-wlan0}" + +#------------------------------------------------------------------------ + +# As per #36 -- It is transparent: e.g. if the machine has no battery or wireless +# connection (think desktop), the corresponding block should not be displayed. +[[ ! -d /sys/class/net/${INTERFACE}/wireless ]] || + [[ "$(cat /sys/class/net/$INTERFACE/operstate)" = 'down' ]] && exit + +#------------------------------------------------------------------------ + +QUALITY=$(grep $INTERFACE /proc/net/wireless | awk '{ print int($3 * 100 / 70) }') +SSID=$(iwgetid $INTERFACE | sed 's/.*ESSID:"\([^"]*\)"/\1/') + +#------------------------------------------------------------------------ + +echo $SSID: $QUALITY% # full text +echo $SSID # short text + +# color +if [[ $QUALITY -ge 80 ]]; then + echo "#00FF00" +elif [[ $QUALITY -lt 80 ]]; then + echo "#FFF600" +elif [[ $QUALITY -lt 60 ]]; then + echo "#FFAE00" +elif [[ $QUALITY -lt 40 ]]; then + echo "#FF0000" +fi -- cgit v1.2.3