From 67f5cb9386454d9a3fa2517540de03c2ed6f08f3 Mon Sep 17 00:00:00 2001
From: Yigit Sever
Date: Wed, 27 Oct 2021 11:05:01 +0300
Subject: polybar: clean up the scripts
---
.config/polybar/config##h.lowe | 21 +--
.config/polybar/config##h.luchs | 15 +-
.config/polybar/config##h.maus | 16 +-
.config/polybar/focus | 46 -----
.config/polybar/notification_pause.sh | 7 -
.config/polybar/pulseaudio-control.sh | 265 -----------------------------
.config/polybar/scripts/focus | 46 +++++
.config/polybar/scripts/notification_pause | 7 +
.config/polybar/scripts/pulseaudio_control | 265 +++++++++++++++++++++++++++++
.config/polybar/scripts/stop | 46 +++++
.config/polybar/stop | 46 -----
11 files changed, 383 insertions(+), 397 deletions(-)
delete mode 100755 .config/polybar/focus
delete mode 100755 .config/polybar/notification_pause.sh
delete mode 100755 .config/polybar/pulseaudio-control.sh
create mode 100755 .config/polybar/scripts/focus
create mode 100755 .config/polybar/scripts/notification_pause
create mode 100755 .config/polybar/scripts/pulseaudio_control
create mode 100755 .config/polybar/scripts/stop
delete mode 100755 .config/polybar/stop
(limited to '.config/polybar')
diff --git a/.config/polybar/config##h.lowe b/.config/polybar/config##h.lowe
index 9c1ae06..caebed7 100644
--- a/.config/polybar/config##h.lowe
+++ b/.config/polybar/config##h.lowe
@@ -79,8 +79,9 @@ label-offline = Github offline
[module/focus]
type = custom/script
-exec = ~/.config/polybar/focus
-interval = 10
+exec = ~/.config/polybar/scripts/focus
+double-click-left = exec ~/.config/polybar/scripts/stop &
+interval = 1
[module/spotify]
type = custom/script
@@ -186,22 +187,6 @@ label-background = ${colors.background_modules}
label-foreground = ${colors.foreground_modules}
label-padding = 1
-[module/pulseaudio-control]
-type = custom/script
-tail = true
-label = %output%
-interval = 5
-
-exec = ~/.config/polybar/pulseaudio-control.sh --listen
-click-right = exec pavucontrol &
-click-left = ~/.config/polybar/pulseaudio-control.sh --togmute
-click-middle = ~/.config/polybar/pulseaudio-control.sh --change
-scroll-up = ~/.config/polybar/pulseaudio-control.sh --up
-scroll-down = ~/.config/polybar/pulseaudio-control.sh --down
-label-padding = 2
-label-foreground = ${colors.foreground_modules}
-label-background = ${colors.background_modules}
-
[settings]
screenchange-reload = true
compositing-background = source
diff --git a/.config/polybar/config##h.luchs b/.config/polybar/config##h.luchs
index 4cf066d..c7fc4af 100644
--- a/.config/polybar/config##h.luchs
+++ b/.config/polybar/config##h.luchs
@@ -78,8 +78,9 @@ label-offline = Github offline
[module/focus]
type = custom/script
-exec = ~/.config/polybar/focus
-interval = 10
+exec = ~/.config/polybar/scripts/focus
+double-click-left = exec ~/.config/polybar/scripts/stop &
+interval = 1
[module/spotify]
type = custom/script
@@ -267,12 +268,12 @@ tail = true
label = %output%
interval = 5
-exec = ~/.config/polybar/pulseaudio-control.sh --listen
+exec = ~/.config/polybar/scripts/pulseaudio_control --listen
click-right = exec pavucontrol &
-click-left = ~/.config/polybar/pulseaudio-control.sh --togmute
-click-middle = ~/.config/polybar/pulseaudio-control.sh --change
-scroll-up = ~/.config/polybar/pulseaudio-control.sh --up
-scroll-down = ~/.config/polybar/pulseaudio-control.sh --down
+click-left = ~/.config/polybar/scripts/pulseaudio_control --togmute
+click-middle = ~/.config/polybar/scripts/pulseaudio_control --change
+scroll-up = ~/.config/polybar/scripts/pulseaudio_control --up
+scroll-down = ~/.config/polybar/scripts/pulseaudio_control --down
label-padding = 2
label-foreground = ${colors.foreground_modules}
label-background = ${colors.background_modules}
diff --git a/.config/polybar/config##h.maus b/.config/polybar/config##h.maus
index 3ac8a00..cf390c7 100644
--- a/.config/polybar/config##h.maus
+++ b/.config/polybar/config##h.maus
@@ -89,13 +89,13 @@ label-offline = Github offline
[module/focus]
type = custom/script
-exec = ~/.config/polybar/focus
-double-click-left = exec ~/.config/polybar/stop &
+exec = ~/.config/polybar/scripts/focus
+double-click-left = exec ~/.config/polybar/scripts/stop &
interval = 1
[module/notification_pause]
type = custom/script
-exec = ~/.config/polybar/notification_pause.sh
+exec = ~/.config/polybar/scripts/notification_pause
interval = 5
[module/spotify]
@@ -356,12 +356,12 @@ tail = true
label = %output%
interval = 5
-exec = ~/.config/polybar/pulseaudio-control.sh --listen
+exec = ~/.config/polybar/scripts/pulseaudio_control --listen
click-right = exec pavucontrol &
-click-left = ~/.config/polybar/pulseaudio-control.sh --togmute
-click-middle = ~/.config/polybar/pulseaudio-control.sh --change
-scroll-up = ~/.config/polybar/pulseaudio-control.sh --up
-scroll-down = ~/.config/polybar/pulseaudio-control.sh --down
+click-left = ~/.config/polybar/scripts/pulseaudio_control --togmute
+click-middle = ~/.config/polybar/scripts/pulseaudio_control --change
+scroll-up = ~/.config/polybar/scripts/pulseaudio_control --up
+scroll-down = ~/.config/polybar/scripts/pulseaudio_control --down
label-padding = 2
label-foreground = ${colors.foreground_modules}
label-background = ${colors.background_modules}
diff --git a/.config/polybar/focus b/.config/polybar/focus
deleted file mode 100755
index 49d46d2..0000000
--- a/.config/polybar/focus
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/env perl
-# shows active taskwarrior task on polybar
-#Copyright © 2019 yigit
-
-#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 .
-
-use strict;
-use warnings;
-use IO::CaptureOutput qw/capture_exec/;
-
-my ($stdout, $stderr, $success, $exit_code) = capture_exec("task custom_focus");
-
-if ($stderr =~ /No matches\./) {
- system 'echo "${SEMESTER_THEME}"';
- exit;
-}
-my $active_task_maybe = $stdout;
-
-$active_task_maybe =~ s/^\s+|\s+$//g;
-
-my @lines = split /\n/, $active_task_maybe;
-
-my $task = $lines[2];
-$task =~ s/^\s+|\s+$//g; # left and right trim
-$task =~ s/\s+/ /g; # reduce multiple whitespace into one
-
-my $context = `task context | grep yes | cut -d' ' -f1`;
-
-if ($task =~ m/^(.*)?\s(\d+\w+)$/g) {
- if ($context) {
- print "$1 | $2 @ $context";
- } else {
- print "$1 | $2";
- }
-}
diff --git a/.config/polybar/notification_pause.sh b/.config/polybar/notification_pause.sh
deleted file mode 100755
index 9bf6724..0000000
--- a/.config/polybar/notification_pause.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/usr/bin/env bash
-
-if ! $(dunstctl is-paused); then
- echo
-else
- printf ""
-fi
diff --git a/.config/polybar/pulseaudio-control.sh b/.config/polybar/pulseaudio-control.sh
deleted file mode 100755
index 7ba2c3f..0000000
--- a/.config/polybar/pulseaudio-control.sh
+++ /dev/null
@@ -1,265 +0,0 @@
-#!/usr/bin/env bash
-
-##################################################################
-# Polybar Pulseaudio Control #
-# https://github.com/marioortizmanero/polybar-pulseaudio-control #
-##################################################################
-
-# Script configuration (more info in the README)
-OSD="no" # On Screen Display message for KDE if enabled
-INC=2 # Increment when lowering/rising the volume
-MAX_VOL=100 # Maximum volume
-AUTOSYNC="no" # All programs have the same volume if enabled
-VOLUME_ICONS=( " " " " " " ) # Volume icons array, from lower volume to higher
-MUTED_ICON=" " # Muted volume icon
-MUTED_COLOR="%{F#A9AA83}" # Color when the audio is muted
-DEFAULT_SINK_ICON="" # The default sink icon if a custom one isn't found
-CUSTOM_SINK_ICONS=("" "") # Custom sink icons in index of sink order
-NOTIFICATIONS="no" # Notifications when switching sinks if enabled
-SINK_BLACKLIST=( ) # Index blacklist for sinks when switching between them
-
-# Environment constants
-LANGUAGE=en_US # Functions of this scripts depends on English outputs of pactl
-
-# Global script variables
-isMuted="no"
-activeSink=""
-endColor="%{F-}"
-
-function getCurVol {
- curVol=$(pacmd list-sinks | grep -A 15 'index: '"$activeSink"'' | grep 'volume:' | grep -E -v 'base volume:' | awk -F : '{print $3}' | grep -o -P '.{0,3}%'| sed s/.$// | tr -d ' ')
-}
-
-function getCurSink {
- activeSink=$(pacmd list-sinks | awk '/* index:/{print $3}')
-}
-
-function volMuteStatus {
- isMuted=$(pacmd list-sinks | grep -A 15 "index: $activeSink" | awk '/muted/{ print $2}')
-}
-
-function getSinkInputs {
- inputArray=$(pacmd list-sink-inputs | grep -B 4 "sink: $1 " | awk '/index:/{print $2}')
-}
-
-function volUp {
- getCurVol
- maxLimit=$((MAX_VOL - INC))
-
- if [ "$curVol" -le "$MAX_VOL" ] && [ "$curVol" -ge "$maxLimit" ]; then
- pactl set-sink-volume "$activeSink" "$MAX_VOL%"
- elif [ "$curVol" -lt "$maxLimit" ]; then
- pactl set-sink-volume "$activeSink" "+$INC%"
- fi
-
- getCurVol
-
- if [ ${OSD} = "yes" ]; then
- qdbus org.kde.kded /modules/kosd showVolume "$curVol" 0
- fi
-
- if [ ${AUTOSYNC} = "yes" ]; then
- volSync
- fi
-}
-
-function volDown {
- pactl set-sink-volume "$activeSink" "-$INC%"
- getCurVol
-
- if [ ${OSD} = "yes" ]; then
- qdbus org.kde.kded /modules/kosd showVolume "$curVol" 0
- fi
-
- if [ ${AUTOSYNC} = "yes" ]; then
- volSync
- fi
-}
-
-function volSync {
- getSinkInputs "$activeSink"
- getCurVol
-
- for each in $inputArray; do
- pactl set-sink-input-volume "$each" "$curVol%"
- done
-}
-
-function volMute {
- case "$1" in
- mute)
- pactl set-sink-mute "$activeSink" 1
- curVol=0
- status=1
- ;;
- unmute)
- pactl set-sink-mute "$activeSink" 0
- getCurVol
- status=0
- ;;
- esac
-
- if [ ${OSD} = "yes" ]; then
- qdbus org.kde.kded /modules/kosd showVolume ${curVol} ${status}
- fi
-
-}
-
-function changeDevice {
- # Treat pulseaudio sink list to avoid calling pacmd list-sinks twice
- o_pulseaudio=$(pacmd list-sinks| grep -e 'index' -e 'device.description')
-
- # Get all sink indices in a list
- sinks=($(echo "$o_pulseaudio" | grep index | awk -F': ' '{print $2}'))
-
- # Get present default sink index
- activeSink=$(echo "$o_pulseaudio" | grep "\* index" | awk -F': ' '{print $2}')
-
- # Set new sink index, checks that it's not in the blacklist
- newSink=$activeSink
-
- # Remove blacklist devices from the sink list
- sinks=($(comm -23 <(echo "${sinks[@]}" | tr ' ' '\n' | sort) <(echo "${SINK_BLACKLIST[@]}" | tr ' ' '\n' | sort) | tr '\n' ' '))
-
- # If the resulting list is empty, do nothing
- if [ -z "${sinks}" ]; then exit; fi
-
- # If the current sink is greater or equal than last one, pick the first
- # sink in the list. Otherwise just pick the next sink avaliable.
- if [ "${activeSink}" -ge "${sinks[-1]}" ]; then
- newSink=${sinks[0]}
- else
- for sink in "${sinks[@]}"; do
- if [ "${activeSink}" -lt "${sink}" ]; then
- newSink=$sink
- break
- fi
- done
- fi
-
- # The new sink is set
- pacmd set-default-sink "${newSink}"
-
- # Move all audio threads to new sink
- inputs=$(pactl list sink-inputs short | cut -f 1)
- for i in $inputs; do
- pacmd move-sink-input "$i" "$newSink"
- done
-
- if [ $NOTIFICATIONS = "yes" ]; then
- sendNotification
- fi
-}
-
-function sendNotification {
- o_pulseaudio=$(pacmd list-sinks| grep -e 'index' -e 'device.description')
- deviceName=$(echo "$o_pulseaudio" | sed -n '/* index/{n;p;}' | grep -o '".*"' | sed 's/"//g')
- notify-send "Output cycle" "Changed output to ${deviceName}" --icon=audio-headphones-symbolic
-}
-
-function listen {
- firstrun=0
-
- pactl subscribe 2>/dev/null | {
- while true; do
- {
- # If this is the first time just continue
- # and print the current state
- # Otherwise wait for events
- # This is to prevent the module being empty until
- # an event occurs
- if [ $firstrun -eq 0 ]
- then
- firstrun=1
- else
- read -r event || break
- if ! echo "$event" | grep -e "on card" -e "on sink" -e "on server"
- then
- # Avoid double events
- continue
- fi
- fi
- } &>/dev/null
- output
- done
- }
-}
-
-function output() {
- if [ -z "$(pgrep pulseaudio)" ]; then echo "Pulseaudio not running"; return 1; fi
-
- getCurSink
- getCurVol
- volMuteStatus
-
- # Fixed volume icons over max volume
- iconsLen="${#VOLUME_ICONS[@]}"
- if [ "$iconsLen" -ne 0 ]; then
- volSplit=$(( MAX_VOL / iconsLen ))
- for (( i=1; i<=iconsLen; i++ )); do
- if (( i*volSplit >= curVol )); then
- volIcon="${VOLUME_ICONS[$((i-1))]}"
- break
- fi
- done
- else
- volIcon=""
- fi
-
- # Uses custom sink icon if the array contains one
- sinksLen=${#CUSTOM_SINK_ICONS[@]}
- if [ "$activeSink" -le "$((sinksLen - 1))" ]; then
- sinkIcon=${CUSTOM_SINK_ICONS[$activeSink]}
- else
- sinkIcon=$DEFAULT_SINK_ICON
- fi
-
- # Showing the formatted message
- if [ "${isMuted}" = "yes" ]; then
- echo "${MUTED_COLOR}${MUTED_ICON}${curVol}% ${sinkIcon} ${activeSink}${endColor}"
- else
- echo "${volIcon}${curVol}% ${sinkIcon} ${activeSink}"
- fi
-}
-
-
-getCurSink
-case "$1" in
- --up)
- volUp
- ;;
- --down)
- volDown
- ;;
- --togmute)
- volMuteStatus
- if [ "$isMuted" = "yes" ]
- then
- volMute unmute
- else
- volMute mute
- fi
- ;;
- --mute)
- volMute mute
- ;;
- --unmute)
- volMute unmute
- ;;
- --sync)
- volSync
- ;;
- --listen)
- # Listen for changes and immediately create new output for the bar
- # This is faster than having the script on an interval
- listen
- ;;
- --change)
- # Changes the audio device
- changeDevice
- ;;
- *)
- # By default print output for bar
- output
- ;;
-esac
diff --git a/.config/polybar/scripts/focus b/.config/polybar/scripts/focus
new file mode 100755
index 0000000..49d46d2
--- /dev/null
+++ b/.config/polybar/scripts/focus
@@ -0,0 +1,46 @@
+#!/usr/bin/env perl
+# shows active taskwarrior task on polybar
+#Copyright © 2019 yigit
+
+#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 .
+
+use strict;
+use warnings;
+use IO::CaptureOutput qw/capture_exec/;
+
+my ($stdout, $stderr, $success, $exit_code) = capture_exec("task custom_focus");
+
+if ($stderr =~ /No matches\./) {
+ system 'echo "${SEMESTER_THEME}"';
+ exit;
+}
+my $active_task_maybe = $stdout;
+
+$active_task_maybe =~ s/^\s+|\s+$//g;
+
+my @lines = split /\n/, $active_task_maybe;
+
+my $task = $lines[2];
+$task =~ s/^\s+|\s+$//g; # left and right trim
+$task =~ s/\s+/ /g; # reduce multiple whitespace into one
+
+my $context = `task context | grep yes | cut -d' ' -f1`;
+
+if ($task =~ m/^(.*)?\s(\d+\w+)$/g) {
+ if ($context) {
+ print "$1 | $2 @ $context";
+ } else {
+ print "$1 | $2";
+ }
+}
diff --git a/.config/polybar/scripts/notification_pause b/.config/polybar/scripts/notification_pause
new file mode 100755
index 0000000..9bf6724
--- /dev/null
+++ b/.config/polybar/scripts/notification_pause
@@ -0,0 +1,7 @@
+#!/usr/bin/env bash
+
+if ! $(dunstctl is-paused); then
+ echo
+else
+ printf ""
+fi
diff --git a/.config/polybar/scripts/pulseaudio_control b/.config/polybar/scripts/pulseaudio_control
new file mode 100755
index 0000000..7ba2c3f
--- /dev/null
+++ b/.config/polybar/scripts/pulseaudio_control
@@ -0,0 +1,265 @@
+#!/usr/bin/env bash
+
+##################################################################
+# Polybar Pulseaudio Control #
+# https://github.com/marioortizmanero/polybar-pulseaudio-control #
+##################################################################
+
+# Script configuration (more info in the README)
+OSD="no" # On Screen Display message for KDE if enabled
+INC=2 # Increment when lowering/rising the volume
+MAX_VOL=100 # Maximum volume
+AUTOSYNC="no" # All programs have the same volume if enabled
+VOLUME_ICONS=( " " " " " " ) # Volume icons array, from lower volume to higher
+MUTED_ICON=" " # Muted volume icon
+MUTED_COLOR="%{F#A9AA83}" # Color when the audio is muted
+DEFAULT_SINK_ICON="" # The default sink icon if a custom one isn't found
+CUSTOM_SINK_ICONS=("" "") # Custom sink icons in index of sink order
+NOTIFICATIONS="no" # Notifications when switching sinks if enabled
+SINK_BLACKLIST=( ) # Index blacklist for sinks when switching between them
+
+# Environment constants
+LANGUAGE=en_US # Functions of this scripts depends on English outputs of pactl
+
+# Global script variables
+isMuted="no"
+activeSink=""
+endColor="%{F-}"
+
+function getCurVol {
+ curVol=$(pacmd list-sinks | grep -A 15 'index: '"$activeSink"'' | grep 'volume:' | grep -E -v 'base volume:' | awk -F : '{print $3}' | grep -o -P '.{0,3}%'| sed s/.$// | tr -d ' ')
+}
+
+function getCurSink {
+ activeSink=$(pacmd list-sinks | awk '/* index:/{print $3}')
+}
+
+function volMuteStatus {
+ isMuted=$(pacmd list-sinks | grep -A 15 "index: $activeSink" | awk '/muted/{ print $2}')
+}
+
+function getSinkInputs {
+ inputArray=$(pacmd list-sink-inputs | grep -B 4 "sink: $1 " | awk '/index:/{print $2}')
+}
+
+function volUp {
+ getCurVol
+ maxLimit=$((MAX_VOL - INC))
+
+ if [ "$curVol" -le "$MAX_VOL" ] && [ "$curVol" -ge "$maxLimit" ]; then
+ pactl set-sink-volume "$activeSink" "$MAX_VOL%"
+ elif [ "$curVol" -lt "$maxLimit" ]; then
+ pactl set-sink-volume "$activeSink" "+$INC%"
+ fi
+
+ getCurVol
+
+ if [ ${OSD} = "yes" ]; then
+ qdbus org.kde.kded /modules/kosd showVolume "$curVol" 0
+ fi
+
+ if [ ${AUTOSYNC} = "yes" ]; then
+ volSync
+ fi
+}
+
+function volDown {
+ pactl set-sink-volume "$activeSink" "-$INC%"
+ getCurVol
+
+ if [ ${OSD} = "yes" ]; then
+ qdbus org.kde.kded /modules/kosd showVolume "$curVol" 0
+ fi
+
+ if [ ${AUTOSYNC} = "yes" ]; then
+ volSync
+ fi
+}
+
+function volSync {
+ getSinkInputs "$activeSink"
+ getCurVol
+
+ for each in $inputArray; do
+ pactl set-sink-input-volume "$each" "$curVol%"
+ done
+}
+
+function volMute {
+ case "$1" in
+ mute)
+ pactl set-sink-mute "$activeSink" 1
+ curVol=0
+ status=1
+ ;;
+ unmute)
+ pactl set-sink-mute "$activeSink" 0
+ getCurVol
+ status=0
+ ;;
+ esac
+
+ if [ ${OSD} = "yes" ]; then
+ qdbus org.kde.kded /modules/kosd showVolume ${curVol} ${status}
+ fi
+
+}
+
+function changeDevice {
+ # Treat pulseaudio sink list to avoid calling pacmd list-sinks twice
+ o_pulseaudio=$(pacmd list-sinks| grep -e 'index' -e 'device.description')
+
+ # Get all sink indices in a list
+ sinks=($(echo "$o_pulseaudio" | grep index | awk -F': ' '{print $2}'))
+
+ # Get present default sink index
+ activeSink=$(echo "$o_pulseaudio" | grep "\* index" | awk -F': ' '{print $2}')
+
+ # Set new sink index, checks that it's not in the blacklist
+ newSink=$activeSink
+
+ # Remove blacklist devices from the sink list
+ sinks=($(comm -23 <(echo "${sinks[@]}" | tr ' ' '\n' | sort) <(echo "${SINK_BLACKLIST[@]}" | tr ' ' '\n' | sort) | tr '\n' ' '))
+
+ # If the resulting list is empty, do nothing
+ if [ -z "${sinks}" ]; then exit; fi
+
+ # If the current sink is greater or equal than last one, pick the first
+ # sink in the list. Otherwise just pick the next sink avaliable.
+ if [ "${activeSink}" -ge "${sinks[-1]}" ]; then
+ newSink=${sinks[0]}
+ else
+ for sink in "${sinks[@]}"; do
+ if [ "${activeSink}" -lt "${sink}" ]; then
+ newSink=$sink
+ break
+ fi
+ done
+ fi
+
+ # The new sink is set
+ pacmd set-default-sink "${newSink}"
+
+ # Move all audio threads to new sink
+ inputs=$(pactl list sink-inputs short | cut -f 1)
+ for i in $inputs; do
+ pacmd move-sink-input "$i" "$newSink"
+ done
+
+ if [ $NOTIFICATIONS = "yes" ]; then
+ sendNotification
+ fi
+}
+
+function sendNotification {
+ o_pulseaudio=$(pacmd list-sinks| grep -e 'index' -e 'device.description')
+ deviceName=$(echo "$o_pulseaudio" | sed -n '/* index/{n;p;}' | grep -o '".*"' | sed 's/"//g')
+ notify-send "Output cycle" "Changed output to ${deviceName}" --icon=audio-headphones-symbolic
+}
+
+function listen {
+ firstrun=0
+
+ pactl subscribe 2>/dev/null | {
+ while true; do
+ {
+ # If this is the first time just continue
+ # and print the current state
+ # Otherwise wait for events
+ # This is to prevent the module being empty until
+ # an event occurs
+ if [ $firstrun -eq 0 ]
+ then
+ firstrun=1
+ else
+ read -r event || break
+ if ! echo "$event" | grep -e "on card" -e "on sink" -e "on server"
+ then
+ # Avoid double events
+ continue
+ fi
+ fi
+ } &>/dev/null
+ output
+ done
+ }
+}
+
+function output() {
+ if [ -z "$(pgrep pulseaudio)" ]; then echo "Pulseaudio not running"; return 1; fi
+
+ getCurSink
+ getCurVol
+ volMuteStatus
+
+ # Fixed volume icons over max volume
+ iconsLen="${#VOLUME_ICONS[@]}"
+ if [ "$iconsLen" -ne 0 ]; then
+ volSplit=$(( MAX_VOL / iconsLen ))
+ for (( i=1; i<=iconsLen; i++ )); do
+ if (( i*volSplit >= curVol )); then
+ volIcon="${VOLUME_ICONS[$((i-1))]}"
+ break
+ fi
+ done
+ else
+ volIcon=""
+ fi
+
+ # Uses custom sink icon if the array contains one
+ sinksLen=${#CUSTOM_SINK_ICONS[@]}
+ if [ "$activeSink" -le "$((sinksLen - 1))" ]; then
+ sinkIcon=${CUSTOM_SINK_ICONS[$activeSink]}
+ else
+ sinkIcon=$DEFAULT_SINK_ICON
+ fi
+
+ # Showing the formatted message
+ if [ "${isMuted}" = "yes" ]; then
+ echo "${MUTED_COLOR}${MUTED_ICON}${curVol}% ${sinkIcon} ${activeSink}${endColor}"
+ else
+ echo "${volIcon}${curVol}% ${sinkIcon} ${activeSink}"
+ fi
+}
+
+
+getCurSink
+case "$1" in
+ --up)
+ volUp
+ ;;
+ --down)
+ volDown
+ ;;
+ --togmute)
+ volMuteStatus
+ if [ "$isMuted" = "yes" ]
+ then
+ volMute unmute
+ else
+ volMute mute
+ fi
+ ;;
+ --mute)
+ volMute mute
+ ;;
+ --unmute)
+ volMute unmute
+ ;;
+ --sync)
+ volSync
+ ;;
+ --listen)
+ # Listen for changes and immediately create new output for the bar
+ # This is faster than having the script on an interval
+ listen
+ ;;
+ --change)
+ # Changes the audio device
+ changeDevice
+ ;;
+ *)
+ # By default print output for bar
+ output
+ ;;
+esac
diff --git a/.config/polybar/scripts/stop b/.config/polybar/scripts/stop
new file mode 100755
index 0000000..1efd193
--- /dev/null
+++ b/.config/polybar/scripts/stop
@@ -0,0 +1,46 @@
+#!/usr/bin/env perl
+# shows active taskwarrior task on polybar
+#Copyright © 2019 yigit
+
+#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 .
+
+use strict;
+use warnings;
+use IO::CaptureOutput qw/capture_exec/;
+
+my ($stdout, $stderr, $success, $exit_code) = capture_exec("task active");
+
+# print("out: $stdout\nerr: $stderr\nexit_code: $exit_code\n");
+
+if ($stderr =~ /No matches\./) {
+ exit;
+}
+
+my $active_task_maybe = $stdout;
+
+$active_task_maybe =~ s/^\s+|\s+$//g;
+
+my @lines = split /\n/, $active_task_maybe;
+
+my $task = $lines[2];
+$task =~ s/^\s+|\s+$//g; # left and right trim
+$task =~ s/\s+/ /g; # reduce multiple whitespace into one
+
+if ($task =~ m/^(\d+)(.*)$/g) {
+ # print ">>$1<< | $2<<";
+ my ($stdout, $stderr, $success, $exit_code) = capture_exec("task stop $1");
+ if ($stdout =~ m/'(.*)'/) {
+ exec(qq(dunstify --appname="task" --icon="kt-pause" "stopping" "$1"));
+ }
+}
diff --git a/.config/polybar/stop b/.config/polybar/stop
deleted file mode 100755
index 1efd193..0000000
--- a/.config/polybar/stop
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/env perl
-# shows active taskwarrior task on polybar
-#Copyright © 2019 yigit
-
-#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 .
-
-use strict;
-use warnings;
-use IO::CaptureOutput qw/capture_exec/;
-
-my ($stdout, $stderr, $success, $exit_code) = capture_exec("task active");
-
-# print("out: $stdout\nerr: $stderr\nexit_code: $exit_code\n");
-
-if ($stderr =~ /No matches\./) {
- exit;
-}
-
-my $active_task_maybe = $stdout;
-
-$active_task_maybe =~ s/^\s+|\s+$//g;
-
-my @lines = split /\n/, $active_task_maybe;
-
-my $task = $lines[2];
-$task =~ s/^\s+|\s+$//g; # left and right trim
-$task =~ s/\s+/ /g; # reduce multiple whitespace into one
-
-if ($task =~ m/^(\d+)(.*)$/g) {
- # print ">>$1<< | $2<<";
- my ($stdout, $stderr, $success, $exit_code) = capture_exec("task stop $1");
- if ($stdout =~ m/'(.*)'/) {
- exec(qq(dunstify --appname="task" --icon="kt-pause" "stopping" "$1"));
- }
-}
--
cgit v1.2.3-70-g09d2