- GTK-Style-Script und Template-System entfernt (Catppuccin fest) - 15 tote/inkompatible Scripts gelöscht (Hyprland, X11, Duplikate) - Rasi-Themes von Einzelordnern in themes/ konsolidiert - Waybar: Timezone fix, BAT0, JSON-Struktur, Icons restored - Waybar: GTK-Menu durch wlogout on-click ersetzt - Alle Script-Pfade auf /etc/xdg/rofi/themes/ aktualisiert - moonarch-session als Rofi-basierte Übergangslösung hinzugefügt - moonarch-dnd: broken pipe bei Waybar-Restart behoben - Style.css vom System übernommen
123 lines
2.7 KiB
Bash
Executable File
123 lines
2.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# ABOUTME: Rofi-based volume control applet for managing speakers and microphone.
|
||
# ABOUTME: Provides mute toggles, sink switching, mixer access, and NoiseTorch.
|
||
|
||
## Author : Aditya Shakya (adi1090x)
|
||
## Github : @adi1090x
|
||
#
|
||
## Applets : Volume
|
||
|
||
theme="/etc/xdg/rofi/themes/volume.rasi"
|
||
|
||
# Volume Info
|
||
mixer="`amixer info Master | grep 'Mixer name' | cut -d':' -f2 | tr -d \',' '`"
|
||
speaker="`amixer get Master | tail -n1 | awk -F ' ' '{print $5}' | tr -d '[]'`"
|
||
mic="`amixer get Capture | tail -n1 | awk -F ' ' '{print $5}' | tr -d '[]'`"
|
||
|
||
active=""
|
||
urgent=""
|
||
|
||
# Speaker Info
|
||
amixer get Master | grep '\[on\]' &>/dev/null
|
||
if [[ "$?" == 0 ]]; then
|
||
active="-a 1"
|
||
stext='Mute Speaker'
|
||
sicon=''
|
||
else
|
||
urgent="-u 1"
|
||
stext='Unmute Speaker'
|
||
sicon=''
|
||
fi
|
||
|
||
# Microphone Info
|
||
amixer get Capture | grep '\[on\]' &>/dev/null
|
||
if [[ "$?" == 0 ]]; then
|
||
[ -n "$active" ] && active+=",3" || active="-a 3"
|
||
mtext='Mute Mic'
|
||
micon=''
|
||
else
|
||
[ -n "$urgent" ] && urgent+=",3" || urgent="-u 3"
|
||
mtext='Unmute Mic'
|
||
micon=''
|
||
fi
|
||
|
||
currentsink=$(ponymix defaults|awk '/^sink/ {s=$1" "$2;getline;gsub(/^ +/,"",$0);print s" "$0}' | cut -d':' -f2)
|
||
currentsource=$(ponymix defaults|awk '/^source/ {s=$1" "$2;getline;gsub(/^ +/,"",$0);print s" "$0}' | cut -d':' -f2)
|
||
|
||
|
||
# Theme Elements
|
||
prompt="Speaker: $sicon Mic: $micon "
|
||
mesg="$mixer Speaker: $speaker Mic: $mic"
|
||
|
||
list_col='6'
|
||
list_row='3'
|
||
win_width='670px'
|
||
|
||
# Options
|
||
option_1="$micon $mtext ›$currentsource"
|
||
option_2="$sicon $stext ›$currentsink"
|
||
option_3=" Sink Switcher"
|
||
option_4=""
|
||
option_5=" Mixer"
|
||
option_6=" Noise Torch"
|
||
|
||
|
||
# Rofi CMD
|
||
#-theme-str "listview {columns: $list_col; lines: $list_row;}" \
|
||
rofi_cmd() {
|
||
rofi -theme-str "window {width: $win_width;}" \
|
||
-dmenu \
|
||
-p "$prompt" \
|
||
-mesg "$mesg" \
|
||
${active} ${urgent} \
|
||
-markup-rows \
|
||
-theme ${theme}
|
||
}
|
||
|
||
# Pass variables to rofi dmenu
|
||
run_rofi() {
|
||
echo -e "$option_1\n$option_2\n$option_3\n$option_4\n$option_5\n$option_6" | rofi_cmd
|
||
}
|
||
|
||
# Execute Command
|
||
run_cmd() {
|
||
if [[ "$1" == '--opt3' ]]; then
|
||
#amixer -Mq set Master,0 5%+ unmute
|
||
moonarch-sink-switcher
|
||
elif [[ "$1" == '--opt2' ]]; then
|
||
amixer set Master toggle
|
||
elif [[ "$1" == '--opt4' ]]; then
|
||
amixer -Mq set Master,0 5%- unmute
|
||
|
||
elif [[ "$1" == '--opt1' ]]; then
|
||
amixer set Capture toggle
|
||
elif [[ "$1" == '--opt5' ]]; then
|
||
pavucontrol
|
||
elif [[ "$1" == '--opt6' ]]; then
|
||
noisetorch
|
||
fi
|
||
}
|
||
|
||
# Actions
|
||
chosen="$(run_rofi)"
|
||
case ${chosen} in
|
||
$option_1)
|
||
run_cmd --opt1
|
||
;;
|
||
$option_2)
|
||
run_cmd --opt2
|
||
;;
|
||
$option_3)
|
||
run_cmd --opt3
|
||
;;
|
||
$option_4)
|
||
run_cmd --opt4
|
||
;;
|
||
$option_5)
|
||
run_cmd --opt5
|
||
;;
|
||
$option_6)
|
||
run_cmd --opt6
|
||
;;
|
||
esac
|