Walker (GTK4 + Elephant backend) replaces rofi-lbonn-wayland-git as the central launcher and menu framework. Native Walker providers replace 5 custom rofi scripts: - App launcher (desktopapplications provider) - Clipboard (clipboard provider, replaces cliphist frontend) - Bluetooth (bluetooth provider, replaces bluetoothctl script) - Volume/audio (wireplumber provider) - Sink switcher (wireplumber provider) 3 scripts ported to Walker dmenu mode: - moonarch-vpn (nmcli) - moonarch-cpugov (auto-cpufreq) - moonarch-sink-switcher (pactl) Settings menu (moonarch-setmen) removed — apps are findable via Walker app search directly. Walker theme (gtk-inherit) inherits all colors from the active GTK4 theme instead of hardcoding Catppuccin values. Walker and Elephant run as systemd user services for instant startup. Also standardizes GTK theme to Colloid-Grey-Dark-Catppuccin across all config files (was inconsistent between gsettings and file configs). Old rofi configs preserved in legacy/rofi/ for reference.
123 lines
2.5 KiB
Bash
Executable File
123 lines
2.5 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=$(pactl get-default-sink)
|
||
currentsource=$(pactl get-default-source)
|
||
|
||
|
||
# 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
|