Files
hyprland/config/hypr/scripts/System_cmd.sh
T

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
}