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

376 lines
13 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# Source the configuration file.
CONFIG_FILE=~/.config/hypr/scripts/Ref.sh
source "$CONFIG_FILE"
######################################
# #
# Toggle Blur #
# #
######################################
toggle_blur (){
STATE=$(hyprctl -j getoption decoration:blur:passes | jq ".int")
if [ "${STATE}" == "2" ]; then
hyprctl keyword decoration:blur:size 2
hyprctl keyword decoration:blur:passes 1
notify-send -e -u low -i "$notif" "Less blur"
else
hyprctl keyword decoration:blur:size 5
hyprctl keyword decoration:blur:passes 2
notify-send -e -u low -i "$notif" "Normal blur"
fi
}
######################################
# #
# Toggle Animation #
# #
######################################
toggle_animation() {
STATE=$(hyprctl -j getoption animations:enabled | jq ".int")
if [ "${STATE}" = "1" ]; then
hyprctl keyword animations:enabled 0
noti_n "Disable animation"
else
hyprctl keyword animations:enabled 1
noti_n "Enable animation"
fi
}
######################################
# #
# Rainbow Border #
# #
######################################
rainbow_border() {
function random_hex() {
random_hex=("0xff$(openssl rand -hex 3)")
echo $random_hex
}
hyprctl keyword general:col.active_border $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) 270deg
hyprctl keyword general:col.inactive_border $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) 270deg
}
################################################
# #
# Change Layout Master to Dwindle #
# #
################################################
change_layout() {
LAYOUT=$(hyprctl -j getoption general:layout | jq -r '.str')
case $LAYOUT in
"master")
hyprctl keyword general:layout dwindle
hyprctl keyword unbind SUPER,J
hyprctl keyword unbind SUPER,K
hyprctl keyword bind SUPER,J,cyclenext
hyprctl keyword bind SUPER,K,cyclenext,prev
hyprctl keyword bind SUPER,O,togglesplit
notify-send -u low -i "$notif" "Dwindle Layout"
;;
"dwindle")
hyprctl keyword general:layout master
hyprctl keyword unbind SUPER,J
hyprctl keyword unbind SUPER,K
hyprctl keyword unbind SUPER,O
hyprctl keyword bind SUPER,J,layoutmsg,cyclenext
hyprctl keyword bind SUPER,K,layoutmsg,cycleprev
notify-send -u low -i "$notif" "Master Layout"
;;
*) ;;
esac
}
######################################
# #
# Random Wallpaper #
# #
######################################
random_wall() {
swww query || swww init
PICS=("${wallDIR}"/*.{jpg,jpeg,png,gif}) # Array of image files in wallDIR
if [[ ${#PICS[@]} -gt 0 ]]; then
RANDOMPICS=${PICS[RANDOM % ${#PICS[@]}]} # Select a random image
swww img "${RANDOMPICS}" ${SWWW_PARAMS} # Set the randomly selected wallpaper
$linker
else
echo "No images found in ${wallDIR}"
fi
}
######################################
# #
# Auto Wallpaper Changer #
# #
######################################
auto_wall() {
INTERVAL=1800 # This controls (in seconds) when to switch to the next image
while true; do
find "$wallDIR" -type f \( -name "*.jpg" -o -name "*.jpeg" -o -name "*.png" -o -name "*.gif" \) -print0 \
| shuf -z -n 1 \
| xargs -0 -I {} swww img "{}" ${SWWW_PARAMS} && $linker
sleep $INTERVAL
done
}
######################################
# #
# Wallpaper Selector #
# #
######################################
select_wall() {
build_theme() {
rows="$1"
cols="$1"
icon_size="$3"
echo "element{orientation:vertical;}element-text{horizontal-align:0.5;}element-icon{size:${icon_size}.0000em;}listview{lines:${rows};columns:${cols};}"
}
if [ ! -d "$wallDIR" ]; then
echo "Error: Wallpaper directory not found." >&2
exit 1
fi
images=$(find "$wallDIR" -maxdepth 1 -type f -printf "%f\x00icon\x1f$wallDIR/%f\n" | sort -n)
choice=$(echo -en "$images\nRandom Choice" | rofi -dmenu -i -show-icons -theme-str "$(build_theme 3 5 6)" -config ~/.config/rofi/config-wallpaper.rasi)
if [ -n "$choice" ]; then
if [ "$choice" = "Random Choice" ]; then
choice=$(find "$wallDIR" -type f -maxdepth 1 -printf "%f\n" | shuf -n1)
fi
wallpaper="$wallDIR/${choice#*icon\x1f}"
swww img $SWWW_PARAMS1 "$wallpaper" && $linker
else
echo "No wallpaper selected. Exiting."
exit 0
fi
}
######################################
# #
# Waybar Layout #
# #
######################################
waybar_layout() {
menu() {
find "$config_dir" -maxdepth 1 -type f -exec basename {} \; | sort
}
apply_config() {
ln -sf "$config_dir/$1" "$waybar_config"
restart_waybar_if_needed
}
restart_waybar_if_needed() {
if pgrep -x "waybar" >/dev/null; then
pkill waybar
sleep 0.1
fi
$RunCMD reload_waybar &
}
main() {
choice=$(menu | rofi -dmenu -p "  Choose Waybar Layout")
[[ -z "$choice" ]] && { echo "No option selected. Exiting."; exit 0; }
case $choice in
"no panel") pkill -x waybar || true ;;
*) apply_config "$choice" ;;
esac
}
pgrep -x rofi && { pkill rofi; exit 0; }
main
}
######################################
# #
# GameMode #
# #
######################################)
gamemode() {
status=$(hyprctl getoption animations:enabled -j | jq ".int")
if [[ $status -eq 1 ]]; then
notify-send -e -u low -i "$notif" "All animations off"
hyprctl keyword animations:enabled 0
swww kill
else
notify-send -e -u normal -i "$notif" "All animations normal"
hyprctl keyword animations:enabled 1
swww init && swww img "$HOME/.config/rofi/.current_wallpaper"
fi
}
######################################
# #
# Toggle Opaque #
# #
######################################
enable_opaque() {
sleep 0.2
hyprctl setprop address:$(hyprctl -j activewindow | jq -r -c ".address") forceopaque 0 lock
}
disable_opaque() {
sleep 0.2
hyprctl setprop address:$(hyprctl -j activewindow | jq -r -c ".address") forceopaque 1 lock
}
######################################
# Keyboard Layout Switcher #
# #
######################################
kb_changer() {
if [ ! -f "$layout_f" ]; then
default_layout=$(grep 'kb_layout=' "$settings_file" | cut -d '=' -f 2 | cut -d ',' -f 1 2>/dev/null)
if [ -z "$default_layout" ]; then
default_layout="us" # Default to 'us' layout if Settings.conf or 'kb_layout' is not found
fi
echo "$default_layout" > "$layout_f"
fi
current_layout=$(cat "$layout_f")
if [ -f "$settings_file" ]; then # Read keyboard layout settings from Settings.conf
kb_layout_line=$(grep 'kb_layout=' "$settings_file" | cut -d '=' -f 2)
IFS=',' read -ra layout_mapping <<< "$kb_layout_line"
fi
layout_count=${#layout_mapping[@]}
for ((i = 0; i < layout_count; i++)); do # Find the index of the current layout in the mapping
if [ "$current_layout" == "${layout_mapping[i]}" ]; then
current_index=$i
break
fi
done
next_index=$(( (current_index + 1) % layout_count )) # Calculate the index of the next layout
new_layout="${layout_mapping[next_index]}"
hyprctl keyword input:kb_layout "$new_layout" # Update the keyboard layout
echo "$new_layout" > "$layout_f"
notify-send -u low -i "$notif" "Keyboad Layout Changed to $new_layout"
}
######################################
# #
# Symbolic Linker for Wallpaper #
# #
######################################
linker() {
cache_dir="$HOME/.cache/swww/" # Define the path to the swww cache directory
monitor_outputs=("$cache_dir"/*) # Get a list of monitor outputs
ln_success=false # Initialize a flag to determine if the ln command was executed
for cache_file in "${monitor_outputs[@]}"; do # Loop through monitor outputs
if [ -f "$cache_file" ]; then # Check if the cache file exists for the current monitor output
wallpaper_path=$(<"$cache_file") # Get the wallpaper path from the cache file
if ln -sf "$wallpaper_path" "$HOME/.config/rofi/.current_wallpaper"; then # Copy the wallpaper to the location Rofi can access
ln_success=true # Set the flag to true upon successful execution
break # Exit the loop after processing the first found monitor output
fi
fi
done
if $ln_success; then # Add a message indicating whether the ln command was successful
echo "Wallpaper linked successfully."
else
echo "Failed to link wallpaper."
fi
}
######################################
# #
# Cava visulizer #
# #
######################################
caway() {
trap "trap - SIGTERM && kill -- -$$" SIGINT SIGTERM
BARS=8;
FRAMERATE=60;
EQUILIZER=1;
# Get script options
while getopts 'b:f:m:eh' flag; do
case "${flag}" in
b) BARS="${OPTARG}" ;;
f) FRAMERATE="${OPTARG}" ;;
e) EQUILIZER=0 ;;
h)
echo "caway usage: caway [ options ... ]"
echo "where options include:"
echo
echo " -b <integer> (Number of bars to display. Default 8)"
echo " -f <integer> (Framerate of the equilizer. Default 60)"
echo " -e (Disable equilizer. Default enabled)"
echo " -h (Show help message)"
exit 0
;;
esac
done
bar="▁▂▃▄▅▆▇█"
dict="s/;//g;"
i=0 # creating "dictionary" to replace char with bar + thin space " "
while [ $i -lt ${#bar} ]
do
dict="${dict}s/$i/${bar:$i:1} /g;"
i=$((i=i+1))
done
dict="${dict}s/.$//;" # Remove last extra thin space
clean_create_pipe() {
if [ -p $1 ]; then
unlink $1
fi
mkfifo $1
}
kill_pid_file() {
if [[ -f $1 ]]; then
while read pid; do
{ kill "$pid" && wait "$pid"; } 2>/dev/null
done < $1
fi
}
cava_waybar_pid="/tmp/cava_waybar_pid" # PID of the cava process and while loop launched from the script
cava_waybar_pipe="/tmp/cava_waybar.fifo" # Clean pipe for cava
clean_create_pipe $cava_waybar_pipe
cava_waybar_config="/tmp/cava_waybar_config" # Custom cava config
echo "
[general]
mode = normal
framerate = $FRAMERATE
bars = $BARS
[output]
method = raw
raw_target = $cava_waybar_pipe
data_format = ascii
ascii_max_range = 7
" > $cava_waybar_config
playerctl_waybar_pipe="/tmp/playerctl_waybar.fifo" # Clean pipe for playerctl
clean_create_pipe $playerctl_waybar_pipe
playerctl -a metadata --format '{"tooltip": "{{playerName}} : {{markup_escape(artist)}} - {{markup_escape(title)}}", "alt": "{{status}}", "class": "{{status}}"}' -F > "$playerctl_waybar_pipe" & # playerctl output into playerctl_waybar_pipe
while read -r line; do # Read the playerctl o/p via its fifo pipe
kill_pid_file $cava_waybar_pid # Kill the cava process to stop the input to cava_waybar_pipe
echo "$line" | jq --unbuffered --compact-output
# If the class says "Playing" and equilizer is enabled
# then show the cava equilizer
if [[ $EQUILIZER == 1 && $(echo $line | jq -r '.class') == 'Playing' ]]; then
sleep 2 # Show the playing title for 2 seconds
cava -p $cava_waybar_config >$cava_waybar_pipe & # cava output into cava_waybar_pipe
echo $! > $cava_waybar_pid # Save the PID of child process
while read -r cmd2; do # Read the cava o/p via its fifo pipe
echo "$line" | jq --arg a $(echo $cmd2 | sed "$dict") '.text = $a' --unbuffered --compact-output # Change the "text" key to bars
done < $cava_waybar_pipe & # Do this fifo read in background
echo $! >> $cava_waybar_pid # Save the while loop PID into the file as well
fi
done < $playerctl_waybar_pipe
}