aboutsummaryrefslogtreecommitdiffstats
path: root/config/hypr
diff options
context:
space:
mode:
Diffstat (limited to 'config/hypr')
-rwxr-xr-xconfig/hypr/UserScripts/WallpaperAutoChange.sh2
-rwxr-xr-xconfig/hypr/UserScripts/WallpaperEffects.sh4
-rwxr-xr-xconfig/hypr/UserScripts/WallpaperRandom.sh4
-rwxr-xr-xconfig/hypr/UserScripts/WallpaperSelect.sh13
-rwxr-xr-xconfig/hypr/UserScripts/WeatherWrap.sh6
-rw-r--r--config/hypr/configs/ENVariables.conf2
-rw-r--r--config/hypr/configs/SystemSettings.conf4
-rw-r--r--config/hypr/configs/WindowRules-config-v3.conf67
-rw-r--r--config/hypr/configs/WindowRules.conf68
-rw-r--r--config/hypr/hyprlock-1080p.conf9
-rw-r--r--config/hypr/hyprlock-2k.conf5
-rw-r--r--config/hypr/hyprlock.conf5
-rwxr-xr-xconfig/hypr/scripts/ChangeLayout.sh2
-rwxr-xr-xconfig/hypr/scripts/KeyHints.sh115
-rwxr-xr-xconfig/hypr/scripts/LockScreen.sh2
-rwxr-xr-xconfig/hypr/scripts/Polkit-Diag.sh521
-rwxr-xr-xconfig/hypr/scripts/Polkit.sh16
-rwxr-xr-xconfig/hypr/scripts/WallpaperDaemon.sh109
-rw-r--r--config/hypr/v2.3.235
19 files changed, 834 insertions, 125 deletions
diff --git a/config/hypr/UserScripts/WallpaperAutoChange.sh b/config/hypr/UserScripts/WallpaperAutoChange.sh
index aa6cf89e..faec6335 100755
--- a/config/hypr/UserScripts/WallpaperAutoChange.sh
+++ b/config/hypr/UserScripts/WallpaperAutoChange.sh
@@ -27,7 +27,7 @@ if [[ $# -lt 1 ]] || [[ ! -d $1 ]]; then
exit 1
fi
-# Edit below to control the images transition
+# Edit below to control the images transition (swww/awww)
export SWWW_TRANSITION_FPS=60
export SWWW_TRANSITION_TYPE=simple
diff --git a/config/hypr/UserScripts/WallpaperEffects.sh b/config/hypr/UserScripts/WallpaperEffects.sh
index 57db3532..e1c8fe83 100755
--- a/config/hypr/UserScripts/WallpaperEffects.sh
+++ b/config/hypr/UserScripts/WallpaperEffects.sh
@@ -24,12 +24,12 @@ fi
iDIR="$HOME/.config/swaync/images"
iDIRi="$HOME/.config/swaync/icons"
-# swww transition config (only when using swww)
+# swww/awww transition config
FPS=60
TYPE="wipe"
DURATION=2
BEZIER=".43,1.19,1,.4"
-if [[ "$WWW" == "swww" ]]; then
+if [[ "$WWW" == "swww" || "$WWW" == "awww" ]]; then
SWWW_PARAMS="--transition-fps $FPS --transition-type $TYPE --transition-duration $DURATION --transition-bezier $BEZIER"
else
SWWW_PARAMS=""
diff --git a/config/hypr/UserScripts/WallpaperRandom.sh b/config/hypr/UserScripts/WallpaperRandom.sh
index db8251f2..70f051f7 100755
--- a/config/hypr/UserScripts/WallpaperRandom.sh
+++ b/config/hypr/UserScripts/WallpaperRandom.sh
@@ -19,12 +19,12 @@ PICS=($(find -L "${wallDIR}" -type f \( -name "*.jpg" -o -name "*.jpeg" -o -name
RANDOMPICS=${PICS[ $RANDOM % ${#PICS[@]} ]}
-# Transition config (only when using swww)
+# Transition config (swww/awww)
FPS=30
TYPE="random"
DURATION=1
BEZIER=".43,1.19,1,.4"
-if [[ "$WWW_CMD" == "swww" ]]; then
+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=""
diff --git a/config/hypr/UserScripts/WallpaperSelect.sh b/config/hypr/UserScripts/WallpaperSelect.sh
index 9dafdf57..31c7969a 100755
--- a/config/hypr/UserScripts/WallpaperSelect.sh
+++ b/config/hypr/UserScripts/WallpaperSelect.sh
@@ -21,17 +21,18 @@ wallpaper_link="$HOME/.config/rofi/.current_wallpaper"
iDIR="$HOME/.config/swaync/images"
iDIRi="$HOME/.config/swaync/icons"
-# swww transition config (only when using swww)
+# swww/awww transition config
FPS=60
TYPE="any"
DURATION=2
BEZIER=".43,1.19,1,.4"
-if [[ "$WWW_CMD" == "swww" ]]; then
+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
+
# Check if package bc exists
if ! command -v bc &>/dev/null; then
notify-send -i "$iDIR/error.png" "bc missing" "Install package bc first"
@@ -42,6 +43,9 @@ fi
rofi_theme="$HOME/.config/rofi/config-wallpaper.rasi"
focused_monitor=$(hyprctl monitors -j | jq -r '.[] | select(.focused) | .name')
+per_monitor_wallpaper_current="$HOME/.config/hypr/wallpaper_effects/.wallpaper_current_${focused_monitor}"
+per_monitor_wallpaper_link="$HOME/.config/rofi/.current_wallpaper_${focused_monitor}"
+
# Ensure focused_monitor is detected
if [[ -z "$focused_monitor" ]]; then
notify-send -i "$iDIR/error.png" "E-R-R-O-R" "Could not detect focused monitor"
@@ -175,6 +179,11 @@ apply_image_wallpaper() {
}
"$WWW_CMD" img -o "$focused_monitor" "$image_path" $SWWW_PARAMS
+ # Persist per-monitor wallpaper selection
+ mkdir -p "$(dirname "$per_monitor_wallpaper_current")" "$(dirname "$per_monitor_wallpaper_link")"
+ ln -sf "$image_path" "$per_monitor_wallpaper_link" || true
+ cp -f "$image_path" "$per_monitor_wallpaper_current" || true
+
# Run additional scripts (pass the image path to avoid cache race conditions)
"$SCRIPTSDIR/WallustSwww.sh" "$image_path"
sleep 2
diff --git a/config/hypr/UserScripts/WeatherWrap.sh b/config/hypr/UserScripts/WeatherWrap.sh
index 1e15e4a6..a95bbd51 100755
--- a/config/hypr/UserScripts/WeatherWrap.sh
+++ b/config/hypr/UserScripts/WeatherWrap.sh
@@ -14,15 +14,15 @@ BASH_FALLBACK="$SCRIPT_DIR/Weather.sh"
# Function to check network connectivity
check_network() {
# Try multiple methods to check network
- if ping -c1 -W2 8.8.8.8 >/dev/null 2>&1; then
+ if ping -c1 -W1 8.8.8.8 >/dev/null 2>&1; then
return 0
fi
- if ping -c1 -W2 1.1.1.1 >/dev/null 2>&1; then
+ if ping -c1 -W1 1.1.1.1 >/dev/null 2>&1; then
return 0
fi
- if curl -s --connect-timeout 3 "https://ipinfo.io" >/dev/null 2>&1; then
+ if curl -s --connect-timeout 2 "https://ipinfo.io" >/dev/null 2>&1; then
return 0
fi
diff --git a/config/hypr/configs/ENVariables.conf b/config/hypr/configs/ENVariables.conf
index fd7831b8..0226d053 100644
--- a/config/hypr/configs/ENVariables.conf
+++ b/config/hypr/configs/ENVariables.conf
@@ -10,7 +10,7 @@
# environment-variables
# Current Version of KoolDots:
-env = DOTS_VERSION,2.3.22
+env = DOTS_VERSION,2.3.23
### Toolkit Backend Variables ###
env = GDK_BACKEND,wayland,x11,*
diff --git a/config/hypr/configs/SystemSettings.conf b/config/hypr/configs/SystemSettings.conf
index 3d8122be..6621ffe2 100644
--- a/config/hypr/configs/SystemSettings.conf
+++ b/config/hypr/configs/SystemSettings.conf
@@ -14,8 +14,7 @@
$scriptsDir = $HOME/.config/hypr/scripts
dwindle {
- pseudotile = false
- preserve_split = true
+ preserve_split = true
smart_resizing = true
use_active_for_splits = true
smart_split = false
@@ -115,7 +114,6 @@ gestures {
misc {
disable_hyprland_logo = true
disable_splash_rendering = true
- vfr = true
vrr = 2
mouse_move_enables_dpms = true
enable_swallow = off
diff --git a/config/hypr/configs/WindowRules-config-v3.conf b/config/hypr/configs/WindowRules-config-v3.conf
index 29d5c274..aab7d005 100644
--- a/config/hypr/configs/WindowRules-config-v3.conf
+++ b/config/hypr/configs/WindowRules-config-v3.conf
@@ -252,6 +252,17 @@ windowrule {
center = on
size = (monitor_w*0.6) (monitor_h*0.6)
}
+# Named rule for Shelly
+windowrule {
+ name = Shelly
+ match:class = ^(com.shellyorg.shelly)$
+ match:title = ^(Shelly)$
+ match:initial_class = ^(com.shellyorg.shelly)$
+ match:initial_title = ^(Shelly)$
+ float = on
+ center = on
+ size = (monitor_w*0.6) (monitor_h*0.6)
+}
# Named rule for CachyOS Hello
windowrule {
@@ -401,3 +412,59 @@ windowrule {
center = on
size = (monitor_w*0.6) (monitor_h*0.6)
}
+# Named rule for hyprpwcenter audio control panel
+windowrule {
+ name = hyprland audio panel
+ match:class = ^(hyprpwcenter)$
+ match:initial_class = ^(hyprpwcenter)$
+ float = on
+ center = on
+ size = (monitor_w*0.6) (monitor_h*0.6)
+}
+# Named rule for Garida Assistant
+windowrule {
+ name = Garuda Assistant
+ match:class = ^(garuda-assistant)$
+ match:title = ^(Garuda Assistant)$
+ match:initial_class = ^(garuda-assistant)$
+ match:initial_title = ^(Garuda Assistant)$
+ float = on
+ center = on
+ size = (monitor_w*0.6) (monitor_h*0.6)
+}
+
+# Named rule for HyprMod HL config GUI
+windowrule {
+ name = HyprMod GUI
+ match:class = ^(com.github.hyprmod)$
+ match:title = ^(HyprMod)$
+ match:initial_class = ^(com.github.hyprmod)$
+ match:initial_title = ^(HyprMod)$
+ float = on
+ center = on
+ size = (monitor_w*0.7) (monitor_h*0.75)
+}
+# Named rule for easy effects
+windowrule {
+ name = EasyEffects
+ match:class = ^(com.github.wwmm.easyeffects)$
+ match:title = ^(Easy Effects)$
+ match:initial_class = ^(com.github.wwmm.easyeffects)$
+ match:initial_title = ^(Easy Effects)$
+ float = on
+ center = on
+ size = (monitor_w*0.6) (monitor_h*0.65)
+}
+# Named rule for Mousam weather GUI
+windowrule {
+ name = Mousam Weather
+ match:class = ^(io.github.amit9838.mousam)$
+ match:title = ^(Mousam)$
+ match:initial_class = ^(io.github.amit9838.mousam)$
+ match:initial_title = ^(Mousam)$
+ float = on
+ center = on
+ size = (monitor_w*0.7) (monitor_h*0.75)
+}
+
+
diff --git a/config/hypr/configs/WindowRules.conf b/config/hypr/configs/WindowRules.conf
index 29d5c274..7082d64c 100644
--- a/config/hypr/configs/WindowRules.conf
+++ b/config/hypr/configs/WindowRules.conf
@@ -252,6 +252,17 @@ windowrule {
center = on
size = (monitor_w*0.6) (monitor_h*0.6)
}
+# Named rule for Shelly
+windowrule {
+ name = Shelly
+ match:class = ^(com.shellyorg.shelly)$
+ match:title = ^(Shelly)$
+ match:initial_class = ^(com.shellyorg.shelly)$
+ match:initial_title = ^(Shelly)$
+ float = on
+ center = on
+ size = (monitor_w*0.6) (monitor_h*0.6)
+}
# Named rule for CachyOS Hello
windowrule {
@@ -401,3 +412,60 @@ windowrule {
center = on
size = (monitor_w*0.6) (monitor_h*0.6)
}
+# Named rule for hyprpwcenter audio control panel
+windowrule {
+ name = hyprland audio panel
+ match:class = ^(hyprpwcenter)$
+ match:initial_class = ^(hyprpwcenter)$
+ float = on
+ center = on
+ size = (monitor_w*0.6) (monitor_h*0.6)
+}
+# Named rule for Garida Assistant
+windowrule {
+ name = Garuda Assistant
+ match:class = ^(garuda-assistant)$
+ match:title = ^(Garuda Assistant)$
+ match:initial_class = ^(garuda-assistant)$
+ match:initial_title = ^(Garuda Assistant)$
+ float = on
+ center = on
+ size = (monitor_w*0.6) (monitor_h*0.6)
+}
+
+# Named rule for HyprMod HL config GUI
+windowrule {
+ name = HyprMod GUI
+ match:class = ^(com.github.hyprmod)$
+ match:title = ^(HyprMod)$
+ match:initial_class = ^(com.github.hyprmod)$
+ match:initial_title = ^(HyprMod)$
+ float = on
+ center = on
+ size = (monitor_w*0.7) (monitor_h*0.75)
+}
+# Named rule for easy effects
+windowrule {
+ name = EasyEffects
+ match:class = ^(com.github.wwmm.easyeffects)$
+ match:title = ^(Easy Effects)$
+ match:initial_class = ^(com.github.wwmm.easyeffects)$
+ match:initial_title = ^(Easy Effects)$
+ float = on
+ center = on
+ size = (monitor_w*0.6) (monitor_h*0.65)
+}
+
+# Named rule for Mousam weather GUI
+windowrule {
+ name = Mousam Weather
+ match:class = ^(io.github.amit9838.mousam)$
+ match:title = ^(Mousam)$
+ match:initial_class = ^(io.github.amit9838.mousam)$
+ match:initial_title = ^(Mousam)$
+ float = on
+ center = on
+ size = (monitor_w*0.7) (monitor_h*0.75)
+}
+
+
diff --git a/config/hypr/hyprlock-1080p.conf b/config/hypr/hyprlock-1080p.conf
index f36df9e4..b0a0279c 100644
--- a/config/hypr/hyprlock-1080p.conf
+++ b/config/hypr/hyprlock-1080p.conf
@@ -7,7 +7,6 @@ source = $HOME/.config/hypr/wallust/wallust-hyprland.conf
$Scripts = $HOME/.config/hypr/scripts
general {
- grace = 1
fractional_scaling = 2
immediate_render = true
}
@@ -72,7 +71,7 @@ label {
# }
# Seconds-Time
-#label {
+# label {
# monitor =
## text = cmd[update:1000] echo "$(date +"%S")"
# text = cmd[update:1000] echo "$(date +"%S %p")" #AM/PM
@@ -82,10 +81,10 @@ label {
# position = 0, -350
# halign = center
# valign = top
-#}
+# }
# Put a picture of choice here. Default is the current wallpaper
-#image {
+# image {
# monitor =
# path = $HOME/.config/hypr/wallpaper_effects/.wallpaper_current
# size = 160
@@ -97,7 +96,7 @@ label {
# position = 0, 280
# halign = center
# valign = bottom
-}
+# }
# USER
label {
diff --git a/config/hypr/hyprlock-2k.conf b/config/hypr/hyprlock-2k.conf
index 42d24d05..8c357d90 100644
--- a/config/hypr/hyprlock-2k.conf
+++ b/config/hypr/hyprlock-2k.conf
@@ -7,7 +7,6 @@ source = $HOME/.config/hypr/wallust/wallust-hyprland.conf
$Scripts = $HOME/.config/hypr/scripts
general {
- grace = 1
fractional_scaling = 2
immediate_render = true
}
@@ -85,7 +84,7 @@ label {
# }
# Put a picture of choice here. Default is the current wallpaper
-#image {
+# image {
# monitor =
# #path = $HOME/.config/hypr/wallpaper_effects/.wallpaper_current
# size = 160
@@ -97,7 +96,7 @@ label {
# position = 0, 400
# halign = center
# valign = bottom
-#}
+# }
# USER
label {
diff --git a/config/hypr/hyprlock.conf b/config/hypr/hyprlock.conf
index 42d24d05..8c357d90 100644
--- a/config/hypr/hyprlock.conf
+++ b/config/hypr/hyprlock.conf
@@ -7,7 +7,6 @@ source = $HOME/.config/hypr/wallust/wallust-hyprland.conf
$Scripts = $HOME/.config/hypr/scripts
general {
- grace = 1
fractional_scaling = 2
immediate_render = true
}
@@ -85,7 +84,7 @@ label {
# }
# Put a picture of choice here. Default is the current wallpaper
-#image {
+# image {
# monitor =
# #path = $HOME/.config/hypr/wallpaper_effects/.wallpaper_current
# size = 160
@@ -97,7 +96,7 @@ label {
# position = 0, 400
# halign = center
# valign = bottom
-#}
+# }
# USER
label {
diff --git a/config/hypr/scripts/ChangeLayout.sh b/config/hypr/scripts/ChangeLayout.sh
index f52d783f..f9f6b52b 100755
--- a/config/hypr/scripts/ChangeLayout.sh
+++ b/config/hypr/scripts/ChangeLayout.sh
@@ -38,7 +38,6 @@ set_layout() {
hyprctl keyword unbind SUPER,up
hyprctl keyword unbind SUPER,down
hyprctl keyword unbind SUPER,O
- hyprctl keyword unbind SUPER_SHIFT,M
case "$target" in
"dwindle")
@@ -67,7 +66,6 @@ set_layout() {
hyprctl keyword bind SUPER,up,layoutmsg,cycleprev
hyprctl keyword bind SUPER,right,layoutmsg,cyclenext
hyprctl keyword bind SUPER,down,layoutmsg,cyclenext
- hyprctl keyword bind SUPER_SHIFT,M,layoutmsg,swapnext
notify-send -e -u low -i "$notif" " Monocle Layout"
;;
"master")
diff --git a/config/hypr/scripts/KeyHints.sh b/config/hypr/scripts/KeyHints.sh
index f00837d3..a9f6660a 100755
--- a/config/hypr/scripts/KeyHints.sh
+++ b/config/hypr/scripts/KeyHints.sh
@@ -10,69 +10,68 @@
BACKEND=wayland
# Check if rofi or yad is running and kill them if they are
-if pidof rofi > /dev/null; then
+if pidof rofi >/dev/null; then
pkill rofi
fi
-if pidof yad > /dev/null; then
+if pidof yad >/dev/null; then
pkill yad
fi
# Launch yad with calculated width and height
GDK_BACKEND=$BACKEND yad \
- --center \
- --title="KooL Quick Cheat Sheet" \
- --no-buttons \
- --list \
- --column=Key: \
- --column=Description: \
- --column=Command: \
- --timeout-indicator=bottom \
-"ESC" "close this app" "" " = " "SUPER KEY (Windows Key Button)" "(SUPER KEY)" \
-" SHIFT K" "Searchable Keybinds" "(Search all Keybinds via rofi)" \
-" SHIFT E" "KooL Hyprland Settings Menu" "" \
-"" "" "" \
-" enter" "Terminal" "(kitty)" \
-" SHIFT enter" "DropDown Terminal" " Q to close" \
-" B" "Launch Browser" "(Default browser)" \
-" A" "Desktop Overview" "(AGS - if opted to install)" \
-" D" "Application Launcher" "(rofi-wayland)" \
-" E" "Open File Manager" "(Thunar)" \
-" S" "Google Search using rofi" "(rofi)" \
-" T" "Global theme switcher" "(rofi)" \
-" Q" "close active window" "(not kill)" \
-" Shift Q " "kills an active window" "(kill)" \
-" ALT mouse scroll up/down " "Desktop Zoom" "Desktop Magnifier" \
-" Alt V" "Clipboard Manager" "(cliphist)" \
-" W" "Choose wallpaper" "(Wallpaper Menu)" \
-" Shift W" "Choose wallpaper effects" "(imagemagick + awww)" \
-"CTRL ALT W" "Random wallpaper" "(via awww)" \
-" CTRL ALT B" "Hide/UnHide Waybar" "waybar" \
-" CTRL B" "Choose waybar styles" "(waybar styles)" \
-" ALT B" "Choose waybar layout" "(waybar layout)" \
-" ALT R" "Reload Waybar swaync Rofi" "CHECK NOTIFICATION FIRST!!!" \
-" SHIFT N" "Launch Notification Panel" "swaync Notification Center" \
-" Print" "screenshot" "(grim)" \
-" Shift Print" "screenshot region" "(grim + slurp)" \
-" Shift S" "screenshot region" "(swappy)" \
-" CTRL Print" "screenshot timer 5 secs " "(grim)" \
-" CTRL SHIFT Print" "screenshot timer 10 secs " "(grim)" \
-"ALT Print" "Screenshot active window" "active window only" \
-"CTRL ALT P" "power-menu" "(wlogout)" \
-"CTRL ALT L" "screen lock" "(hyprlock)" \
-"CTRL ALT Del" "Hyprland Exit" "(NOTE: Hyprland Will exit immediately)" \
-" SHIFT F" "Fullscreen" "Toggles to full screen" \
-" CTL F" "Fake Fullscreen" "Toggles to fake full screen" \
-" ALT L" "Toggle Dwindle | Master Layout" "Hyprland Layout" \
-" SPACEBAR" "Toggle float" "single window" \
-" ALT SPACEBAR" "Toggle all windows to float" "all windows" \
-" ALT O" "Toggle Blur" "normal or less blur" \
-" CTRL O" "Toggle Opaque ON or OFF" "on active window only" \
-" Shift A" "Animations Menu" "Choose Animations via rofi" \
-" CTRL R" "Rofi Themes Menu" "Choose Rofi Themes via rofi" \
-" CTRL Shift R" "Rofi Themes Menu v2" "Choose Rofi Themes via Theme Selector (modified)" \
-" SHIFT G" "Gamemode! All animations OFF or ON" "toggle" \
-" ALT E" "Rofi Emoticons" "Emoticon" \
-" H" "Launch this Quick Cheat Sheet" "" \
-"" "" "" \
-"More tips:" "https://github.com/LinuxBeginnings/Hyprland-Dots/wiki" ""\
+ --center \
+ --title="KooL Quick Cheat Sheet" \
+ --no-buttons \
+ --list \
+ --column=Key: \
+ --column=Description: \
+ --column=Comment: \
+ --timeout-indicator=bottom \
+ "ESC" "close this app" "" " = " "SUPER KEY (Windows Key Button)" "(SUPER KEY)" \
+ " SHIFT K" "Searchable Keybinds" "(Search all Keybinds via rofi)" \
+ " SHIFT E" "KooL Hyprland Settings Menu" "WindowRules,themes,defaults, etc" \
+ " enter" "Terminal" "(Default:kitty)" \
+ " SHIFT enter" "DropDown Terminal" " Q to close" \
+ " B" "Launch Browser" "(Default browser)" \
+ " A" "Desktop Overview" "Shows open apps in workspaces" \
+ " D" "Application Launcher" "(rofi-wayland)" \
+ " E" "Open File Manager" "(Thunar)" \
+ " S" "Google Search using rofi" "(rofi)" \
+ " T" "Global theme switcher" "(rofi)" \
+ " Q" "close active window" "(not kill)" \
+ " Shift Q " "kills an active window" "(kill)" \
+ " ALT mouse scroll up/down " "Desktop Zoom" "Desktop Magnifier" \
+ " Alt V" "Clipboard Manager" "(cliphist)" \
+ " W" "Choose wallpaper" "(Wallpaper Menu)" \
+ " Shift W" "Choose wallpaper effects" "(imagemagick + awww)" \
+ "CTRL ALT W" "Random wallpaper" "(via awww)" \
+ " CTRL ALT B" "Hide/UnHide Waybar" "waybar" \
+ " CTRL B" "Choose waybar styles" "(waybar styles)" \
+ " ALT B" "Choose waybar layout" "(waybar layout)" \
+ " ALT R" "Reload Waybar swaync Rofi" "CHECK NOTIFICATION FIRST!!!" \
+ " SHIFT N" "Launch Notification Panel" "swaync Notification Center" \
+ " Print" "screenshot" "(grim)" \
+ " Shift Print" "screenshot region" "(grim + slurp)" \
+ " Shift S" "screenshot region" "(swappy)" \
+ " CTRL Print" "screenshot timer 5 secs " "(grim)" \
+ " CTRL SHIFT Print" "screenshot timer 10 secs " "(grim)" \
+ "ALT Print" "Screenshot active window" "active window only" \
+ "CTRL ALT P" "power-menu" "(wlogout)" \
+ "CTRL ALT L" "screen lock" "(hyprlock)" \
+ "CTRL ALT Del" "Hyprland Exit" "(NOTE: Hyprland Will exit immediately)" \
+ " SHIFT F" "Fullscreen" "Toggles to full screen" \
+ " CTL F" "Fake Fullscreen" "Toggles to fake full screen" \
+ " ALT L" "Toggle Dwindle|Floating|Monocle|Master layouts" "Hyprland Layouts" \
+ " SPACEBAR" "Toggle float" "single window" \
+ " ALT SPACEBAR" "Toggle all windows to float" "all windows" \
+ " ALT O" "Toggle Blur" "normal or less blur" \
+ " CTRL O" "Toggle Opaque ON or OFF" "on active window only" \
+ " Shift A" "Animations Menu" "Choose Animations via rofi" \
+ " CTRL R" "Rofi Themes Menu" "Choose Rofi Themes via rofi" \
+ " CTRL Shift R" "Rofi Themes Menu v2" "Choose Rofi Themes via Theme Selector (modified)" \
+ " SHIFT G" "Gamemode! All animations OFF or ON" "toggle" \
+ " ALT E" "Rofi Emoticons" "Emoticon" \
+ " H" "Launch this Quick Cheat Sheet" "" \
+ "" "" "" \
+ "More tips:" "https://github.com/LinuxBeginnings/Hyprland-Dots/wiki" ""
diff --git a/config/hypr/scripts/LockScreen.sh b/config/hypr/scripts/LockScreen.sh
index a7b27ad9..b795a8f7 100755
--- a/config/hypr/scripts/LockScreen.sh
+++ b/config/hypr/scripts/LockScreen.sh
@@ -10,7 +10,7 @@
#pidof hyprlock || hyprlock -q
# Ensure weather cache is up-to-date before locking (Waybar/lockscreen readers)
-bash "$HOME/.config/hypr/UserScripts/WeatherWrap.sh" >/dev/null 2>&1
+bash "$HOME/.config/hypr/UserScripts/WeatherWrap.sh" >/dev/null 2>&1 &
loginctl lock-session
diff --git a/config/hypr/scripts/Polkit-Diag.sh b/config/hypr/scripts/Polkit-Diag.sh
new file mode 100755
index 00000000..0f32b640
--- /dev/null
+++ b/config/hypr/scripts/Polkit-Diag.sh
@@ -0,0 +1,521 @@
+#!/usr/bin/env bash
+# ==================================================
+# KoolDots (2026)
+# Project URL: https://github.com/LinuxBeginnings
+# License: GNU GPLv3
+# SPDX-License-Identifier: GPL-3.0-or-later
+# ==================================================
+# 💫 https://github.com/LinuxBeginnings 💫 #
+# Polkit Diagnostic & Triage Script #
+
+# Default values
+OUTFILE="$HOME/Downloads/Polkit-diag.txt"
+DRY_RUN=0
+INSTALL_OVERRIDE=0
+FORCE_OVERRIDE=0
+
+# Systemd override details for hyprpolkitagent
+OVERRIDE_DIR="$HOME/.config/systemd/user/hyprpolkitagent.service.d"
+OVERRIDE_FILE="$OVERRIDE_DIR/override.conf"
+
+OVERRIDE_CONTENT="[Unit]
+After=
+After=dbus.service graphical-session.target
+PartOf=graphical-session.target
+
+[Install]
+WantedBy=graphical-session.target"
+
+print_help() {
+ cat << EOF
+Usage: $(basename "$0") [OPTIONS]
+Gather diagnostic information for polkit issues and optionally apply a systemd override.
+This script is modular and extensible for different Linux distributions.
+
+Options:
+ -h, --help Show this help message and exit
+ -d, --dry-run Run without making changes (output to stdout instead of file)
+ --install-override Install the systemd override for hyprpolkitagent if not already present
+ --force-override Overwrite the existing systemd override for hyprpolkitagent
+ -o, --output FILE Specify custom output file (default: $HOME/Downloads/Polkit-diag.txt)
+EOF
+}
+
+setup_output() {
+ if [[ $DRY_RUN -eq 1 ]]; then
+ echo "================================================="
+ echo " [Dry Run] Diagnostics will be printed to stdout."
+ echo "================================================="
+ exec 3>&1
+ else
+ local outdir
+ outdir=$(dirname "$OUTFILE")
+
+ # Check and create directory if it doesn't exist
+ if [[ ! -d "$outdir" ]]; then
+ echo "Directory $outdir does not exist. Creating..."
+ mkdir -p "$outdir"
+ fi
+
+ # Backup existing file
+ if [[ -f "$OUTFILE" ]]; then
+ local backup_file="${OUTFILE}.bak.$(date +%Y%m%d%H%M%S)"
+ echo "Existing output file found. Backing up to: $backup_file"
+ mv "$OUTFILE" "$backup_file"
+ fi
+
+ echo "Diagnostics will be saved to: $OUTFILE"
+ exec 3> "$OUTFILE"
+ fi
+}
+
+apply_override() {
+ if [[ $INSTALL_OVERRIDE -eq 1 ]]; then
+ local msg="\n=== Systemd Override for hyprpolkitagent ==="
+ [[ $DRY_RUN -eq 0 ]] && echo -e "$msg" >&3
+ echo -e "$msg"
+
+ local out
+ if systemctl --user is-enabled hyprpolkitagent.service >/dev/null 2>&1; then
+ msg="[STATUS] hyprpolkitagent.service is currently enabled."
+ else
+ msg="[STATUS] hyprpolkitagent.service is NOT enabled. You may need to enable it."
+ fi
+ [[ $DRY_RUN -eq 0 ]] && echo "$msg" >&3
+ echo "$msg"
+
+ if [[ -f "$OVERRIDE_FILE" && $FORCE_OVERRIDE -eq 0 ]]; then
+ msg="[INFO] Override already exists at $OVERRIDE_FILE."
+ [[ $DRY_RUN -eq 0 ]] && echo "$msg" >&3; echo "$msg"
+ msg="[ACTION] Use --force-override to overwrite it."
+ [[ $DRY_RUN -eq 0 ]] && echo "$msg" >&3; echo "$msg"
+ else
+ if [[ -f "$OVERRIDE_FILE" && $FORCE_OVERRIDE -eq 1 ]]; then
+ msg="[CONFIRM] Force override requested. Overwriting existing override..."
+ [[ $DRY_RUN -eq 0 ]] && echo "$msg" >&3; echo "$msg"
+ fi
+
+ msg="[ACTION] Installing override to $OVERRIDE_FILE..."
+ [[ $DRY_RUN -eq 0 ]] && echo "$msg" >&3; echo "$msg"
+
+ if [[ $DRY_RUN -eq 0 ]]; then
+ # Capture dir creation
+ if out=$(mkdir -p "$OVERRIDE_DIR" 2>&1); then
+ msg=" [OK] Created/verified directory $OVERRIDE_DIR."
+ else
+ msg=" [ERROR] Failed to create directory $OVERRIDE_DIR.\n Details: $out"
+ fi
+ echo -e "$msg" >&3; echo -e "$msg"
+
+ # Capture file write
+ if out=$(echo "$OVERRIDE_CONTENT" > "$OVERRIDE_FILE" 2>&1); then
+ msg=" [OK] Successfully wrote override file."
+ else
+ msg=" [ERROR] Failed to write override file.\n Details: $out"
+ fi
+ echo -e "$msg" >&3; echo -e "$msg"
+
+ # Capture daemon-reload
+ if out=$(systemctl --user daemon-reload 2>&1); then
+ msg=" [OK] Systemd daemon reloaded."
+ else
+ msg=" [ERROR] Failed to reload systemd daemon.\n Details: $out"
+ fi
+ echo -e "$msg" >&3; echo -e "$msg"
+
+ # Capture restart
+ if systemctl --user is-active --quiet hyprpolkitagent.service; then
+ msg="[ACTION] Restarting hyprpolkitagent.service..."
+ [[ $DRY_RUN -eq 0 ]] && echo "$msg" >&3; echo "$msg"
+
+ if out=$(systemctl --user restart hyprpolkitagent.service 2>&1); then
+ msg=" [OK] Service restarted successfully."
+ else
+ msg=" [ERROR] Failed to restart service.\n Details: $out"
+ fi
+ echo -e "$msg" >&3; echo -e "$msg"
+ else
+ msg="[INFO] Service is not currently active, skipping restart step."
+ [[ $DRY_RUN -eq 0 ]] && echo "$msg" >&3; echo "$msg"
+ fi
+ else
+ msg="[Dry Run] Would create $OVERRIDE_FILE and reload systemd daemon."
+ echo "$msg"
+ fi
+ fi
+ fi
+}
+
+gather_general_info() {
+ echo -e "\n=======================================" >&3
+ echo -e " General System Information" >&3
+ echo -e "=======================================" >&3
+ echo "Date: $(date)" >&3
+ echo -e "\n--- Kernel ---" >&3
+ uname -a >&3
+
+ echo -e "\n--- OS Release ---" >&3
+ cat /etc/os-release >&3
+
+ echo -e "\n=======================================" >&3
+ echo -e " Polkit Service Status" >&3
+ echo -e "=======================================" >&3
+
+ echo -e "\n--- System Polkit Service ---" >&3
+ systemctl status polkit.service --no-pager >&3 2>&1 || true
+
+ echo -e "\n--- User Hyprpolkitagent Service ---" >&3
+ systemctl --user status hyprpolkitagent.service --no-pager >&3 2>&1 || true
+
+ echo -e "\n--- Running Polkit Processes ---" >&3
+ local polkit_procs
+ polkit_procs=$(ps aux | grep -i '[p]olkit')
+ if [[ -n "$polkit_procs" ]]; then
+ echo "$polkit_procs" >&3
+
+ # Check for conflicting agents
+ local kde_agent_running=0
+ local gnome_agent_running=0
+ local hypr_agent_running=0
+
+ if echo "$polkit_procs" | grep -q "polkit-kde-authentication-agent-1"; then
+ kde_agent_running=1
+ fi
+ if echo "$polkit_procs" | grep -q "polkit-gnome-authentication-agent-1"; then
+ gnome_agent_running=1
+ fi
+ if echo "$polkit_procs" | grep -q "hyprpolkitagent"; then
+ hypr_agent_running=1
+ fi
+
+ if [[ $hypr_agent_running -eq 1 && ($kde_agent_running -eq 1 || $gnome_agent_running -eq 1) ]]; then
+ echo -e "\n[!] CONFLICT DETECTED: Multiple polkit agents are running!" >&3
+ echo " Hyprpolkitagent is running alongside another desktop environment's agent." >&3
+ echo " Only ONE polkit agent can be registered at a time." >&3
+ if [[ $kde_agent_running -eq 1 ]]; then
+ echo " -> Found KDE polkit agent. You may need to disable it in Hyprland by adding 'NotShowIn=Hyprland;' to its autostart .desktop file." >&3
+ fi
+ if [[ $gnome_agent_running -eq 1 ]]; then
+ echo " -> Found GNOME polkit agent. You may need to disable it in Hyprland." >&3
+ fi
+ elif [[ $kde_agent_running -eq 1 && $hypr_agent_running -eq 0 ]]; then
+ echo -e "\n[!] WARNING: KDE polkit agent is running instead of hyprpolkitagent." >&3
+ echo " This can cause 'authentication agent already exists' errors if hyprpolkitagent tries to start later." >&3
+ fi
+ else
+ echo "No polkit processes found running." >&3
+ fi
+
+ echo -e "\n=======================================" >&3
+ echo -e " Recent Logs" >&3
+ echo -e "=======================================" >&3
+
+ echo -e "\n--- Journalctl (polkit.service) [Last 50 entries, warnings/errors] ---" >&3
+ journalctl -u polkit.service -n 50 --no-pager -p 4 >&3 2>&1 || echo "Could not fetch system polkit logs." >&3
+
+ echo -e "\n--- Journalctl (hyprpolkitagent.service) [Last 50 entries] ---" >&3
+ journalctl --user -u hyprpolkitagent.service -n 50 --no-pager >&3 2>&1 || echo "Could not fetch user hyprpolkitagent logs." >&3
+}
+
+# --- Modular Package Checking System ---
+check_packages() {
+ local check_cmd="$1"
+ local install_msg="$2"
+ shift 2
+ local pkgs=("$@")
+
+ local missing_pkgs=()
+ for pkg in "${pkgs[@]}"; do
+ local out
+ if out=$(eval "$check_cmd \"$pkg\"" 2>/dev/null); then
+ # Print the first line of output as the installed info
+ echo "[INSTALLED] $(echo "$out" | head -n 1)" >&3
+ else
+ echo "[MISSING] $pkg" >&3
+ missing_pkgs+=("$pkg")
+ fi
+ done
+
+ if [[ ${#missing_pkgs[@]} -gt 0 ]]; then
+ echo -e "\nWARNING: The following packages are missing:" >&3
+ for mpkg in "${missing_pkgs[@]}"; do
+ echo " - $mpkg" >&3
+ done
+ echo "$install_msg ${missing_pkgs[*]}" >&3
+ return 1
+ fi
+ return 0
+}
+check_source_binaries() {
+ local bin_dir="$1"
+ shift
+ local bins=("$@")
+ local found_any=0
+
+ echo -e "\n--- Source Builds (${bin_dir}) ---" >&3
+ for bin in "${bins[@]}"; do
+ if [[ -x "${bin_dir}/${bin}" ]]; then
+ echo "[SOURCE] ${bin_dir}/${bin}" >&3
+ found_any=1
+ else
+ echo "[MISSING] ${bin_dir}/${bin}" >&3
+ fi
+ done
+
+ return $found_any
+}
+
+gather_arch_info() {
+ echo -e "\n=======================================" >&3
+ echo -e " Package Info (Arch Linux)" >&3
+ echo -e "=======================================" >&3
+
+ # Essential packages required for polkit & related UI
+ local pkgs=(
+ "qt5-declarative"
+ "qt5-quickcontrols2"
+ "qt6-declarative"
+ "hyprpolkitagent"
+ "polkit"
+ )
+
+ local aur_pkgs=(
+ "xfce-polkit"
+ )
+
+ local missing_any=0
+
+ echo -e "\n--- Official Repositories ---" >&3
+ check_packages "pacman -Q" "Install official packages by running: sudo pacman -S" "${pkgs[@]}" || missing_any=1
+
+ echo -e "\n--- AUR ---" >&3
+ check_packages "pacman -Q" "Install AUR packages by running: yay -S" "${aur_pkgs[@]}" || missing_any=1
+
+ if [[ $missing_any -eq 0 ]]; then
+ echo -e "\nSUCCESS: All expected packages are installed." >&3
+ fi
+}
+gather_ubuntu_info() {
+ echo -e "\n=======================================" >&3
+ echo -e " Package Info (Ubuntu/PPA)" >&3
+ echo -e "=======================================" >&3
+
+ # Essential packages required for polkit & related UI
+ local pkgs=(
+ "qml-module-qtqml"
+ "qml-module-qtquick2"
+ "qml-module-qtquick-controls"
+ "qml-module-qtquick-controls2"
+ "qml-module-qtquick-layouts"
+ "qml6-module-qtqml"
+ "qml6-module-qtquick"
+ "qml6-module-qtquick-controls"
+ "hyprpolkitagent"
+ "polkit"
+ )
+
+ local extra_pkgs=(
+ "xfce-polkit"
+ "polkit-kde-agent-1"
+ "mate-polkit"
+ )
+
+ local missing_any=0
+
+ echo -e "\n--- Official Repositories / PPA ---" >&3
+ check_packages "dpkg -s" "Install packages by running: sudo apt install" "${pkgs[@]}" || missing_any=1
+
+ echo -e "\n--- Extra/Alternative ---" >&3
+ check_packages "dpkg -s" "Install extra packages by running: sudo apt install" "${extra_pkgs[@]}" || missing_any=1
+ echo "[INFO] lxqt-polkit (optional) — large dependency set." >&3
+
+ if [[ $missing_any -eq 0 ]]; then
+ echo -e "\nSUCCESS: All expected packages are installed." >&3
+ fi
+}
+gather_debian_info() {
+ echo -e "\n=======================================" >&3
+ echo -e " Package Info (Debian/Ubuntu)" >&3
+ echo -e "=======================================" >&3
+
+ local source_bins=(
+ "hyprpolkitagent"
+ )
+
+ local source_found=0
+ if check_source_binaries "/usr/local/bin" "${source_bins[@]}"; then
+ source_found=1
+ fi
+
+ # Essential packages required for polkit & related UI
+ local pkgs=(
+ "qml-module-qtqml"
+ "qml-module-qtquick2"
+ "qml-module-qtquick-controls"
+ "qml-module-qtquick-controls2"
+ "qml-module-qtquick-layouts"
+ "qml6-module-qtqml"
+ "qml6-module-qtquick"
+ "qml6-module-qtquick-controls"
+ "polkit"
+ )
+
+ local extra_pkgs=(
+ "xfce4-polkit"
+ "lxqt-policykit"
+ "polkit-kde-agent-1"
+ "mate-polkit"
+ )
+
+ local missing_any=0
+
+ echo -e "\n--- Official Repositories ---" >&3
+ if [[ $source_found -eq 0 ]]; then
+ pkgs+=("hyprpolkitagent")
+ else
+ echo "[INFO] hyprpolkitagent found in /usr/local/bin (source build). Skipping dpkg check for it." >&3
+ fi
+ check_packages "dpkg -s" "Install packages by running: sudo apt install" "${pkgs[@]}" || missing_any=1
+
+ echo -e "\n--- Extra/Alternative ---" >&3
+ check_packages "dpkg -s" "Install extra packages by running: sudo apt install" "${extra_pkgs[@]}" || missing_any=1
+
+ if [[ $missing_any -eq 0 ]]; then
+ echo -e "\nSUCCESS: All expected packages are installed." >&3
+ fi
+}
+
+gather_fedora_info() {
+ echo -e "\n=======================================" >&3
+ echo -e " Package Info (Fedora)" >&3
+ echo -e "=======================================" >&3
+
+ # Essential packages required for polkit & related UI
+ local pkgs=(
+ "qt5-qtdeclarative"
+ "qt5-qtquickcontrols2"
+ "qt6-qtdeclarative"
+ "hyprpolkitagent"
+ "polkit"
+ )
+
+ local extra_pkgs=(
+ "xfce-polkit"
+ )
+
+ local missing_any=0
+
+ echo -e "\n--- Official Repositories ---" >&3
+ check_packages "rpm -q" "Install packages by running: sudo dnf install" "${pkgs[@]}" || missing_any=1
+
+ echo -e "\n--- Extra/Alternative ---" >&3
+ check_packages "rpm -q" "Install extra packages by running: sudo dnf install" "${extra_pkgs[@]}" || missing_any=1
+
+ if [[ $missing_any -eq 0 ]]; then
+ echo -e "\nSUCCESS: All expected packages are installed." >&3
+ fi
+}
+
+detect_os() {
+ if [ -f /etc/os-release ]; then
+ . /etc/os-release
+ OS=$ID
+ else
+ OS="unknown"
+ fi
+}
+
+# ----------------------------------------------------------------------------
+# Main Execution
+# ----------------------------------------------------------------------------
+
+# Parse arguments
+while [[ "$#" -gt 0 ]]; do
+ case "$1" in
+ -h|--help)
+ print_help
+ exit 0
+ ;;
+ -d|--dry-run)
+ DRY_RUN=1
+ ;;
+ --install-override)
+ INSTALL_OVERRIDE=1
+ ;;
+ --force-override)
+ FORCE_OVERRIDE=1
+ INSTALL_OVERRIDE=1
+ ;;
+ -o|--output)
+ if [[ -n "$2" && "$2" != -* ]]; then
+ OUTFILE="$2"
+ shift
+ else
+ echo "Error: Argument for $1 is missing" >&2
+ exit 1
+ fi
+ ;;
+ *)
+ echo "Unknown option: $1" >&2
+ print_help
+ exit 1
+ ;;
+ esac
+ shift
+done
+
+setup_output
+
+echo "Starting Polkit Diagnostic Script..." >&3
+
+# Optional apply override logic
+if [[ $INSTALL_OVERRIDE -eq 1 ]]; then
+ apply_override
+fi
+
+# Gather general info
+gather_general_info
+
+# Gather OS-specific package info
+detect_os
+case "$OS" in
+ arch|artix|manjaro|endeavouros|cachyos)
+ gather_arch_info
+ ;;
+ debian)
+ gather_debian_info
+ ;;
+ ubuntu|pop|linuxmint)
+ gather_ubuntu_info
+ ;;
+ fedora)
+ gather_fedora_info
+ ;;
+ opensuse*)
+ echo -e "\n=======================================" >&3
+ echo -e " Package Info ($OS)" >&3
+ echo -e "=======================================" >&3
+ echo "OpenSUSE package check is pending implementation." >&3
+ ;;
+ nixos)
+ echo -e "\n=======================================" >&3
+ echo -e " Package Info ($OS)" >&3
+ echo -e "=======================================" >&3
+ echo "NixOS configuration check is pending implementation." >&3
+ ;;
+ *)
+ echo -e "\n=======================================" >&3
+ echo -e " Package Info" >&3
+ echo -e "=======================================" >&3
+ echo "Unknown or unsupported OS: $OS. Skipping package checks." >&3
+ ;;
+esac
+
+echo -e "\nDiagnostics completed at $(date)" >&3
+
+if [[ $DRY_RUN -eq 0 ]]; then
+ echo "================================================="
+ echo " Diagnostic gathering complete!"
+ echo " Please review the output file: $OUTFILE"
+ echo "================================================="
+fi
diff --git a/config/hypr/scripts/Polkit.sh b/config/hypr/scripts/Polkit.sh
index 768747ab..f09c9e1f 100755
--- a/config/hypr/scripts/Polkit.sh
+++ b/config/hypr/scripts/Polkit.sh
@@ -21,12 +21,23 @@ fi
if [ -z "${QT_QUICK_CONTROLS_STYLE:-}" ]; then
export QT_QUICK_CONTROLS_STYLE=Basic
fi
-if [ -z "${QT_STYLE_OVERRIDE:-}" ]; then
+
+# Check if kvantum is specified globally but the QML module is missing
+if [[ "${QT_STYLE_OVERRIDE:-}" == "kvantum" ]] || [[ "${QT_STYLE_OVERRIDE:-}" == "kvantum-dark" ]]; then
+ # Check common Qt5/Qt6 QML directories for the Kvantum module
+ if ! find /usr/lib /usr/lib64 /usr/share -type d -path "*/qml/*/kvantum" -print -quit 2>/dev/null | grep -q .; then
+ echo "Kvantum QML module not found. Overriding QT_STYLE_OVERRIDE for Polkit to prevent crash."
+ export QT_STYLE_OVERRIDE=Fusion
+ fi
+elif [ -z "${QT_STYLE_OVERRIDE:-}" ]; then
export QT_STYLE_OVERRIDE=Fusion
fi
# List of potential Polkit agent file paths (preferred order)
polkit=(
+ "/usr/libexec/hyprpolkitagent"
+ "/usr/lib/hyprpolkitagent"
+ "/usr/lib/hyprpolkitagent/hyprpolkitagent"
"/usr/bin/xfce-polkit"
"/usr/lib/xfce4/polkit-agent/xfce-polkit"
"/usr/libexec/xfce-polkit"
@@ -39,9 +50,6 @@ polkit=(
"/usr/lib/policykit-1-gnome/polkit-gnome-authentication-agent-1"
"/usr/lib/polkit-kde-authentication-agent-1"
"/usr/libexec/polkit-kde-authentication-agent-1"
- "/usr/libexec/hyprpolkitagent"
- "/usr/lib/hyprpolkitagent"
- "/usr/lib/hyprpolkitagent/hyprpolkitagent"
)
executed=false
diff --git a/config/hypr/scripts/WallpaperDaemon.sh b/config/hypr/scripts/WallpaperDaemon.sh
index fc7f71c0..4d1c6e86 100755
--- a/config/hypr/scripts/WallpaperDaemon.sh
+++ b/config/hypr/scripts/WallpaperDaemon.sh
@@ -23,44 +23,83 @@ done
wallpaper_link="$HOME/.config/rofi/.current_wallpaper"
wallpaper_current="$HOME/.config/hypr/wallpaper_effects/.wallpaper_current"
-wallpaper_path=""
-# Prefer the symlink target if it's valid
-if [ -L "$wallpaper_link" ]; then
- resolved="$(readlink -f "$wallpaper_link")"
- if [ -n "$resolved" ] && [ -f "$resolved" ]; then
- wallpaper_path="$resolved"
+read_cached_wallpaper() {
+ local cache_file="$1"
+ [ -f "$cache_file" ] || return 1
+ awk 'NF && $0 !~ /^filter/ {print; exit}' "$cache_file"
+}
+
+get_monitors() {
+ if command -v jq >/dev/null 2>&1; then
+ hyprctl monitors -j | jq -r '.[].name'
+ else
+ hyprctl monitors | awk '/^Monitor/{print $2}'
fi
-fi
+}
-# Fall back to link file or copied current wallpaper
-if [ -z "$wallpaper_path" ] && [ -f "$wallpaper_link" ]; then
- wallpaper_path="$wallpaper_link"
-fi
-if [ -z "$wallpaper_path" ] && [ -f "$wallpaper_current" ]; then
- wallpaper_path="$wallpaper_current"
-fi
+apply_wallpaper_for_monitor() {
+ local monitor="$1"
+ local per_monitor_link="$HOME/.config/rofi/.current_wallpaper_${monitor}"
+ local per_monitor_current="$HOME/.config/hypr/wallpaper_effects/.wallpaper_current_${monitor}"
+ local wallpaper_path=""
-# Last resort: use cached swww/awww wallpaper paths
-if [ -z "$wallpaper_path" ]; then
- for cache_dir in "$HOME/.cache/awww" "$HOME/.cache/swww"; do
- [ -d "$cache_dir" ] || continue
- for cache_file in "$cache_dir"/*; do
- [ -f "$cache_file" ] || continue
- candidate="$(awk 'NF && $0 !~ /^filter/ {print; exit}' "$cache_file")"
- if [ -n "$candidate" ] && [ -f "$candidate" ]; then
- wallpaper_path="$candidate"
- break
- fi
- done
- [ -n "$wallpaper_path" ] && break
- done
-fi
+ # Prefer per-monitor symlink target if valid
+ if [ -L "$per_monitor_link" ]; then
+ local resolved
+ resolved="$(readlink -f "$per_monitor_link")"
+ if [ -n "$resolved" ] && [ -f "$resolved" ]; then
+ wallpaper_path="$resolved"
+ fi
+ fi
-if [ -n "$wallpaper_path" ] && [ -f "$wallpaper_path" ]; then
- if ! "$WWW_CMD" img "$wallpaper_path" >/dev/null 2>&1; then
- # Retry once after a short delay
- sleep 0.3
- "$WWW_CMD" img "$wallpaper_path" >/dev/null 2>&1 &
+ # Fall back to per-monitor files
+ if [ -z "$wallpaper_path" ] && [ -f "$per_monitor_link" ]; then
+ wallpaper_path="$per_monitor_link"
fi
-fi
+ if [ -z "$wallpaper_path" ] && [ -f "$per_monitor_current" ]; then
+ wallpaper_path="$per_monitor_current"
+ fi
+
+ # Fall back to global files
+ if [ -z "$wallpaper_path" ] && [ -L "$wallpaper_link" ]; then
+ local resolved_global
+ resolved_global="$(readlink -f "$wallpaper_link")"
+ if [ -n "$resolved_global" ] && [ -f "$resolved_global" ]; then
+ wallpaper_path="$resolved_global"
+ fi
+ fi
+ if [ -z "$wallpaper_path" ] && [ -f "$wallpaper_link" ]; then
+ wallpaper_path="$wallpaper_link"
+ fi
+ if [ -z "$wallpaper_path" ] && [ -f "$wallpaper_current" ]; then
+ wallpaper_path="$wallpaper_current"
+ fi
+
+ # Last resort: use per-monitor cache
+ if [ -z "$wallpaper_path" ]; then
+ local cache_file="$WWW_CACHE_DIR/$monitor"
+ local cache_fallback=""
+ if [ "$WWW_CACHE_DIR" = "$HOME/.cache/awww" ]; then
+ cache_fallback="$HOME/.cache/swww/$monitor"
+ else
+ cache_fallback="$HOME/.cache/awww/$monitor"
+ fi
+ wallpaper_path="$(read_cached_wallpaper "$cache_file")"
+ if [ -z "$wallpaper_path" ] && [ -n "$cache_fallback" ]; then
+ wallpaper_path="$(read_cached_wallpaper "$cache_fallback")"
+ fi
+ fi
+
+ if [ -n "$wallpaper_path" ] && [ -f "$wallpaper_path" ]; then
+ if ! "$WWW_CMD" img -o "$monitor" "$wallpaper_path" >/dev/null 2>&1; then
+ sleep 0.3
+ "$WWW_CMD" img -o "$monitor" "$wallpaper_path" >/dev/null 2>&1 &
+ fi
+ fi
+}
+
+while read -r monitor; do
+ [ -n "$monitor" ] || continue
+ apply_wallpaper_for_monitor "$monitor"
+done < <(get_monitors)
diff --git a/config/hypr/v2.3.23 b/config/hypr/v2.3.23
new file mode 100644
index 00000000..51de9972
--- /dev/null
+++ b/config/hypr/v2.3.23
@@ -0,0 +1,5 @@
+### https://github.com/LinuxBeginnings ###
+## https://github.com/LinuxBeginnings/Hyprland-Dots
+## This is to have a reference of which version would be
+
+## note that this will always be higher than the released versions \ No newline at end of file
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage