diff options
Diffstat (limited to '.config/herbstluftwm/panel.sh')
| -rwxr-xr-x | .config/herbstluftwm/panel.sh | 219 |
1 files changed, 0 insertions, 219 deletions
diff --git a/.config/herbstluftwm/panel.sh b/.config/herbstluftwm/panel.sh deleted file mode 100755 index 24d0e12..0000000 --- a/.config/herbstluftwm/panel.sh +++ /dev/null | |||
| @@ -1,219 +0,0 @@ | |||
| 1 | #!/bin/bash | ||
| 2 | |||
| 3 | hc() { | ||
| 4 | "${herbstclient_command[@]:-herbstclient}" "$@" ; | ||
| 5 | } | ||
| 6 | |||
| 7 | add_alpha_channel(){ | ||
| 8 | echo "$1" | \ | ||
| 9 | sed "s/.*#\([0-9a-fA-F]*\).*/#ff\1/" | ||
| 10 | } | ||
| 11 | |||
| 12 | monitor=${1:-0} | ||
| 13 | panel_height=$2 | ||
| 14 | padding=$3 | ||
| 15 | |||
| 16 | light=$(add_alpha_channel $WM_LIGHT) | ||
| 17 | llight=$(add_alpha_channel $WM_LLIGHT) | ||
| 18 | accent=$(add_alpha_channel $WM_ACCENT) | ||
| 19 | ldark=$(add_alpha_channel $WM_LDARK) | ||
| 20 | dark=$(add_alpha_channel $WM_DARK) | ||
| 21 | |||
| 22 | font="-*-fixed-medium-*-*-*-14-*-*-*-*-*-*-*" | ||
| 23 | #font="" | ||
| 24 | selected_bg=$accent | ||
| 25 | normal_bg=$dark | ||
| 26 | selected_txt=$dark | ||
| 27 | normal_txt=$light | ||
| 28 | inactive_txt=$llight | ||
| 29 | |||
| 30 | geometry=( $(herbstclient monitor_rect "$monitor") ) | ||
| 31 | if [ -z "$geometry" ] ;then | ||
| 32 | echo "Invalid monitor $monitor" | ||
| 33 | exit 1 | ||
| 34 | fi | ||
| 35 | # geometry has the format W H X Y | ||
| 36 | x=$(echo "${geometry[0]} + $padding" | bc) | ||
| 37 | y=$(echo "${geometry[1]} + $padding" | bc) | ||
| 38 | panel_width=$(echo "${geometry[2]} - (2 * $padding)" | bc) | ||
| 39 | bar_opts="-g ${panel_width}x${panel_height}+${x}+${y} -f ${font} -u 2 -B ${normal_bg} -F ${normal_txt}" | ||
| 40 | |||
| 41 | hc pad $monitor $(echo "$panel_height + $padding" | bc) | ||
| 42 | |||
| 43 | if awk -Wv 2>/dev/null | head -1 | grep -q '^mawk'; then | ||
| 44 | # mawk needs "-W interactive" to line-buffer stdout correctly | ||
| 45 | # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=593504 | ||
| 46 | uniq_linebuffered() { | ||
| 47 | awk -W interactive '$0 != l { print ; l=$0 ; fflush(); }' "$@" | ||
| 48 | } | ||
| 49 | else | ||
| 50 | # other awk versions (e.g. gawk) issue a warning with "-W interactive", so | ||
| 51 | # we don't want to use it there. | ||
| 52 | uniq_linebuffered() { | ||
| 53 | awk '$0 != l { print ; l=$0 ; fflush(); }' "$@" | ||
| 54 | } | ||
| 55 | fi | ||
| 56 | |||
| 57 | { | ||
| 58 | ### Event generator ### | ||
| 59 | # <eventname>\t<data> [...] | ||
| 60 | # e.g. | ||
| 61 | # date ^fg(#efefef)18:33^fg(#909090), 2013-10-^fg(#efefef)29 | ||
| 62 | |||
| 63 | while true ; do | ||
| 64 | # Volume | ||
| 65 | if pgrep pulseaudio > /dev/null ; then | ||
| 66 | volumes=$(\ | ||
| 67 | amixer get Master | \ | ||
| 68 | grep "Mono: Playback"\ | ||
| 69 | ) | ||
| 70 | vol=$(\ | ||
| 71 | echo $volumes | \ | ||
| 72 | sed "s/.*\[\([0-9]*\)%\].*/\1/"\ | ||
| 73 | ) | ||
| 74 | if [ -z $vol ] ; then | ||
| 75 | echo -e "volume\toff" | ||
| 76 | elif [ $vol -le 0 ] ; then | ||
| 77 | echo -e "volume\t%{F$normal_txt}Volume muted" | ||
| 78 | else | ||
| 79 | echo -e "volume\t%{F$normal_txt}Volume: $vol%%%{F-}" | ||
| 80 | fi | ||
| 81 | else | ||
| 82 | echo -e "volume\toff" | ||
| 83 | fi | ||
| 84 | |||
| 85 | # Network | ||
| 86 | iwconfig=$(iwconfig wlp3s0) | ||
| 87 | if [ -z $iwconfig ] ; then | ||
| 88 | echo -e "net\toff" | ||
| 89 | else | ||
| 90 | ssid=$(\ | ||
| 91 | echo $iwconfig | \ | ||
| 92 | sed "s/.*ESSID:\(\".*\"\).*/\1/" | \ | ||
| 93 | sed "s/.*\(off\/any\).*/\"\1\"/" | \ | ||
| 94 | sed "s/.*\"\(.*\)\".*/\1/"\ | ||
| 95 | ) | ||
| 96 | if [ $ssid = "off/any" ] ; then | ||
| 97 | ifconf=$ | ||
| 98 | echo -e "net\t%{F$normal_txt}Net: No connection%{F-}" | ||
| 99 | else | ||
| 100 | echo -e "net\t%{F$normal_txt}Net: $ssid%{F-}" | ||
| 101 | fi | ||
| 102 | fi | ||
| 103 | |||
| 104 | # Battery | ||
| 105 | if $(test -e /sys/class/power_supply/BAT1) ; then | ||
| 106 | bat_lvl=$(cat /sys/class/power_supply/BAT1/capacity) | ||
| 107 | if [ $bat_lvl -lt 15 ] ; then | ||
| 108 | bat_color=$accent | ||
| 109 | else | ||
| 110 | bat_color=$normal_txt | ||
| 111 | fi | ||
| 112 | state=$(cat /sys/class/power_supply/BAT1/status) | ||
| 113 | echo -e "battery\t%{F$normal_txt}$state: %{F$bat_color}$bat_lvl%{F$normal_txt}%%%{F-}" | ||
| 114 | else | ||
| 115 | echo -e "battery\toff" | ||
| 116 | fi | ||
| 117 | |||
| 118 | # Time | ||
| 119 | echo -e $(date +$"date\t%{F$normal_txt}%H:%M:%S %{F$inactive_txt}(%d-%m-%Y)%{F-}") | ||
| 120 | sleep 1 || break | ||
| 121 | done > >(uniq_linebuffered) & | ||
| 122 | childpid=$! | ||
| 123 | hc --idle | ||
| 124 | kill $childpid | ||
| 125 | } 2> /dev/null | { | ||
| 126 | |||
| 127 | IFS=$'\t' read -ra tags <<< "$(hc tag_status $monitor)" | ||
| 128 | visible=true | ||
| 129 | date="" | ||
| 130 | volume="" | ||
| 131 | battery="" | ||
| 132 | net="" | ||
| 133 | windowtitle="" | ||
| 134 | while true ; do | ||
| 135 | separator="%{F$accent}|%{F-}" | ||
| 136 | # draw tags | ||
| 137 | for i in "${tags[@]}" ; do | ||
| 138 | case ${i:0:1} in | ||
| 139 | '#') | ||
| 140 | echo -n "%{U$accent+u}%{B-}%{F$normal_txt}" | ||
| 141 | ;; | ||
| 142 | '+') | ||
| 143 | echo -n "%{B$accent}%{F$normal_bg}" | ||
| 144 | ;; | ||
| 145 | ':') | ||
| 146 | echo -n "%{B-}%{F$normal_txt}" | ||
| 147 | ;; | ||
| 148 | '!') | ||
| 149 | echo -n "%{B$normal_txt}%{F$normal_bg}" | ||
| 150 | ;; | ||
| 151 | *) | ||
| 152 | echo -n "%{B-}%{F$inactive_txt}" | ||
| 153 | ;; | ||
| 154 | esac | ||
| 155 | echo -n "%{A:tag,${i:1}:} ${i:1} %{A}%{F-}%{B-}%{U-u}" | ||
| 156 | done | ||
| 157 | echo -n "$separator" | ||
| 158 | echo -n "%{B-}%{F-} ${windowtitle//^/^^}" | ||
| 159 | |||
| 160 | #Right part of panel | ||
| 161 | right="$volume$net$battery$date " | ||
| 162 | echo -n "%{r}$right" | ||
| 163 | echo | ||
| 164 | |||
| 165 | # wait for next event | ||
| 166 | IFS=$'\t' read -ra cmd || break | ||
| 167 | case "${cmd[0]}" in | ||
| 168 | tag*) | ||
| 169 | #echo "resetting tags" >&2 | ||
| 170 | IFS=$'\t' read -ra tags <<< "$(hc tag_status $monitor)" | ||
| 171 | ;; | ||
| 172 | volume) | ||
| 173 | volume="${cmd[@]:1}" | ||
| 174 | if [ $volume == "off" ] ; then | ||
| 175 | volume="" | ||
| 176 | else | ||
| 177 | volume="$volume $separator%{B-} " | ||
| 178 | fi | ||
| 179 | ;; | ||
| 180 | net) | ||
| 181 | net="${cmd[@]:1}" | ||
| 182 | if [ $net = "off" ] ; then | ||
| 183 | net="" | ||
| 184 | else | ||
| 185 | net="$net $separator%{B-} " | ||
| 186 | fi | ||
| 187 | ;; | ||
| 188 | battery) | ||
| 189 | battery="${cmd[@]:1}" | ||
| 190 | if [ $battery == "off" ] ; then | ||
| 191 | battery="" | ||
| 192 | else | ||
| 193 | battery="$battery $separator%{B-} " | ||
| 194 | fi | ||
| 195 | ;; | ||
| 196 | date) | ||
| 197 | #echo "resetting date" >&2 | ||
| 198 | date="${cmd[@]:1}" | ||
| 199 | ;; | ||
| 200 | focus_changed|window_title_changed) | ||
| 201 | windowtitle="${cmd[@]:2}" | ||
| 202 | ;; | ||
| 203 | esac | ||
| 204 | done | ||
| 205 | } 2> /dev/null | bar $bar_opts | { | ||
| 206 | #Handle clickable areas | ||
| 207 | while read line; do | ||
| 208 | IFS=',' read -a c <<< $(echo $line) | ||
| 209 | case "${c[0]}" in | ||
| 210 | tag) | ||
| 211 | herbstclient use "${c[1]}" | ||
| 212 | echo "herbstclient use \"${c[1]}\"" | ||
| 213 | ;; | ||
| 214 | *) | ||
| 215 | echo "${c[0]}: not valid command" | ||
| 216 | ;; | ||
| 217 | esac | ||
| 218 | done | ||
| 219 | } | ||
