#!/usr/bin/env zsh PANEL_FIFO="$1" PREFIX="$2" ICONS=($(echo "$3" | tr ";" "\n")) exec 5>"$PANEL_FIFO" main() { local cmd=( $(amixer -M get Master) ) local playback_level="${cmd[-2][2,-3]}" local icon="" if [[ "${cmd[-1]}" == "[off]" ]]; then icon="${ICONS[1]}" else if [[ "$playback_level" -eq 0 ]]; then icon="${ICONS[2]}" elif [[ "$playback_level" -lt 30 ]]; then icon="${ICONS[3]}" elif [[ "$playback_level" -lt 60 ]]; then icon="${ICONS[4]}" elif [[ "$playback_level" -lt 100 ]]; then icon="${ICONS[5]}" else icon="${ICONS[6]}" fi fi REPLY="$icon $playback_level%" } {print init; stdbuf -oL alsactl monitor pulse} | while read line; do case ${line} in *Master\ Playback*|init ) main; print "$PREFIX $REPLY" >&5 ;; * ) continue ;; esac done