aboutsummaryrefslogtreecommitdiffstats
path: root/config/hypr/UserScripts/WallpaperSelect.sh
diff options
context:
space:
mode:
authorJaKooLit <ejhay.games@gmail.com>2025-03-16 15:50:27 +0900
committerJaKooLit <ejhay.games@gmail.com>2025-03-16 15:50:27 +0900
commit548ade37e52f92b70dfe08a53942ef1ac57b3ea7 (patch)
treecd06f026119cc2caf620e40f5c781ec41e1c094c /config/hypr/UserScripts/WallpaperSelect.sh
parente32b6d56b6c4e81b609bf89869435e57b82dcc32 (diff)
initial mpvpaper support
Diffstat (limited to 'config/hypr/UserScripts/WallpaperSelect.sh')
-rwxr-xr-xconfig/hypr/UserScripts/WallpaperSelect.sh277
1 files changed, 171 insertions, 106 deletions
diff --git a/config/hypr/UserScripts/WallpaperSelect.sh b/config/hypr/UserScripts/WallpaperSelect.sh
index cf677f9c..ee46fdb6 100755
--- a/config/hypr/UserScripts/WallpaperSelect.sh
+++ b/config/hypr/UserScripts/WallpaperSelect.sh
@@ -12,42 +12,55 @@ wallpaper_current="$HOME/.config/hypr/wallpaper_effects/.wallpaper_current"
iDIR="$HOME/.config/swaync/images"
iDIRi="$HOME/.config/swaync/icons"
+# swww transition config
+FPS=60
+TYPE="any"
+DURATION=2
+BEZIER=".43,1.19,1,.4"
+SWWW_PARAMS="--transition-fps $FPS --transition-type $TYPE --transition-duration $DURATION --transition-bezier $BEZIER"
+
# Check if package bc exists
if ! command -v bc &>/dev/null; then
-notify-send -i "$iDIR/ja.png" "bc missing" "Install package bc first"
-exit 1
+ notify-send -i "$iDIR/ja.png" "bc missing" "Install package bc first"
+ exit 1
fi
-# variables
+# Variables
rofi_theme="$HOME/.config/rofi/config-wallpaper.rasi"
focused_monitor=$(hyprctl monitors -j | jq -r '.[] | select(.focused) | .name')
+# Ensure focused_monitor is detected
+if [[ -z "$focused_monitor" ]]; then
+ notify-send -i "$iDIR/ja.png" "E-R-R-O-R" "Could not detect focused monitor"
+ exit 1
+fi
+
# Monitor details
scale_factor=$(hyprctl monitors -j | jq -r --arg mon "$focused_monitor" '.[] | select(.name == $mon) | .scale')
monitor_height=$(hyprctl monitors -j | jq -r --arg mon "$focused_monitor" '.[] | select(.name == $mon) | .height')
icon_size=$(echo "scale=1; ($monitor_height * 3) / ($scale_factor * 150)" | bc)
-
-# Apply limit
adjusted_icon_size=$(echo "$icon_size" | awk '{if ($1 < 15) $1 = 20; if ($1 > 25) $1 = 25; print $1}')
-
-# Setting the rofi override with the adjusted icon size
rofi_override="element-icon{size:${adjusted_icon_size}%;}"
-# swww transition config
-FPS=60
-TYPE="any"
-DURATION=2
-BEZIER=".43,1.19,1,.4"
-SWWW_PARAMS="--transition-fps $FPS --transition-type $TYPE --transition-duration $DURATION --transition-bezier $BEZIER"
+# Kill existing wallpaper daemons
+kill_wallpaper_for_video() {
+ killall swww
+ pkill swaybg
+ pkill hyprpaper
+}
-# Check if swaybg is running
-if pidof swaybg > /dev/null; then
- pkill swaybg
-fi
+kill_wallpaper_for_image() {
+ killall mpvpaper
+ pkill swaybg
+ pkill hyprpaper
+}
-# Retrieve image files using null delimiter to handle spaces in filenames
-mapfile -d '' PICS < <(find -L "${wallDIR}" -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.pnm" -o -iname "*.tga" -o -iname "*.tiff" -o -iname "*.webp" -o -iname "*.bmp" -o -iname "*.farbfeld" -o -iname "*.png" -o -iname "*.gif" \) -print0)
+# Retrieve wallpapers (both images & videos)
+mapfile -d '' PICS < <(find -L "${wallDIR}" -type f \( \
+ -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" -o -iname "*.gif" -o \
+ -iname "*.bmp" -o -iname "*.tiff" -o -iname "*.webp" -o \
+ -iname "*.mp4" -o -iname "*.mkv" -o -iname "*.mov" -o -iname "*.webm" \) -print0)
RANDOM_PIC="${PICS[$((RANDOM % ${#PICS[@]}))]}"
RANDOM_PIC_NAME=". random"
@@ -57,112 +70,164 @@ rofi_command="rofi -i -show -dmenu -config $rofi_theme -theme-str $rofi_override
# Sorting Wallpapers
menu() {
- # Sort the PICS array
- IFS=$'\n' sorted_options=($(sort <<<"${PICS[*]}"))
-
- # Place ". random" at the beginning with the random picture as an icon
- printf "%s\x00icon\x1f%s\n" "$RANDOM_PIC_NAME" "$RANDOM_PIC"
-
- for pic_path in "${sorted_options[@]}"; do
- pic_name=$(basename "$pic_path")
+ IFS=$'\n' sorted_options=($(sort <<<"${PICS[*]}"))
+
+ printf "%s\x00icon\x1f%s\n" "$RANDOM_PIC_NAME" "$RANDOM_PIC"
- # Displaying .gif to indicate animated images
- if [[ ! "$pic_name" =~ \.gif$ ]]; then
- printf "%s\x00icon\x1f%s\n" "$(echo "$pic_name" | cut -d. -f1)" "$pic_path"
+ for pic_path in "${sorted_options[@]}"; do
+ pic_name=$(basename "$pic_path")
+ printf "%s\x00icon\x1f%s\n" "$(echo "$pic_name" | cut -d. -f1)" "$pic_path"
+ done
+}
+
+# Offer SDDM Sequioa Wallpaper Option (only for non-video wallpapers)
+set_sddm_wallpaper() {
+ sleep 1
+ sddm_sequoia="/usr/share/sddm/themes/sequoia_2"
+
+ if [ -d "$sddm_sequoia" ]; then
+
+ # Check if yad is running to avoid multiple notifications
+ if pidof yad > /dev/null; then
+ killall yad
+ fi
+
+ if yad --info --text="Set current wallpaper as SDDM background?\n\nNOTE: This only applies to SEQUOIA SDDM Theme" \
+ --text-align=left \
+ --title="SDDM Background" \
+ --timeout=5 \
+ --timeout-indicator=right \
+ --button="yes:0" \
+ --button="no:1"; then
+
+ # Check if terminal exists
+ if ! command -v "$terminal" &>/dev/null; then
+ notify-send -i "$iDIR/ja.png" "Missing $terminal" "Install $terminal to enable setting of wallpaper background"
+ exit 1
+ fi
+
+ # Open terminal to enter password
+ $terminal -e bash -c "echo 'Enter your password to set wallpaper as SDDM Background'; \
+ sudo cp -r $wallpaper_current '$sddm_sequoia/backgrounds/default' && \
+ notify-send -i '$iDIR/ja.png' 'SDDM' 'Background SET'"
+ fi
+ fi
+}
+
+# setting up $HOME/.config/hypr/UserConfigs/Startup_Apps.conf
+modify_startup_config() {
+ local selected_file="$1"
+
+ # Path to the configuration file
+ local startup_config="$HOME/.config/hypr/UserConfigs/Startup_Apps.conf"
+
+ # Check if it's a live wallpaper (video)
+ if [[ "$selected_file" =~ \.(mp4|mkv|mov|webm)$ ]]; then
+ # Comment out the line for swww-daemon
+ sed -i '/^\s*exec-once\s*=\s*swww-daemon\s*--format\s*xrgb.*$/s/^/\#/' "$startup_config"
+
+ # Update the livewallpaper variable with the selected video path (using $HOME)
+ selected_file="${selected_file/#$HOME/\$HOME}" # Replace /home/user with $HOME
+ sed -i "s|^\$livewallpaper=.*|\$livewallpaper=\"$selected_file\"|" "$startup_config"
+
+ # Uncomment the mpvpaper line and set it with the live wallpaper path
+ sed -i '/^\s*#\s*exec-once\s*=\s*mpvpaper\s*.*$/s/^#\s*//; s|mpvpaper\s*'.*'|mpvpaper '*' -o \"no-audio --loop\" \"\$livewallpaper\"|' "$startup_config"
+
+ echo "Configured for live wallpaper (video)."
else
- printf "%s\n" "$pic_name"
+ sed -i 's/^#\(exec-once = swww-daemon.*\)$/\1/' "$startup_config"
+
+ # Comment out the mpvpaper line
+ sed -i '/^exec-once = mpvpaper\s*'.*'/s/^/#/' "$startup_config"
fi
- done
}
-# initiate swww if not running
-swww query || swww-daemon --format xrgb
+# Apply Image Wallpaper
+apply_image_wallpaper() {
+ local image_path="$1"
-# Choice of wallpapers
-main() {
- choice=$(menu | $rofi_command)
-
- choice=$(echo "$choice" | xargs)
- RANDOM_PIC_NAME=$(echo "$RANDOM_PIC_NAME" | xargs)
+ kill_wallpaper_for_image
- # No choice case
- if [[ -z "$choice" ]]; then
- echo "No choice selected. Exiting."
- exit 0
- fi
+ # Start swww-daemon if not running
+ if ! pgrep -x "swww-daemon" > /dev/null; then
+ echo "Starting swww-daemon..."
+ swww-daemon --format xrgb &
+ fi
- # Random choice case
- if [[ "$choice" == "$RANDOM_PIC_NAME" ]]; then
- swww img -o "$focused_monitor" "$RANDOM_PIC" $SWWW_PARAMS;
- sleep 2
+ # Apply static image wallpaper using swww
+ sleep 1
+ swww img -o "$focused_monitor" "$image_path" $SWWW_PARAMS
+
+ # Run additional scripts
"$SCRIPTSDIR/WallustSwww.sh"
- sleep 0.5
+ wait $!
+ sleep 2
"$SCRIPTSDIR/Refresh.sh"
- exit 0
- fi
+ sleep 1
- pic_index=-1
- for i in "${!PICS[@]}"; do
- filename=$(basename "${PICS[$i]}")
- if [[ "$filename" == "$choice"* ]]; then
- pic_index=$i
- break
- fi
- done
+ # set SDDM wallpaper
+ set_sddm_wallpaper
+}
- if [[ $pic_index -ne -1 ]]; then
- swww img -o "$focused_monitor" "${PICS[$pic_index]}" $SWWW_PARAMS
- else
- echo "Image not found."
- exit 1
- fi
+# Apply Video Wallpaper
+apply_video_wallpaper() {
+ local video_path="$1"
-}
+ # Check if mpvpaper is installed
+ if ! command -v mpvpaper &> /dev/null; then
+ notify-send -i "$iDIR/ja.png" "E-R-R-O-R" "mpvpaper not found"
+ return 1
+ fi
+ kill_wallpaper_for_video
-# Check if rofi is already running
-if pidof rofi > /dev/null; then
- pkill rofi
-fi
+ # Apply video wallpaper using mpvpaper
+ mpvpaper '*' -o "no-audio --loop" "$video_path" &
+}
-main
+# Main function
+main() {
+ choice=$(menu | $rofi_command)
+ choice=$(echo "$choice" | xargs)
+ RANDOM_PIC_NAME=$(echo "$RANDOM_PIC_NAME" | xargs)
-wait $!
-"$SCRIPTSDIR/WallustSwww.sh" &&
+ if [[ -z "$choice" ]]; then
+ echo "No choice selected. Exiting."
+ exit 0
+ fi
-wait $!
-sleep 2
-"$SCRIPTSDIR/Refresh.sh"
+ # Handle random selection correctly
+ if [[ "$choice" == "$RANDOM_PIC_NAME" ]]; then
+ choice=$(basename "$RANDOM_PIC")
+ fi
-sleep 1
-# Check if user selected a wallpaper
-if [[ -n "$choice" ]]; then
- sddm_sequoia="/usr/share/sddm/themes/sequoia_2"
- if [ -d "$sddm_sequoia" ]; then
-
- # Check if yad is running to avoid multiple yad notification
- if pidof yad > /dev/null; then
- killall yad
- fi
-
- if yad --info --text="Set current wallpaper as SDDM background?\n\nNOTE: This only applies to SEQUOIA SDDM Theme" \
- --text-align=left \
- --title="SDDM Background" \
- --timeout=5 \
- --timeout-indicator=right \
- --button="yad-yes:0" \
- --button="yad-no:1" \
- ; then
+ # Find the selected file
+ selected_file=""
+ for pic in "${PICS[@]}"; do
+ if [[ "$(basename "$pic")" == "$choice"* ]]; then
+ selected_file="$pic"
+ break
+ fi
+ done
- # Check if terminal exists
- if ! command -v "$terminal" &>/dev/null; then
- notify-send -i "$iDIR/ja.png" "Missing $terminal" "Install $terminal to enable setting of wallpaper background"
- exit 1
+ if [[ -z "$selected_file" ]]; then
+ echo "File not found."
+ exit 1
fi
- # Open terminal to enter password
- $terminal -e bash -c "echo 'Enter your password to set wallpaper as SDDM Background'; \
- sudo cp -r $wallpaper_current '$sddm_sequoia/backgrounds/default' && \
- notify-send -i '$iDIR/ja.png' 'SDDM' 'Background SET'"
+ # Modify the Startup_Apps.conf file based on wallpaper type
+ modify_startup_config "$selected_file"
+
+ # **CHECK FIRST** if it's a video or an image **before calling any function**
+ if [[ "$selected_file" =~ \.(mp4|mkv|mov|webm)$ ]]; then
+ apply_video_wallpaper "$selected_file"
+ else
+ apply_image_wallpaper "$selected_file"
fi
- fi
-fi \ No newline at end of file
+}
+
+# Check if rofi is already running
+if pidof rofi > /dev/null; then
+ pkill rofi
+fi
+
+main \ No newline at end of file
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage