blob: fc88ba1e3ebd013ba8fd892f4d9eb9b780c116d8 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
#!/usr/bin/env bash
# ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# Wallpaper Effects using ImageMagick (SUPER SHIFT W)
# Variables
terminal=kitty
wallpaper_current="${XDG_CONFIG_HOME:-$HOME/.config}/hypr/wallpaper_effects/.wallpaper_current"
wallpaper_output="${XDG_CONFIG_HOME:-$HOME/.config}/hypr/wallpaper_effects/.wallpaper_modified"
wallpaper_base="${XDG_CONFIG_HOME:-$HOME/.config}/hypr/wallpaper_effects/.wallpaper_base"
wallpaper_link="${XDG_CONFIG_HOME:-$HOME/.config}/rofi/.current_wallpaper"
SCRIPTSDIR="${XDG_CONFIG_HOME:-$HOME/.config}/hypr/scripts"
# shellcheck source=/dev/null
. "$SCRIPTSDIR/WallpaperCmd.sh"
focused_monitor=$(hyprctl monitors -j | jq -r '.[] | select(.focused) | .name')
per_monitor_wallpaper_base="${XDG_CONFIG_HOME:-$HOME/.config}/hypr/wallpaper_effects/.wallpaper_base_${focused_monitor}"
per_monitor_wallpaper_current="${XDG_CONFIG_HOME:-$HOME/.config}/hypr/wallpaper_effects/.wallpaper_current_${focused_monitor}"
per_monitor_wallpaper_link="${XDG_CONFIG_HOME:-$HOME/.config}/rofi/.current_wallpaper_${focused_monitor}"
rofi_theme="${XDG_CONFIG_HOME:-$HOME/.config}/rofi/config-wallpaper-effect.rasi"
# Directory for swaync
iDIR="${XDG_CONFIG_HOME:-$HOME/.config}/swaync/images"
iDIRi="${XDG_CONFIG_HOME:-$HOME/.config}/swaync/icons"
# swww/awww transition config
FPS=60
TYPE="wipe"
DURATION=2
BEZIER=".43,1.19,1,.4"
if [[ "$WWW_CMD" == "swww" || "$WWW_CMD" == "awww" ]]; then
SWWW_PARAMS=(--transition-fps "$FPS" --transition-type "$TYPE" --transition-duration "$DURATION" --transition-bezier "$BEZIER")
else
SWWW_PARAMS=()
fi
# Define ImageMagick effects
declare -A effects=(
["No Effects"]="no-effects"
["Black & White"]="magick $wallpaper_base -colorspace gray -sigmoidal-contrast 10,40% $wallpaper_output"
["Blurred"]="magick $wallpaper_base -blur 0x10 $wallpaper_output"
["Charcoal"]="magick $wallpaper_base -charcoal 0x5 $wallpaper_output"
["Edge Detect"]="magick $wallpaper_base -edge 1 $wallpaper_output"
["Emboss"]="magick $wallpaper_base -emboss 0x5 $wallpaper_output"
["Frame Raised"]="magick $wallpaper_base +raise 150 $wallpaper_output"
["Frame Sunk"]="magick $wallpaper_base -raise 150 $wallpaper_output"
["Negate"]="magick $wallpaper_base -negate $wallpaper_output"
["Oil Paint"]="magick $wallpaper_base -paint 4 $wallpaper_output"
["Posterize"]="magick $wallpaper_base -posterize 4 $wallpaper_output"
["Polaroid"]="magick $wallpaper_base -polaroid 0 $wallpaper_output"
["Sepia Tone"]="magick $wallpaper_base -sepia-tone 65% $wallpaper_output"
["Solarize"]="magick $wallpaper_base -solarize 80% $wallpaper_output"
["Sharpen"]="magick $wallpaper_base -sharpen 0x5 $wallpaper_output"
["Vignette"]="magick $wallpaper_base -vignette 0x3 $wallpaper_output"
["Vignette-black"]="magick $wallpaper_base -background black -vignette 0x3 $wallpaper_output"
["Zoomed"]="magick $wallpaper_base -gravity Center -extent 1:1 $wallpaper_output"
)
persist_wallpaper_state() {
local source_wallpaper="$1"
[ -n "$source_wallpaper" ] && [ -f "$source_wallpaper" ] || return 0
mkdir -p "$(dirname "$wallpaper_current")" "$(dirname "$wallpaper_link")"
cp -f "$source_wallpaper" "$wallpaper_current" || true
ln -sf "$source_wallpaper" "$wallpaper_link" || true
if [[ -n "$focused_monitor" ]]; then
cp -f "$source_wallpaper" "$per_monitor_wallpaper_current" || true
ln -sf "$source_wallpaper" "$per_monitor_wallpaper_link" || true
fi
}
# Function to apply no effects
no-effects() {
local resize_mode
resize_mode="$(wallpaper_resize_mode "$wallpaper_base" "$focused_monitor")"
"$WWW_CMD" img -o "$focused_monitor" --resize "$resize_mode" "$wallpaper_base" "${SWWW_PARAMS[@]}" || return 1
persist_wallpaper_state "$wallpaper_base"
notify-send -u low -i "$iDIR/ja.png" "No wallpaper" "effects applied"
# copying wallpaper for rofi menu
cp "$wallpaper_base" "$wallpaper_output"
}
# Function to run rofi menu
main() {
# Populate rofi menu options
options=("No Effects")
for effect in "${!effects[@]}"; do
[[ "$effect" != "No Effects" ]] && options+=("$effect")
done
choice=$(printf "%s\n" "${options[@]}" | LC_COLLATE=C sort | rofi -dmenu -i -config $rofi_theme)
# Process user choice
if [[ -n "$choice" ]]; then
if [[ -f "$per_monitor_wallpaper_base" ]]; then
wallpaper_base="$per_monitor_wallpaper_base"
fi
if [[ ! -f "$wallpaper_base" ]]; then
mkdir -p "$(dirname "$wallpaper_base")"
cp -f "$wallpaper_current" "$wallpaper_base" || true
fi
if [[ "$choice" == "No Effects" ]]; then
no-effects
elif [[ "${effects[$choice]+exists}" ]]; then
# Apply selected effect
notify-send -u normal -i "$iDIR/ja.png" "Applying:" "$choice effects"
if ! eval "${effects[$choice]}"; then
notify-send -u critical -i "$iDIR/error.png" "Wallpaper effect failed" "$choice could not be applied"
return 1
fi
# intial kill process
for pid in swaybg mpvpaper; do
killall -SIGUSR1 "$pid" 2>/dev/null || true
done
sleep 1
local resize_mode
resize_mode="$(wallpaper_resize_mode "$wallpaper_output" "$focused_monitor")"
"$WWW_CMD" img -o "$focused_monitor" --resize "$resize_mode" "$wallpaper_output" "${SWWW_PARAMS[@]}"
persist_wallpaper_state "$wallpaper_output"
notify-send -u low -i "$iDIR/ja.png" "$choice" "effects applied"
else
echo "Effect '$choice' not recognized."
fi
fi
}
# Check if rofi is already running and kill it
if pidof rofi > /dev/null; then
pkill rofi
fi
main
sleep 1
|