433 lines
13 KiB
Bash
Executable File
433 lines
13 KiB
Bash
Executable File
#!/bin/bash
|
|
source ~/.config/hypr/scripts/Ref.sh
|
|
|
|
######################################
|
|
# #
|
|
# Rofi Option for Xmenu #
|
|
# #
|
|
######################################
|
|
|
|
_confirm_rofi() {
|
|
rofi -theme-str 'window {location: center; anchor: center; fullscreen: false; width: 250px;}' \
|
|
-theme-str 'mainbox {children: [ "message", "listview" ];}' \
|
|
-theme-str 'listview {columns: 2; lines: 1;}' \
|
|
-theme-str 'element-text {horizontal-align: 0.5;}' \
|
|
-theme-str 'textbox {horizontal-align: 0.5;}' \
|
|
-kb-accept-entry 'Return,space' \
|
|
-dmenu \
|
|
-mesg "$1"
|
|
|
|
}
|
|
_need_confirm() {
|
|
local _result="$(echo -e "No\nYes" | _confirm_rofi "$1")"
|
|
if [[ "$_result" == "Yes" ]]; then
|
|
return 0
|
|
else
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
######################################
|
|
# #
|
|
# Power & Reboot #
|
|
# #
|
|
######################################
|
|
|
|
sys_reboot() {
|
|
if _need_confirm "Reboot system?"; then
|
|
reboot
|
|
fi
|
|
}
|
|
sys_poweroff() {
|
|
if _need_confirm "Shutdown system?"; then
|
|
poweroff
|
|
fi
|
|
}
|
|
|
|
#######################################################
|
|
# #
|
|
# Reload Waybar, Rofi, Swaync #
|
|
# #
|
|
#######################################################
|
|
# (SHIFT ALT R)
|
|
reload_all() {
|
|
file_exists() {
|
|
[ -e "$1" ]
|
|
}
|
|
|
|
processes=("waybar" "rofi" "swaync")
|
|
|
|
for process in "${processes[@]}"; do
|
|
pid=$(pidof "$process")
|
|
if [ -n "$pid" ]; then
|
|
pkill "$process"
|
|
fi
|
|
done
|
|
|
|
sleep 0.3
|
|
waybar &
|
|
sleep 0.5
|
|
swaync > /dev/null 2>&1 &
|
|
}
|
|
|
|
######################################
|
|
# #
|
|
# Reload Waybar #
|
|
# #
|
|
######################################
|
|
|
|
reload_waybar() {
|
|
_ps=(waybar rofi)
|
|
for _prs in "${_ps[@]}"; do
|
|
if pidof "${_prs}" >/dev/null; then
|
|
pkill "${_prs}"
|
|
fi
|
|
done
|
|
|
|
sleep 0.1
|
|
# Relaunch waybar
|
|
if [[ -z $1 ]]; then
|
|
waybar &
|
|
fi
|
|
notify-send -u low -i $notif "Reload Waybar"
|
|
}
|
|
|
|
######################################
|
|
# #
|
|
# Update Waybar #
|
|
# #
|
|
######################################
|
|
|
|
update_waybar() {
|
|
pkill -RTMIN+4 waybar
|
|
notify-send -u low -i $notif 'Refresh Waybar'
|
|
}
|
|
|
|
######################################
|
|
# #
|
|
# Reload Hyprland #
|
|
# #
|
|
######################################
|
|
|
|
reload_hypr() {
|
|
hyprctl reload
|
|
notify-send -u low -i $notif 'Reload Hyprland'
|
|
}
|
|
|
|
######################################
|
|
# #
|
|
# lockscreen(swaylock) #
|
|
# #
|
|
######################################
|
|
|
|
lock_screen() {
|
|
LOCKCONFIG="$HOME/.config/swaylock/config"
|
|
sleep 0.5s
|
|
swaylock --config ${LOCKCONFIG} &
|
|
disown
|
|
}
|
|
|
|
|
|
######################################
|
|
# #
|
|
# Volume Controller #
|
|
# #
|
|
######################################
|
|
|
|
volume() {
|
|
get_volume() {
|
|
volume=$(pamixer --get-volume)
|
|
if [[ "$volume" -eq "0" ]]; then
|
|
echo "Muted"
|
|
else
|
|
echo "$volume%"
|
|
fi
|
|
}
|
|
get_icon() {
|
|
current=$(get_volume)
|
|
if [[ "$current" == "Muted" ]]; then
|
|
echo "$iDIR/volume-mute.png"
|
|
elif [[ "${current%\%}" -le 30 ]]; then
|
|
echo "$iDIR/volume-low.png"
|
|
elif [[ "${current%\%}" -le 60 ]]; then
|
|
echo "$iDIR/volume-mid.png"
|
|
else
|
|
echo "$iDIR/volume-high.png"
|
|
fi
|
|
}
|
|
notify_user() {
|
|
if [[ "$(get_volume)" == "Muted" ]]; then
|
|
notify-send -e -h string:x-canonical-private-synchronous:volume_notif -u low -i "$(get_icon)" "Volume: Muted"
|
|
else
|
|
notify-send -e -h int:value:"$(get_volume | sed 's/%//')" -h string:x-canonical-private-synchronous:volume_notif -u low -i "$(get_icon)" "Volume: $(get_volume)"
|
|
fi
|
|
}
|
|
inc_volume() {
|
|
if [ "$(pamixer --get-mute)" == "true" ]; then
|
|
pamixer -u && notify_user
|
|
fi
|
|
pamixer -i 5 && notify_user
|
|
}
|
|
dec_volume() {
|
|
if [ "$(pamixer --get-mute)" == "true" ]; then
|
|
pamixer -u && notify_user
|
|
fi
|
|
pamixer -d 5 && notify_user
|
|
}
|
|
toggle_mute() {
|
|
if [ "$(pamixer --get-mute)" == "false" ]; then
|
|
pamixer -m && notify-send -e -u low -i "$iDIR/volume-mute.png" "Volume Switched OFF"
|
|
elif [ "$(pamixer --get-mute)" == "true" ]; then
|
|
pamixer -u && notify-send -e -u low -i "$(get_icon)" "Volume Switched ON"
|
|
fi
|
|
}
|
|
toggle_mic() {
|
|
if [ "$(pamixer --default-source --get-mute)" == "false" ]; then
|
|
pamixer --default-source -m && notify-send -e -u low -i "$iDIR/microphone-mute.png" "Microphone Switched OFF"
|
|
elif [ "$(pamixer --default-source --get-mute)" == "true" ]; then
|
|
pamixer -u --default-source u && notify-send -e -u low -i "$iDIR/microphone.png" "Microphone Switched ON"
|
|
fi
|
|
}
|
|
get_mic_icon() {
|
|
current=$(pamixer --default-source --get-volume)
|
|
if [[ "$current" -eq "0" ]]; then
|
|
echo "$iDIR/microphone-mute.png"
|
|
else
|
|
echo "$iDIR/microphone.png"
|
|
fi
|
|
}
|
|
get_mic_volume() {
|
|
volume=$(pamixer --default-source --get-volume)
|
|
if [[ "$volume" -eq "0" ]]; then
|
|
echo "Muted"
|
|
else
|
|
echo "$volume%"
|
|
fi
|
|
}
|
|
notify_mic_user() {
|
|
volume=$(get_mic_volume)
|
|
icon=$(get_mic_icon)
|
|
notify-send -e -h int:value:"$volume" -h "string:x-canonical-private-synchronous:volume_notif" -u low -i "$icon" "Mic-Level: $volume"
|
|
}
|
|
inc_mic_volume() {
|
|
if [ "$(pamixer --default-source --get-mute)" == "true" ]; then
|
|
pamixer --default-source -u && notify_mic_user
|
|
fi
|
|
pamixer --default-source -i 5 && notify_mic_user
|
|
}
|
|
dec_mic_volume() {
|
|
if [ "$(pamixer --default-source --get-mute)" == "true" ]; then
|
|
pamixer --default-source -u && notify_mic_user
|
|
fi
|
|
pamixer --default-source -d 5 && notify_mic_user
|
|
}
|
|
if [[ "$1" == "--get" ]]; then
|
|
get_volume
|
|
elif [[ "$1" == "--inc" ]]; then
|
|
inc_volume
|
|
elif [[ "$1" == "--dec" ]]; then
|
|
dec_volume
|
|
elif [[ "$1" == "--toggle" ]]; then
|
|
toggle_mute
|
|
elif [[ "$1" == "--toggle-mic" ]]; then
|
|
toggle_mic
|
|
elif [[ "$1" == "--get-icon" ]]; then
|
|
get_icon
|
|
elif [[ "$1" == "--get-mic-icon" ]]; then
|
|
get_mic_icon
|
|
elif [[ "$1" == "--mic-inc" ]]; then
|
|
inc_mic_volume
|
|
elif [[ "$1" == "--mic-dec" ]]; then
|
|
dec_mic_volume
|
|
else
|
|
get_volume
|
|
fi
|
|
}
|
|
|
|
######################################
|
|
# #
|
|
# ScreenShot #
|
|
# #
|
|
######################################
|
|
|
|
screenshot() {
|
|
notify_cmd_shot="notify-send -h string:x-canonical-private-synchronous:shot-notify -u low -i ${iDIR}/picture.png"
|
|
time=$(date "+%d-%b_%H-%M-%S")
|
|
dir="$(xdg-user-dir)/Pictures/Screenshots"
|
|
file="Screenshot_${time}_${RANDOM}.png"
|
|
active_window_path="${dir}/Screenshot_${time}_$(hyprctl -j activewindow | jq -r '(.class)').png"
|
|
|
|
notify_view() {
|
|
local msg="Screenshot Saved."
|
|
[[ "$1" == "active" && ! -e "${active_window_path}" ]] && msg="Screenshot NOT Saved."
|
|
${notify_cmd_shot} "$msg"
|
|
}
|
|
countdown() {
|
|
for ((sec = $1; sec > 0; sec--)); do
|
|
notify-send -h string:x-canonical-private-synchronous:shot-notify -t 1000 -i "$iDIR"/timer.png "Taking shot in: $sec"
|
|
sleep 1
|
|
done
|
|
}
|
|
take_shot() {
|
|
cd "${dir}" && grim - | tee "$file" | wl-copy
|
|
sleep 2
|
|
notify_view "$1"
|
|
}
|
|
shotnow() { take_shot; }
|
|
shot_timer() { countdown "$1"; sleep 1 && take_shot; }
|
|
shot5() { shot_timer 5; }
|
|
shot10() { shot_timer 10; }
|
|
shotarea() {
|
|
tmpfile=$(mktemp)
|
|
area="$(slurp)"
|
|
[[ -z "$area" ]] && { notify-send -u low -i "$iDIR/picture.png" 'No area selected'; rm; "$tmpfile": return;}
|
|
grim -g "$area" - > "$tmpfile" && [[ -s "$tmpfile" ]] && {
|
|
wl-copy < "$tmpfile"
|
|
mv "$tmpfile" "$dir/Screenshot_$(date '+%d-%b_%H-%M-%S')_${RANDOM}.png"
|
|
notify_view
|
|
}
|
|
rm "$tmpfile"
|
|
}
|
|
shotactive() { hyprctl -j activewindow | jq -r '"\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"' | grim -g - "${active_window_path}" && sleep 1 && notify_view "active"; }
|
|
[[ ! -d "$dir" ]] && mkdir -p "$dir"
|
|
case "$1" in
|
|
--now) shotnow ;;
|
|
--in5) shot5 ;;
|
|
--in10) shot10 ;;
|
|
--area) shotarea ;;
|
|
--active) shotactive ;;
|
|
*) echo -e "Available Options: --now --in5 --in10 --area --active"
|
|
esac
|
|
exit 0
|
|
}
|
|
|
|
|
|
############################################################
|
|
# #
|
|
# Brightness Controller both keyboard & screen #
|
|
# #
|
|
############################################################
|
|
|
|
brightness() {
|
|
notification_timeout=1000
|
|
get_backlight() {
|
|
echo $(brightnessctl -m | cut -d, -f4)
|
|
}
|
|
get_kbd_backlight() {
|
|
brightnessctl -d '*::kbd_backlight' -m | cut -d, -f4 | tr -d '%'
|
|
}
|
|
get_icon() {
|
|
current=$(get_backlight | sed 's/%//')
|
|
[ "$current" -le "20" ] && icon="$iDIR/brightness-20.png" ||
|
|
[ "$current" -le "40" ] && icon="$iDIR/brightness-40.png" ||
|
|
[ "$current" -le "60" ] && icon="$iDIR/brightness-60.png" ||
|
|
[ "$current" -le "80" ] && icon="$iDIR/brightness-80.png" ||
|
|
icon="$iDIR/brightness-100.png"
|
|
}
|
|
notify_user() {
|
|
notify-send -e -h string:x-canonical-private-synchronous:brightness_notif -h int:value:$current -u low -i "$icon" "Brightness: $current%"
|
|
}
|
|
change_backlight() {
|
|
brightnessctl set "$1" && get_icon && notify_user
|
|
}
|
|
change_kbd_backlight() {
|
|
brightnessctl -d '*::kbd_backlight' set "$1" && get_icon && notify_user
|
|
}
|
|
case "$1" in
|
|
"--get")
|
|
get_backlight
|
|
;;
|
|
"--inc")
|
|
change_backlight "+5%"
|
|
;;
|
|
"--dec")
|
|
change_backlight "5%-"
|
|
;;
|
|
"--get-kbd")
|
|
get_kbd_backlight
|
|
;;
|
|
"--inc-kbd")
|
|
change_kbd_backlight "+30%"
|
|
;;
|
|
"--dec-kbd")
|
|
change_kbd_backlight "30%-"
|
|
;;
|
|
*)
|
|
get_backlight
|
|
;;
|
|
esac
|
|
}
|
|
|
|
######################################
|
|
# #
|
|
# Battery Notifer #
|
|
# #
|
|
######################################
|
|
|
|
battery_notify() {
|
|
last="NONE" # Possible values: NONE, FULL, LOW, CRITICAL, CHARGING
|
|
# Default values for LOW/CRITICAL status
|
|
low=40
|
|
critical=20
|
|
while true; do
|
|
# If battery is plugged, do stuff
|
|
battery="/sys/class/power_supply/BAT0"
|
|
if [ -d $battery ]; then
|
|
capacity=$(cat $battery/capacity)
|
|
status=$(cat $battery/status)
|
|
# If battery full and not already warned about that
|
|
if [ "$last" != "FULL" ] && [ "$status" = "Full" ]; then
|
|
notify-send -u normal -i "$iDIR/battery-full.png" "Battery full" "Remove the adapter! $capacity%"
|
|
last="FULL"
|
|
fi
|
|
# If low and discharging
|
|
if [ "$last" != "LOW" ] && [ "$status" = "Discharging" ] && [ $capacity -le $low ]; then
|
|
notify-send -u normal -i "$iDIR/battery-low.png" "Battery low" "Plug in the adapter! $capacity%"
|
|
last="LOW"
|
|
fi
|
|
# If critical and discharging
|
|
if [ "$status" = "Discharging" ] && [ $capacity -le $critical ]; then
|
|
notify-send -u critical -i "$iDIR/battery-low.png" "Battery very low" "Plug in the adapter!!! $capacity%"
|
|
last="CRITICAL"
|
|
fi
|
|
# If charging and not already notified
|
|
if [ "$last" != "CHARGING" ] && [ "$status" = "Charging" ]; then
|
|
notify-send -u low -i "$iDIR/battery-charging.png" "Charger connected" "Battery is charging $capacity%"
|
|
last="CHARGING"
|
|
fi
|
|
fi
|
|
sleep 0.1
|
|
done
|
|
}
|
|
|
|
######################################
|
|
# #
|
|
# Polkit #
|
|
# #
|
|
######################################
|
|
|
|
polkit_(){
|
|
polkit=(
|
|
"/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1"
|
|
"/usr/lib/polkit-kde-authentication-agent-1"
|
|
"/usr/lib/polkit-gnome-authentication-agent-1"
|
|
"/usr/libexec/polkit-gnome-authentication-agent-1"
|
|
"/usr/lib/x86_64-linux-gnu/libexec/polkit-kde-authentication-agent-1"
|
|
"/usr/lib/policykit-1-gnome/polkit-gnome-authentication-agent-1"
|
|
)
|
|
executed=false # Flag to track if a file has been executed
|
|
# Loop through the list of files
|
|
for file in "${polkit[@]}"; do
|
|
if [ -e "$file" ]; then
|
|
echo "File $file found, executing command..."
|
|
exec "$file"
|
|
executed=true
|
|
break
|
|
fi
|
|
done
|
|
# If none of the files were found, you can add a fallback command here
|
|
if [ "$executed" == false ]; then
|
|
echo "None of the specified files were found. Install a Polkit"
|
|
fi
|
|
}
|