From 2d2f6198a92278a141c333926a94d8e82de0570d Mon Sep 17 00:00:00 2001 From: Ryan Garofano Date: Mon, 22 Dec 2025 18:05:31 -0800 Subject: feat: Add precise volume adjustment --- config/hypr/configs/Keybinds.conf | 2 ++ config/hypr/scripts/Volume.sh | 63 +++++++++++++++++++++++++-------------- 2 files changed, 42 insertions(+), 23 deletions(-) (limited to 'config/hypr') diff --git a/config/hypr/configs/Keybinds.conf b/config/hypr/configs/Keybinds.conf index 1ddbc81a..7d0e3fef 100644 --- a/config/hypr/configs/Keybinds.conf +++ b/config/hypr/configs/Keybinds.conf @@ -106,6 +106,8 @@ bindd = ALT, tab, bring active to top, bringactivetotop # Special Keys / Hot Keys bindeld = , xf86audioraisevolume, volume up, exec, $scriptsDir/Volume.sh --inc bindeld = , xf86audiolowervolume, volume down, exec, $scriptsDir/Volume.sh --dec +bindeld = ALT, xf86audioraisevolume, volume up precise, exec, $scriptsDir/Volume.sh --inc-precise +bindeld = ALT, xf86audiolowervolume, volume down precise, exec, $scriptsDir/Volume.sh --dec-precise bindld = , xf86AudioMicMute, toggle mic mute, exec, $scriptsDir/Volume.sh --toggle-mic bindld = , xf86audiomute, toggle mute, exec, $scriptsDir/Volume.sh --toggle bindld = , xf86Sleep, sleep, exec, systemctl suspend diff --git a/config/hypr/scripts/Volume.sh b/config/hypr/scripts/Volume.sh index 4c82f543..d870519c 100755 --- a/config/hypr/scripts/Volume.sh +++ b/config/hypr/scripts/Volume.sh @@ -44,7 +44,7 @@ inc_volume() { if [ "$(pamixer --get-mute)" == "true" ]; then toggle_mute else - pamixer -i 5 --allow-boost --set-limit 150 && notify_user + pamixer -i "$1" --allow-boost --set-limit 150 && notify_user fi } @@ -53,7 +53,7 @@ dec_volume() { if [ "$(pamixer --get-mute)" == "true" ]; then toggle_mute else - pamixer -d 5 && notify_user + pamixer -d "$1" && notify_user fi } @@ -120,24 +120,41 @@ dec_mic_volume() { } # Execute accordingly -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 \ No newline at end of file +case "$1" in +"--get") + get_volume + ;; +"--inc") + inc_volume 5 + ;; +"--inc-precise") + inc_volume 1 + ;; +"--dec") + dec_volume 5 + ;; +"--dec-precise") + dec_volume 1 + ;; +"--toggle") + toggle_mute + ;; +"--toggle-mic") + toggle_mic + ;; +"--get-icon") + get_icon + ;; +"--get-mic-icon") + get_mic_icon + ;; +"--mic-inc") + inc_mic_volume + ;; +"--mic-dec") + dec_mic_volume + ;; +*) + get_volume + ;; +esac -- cgit v1.2.3 From 862e49f7a3013b8c948d0036002cd07527b474cd Mon Sep 17 00:00:00 2001 From: Suresh Thagunna Date: Mon, 22 Dec 2025 18:05:07 -0500 Subject: fix: layout aware cycleprev and cyclenext window bindings --- config/hypr/configs/Keybinds.conf | 2 ++ config/hypr/configs/Startup_Apps.conf | 1 - config/hypr/scripts/ChangeLayout.sh | 31 +++++++++++++++++++++++-------- 3 files changed, 25 insertions(+), 9 deletions(-) (limited to 'config/hypr') diff --git a/config/hypr/configs/Keybinds.conf b/config/hypr/configs/Keybinds.conf index 7d0e3fef..ddc516bc 100644 --- a/config/hypr/configs/Keybinds.conf +++ b/config/hypr/configs/Keybinds.conf @@ -97,6 +97,8 @@ bindd = $mainMod, P, toggle pseudo (dwindle), pseudo, # Works on either layout (Master or Dwindle) bindd = $mainMod, M, set split ratio 0.3, exec, hyprctl dispatch splitratio 0.3 +# layout aware keybinds +exec-once = $scriptsDir/ChangeLayout.sh init # Cycle windows; if floating bring to top diff --git a/config/hypr/configs/Startup_Apps.conf b/config/hypr/configs/Startup_Apps.conf index 0cfb6427..27c8d26a 100644 --- a/config/hypr/configs/Startup_Apps.conf +++ b/config/hypr/configs/Startup_Apps.conf @@ -19,7 +19,6 @@ exec-once = swww-daemon --format xrgb ### Startup ### exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP -exec-once = $scriptsDir/KeybindsLayoutInit.sh # Drop Down terminal # See Bug#810 https://github.com/JaKooLit/Hyprland-Dots/issues/810#issuecomment-3351947644 diff --git a/config/hypr/scripts/ChangeLayout.sh b/config/hypr/scripts/ChangeLayout.sh index e2436b79..221f9637 100755 --- a/config/hypr/scripts/ChangeLayout.sh +++ b/config/hypr/scripts/ChangeLayout.sh @@ -6,19 +6,34 @@ notif="$HOME/.config/swaync/images/ja.png" LAYOUT=$(hyprctl -j getoption general:layout | jq '.str' | sed 's/"//g') +# Reverse layout value to reuse toggle logic. So layouts don't get swapped initially. +if [ "$1" = "init" ]; then + if [ "$LAYOUT" = "master" ]; then + LAYOUT="dwindle" + else + LAYOUT="master" + fi +fi + case $LAYOUT in "master") - hyprctl keyword general:layout dwindle - # SUPER+J/K are global and managed by KeybindsLayoutInit.sh; only manage SUPER+O here - hyprctl keyword bind SUPER,O,togglesplit + 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 -e -u low -i "$notif" " Dwindle Layout" - ;; + ;; "dwindle") - hyprctl keyword general:layout master - # Drop togglesplit binding on SUPER+O when switching back to master - hyprctl keyword unbind SUPER,O + 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 -e -u low -i "$notif" " Master Layout" - ;; + ;; *) ;; esac -- cgit v1.2.3 From 7612539f21326332250c906cdf78fdb97bec9a1c Mon Sep 17 00:00:00 2001 From: Don Williams Date: Tue, 23 Dec 2025 23:17:12 -0500 Subject: Switch KB layout updated for new location System settings move to hypr/configs/Systemsettings On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: CHANGELOG.md modified: config/hypr/scripts/SwitchKeyboardLayout.sh modified: config/hypr/scripts/Tak0-Per-Window-Switch.sh --- CHANGELOG.md | 4 +- config/hypr/scripts/SwitchKeyboardLayout.sh | 79 +++++++++++++-------------- config/hypr/scripts/Tak0-Per-Window-Switch.sh | 33 ++++++----- 3 files changed, 58 insertions(+), 58 deletions(-) (limited to 'config/hypr') diff --git a/CHANGELOG.md b/CHANGELOG.md index e4895436..fa37c8f9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,12 @@ # Changelog β€” JAK's Hyprland Dotfiles ## v2.3.19 β€” 2025-12-22 + - Added: - Optional keybinding to increment/decrement audio in 1% steps vs. 5% - Thanks [rgarofono](https://github.com/rgarofano) for the code - +- Fixed: + - Switch Layout was looking in wrong location ## v2.3.18 β€” 2025-12-10 diff --git a/config/hypr/scripts/SwitchKeyboardLayout.sh b/config/hypr/scripts/SwitchKeyboardLayout.sh index 18a9517e..34d008a1 100755 --- a/config/hypr/scripts/SwitchKeyboardLayout.sh +++ b/config/hypr/scripts/SwitchKeyboardLayout.sh @@ -3,24 +3,23 @@ # This is for changing kb_layouts. Set kb_layouts in $settings_file layout_file="$HOME/.cache/kb_layout" -settings_file="$HOME/.config/hypr/UserConfigs/UserSettings.conf" +settings_file="$HOME/.config/hypr/configs/SystemSettings.conf" notif_icon="$HOME/.config/swaync/images/ja.png" # Refined ignore list with patterns or specific device names ignore_patterns=( - "--(avrcp)" - "Bluetooth Speaker" + "--(avrcp)" + "Bluetooth Speaker" "Other Device Name" - ) - +) # Create layout file with default layout if it does not exist if [ ! -f "$layout_file" ]; then echo "Creating layout file..." default_layout=$(grep 'kb_layout = ' "$settings_file" | cut -d '=' -f 2 | tr -d '[:space:]' | cut -d ',' -f 1 2>/dev/null) default_layout=${default_layout:-"us"} # Default to 'us' layout - echo "$default_layout" > "$layout_file" + echo "$default_layout" >"$layout_file" echo "Default layout set to $default_layout" fi @@ -32,7 +31,7 @@ if [ -f "$settings_file" ]; then kb_layout_line=$(grep 'kb_layout = ' "$settings_file" | cut -d '=' -f 2) # Remove leading and trailing spaces around each layout kb_layout_line=$(echo "$kb_layout_line" | tr -d '[:space:]') - IFS=',' read -r -a layout_mapping <<< "$kb_layout_line" + IFS=',' read -r -a layout_mapping <<<"$kb_layout_line" else echo "Settings file not found!" exit 1 @@ -49,56 +48,56 @@ for ((i = 0; i < layout_count; i++)); do fi done -next_index=$(( (current_index + 1) % layout_count )) +next_index=$(((current_index + 1) % layout_count)) new_layout="${layout_mapping[next_index]}" echo "Next layout: $new_layout" # Function to get keyboard names get_keyboard_names() { - hyprctl devices -j | jq -r '.keyboards[].name' + hyprctl devices -j | jq -r '.keyboards[].name' } # Function to check if a device matches any ignore pattern is_ignored() { - local device_name=$1 - for pattern in "${ignore_patterns[@]}"; do - if [[ "$device_name" == *"$pattern"* ]]; then - return 0 # Device matches ignore pattern - fi - done - return 1 # Device does not match any ignore pattern + local device_name=$1 + for pattern in "${ignore_patterns[@]}"; do + if [[ "$device_name" == *"$pattern"* ]]; then + return 0 # Device matches ignore pattern + fi + done + return 1 # Device does not match any ignore pattern } # Function to change keyboard layout change_layout() { - local error_found=false - - while read -r name; do - if is_ignored "$name"; then - echo "Skipping ignored device: $name" - continue - fi - - echo "Switching layout for $name to $new_layout..." - hyprctl switchxkblayout "$name" "$next_index" - if [ $? -ne 0 ]; then - echo "Error while switching layout for $name." >&2 - error_found=true - fi - done <<< "$(get_keyboard_names)" - - $error_found && return 1 - return 0 + local error_found=false + + while read -r name; do + if is_ignored "$name"; then + echo "Skipping ignored device: $name" + continue + fi + + echo "Switching layout for $name to $new_layout..." + hyprctl switchxkblayout "$name" "$next_index" + if [ $? -ne 0 ]; then + echo "Error while switching layout for $name." >&2 + error_found=true + fi + done <<<"$(get_keyboard_names)" + + $error_found && return 1 + return 0 } # Execute layout change and notify if ! change_layout; then - notify-send -u low -t 2000 'kb_layout' " Error:" " Layout change failed" - echo "Layout change failed." >&2 - exit 1 + notify-send -u low -t 2000 'kb_layout' " Error:" " Layout change failed" + echo "Layout change failed." >&2 + exit 1 else - notify-send -u low -i "$notif_icon" " kb_layout: $new_layout" - echo "Layout change notification sent." + notify-send -u low -i "$notif_icon" " kb_layout: $new_layout" + echo "Layout change notification sent." fi -echo "$new_layout" > "$layout_file" +echo "$new_layout" >"$layout_file" diff --git a/config/hypr/scripts/Tak0-Per-Window-Switch.sh b/config/hypr/scripts/Tak0-Per-Window-Switch.sh index 76b6ad2d..7879fb85 100755 --- a/config/hypr/scripts/Tak0-Per-Window-Switch.sh +++ b/config/hypr/scripts/Tak0-Per-Window-Switch.sh @@ -1,5 +1,5 @@ ################################################################## -# # +# # # # # TAK_0'S Per-Window-Switch # # # @@ -7,21 +7,14 @@ # # # Just a little script that I made to switch keyboard layouts # # per-window instead of global switching for the more # -# smooth and comfortable workflow. # +# smooth and comfortable workflow. # # # ################################################################## - - - - - - - -# This is for changing kb_layouts. Set kb_layouts in +# This is for changing kb_layouts. Set kb_layouts in MAP_FILE="$HOME/.cache/kb_layout_per_window" -CFG_FILE="$HOME/.config/hypr/UserConfigs/UserSettings.conf" +CFG_FILE="$HOME/.config/hypr/configs/SystemSettings.conf" ICON="$HOME/.config/swaync/images/ja.png" SCRIPT_NAME="$(basename "$0")" @@ -49,8 +42,8 @@ get_keyboards() { # Save window-specific layout save_map() { local W=$1 L=$2 - grep -v "^${W}:" "$MAP_FILE" > "$MAP_FILE.tmp" - echo "${W}:${L}" >> "$MAP_FILE.tmp" + grep -v "^${W}:" "$MAP_FILE" >"$MAP_FILE.tmp" + echo "${W}:${L}" >>"$MAP_FILE.tmp" mv "$MAP_FILE.tmp" "$MAP_FILE" } @@ -82,7 +75,7 @@ cmd_toggle() { break fi done - NEXT=$(( (i+1) % count )) + NEXT=$(((i + 1) % count)) do_switch "$NEXT" save_map "$W" "${kb_layouts[NEXT]}" notify-send -u low -i "$ICON" "kb_layout: ${kb_layouts[NEXT]}" @@ -104,7 +97,10 @@ cmd_restore() { # Listen to focus events and restore window-specific layouts subscribe() { local SOCKET2="$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock" - [[ -S "$SOCKET2" ]] || { echo "Error: Hyprland socket not found." >&2; exit 1; } + [[ -S "$SOCKET2" ]] || { + echo "Error: Hyprland socket not found." >&2 + exit 1 + } socat -u UNIX-CONNECT:"$SOCKET2" - | while read -r line; do [[ "$line" =~ ^activewindow ]] && cmd_restore @@ -118,6 +114,9 @@ fi # CLI case "$1" in - toggle|"") cmd_toggle ;; - *) echo "Usage: $SCRIPT_NAME [toggle]" >&2; exit 1 ;; +toggle | "") cmd_toggle ;; +*) + echo "Usage: $SCRIPT_NAME [toggle]" >&2 + exit 1 + ;; esac -- cgit v1.2.3 From 05a8b017c97116e6adebaf58070de401889ad055 Mon Sep 17 00:00:00 2001 From: Maximilian Zhu Date: Mon, 29 Dec 2025 10:57:53 +0100 Subject: Fix: Update wallpaper path in WallustSwww.sh Updated wallpaper path in WallustSwww.sh to match the newest version of swww. It worked in a test on my local machine on fedora. The change was necessary to let ~/.config/rofi/.current_wallpaper to update automatically and it also fixed wallust updating the color scheme automatically. It also made hyprlock to use the current wallpaper as background. Rofi's embed wallpaper section got fixed too. --- config/hypr/scripts/WallustSwww.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'config/hypr') diff --git a/config/hypr/scripts/WallustSwww.sh b/config/hypr/scripts/WallustSwww.sh index 657f41ab..f3da3e35 100755 --- a/config/hypr/scripts/WallustSwww.sh +++ b/config/hypr/scripts/WallustSwww.sh @@ -40,7 +40,8 @@ else if [[ -f "$cache_file" ]]; then # The first non-filter line is the original wallpaper path # wallpaper_path="$(grep -v 'Lanczos3' "$cache_file" | head -n 1)" - wallpaper_path=$(swww query | grep $current_monitor | awk '{print $9}') + # wallpaper_path=$(swww query | grep $current_monitor | awk '{print $9}') + wallpaper_path=$(swww query | sed 's/.*image: //') fi fi -- cgit v1.2.3 From 2307f03405f6b7f8695f190089d24a6c29dab09f Mon Sep 17 00:00:00 2001 From: Maximilian Zhu Date: Mon, 29 Dec 2025 12:51:57 +0100 Subject: Update: Enhance Weather.sh to get city from IP address Added functionality to retrieve current city based on IP address with fallbacks and manual setting. --- config/hypr/UserScripts/Weather.sh | 48 ++++++++++++++++++++++++++++++++------ 1 file changed, 41 insertions(+), 7 deletions(-) (limited to 'config/hypr') diff --git a/config/hypr/UserScripts/Weather.sh b/config/hypr/UserScripts/Weather.sh index ac9abc13..4588ed1d 100755 --- a/config/hypr/UserScripts/Weather.sh +++ b/config/hypr/UserScripts/Weather.sh @@ -2,16 +2,50 @@ # /* ---- πŸ’« https://github.com/JaKooLit πŸ’« ---- */ ## # weather info from wttr. https://github.com/chubin/wttr.in # Remember to add city +# Function to get current city from IP address with fallback + +# Get your current location with your IP adress +get_current_city() { + local city + + # First try: ipinfo.io + local location_data=$(curl -fsS "https://ipinfo.io/json" 2>/dev/null) + if [ $? -eq 0 ] && [ -n "$location_data" ]; then + city=$(echo "$location_data" | grep -o '"city"[[:space:]]*:[[:space:]]*"[^"]*"' | cut -d'"' -f4) + if [ -n "$city" ]; then + echo "$city" + return 0 + fi + fi + + # Fallback: ipapi.co + city=$(curl -fsS "https://ipapi.co/json" 2>/dev/null | grep -o '"city"[[:space:]]*:[[:space:]]*"[^"]*"' | cut -d'"' -f4) + if [ -n "$city" ]; then + echo "$city" + return 0 + fi + + # Last resort: ipwho.is + city=$(curl -fsS "https://ipwho.is/" 2>/dev/null | grep -o '"city"[[:space:]]*:[[:space:]]*"[^"]*"' | cut -d'"' -f4) + if [ -n "$city" ]; then + echo "$city" + return 0 + fi + + # If all fail + echo "Unknown" >&2 + return 1 +} -city="" - +city=$(get_current_city) -# if city is blank, use https://ipapi.co/json to get location from IP -if [ -z "$city" ]; then - city=$(curl -fsS https://ipapi.co/json | grep city | cut -f4 -d'"') +# If city is empty, that means the IP check failed, which means, we should use manual setting +if [ -z "$city" ] || [ "$city" = "Unknown" ]; then + # SET YOUR MANUAL CITY HERE + city=" " # ← Change this to your preferred city + echo "Using manual city: $city" >&2 fi - # URL-encode city for safe use in URLs encoded_city="$city" if command -v python3 >/dev/null 2>&1; then @@ -206,4 +240,4 @@ tooltip_json=$(json_escape "${weather[0]}: $temperature $cond_disp") printf '{"text":"%s", "alt":"%s", "tooltip":"%s"}\n' "$text_json" "$alt_json" "$tooltip_json" # Write a two-line cache with an actual newline between lines -printf ' %s \n%s %s\n' "$temperature" "$condition" "${weather[1]}" > "$HOME/.cache/.weather_cache" \ No newline at end of file +printf ' %s \n%s %s\n' "$temperature" "$condition" "${weather[1]}" > "$HOME/.cache/.weather_cache" -- cgit v1.2.3 From 59713a66e3dce8b2c006dc1ce7847b761d759147 Mon Sep 17 00:00:00 2001 From: Maximilian Zhu Date: Mon, 29 Dec 2025 13:02:07 +0100 Subject: Add network check to WeatherWrap script Added a network connectivity check function to determine if the script can proceed with fetching weather data. If no network is available, it returns an offline status. (It will show an offline Icon in Waybar after waking up from `systemctl suspend` or `systemctl hibernate` and having no network. If you click it in waybar it will recheck, but this is unintended) --- config/hypr/UserScripts/WeatherWrap.sh | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) (limited to 'config/hypr') diff --git a/config/hypr/UserScripts/WeatherWrap.sh b/config/hypr/UserScripts/WeatherWrap.sh index 10c125dc..5b266930 100755 --- a/config/hypr/UserScripts/WeatherWrap.sh +++ b/config/hypr/UserScripts/WeatherWrap.sh @@ -6,6 +6,30 @@ SCRIPT_DIR="$(dirname "$0")" PY_SCRIPT="$SCRIPT_DIR/Weather.py" 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 + return 0 + fi + + if ping -c1 -W2 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 + return 0 + fi + + return 1 +} + +# If no network, return offline status immediately +if ! check_network; then + echo '{"text":"σ°–ͺ", "alt":"Offline", "tooltip":"No network connection"}' + exit 0 +fi + run_fallback() { if [ -f "$BASH_FALLBACK" ]; then # Invoke via bash to avoid requiring +x and ensure consistent shell @@ -30,4 +54,4 @@ else echo "python3 not found in PATH β€” falling back to Weather.sh" >&2 run_fallback "$@" exit $? -fi \ No newline at end of file +fi -- cgit v1.2.3 From 7389aef59d045c622e24797d7e46bdbd8d222f38 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Tue, 30 Dec 2025 12:19:13 -0500 Subject: Current WindowRules-config-v3 file Opactity keybinding not working SUPERCTRL+O On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/hypr/configs/WindowRules-config-v3.conf --- config/hypr/configs/WindowRules-config-v3.conf | 214 +++++++++++-------------- 1 file changed, 95 insertions(+), 119 deletions(-) (limited to 'config/hypr') diff --git a/config/hypr/configs/WindowRules-config-v3.conf b/config/hypr/configs/WindowRules-config-v3.conf index c4a8a624..ba179461 100644 --- a/config/hypr/configs/WindowRules-config-v3.conf +++ b/config/hypr/configs/WindowRules-config-v3.conf @@ -1,66 +1,82 @@ # /* ---- πŸ’« https://github.com/JaKooLit πŸ’« ---- */ # -# For window rules and layerrules +# Vendor defaults for window rules and layerrules # See https://wiki.hyprland.org/Configuring/Window-Rules/ for more # NOTES: This is only for Hyprland > 0.52.1 -# note: This should NOT be implemented on Debian and Ubuntu -# Vendor defaults for window rules and layerrules +# note for ja: This should NOT be implemented on Debian and Ubuntu # windowrule - tags - add apps under appropriate tag to use the same settings +# browser tags windowrule = match:class ^([Ff]irefox|org.mozilla.firefox|[Ff]irefox-esr|[Ff]irefox-bin)$, tag +browser windowrule = match:class ^([Gg]oogle-chrome(-beta|-dev|-unstable)?)$, tag +browser -windowrule = match:class ^(chrome-.+-Default)$ # Chrome PWAs, tag +browser +windowrule = match:class ^(chrome-.+-Default)$, tag +browser windowrule = match:class ^([Cc]hromium)$, tag +browser windowrule = match:class ^([Mm]icrosoft-edge(-stable|-beta|-dev|-unstable))$, tag +browser windowrule = match:class ^(Brave-browser(-beta|-dev|-unstable)?)$, tag +browser windowrule = match:class ^([Tt]horium-browser|[Cc]achy-browser)$, tag +browser windowrule = match:class ^(zen-alpha|zen)$, tag +browser +# notif tags windowrule = match:class ^(swaync-control-center|swaync-notification-window|swaync-client|class)$, tag +notif +# KooL settings tag windowrule = match:title ^(KooL Quick Cheat Sheet)$, tag +KooL_Cheat windowrule = match:title ^(KooL Hyprland Settings)$, tag +KooL_Settings windowrule = match:class ^(nwg-displays|nwg-look)$, tag +KooL-Settings +# terminal tags windowrule = match:class ^(Alacritty|kitty|kitty-dropterm)$, tag +terminal +# email tags windowrule = match:class ^([Tt]hunderbird|org.gnome.Evolution)$, tag +email windowrule = match:class ^(eu.betterbird.Betterbird)$, tag +email +# project tags windowrule = match:class ^(codium|codium-url-handler|VSCodium)$, tag +projects windowrule = match:class ^(VSCode|code|code-url-handler)$, tag +projects -windowrule = match:class ^(jetbrains-.+)$ # JetBrains IDEs, tag +projects +windowrule = match:class ^(jetbrains-.+)$, tag +projects +# screenshare tags windowrule = match:class ^(com.obsproject.Studio)$, tag +screenshare +# IM tags windowrule = match:class ^([Dd]iscord|[Ww]ebCord|[Vv]esktop)$, tag +im windowrule = match:class ^([Ff]erdium)$, tag +im windowrule = match:class ^([Ww]hatsapp-for-linux)$, tag +im windowrule = match:class ^(ZapZap|com.rtosta.zapzap)$, tag +im windowrule = match:class ^(org.telegram.desktop|io.github.tdesktop_x64.TDesktop)$, tag +im windowrule = match:class ^(teams-for-linux)$, tag +im -windowrule = match:class ^(im.riot.Riot|Element)$ # Element Matrix client, tag +im +windowrule = match:class ^(im.riot.Riot|Element)$, tag +im +# game tags windowrule = match:class ^(gamescope)$, tag +games -windowrule = match:class ^(steam_app_\d+)$, tag +games +windowrule = match:class ^(steam_app_\\d+)$, tag +games +# gamestore tags windowrule = match:class ^([Ss]team)$, tag +gamestore windowrule = match:title ^([Ll]utris)$, tag +gamestore windowrule = match:class ^(com.heroicgameslauncher.hgl)$, tag +gamestore +# file-manager tags windowrule = match:class ^([Tt]hunar|org.gnome.Nautilus|[Pp]cmanfm-qt)$, tag +file-manager windowrule = match:class ^(app.drey.Warp)$, tag +file-manager +# wallpaper tags windowrule = match:class ^([Ww]aytrogen)$, tag +wallpaper + +# multimedia tags windowrule = match:class ^([Aa]udacious)$, tag +multimedia + +# multimedia-video tags windowrule = match:class ^([Mm]pv|vlc)$, tag +multimedia_video +# settings tags windowrule = match:title ^(ROG Control)$, tag +settings -windowrule = match:class ^(wihotspot(-gui)?)$ # wifi hotspot, tag +settings -windowrule = match:class ^([Bb]aobab|org.gnome.[Bb]aobab)$ # Disk usage analyzer, tag +settings +windowrule = match:class ^(wihotspot(-gui)?)$, tag +settings +windowrule = match:class ^([Bb]aobab|org.gnome.[Bb]aobab)$, tag +settings windowrule = match:class ^(gnome-disks|wihotspot(-gui)?)$, tag +settings windowrule = match:title (Kvantum Manager), tag +settings -windowrule = match:class ^(file-roller|org.gnome.FileRoller)$ # archive manager, tag +settings +windowrule = match:class ^(file-roller|org.gnome.FileRoller)$, tag +settings windowrule = match:class ^(nm-applet|nm-connection-editor|blueman-manager)$, tag +settings windowrule = match:class ^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$, tag +settings windowrule = match:class ^(qt5ct|qt6ct|[Yy]ad)$, tag +settings @@ -68,137 +84,97 @@ windowrule = match:class (xdg-desktop-portal-gtk), tag +settings windowrule = match:class ^(org.kde.polkit-kde-authentication-agent-1)$, tag +settings windowrule = match:class ^([Rr]ofi)$, tag +settings -windowrule = match:class ^(gnome-system-monitor|org.gnome.SystemMonitor|io.missioncenter.MissionCenter)$ # system monitor, tag +viewer -windowrule = match:class ^(evince)$ # document viewer, tag +viewer -windowrule = match:class ^(eog|org.gnome.Loupe)$ # image viewer, tag +viewer +# viewer tags +windowrule = match:class ^(gnome-system-monitor|org.gnome.SystemMonitor|io.missioncenter.MissionCenter)$, tag +viewer +windowrule = match:class ^(evince)$, tag +viewer +windowrule = match:class ^(eog|org.gnome.Loupe)$, tag +viewer -windowrule = match:tag multimedia_video*, noblur -windowrule = match:tag multimedia_video*, opacity 1.0 +# Some special override rules +windowrule = match:tag multimedia_video, no_blur on +windowrule = match:tag multimedia_video, opacity 1.0 # POSITION -windowrule = match:tag KooL_Cheat*, center -windowrule = match:class ([Tt]hunar) title negative:(.*[Tt]hunar.*), center -windowrule = match:title ^(ROG Control)$, center -windowrule = match:tag KooL-Settings*, center -windowrule = match:title ^(Keybindings)$, center -windowrule = match:class ^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$, center -windowrule = match:class ^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$, center -windowrule = match:class ^([Ff]erdium)$, center +# windowrule = match:floating true, center on +windowrule = match:tag KooL_Cheat, center on +windowrule = match:class ([Tt]hunar) match:title negative:(.*[Tt]hunar.*), center on +windowrule = match:title ^(ROG Control)$, center on +windowrule = match:tag KooL-Settings, center on +windowrule = match:title ^(Keybindings)$, center on +windowrule = match:class ^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$, center on +windowrule = match:class ^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$, center on +windowrule = match:class ^([Ff]erdium)$, center on windowrule = match:title ^(Picture-in-Picture)$, move 72% 7% -#windowrule = move 72% 7%,title:^(Firefox)$ # windowrule to avoid idle for fullscreen apps -#windowrule = idleinhibit fullscreen, class:^(*)$ -#windowrule = idleinhibit fullscreen, title:^(*)$ -windowrule = match:fullscreen 1, idleinhibit fullscreen - -# windowrule move to workspace -#windowrule = workspace 1, tag:email* -#windowrule = workspace 2, tag:browser* -#windowrule = workspace 3, class:^([Tt]hunar)$ -#windowrule = workspace 3, tag:projects* -#windowrule = workspace 5, tag:gamestore* -#windowrule = workspace 7, tag:im* -#windowrule = workspace 8, tag:games* - -# windowrule move to workspace (silent) -#windowrule = workspace 4 silent, tag:screenshare* -#windowrule = workspace 6 silent, class:^(virt-manager)$ -#windowrule = workspace 6 silent, class:^(.virt-manager-wrapped)$ -#windowrule = workspace 9 silent, tag:multimedia* +windowrule = match:fullscreen true, idle_inhibit fullscreen # FLOAT -windowrule = match:tag KooL_Cheat*, float -windowrule = match:tag wallpaper*, float -windowrule = match:tag settings*, float -windowrule = match:tag viewer*, float -windowrule = match:tag KooL-Settings*, float -windowrule = match:class ([Zz]oom|onedriver|onedriver-launcher)$, float -windowrule = match:class (org.gnome.Calculator) title (Calculator), float -windowrule = match:class ^(mpv|com.github.rafostar.Clapper)$, float -windowrule = match:class ^([Qq]alculate-gtk)$, float -#windowrule = float, class:^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$ -windowrule = match:class ^([Ff]erdium)$, float -windowrule = match:title ^(Picture-in-Picture)$, float -#windowrule = float, title:^(Firefox)$ +windowrule = match:tag KooL_Cheat, float on +windowrule = match:tag wallpaper, float on +windowrule = match:tag settings, float on +windowrule = match:tag viewer, float on +windowrule = match:tag KooL-Settings, float on +windowrule = match:class ([Zz]oom|onedriver|onedriver-launcher), float on +windowrule = match:class (org.gnome.Calculator) match:title (Calculator), float on +windowrule = match:class ^(mpv|com.github.rafostar.Clapper)$, float on +windowrule = match:class ^([Qq]alculate-gtk)$, float on +windowrule = match:class ^([Ff]erdium)$, float on +windowrule = match:title ^(Picture-in-Picture)$, float on # windowrule - ######### float popups and dialogue ####### -windowrule = match:title ^(Authentication Required)$, float -windowrule = match:title ^(Authentication Required)$, center -windowrule = match:class (codium|codium-url-handler|VSCodium) title negative:(.*codium.*|.*VSCodium.*), float -windowrule = match:class ^(com.heroicgameslauncher.hgl)$ title negative:(Heroic Games Launcher), float -windowrule = match:class ^([Ss]team)$ title negative:^([Ss]team)$, float -windowrule = match:class ([Tt]hunar) title negative:(.*[Tt]hunar.*), float -windowrule = match:title ^(Add Folder to Workspace)$, float -windowrule = match:title ^(Add Folder to Workspace)$, size 70% 60% -windowrule = match:title ^(Add Folder to Workspace)$, center -windowrule = match:title ^(Save As)$, float -windowrule = match:title ^(Save As)$, size 70% 60% -windowrule = match:title ^(Save As)$, center -windowrule = match:initialTitle (Open Files), float -windowrule = match:initialTitle (Open Files), size 70% 60% -windowrule = match:title ^(SDDM Background)$ #KooL's Dots YAD for setting SDDM background, float -windowrule = match:title ^(SDDM Background)$ #KooL's Dots YAD for setting SDDM background, center -windowrule = match:title ^(SDDM Background)$ #KooL's Dots YAD for setting SDDM background, size 16% 12% +windowrule = match:title ^(Authentication Required)$, float on, center on +windowrule = match:class (codium|codium-url-handler|VSCodium) match:title negative:(.*codium.*|.*VSCodium.*), float on +windowrule = match:class ^(com.heroicgameslauncher.hgl)$ match:title negative:(Heroic Games Launcher), float on +windowrule = match:class ^([Ss]team)$ match:title negative:^([Ss]team)$, float on +windowrule = match:class ([Tt]hunar) match:title negative:(.*[Tt]hunar.*), float on + +windowrule = match:title ^(Add Folder to Workspace)$, float on, size (monitor_w*0.7) (monitor_h*0.6), center on + +windowrule = match:title ^(Save As)$, float on, size (monitor_w*0.7) (monitor_h*0.6), center on + +windowrule = match:initial_title (Open Files), float on, size (monitor_w*0.7) (monitor_h*0.6) + +windowrule = match:title ^(SDDM Background)$, float on, center on, size (monitor_w*0.16) (monitor_h*0.12) + +# YAD dialog for wallpaper confirmation +windowrule = match:class ^(yad)$ match:title ^(YAD)$, float on, center on, size (monitor_w*0.2) (monitor_h*0.2) # END of float popups and dialogue ####### # OPACITY -windowrule = match:tag browser*, opacity 0.99 0.8 -windowrule = match:tag projects*, opacity 0.9 0.8 -windowrule = match:tag im*, opacity 0.94 0.86 -windowrule = match:tag multimedia*, opacity 0.94 0.86 -windowrule = match:tag file-manager*, opacity 0.9 0.8 -windowrule = match:tag terminal*, opacity 0.9 0.7 -windowrule = match:tag settings*, opacity 0.8 0.7 -windowrule = match:tag viewer*, opacity 0.82 0.75 -windowrule = match:tag wallpaper*, opacity 0.9 0.7 +windowrule = match:tag browser, opacity 0.99 0.8 +windowrule = match:tag projects, opacity 0.9 0.8 +windowrule = match:tag im, opacity 0.94 0.86 +windowrule = match:tag multimedia, opacity 0.94 0.86 +windowrule = match:tag file-manager, opacity 0.9 0.8 +windowrule = match:tag terminal, opacity 0.9 0.7 +windowrule = match:tag settings, opacity 0.8 0.7 +windowrule = match:tag viewer, opacity 0.82 0.75 +windowrule = match:tag wallpaper, opacity 0.9 0.7 windowrule = match:class ^(gedit|org.gnome.TextEditor|mousepad)$, opacity 0.8 0.7 windowrule = match:class ^(deluge)$, opacity 0.9 0.8 -windowrule = match:class ^(seahorse)$ # gnome-keyring gui, opacity 0.9 0.8 +windowrule = match:class ^(seahorse)$, opacity 0.9 0.8 windowrule = match:title ^(Picture-in-Picture)$, opacity 0.95 0.75 # SIZE -windowrule = match:tag KooL_Cheat*, size 65% 90% -windowrule = match:tag wallpaper*, size 70% 70% -windowrule = match:tag settings*, size 70% 70% -windowrule = match:class ^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$, size 60% 70% -windowrule = match:class ^([Ff]erdium)$, size 60% 70% - -#windowrule = size 25% 25%, title:^(Picture-in-Picture)$ -#windowrule = size 25% 25%, title:^(Firefox)$ +windowrule = match:tag KooL_Cheat, size (monitor_w*0.65) (monitor_h*0.9) +windowrule = match:tag wallpaper, size (monitor_w*0.7) (monitor_h*0.7) +windowrule = match:tag settings, size (monitor_w*0.7) (monitor_h*0.7) +windowrule = match:class ^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$, size (monitor_w*0.6) (monitor_h*0.7) +windowrule = match:class ^([Ff]erdium)$, size (monitor_w*0.6) (monitor_h*0.7) # PINNING -windowrule = match:title ^(Picture-in-Picture)$, pin -#windowrule = pin,title:^(Firefox)$ - -# windowrule - extras -windowrule = match:title ^(Picture-in-Picture)$, keepaspectratio +windowrule = match:title ^(Picture-in-Picture)$, pin on, keep_aspect_ratio on # BLUR & FULLSCREEN -windowrule = match:tag games*, noblur -windowrule = match:tag games*, fullscreen - -#This not gonna take the focus to the window that appears when hovering over some of the parts of the IntelliJ Products -windowrule = match:class ^(jetbrains-*), noinitialfocus -windowrule = match:title ^(wind.*)$, noinitialfocus +windowrule = match:tag games, no_blur on, fullscreen 0 +windowrule = match:tag games, fullscreen 0 -#windowrule = bordercolor rgb(EE4B55) rgb(880808), fullscreen:1 -#windowrule = bordercolor rgb(282737) rgb(1E1D2D), floating:1 -#windowrule = opacity 0.8 0.8, pinned:1 +# This not gonna take the focus to the window that appears when hovering over some of the parts of the IntelliJ Products +windowrule = match:class ^(jetbrains-*), no_initial_focus on +windowrule = match:title ^(wind.*)$, no_initial_focus on # LAYER RULES -layerrule = blur, rofi -layerrule = ignorezero, rofi -layerrule = blur, notifications -layerrule = ignorezero, notifications -layerrule = blur, quickshell:overview -layerrule = ignorezero, quickshell:overview -layerrule = ignorealpha 0.5, quickshell:overview - -#layerrule = ignorealpha 0.5, tag:notif* -#layerrule = ignorezero, class:^([Rr]ofi)$ -#layerrule = blur, class:^([Rr]ofi)$ -#layerrule = unset,class:^([Rr]ofi)$ -#layerrule = ignorezero, -#layerrule = ignorezero, overview -#layerrule = blur, overview +layerrule = match:namespace rofi, blur on +layerrule = match:namespace notifications, blur on +layerrule = match:namespace quickshell:overview, blur on +layerrule = match:namespace quickshell:overview, ignore_alpha 0.5 -- cgit v1.2.3 From 330a934953fb79c56c60e2520210f8686b4c5459 Mon Sep 17 00:00:00 2001 From: brockar Date: Tue, 30 Dec 2025 18:41:59 -0300 Subject: fix: opaque toggle fis this: https://github.com/JaKooLit/Arch-Hyprland/issues/352 --- config/hypr/configs/Keybinds.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'config/hypr') diff --git a/config/hypr/configs/Keybinds.conf b/config/hypr/configs/Keybinds.conf index ddc516bc..43bd1e94 100644 --- a/config/hypr/configs/Keybinds.conf +++ b/config/hypr/configs/Keybinds.conf @@ -58,7 +58,7 @@ bindd = $mainMod SHIFT, M, online music, exec, $UserScripts/RofiBeats.sh bindd = $mainMod, W, select wallpaper, exec, $UserScripts/WallpaperSelect.sh bindd = $mainMod SHIFT, W, wallpaper effects, exec, $UserScripts/WallpaperEffects.sh bindd = CTRL ALT, W, random wallpaper, exec, $UserScripts/WallpaperRandom.sh -bindd = $mainMod CTRL, O, toggle active window opacity, exec, hyprctl setprop active opaque toggle +bindd = $mainMod CTRL, O, toggle active window opacity, setprop, active opaque toggle bindd = $mainMod SHIFT, K, search keybinds, exec, $scriptsDir/KeyBinds.sh bindd = $mainMod SHIFT, A, animations menu, exec, $scriptsDir/Animations.sh bindd = $mainMod SHIFT, O, change oh-my-zsh theme, exec, $UserScripts/ZshChangeTheme.sh -- cgit v1.2.3 From d05f22e5f4e92827ea69911cdd3dfc83c64c655c Mon Sep 17 00:00:00 2001 From: JaΓ«l Champagne Gareau Date: Tue, 30 Dec 2025 22:06:25 -0500 Subject: fix: respect XDG dir instead of forcing ~/Pictures (#899) * fix: respect XDG dir instead of forcing ~/Pictures * fix: make xdg-user-dir usage more robust --------- Co-authored-by: Donald Williams <129223418+dwilliam62@users.noreply.github.com> --- config/hypr/UserScripts/WallpaperRandom.sh | 5 +++-- config/hypr/UserScripts/WallpaperSelect.sh | 3 ++- config/hypr/configs/Startup_Apps.conf | 4 ++-- config/hypr/scripts/DarkLight.sh | 3 ++- config/hypr/scripts/ScreenShot.sh | 3 ++- config/hypr/scripts/sddm_wallpaper.sh | 3 ++- config/swappy/config | 2 +- copy.sh | 11 ++++++----- 8 files changed, 20 insertions(+), 14 deletions(-) (limited to 'config/hypr') diff --git a/config/hypr/UserScripts/WallpaperRandom.sh b/config/hypr/UserScripts/WallpaperRandom.sh index 654d4bd3..8dd680d5 100755 --- a/config/hypr/UserScripts/WallpaperRandom.sh +++ b/config/hypr/UserScripts/WallpaperRandom.sh @@ -2,12 +2,13 @@ # /* ---- πŸ’« https://github.com/JaKooLit πŸ’« ---- */ ## # Script for Random Wallpaper ( CTRL ALT W) -wallDIR="$HOME/Pictures/wallpapers" +PICTURES_DIR="$(xdg-user-dir PICTURES 2>/dev/null || echo "$HOME/Pictures")" +wallDIR="$PICTURES_DIR/wallpapers" SCRIPTSDIR="$HOME/.config/hypr/scripts" focused_monitor=$(hyprctl monitors -j | jq -r '.[] | select(.focused) | .name') -PICS=($(find -L ${wallDIR} -type f \( -name "*.jpg" -o -name "*.jpeg" -o -name "*.png" -o -name "*.pnm" -o -name "*.tga" -o -name "*.tiff" -o -name "*.webp" -o -name "*.bmp" -o -name "*.farbfeld" -o -name "*.gif" \))) +PICS=($(find -L "${wallDIR}" -type f \( -name "*.jpg" -o -name "*.jpeg" -o -name "*.png" -o -name "*.pnm" -o -name "*.tga" -o -name "*.tiff" -o -name "*.webp" -o -name "*.bmp" -o -name "*.farbfeld" -o -name "*.gif" \))) RANDOMPICS=${PICS[ $RANDOM % ${#PICS[@]} ]} diff --git a/config/hypr/UserScripts/WallpaperSelect.sh b/config/hypr/UserScripts/WallpaperSelect.sh index 0029d3e5..3fd3b858 100755 --- a/config/hypr/UserScripts/WallpaperSelect.sh +++ b/config/hypr/UserScripts/WallpaperSelect.sh @@ -4,7 +4,8 @@ # WALLPAPERS PATH terminal=kitty -wallDIR="$HOME/Pictures/wallpapers" +PICTURES_DIR="$(xdg-user-dir PICTURES 2>/dev/null || echo "$HOME/Pictures")" +wallDIR="$PICTURES_DIR/wallpapers" SCRIPTSDIR="$HOME/.config/hypr/scripts" wallpaper_current="$HOME/.config/hypr/wallpaper_effects/.wallpaper_current" diff --git a/config/hypr/configs/Startup_Apps.conf b/config/hypr/configs/Startup_Apps.conf index 27c8d26a..550c79d4 100644 --- a/config/hypr/configs/Startup_Apps.conf +++ b/config/hypr/configs/Startup_Apps.conf @@ -4,7 +4,7 @@ $scriptsDir = $HOME/.config/hypr/scripts $UserScripts = $HOME/.config/hypr/UserScripts -$wallDIR=$HOME/Pictures/wallpapers +$wallDIR = $HOME/Pictures/wallpapers # change path manually here if needed $lock = $scriptsDir/LockScreen.sh $SwwwRandom = $UserScripts/WallpaperAutoChange.sh $livewallpaper="" @@ -53,7 +53,7 @@ exec-once = $scriptsDir/Hyprsunset.sh init # Here are list of features available but disabled by default # Persistent wallpaper -# exec-once = swww-daemon --format xrgb && swww img $HOME/Pictures/wallpapers/mecha-nostalgia.png +# exec-once = swww-daemon --format xrgb && swww img $wallDIR/mecha-nostalgia.png # Gnome polkit for NixOS #exec-once = $scriptsDir/Polkit-NixOS.sh diff --git a/config/hypr/scripts/DarkLight.sh b/config/hypr/scripts/DarkLight.sh index e473efb2..a225c7bc 100755 --- a/config/hypr/scripts/DarkLight.sh +++ b/config/hypr/scripts/DarkLight.sh @@ -4,7 +4,8 @@ # Note: Scripts are looking for keywords Light or Dark except for wallpapers as the are in a separate directories # Paths -wallpaper_base_path="$HOME/Pictures/wallpapers/Dynamic-Wallpapers" +PICTURES_DIR="$(xdg-user-dir PICTURES 2>/dev/null || echo "$HOME/Pictures")" +wallpaper_base_path="$PICTURES_DIR/wallpapers/Dynamic-Wallpapers" dark_wallpapers="$wallpaper_base_path/Dark" light_wallpapers="$wallpaper_base_path/Light" hypr_config_path="$HOME/.config/hypr" diff --git a/config/hypr/scripts/ScreenShot.sh b/config/hypr/scripts/ScreenShot.sh index 0ef70964..3d578a51 100755 --- a/config/hypr/scripts/ScreenShot.sh +++ b/config/hypr/scripts/ScreenShot.sh @@ -4,7 +4,8 @@ # variables time=$(date "+%d-%b_%H-%M-%S") -dir="$(xdg-user-dir PICTURES)/Screenshots" +PICTURES_DIR="$(xdg-user-dir PICTURES 2>/dev/null || echo "$HOME/Pictures")" +dir="$PICTURES_DIR/Screenshots" file="Screenshot_${time}_${RANDOM}.png" iDIR="$HOME/.config/swaync/icons" diff --git a/config/hypr/scripts/sddm_wallpaper.sh b/config/hypr/scripts/sddm_wallpaper.sh index 9dca2f72..5ebab44c 100755 --- a/config/hypr/scripts/sddm_wallpaper.sh +++ b/config/hypr/scripts/sddm_wallpaper.sh @@ -6,7 +6,8 @@ # variables terminal=kitty -wallDIR="$HOME/Pictures/wallpapers" +PICTURES_DIR="$(xdg-user-dir PICTURES 2>/dev/null || echo "$HOME/Pictures")" +wallDIR="$PICTURES_DIR/wallpapers" SCRIPTSDIR="$HOME/.config/hypr/scripts" wallpaper_current="$HOME/.config/hypr/wallpaper_effects/.wallpaper_current" wallpaper_modified="$HOME/.config/hypr/wallpaper_effects/.wallpaper_modified" diff --git a/config/swappy/config b/config/swappy/config index 45d84e49..ea04ccc2 100644 --- a/config/swappy/config +++ b/config/swappy/config @@ -1,5 +1,5 @@ [Default] -save_dir=$HOME/Pictures/Screenshots +save_dir=$(xdg-user-dir PICTURES 2>/dev/null || echo "$HOME/Pictures")/Screenshots save_filename_format=swappy-%Y%m%d-%H%M%S.png show_pannel=false line_size=5 diff --git a/copy.sh b/copy.sh index 5b3d17cd..e925a698 100755 --- a/copy.sh +++ b/copy.sh @@ -1087,8 +1087,9 @@ fi printf "\n%.0s" {1..1} # wallpaper stuff -mkdir -p $HOME/Pictures/wallpapers -if cp -r wallpapers $HOME/Pictures/; then +PICTURES_DIR="$(xdg-user-dir PICTURES 2>/dev/null || echo "$HOME/Pictures")" +mkdir -p "$PICTURES_DIR/wallpapers" +if cp -r wallpapers "$PICTURES_DIR/"; then echo "${OK} Some ${MAGENTA}wallpapers${RESET} copied successfully!" | tee -a "$LOG" else echo "${ERROR} Failed to copy some ${YELLOW}wallpapers${RESET}" | tee -a "$LOG" @@ -1168,12 +1169,12 @@ while true; do echo "${OK} Wallpapers downloaded successfully." 2>&1 | tee -a "$LOG" # Check if wallpapers directory exists and create it if not - if [ ! -d "$HOME/Pictures/wallpapers" ]; then - mkdir -p "$HOME/Pictures/wallpapers" + if [ ! -d "$PICTURES_DIR/wallpapers" ]; then + mkdir -p "$PICTURES_DIR/wallpapers" echo "${OK} Created wallpapers directory." 2>&1 | tee -a "$LOG" fi - if cp -R Wallpaper-Bank/wallpapers/* "$HOME/Pictures/wallpapers/" >>"$LOG" 2>&1; then + if cp -R Wallpaper-Bank/wallpapers/* "$PICTURES_DIR/wallpapers/" >>"$LOG" 2>&1; then echo "${OK} Wallpapers copied successfully." 2>&1 | tee -a "$LOG" rm -rf Wallpaper-Bank 2>&1 # Remove cloned repository after copying wallpapers break -- cgit v1.2.3 From 54541e18dacb042c103540eaa4cb4477e05c85ff Mon Sep 17 00:00:00 2001 From: Don Williams Date: Tue, 30 Dec 2025 23:52:35 -0500 Subject: Fixed rule for gnome calculator, yad now centers Yad still not following the size settings but at least it's now floating and centered On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/hypr/configs/WindowRules-config-v3.conf --- config/hypr/configs/WindowRules-config-v3.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'config/hypr') diff --git a/config/hypr/configs/WindowRules-config-v3.conf b/config/hypr/configs/WindowRules-config-v3.conf index ba179461..a4da3694 100644 --- a/config/hypr/configs/WindowRules-config-v3.conf +++ b/config/hypr/configs/WindowRules-config-v3.conf @@ -115,7 +115,7 @@ windowrule = match:tag settings, float on windowrule = match:tag viewer, float on windowrule = match:tag KooL-Settings, float on windowrule = match:class ([Zz]oom|onedriver|onedriver-launcher), float on -windowrule = match:class (org.gnome.Calculator) match:title (Calculator), float on +windowrule = match:class (org.gnome.Calculator), float on windowrule = match:class ^(mpv|com.github.rafostar.Clapper)$, float on windowrule = match:class ^([Qq]alculate-gtk)$, float on windowrule = match:class ^([Ff]erdium)$, float on @@ -137,7 +137,7 @@ windowrule = match:initial_title (Open Files), float on, size (monitor_w*0.7) (m windowrule = match:title ^(SDDM Background)$, float on, center on, size (monitor_w*0.16) (monitor_h*0.12) # YAD dialog for wallpaper confirmation -windowrule = match:class ^(yad)$ match:title ^(YAD)$, float on, center on, size (monitor_w*0.2) (monitor_h*0.2) +windowrule = match:class ^(yad)$, float on, center on, size (monitor_w*0.2) (monitor_h*0.2) # END of float popups and dialogue ####### # OPACITY -- cgit v1.2.3 From 4c5d85bc769b53dd019c4d671fe42e9b3de7cd53 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Wed, 31 Dec 2025 00:11:29 -0500 Subject: Fixed yad windowsize, was overridden by settings rule On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/hypr/configs/WindowRules-config-v3.conf --- config/hypr/configs/WindowRules-config-v3.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'config/hypr') diff --git a/config/hypr/configs/WindowRules-config-v3.conf b/config/hypr/configs/WindowRules-config-v3.conf index a4da3694..d0200ad4 100644 --- a/config/hypr/configs/WindowRules-config-v3.conf +++ b/config/hypr/configs/WindowRules-config-v3.conf @@ -79,7 +79,7 @@ windowrule = match:title (Kvantum Manager), tag +settings windowrule = match:class ^(file-roller|org.gnome.FileRoller)$, tag +settings windowrule = match:class ^(nm-applet|nm-connection-editor|blueman-manager)$, tag +settings windowrule = match:class ^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$, tag +settings -windowrule = match:class ^(qt5ct|qt6ct|[Yy]ad)$, tag +settings +windowrule = match:class ^(qt5ct|qt6ct)$, tag +settings windowrule = match:class (xdg-desktop-portal-gtk), tag +settings windowrule = match:class ^(org.kde.polkit-kde-authentication-agent-1)$, tag +settings windowrule = match:class ^([Rr]ofi)$, tag +settings -- cgit v1.2.3 From 991f30d07ffbdeef8498ca45cf85284b2e85280e Mon Sep 17 00:00:00 2001 From: kayprish <86522033+kayprish@users.noreply.github.com> Date: Thu, 1 Jan 2026 03:10:40 +0100 Subject: Modify SwitchKeyboardLayout.sh to not require .cache/kb_layout (#901) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Modify SwitchKeyboardLayout.sh to not require .cache/kb_layout The bulk of the SwitchKeyboardLayout.sh script has been renamed to KeyboardLayout.sh, meanwhile its behavior has been changed. Instead of relying on the file .cache/kb_layout, to check the current keyboard layout, as well as to toggle it, it now uses hyprctl to query this information, while making sure that it checks the first non-ignored keyboard. In this way, it querys from keyboards which it's also in charge of modifying. The logic from the script is also repurposed in waybar, just for viewing, so the script was renamed. * Implement fixes for KeyboardLayout.sh changes * Remove SwitchKeyboardLayout call from initial-boot.sh --------- Co-authored-by: Petar KapriΕ‘ Co-authored-by: Donald Williams <129223418+dwilliam62@users.noreply.github.com> --- config/hypr/configs/Keybinds.conf | 2 +- config/hypr/initial-boot.sh | 3 - config/hypr/scripts/KeyboardLayout.sh | 119 ++++++++++++++++++++++++++++ config/hypr/scripts/SwitchKeyboardLayout.sh | 103 ------------------------ config/waybar/ModulesCustom | 4 +- 5 files changed, 122 insertions(+), 109 deletions(-) create mode 100755 config/hypr/scripts/KeyboardLayout.sh delete mode 100755 config/hypr/scripts/SwitchKeyboardLayout.sh (limited to 'config/hypr') diff --git a/config/hypr/configs/Keybinds.conf b/config/hypr/configs/Keybinds.conf index 43bd1e94..91eb66e2 100644 --- a/config/hypr/configs/Keybinds.conf +++ b/config/hypr/configs/Keybinds.conf @@ -62,7 +62,7 @@ bindd = $mainMod CTRL, O, toggle active window opacity, setprop, active opaque t bindd = $mainMod SHIFT, K, search keybinds, exec, $scriptsDir/KeyBinds.sh bindd = $mainMod SHIFT, A, animations menu, exec, $scriptsDir/Animations.sh bindd = $mainMod SHIFT, O, change oh-my-zsh theme, exec, $UserScripts/ZshChangeTheme.sh -bindlnd = ALT_L, SHIFT_L, switch keyboard layout globally, exec, $scriptsDir/SwitchKeyboardLayout.sh +bindlnd = ALT_L, SHIFT_L, switch keyboard layout globally, exec, $scriptsDir/KeyboardLayout.sh switch bindlnd = SHIFT_L, ALT_L, switch keyboard layout per-window, exec, $scriptsDir/Tak0-Per-Window-Switch.sh bindd = $mainMod ALT, C, calculator, exec, $UserScripts/RofiCalc.sh diff --git a/config/hypr/initial-boot.sh b/config/hypr/initial-boot.sh index 1313f104..eeabdef5 100755 --- a/config/hypr/initial-boot.sh +++ b/config/hypr/initial-boot.sh @@ -49,9 +49,6 @@ if [ ! -f "$HOME/.config/hypr/.initial_startup_done" ]; then # initiate kvantum theme kvantummanager --set "$kvantum_theme" > /dev/null 2>&1 & - # initiate the kb_layout (for some reason) waybar cant launch it - "$scriptsDir/SwitchKeyboardLayout.sh" > /dev/null 2>&1 & - # waybar style #if [ -L "$HOME/.config/waybar/config" ]; then ## ln -sf "$waybar_style" "$HOME/.config/waybar/style.css" diff --git a/config/hypr/scripts/KeyboardLayout.sh b/config/hypr/scripts/KeyboardLayout.sh new file mode 100755 index 00000000..ec280826 --- /dev/null +++ b/config/hypr/scripts/KeyboardLayout.sh @@ -0,0 +1,119 @@ +#!/usr/bin/env bash +# /* ---- πŸ’« https://github.com/JaKooLit πŸ’« ---- */ ## +# This is for changing kb_layouts. Set kb_layouts in "$HOME/.config/hypr/UserConfigs/UserSettings.conf" + +notif_icon="$HOME/.config/swaync/images/ja.png" +SCRIPTSDIR="$HOME/.config/hypr/scripts" + +# Refined ignore list with patterns or specific device names +ignore_patterns=( + "--(avrcp)" + "Bluetooth Speaker" + "Other Device + Name" +) + +# Function to get keyboard names +get_keyboard_names() { + hyprctl devices -j | jq -r '.keyboards[].name' +} + +# Function to check if a device matches any ignore pattern +is_ignored() { + local device_name=$1 + for pattern in "${ignore_patterns[@]}"; do + if [[ "$device_name" == *"$pattern"* ]]; then + return 0 # Device matches ignore pattern + fi + done + return 1 # Device does not match any ignore pattern +} + +# Function to get current layout info +# Stores values in layout_mapping, variant_mapping and layout_index +get_current_layout_info() { + local found_kb=false + + # Read from the first non-ignored layout + while read -r name; do + if ! is_ignored "$name"; then + found_kb=true + local layout_mapping_str=$(hyprctl devices -j | + jq -r --arg name "$name" '.keyboards[] | select(.name==$name).layout') + IFS="," read -r -a layout_mapping <<<"$layout_mapping_str" + + local variant_mapping_str=$(hyprctl devices -j | + jq -r --arg name "$name" '.keyboards[] | select(.name==$name).variant') + IFS="," read -r -a variant_mapping <<<"$variant_mapping_str" + + layout_index=$(hyprctl devices -j | + jq -r --arg name "$name" '.keyboards[] | select(.name==$name).active_layout_index') + break + fi + done <<< "$(get_keyboard_names)" + + $found_kb && return 0 + return 1 +} + +# Function to change keyboard layout +change_layout() { + local error_found=false + + while read -r name; do + if is_ignored "$name"; then + echo "Skipping ignored device: $name" + continue + fi + + echo "Switching layout for $name to $new_layout..." + hyprctl switchxkblayout "$name" "$next_index" + if [ $? -ne 0 ]; then + echo "Error while switching layout for $name." >&2 + error_found=true + fi + done <<<"$(get_keyboard_names)" + + $error_found && return 1 + return 0 +} + + +# Stores values in layout_mapping, variant_mapping and layout_index +if ! get_current_layout_info; then + echo "Could not get current layout information." >&2 + echo "There might not be any keyboards available, \ + or some were unnecessarily set as ignored." >&2 + notify-send -u low -t 2000 'kb_layout' " Error:" " Layout change failed" + echo "Exiting $0 $@" >&2 + exit 1 +fi + +current_layout=${layout_mapping[$layout_index]} +current_variant=${variant_mapping[$layout_index]} + +if [[ "$1" == "status" ]]; then + echo "$current_layout${current_variant:+($current_variant)}" +elif [[ "$1" == "switch" ]]; then + echo "Current layout: $current_layout($current_variant)" + + layout_count=${#layout_mapping[@]} + echo "Number of layouts: $layout_count" + + next_index=$(( (layout_index + 1) % layout_count )) + new_layout="${layout_mapping[$next_index]}" + new_variant="${variant_mapping[$next_index]}" + echo "Next layout: $new_layout" + + # Execute layout change and notify + if ! change_layout; then + notify-send -u low -t 2000 'kb_layout' " Error:" " Layout change failed" + echo "Layout change failed." >&2 + exit 1 + else + notify-send -u low -i "$notif_icon" " kb_layout: $new_layout${new_variant:+($new_variant)}" + echo "Layout change notification sent." + fi +else + echo "Usage: $0 {status|switch}" +fi diff --git a/config/hypr/scripts/SwitchKeyboardLayout.sh b/config/hypr/scripts/SwitchKeyboardLayout.sh deleted file mode 100755 index 34d008a1..00000000 --- a/config/hypr/scripts/SwitchKeyboardLayout.sh +++ /dev/null @@ -1,103 +0,0 @@ -#!/usr/bin/env bash -# /* ---- πŸ’« https://github.com/JaKooLit πŸ’« ---- */ ## -# This is for changing kb_layouts. Set kb_layouts in $settings_file - -layout_file="$HOME/.cache/kb_layout" -settings_file="$HOME/.config/hypr/configs/SystemSettings.conf" -notif_icon="$HOME/.config/swaync/images/ja.png" - -# Refined ignore list with patterns or specific device names -ignore_patterns=( - "--(avrcp)" - "Bluetooth Speaker" - "Other Device - Name" -) - -# Create layout file with default layout if it does not exist -if [ ! -f "$layout_file" ]; then - echo "Creating layout file..." - default_layout=$(grep 'kb_layout = ' "$settings_file" | cut -d '=' -f 2 | tr -d '[:space:]' | cut -d ',' -f 1 2>/dev/null) - default_layout=${default_layout:-"us"} # Default to 'us' layout - echo "$default_layout" >"$layout_file" - echo "Default layout set to $default_layout" -fi - -current_layout=$(cat "$layout_file") -echo "Current layout: $current_layout" - -# Read available layouts from settings file -if [ -f "$settings_file" ]; then - kb_layout_line=$(grep 'kb_layout = ' "$settings_file" | cut -d '=' -f 2) - # Remove leading and trailing spaces around each layout - kb_layout_line=$(echo "$kb_layout_line" | tr -d '[:space:]') - IFS=',' read -r -a layout_mapping <<<"$kb_layout_line" -else - echo "Settings file not found!" - exit 1 -fi - -layout_count=${#layout_mapping[@]} -echo "Number of layouts: $layout_count" - -# Find current layout index and calculate next layout -for ((i = 0; i < layout_count; i++)); do - if [ "$current_layout" == "${layout_mapping[i]}" ]; then - current_index=$i - break - fi -done - -next_index=$(((current_index + 1) % layout_count)) -new_layout="${layout_mapping[next_index]}" -echo "Next layout: $new_layout" - -# Function to get keyboard names -get_keyboard_names() { - hyprctl devices -j | jq -r '.keyboards[].name' -} - -# Function to check if a device matches any ignore pattern -is_ignored() { - local device_name=$1 - for pattern in "${ignore_patterns[@]}"; do - if [[ "$device_name" == *"$pattern"* ]]; then - return 0 # Device matches ignore pattern - fi - done - return 1 # Device does not match any ignore pattern -} - -# Function to change keyboard layout -change_layout() { - local error_found=false - - while read -r name; do - if is_ignored "$name"; then - echo "Skipping ignored device: $name" - continue - fi - - echo "Switching layout for $name to $new_layout..." - hyprctl switchxkblayout "$name" "$next_index" - if [ $? -ne 0 ]; then - echo "Error while switching layout for $name." >&2 - error_found=true - fi - done <<<"$(get_keyboard_names)" - - $error_found && return 1 - return 0 -} - -# Execute layout change and notify -if ! change_layout; then - notify-send -u low -t 2000 'kb_layout' " Error:" " Layout change failed" - echo "Layout change failed." >&2 - exit 1 -else - notify-send -u low -i "$notif_icon" " kb_layout: $new_layout" - echo "Layout change notification sent." -fi - -echo "$new_layout" >"$layout_file" diff --git a/config/waybar/ModulesCustom b/config/waybar/ModulesCustom index f4c871f7..cb390c0f 100644 --- a/config/waybar/ModulesCustom +++ b/config/waybar/ModulesCustom @@ -90,10 +90,10 @@ }, "custom/keyboard": { - "exec": "cat $HOME/.cache/kb_layout", + "exec": "$HOME/.config/hypr/scripts/KeyboardLayout.sh status", "interval": 1, "format": "ο„œ {}", - "on-click": "$HOME/.config/hypr/scripts/SwitchKeyboardLayout.sh", + "on-click": "$HOME/.config/hypr/scripts/KeyboardLayout.sh switch", }, "custom/light_dark": { -- cgit v1.2.3 From 63f6b0c8aa02939646229900be84fe38d7aabbcc Mon Sep 17 00:00:00 2001 From: Don Williams Date: Wed, 31 Dec 2025 23:42:02 -0500 Subject: Added sample rules to start apps on specific workspaces They are commented out for now When they were active by default it caused new user confusion and many support requests On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: CHANGELOG.md modified: config/hypr/configs/WindowRules-config-v3.conf --- CHANGELOG.md | 2 ++ config/hypr/configs/WindowRules-config-v3.conf | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) (limited to 'config/hypr') diff --git a/CHANGELOG.md b/CHANGELOG.md index 27f07cf0..bd80cac8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,8 @@ - Thank you Lumethra - Added netowrk check to `WeatherWrap` script - Thank you Maximilian Zhu + - Added sample workspace rules to start apps on specific workspaces + - They are commented out but serve as references - 2025-12-29 - Fixed pathing in Wallust script diff --git a/config/hypr/configs/WindowRules-config-v3.conf b/config/hypr/configs/WindowRules-config-v3.conf index d0200ad4..62c7afdf 100644 --- a/config/hypr/configs/WindowRules-config-v3.conf +++ b/config/hypr/configs/WindowRules-config-v3.conf @@ -5,6 +5,25 @@ # NOTES: This is only for Hyprland > 0.52.1 # note for ja: This should NOT be implemented on Debian and Ubuntu +# Some samples on hwo to start apps on specific workspaces + +# windowrule move to workspace +#windowrule = workspace 1, match:tag email* +#windowrule = workspace 2, match:tag browser* +#windowrule = workspace 3, match:class ^([Tt]hunar)$ +#windowrule = workspace 3, match:tag projects* +#windowrule = workspace 5, match:tag gamestore* +#windowrule = workspace 7, match:tag im* +#windowrule = workspace 8, match:tag games* + +#windowrule move to workspace (silent) +#windowrule = workspace 4 silent, match:tag screenshare* +#windowrule = workspace 6 silent, match:class ^(virt-manager)$ +#windowrule = workspace 6 silent, match:class ^(.virt-manager-wrapped)$ +#windowrule = workspace 9 silent, match:tag multimedia* + + + # windowrule - tags - add apps under appropriate tag to use the same settings # browser tags windowrule = match:class ^([Ff]irefox|org.mozilla.firefox|[Ff]irefox-esr|[Ff]irefox-bin)$, tag +browser -- cgit v1.2.3 From 1764376bf795f0f47de4f3a5690a39a7fbfcb0da Mon Sep 17 00:00:00 2001 From: Don Williams Date: Wed, 31 Dec 2025 23:53:20 -0500 Subject: Added rules to inhibit screensaver when apps fullscreen On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: WindowRules-config-v3.conf --- config/hypr/configs/WindowRules-config-v3.conf | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'config/hypr') diff --git a/config/hypr/configs/WindowRules-config-v3.conf b/config/hypr/configs/WindowRules-config-v3.conf index 62c7afdf..f2c96256 100644 --- a/config/hypr/configs/WindowRules-config-v3.conf +++ b/config/hypr/configs/WindowRules-config-v3.conf @@ -126,6 +126,11 @@ windowrule = match:title ^(Picture-in-Picture)$, move 72% 7% # windowrule to avoid idle for fullscreen apps windowrule = match:fullscreen true, idle_inhibit fullscreen +windowrule = idle_inhibit fullscreen, match:fullscreen 1 +windowrule = idle_inhibit fullscreen, match:class ^(*)$ +windowrule = idle_inhibit fullscreen, match:title ^(*)$ + + # FLOAT windowrule = match:tag KooL_Cheat, float on -- cgit v1.2.3 From 3d09964129c2f3da6597bd7e74198a0cb804415e Mon Sep 17 00:00:00 2001 From: Ahum Maitra Date: Thu, 1 Jan 2026 16:17:23 +0530 Subject: update : Improve blur (#904) Thanks TheAhumMaitra --- config/hypr/UserConfigs/UserDecorations.conf | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'config/hypr') diff --git a/config/hypr/UserConfigs/UserDecorations.conf b/config/hypr/UserConfigs/UserDecorations.conf index 0b450904..f203fe5b 100644 --- a/config/hypr/UserConfigs/UserDecorations.conf +++ b/config/hypr/UserConfigs/UserDecorations.conf @@ -12,14 +12,14 @@ general { border_size = 2 gaps_in = 2 gaps_out = 4 - - col.active_border = $color12 + + col.active_border = $color12 col.inactive_border = $color10 } decoration { rounding = 10 - + active_opacity = 1.0 inactive_opacity = 0.9 fullscreen_opacity = 1.0 @@ -37,13 +37,13 @@ decoration { color_inactive = $color10 } - blur { - enabled = true + enabled = true size = 6 - passes = 2 - ignore_opacity = true + passes = 3 new_optimizations = true + xray = true + ignore_opacity = true special = true popups = true } -- cgit v1.2.3 From ed13a23db110ecea04e00cdfb985789461f7a9a1 Mon Sep 17 00:00:00 2001 From: brockar Date: Sat, 3 Jan 2026 17:57:03 -0300 Subject: style(hypr): remove redundant blank lines in windowrules --- config/hypr/configs/WindowRules-config-v3.conf | 14 ++------------ config/hypr/configs/WindowRules.conf | 4 +--- 2 files changed, 3 insertions(+), 15 deletions(-) (limited to 'config/hypr') diff --git a/config/hypr/configs/WindowRules-config-v3.conf b/config/hypr/configs/WindowRules-config-v3.conf index f2c96256..8f639c5d 100644 --- a/config/hypr/configs/WindowRules-config-v3.conf +++ b/config/hypr/configs/WindowRules-config-v3.conf @@ -2,11 +2,9 @@ # Vendor defaults for window rules and layerrules # See https://wiki.hyprland.org/Configuring/Window-Rules/ for more -# NOTES: This is only for Hyprland > 0.52.1 -# note for ja: This should NOT be implemented on Debian and Ubuntu - -# Some samples on hwo to start apps on specific workspaces +# NOTES: This is only for Hyprland > 0.53 +# Some samples on how to start apps on specific workspaces # windowrule move to workspace #windowrule = workspace 1, match:tag email* #windowrule = workspace 2, match:tag browser* @@ -22,8 +20,6 @@ #windowrule = workspace 6 silent, match:class ^(.virt-manager-wrapped)$ #windowrule = workspace 9 silent, match:tag multimedia* - - # windowrule - tags - add apps under appropriate tag to use the same settings # browser tags windowrule = match:class ^([Ff]irefox|org.mozilla.firefox|[Ff]irefox-esr|[Ff]irefox-bin)$, tag +browser @@ -130,8 +126,6 @@ windowrule = idle_inhibit fullscreen, match:fullscreen 1 windowrule = idle_inhibit fullscreen, match:class ^(*)$ windowrule = idle_inhibit fullscreen, match:title ^(*)$ - - # FLOAT windowrule = match:tag KooL_Cheat, float on windowrule = match:tag wallpaper, float on @@ -151,13 +145,9 @@ windowrule = match:class (codium|codium-url-handler|VSCodium) match:title negati windowrule = match:class ^(com.heroicgameslauncher.hgl)$ match:title negative:(Heroic Games Launcher), float on windowrule = match:class ^([Ss]team)$ match:title negative:^([Ss]team)$, float on windowrule = match:class ([Tt]hunar) match:title negative:(.*[Tt]hunar.*), float on - windowrule = match:title ^(Add Folder to Workspace)$, float on, size (monitor_w*0.7) (monitor_h*0.6), center on - windowrule = match:title ^(Save As)$, float on, size (monitor_w*0.7) (monitor_h*0.6), center on - windowrule = match:initial_title (Open Files), float on, size (monitor_w*0.7) (monitor_h*0.6) - windowrule = match:title ^(SDDM Background)$, float on, center on, size (monitor_w*0.16) (monitor_h*0.12) # YAD dialog for wallpaper confirmation diff --git a/config/hypr/configs/WindowRules.conf b/config/hypr/configs/WindowRules.conf index d1fb9315..8a5f99c7 100644 --- a/config/hypr/configs/WindowRules.conf +++ b/config/hypr/configs/WindowRules.conf @@ -4,8 +4,6 @@ # NOTES: This is only for Hyprland > 0.48 -# note for ja: This should NOT be implemented on Debian and Ubuntu - # windowrule - tags - add apps under appropriate tag to use the same settings # browser tags windowrule = tag +browser, class:^([Ff]irefox|org.mozilla.firefox|[Ff]irefox-esr|[Ff]irefox-bin)$ @@ -228,4 +226,4 @@ layerrule = ignorealpha 0.5, quickshell:overview #layerrule = ignorezero, #layerrule = ignorezero, overview -#layerrule = blur, overview \ No newline at end of file +#layerrule = blur, overview -- cgit v1.2.3 From e504f6c1c50bd2037bea9b3b48e2e0b06b304c34 Mon Sep 17 00:00:00 2001 From: Ahum Maitra Date: Sun, 4 Jan 2026 03:53:41 +0530 Subject: feat: Add Wallust based global Theme Switcher (#905) * fix: Add Theme Switcher script * feat: Add theme switcher shortcut * enhancement: simplify the program, fix spelling mistakes, add safety mechanism --- config/hypr/configs/Keybinds.conf | 7 ++++--- config/hypr/scripts/ThemeChanger.sh | 27 +++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 config/hypr/scripts/ThemeChanger.sh (limited to 'config/hypr') diff --git a/config/hypr/configs/Keybinds.conf b/config/hypr/configs/Keybinds.conf index 91eb66e2..dea22719 100644 --- a/config/hypr/configs/Keybinds.conf +++ b/config/hypr/configs/Keybinds.conf @@ -23,6 +23,7 @@ bindd = $mainMod, Return, Open terminal, exec, $term bindd = $mainMod, E, file manager, exec, $files # FEATURES / EXTRAS +bindd = $mainMod, T, Global theme switcher using Wallust, exec, $scriptsDir/ThemeChanger.sh #Global theme switcher bindd = $mainMod, H, help / cheat sheet, exec, $scriptsDir/KeyHints.sh bindd = $mainMod ALT, R, refresh bar and menus, exec, $scriptsDir/Refresh.sh bindd = $mainMod ALT, E, emoji menu, exec, $scriptsDir/RofiEmoji.sh @@ -43,7 +44,7 @@ bindd = $mainMod SHIFT, Return, DropDown terminal, exec, $scriptsDir/Droptermina # Desktop zooming or magnifier bindd = $mainMod ALT, mouse_down, zoom in, exec, hyprctl keyword cursor:zoom_factor "$(hyprctl getoption cursor:zoom_factor | awk 'NR==1 {factor = $2; if (factor < 1) {factor = 1}; print factor * 2.0}')" -bindd = $mainMod ALT, mouse_up, zoom out, exec, hyprctl keyword cursor:zoom_factor "$(hyprctl getoption cursor:zoom_factor | awk 'NR==1 {factor = $2; if (factor < 1) {factor = 1}; print factor / 2.0}')" +bindd = $mainMod ALT, mouse_up, zoom out, exec, hyprctl keyword cursor:zoom_factor "$(hyprctl getoption cursor:zoom_factor | awk 'NR==1 {factor = $2; if (factor < 1) {factor = 1}; print factor / 2.0}')" # Waybar / Bar related bindd = $mainMod CTRL ALT, B, toggle waybar on/off, exec, pkill -SIGUSR1 waybar @@ -164,7 +165,7 @@ bindd = $mainMod CTRL, K, Move left into group, moveintogroup, l # Move active w bindd = $mainMod CTRL, L, Move Right into group, moveintogroup, r # Move active window right into a group bindd = $mainMod CTRL, H, Move active out of group, moveoutofgroup # Move active window out of group -# Try to dynamically move in grouped window and when ungrouped +# Try to dynamically move in grouped window and when ungrouped # Not working for me DW 11/26/25 PR: https://github.com/JaKooLit/Hyprland-Dots/pull/872 #bindd = $mainMod, right, focus right, exec, bash -c 'if hyprctl activewindow -j | jq -e "((.grouped | type) == \"boolean\") or (.address == (.grouped[-1] // empty))" >/dev/null 2>&1; then hyprctl dispatch movefocus r; else hyprctl dispatch changegroupactive f; fi' #bindd = $mainMod, left, focus left, exec, bash -c 'if hyprctl activewindow -j | jq -e "((.grouped | type) == \"boolean\") or (.address == (.grouped[0] // empty))" >/dev/null 2>&1; then hyprctl dispatch movefocus l; else hyprctl dispatch changegroupactive b; fi' @@ -185,7 +186,7 @@ bindd = $mainMod, U, toggle special workspace, togglespecialworkspace, # The following mappings use the key codes to better support various keyboard layouts # 1 is code:10, 2 is code 11, etc -# Switch workspaces with mainMod + [0-9] +# Switch workspaces with mainMod + [0-9] bindd = $mainMod, code:10, workspace 1, workspace, 1 # NOTE: code:10 = key 1 bindd = $mainMod, code:11, workspace 2, workspace, 2 # NOTE: code:11 = key 2 bindd = $mainMod, code:12, workspace 3, workspace, 3 # NOTE: code:12 = key 3 diff --git a/config/hypr/scripts/ThemeChanger.sh b/config/hypr/scripts/ThemeChanger.sh new file mode 100644 index 00000000..15534258 --- /dev/null +++ b/config/hypr/scripts/ThemeChanger.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +set -euo pipefail + +# SPDX-FileCopyrightText: 2025-present Ahum Maitra theahummaitra@gmail.com +# +# SPDX-License-Identifier: GPL-3.0-or-later + +# Repository url : https://github.com/TheAhumMaitra/cautious-waddle + +# User choice +choice=$(wallust theme list \ + | sed '1d' \ + | sed 's/^- //' \ + | rofi -dmenu -p "Select Global Theme") + +# If user requested to exit, then exit +[[ -z "$choice" ]] && exit 0 + +# Apply the theme +wallust theme "$choice" + +# Inform user about theme changed +notify-send "Global theme changed" "Global Theme selected $choice" + +# Give warning to user for Waybar theme refresh +notify-send "Press SUPER+ALT+R to Refresh Waybar Theme" -- cgit v1.2.3 From 3ca6417a0a4636f2a8721d635a9958247911f2b0 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Sun, 4 Jan 2026 01:52:25 -0500 Subject: Added rule for modal and fixed alt-tab for max'd windows On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: CHANGELOG.md modified: config/hypr/configs/SystemSettings.conf modified: config/hypr/configs/WindowRules-config-v3.conf --- CHANGELOG.md | 14 ++++++++++++++ config/hypr/configs/SystemSettings.conf | 4 ++++ config/hypr/configs/WindowRules-config-v3.conf | 3 +++ 3 files changed, 21 insertions(+) (limited to 'config/hypr') diff --git a/CHANGELOG.md b/CHANGELOG.md index 22a25f75..43cc9856 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,20 @@ ## v2.3.19 +- 2026-01-04 +- Fullscreen or maxixmized would exit using `ALT-TAB` (cycle next/bring-to-front) + - User `GoodBorn` found this fix + ``` + misc { + on_focus_under_fullscreen = 1 + # 0 - Default, no change + # 1 - New focused window takes over fullscreen (Windows-like Alt-Tab) + # 2 - New focused window stays behind the fullscreen one + } + ``` +- Added: modal rule so popup diaglog, like `Save as` or `Open File` center and float by default + - `windowrule = float on, center on, match:modal:1` + - 2026-01-01 - Added more blur and enabled xray - Thank you [TheAhumMaitra](https://github.com/TheAhumMaitra) diff --git a/config/hypr/configs/SystemSettings.conf b/config/hypr/configs/SystemSettings.conf index 44521156..af8fe7a6 100644 --- a/config/hypr/configs/SystemSettings.conf +++ b/config/hypr/configs/SystemSettings.conf @@ -93,6 +93,10 @@ misc { enable_anr_dialog = true # Application not Responding (ANR) anr_missed_pings = 15 # ANR Threshold default 1 is too low allow_session_lock_restore = true # Prevent lockscreen crash when resume from suspend + on_focus_under_fullscreen = 1 + # 0 - Default, no change + # 1 - New focused window takes over fullscreen (Windows-like Alt-Tab) + # 2 - New focused window stays behind the fullscreen one } #opengl { diff --git a/config/hypr/configs/WindowRules-config-v3.conf b/config/hypr/configs/WindowRules-config-v3.conf index 8f639c5d..d9d180d2 100644 --- a/config/hypr/configs/WindowRules-config-v3.conf +++ b/config/hypr/configs/WindowRules-config-v3.conf @@ -139,6 +139,9 @@ windowrule = match:class ^([Qq]alculate-gtk)$, float on windowrule = match:class ^([Ff]erdium)$, float on windowrule = match:title ^(Picture-in-Picture)$, float on +# Float and center dialog boxes by default +windowrule = float on, center on, match:modal:1 + # windowrule - ######### float popups and dialogue ####### windowrule = match:title ^(Authentication Required)$, float on, center on windowrule = match:class (codium|codium-url-handler|VSCodium) match:title negative:(.*codium.*|.*VSCodium.*), float on -- cgit v1.2.3 From e2cce1cd10b93ba39cc5d243b7caf4aee6c8e7a4 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Sun, 4 Jan 2026 02:15:53 -0500 Subject: Fixed modal floating/center rule --- config/hypr/configs/WindowRules-config-v3.conf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'config/hypr') diff --git a/config/hypr/configs/WindowRules-config-v3.conf b/config/hypr/configs/WindowRules-config-v3.conf index d9d180d2..a81cc20d 100644 --- a/config/hypr/configs/WindowRules-config-v3.conf +++ b/config/hypr/configs/WindowRules-config-v3.conf @@ -140,7 +140,9 @@ windowrule = match:class ^([Ff]erdium)$, float on windowrule = match:title ^(Picture-in-Picture)$, float on # Float and center dialog boxes by default -windowrule = float on, center on, match:modal:1 +rule = float(true), match:modal:1 +rule = center(true), match:modal:1 + # windowrule - ######### float popups and dialogue ####### windowrule = match:title ^(Authentication Required)$, float on, center on -- cgit v1.2.3 From 98d8ef7e5c511e1963b66679dc1bd1534440b880 Mon Sep 17 00:00:00 2001 From: Ahum Maitra Date: Mon, 5 Jan 2026 00:21:21 +0530 Subject: Add theme switcher help shortcut (#906) * fix: Add Theme Switcher script * enhancement: add theme switcher shortcut * Refactor ThemeChanger.sh for improved readability --- config/hypr/scripts/KeyHints.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'config/hypr') diff --git a/config/hypr/scripts/KeyHints.sh b/config/hypr/scripts/KeyHints.sh index 8a478039..5511cfed 100755 --- a/config/hypr/scripts/KeyHints.sh +++ b/config/hypr/scripts/KeyHints.sh @@ -34,6 +34,7 @@ GDK_BACKEND=$BACKEND yad \ "ξ―† 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" \ @@ -69,4 +70,4 @@ GDK_BACKEND=$BACKEND yad \ "ξ―† ALT E" "Rofi Emoticons" "Emoticon" \ "ξ―† H" "Launch this Quick Cheat Sheet" "" \ "" "" "" \ -"More tips:" "https://github.com/JaKooLit/Hyprland-Dots/wiki" ""\ \ No newline at end of file +"More tips:" "https://github.com/JaKooLit/Hyprland-Dots/wiki" ""\ -- cgit v1.2.3 From 7c4f5ce9553cdba1dfc9066c701bd2587326a49f Mon Sep 17 00:00:00 2001 From: Don Williams Date: Mon, 5 Jan 2026 14:28:01 -0500 Subject: set ThemeChanger.sh executable --- config/hypr/scripts/ThemeChanger.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 config/hypr/scripts/ThemeChanger.sh (limited to 'config/hypr') diff --git a/config/hypr/scripts/ThemeChanger.sh b/config/hypr/scripts/ThemeChanger.sh old mode 100644 new mode 100755 -- cgit v1.2.3 From 4845eacf3e6aa3f88ff284a2505d1efbd5fe6417 Mon Sep 17 00:00:00 2001 From: brockar Date: Mon, 5 Jan 2026 17:23:38 -0300 Subject: feat(hypr): update window rules for zed, antigravity, and qalculate --- config/hypr/configs/WindowRules-config-v3.conf | 78 +++++++++++++------------- 1 file changed, 40 insertions(+), 38 deletions(-) (limited to 'config/hypr') diff --git a/config/hypr/configs/WindowRules-config-v3.conf b/config/hypr/configs/WindowRules-config-v3.conf index a81cc20d..a09501ed 100644 --- a/config/hypr/configs/WindowRules-config-v3.conf +++ b/config/hypr/configs/WindowRules-config-v3.conf @@ -2,25 +2,22 @@ # Vendor defaults for window rules and layerrules # See https://wiki.hyprland.org/Configuring/Window-Rules/ for more -# NOTES: This is only for Hyprland > 0.53 - -# Some samples on how to start apps on specific workspaces -# windowrule move to workspace -#windowrule = workspace 1, match:tag email* -#windowrule = workspace 2, match:tag browser* -#windowrule = workspace 3, match:class ^([Tt]hunar)$ -#windowrule = workspace 3, match:tag projects* -#windowrule = workspace 5, match:tag gamestore* -#windowrule = workspace 7, match:tag im* -#windowrule = workspace 8, match:tag games* - -#windowrule move to workspace (silent) -#windowrule = workspace 4 silent, match:tag screenshare* -#windowrule = workspace 6 silent, match:class ^(virt-manager)$ -#windowrule = workspace 6 silent, match:class ^(.virt-manager-wrapped)$ -#windowrule = workspace 9 silent, match:tag multimedia* - -# windowrule - tags - add apps under appropriate tag to use the same settings +# NOTES: This is only for Hyprland >= 0.53 + +# Some samples on hwo to start apps on specific workspaces +# windowrule = match:tag email*, workspace 1 +# windowrule = match:tag browser*, workspace 2 +# windowrule = match:tag projects*, workspace 3 +# windowrule = match:tag screenshare*, workspace 4 silent +# windowrule = match:tag gamestore*, workspace 5 +# windowrule = match:class ^(virt-manager)$, workspace 6 silent +# windowrule = match:class ^(.virt-manager-wrapped)$, workspace 6 silent +# windowrule = match:tag im*, workspace 7 +# windowrule = match:class obsidian, workspace 8 +# windowrule = match:tag games*, workspace 8 +# windowrule = match:tag multimedia*, workspace 9 silent + +# TAGS - add apps under appropriate tag to use the same settings # browser tags windowrule = match:class ^([Ff]irefox|org.mozilla.firefox|[Ff]irefox-esr|[Ff]irefox-bin)$, tag +browser windowrule = match:class ^([Gg]oogle-chrome(-beta|-dev|-unstable)?)$, tag +browser @@ -29,7 +26,7 @@ windowrule = match:class ^([Cc]hromium)$, tag +browser windowrule = match:class ^([Mm]icrosoft-edge(-stable|-beta|-dev|-unstable))$, tag +browser windowrule = match:class ^(Brave-browser(-beta|-dev|-unstable)?)$, tag +browser windowrule = match:class ^([Tt]horium-browser|[Cc]achy-browser)$, tag +browser -windowrule = match:class ^(zen-alpha|zen)$, tag +browser +windowrule = match:class ^(zen)$, tag +browser # notif tags windowrule = match:class ^(swaync-control-center|swaync-notification-window|swaync-client|class)$, tag +notif @@ -50,6 +47,7 @@ windowrule = match:class ^(eu.betterbird.Betterbird)$, tag +email windowrule = match:class ^(codium|codium-url-handler|VSCodium)$, tag +projects windowrule = match:class ^(VSCode|code|code-url-handler)$, tag +projects windowrule = match:class ^(jetbrains-.+)$, tag +projects +windowrule = match:class ^(dev.zed.Zed|antigravity)$, tag +projects # screenshare tags windowrule = match:class ^(com.obsproject.Studio)$, tag +screenshare @@ -107,9 +105,10 @@ windowrule = match:class ^(eog|org.gnome.Loupe)$, tag +viewer # Some special override rules windowrule = match:tag multimedia_video, no_blur on windowrule = match:tag multimedia_video, opacity 1.0 +windowrule = match:tag multimedia, no_blur on +windowrule = match:tag multimedia, opacity 1.0 # POSITION -# windowrule = match:floating true, center on windowrule = match:tag KooL_Cheat, center on windowrule = match:class ([Tt]hunar) match:title negative:(.*[Tt]hunar.*), center on windowrule = match:title ^(ROG Control)$, center on @@ -118,7 +117,6 @@ windowrule = match:title ^(Keybindings)$, center on windowrule = match:class ^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$, center on windowrule = match:class ^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$, center on windowrule = match:class ^([Ff]erdium)$, center on -windowrule = match:title ^(Picture-in-Picture)$, move 72% 7% # windowrule to avoid idle for fullscreen apps windowrule = match:fullscreen true, idle_inhibit fullscreen @@ -133,18 +131,12 @@ windowrule = match:tag settings, float on windowrule = match:tag viewer, float on windowrule = match:tag KooL-Settings, float on windowrule = match:class ([Zz]oom|onedriver|onedriver-launcher), float on -windowrule = match:class (org.gnome.Calculator), float on +windowrule = match:class (org.gnome.Calculator|qalculate-gtk), float on windowrule = match:class ^(mpv|com.github.rafostar.Clapper)$, float on windowrule = match:class ^([Qq]alculate-gtk)$, float on windowrule = match:class ^([Ff]erdium)$, float on -windowrule = match:title ^(Picture-in-Picture)$, float on -# Float and center dialog boxes by default -rule = float(true), match:modal:1 -rule = center(true), match:modal:1 - - -# windowrule - ######### float popups and dialogue ####### +# popups and dialogue windowrule = match:title ^(Authentication Required)$, float on, center on windowrule = match:class (codium|codium-url-handler|VSCodium) match:title negative:(.*codium.*|.*VSCodium.*), float on windowrule = match:class ^(com.heroicgameslauncher.hgl)$ match:title negative:(Heroic Games Launcher), float on @@ -154,10 +146,7 @@ windowrule = match:title ^(Add Folder to Workspace)$, float on, size (monitor_w* windowrule = match:title ^(Save As)$, float on, size (monitor_w*0.7) (monitor_h*0.6), center on windowrule = match:initial_title (Open Files), float on, size (monitor_w*0.7) (monitor_h*0.6) windowrule = match:title ^(SDDM Background)$, float on, center on, size (monitor_w*0.16) (monitor_h*0.12) - -# YAD dialog for wallpaper confirmation windowrule = match:class ^(yad)$, float on, center on, size (monitor_w*0.2) (monitor_h*0.2) -# END of float popups and dialogue ####### # OPACITY windowrule = match:tag browser, opacity 0.99 0.8 @@ -172,23 +161,22 @@ windowrule = match:tag wallpaper, opacity 0.9 0.7 windowrule = match:class ^(gedit|org.gnome.TextEditor|mousepad)$, opacity 0.8 0.7 windowrule = match:class ^(deluge)$, opacity 0.9 0.8 windowrule = match:class ^(seahorse)$, opacity 0.9 0.8 -windowrule = match:title ^(Picture-in-Picture)$, opacity 0.95 0.75 # SIZE windowrule = match:tag KooL_Cheat, size (monitor_w*0.65) (monitor_h*0.9) windowrule = match:tag wallpaper, size (monitor_w*0.7) (monitor_h*0.7) windowrule = match:tag settings, size (monitor_w*0.7) (monitor_h*0.7) -windowrule = match:class ^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$, size (monitor_w*0.6) (monitor_h*0.7) windowrule = match:class ^([Ff]erdium)$, size (monitor_w*0.6) (monitor_h*0.7) +windowrule = match:class (org.gnome.Calculator|qalculate-gtk), center on, size (monitor_w*0.25) (monitor_h*0.3) +windowrule = match:class ^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$, size (monitor_w*0.6) (monitor_h*0.5) -# PINNING -windowrule = match:title ^(Picture-in-Picture)$, pin on, keep_aspect_ratio on # BLUR & FULLSCREEN windowrule = match:tag games, no_blur on, fullscreen 0 windowrule = match:tag games, fullscreen 0 -# This not gonna take the focus to the window that appears when hovering over some of the parts of the IntelliJ Products +# This not gonna take the focus to the window that appears when +# hovering over some of the parts of the IntelliJ Products windowrule = match:class ^(jetbrains-*), no_initial_focus on windowrule = match:title ^(wind.*)$, no_initial_focus on @@ -197,3 +185,17 @@ layerrule = match:namespace rofi, blur on layerrule = match:namespace notifications, blur on layerrule = match:namespace quickshell:overview, blur on layerrule = match:namespace quickshell:overview, ignore_alpha 0.5 + +# Picture-in-Picture +windowrule { + name = Picture-in-Picture + match:title = ^(Picture-in-Picture)$ + float = on + move = 72% 7% + opacity = 0.95 0.75 + pin = on + keep_aspect_ratio = on + size = (monitor_w*0.3) (monitor_h*0.3) +} + + -- cgit v1.2.3 From 304552fdc44350f9eb34e50a26d25ea1ff780b79 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Mon, 5 Jan 2026 15:32:29 -0500 Subject: Fixing rules for zapzap/pip --- config/hypr/configs/WindowRules-config-v3.conf | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'config/hypr') diff --git a/config/hypr/configs/WindowRules-config-v3.conf b/config/hypr/configs/WindowRules-config-v3.conf index a09501ed..d05416c6 100644 --- a/config/hypr/configs/WindowRules-config-v3.conf +++ b/config/hypr/configs/WindowRules-config-v3.conf @@ -17,6 +17,8 @@ # windowrule = match:tag games*, workspace 8 # windowrule = match:tag multimedia*, workspace 9 silent + + # TAGS - add apps under appropriate tag to use the same settings # browser tags windowrule = match:class ^([Ff]irefox|org.mozilla.firefox|[Ff]irefox-esr|[Ff]irefox-bin)$, tag +browser @@ -56,7 +58,6 @@ windowrule = match:class ^(com.obsproject.Studio)$, tag +screenshare windowrule = match:class ^([Dd]iscord|[Ww]ebCord|[Vv]esktop)$, tag +im windowrule = match:class ^([Ff]erdium)$, tag +im windowrule = match:class ^([Ww]hatsapp-for-linux)$, tag +im -windowrule = match:class ^(ZapZap|com.rtosta.zapzap)$, tag +im windowrule = match:class ^(org.telegram.desktop|io.github.tdesktop_x64.TDesktop)$, tag +im windowrule = match:class ^(teams-for-linux)$, tag +im windowrule = match:class ^(im.riot.Riot|Element)$, tag +im @@ -115,7 +116,6 @@ windowrule = match:title ^(ROG Control)$, center on windowrule = match:tag KooL-Settings, center on windowrule = match:title ^(Keybindings)$, center on windowrule = match:class ^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$, center on -windowrule = match:class ^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$, center on windowrule = match:class ^([Ff]erdium)$, center on # windowrule to avoid idle for fullscreen apps @@ -168,7 +168,6 @@ windowrule = match:tag wallpaper, size (monitor_w*0.7) (monitor_h*0.7) windowrule = match:tag settings, size (monitor_w*0.7) (monitor_h*0.7) windowrule = match:class ^([Ff]erdium)$, size (monitor_w*0.6) (monitor_h*0.7) windowrule = match:class (org.gnome.Calculator|qalculate-gtk), center on, size (monitor_w*0.25) (monitor_h*0.3) -windowrule = match:class ^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$, size (monitor_w*0.6) (monitor_h*0.5) # BLUR & FULLSCREEN @@ -186,6 +185,13 @@ layerrule = match:namespace notifications, blur on layerrule = match:namespace quickshell:overview, blur on layerrule = match:namespace quickshell:overview, ignore_alpha 0.5 +# Named rules for special cases +windowrule { + match:class = ^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$ + float = on + size = (monitor_w*0.6) (monitor_h*0.7) + center = on +} # Picture-in-Picture windowrule { name = Picture-in-Picture -- cgit v1.2.3 From 9a6295cd88fde3e662fd039c7fdc3bf238536f90 Mon Sep 17 00:00:00 2001 From: brockar Date: Mon, 5 Jan 2026 18:16:38 -0300 Subject: scripts: update_WindowRules.sh for hyprland 0.53 --- config/hypr/scripts/update_WindowRules.sh | 60 +++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100755 config/hypr/scripts/update_WindowRules.sh (limited to 'config/hypr') diff --git a/config/hypr/scripts/update_WindowRules.sh b/config/hypr/scripts/update_WindowRules.sh new file mode 100755 index 00000000..8b4262ba --- /dev/null +++ b/config/hypr/scripts/update_WindowRules.sh @@ -0,0 +1,60 @@ +#!/usr/bin/env bash +# Script to update WindowRules config if Hyprland version is >= 0.53 + +CONFIGS_DIR="$HOME/.config/hypr/configs" +TARGET_FILE="$CONFIGS_DIR/WindowRules.conf" +V3_FILE="$CONFIGS_DIR/WindowRules-config-v3.conf" + +if [[ ! -f "$V3_FILE" ]]; then + echo "Error: Source configuration file not found: $V3_FILE" + exit 1 +fi + +get_hyprland_version() { + local ver="0.0.0" + local raw_ver="" + + if command -v hyprctl &>/dev/null; then + raw_ver=$(hyprctl version 2>/dev/null | grep "Tag:" | cut -d 'v' -f2) + fi + + if [ -z "$raw_ver" ] && command -v Hyprland &>/dev/null; then + raw_ver=$(Hyprland --version 2>/dev/null | grep "Tag:" | cut -d 'v' -f2 | awk '{print $1}') + fi + + if [ -n "$raw_ver" ]; then + ver=$(echo "$raw_ver" | grep -oE '^[0-9]+\.[0-9]+(\.[0-9]+)?') + fi + + if [ -z "$ver" ]; then + echo "0.0.0" + else + echo "$ver" + fi +} + +VERSION=$(get_hyprland_version) +REQUIRED_VER="0.53" + +# Check if version >= REQUIRED_VER +SMALLEST=$(printf '%s\n' "$REQUIRED_VER" "$VERSION" | sort -V | head -n1) + +if [ "$SMALLEST" = "$REQUIRED_VER" ]; then + echo "Version $VERSION >= $REQUIRED_VER. Updating WindowRules config..." + # Backup existing config if it exists + if [ -f "$TARGET_FILE" ]; then + echo "Backing up existing WindowRules.conf to WindowRules.conf.bak" + mv "$TARGET_FILE" "$TARGET_FILE.bak" + fi + cp "$V3_FILE" "$TARGET_FILE" + + if command -v hyprctl &>/dev/null; then + if hyprctl instances &>/dev/null; then + echo "Reloading Hyprland..." + hyprctl reload + fi + fi +else + echo "Version $VERSION < $REQUIRED_VER. No update needed." +fi + -- cgit v1.2.3 From 07cbde7bbd7ee858f8325ddd1d64ae5bbc5a34c1 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Tue, 6 Jan 2026 04:11:59 -0500 Subject: Fixed rule for whatsapp missing rule name On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: WindowRules-config-v3.conf --- config/hypr/configs/WindowRules-config-v3.conf | 1 + 1 file changed, 1 insertion(+) (limited to 'config/hypr') diff --git a/config/hypr/configs/WindowRules-config-v3.conf b/config/hypr/configs/WindowRules-config-v3.conf index d05416c6..7b772c26 100644 --- a/config/hypr/configs/WindowRules-config-v3.conf +++ b/config/hypr/configs/WindowRules-config-v3.conf @@ -187,6 +187,7 @@ layerrule = match:namespace quickshell:overview, ignore_alpha 0.5 # Named rules for special cases windowrule { + name = Whatsapp-zapzap match:class = ^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$ float = on size = (monitor_w*0.6) (monitor_h*0.7) -- cgit v1.2.3 From 32e564b0334d9a5e89b347d93972669d3e93f830 Mon Sep 17 00:00:00 2001 From: brockar Date: Tue, 6 Jan 2026 21:30:29 -0300 Subject: fix: clean hypr/configs/Startup_apps.conf --- config/hypr/configs/Startup_Apps.conf | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) (limited to 'config/hypr') diff --git a/config/hypr/configs/Startup_Apps.conf b/config/hypr/configs/Startup_Apps.conf index 550c79d4..2bf902cd 100644 --- a/config/hypr/configs/Startup_Apps.conf +++ b/config/hypr/configs/Startup_Apps.conf @@ -1,34 +1,23 @@ # /* ---- πŸ’« https://github.com/JaKooLit πŸ’« ---- */ # # Commands and Apps to be executed at launch (vendor defaults) - $scriptsDir = $HOME/.config/hypr/scripts $UserScripts = $HOME/.config/hypr/UserScripts - -$wallDIR = $HOME/Pictures/wallpapers # change path manually here if needed $lock = $scriptsDir/LockScreen.sh $SwwwRandom = $UserScripts/WallpaperAutoChange.sh $livewallpaper="" +$wallDIR = $HOME/Pictures/wallpapers # change path manually here if needed ### wallpaper stuff ### exec-once = swww-daemon --format xrgb #exec-once = mpvpaper '*' -o "load-scripts=no no-audio --loop" $livewallpaper - # wallpaper random #exec-once = $SwwwRandom $wallDIR # random wallpaper switcher every 30 minutes ### Startup ### exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP - -# Drop Down terminal -# See Bug#810 https://github.com/JaKooLit/Hyprland-Dots/issues/810#issuecomment-3351947644 exec-once = $HOME/.config/hypr/scripts/Dropterminal.sh kitty & - - -# Polkit (Polkit Gnome / KDE) exec-once = $scriptsDir/Polkit.sh - -# starup apps exec-once = nm-applet --indicator exec-once = nm-tray # For ubuntu exec-once = swaync @@ -37,6 +26,8 @@ exec-once = swaync #exec-once = rog-control-center exec-once = waybar exec-once = qs -c overview # Quickshell Overview +exec-once = hypridle +exec-once = $scriptsDir/Hyprsunset.sh init # Clipboard manager exec-once = wl-paste --type text --watch cliphist store @@ -45,11 +36,6 @@ exec-once = wl-paste --type image --watch cliphist store # Rainbow borders exec-once = $UserScripts/RainbowBorders.sh -# hypridle for hyprlock -exec-once = hypridle - -# Resume Hyprsunset if state is "on" from previous session -exec-once = $scriptsDir/Hyprsunset.sh init # Here are list of features available but disabled by default # Persistent wallpaper -- cgit v1.2.3 From f5e75aa7d630e170b777a06aea05feb5680ef019 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Tue, 6 Jan 2026 22:35:58 -0500 Subject: Improved error and dependency checking MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cancel behavior under set -e: rofi returns non‑zero on Escape/cancel. Added dependency checksf wallust/rofi/notify-send aren’t installed Combine the two sed calls into one. Error handling always send a β€œchanged” notification even if wallust theme fails. Check the exit status and notify on failure. On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/hypr/scripts/ThemeChanger.sh new file: config/hypr/scripts/ThemeChanger.sh.ori --- config/hypr/scripts/ThemeChanger.sh | 62 +++++++++++++++++++++++---------- config/hypr/scripts/ThemeChanger.sh.ori | 27 ++++++++++++++ 2 files changed, 71 insertions(+), 18 deletions(-) create mode 100755 config/hypr/scripts/ThemeChanger.sh.ori (limited to 'config/hypr') diff --git a/config/hypr/scripts/ThemeChanger.sh b/config/hypr/scripts/ThemeChanger.sh index 15534258..0843fd69 100755 --- a/config/hypr/scripts/ThemeChanger.sh +++ b/config/hypr/scripts/ThemeChanger.sh @@ -1,5 +1,4 @@ #!/usr/bin/env bash - set -euo pipefail # SPDX-FileCopyrightText: 2025-present Ahum Maitra theahummaitra@gmail.com @@ -8,20 +7,47 @@ set -euo pipefail # Repository url : https://github.com/TheAhumMaitra/cautious-waddle -# User choice -choice=$(wallust theme list \ - | sed '1d' \ - | sed 's/^- //' \ - | rofi -dmenu -p "Select Global Theme") - -# If user requested to exit, then exit -[[ -z "$choice" ]] && exit 0 - -# Apply the theme -wallust theme "$choice" - -# Inform user about theme changed -notify-send "Global theme changed" "Global Theme selected $choice" - -# Give warning to user for Waybar theme refresh -notify-send "Press SUPER+ALT+R to Refresh Waybar Theme" +require() { + command -v "$1" >/dev/null 2>&1 || { + printf '%s\n' "Missing dependency: $1" >&2 + exit 127 + } +} + +require wallust +require rofi + +# notify-send is optional +have_notify() { command -v notify-send >/dev/null 2>&1; } + +# Prompt for theme; guard -e on cancel +set +e +choice="$(wallust theme list \ + | sed -e '1d' -e 's/^- //' \ + | rofi -dmenu -i -p 'Select Global Theme')" +prompt_status=$? +set -e + +# Exit cleanly on cancel or empty selection +if (( prompt_status != 0 )) || [[ -z "${choice}" ]]; then + exit 0 +fi + +# Apply the theme and report result +if wallust theme -- "${choice}"; then + have_notify && notify-send -a ThemeChanger \ + -h string:x-dunst-stack-tag:themechanger \ + "Global theme changed" "Selected: ${choice}" + + # Try to refresh Waybar automatically; ignore failures + if command -v waybar-msg >/dev/null 2>&1; then + waybar-msg cmd reload >/dev/null 2>&1 || true + else + pkill -SIGUSR2 waybar >/dev/null 2>&1 || true + fi +else + have_notify && notify-send -u critical -a ThemeChanger \ + -h string:x-dunst-stack-tag:themechanger \ + "Failed to apply theme" "${choice}" + exit 1 +fi diff --git a/config/hypr/scripts/ThemeChanger.sh.ori b/config/hypr/scripts/ThemeChanger.sh.ori new file mode 100755 index 00000000..15534258 --- /dev/null +++ b/config/hypr/scripts/ThemeChanger.sh.ori @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +set -euo pipefail + +# SPDX-FileCopyrightText: 2025-present Ahum Maitra theahummaitra@gmail.com +# +# SPDX-License-Identifier: GPL-3.0-or-later + +# Repository url : https://github.com/TheAhumMaitra/cautious-waddle + +# User choice +choice=$(wallust theme list \ + | sed '1d' \ + | sed 's/^- //' \ + | rofi -dmenu -p "Select Global Theme") + +# If user requested to exit, then exit +[[ -z "$choice" ]] && exit 0 + +# Apply the theme +wallust theme "$choice" + +# Inform user about theme changed +notify-send "Global theme changed" "Global Theme selected $choice" + +# Give warning to user for Waybar theme refresh +notify-send "Press SUPER+ALT+R to Refresh Waybar Theme" -- cgit v1.2.3 From 2f03d6a418ea5f034fec40ff69e5adddb45f88f2 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Tue, 6 Jan 2026 23:08:38 -0500 Subject: Added comment focus_under_window only works in HL 0.53+ This setting resolves ALT+TAB cycle-next/bring-to-front when windows fullscreen or maximized. HL less than 53 will generate an error and that line will have be commented out On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/hypr/configs/SystemSettings.conf --- config/hypr/configs/SystemSettings.conf | 1 + 1 file changed, 1 insertion(+) (limited to 'config/hypr') diff --git a/config/hypr/configs/SystemSettings.conf b/config/hypr/configs/SystemSettings.conf index af8fe7a6..f49960cd 100644 --- a/config/hypr/configs/SystemSettings.conf +++ b/config/hypr/configs/SystemSettings.conf @@ -93,6 +93,7 @@ misc { enable_anr_dialog = true # Application not Responding (ANR) anr_missed_pings = 15 # ANR Threshold default 1 is too low allow_session_lock_restore = true # Prevent lockscreen crash when resume from suspend + # This only works with HL v0.53+ on_focus_under_fullscreen = 1 # 0 - Default, no change # 1 - New focused window takes over fullscreen (Windows-like Alt-Tab) -- cgit v1.2.3 From 5d4fb9d343b0bebd6fd56a1668fe2e8ebafc891d Mon Sep 17 00:00:00 2001 From: Don Williams Date: Tue, 6 Jan 2026 23:34:34 -0500 Subject: Adding small delay to allow wallust to finish same for WP select On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: hypr/scripts/ThemeChanger.sh --- config/hypr/scripts/ThemeChanger.sh | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'config/hypr') diff --git a/config/hypr/scripts/ThemeChanger.sh b/config/hypr/scripts/ThemeChanger.sh index 0843fd69..1ae1060f 100755 --- a/config/hypr/scripts/ThemeChanger.sh +++ b/config/hypr/scripts/ThemeChanger.sh @@ -39,11 +39,19 @@ if wallust theme -- "${choice}"; then -h string:x-dunst-stack-tag:themechanger \ "Global theme changed" "Selected: ${choice}" - # Try to refresh Waybar automatically; ignore failures - if command -v waybar-msg >/dev/null 2>&1; then - waybar-msg cmd reload >/dev/null 2>&1 || true + # Give wallust a brief moment to finish writing templates + sleep 0.15 + + # Prefer the same refresh path used by WallpaperSelect to avoid CSS race/fallbacks + if [ -x "$HOME/.config/hypr/scripts/Refresh.sh" ]; then + "$HOME/.config/hypr/scripts/Refresh.sh" >/dev/null 2>&1 || true else - pkill -SIGUSR2 waybar >/dev/null 2>&1 || true + # Fallback: reload Waybar only + if command -v waybar-msg >/dev/null 2>&1; then + waybar-msg cmd reload >/dev/null 2>&1 || true + else + pkill -SIGUSR2 waybar >/dev/null 2>&1 || true + fi fi else have_notify && notify-send -u critical -a ThemeChanger \ -- cgit v1.2.3 From 36848b869cdf753f716c88b1a2bdc8e482434ae2 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Tue, 6 Jan 2026 23:38:57 -0500 Subject: Possible race condition now waits then refreshes On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: hypr/scripts/ThemeChanger.sh --- config/hypr/scripts/ThemeChanger.sh | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) (limited to 'config/hypr') diff --git a/config/hypr/scripts/ThemeChanger.sh b/config/hypr/scripts/ThemeChanger.sh index 1ae1060f..a40a1f18 100755 --- a/config/hypr/scripts/ThemeChanger.sh +++ b/config/hypr/scripts/ThemeChanger.sh @@ -39,14 +39,30 @@ if wallust theme -- "${choice}"; then -h string:x-dunst-stack-tag:themechanger \ "Global theme changed" "Selected: ${choice}" - # Give wallust a brief moment to finish writing templates - sleep 0.15 + # Regenerate templates from the current wallpaper to ensure Wallust rewrites waybar/rofi files + start_ts=$(date +%s) + wp_cur="$HOME/.config/hypr/wallpaper_effects/.wallpaper_current" + if [ -f "$wp_cur" ]; then + wallust run -s "$wp_cur" >/dev/null 2>&1 || true + fi + + # Wait until template targets exist and are non-empty/newer than the start time + targets=("$HOME/.config/waybar/wallust/colors-waybar.css" "$HOME/.config/rofi/wallust/colors-rofi.rasi") + for i in $(seq 1 40); do + ok=1 + for f in "${targets[@]}"; do + if [ ! -s "$f" ]; then ok=0; break; fi + mtime=$(stat -c %Y "$f" 2>/dev/null || echo 0) + if [ "$mtime" -lt "$start_ts" ]; then ok=0; break; fi + done + [ $ok -eq 1 ] && break + sleep 0.1 + done - # Prefer the same refresh path used by WallpaperSelect to avoid CSS race/fallbacks + # Refresh bars/menus after files are in place if [ -x "$HOME/.config/hypr/scripts/Refresh.sh" ]; then "$HOME/.config/hypr/scripts/Refresh.sh" >/dev/null 2>&1 || true else - # Fallback: reload Waybar only if command -v waybar-msg >/dev/null 2>&1; then waybar-msg cmd reload >/dev/null 2>&1 || true else -- cgit v1.2.3 From 296411955a376adf4a39468b1f251cef8a31fe4f Mon Sep 17 00:00:00 2001 From: Don Williams Date: Tue, 6 Jan 2026 23:50:56 -0500 Subject: Updated CHANGELOG removed backup file On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: CHANGELOG.md deleted: config/hypr/scripts/ThemeChanger.sh.ori --- CHANGELOG.md | 16 +++++++++++++++- config/hypr/scripts/ThemeChanger.sh.ori | 27 --------------------------- 2 files changed, 15 insertions(+), 28 deletions(-) delete mode 100755 config/hypr/scripts/ThemeChanger.sh.ori (limited to 'config/hypr') diff --git a/CHANGELOG.md b/CHANGELOG.md index 43cc9856..f778c622 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,9 +2,18 @@ ## v2.3.19 +- 2026-01-06 + - Added Global Theme Changer. + - There are many themes to choose from + - `SUPER + T` + - Added "Glass Style" taken from `ML4W` dotfiles + - Thank you [TheAhumMaitra](https://github.com/TheAhumMaitra) + - Fixed more WindowRules + - 2026-01-04 -- Fullscreen or maxixmized would exit using `ALT-TAB` (cycle next/bring-to-front) +- Fullscreen or maximized would exit using `ALT-TAB` (cycle next/bring-to-front) - User `GoodBorn` found this fix + ``` misc { on_focus_under_fullscreen = 1 @@ -13,6 +22,11 @@ # 2 - New focused window stays behind the fullscreen one } ``` + + > Note: The above change only works on Hyprland v0.53+. + > Users with lower will have to comment that line out. + > `~/.config/hypr/UserSettings/SystemSettings.conf` + - Added: modal rule so popup diaglog, like `Save as` or `Open File` center and float by default - `windowrule = float on, center on, match:modal:1` diff --git a/config/hypr/scripts/ThemeChanger.sh.ori b/config/hypr/scripts/ThemeChanger.sh.ori deleted file mode 100755 index 15534258..00000000 --- a/config/hypr/scripts/ThemeChanger.sh.ori +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -# SPDX-FileCopyrightText: 2025-present Ahum Maitra theahummaitra@gmail.com -# -# SPDX-License-Identifier: GPL-3.0-or-later - -# Repository url : https://github.com/TheAhumMaitra/cautious-waddle - -# User choice -choice=$(wallust theme list \ - | sed '1d' \ - | sed 's/^- //' \ - | rofi -dmenu -p "Select Global Theme") - -# If user requested to exit, then exit -[[ -z "$choice" ]] && exit 0 - -# Apply the theme -wallust theme "$choice" - -# Inform user about theme changed -notify-send "Global theme changed" "Global Theme selected $choice" - -# Give warning to user for Waybar theme refresh -notify-send "Press SUPER+ALT+R to Refresh Waybar Theme" -- cgit v1.2.3 From 6c22b060a60ef539b856da859375a8279f31c1f2 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Wed, 7 Jan 2026 14:02:56 -0500 Subject: Fixed Window Rule for thunar copy progress On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: WindowRules-config-v3.conf --- config/hypr/configs/WindowRules-config-v3.conf | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'config/hypr') diff --git a/config/hypr/configs/WindowRules-config-v3.conf b/config/hypr/configs/WindowRules-config-v3.conf index 7b772c26..00c98644 100644 --- a/config/hypr/configs/WindowRules-config-v3.conf +++ b/config/hypr/configs/WindowRules-config-v3.conf @@ -111,7 +111,6 @@ windowrule = match:tag multimedia, opacity 1.0 # POSITION windowrule = match:tag KooL_Cheat, center on -windowrule = match:class ([Tt]hunar) match:title negative:(.*[Tt]hunar.*), center on windowrule = match:title ^(ROG Control)$, center on windowrule = match:tag KooL-Settings, center on windowrule = match:title ^(Keybindings)$, center on @@ -141,7 +140,6 @@ windowrule = match:title ^(Authentication Required)$, float on, center on windowrule = match:class (codium|codium-url-handler|VSCodium) match:title negative:(.*codium.*|.*VSCodium.*), float on windowrule = match:class ^(com.heroicgameslauncher.hgl)$ match:title negative:(Heroic Games Launcher), float on windowrule = match:class ^([Ss]team)$ match:title negative:^([Ss]team)$, float on -windowrule = match:class ([Tt]hunar) match:title negative:(.*[Tt]hunar.*), float on windowrule = match:title ^(Add Folder to Workspace)$, float on, size (monitor_w*0.7) (monitor_h*0.6), center on windowrule = match:title ^(Save As)$, float on, size (monitor_w*0.7) (monitor_h*0.6), center on windowrule = match:initial_title (Open Files), float on, size (monitor_w*0.7) (monitor_h*0.6) @@ -205,4 +203,14 @@ windowrule { size = (monitor_w*0.3) (monitor_h*0.3) } +# Thunar copy progress dialog +windowrule { + name = Thunar-Progress-bar + match:class = ^(thunar)$ + match:title = ^(File Operation Progress)$ + float = on + center = on + size = (monitor_w*0.26) (monitor_h*0.18) +} + -- cgit v1.2.3 From 95861d3827ce294ef321b996813c910bcf22b816 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Wed, 7 Jan 2026 14:51:31 -0500 Subject: Adding better control over wallust pallete generation Then refresh On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/hypr/scripts/ThemeChanger.sh --- config/hypr/scripts/ThemeChanger.sh | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) (limited to 'config/hypr') diff --git a/config/hypr/scripts/ThemeChanger.sh b/config/hypr/scripts/ThemeChanger.sh index a40a1f18..604791c9 100755 --- a/config/hypr/scripts/ThemeChanger.sh +++ b/config/hypr/scripts/ThemeChanger.sh @@ -33,21 +33,21 @@ if (( prompt_status != 0 )) || [[ -z "${choice}" ]]; then exit 0 fi +# Record time before applying so we can wait for fresh template outputs +start_ts=$(date +%s) + # Apply the theme and report result if wallust theme -- "${choice}"; then have_notify && notify-send -a ThemeChanger \ -h string:x-dunst-stack-tag:themechanger \ "Global theme changed" "Selected: ${choice}" - # Regenerate templates from the current wallpaper to ensure Wallust rewrites waybar/rofi files - start_ts=$(date +%s) - wp_cur="$HOME/.config/hypr/wallpaper_effects/.wallpaper_current" - if [ -f "$wp_cur" ]; then - wallust run -s "$wp_cur" >/dev/null 2>&1 || true - fi - # Wait until template targets exist and are non-empty/newer than the start time - targets=("$HOME/.config/waybar/wallust/colors-waybar.css" "$HOME/.config/rofi/wallust/colors-rofi.rasi") + targets=( + "$HOME/.config/waybar/wallust/colors-waybar.css" + "$HOME/.config/rofi/wallust/colors-rofi.rasi" + "$HOME/.config/kitty/kitty-themes/01-Wallust.conf" + ) for i in $(seq 1 40); do ok=1 for f in "${targets[@]}"; do @@ -69,6 +69,11 @@ if wallust theme -- "${choice}"; then pkill -SIGUSR2 waybar >/dev/null 2>&1 || true fi fi + + # Ask kitty to reload its config so the new 01-Wallust.conf is picked up + if pidof kitty >/dev/null; then + for pid in $(pidof kitty); do kill -SIGUSR1 "$pid" 2>/dev/null || true; done + fi else have_notify && notify-send -u critical -a ThemeChanger \ -h string:x-dunst-stack-tag:themechanger \ -- cgit v1.2.3 From 0eed66a811866cd67ca512505540b551f2f9a812 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Wed, 7 Jan 2026 14:56:37 -0500 Subject: Wait timer was wrong --- config/hypr/scripts/ThemeChanger.sh | 35 ++++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) (limited to 'config/hypr') diff --git a/config/hypr/scripts/ThemeChanger.sh b/config/hypr/scripts/ThemeChanger.sh index 604791c9..b3672b7f 100755 --- a/config/hypr/scripts/ThemeChanger.sh +++ b/config/hypr/scripts/ThemeChanger.sh @@ -42,24 +42,49 @@ if wallust theme -- "${choice}"; then -h string:x-dunst-stack-tag:themechanger \ "Global theme changed" "Selected: ${choice}" - # Wait until template targets exist and are non-empty/newer than the start time + # Wait until template targets exist, are newer than start_ts, and are stable (size/mtime stops changing) targets=( "$HOME/.config/waybar/wallust/colors-waybar.css" "$HOME/.config/rofi/wallust/colors-rofi.rasi" "$HOME/.config/kitty/kitty-themes/01-Wallust.conf" ) - for i in $(seq 1 40); do + + # Phase 1: appearance + freshness + for _ in $(seq 1 100); do # up to ~10s ok=1 for f in "${targets[@]}"; do - if [ ! -s "$f" ]; then ok=0; break; fi + [ -s "$f" ] || { ok=0; break; } mtime=$(stat -c %Y "$f" 2>/dev/null || echo 0) - if [ "$mtime" -lt "$start_ts" ]; then ok=0; break; fi + [ "$mtime" -ge "$start_ts" ] || { ok=0; break; } done [ $ok -eq 1 ] && break sleep 0.1 done - # Refresh bars/menus after files are in place + # Phase 2: stability (avoid reading half-written files) + if [ $ok -eq 1 ]; then + for _ in 1 2 3; do + sizes_a=(); mtimes_a=() + for f in "${targets[@]}"; do + sizes_a+=("$(stat -c %s "$f" 2>/dev/null || echo 0)") + mtimes_a+=("$(stat -c %Y "$f" 2>/dev/null || echo 0)") + done + sleep 0.15 + sizes_b=(); mtimes_b=() + for f in "${targets[@]}"; do + sizes_b+=("$(stat -c %s "$f" 2>/dev/null || echo 0)") + mtimes_b+=("$(stat -c %Y "$f" 2>/dev/null || echo 0)") + done + if [ "${sizes_a[*]}" = "${sizes_b[*]}" ] && [ "${mtimes_a[*]}" = "${mtimes_b[*]}" ]; then + break + fi + done + else + # As a safety net, wait a bit to avoid racing rofi reload against template writes + sleep 0.5 + fi + + # Refresh bars/menus after files are ready if [ -x "$HOME/.config/hypr/scripts/Refresh.sh" ]; then "$HOME/.config/hypr/scripts/Refresh.sh" >/dev/null 2>&1 || true else -- cgit v1.2.3 From 7b8ed32a68b6dc6d3d9575f6fe113ea1623e6094 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Wed, 7 Jan 2026 15:04:53 -0500 Subject: Found Urgent was hard coded RED, setting to --- config/hypr/scripts/ThemeChanger.sh | 2 ++ config/rofi/themes/KooL_style-4.rasi | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) (limited to 'config/hypr') diff --git a/config/hypr/scripts/ThemeChanger.sh b/config/hypr/scripts/ThemeChanger.sh index b3672b7f..3f55cce4 100755 --- a/config/hypr/scripts/ThemeChanger.sh +++ b/config/hypr/scripts/ThemeChanger.sh @@ -84,6 +84,8 @@ if wallust theme -- "${choice}"; then sleep 0.5 fi + # Small cushion before refresh to mirror wallpaper flow + sleep 0.2 # Refresh bars/menus after files are ready if [ -x "$HOME/.config/hypr/scripts/Refresh.sh" ]; then "$HOME/.config/hypr/scripts/Refresh.sh" >/dev/null 2>&1 || true diff --git a/config/rofi/themes/KooL_style-4.rasi b/config/rofi/themes/KooL_style-4.rasi index ea7b1977..ea8d2c39 100644 --- a/config/rofi/themes/KooL_style-4.rasi +++ b/config/rofi/themes/KooL_style-4.rasi @@ -25,7 +25,7 @@ configuration { background-alt: @color1; selected: @color12; active: @color11; - urgent: #F7768E; + urgent: @color13; border-color: @color11; handle-color: @selected; -- cgit v1.2.3 From 9a06cade6048cf1fb3a540c889f26fd5ee12465f Mon Sep 17 00:00:00 2001 From: Don Williams Date: Wed, 7 Jan 2026 22:46:17 -0500 Subject: Fixing rofi selection color issue On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/hypr/scripts/ThemeChanger.sh modified: config/rofi/themes/KooL_style-5.rasi --- config/hypr/scripts/ThemeChanger.sh | 15 +++++++++++++++ config/rofi/themes/KooL_style-5.rasi | 7 +++---- 2 files changed, 18 insertions(+), 4 deletions(-) (limited to 'config/hypr') diff --git a/config/hypr/scripts/ThemeChanger.sh b/config/hypr/scripts/ThemeChanger.sh index 3f55cce4..f42fb406 100755 --- a/config/hypr/scripts/ThemeChanger.sh +++ b/config/hypr/scripts/ThemeChanger.sh @@ -86,6 +86,21 @@ if wallust theme -- "${choice}"; then # Small cushion before refresh to mirror wallpaper flow sleep 0.2 + # Normalize Rofi selection colors to use the palette's accent (color12) + rofi_colors="$HOME/.config/rofi/wallust/colors-rofi.rasi" + if [ -f "$rofi_colors" ]; then + accent_hex=$(sed -n 's/^\s*color12:\s*\(#[0-9A-Fa-f]\{6\}\).*/\1/p' "$rofi_colors" | head -n1) + [ -z "$accent_hex" ] && accent_hex=$(sed -n 's/^\s*color13:\s*\(#[0-9A-Fa-f]\{6\}\).*/\1/p' "$rofi_colors" | head -n1) + if [ -n "$accent_hex" ]; then + sed -i -E "s|^(\s*selected-normal-background:\s*).*$|\1$accent_hex;|" "$rofi_colors" + sed -i -E "s|^(\s*selected-active-background:\s*).*$|\1$accent_hex;|" "$rofi_colors" + sed -i -E "s|^(\s*selected-urgent-background:\s*).*$|\1$accent_hex;|" "$rofi_colors" + sed -i -E "s|^(\s*selected-normal-foreground:\s*).*$|\1#000000;|" "$rofi_colors" + sed -i -E "s|^(\s*selected-active-foreground:\s*).*$|\1#000000;|" "$rofi_colors" + sed -i -E "s|^(\s*selected-urgent-foreground:\s*).*$|\1#000000;|" "$rofi_colors" + fi + fi + # Refresh bars/menus after files are ready if [ -x "$HOME/.config/hypr/scripts/Refresh.sh" ]; then "$HOME/.config/hypr/scripts/Refresh.sh" >/dev/null 2>&1 || true diff --git a/config/rofi/themes/KooL_style-5.rasi b/config/rofi/themes/KooL_style-5.rasi index 4f51b972..72ec7675 100644 --- a/config/rofi/themes/KooL_style-5.rasi +++ b/config/rofi/themes/KooL_style-5.rasi @@ -140,10 +140,9 @@ button { button selected { background-color: @selected; - text-color: @foreground; + text-color: @background; border: 1px; border-color: transparent; - } /* ---- Listview ---- */ @@ -203,8 +202,8 @@ element normal.active { element-text selected, element selected.normal { - background-color: @active; - text-color: inherit; + background-color: @selected; + text-color: @background; } element selected.urgent { -- cgit v1.2.3 From eb03615199f93f29e8d663b1e5d2b0e3371459cd Mon Sep 17 00:00:00 2001 From: Don Williams Date: Thu, 8 Jan 2026 00:13:45 -0500 Subject: Added support for ghostty term integrated w/wallust On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/ghostty/ghostty.config modified: config/hypr/scripts/ThemeChanger.sh modified: config/hypr/scripts/WallustSwww.sh new file: config/wallust/templates/colors-ghostty.conf modified: config/wallust/wallust.toml --- config/ghostty/ghostty.config | 2 +- config/hypr/scripts/ThemeChanger.sh | 4 ++++ config/hypr/scripts/WallustSwww.sh | 3 +++ config/wallust/templates/colors-ghostty.conf | 28 ++++++++++++++++++++++++++++ config/wallust/wallust.toml | 3 +++ 5 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 config/wallust/templates/colors-ghostty.conf (limited to 'config/hypr') diff --git a/config/ghostty/ghostty.config b/config/ghostty/ghostty.config index 00def172..3795ec3f 100644 --- a/config/ghostty/ghostty.config +++ b/config/ghostty/ghostty.config @@ -4,7 +4,7 @@ background-opacity = 1.00 bold-is-bright = false confirm-close-surface = false cursor-style = bar -font-family = Maple Mono NF +font-family = FantasqueSansM Nerd Font Mono font-size = 12 gtk-single-instance = true mouse-hide-while-typing = true diff --git a/config/hypr/scripts/ThemeChanger.sh b/config/hypr/scripts/ThemeChanger.sh index f42fb406..4a712a4b 100755 --- a/config/hypr/scripts/ThemeChanger.sh +++ b/config/hypr/scripts/ThemeChanger.sh @@ -43,10 +43,14 @@ if wallust theme -- "${choice}"; then "Global theme changed" "Selected: ${choice}" # Wait until template targets exist, are newer than start_ts, and are stable (size/mtime stops changing) + # Ensure Ghostty directory exists so Wallust can write target even if Ghostty isn't installed + mkdir -p "$HOME/.config/ghostty" || true + targets=( "$HOME/.config/waybar/wallust/colors-waybar.css" "$HOME/.config/rofi/wallust/colors-rofi.rasi" "$HOME/.config/kitty/kitty-themes/01-Wallust.conf" + "$HOME/.config/ghostty/wallust.conf" ) # Phase 1: appearance + freshness diff --git a/config/hypr/scripts/WallustSwww.sh b/config/hypr/scripts/WallustSwww.sh index f3da3e35..7090b84c 100755 --- a/config/hypr/scripts/WallustSwww.sh +++ b/config/hypr/scripts/WallustSwww.sh @@ -55,6 +55,9 @@ ln -sf "$wallpaper_path" "$rofi_link" || true mkdir -p "$(dirname "$wallpaper_current")" cp -f "$wallpaper_path" "$wallpaper_current" || true +# Ensure Ghostty directory exists so Wallust can write target even if Ghostty isn't installed +mkdir -p "$HOME/.config/ghostty" || true + # Run wallust (silent) to regenerate templates defined in ~/.config/wallust/wallust.toml # -s is used in this repo to keep things quiet and avoid extra prompts wallust run -s "$wallpaper_path" || true diff --git a/config/wallust/templates/colors-ghostty.conf b/config/wallust/templates/colors-ghostty.conf new file mode 100644 index 00000000..45f93a63 --- /dev/null +++ b/config/wallust/templates/colors-ghostty.conf @@ -0,0 +1,28 @@ +# /* ---- πŸ’« https://github.com/JaKooLit πŸ’« ---- */ +# wallust template - colors for Ghostty +# This file is included by ~/.config/ghostty/ghostty.config when present. + +# Core UI colors +foreground = {{foreground}} +background = {{background}} +cursor-color = {{cursor}} +selection-foreground = {{foreground}} +selection-background = {{color12}} + +# 16-color palette +palette = 0:{{color0}} +palette = 1:{{color1}} +palette = 2:{{color2}} +palette = 3:{{color3}} +palette = 4:{{color4}} +palette = 5:{{color5}} +palette = 6:{{color6}} +palette = 7:{{color7}} +palette = 8:{{color8}} +palette = 9:{{color9}} +palette = 10:{{color10}} +palette = 11:{{color11}} +palette = 12:{{color12}} +palette = 13:{{color13}} +palette = 14:{{color14}} +palette = 15:{{color15}} \ No newline at end of file diff --git a/config/wallust/wallust.toml b/config/wallust/wallust.toml index d1f40ab2..7565dd47 100644 --- a/config/wallust/wallust.toml +++ b/config/wallust/wallust.toml @@ -49,6 +49,9 @@ waybar.target = '~/.config/waybar/wallust/colors-waybar.css' kitty.template = 'colors-kitty.conf' kitty.target = '~/.config/kitty/kitty-themes/01-Wallust.conf' +ghostty.template = 'colors-ghostty.conf' +ghostty.target = '~/.config/ghostty/wallust.conf' + quickshell.template = 'qml_color.json' quickshell.target = '~/.config/quickshell/qml_color.json' -- cgit v1.2.3 From d83d96dca71885f363fa9b70a32084bfe3219a69 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Thu, 8 Jan 2026 00:28:29 -0500 Subject: Fixing ghostty wallust integration On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/hypr/scripts/ThemeChanger.sh modified: config/hypr/scripts/WallustSwww.sh modified: copy.sh --- config/hypr/scripts/ThemeChanger.sh | 6 ++++++ config/hypr/scripts/WallustSwww.sh | 5 +++++ copy.sh | 6 +++++- 3 files changed, 16 insertions(+), 1 deletion(-) (limited to 'config/hypr') diff --git a/config/hypr/scripts/ThemeChanger.sh b/config/hypr/scripts/ThemeChanger.sh index 4a712a4b..b42ec8da 100755 --- a/config/hypr/scripts/ThemeChanger.sh +++ b/config/hypr/scripts/ThemeChanger.sh @@ -53,6 +53,12 @@ if wallust theme -- "${choice}"; then "$HOME/.config/ghostty/wallust.conf" ) + # Normalize Ghostty palette syntax in case upstream templates or older targets used ':' + ghostty_conf="$HOME/.config/ghostty/wallust.conf" + if [ -f "$ghostty_conf" ]; then + sed -i -E 's/^(\s*palette\s*=\s*)([0-9]{1,2}):/\1\2=/' "$ghostty_conf" 2>/dev/null || true + fi + # Phase 1: appearance + freshness for _ in $(seq 1 100); do # up to ~10s ok=1 diff --git a/config/hypr/scripts/WallustSwww.sh b/config/hypr/scripts/WallustSwww.sh index 7090b84c..421b84f8 100755 --- a/config/hypr/scripts/WallustSwww.sh +++ b/config/hypr/scripts/WallustSwww.sh @@ -61,3 +61,8 @@ mkdir -p "$HOME/.config/ghostty" || true # Run wallust (silent) to regenerate templates defined in ~/.config/wallust/wallust.toml # -s is used in this repo to keep things quiet and avoid extra prompts wallust run -s "$wallpaper_path" || true + +# Normalize Ghostty palette syntax in case ':' was used by older files +if [ -f "$HOME/.config/ghostty/wallust.conf" ]; then + sed -i -E 's/^(\s*palette\s*=\s*)([0-9]{1,2}):/\1\2=/' "$HOME/.config/ghostty/wallust.conf" 2>/dev/null || true +fi diff --git a/copy.sh b/copy.sh index 9de8677c..34a4e543 100755 --- a/copy.sh +++ b/copy.sh @@ -726,11 +726,15 @@ if [ -f "$GHOSTTY_SRC" ]; then mkdir -p "$GHOSTTY_DIR" install -m 0644 "$GHOSTTY_SRC" "$GHOSTTY_DEST" 2>&1 | tee -a "$LOG" echo "${OK} - Installed Ghostty config to ${MAGENTA}$GHOSTTY_DEST${RESET}" 2>&1 | tee -a "$LOG" + # Normalize existing wallust.conf palette syntax if present (convert ':' to '=') + if [ -f "$GHOSTTY_DIR/wallust.conf" ]; then + sed -i -E 's/^(\s*palette\s*=\s*)([0-9]{1,2}):/\1\2=/' "$GHOSTTY_DIR/wallust.conf" 2>&1 | tee -a "$LOG" || true + fi else echo "${ERROR} - $GHOSTTY_SRC not found; skipping Ghostty config install." 2>&1 | tee -a "$LOG" fi -printf "\n%.0s" {1..1} +printf "\\n%.0s" {1..1} # ags config # Check if ags is installed -- cgit v1.2.3 From 7e057020a428ba234e1557d17d26ec28fedb250f Mon Sep 17 00:00:00 2001 From: Don Williams Date: Thu, 8 Jan 2026 00:36:12 -0500 Subject: Adding reload config to ghostty on theme/wallpaper change On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/hypr/scripts/ThemeChanger.sh modified: config/hypr/scripts/WallustSwww.sh --- config/hypr/scripts/ThemeChanger.sh | 5 +++++ config/hypr/scripts/WallustSwww.sh | 9 +++++++++ 2 files changed, 14 insertions(+) (limited to 'config/hypr') diff --git a/config/hypr/scripts/ThemeChanger.sh b/config/hypr/scripts/ThemeChanger.sh index b42ec8da..4c814f2c 100755 --- a/config/hypr/scripts/ThemeChanger.sh +++ b/config/hypr/scripts/ThemeChanger.sh @@ -126,6 +126,11 @@ if wallust theme -- "${choice}"; then if pidof kitty >/dev/null; then for pid in $(pidof kitty); do kill -SIGUSR1 "$pid" 2>/dev/null || true; done fi + + # Ask ghostty to reload its config so the updated wallust.conf is applied + if pidof ghostty >/dev/null; then + for pid in $(pidof ghostty); do kill -SIGUSR2 "$pid" 2>/dev/null || true; done + fi else have_notify && notify-send -u critical -a ThemeChanger \ -h string:x-dunst-stack-tag:themechanger \ diff --git a/config/hypr/scripts/WallustSwww.sh b/config/hypr/scripts/WallustSwww.sh index 421b84f8..d1e53400 100755 --- a/config/hypr/scripts/WallustSwww.sh +++ b/config/hypr/scripts/WallustSwww.sh @@ -66,3 +66,12 @@ wallust run -s "$wallpaper_path" || true if [ -f "$HOME/.config/ghostty/wallust.conf" ]; then sed -i -E 's/^(\s*palette\s*=\s*)([0-9]{1,2}):/\1\2=/' "$HOME/.config/ghostty/wallust.conf" 2>/dev/null || true fi + +# Light wait for Ghostty colors file to be present then signal Ghostty to reload (SIGUSR2) +for _ in 1 2 3; do + [ -s "$HOME/.config/ghostty/wallust.conf" ] && break + sleep 0.1 +done +if pidof ghostty >/dev/null; then + for pid in $(pidof ghostty); do kill -SIGUSR2 "$pid" 2>/dev/null || true; done +fi -- cgit v1.2.3 From a35a1c4e980081566287dd6e2510f658f046cad1 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Thu, 8 Jan 2026 21:02:00 -0500 Subject: Fixing hyprland-dots scripts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - TouchPad.sh never expands $TOUCHPAD_ENABLED - (and doesn’t source the file that defines it), so the toggle command is - currently doesn't work. - Volume.sh has multiple microphone-control bugs - bad pamixer arguments, typoed function name, invalid notification payloads - that break mic toggling and volume feedback. - DarkLight.sh wipes the Qt theme paths each run - because the qt5ct/qt6ct palette variables are commented out. - KooLsDotsUpdate.sh contains a malformed notify-send string that - crashes the script when no local version is detected. - Distro_update.sh runs sudo apt upgrade outside the kitty window, - so the Debian/Ubuntu flow never finishes inside the terminal. On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/hypr/scripts/DarkLight.sh modified: config/hypr/scripts/Distro_update.sh modified: config/hypr/scripts/KooLsDotsUpdate.sh modified: config/hypr/scripts/TouchPad.sh modified: config/hypr/scripts/Volume.sh --- config/hypr/scripts/DarkLight.sh | 12 ++++++ config/hypr/scripts/Distro_update.sh | 2 +- config/hypr/scripts/KooLsDotsUpdate.sh | 12 +++--- config/hypr/scripts/TouchPad.sh | 48 ++++++++++++++++------- config/hypr/scripts/Volume.sh | 69 +++++++++++++++++++++++++--------- 5 files changed, 106 insertions(+), 37 deletions(-) (limited to 'config/hypr') diff --git a/config/hypr/scripts/DarkLight.sh b/config/hypr/scripts/DarkLight.sh index a225c7bc..37016ec3 100755 --- a/config/hypr/scripts/DarkLight.sh +++ b/config/hypr/scripts/DarkLight.sh @@ -20,6 +20,10 @@ kitty_conf="$HOME/.config/kitty/kitty.conf" wallust_config="$HOME/.config/wallust/wallust.toml" pallete_dark="dark16" pallete_light="light16" +qt5ct_dark="$HOME/.config/qt5ct/colors/Catppuccin-Mocha.conf" +qt5ct_light="$HOME/.config/qt5ct/colors/Catppuccin-Latte.conf" +qt6ct_dark="$HOME/.config/qt6ct/colors/Catppuccin-Mocha.conf" +qt6ct_light="$HOME/.config/qt6ct/colors/Catppuccin-Latte.conf" # intial kill process for pid in waybar rofi swaync ags swaybg; do @@ -44,6 +48,14 @@ else # Logic for Light mode wallpaper_path="$light_wallpapers" fi +# Select Qt color scheme templates for the upcoming mode +if [ "$next_mode" = "Dark" ]; then + qt5ct_color_scheme="$qt5ct_dark" + qt6ct_color_scheme="$qt6ct_dark" +else + qt5ct_color_scheme="$qt5ct_light" + qt6ct_color_scheme="$qt6ct_light" +fi # Function to update theme mode for the next cycle update_theme_mode() { diff --git a/config/hypr/scripts/Distro_update.sh b/config/hypr/scripts/Distro_update.sh index 2b3376e3..917f303b 100755 --- a/config/hypr/scripts/Distro_update.sh +++ b/config/hypr/scripts/Distro_update.sh @@ -27,7 +27,7 @@ elif command -v dnf &> /dev/null; then notify-send -i "$iDIR/ja.png" -u low 'Fedora system' 'has been updated.' elif command -v apt &> /dev/null; then # Debian-based (Debian, Ubuntu, etc.) - kitty -T update sudo apt update && sudo apt upgrade -y + kitty -T update bash -c "sudo apt update && sudo apt upgrade -y" notify-send -i "$iDIR/ja.png" -u low 'Debian/Ubuntu system' 'has been updated.' elif command -v zypper &> /dev/null; then # openSUSE-based diff --git a/config/hypr/scripts/KooLsDotsUpdate.sh b/config/hypr/scripts/KooLsDotsUpdate.sh index 51277ab1..a49f5430 100755 --- a/config/hypr/scripts/KooLsDotsUpdate.sh +++ b/config/hypr/scripts/KooLsDotsUpdate.sh @@ -5,12 +5,12 @@ # Local Paths local_dir="$HOME/.config/hypr" iDIR="$HOME/.config/swaync/images/" -local_version=$(ls $local_dir/v* 2>/dev/null | sort -V | tail -n 1 | sed 's/.*v\(.*\)/\1/') +local_version=$(find "$local_dir" -maxdepth 1 -name 'v*' -printf '%f\n' 2>/dev/null | sort -V | tail -n 1 | sed 's/^v//') KooL_Dots_DIR="$HOME/Hyprland-Dots" # exit if cannot find local version if [ -z "$local_version" ]; then - notify-send -i "$iDIR/error.png" "ERROR "!?!?!!"" "Unable to find KooL's dots version . exiting.... " + notify-send -i "$iDIR/error.png" 'ERROR !?!?!!' "Unable to find KooL's dots version. Exiting." exit 1 fi @@ -19,7 +19,7 @@ branch="main" github_url="https://github.com/JaKooLit/Hyprland-Dots/tree/$branch/config/hypr/" # Fetch the version from GitHub URL - KooL's dots -github_version=$(curl -s $github_url | grep -o 'v[0-9]\+\.[0-9]\+\.[0-9]\+' | sort -V | tail -n 1 | sed 's/v//') +github_version=$(curl -s "$github_url" | grep -o 'v[0-9]\+\.[0-9]\+\.[0-9]\+' | sort -V | tail -n 1 | sed 's/v//') # Cant find GitHub URL - KooL's dots version if [ -z "$github_version" ]; then @@ -39,13 +39,13 @@ else case "$response" in "action1") - if [ -d $KooL_Dots_DIR ]; then + if [ -d "$KooL_Dots_DIR" ]; then if ! command -v kitty &> /dev/null; then notify-send -i "$iDIR/error.png" "E-R-R-O-R" "Kitty terminal not found. Please install Kitty terminal." exit 1 fi kitty -e bash -c " - cd $KooL_Dots_DIR && + cd \"$KooL_Dots_DIR\" && git stash && git pull && ./copy.sh && @@ -59,7 +59,7 @@ else fi kitty -e bash -c " git clone --depth=1 https://github.com/JaKooLit/Hyprland-Dots.git $KooL_Dots_DIR && - cd $KooL_Dots_DIR && + cd \"$KooL_Dots_DIR\" && chmod +x copy.sh && ./copy.sh && notify-send -u critical -i "$iDIR/ja.png" 'Update Completed:' 'Kindly log out and relogin to take effect' diff --git a/config/hypr/scripts/TouchPad.sh b/config/hypr/scripts/TouchPad.sh index 030c36de..f14165a0 100755 --- a/config/hypr/scripts/TouchPad.sh +++ b/config/hypr/scripts/TouchPad.sh @@ -5,28 +5,50 @@ # use hyprctl devices to get your system touchpad device name # source https://github.com/hyprwm/Hyprland/discussions/4283?sort=new#discussioncomment-8648109 +set -euo pipefail + notif="$HOME/.config/swaync/images/ja.png" +laptops_conf="$HOME/.config/hypr/UserConfigs/Laptops.conf" + +touchpad_device="${TOUCHPAD_DEVICE:-}" +if [[ -z "$touchpad_device" && -f "$laptops_conf" ]]; then + touchpad_device="$( + awk -F= '/^\$Touchpad_Device/ { + gsub(/[[:space:]]*/, "", $1); + gsub(/^[[:space:]]+|[[:space:]]+$/, "", $2); + print $2; + exit + }' "$laptops_conf" + )" +fi + +if [[ -z "$touchpad_device" ]]; then + notify-send -u low -i "$notif" " Touchpad" " Device name not set (check Laptops.conf)" + exit 1 +fi -export STATUS_FILE="$XDG_RUNTIME_DIR/touchpad.status" +touchpad_keyword="${TOUCHPAD_KEYWORD:-device:${touchpad_device}:enabled}" +status_file="${XDG_RUNTIME_DIR:-/tmp}/touchpad.status" enable_touchpad() { - printf "true" >"$STATUS_FILE" - notify-send -u low -i $notif " Enabling" " touchpad" - hyprctl keyword '$TOUCHPAD_ENABLED' "true" -r + printf "true" >"$status_file" + notify-send -u low -i "$notif" " Enabling" " touchpad" + hyprctl keyword "$touchpad_keyword" true -r } disable_touchpad() { - printf "false" >"$STATUS_FILE" - notify-send -u low -i $notif " Disabling" " touchpad" - hyprctl keyword '$TOUCHPAD_ENABLED' "false" -r + printf "false" >"$status_file" + notify-send -u low -i "$notif" " Disabling" " touchpad" + hyprctl keyword "$touchpad_keyword" false -r } -if ! [ -f "$STATUS_FILE" ]; then - enable_touchpad -else - if [ $(cat "$STATUS_FILE") = "true" ]; then +current_state="false" +if [[ -f "$status_file" ]]; then + current_state="$(<"$status_file")" +fi + +if [[ "$current_state" == "true" ]]; then disable_touchpad - elif [ $(cat "$STATUS_FILE") = "false" ]; then +else enable_touchpad - fi fi diff --git a/config/hypr/scripts/Volume.sh b/config/hypr/scripts/Volume.sh index d870519c..e1034a68 100755 --- a/config/hypr/scripts/Volume.sh +++ b/config/hypr/scripts/Volume.sh @@ -7,8 +7,14 @@ sDIR="$HOME/.config/hypr/scripts" # Get Volume get_volume() { + if [[ "$(pamixer --get-mute)" == "true" ]]; then + echo "Muted" + return + fi + + local volume volume=$(pamixer --get-volume) - if [[ "$volume" -eq "0" ]]; then + if [[ "$volume" -eq 0 ]]; then echo "Muted" else echo "$volume %" @@ -17,12 +23,15 @@ get_volume() { # Get icons get_icon() { - current=$(get_volume) - if [[ "$current" == "Muted" ]]; then + if [[ "$(pamixer --get-mute)" == "true" ]]; then echo "$iDIR/volume-mute.png" - elif [[ "${current%\%}" -le 30 ]]; then + return + fi + + current=$(pamixer --get-volume) + if [[ "$current" -le 30 ]]; then echo "$iDIR/volume-low.png" - elif [[ "${current%\%}" -le 60 ]]; then + elif [[ "$current" -le 60 ]]; then echo "$iDIR/volume-mid.png" else echo "$iDIR/volume-high.png" @@ -31,11 +40,18 @@ get_icon() { # Notify notify_user() { - if [[ "$(get_volume)" == "Muted" ]]; then - notify-send -e -h string:x-canonical-private-synchronous:volume_notif -h boolean:SWAYNC_BYPASS_DND:true -u low -i "$(get_icon)" " Volume:" " Muted" + local muted="$(pamixer --get-mute)" + local level="$(pamixer --get-volume)" + + if [[ "$muted" == "true" || "$level" -eq 0 ]]; then + notify-send -e -h string:x-canonical-private-synchronous:volume_notif \ + -h boolean:SWAYNC_BYPASS_DND:true -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 -h boolean:SWAYNC_BYPASS_DND:true -u low -i "$(get_icon)" " Volume Level:" " $(get_volume)" && - "$sDIR/Sounds.sh" --volume + notify-send -e -h int:value:"$level" -h string:x-canonical-private-synchronous:volume_notif \ + -h boolean:SWAYNC_BYPASS_DND:true -u low -i "$(get_icon)" \ + " Volume Level:" " ${level}%" && + "$sDIR/Sounds.sh" --volume fi } @@ -71,13 +87,14 @@ toggle_mic() { if [ "$(pamixer --default-source --get-mute)" == "false" ]; then pamixer --default-source -m && notify-send -e -u low -h boolean:SWAYNC_BYPASS_DND:true -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 -h boolean:SWAYNC_BYPASS_DND:true -i "$iDIR/microphone.png" " Microphone:" " Switched ON" + pamixer --default-source -u && notify-send -e -u low -h boolean:SWAYNC_BYPASS_DND:true -i "$iDIR/microphone.png" " Microphone:" " Switched ON" fi } # Get Mic Icon get_mic_icon() { - current=$(pamixer --default-source --get-volume) - if [[ "$current" -eq "0" ]]; then + local muted="$(pamixer --default-source --get-mute)" + local current="$(pamixer --default-source --get-volume)" + if [[ "$muted" == "true" || "$current" -eq "0" ]]; then echo "$iDIR/microphone-mute.png" else echo "$iDIR/microphone.png" @@ -86,8 +103,14 @@ get_mic_icon() { # Get Microphone Volume get_mic_volume() { + if [[ "$(pamixer --default-source --get-mute)" == "true" ]]; then + echo "Muted" + return + fi + + local volume volume=$(pamixer --default-source --get-volume) - if [[ "$volume" -eq "0" ]]; then + if [[ "$volume" -eq 0 ]]; then echo "Muted" else echo "$volume %" @@ -96,9 +119,21 @@ get_mic_volume() { # Notify for Microphone 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" -h boolean:SWAYNC_BYPASS_DND:true -u low -i "$icon" " Mic Level:" " $volume" + local muted="$(pamixer --default-source --get-mute)" + local level="$(pamixer --default-source --get-volume)" + local icon message + + if [[ "$muted" == "true" || "$level" -eq 0 ]]; then + icon="$iDIR/microphone-mute.png" + notify-send -e -h "string:x-canonical-private-synchronous:volume_notif" \ + -h boolean:SWAYNC_BYPASS_DND:true -u low -i "$icon" \ + " Mic Level:" " Muted" + else + icon="$iDIR/microphone.png" + notify-send -e -h int:value:"$level" -h "string:x-canonical-private-synchronous:volume_notif" \ + -h boolean:SWAYNC_BYPASS_DND:true -u low -i "$icon" \ + " Mic Level:" " ${level}%" + fi } # Increase MIC Volume @@ -113,7 +148,7 @@ inc_mic_volume() { # Decrease MIC Volume dec_mic_volume() { if [ "$(pamixer --default-source --get-mute)" == "true" ]; then - toggle-mic + toggle_mic else pamixer --default-source -d 5 && notify_mic_user fi -- cgit v1.2.3 From 10f3c5d0792ef5d652e0546fa8c8181a43f47c99 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Thu, 8 Jan 2026 21:10:18 -0500 Subject: Fixing more scripts in Hyprland-Dots MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Hypridle.sh now launches hypridle in the background (& disown) - when enabling the daemon, preventing the toggle command from hanging Waybar. - RofiSearch.sh verifies that jq is available, - captures the user’s query explicitly - URL-encodes it via jq @uri, - opens the configured search engine with the encoded query instead of dropping the term. - Sounds.sh now tries pw-play, then paplay, then aplay, - emitting an error if none are installed - the script no longer calls the non-existent pa-play. On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/hypr/scripts/Hypridle.sh modified: config/hypr/scripts/RofiSearch.sh modified: config/hypr/scripts/Sounds.sh --- config/hypr/scripts/Hypridle.sh | 3 ++- config/hypr/scripts/RofiSearch.sh | 15 +++++++++++++-- config/hypr/scripts/Sounds.sh | 17 +++++++++++++++-- 3 files changed, 30 insertions(+), 5 deletions(-) (limited to 'config/hypr') diff --git a/config/hypr/scripts/Hypridle.sh b/config/hypr/scripts/Hypridle.sh index 6acff434..a9bb90d7 100755 --- a/config/hypr/scripts/Hypridle.sh +++ b/config/hypr/scripts/Hypridle.sh @@ -15,7 +15,8 @@ elif [[ "$1" == "toggle" ]]; then if pgrep -x "$PROCESS" >/dev/null; then pkill "$PROCESS" else - "$PROCESS" + "$PROCESS" >/dev/null 2>&1 & + disown fi else echo "Usage: $0 {status|toggle}" diff --git a/config/hypr/scripts/RofiSearch.sh b/config/hypr/scripts/RofiSearch.sh index 8ef12c46..dfeb19ac 100755 --- a/config/hypr/scripts/RofiSearch.sh +++ b/config/hypr/scripts/RofiSearch.sh @@ -4,6 +4,10 @@ # Define the path to the config file config_file=$HOME/.config/hypr/UserConfigs/01-UserDefaults.conf +if ! command -v jq >/dev/null 2>&1; then + notify-send -u low "Rofi Search" "jq is required for URL encoding. Please install jq." + exit 1 +fi # Check if the config file exists if [[ ! -f "$config_file" ]]; then @@ -32,5 +36,12 @@ if pgrep -x "rofi" >/dev/null; then pkill rofi fi -# Open Rofi and pass the selected query to xdg-open for Google search -echo "" | rofi -dmenu -config "$rofi_theme" -mesg "$msg" | xargs -I{} xdg-open $Search_Engine \ No newline at end of file +# Open Rofi and pass the selected query to xdg-open for the configured search engine +query=$(printf '' | rofi -dmenu -config "$rofi_theme" -mesg "$msg") + +if [[ -z "$query" ]]; then + exit 0 +fi + +encoded_query=$(printf '%s' "$query" | jq -sRr @uri) +xdg-open "${Search_Engine}${encoded_query}" >/dev/null 2>&1 & diff --git a/config/hypr/scripts/Sounds.sh b/config/hypr/scripts/Sounds.sh index b372d714..e92248da 100755 --- a/config/hypr/scripts/Sounds.sh +++ b/config/hypr/scripts/Sounds.sh @@ -73,5 +73,18 @@ if ! test -f "$sound_file"; then fi fi -# pipewire priority, fallback pulseaudio -pw-play "$sound_file" || pa-play "$sound_file" \ No newline at end of file +# Play the sound: prefer PipeWire, then PulseAudio, then ALSA +if command -v pw-play >/dev/null 2>&1; then + pw-play "$sound_file" && exit 0 +fi + +if command -v paplay >/dev/null 2>&1; then + paplay "$sound_file" && exit 0 +fi + +if command -v aplay >/dev/null 2>&1; then + aplay "$sound_file" && exit 0 +fi + +echo "Error: No suitable audio player (pw-play/paplay/aplay) found." +exit 1 -- cgit v1.2.3 From 3a423138021325a6d97ab0538625305795a6b1c1 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Thu, 8 Jan 2026 21:22:30 -0500 Subject: Fixing the next three scripts - `Tak0-Per-Window-Switch.sh` now records the listener PID in ``~/.cache/kb_layout_per_window.listener.pid`` - reuses it if still running, preventing multiple background listeners - reports missing Hyprland sockets without exiting the main script. - `WaybarScripts.sh` adds a `launch_files()` helper that checks `$files` before execution; - if unset, it shows a notification instead of running an empty command. - `sddm_wallpaper.sh` validates `~/.config/rofi/wallust/colors-rofi.rasi` before use - extracts colors via a helper, and aborts with a notification if any required colors are missing. On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: CHANGELOG.md modified: config/hypr/scripts/Tak0-Per-Window-Switch.sh modified: config/hypr/scripts/WaybarScripts.sh modified: config/hypr/scripts/sddm_wallpaper.sh --- CHANGELOG.md | 3 +++ config/hypr/scripts/Tak0-Per-Window-Switch.sh | 20 ++++++++++++--- config/hypr/scripts/WaybarScripts.sh | 10 +++++++- config/hypr/scripts/sddm_wallpaper.sh | 37 ++++++++++++++++++++++----- 4 files changed, 58 insertions(+), 12 deletions(-) (limited to 'config/hypr') diff --git a/CHANGELOG.md b/CHANGELOG.md index d9f88343..5089b350 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,9 @@ - `RofiSearch.sh` verifies that `jq` is available, captures the user’s query explicitly, URL-encodes it via `jq` `@uri`, - opens the configured search engine with the encoded query instead of dropping the term. - `Sounds.sh` now tries `pw-play`, then `paplay`, then `aplay`, emitting a clear error if none are installed, so the script no longer calls the non-existent pa-play. + - `Tak0-Per-Window-Switch.sh` now records the listener PID in `~/.cache/kb_layout_per_window.listener.pid` and reuses it if still running, preventing multiple background listeners, and reports missing Hyprland sockets without exiting the main script. + - `WaybarScripts.sh` adds a `launch_files()` helper that checks `$files` before execution; if unset, it shows a notification instead of running an empty command. + - `sddm_wallpaper.sh` validates `~/.config/rofi/wallust/colors-rofi.rasi` before use, extracts colors via a helper, and aborts with a notification if any required colors are missing. - 2026-01-06 - Added Global Theme Changer. diff --git a/config/hypr/scripts/Tak0-Per-Window-Switch.sh b/config/hypr/scripts/Tak0-Per-Window-Switch.sh index 7879fb85..7cec89a6 100755 --- a/config/hypr/scripts/Tak0-Per-Window-Switch.sh +++ b/config/hypr/scripts/Tak0-Per-Window-Switch.sh @@ -17,6 +17,7 @@ MAP_FILE="$HOME/.cache/kb_layout_per_window" CFG_FILE="$HOME/.config/hypr/configs/SystemSettings.conf" ICON="$HOME/.config/swaync/images/ja.png" SCRIPT_NAME="$(basename "$0")" +LISTENER_PIDFILE="$HOME/.cache/kb_layout_per_window.listener.pid" # Ensure map file exists touch "$MAP_FILE" @@ -99,7 +100,7 @@ subscribe() { local SOCKET2="$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock" [[ -S "$SOCKET2" ]] || { echo "Error: Hyprland socket not found." >&2 - exit 1 + return 1 } socat -u UNIX-CONNECT:"$SOCKET2" - | while read -r line; do @@ -108,9 +109,20 @@ subscribe() { } # Ensure only one listener -if ! pgrep -f "$SCRIPT_NAME.*--listener" >/dev/null; then - subscribe --listener & -fi +start_listener_once() { + if [[ -f "$LISTENER_PIDFILE" ]]; then + local existing_pid + existing_pid=$(cat "$LISTENER_PIDFILE" 2>/dev/null || true) + if [[ -n "$existing_pid" ]] && kill -0 "$existing_pid" 2>/dev/null; then + return + fi + fi + + subscribe & + echo $! >"$LISTENER_PIDFILE" +} + +start_listener_once # CLI case "$1" in diff --git a/config/hypr/scripts/WaybarScripts.sh b/config/hypr/scripts/WaybarScripts.sh index d2205c42..54f7a4b4 100755 --- a/config/hypr/scripts/WaybarScripts.sh +++ b/config/hypr/scripts/WaybarScripts.sh @@ -24,6 +24,14 @@ if [[ -z "$term" ]]; then fi # Execute accordingly based on the passed argument +launch_files() { + if [[ -z "$files" ]]; then + notify-send -u low -i "$HOME/.config/swaync/images/error.png" "Waybar: files" "Set \$files in 01-UserDefaults.conf or install a default file manager." + return 1 + fi + eval "$files &" +} + if [[ "$1" == "--btop" ]]; then $term --title btop sh -c 'btop' elif [[ "$1" == "--nvtop" ]]; then @@ -33,7 +41,7 @@ elif [[ "$1" == "--nmtui" ]]; then elif [[ "$1" == "--term" ]]; then $term & elif [[ "$1" == "--files" ]]; then - $files & + launch_files else echo "Usage: $0 [--btop | --nvtop | --nmtui | --term]" echo "--btop : Open btop in a new term" diff --git a/config/hypr/scripts/sddm_wallpaper.sh b/config/hypr/scripts/sddm_wallpaper.sh index 5ebab44c..b83f800a 100755 --- a/config/hypr/scripts/sddm_wallpaper.sh +++ b/config/hypr/scripts/sddm_wallpaper.sh @@ -21,6 +21,10 @@ sddm_simple="$sddm_themes_dir/simple_sddm_2" # rofi-wallust-sddm colors path rofi_wallust="$HOME/.config/rofi/wallust/colors-rofi.rasi" sddm_theme_conf="$sddm_simple/theme.conf" +if [[ ! -f "$rofi_wallust" ]]; then + notify-send -i "$iDIR/error.png" "SDDM" "Wallust colors file not found ($rofi_wallust). Aborting." + exit 1 +fi # Directory for swaync iDIR="$HOME/.config/swaync/images" @@ -36,13 +40,32 @@ fi # Extract colors from rofi wallust config -color0=$(grep -oP 'color1:\s*\K#[A-Fa-f0-9]+' "$rofi_wallust") -color1=$(grep -oP 'color0:\s*\K#[A-Fa-f0-9]+' "$rofi_wallust") -color7=$(grep -oP 'color14:\s*\K#[A-Fa-f0-9]+' "$rofi_wallust") -color10=$(grep -oP 'color10:\s*\K#[A-Fa-f0-9]+' "$rofi_wallust") -color12=$(grep -oP 'color12:\s*\K#[A-Fa-f0-9]+' "$rofi_wallust") -color13=$(grep -oP 'color13:\s*\K#[A-Fa-f0-9]+' "$rofi_wallust") -foreground=$(grep -oP 'foreground:\s*\K#[A-Fa-f0-9]+' "$rofi_wallust") +extract_color() { + local key="$1" + local value + value=$(grep -oP "$key:\s*\K#[A-Fa-f0-9]+" "$rofi_wallust" | head -n1) + echo "$value" +} + +color0=$(extract_color "color1") +color1=$(extract_color "color0") +color7=$(extract_color "color14") +color10=$(extract_color "color10") +color12=$(extract_color "color12") +color13=$(extract_color "color13") +foreground=$(extract_color "foreground") + +missing_colors=() +for var in color0 color1 color7 color10 color12 color13 foreground; do + if [[ -z "${!var}" ]]; then + missing_colors+=("$var") + fi +done + +if [[ ${#missing_colors[@]} -gt 0 ]]; then + notify-send -i "$iDIR/error.png" "SDDM" "Missing color(s): ${missing_colors[*]}. Run Wallust first." + exit 1 +fi #background-color=$(grep -oP 'background:\s*\K#[A-Fa-f0-9]+' "$rofi_wallust") # wallpaper to use -- cgit v1.2.3 From c65f9fe0412dafdadee17ee3dc7c42285dcc3753 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Thu, 8 Jan 2026 21:31:11 -0500 Subject: Fixing more scripts for Hyprland-Dots MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - `WallustSwww.sh` now reads the focused monitor’s cache file (or parses swww query per-monitor) to pick the correct wallpaper path - Eliminating the previous β€œlast line wins” bug on multi-monitor setups. - `PortalHyprland.sh` suppresses harmless killall errors and launches only the first available portal binary in each category (hyprland + general) - Avoiding duplicate processes when both `/usr/lib` and `/usr/libexec` variants exist. - `KillActiveProcess.sh` checks that Hyprland returned a numeric PID before calling kill - Notifies the user when no active window is available instead of throwing kill usage errors. On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: CHANGELOG.md modified: config/hypr/scripts/KillActiveProcess.sh modified: config/hypr/scripts/PortalHyprland.sh modified: config/hypr/scripts/WallustSwww.sh --- CHANGELOG.md | 6 +++++ config/hypr/scripts/KillActiveProcess.sh | 7 +++++- config/hypr/scripts/PortalHyprland.sh | 40 +++++++++++++++++++++++++------- config/hypr/scripts/WallustSwww.sh | 29 ++++++++++++++++++++--- 4 files changed, 70 insertions(+), 12 deletions(-) (limited to 'config/hypr') diff --git a/CHANGELOG.md b/CHANGELOG.md index 5089b350..319d1fd7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,12 @@ - `Tak0-Per-Window-Switch.sh` now records the listener PID in `~/.cache/kb_layout_per_window.listener.pid` and reuses it if still running, preventing multiple background listeners, and reports missing Hyprland sockets without exiting the main script. - `WaybarScripts.sh` adds a `launch_files()` helper that checks `$files` before execution; if unset, it shows a notification instead of running an empty command. - `sddm_wallpaper.sh` validates `~/.config/rofi/wallust/colors-rofi.rasi` before use, extracts colors via a helper, and aborts with a notification if any required colors are missing. + - `WallustSwww.sh` now reads the focused monitor’s cache file (or parses swww query per-monitor) to pick the correct wallpaper path + - Eliminating the previous β€œlast line wins” bug on multi-monitor setups. + - `PortalHyprland.sh` suppresses harmless killall errors and launches only the first available portal binary in each category (hyprland + general) + - Avoiding duplicate processes when both `/usr/lib` and `/usr/libexec` variants exist. + - `KillActiveProcess.sh` checks that Hyprland returned a numeric PID before calling kill + - Notifies the user when no active window is available instead of throwing kill usage errors. - 2026-01-06 - Added Global Theme Changer. diff --git a/config/hypr/scripts/KillActiveProcess.sh b/config/hypr/scripts/KillActiveProcess.sh index 2bc108f2..d9d26bb3 100755 --- a/config/hypr/scripts/KillActiveProcess.sh +++ b/config/hypr/scripts/KillActiveProcess.sh @@ -7,5 +7,10 @@ # Get id of an active window active_pid=$(hyprctl activewindow | grep -o 'pid: [0-9]*' | cut -d' ' -f2) +if [[ -z "$active_pid" || ! "$active_pid" =~ ^[0-9]+$ ]]; then + notify-send -u low -i "$HOME/.config/swaync/images/error.png" "Kill Active Window" "No active window PID found." + exit 1 +fi + # Close active window -kill $active_pid \ No newline at end of file +kill "$active_pid" diff --git a/config/hypr/scripts/PortalHyprland.sh b/config/hypr/scripts/PortalHyprland.sh index 21cb7db4..653e9b58 100755 --- a/config/hypr/scripts/PortalHyprland.sh +++ b/config/hypr/scripts/PortalHyprland.sh @@ -2,15 +2,39 @@ # /* ---- πŸ’« https://github.com/JaKooLit πŸ’« ---- */ ## # For manually starting xdg-desktop-portal-hyprland +set -euo pipefail + +kill_quietly() { + killall -q "$1" 2>/dev/null || true +} + +start_portal_binary() { + local description="$1" + shift + for candidate in "$@"; do + if [[ -x "$candidate" ]]; then + "$candidate" & + return 0 + fi + done + echo "Warning: no $description binary found (checked: $*)" >&2 + return 1 +} + sleep 1 -killall xdg-desktop-portal-hyprland -killall xdg-desktop-portal-wlr -killall xdg-desktop-portal-gnome -killall xdg-desktop-portal +kill_quietly xdg-desktop-portal-hyprland +kill_quietly xdg-desktop-portal-wlr +kill_quietly xdg-desktop-portal-gnome +kill_quietly xdg-desktop-portal sleep 1 -/usr/lib/xdg-desktop-portal-hyprland & -/usr/libexec/xdg-desktop-portal-hyprland & + +start_portal_binary "xdg-desktop-portal-hyprland" \ + /usr/lib/xdg-desktop-portal-hyprland \ + /usr/libexec/xdg-desktop-portal-hyprland + sleep 2 -/usr/lib/xdg-desktop-portal & -/usr/libexec/xdg-desktop-portal & + +start_portal_binary "xdg-desktop-portal" \ + /usr/lib/xdg-desktop-portal \ + /usr/libexec/xdg-desktop-portal diff --git a/config/hypr/scripts/WallustSwww.sh b/config/hypr/scripts/WallustSwww.sh index d1e53400..50c85630 100755 --- a/config/hypr/scripts/WallustSwww.sh +++ b/config/hypr/scripts/WallustSwww.sh @@ -10,6 +10,27 @@ passed_path="${1:-}" cache_dir="$HOME/.cache/swww/" rofi_link="$HOME/.config/rofi/.current_wallpaper" wallpaper_current="$HOME/.config/hypr/wallpaper_effects/.wallpaper_current" +read_cached_wallpaper() { + local cache_file="$1" + if [[ -f "$cache_file" ]]; then + awk 'NF && $0 !~ /^filter/ {print; exit}' "$cache_file" + fi +} + +read_wallpaper_from_query() { + local monitor="$1" + swww query | awk -v mon="$monitor" ' + /^Monitor/ { + cur=$2 + gsub(":", "", cur) + } + /image:/ && cur==mon { + sub(/^.*image: /,"") + print + exit + } + ' +} # Helper: get focused monitor name (prefer JSON) get_focused_monitor() { @@ -39,9 +60,11 @@ else if [[ -f "$cache_file" ]]; then # The first non-filter line is the original wallpaper path - # wallpaper_path="$(grep -v 'Lanczos3' "$cache_file" | head -n 1)" - # wallpaper_path=$(swww query | grep $current_monitor | awk '{print $9}') - wallpaper_path=$(swww query | sed 's/.*image: //') + wallpaper_path="$(read_cached_wallpaper "$cache_file")" + fi + + if [[ -z "$wallpaper_path" ]]; then + wallpaper_path="$(read_wallpaper_from_query "$current_monitor")" fi fi -- cgit v1.2.3 From 7375b7c8471aec8b33b902d260aceb75385a25bd Mon Sep 17 00:00:00 2001 From: Don Williams Date: Thu, 8 Jan 2026 22:05:17 -0500 Subject: Tweaking wallust timing On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/hypr/scripts/WallustSwww.sh --- config/hypr/scripts/WallustSwww.sh | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'config/hypr') diff --git a/config/hypr/scripts/WallustSwww.sh b/config/hypr/scripts/WallustSwww.sh index 50c85630..63911036 100755 --- a/config/hypr/scripts/WallustSwww.sh +++ b/config/hypr/scripts/WallustSwww.sh @@ -80,10 +80,39 @@ cp -f "$wallpaper_path" "$wallpaper_current" || true # Ensure Ghostty directory exists so Wallust can write target even if Ghostty isn't installed mkdir -p "$HOME/.config/ghostty" || true +wait_for_templates() { + local start_ts="$1" + shift + local files=("$@") + for _ in {1..50}; do + local ready=true + for file in "${files[@]}"; do + if [[ ! -s "$file" ]]; then + ready=false + break + fi + local mtime + mtime=$(stat -c %Y "$file" 2>/dev/null || echo 0) + if (( mtime < start_ts )); then + ready=false + break + fi + done + $ready && return 0 + sleep 0.1 + done + return 1 +} # Run wallust (silent) to regenerate templates defined in ~/.config/wallust/wallust.toml # -s is used in this repo to keep things quiet and avoid extra prompts +start_ts=$(date +%s) wallust run -s "$wallpaper_path" || true +wallust_targets=( + "$HOME/.config/waybar/wallust/colors-waybar.css" + "$HOME/.config/rofi/wallust/colors-rofi.rasi" +) +wait_for_templates "$start_ts" "${wallust_targets[@]}" || true # Normalize Ghostty palette syntax in case ':' was used by older files if [ -f "$HOME/.config/ghostty/wallust.conf" ]; then @@ -98,3 +127,10 @@ done if pidof ghostty >/dev/null; then for pid in $(pidof ghostty); do kill -SIGUSR2 "$pid" 2>/dev/null || true; done fi + +# Prompt Waybar to reload colors +if command -v waybar-msg >/dev/null 2>&1; then + waybar-msg cmd reload >/dev/null 2>&1 || true +elif pidof waybar >/dev/null; then + killall -SIGUSR2 waybar 2>/dev/null || true +fi -- cgit v1.2.3 From c62fc820dad1321197cc3f9a4dc71361b33357ee Mon Sep 17 00:00:00 2001 From: Don Williams Date: Thu, 8 Jan 2026 22:13:04 -0500 Subject: I updated main branch with 0.53 rules as default now development is same On branch development Your branch is up to date with 'origin/development'. Changes to be committed: new file: config/hypr/configs/WindowRules-pre-53.conf modified: config/hypr/configs/WindowRules.conf --- config/hypr/configs/WindowRules-pre-53.conf | 229 +++++++++++++++++++ config/hypr/configs/WindowRules.conf | 339 +++++++++++++--------------- 2 files changed, 392 insertions(+), 176 deletions(-) create mode 100644 config/hypr/configs/WindowRules-pre-53.conf (limited to 'config/hypr') diff --git a/config/hypr/configs/WindowRules-pre-53.conf b/config/hypr/configs/WindowRules-pre-53.conf new file mode 100644 index 00000000..8a5f99c7 --- /dev/null +++ b/config/hypr/configs/WindowRules-pre-53.conf @@ -0,0 +1,229 @@ +# /* ---- πŸ’« https://github.com/JaKooLit πŸ’« ---- */ # +# Vendor defaults for window rules and layerrules +# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more + +# NOTES: This is only for Hyprland > 0.48 + +# windowrule - tags - add apps under appropriate tag to use the same settings +# browser tags +windowrule = tag +browser, class:^([Ff]irefox|org.mozilla.firefox|[Ff]irefox-esr|[Ff]irefox-bin)$ +windowrule = tag +browser, class:^([Gg]oogle-chrome(-beta|-dev|-unstable)?)$ +windowrule = tag +browser, class:^(chrome-.+-Default)$ # Chrome PWAs +windowrule = tag +browser, class:^([Cc]hromium)$ +windowrule = tag +browser, class:^([Mm]icrosoft-edge(-stable|-beta|-dev|-unstable))$ +windowrule = tag +browser, class:^(Brave-browser(-beta|-dev|-unstable)?)$ +windowrule = tag +browser, class:^([Tt]horium-browser|[Cc]achy-browser)$ +windowrule = tag +browser, class:^(zen-alpha|zen)$ + +# notif tags +windowrule = tag +notif, class:^(swaync-control-center|swaync-notification-window|swaync-client|class)$ + +# KooL settings tag +windowrule = tag +KooL_Cheat, title:^(KooL Quick Cheat Sheet)$ +windowrule = tag +KooL_Settings, title:^(KooL Hyprland Settings)$ +windowrule = tag +KooL-Settings, class:^(nwg-displays|nwg-look)$ + +# terminal tags +windowrule = tag +terminal, class:^(Alacritty|kitty|kitty-dropterm)$ + +# email tags +windowrule = tag +email, class:^([Tt]hunderbird|org.gnome.Evolution)$ +windowrule = tag +email, class:^(eu.betterbird.Betterbird)$ + +# project tags +windowrule = tag +projects, class:^(codium|codium-url-handler|VSCodium)$ +windowrule = tag +projects, class:^(VSCode|code|code-url-handler)$ +windowrule = tag +projects, class:^(jetbrains-.+)$ # JetBrains IDEs + +# screenshare tags +windowrule = tag +screenshare, class:^(com.obsproject.Studio)$ + +# IM tags +windowrule = tag +im, class:^([Dd]iscord|[Ww]ebCord|[Vv]esktop)$ +windowrule = tag +im, class:^([Ff]erdium)$ +windowrule = tag +im, class:^([Ww]hatsapp-for-linux)$ +windowrule = tag +im, class:^(ZapZap|com.rtosta.zapzap)$ +windowrule = tag +im, class:^(org.telegram.desktop|io.github.tdesktop_x64.TDesktop)$ +windowrule = tag +im, class:^(teams-for-linux)$ +windowrule = tag +im, class:^(im.riot.Riot|Element)$ # Element Matrix client + +# game tags +windowrule = tag +games, class:^(gamescope)$ +windowrule = tag +games, class:^(steam_app_\d+)$ + +# gamestore tags +windowrule = tag +gamestore, class:^([Ss]team)$ +windowrule = tag +gamestore, title:^([Ll]utris)$ +windowrule = tag +gamestore, class:^(com.heroicgameslauncher.hgl)$ + +# file-manager tags +windowrule = tag +file-manager, class:^([Tt]hunar|org.gnome.Nautilus|[Pp]cmanfm-qt)$ +windowrule = tag +file-manager, class:^(app.drey.Warp)$ + +# wallpaper tags +windowrule = tag +wallpaper, class:^([Ww]aytrogen)$ + +# multimedia tags +windowrule = tag +multimedia, class:^([Aa]udacious)$ + +# multimedia-video tags +windowrule = tag +multimedia_video, class:^([Mm]pv|vlc)$ + +# settings tags +windowrule = tag +settings, title:^(ROG Control)$ +windowrule = tag +settings, class:^(wihotspot(-gui)?)$ # wifi hotspot +windowrule = tag +settings, class:^([Bb]aobab|org.gnome.[Bb]aobab)$ # Disk usage analyzer +windowrule = tag +settings, class:^(gnome-disks|wihotspot(-gui)?)$ +windowrule = tag +settings, title:(Kvantum Manager) +windowrule = tag +settings, class:^(file-roller|org.gnome.FileRoller)$ # archive manager +windowrule = tag +settings, class:^(nm-applet|nm-connection-editor|blueman-manager)$ +windowrule = tag +settings, class:^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$ +windowrule = tag +settings, class:^(qt5ct|qt6ct|[Yy]ad)$ +windowrule = tag +settings, class:(xdg-desktop-portal-gtk) +windowrule = tag +settings, class:^(org.kde.polkit-kde-authentication-agent-1)$ +windowrule = tag +settings, class:^([Rr]ofi)$ + +# viewer tags +windowrule = tag +viewer, class:^(gnome-system-monitor|org.gnome.SystemMonitor|io.missioncenter.MissionCenter)$ # system monitor +windowrule = tag +viewer, class:^(evince)$ # document viewer +windowrule = tag +viewer, class:^(eog|org.gnome.Loupe)$ # image viewer + +# Some special override rules +windowrule = noblur, tag:multimedia_video* +windowrule = opacity 1.0, tag:multimedia_video* + +# POSITION +# windowrule = center,floating:1 # warning, it cause even the menu to float and center. +windowrule = center, tag:KooL_Cheat* +windowrule = center, class:([Tt]hunar), title:negative:(.*[Tt]hunar.*) +windowrule = center, title:^(ROG Control)$ +windowrule = center, tag:KooL-Settings* +windowrule = center, title:^(Keybindings)$ +windowrule = center, class:^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$ +windowrule = center, class:^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$ +windowrule = center, class:^([Ff]erdium)$ +windowrule = move 72% 7%,title:^(Picture-in-Picture)$ +#windowrule = move 72% 7%,title:^(Firefox)$ + +# windowrule to avoid idle for fullscreen apps +#windowrule = idleinhibit fullscreen, class:^(*)$ +#windowrule = idleinhibit fullscreen, title:^(*)$ +windowrule = idleinhibit fullscreen, fullscreen:1 + +# windowrule move to workspace +#windowrule = workspace 1, tag:email* +#windowrule = workspace 2, tag:browser* +#windowrule = workspace 3, class:^([Tt]hunar)$ +#windowrule = workspace 3, tag:projects* +#windowrule = workspace 5, tag:gamestore* +#windowrule = workspace 7, tag:im* +#windowrule = workspace 8, tag:games* + +# windowrule move to workspace (silent) +#windowrule = workspace 4 silent, tag:screenshare* +#windowrule = workspace 6 silent, class:^(virt-manager)$ +#windowrule = workspace 6 silent, class:^(.virt-manager-wrapped)$ +#windowrule = workspace 9 silent, tag:multimedia* +# +# FLOAT +windowrule = float, tag:KooL_Cheat* +windowrule = float, tag:wallpaper* +windowrule = float, tag:settings* +windowrule = float, tag:viewer* +windowrule = float, tag:KooL-Settings* +windowrule = float, class:([Zz]oom|onedriver|onedriver-launcher)$ +windowrule = float, class:(org.gnome.Calculator), title:(Calculator) +windowrule = float, class:^(mpv|com.github.rafostar.Clapper)$ +windowrule = float, class:^([Qq]alculate-gtk)$ +#windowrule = float, class:^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$ +windowrule = float, class:^([Ff]erdium)$ +windowrule = float, title:^(Picture-in-Picture)$ +#windowrule = float, title:^(Firefox)$ + +# windowrule - ######### float popups and dialogue ####### +windowrule = float, title:^(Authentication Required)$ +windowrule = center, title:^(Authentication Required)$ +windowrule = float, class:(codium|codium-url-handler|VSCodium), title:negative:(.*codium.*|.*VSCodium.*) +windowrule = float, class:^(com.heroicgameslauncher.hgl)$, title:negative:(Heroic Games Launcher) +windowrule = float, class:^([Ss]team)$, title:negative:^([Ss]team)$ +windowrule = float, class:([Tt]hunar), title:negative:(.*[Tt]hunar.*) + +windowrule = float, title:^(Add Folder to Workspace)$ +windowrule = size 70% 60%, title:^(Add Folder to Workspace)$ +windowrule = center, title:^(Add Folder to Workspace)$ + +windowrule = float, title:^(Save As)$ +windowrule = size 70% 60%, title:^(Save As)$ +windowrule = center, title:^(Save As)$ + +windowrule = float, initialTitle:(Open Files) +windowrule = size 70% 60%, initialTitle:(Open Files) + +windowrule = float, title:^(SDDM Background)$ #KooL's Dots YAD for setting SDDM background +windowrule = center, title:^(SDDM Background)$ #KooL's Dots YAD for setting SDDM background +windowrule = size 16% 12%, title:^(SDDM Background)$ #KooL's Dots YAD for setting SDDM background +# END of float popups and dialogue ####### + +# OPACITY +windowrule = opacity 0.99 0.8, tag:browser* +windowrule = opacity 0.9 0.8, tag:projects* +windowrule = opacity 0.94 0.86, tag:im* +windowrule = opacity 0.94 0.86, tag:multimedia* +windowrule = opacity 0.9 0.8, tag:file-manager* +windowrule = opacity 0.9 0.7, tag:terminal* +windowrule = opacity 0.8 0.7, tag:settings* +windowrule = opacity 0.82 0.75, tag:viewer* +windowrule = opacity 0.9 0.7, tag:wallpaper* +windowrule = opacity 0.8 0.7, class:^(gedit|org.gnome.TextEditor|mousepad)$ +windowrule = opacity 0.9 0.8, class:^(deluge)$ +windowrule = opacity 0.9 0.8, class:^(seahorse)$ # gnome-keyring gui +windowrule = opacity 0.95 0.75, title:^(Picture-in-Picture)$ + +# SIZE +windowrule = size 65% 90%, tag:KooL_Cheat* +windowrule = size 70% 70%, tag:wallpaper* +windowrule = size 70% 70%, tag:settings* +windowrule = size 60% 70%, class:^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$ +windowrule = size 60% 70%, class:^([Ff]erdium)$ + +#windowrule = size 25% 25%, title:^(Picture-in-Picture)$ +#windowrule = size 25% 25%, title:^(Firefox)$ + +# PINNING +windowrule = pin, title:^(Picture-in-Picture)$ +#windowrule = pin,title:^(Firefox)$ + +# windowrule - extras +windowrule = keepaspectratio, title:^(Picture-in-Picture)$ + +# BLUR & FULLSCREEN +windowrule = noblur, tag:games* +windowrule = fullscreen, tag:games* + + +#This not gonna take the focus to the window that appears when hovering over some of the parts of the IntelliJ Products +windowrule = noinitialfocus, class:^(jetbrains-*) +windowrule = noinitialfocus, title:^(wind.*)$ + +#windowrule = bordercolor rgb(EE4B55) rgb(880808), fullscreen:1 +#windowrule = bordercolor rgb(282737) rgb(1E1D2D), floating:1 +#windowrule = opacity 0.8 0.8, pinned:1 + +# LAYER RULES +layerrule = blur, rofi +layerrule = ignorezero, rofi +layerrule = blur, notifications +layerrule = ignorezero, notifications +layerrule = blur, quickshell:overview +layerrule = ignorezero, quickshell:overview +layerrule = ignorealpha 0.5, quickshell:overview + +#layerrule = ignorealpha 0.5, tag:notif* + +#layerrule = ignorezero, class:^([Rr]ofi)$ +#layerrule = blur, class:^([Rr]ofi)$ +#layerrule = unset,class:^([Rr]ofi)$ +#layerrule = ignorezero, + +#layerrule = ignorezero, overview +#layerrule = blur, overview diff --git a/config/hypr/configs/WindowRules.conf b/config/hypr/configs/WindowRules.conf index 8a5f99c7..00c98644 100644 --- a/config/hypr/configs/WindowRules.conf +++ b/config/hypr/configs/WindowRules.conf @@ -2,228 +2,215 @@ # Vendor defaults for window rules and layerrules # See https://wiki.hyprland.org/Configuring/Window-Rules/ for more -# NOTES: This is only for Hyprland > 0.48 +# NOTES: This is only for Hyprland >= 0.53 -# windowrule - tags - add apps under appropriate tag to use the same settings +# Some samples on hwo to start apps on specific workspaces +# windowrule = match:tag email*, workspace 1 +# windowrule = match:tag browser*, workspace 2 +# windowrule = match:tag projects*, workspace 3 +# windowrule = match:tag screenshare*, workspace 4 silent +# windowrule = match:tag gamestore*, workspace 5 +# windowrule = match:class ^(virt-manager)$, workspace 6 silent +# windowrule = match:class ^(.virt-manager-wrapped)$, workspace 6 silent +# windowrule = match:tag im*, workspace 7 +# windowrule = match:class obsidian, workspace 8 +# windowrule = match:tag games*, workspace 8 +# windowrule = match:tag multimedia*, workspace 9 silent + + + +# TAGS - add apps under appropriate tag to use the same settings # browser tags -windowrule = tag +browser, class:^([Ff]irefox|org.mozilla.firefox|[Ff]irefox-esr|[Ff]irefox-bin)$ -windowrule = tag +browser, class:^([Gg]oogle-chrome(-beta|-dev|-unstable)?)$ -windowrule = tag +browser, class:^(chrome-.+-Default)$ # Chrome PWAs -windowrule = tag +browser, class:^([Cc]hromium)$ -windowrule = tag +browser, class:^([Mm]icrosoft-edge(-stable|-beta|-dev|-unstable))$ -windowrule = tag +browser, class:^(Brave-browser(-beta|-dev|-unstable)?)$ -windowrule = tag +browser, class:^([Tt]horium-browser|[Cc]achy-browser)$ -windowrule = tag +browser, class:^(zen-alpha|zen)$ +windowrule = match:class ^([Ff]irefox|org.mozilla.firefox|[Ff]irefox-esr|[Ff]irefox-bin)$, tag +browser +windowrule = match:class ^([Gg]oogle-chrome(-beta|-dev|-unstable)?)$, tag +browser +windowrule = match:class ^(chrome-.+-Default)$, tag +browser +windowrule = match:class ^([Cc]hromium)$, tag +browser +windowrule = match:class ^([Mm]icrosoft-edge(-stable|-beta|-dev|-unstable))$, tag +browser +windowrule = match:class ^(Brave-browser(-beta|-dev|-unstable)?)$, tag +browser +windowrule = match:class ^([Tt]horium-browser|[Cc]achy-browser)$, tag +browser +windowrule = match:class ^(zen)$, tag +browser # notif tags -windowrule = tag +notif, class:^(swaync-control-center|swaync-notification-window|swaync-client|class)$ +windowrule = match:class ^(swaync-control-center|swaync-notification-window|swaync-client|class)$, tag +notif # KooL settings tag -windowrule = tag +KooL_Cheat, title:^(KooL Quick Cheat Sheet)$ -windowrule = tag +KooL_Settings, title:^(KooL Hyprland Settings)$ -windowrule = tag +KooL-Settings, class:^(nwg-displays|nwg-look)$ +windowrule = match:title ^(KooL Quick Cheat Sheet)$, tag +KooL_Cheat +windowrule = match:title ^(KooL Hyprland Settings)$, tag +KooL_Settings +windowrule = match:class ^(nwg-displays|nwg-look)$, tag +KooL-Settings # terminal tags -windowrule = tag +terminal, class:^(Alacritty|kitty|kitty-dropterm)$ +windowrule = match:class ^(Alacritty|kitty|kitty-dropterm)$, tag +terminal # email tags -windowrule = tag +email, class:^([Tt]hunderbird|org.gnome.Evolution)$ -windowrule = tag +email, class:^(eu.betterbird.Betterbird)$ +windowrule = match:class ^([Tt]hunderbird|org.gnome.Evolution)$, tag +email +windowrule = match:class ^(eu.betterbird.Betterbird)$, tag +email # project tags -windowrule = tag +projects, class:^(codium|codium-url-handler|VSCodium)$ -windowrule = tag +projects, class:^(VSCode|code|code-url-handler)$ -windowrule = tag +projects, class:^(jetbrains-.+)$ # JetBrains IDEs +windowrule = match:class ^(codium|codium-url-handler|VSCodium)$, tag +projects +windowrule = match:class ^(VSCode|code|code-url-handler)$, tag +projects +windowrule = match:class ^(jetbrains-.+)$, tag +projects +windowrule = match:class ^(dev.zed.Zed|antigravity)$, tag +projects # screenshare tags -windowrule = tag +screenshare, class:^(com.obsproject.Studio)$ +windowrule = match:class ^(com.obsproject.Studio)$, tag +screenshare # IM tags -windowrule = tag +im, class:^([Dd]iscord|[Ww]ebCord|[Vv]esktop)$ -windowrule = tag +im, class:^([Ff]erdium)$ -windowrule = tag +im, class:^([Ww]hatsapp-for-linux)$ -windowrule = tag +im, class:^(ZapZap|com.rtosta.zapzap)$ -windowrule = tag +im, class:^(org.telegram.desktop|io.github.tdesktop_x64.TDesktop)$ -windowrule = tag +im, class:^(teams-for-linux)$ -windowrule = tag +im, class:^(im.riot.Riot|Element)$ # Element Matrix client +windowrule = match:class ^([Dd]iscord|[Ww]ebCord|[Vv]esktop)$, tag +im +windowrule = match:class ^([Ff]erdium)$, tag +im +windowrule = match:class ^([Ww]hatsapp-for-linux)$, tag +im +windowrule = match:class ^(org.telegram.desktop|io.github.tdesktop_x64.TDesktop)$, tag +im +windowrule = match:class ^(teams-for-linux)$, tag +im +windowrule = match:class ^(im.riot.Riot|Element)$, tag +im # game tags -windowrule = tag +games, class:^(gamescope)$ -windowrule = tag +games, class:^(steam_app_\d+)$ +windowrule = match:class ^(gamescope)$, tag +games +windowrule = match:class ^(steam_app_\\d+)$, tag +games # gamestore tags -windowrule = tag +gamestore, class:^([Ss]team)$ -windowrule = tag +gamestore, title:^([Ll]utris)$ -windowrule = tag +gamestore, class:^(com.heroicgameslauncher.hgl)$ +windowrule = match:class ^([Ss]team)$, tag +gamestore +windowrule = match:title ^([Ll]utris)$, tag +gamestore +windowrule = match:class ^(com.heroicgameslauncher.hgl)$, tag +gamestore # file-manager tags -windowrule = tag +file-manager, class:^([Tt]hunar|org.gnome.Nautilus|[Pp]cmanfm-qt)$ -windowrule = tag +file-manager, class:^(app.drey.Warp)$ +windowrule = match:class ^([Tt]hunar|org.gnome.Nautilus|[Pp]cmanfm-qt)$, tag +file-manager +windowrule = match:class ^(app.drey.Warp)$, tag +file-manager # wallpaper tags -windowrule = tag +wallpaper, class:^([Ww]aytrogen)$ +windowrule = match:class ^([Ww]aytrogen)$, tag +wallpaper # multimedia tags -windowrule = tag +multimedia, class:^([Aa]udacious)$ +windowrule = match:class ^([Aa]udacious)$, tag +multimedia # multimedia-video tags -windowrule = tag +multimedia_video, class:^([Mm]pv|vlc)$ +windowrule = match:class ^([Mm]pv|vlc)$, tag +multimedia_video # settings tags -windowrule = tag +settings, title:^(ROG Control)$ -windowrule = tag +settings, class:^(wihotspot(-gui)?)$ # wifi hotspot -windowrule = tag +settings, class:^([Bb]aobab|org.gnome.[Bb]aobab)$ # Disk usage analyzer -windowrule = tag +settings, class:^(gnome-disks|wihotspot(-gui)?)$ -windowrule = tag +settings, title:(Kvantum Manager) -windowrule = tag +settings, class:^(file-roller|org.gnome.FileRoller)$ # archive manager -windowrule = tag +settings, class:^(nm-applet|nm-connection-editor|blueman-manager)$ -windowrule = tag +settings, class:^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$ -windowrule = tag +settings, class:^(qt5ct|qt6ct|[Yy]ad)$ -windowrule = tag +settings, class:(xdg-desktop-portal-gtk) -windowrule = tag +settings, class:^(org.kde.polkit-kde-authentication-agent-1)$ -windowrule = tag +settings, class:^([Rr]ofi)$ +windowrule = match:title ^(ROG Control)$, tag +settings +windowrule = match:class ^(wihotspot(-gui)?)$, tag +settings +windowrule = match:class ^([Bb]aobab|org.gnome.[Bb]aobab)$, tag +settings +windowrule = match:class ^(gnome-disks|wihotspot(-gui)?)$, tag +settings +windowrule = match:title (Kvantum Manager), tag +settings +windowrule = match:class ^(file-roller|org.gnome.FileRoller)$, tag +settings +windowrule = match:class ^(nm-applet|nm-connection-editor|blueman-manager)$, tag +settings +windowrule = match:class ^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$, tag +settings +windowrule = match:class ^(qt5ct|qt6ct)$, tag +settings +windowrule = match:class (xdg-desktop-portal-gtk), tag +settings +windowrule = match:class ^(org.kde.polkit-kde-authentication-agent-1)$, tag +settings +windowrule = match:class ^([Rr]ofi)$, tag +settings # viewer tags -windowrule = tag +viewer, class:^(gnome-system-monitor|org.gnome.SystemMonitor|io.missioncenter.MissionCenter)$ # system monitor -windowrule = tag +viewer, class:^(evince)$ # document viewer -windowrule = tag +viewer, class:^(eog|org.gnome.Loupe)$ # image viewer +windowrule = match:class ^(gnome-system-monitor|org.gnome.SystemMonitor|io.missioncenter.MissionCenter)$, tag +viewer +windowrule = match:class ^(evince)$, tag +viewer +windowrule = match:class ^(eog|org.gnome.Loupe)$, tag +viewer # Some special override rules -windowrule = noblur, tag:multimedia_video* -windowrule = opacity 1.0, tag:multimedia_video* - +windowrule = match:tag multimedia_video, no_blur on +windowrule = match:tag multimedia_video, opacity 1.0 +windowrule = match:tag multimedia, no_blur on +windowrule = match:tag multimedia, opacity 1.0 + # POSITION -# windowrule = center,floating:1 # warning, it cause even the menu to float and center. -windowrule = center, tag:KooL_Cheat* -windowrule = center, class:([Tt]hunar), title:negative:(.*[Tt]hunar.*) -windowrule = center, title:^(ROG Control)$ -windowrule = center, tag:KooL-Settings* -windowrule = center, title:^(Keybindings)$ -windowrule = center, class:^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$ -windowrule = center, class:^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$ -windowrule = center, class:^([Ff]erdium)$ -windowrule = move 72% 7%,title:^(Picture-in-Picture)$ -#windowrule = move 72% 7%,title:^(Firefox)$ +windowrule = match:tag KooL_Cheat, center on +windowrule = match:title ^(ROG Control)$, center on +windowrule = match:tag KooL-Settings, center on +windowrule = match:title ^(Keybindings)$, center on +windowrule = match:class ^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$, center on +windowrule = match:class ^([Ff]erdium)$, center on # windowrule to avoid idle for fullscreen apps -#windowrule = idleinhibit fullscreen, class:^(*)$ -#windowrule = idleinhibit fullscreen, title:^(*)$ -windowrule = idleinhibit fullscreen, fullscreen:1 - -# windowrule move to workspace -#windowrule = workspace 1, tag:email* -#windowrule = workspace 2, tag:browser* -#windowrule = workspace 3, class:^([Tt]hunar)$ -#windowrule = workspace 3, tag:projects* -#windowrule = workspace 5, tag:gamestore* -#windowrule = workspace 7, tag:im* -#windowrule = workspace 8, tag:games* - -# windowrule move to workspace (silent) -#windowrule = workspace 4 silent, tag:screenshare* -#windowrule = workspace 6 silent, class:^(virt-manager)$ -#windowrule = workspace 6 silent, class:^(.virt-manager-wrapped)$ -#windowrule = workspace 9 silent, tag:multimedia* -# +windowrule = match:fullscreen true, idle_inhibit fullscreen +windowrule = idle_inhibit fullscreen, match:fullscreen 1 +windowrule = idle_inhibit fullscreen, match:class ^(*)$ +windowrule = idle_inhibit fullscreen, match:title ^(*)$ + # FLOAT -windowrule = float, tag:KooL_Cheat* -windowrule = float, tag:wallpaper* -windowrule = float, tag:settings* -windowrule = float, tag:viewer* -windowrule = float, tag:KooL-Settings* -windowrule = float, class:([Zz]oom|onedriver|onedriver-launcher)$ -windowrule = float, class:(org.gnome.Calculator), title:(Calculator) -windowrule = float, class:^(mpv|com.github.rafostar.Clapper)$ -windowrule = float, class:^([Qq]alculate-gtk)$ -#windowrule = float, class:^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$ -windowrule = float, class:^([Ff]erdium)$ -windowrule = float, title:^(Picture-in-Picture)$ -#windowrule = float, title:^(Firefox)$ - -# windowrule - ######### float popups and dialogue ####### -windowrule = float, title:^(Authentication Required)$ -windowrule = center, title:^(Authentication Required)$ -windowrule = float, class:(codium|codium-url-handler|VSCodium), title:negative:(.*codium.*|.*VSCodium.*) -windowrule = float, class:^(com.heroicgameslauncher.hgl)$, title:negative:(Heroic Games Launcher) -windowrule = float, class:^([Ss]team)$, title:negative:^([Ss]team)$ -windowrule = float, class:([Tt]hunar), title:negative:(.*[Tt]hunar.*) - -windowrule = float, title:^(Add Folder to Workspace)$ -windowrule = size 70% 60%, title:^(Add Folder to Workspace)$ -windowrule = center, title:^(Add Folder to Workspace)$ - -windowrule = float, title:^(Save As)$ -windowrule = size 70% 60%, title:^(Save As)$ -windowrule = center, title:^(Save As)$ - -windowrule = float, initialTitle:(Open Files) -windowrule = size 70% 60%, initialTitle:(Open Files) - -windowrule = float, title:^(SDDM Background)$ #KooL's Dots YAD for setting SDDM background -windowrule = center, title:^(SDDM Background)$ #KooL's Dots YAD for setting SDDM background -windowrule = size 16% 12%, title:^(SDDM Background)$ #KooL's Dots YAD for setting SDDM background -# END of float popups and dialogue ####### +windowrule = match:tag KooL_Cheat, float on +windowrule = match:tag wallpaper, float on +windowrule = match:tag settings, float on +windowrule = match:tag viewer, float on +windowrule = match:tag KooL-Settings, float on +windowrule = match:class ([Zz]oom|onedriver|onedriver-launcher), float on +windowrule = match:class (org.gnome.Calculator|qalculate-gtk), float on +windowrule = match:class ^(mpv|com.github.rafostar.Clapper)$, float on +windowrule = match:class ^([Qq]alculate-gtk)$, float on +windowrule = match:class ^([Ff]erdium)$, float on + +# popups and dialogue +windowrule = match:title ^(Authentication Required)$, float on, center on +windowrule = match:class (codium|codium-url-handler|VSCodium) match:title negative:(.*codium.*|.*VSCodium.*), float on +windowrule = match:class ^(com.heroicgameslauncher.hgl)$ match:title negative:(Heroic Games Launcher), float on +windowrule = match:class ^([Ss]team)$ match:title negative:^([Ss]team)$, float on +windowrule = match:title ^(Add Folder to Workspace)$, float on, size (monitor_w*0.7) (monitor_h*0.6), center on +windowrule = match:title ^(Save As)$, float on, size (monitor_w*0.7) (monitor_h*0.6), center on +windowrule = match:initial_title (Open Files), float on, size (monitor_w*0.7) (monitor_h*0.6) +windowrule = match:title ^(SDDM Background)$, float on, center on, size (monitor_w*0.16) (monitor_h*0.12) +windowrule = match:class ^(yad)$, float on, center on, size (monitor_w*0.2) (monitor_h*0.2) # OPACITY -windowrule = opacity 0.99 0.8, tag:browser* -windowrule = opacity 0.9 0.8, tag:projects* -windowrule = opacity 0.94 0.86, tag:im* -windowrule = opacity 0.94 0.86, tag:multimedia* -windowrule = opacity 0.9 0.8, tag:file-manager* -windowrule = opacity 0.9 0.7, tag:terminal* -windowrule = opacity 0.8 0.7, tag:settings* -windowrule = opacity 0.82 0.75, tag:viewer* -windowrule = opacity 0.9 0.7, tag:wallpaper* -windowrule = opacity 0.8 0.7, class:^(gedit|org.gnome.TextEditor|mousepad)$ -windowrule = opacity 0.9 0.8, class:^(deluge)$ -windowrule = opacity 0.9 0.8, class:^(seahorse)$ # gnome-keyring gui -windowrule = opacity 0.95 0.75, title:^(Picture-in-Picture)$ +windowrule = match:tag browser, opacity 0.99 0.8 +windowrule = match:tag projects, opacity 0.9 0.8 +windowrule = match:tag im, opacity 0.94 0.86 +windowrule = match:tag multimedia, opacity 0.94 0.86 +windowrule = match:tag file-manager, opacity 0.9 0.8 +windowrule = match:tag terminal, opacity 0.9 0.7 +windowrule = match:tag settings, opacity 0.8 0.7 +windowrule = match:tag viewer, opacity 0.82 0.75 +windowrule = match:tag wallpaper, opacity 0.9 0.7 +windowrule = match:class ^(gedit|org.gnome.TextEditor|mousepad)$, opacity 0.8 0.7 +windowrule = match:class ^(deluge)$, opacity 0.9 0.8 +windowrule = match:class ^(seahorse)$, opacity 0.9 0.8 # SIZE -windowrule = size 65% 90%, tag:KooL_Cheat* -windowrule = size 70% 70%, tag:wallpaper* -windowrule = size 70% 70%, tag:settings* -windowrule = size 60% 70%, class:^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$ -windowrule = size 60% 70%, class:^([Ff]erdium)$ +windowrule = match:tag KooL_Cheat, size (monitor_w*0.65) (monitor_h*0.9) +windowrule = match:tag wallpaper, size (monitor_w*0.7) (monitor_h*0.7) +windowrule = match:tag settings, size (monitor_w*0.7) (monitor_h*0.7) +windowrule = match:class ^([Ff]erdium)$, size (monitor_w*0.6) (monitor_h*0.7) +windowrule = match:class (org.gnome.Calculator|qalculate-gtk), center on, size (monitor_w*0.25) (monitor_h*0.3) -#windowrule = size 25% 25%, title:^(Picture-in-Picture)$ -#windowrule = size 25% 25%, title:^(Firefox)$ - -# PINNING -windowrule = pin, title:^(Picture-in-Picture)$ -#windowrule = pin,title:^(Firefox)$ - -# windowrule - extras -windowrule = keepaspectratio, title:^(Picture-in-Picture)$ # BLUR & FULLSCREEN -windowrule = noblur, tag:games* -windowrule = fullscreen, tag:games* +windowrule = match:tag games, no_blur on, fullscreen 0 +windowrule = match:tag games, fullscreen 0 +# This not gonna take the focus to the window that appears when +# hovering over some of the parts of the IntelliJ Products +windowrule = match:class ^(jetbrains-*), no_initial_focus on +windowrule = match:title ^(wind.*)$, no_initial_focus on -#This not gonna take the focus to the window that appears when hovering over some of the parts of the IntelliJ Products -windowrule = noinitialfocus, class:^(jetbrains-*) -windowrule = noinitialfocus, title:^(wind.*)$ +# LAYER RULES +layerrule = match:namespace rofi, blur on +layerrule = match:namespace notifications, blur on +layerrule = match:namespace quickshell:overview, blur on +layerrule = match:namespace quickshell:overview, ignore_alpha 0.5 + +# Named rules for special cases +windowrule { + name = Whatsapp-zapzap + match:class = ^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$ + float = on + size = (monitor_w*0.6) (monitor_h*0.7) + center = on +} +# Picture-in-Picture +windowrule { + name = Picture-in-Picture + match:title = ^(Picture-in-Picture)$ + float = on + move = 72% 7% + opacity = 0.95 0.75 + pin = on + keep_aspect_ratio = on + size = (monitor_w*0.3) (monitor_h*0.3) +} + +# Thunar copy progress dialog +windowrule { + name = Thunar-Progress-bar + match:class = ^(thunar)$ + match:title = ^(File Operation Progress)$ + float = on + center = on + size = (monitor_w*0.26) (monitor_h*0.18) +} -#windowrule = bordercolor rgb(EE4B55) rgb(880808), fullscreen:1 -#windowrule = bordercolor rgb(282737) rgb(1E1D2D), floating:1 -#windowrule = opacity 0.8 0.8, pinned:1 -# LAYER RULES -layerrule = blur, rofi -layerrule = ignorezero, rofi -layerrule = blur, notifications -layerrule = ignorezero, notifications -layerrule = blur, quickshell:overview -layerrule = ignorezero, quickshell:overview -layerrule = ignorealpha 0.5, quickshell:overview - -#layerrule = ignorealpha 0.5, tag:notif* - -#layerrule = ignorezero, class:^([Rr]ofi)$ -#layerrule = blur, class:^([Rr]ofi)$ -#layerrule = unset,class:^([Rr]ofi)$ -#layerrule = ignorezero, - -#layerrule = ignorezero, overview -#layerrule = blur, overview -- cgit v1.2.3 From e541b2b00869895734f29b5caf1c65d116ee35d0 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Fri, 9 Jan 2026 00:33:00 -0500 Subject: Moving keybinds parsing to python to speed it up On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/hypr/scripts/KeyBinds.sh new file: config/hypr/scripts/keybinds_parser.py --- config/hypr/scripts/KeyBinds.sh | 138 ++----------------- config/hypr/scripts/keybinds_parser.py | 238 +++++++++++++++++++++++++++++++++ 2 files changed, 249 insertions(+), 127 deletions(-) create mode 100755 config/hypr/scripts/keybinds_parser.py (limited to 'config/hypr') diff --git a/config/hypr/scripts/KeyBinds.sh b/config/hypr/scripts/KeyBinds.sh index 4158b762..26ae832b 100755 --- a/config/hypr/scripts/KeyBinds.sh +++ b/config/hypr/scripts/KeyBinds.sh @@ -21,135 +21,19 @@ msg='☣️ NOTE ☣️: Clicking with Mouse or Pressing ENTER will have NO func files=("$keybinds_conf" "$user_keybinds_conf") [[ -f "$laptop_conf" ]] && files+=("$laptop_conf") -# Parse binds/unbinds from files, detect overrides, and keep unique effective binds -declare -A binding_map # combo -> bind line (effective) -declare -A source_map # combo -> source file -declare -A user_bind_map # combo -> user bind line -declare -A unbound_user # combo -> 1 if explicitly unbound in user file -declare -A seen_any_bind # combo -> 1 if any bind seen (for iteration) -declare -A default_seen # combo -> 1 if default bind exists -declare -a missing_unbind_suggestions_arr - -normalize_combo() { echo "$1" | sed -E 's/[[:space:]]//g'; } - -extract_combo() { - # arg: a bind/unbind line; returns "mods,key" via echo - local s="$1" - s="$(echo "$s" | sed -E 's/[[:space:]]+#.*$//')" - if [[ "$s" =~ = ]]; then - local rhs="${s#*=}" - local mods="$(echo "$rhs" | awk -F',' '{gsub(/^[ \t]+|[ \t]+$/,"",$1); print $1}')" - local key="$(echo "$rhs" | awk -F',' '{gsub(/^[ \t]+|[ \t]+$/,"",$2); print $2}')" - echo "${mods},${key}" +# Parse binds using the python script for speed +# The last argument must be the user config for override logic to work correctly +display_keybinds=$("$HOME/.config/hypr/scripts/keybinds_parser.py" "${files[@]}") + +# Check for suggestions file created by python script +if [[ -f "/tmp/hypr_keybind_suggestions_file" ]]; then + suggestions_file=$(cat "/tmp/hypr_keybind_suggestions_file") + rm "/tmp/hypr_keybind_suggestions_file" + if [[ -n "$suggestions_file" && -f "$suggestions_file" ]]; then + count=$(wc -l < "$suggestions_file") + msg="$msg | Overrides missing unbind: $count (suggestions: $suggestions_file)" fi -} - -for file in "${files[@]}"; do - [[ ! -f "$file" ]] && continue - while IFS= read -r line; do - [[ -z "$line" || "$line" =~ ^[[:space:]]*# ]] && continue - - if [[ "$line" =~ ^[[:space:]]*bind[a-z]*[[:space:]]*= ]]; then - combo_raw="$(extract_combo "$line")" - [[ -z "$combo_raw" ]] && continue - combo="$(normalize_combo "$combo_raw")" - seen_any_bind["$combo"]=1 - - if [[ "$file" != "$user_keybinds_conf" ]]; then - default_seen["$combo"]=1 - fi - - # prefer user bind, else first seen - if [[ -z "${source_map[$combo]}" ]]; then - binding_map["$combo"]="$line" - source_map["$combo"]="$file" - fi - if [[ "$file" == "$user_keybinds_conf" ]]; then - user_bind_map["$combo"]="$line" - binding_map["$combo"]="$line" - source_map["$combo"]="$file" - fi - - elif [[ "$line" =~ ^[[:space:]]*unbind[[:space:]]*= ]]; then - combo_raw="$(extract_combo "$line")" - [[ -z "$combo_raw" ]] && continue - combo="$(normalize_combo "$combo_raw")" - if [[ "$file" == "$user_keybinds_conf" ]]; then - unbound_user["$combo"]=1 - fi - fi - done < "$file" -done - -# Build raw_keybinds for display and collect missing unbind suggestions -raw_keybinds="" -for combo in "${!seen_any_bind[@]}"; do - eff_line="${binding_map[$combo]}" - src="${source_map[$combo]}" - [[ -z "$eff_line" ]] && continue - raw_keybinds+="$eff_line"$'\n' - - # If user overrides a default but didn't unbind in user file, suggest unbind - if [[ "$src" == "$user_keybinds_conf" && -n "${default_seen[$combo]}" && -z "${unbound_user[$combo]}" ]]; then - suggest="$(echo "$eff_line" | sed -E 's/^[[:space:]]*bind[a-z]*/unbind/')" - missing_unbind_suggestions_arr+=("$suggest") - fi -done - -# If there are missing unbinds, write suggestions to a temp file and note in message -if (( ${#missing_unbind_suggestions_arr[@]} > 0 )); then - suggestions_file="$(mktemp -t hypr-unbind-suggestions.XXXX.conf)" - printf '%s\n' "${missing_unbind_suggestions_arr[@]}" > "$suggestions_file" - msg="$msg | Overrides missing unbind: ${#missing_unbind_suggestions_arr[@]} (suggestions: $suggestions_file)" fi -# check for any keybinds to display -if [[ -z "$raw_keybinds" ]]; then - echo "no keybinds found." - exit 1 -fi - -# transform into a readable list: MODS+KEY β€” DESCRIPTION (for bindd) or DISPATCHER [PARAMS] (for bind) -display_keybinds=$(echo "$raw_keybinds" | awk -F'=' ' - function trim(s){ gsub(/^[ \t]+|[ \t]+$/,"",s); return s } - /^[[:space:]]*bind/ { - binder=$1; gsub(/[ \t]/, "", binder); - hasdesc = (index(binder, "d")>0); - - rhs=$2; rhs=trim(rhs); - n=split(rhs, a, /[ \t]*,[ \t]*/); - - mods=trim(a[1]); key=(n>=2?trim(a[2]):""); - desc=""; dispatcher=""; params=""; - - if (hasdesc) { - desc=(n>=3?trim(a[3]):""); - dispatcher=(n>=4?trim(a[4]):""); - start=5; - } else { - dispatcher=(n>=3?trim(a[3]):""); - start=4; - } - - for(i=start;i<=n;i++){ if(length(a[i])){ p=trim(a[i]); if(p!="") params = (params?params", ":"") p } } - - gsub(/\$mainMod/,"SUPER",mods); - gsub(/[ \t]+/,"+",mods); - - combo = (mods && key) ? mods "+" key : (key?key:mods); - - if (hasdesc && desc != "") { - print combo, " β€” ", desc; - } else { - if (dispatcher != "" && params != "") - print combo, " β€” ", dispatcher, " ", params; - else if (dispatcher != "") - print combo, " β€” ", dispatcher; - else - print combo; - } - } -') - # use rofi to display the keybinds printf '%s\n' "$display_keybinds" | rofi -dmenu -i -config "$rofi_theme" -mesg "$msg" diff --git a/config/hypr/scripts/keybinds_parser.py b/config/hypr/scripts/keybinds_parser.py new file mode 100755 index 00000000..cae57488 --- /dev/null +++ b/config/hypr/scripts/keybinds_parser.py @@ -0,0 +1,238 @@ +#!/usr/bin/env python3 +import sys +import re +import os + +def normalize_combo(combo): + return combo.replace(" ", "").replace("\t", "") + +def extract_combo(line): + # Remove comments and whitespace + line = re.sub(r'\s*#.*$', '', line).strip() + + if '=' not in line: + return None + + try: + rhs = line.split('=', 1)[1] + parts = [p.strip() for p in rhs.split(',')] + if len(parts) < 2: + return None + + mods = parts[0] + key = parts[1] + return f"{mods},{key}" + except Exception: + return None + +def parse_files(files): + # Data structures to match original logic + binding_map = {} # combo -> effective line + source_map = {} # combo -> source file + user_bind_map = {} # combo -> user bind line + unbound_user = {} # combo -> True if explicitly unbound in user file + seen_any_bind = {} # combo -> True if seen + default_seen = {} # combo -> True if default bind exists + + # We assume the last file in the list is the user config (UserKeybinds.conf) + # This matches the bash script logic where user_keybinds_conf is passed last + if not files: + return [], [] + + user_conf_path = files[-1] if len(files) > 1 else None + + for file_path in files: + if not os.path.exists(file_path): + continue + + try: + with open(file_path, 'r', encoding='utf-8', errors='ignore') as f: + for line in f: + line = line.rstrip('\n') + if not line or line.strip().startswith('#'): + continue + + is_bind = re.match(r'^\s*bind[a-z]*\s*=', line) + is_unbind = re.match(r'^\s*unbind\s*=', line) + + if is_bind: + combo_raw = extract_combo(line) + if not combo_raw: + continue + combo = normalize_combo(combo_raw) + seen_any_bind[combo] = True + + is_user_file = (file_path == user_conf_path) + + if not is_user_file: + default_seen[combo] = True + + # prefer user bind, else first seen + if combo not in source_map: + binding_map[combo] = line + source_map[combo] = file_path + + if is_user_file: + user_bind_map[combo] = line + binding_map[combo] = line + source_map[combo] = file_path + + elif is_unbind: + combo_raw = extract_combo(line) + if not combo_raw: + continue + combo = normalize_combo(combo_raw) + + if file_path == user_conf_path: + unbound_user[combo] = True + + except Exception as e: + # Silently ignore read errors to mimic bash behavior or log to stderr + sys.stderr.write(f"Error reading {file_path}: {e}\n") + continue + + # Build results + raw_keybinds = [] + missing_unbind_suggestions = [] + + for combo in seen_any_bind: + eff_line = binding_map.get(combo) + src = source_map.get(combo) + + if not eff_line: + continue + + raw_keybinds.append(eff_line) + + # Check for missing unbind suggestions + # If user overrides a default but didn't unbind in user file + if (src == user_conf_path and + combo in default_seen and + combo not in unbound_user): + + # Create suggestion: replace 'bind' with 'unbind' + suggest = re.sub(r'^\s*bind[a-z]*', 'unbind', eff_line) + missing_unbind_suggestions.append(suggest) + + return raw_keybinds, missing_unbind_suggestions + +def format_for_rofi(raw_binds): + formatted_lines = [] + + for line in raw_binds: + # line is like "bind = MODS, KEY, DISPATCHER, PARAMS" or "bindd = ..." + # Parsing logic from awk script: + + # 1. Cleaner binder + match = re.match(r'^\s*(bind[a-z]*)\s*=(.*)', line) + if not match: + continue + + binder = match.group(1).replace(" ", "").replace("\t", "") + rhs = match.group(2).strip() + + # "bind" ends in d, but doesn't have a description. "bindd" does. + # Original script logic `index(binder, "d")>0` was likely buggy for "bind". + # We'll assume strict check for bindd or similar if needed, + # but avoiding "bind" having a description is crucial for correct output. + has_desc = 'd' in binder and binder != 'bind' + + # Split by comma regex (handling spaces) + parts = [p.strip() for p in rhs.split(',')] + + if len(parts) < 2: + continue + + mods = parts[0] + key = parts[1] + + desc = "" + dispatcher = "" + params = "" + + start_idx = 0 + + if has_desc: + desc = parts[2] if len(parts) >= 3 else "" + dispatcher = parts[3] if len(parts) >= 4 else "" + start_idx = 4 + else: + dispatcher = parts[2] if len(parts) >= 3 else "" + start_idx = 3 + + # Collect params + remaining_parts = [] + if start_idx < len(parts): + for i in range(start_idx, len(parts)): + if parts[i]: + remaining_parts.append(parts[i]) + + if remaining_parts: + params = ", ".join(remaining_parts) + + # Formatting mods + mods = mods.replace("$mainMod", "SUPER") + mods = re.sub(r'[ \t]+', '+', mods) + + # Build combo string + if mods and key: + combo_str = f"{mods}+{key}" + elif key: + combo_str = key + else: + combo_str = mods + + # Final Print Format + if has_desc and desc: + formatted_lines.append(f"{combo_str} β€” {desc}") + elif dispatcher: + if params: + formatted_lines.append(f"{combo_str} β€” {dispatcher} {params}") + else: + formatted_lines.append(f"{combo_str} β€” {dispatcher}") + else: + formatted_lines.append(combo_str) + + return formatted_lines + +def main(): + if len(sys.argv) < 2: + # No files provided + sys.exit(0) + + config_files = sys.argv[1:] + + binds, suggestions = parse_files(config_files) + + if not binds: + print("no keybinds found.") + sys.exit(1) + + formatted = format_for_rofi(binds) + + for line in formatted: + print(line) + + # Handle suggestions (print to stderr or a specific file if needed, + # but the original script assigns it to a variable 'msg'. + # To pass this back to bash, we might need a separate mechanism or just print to a known file.) + if suggestions: + import tempfile + try: + with tempfile.NamedTemporaryFile(mode='w', delete=False, prefix='hypr-unbind-suggestions-', suffix='.conf') as tf: + tf.write('\n'.join(suggestions) + '\n') + # We print a special marker line to stdout that the bash script can capture? + # Or better, just print to stderr and let the user ignore it, + # OR, since the original script specifically puts it in the Rofi message, + # we can print a special string at the END of stdout or to a side channel. + + # Let's decide to print the valid keybinds to stdout (for rofi). + # And print the suggestion file path to a known location or specific fd if possible. + # Simplest: Write to a fixed temp file location that the bash script checks. + with open("/tmp/hypr_keybind_suggestions_file", "w") as sf: + sf.write(tf.name) + except Exception: + pass + +if __name__ == "__main__": + main() -- cgit v1.2.3 From 9a620a1419b7a20b57c93827d027d5c734831620 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Fri, 9 Jan 2026 00:43:29 -0500 Subject: Fixed parser not detecting unbinds / rebinds On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: CHANGELOG.md modified: config/hypr/scripts/keybinds_parser.py --- CHANGELOG.md | 5 +++++ config/hypr/scripts/keybinds_parser.py | 7 +++++++ 2 files changed, 12 insertions(+) (limited to 'config/hypr') diff --git a/CHANGELOG.md b/CHANGELOG.md index 32bb05b4..92d777ab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ ## v2.3.19 +- 2026-01-09 + - Fixed: Keybind parser latency + - Changed the parsing login to python instead of bash + - Also fixed duplicate bindings when you unmap / remap keybinds + - 2026-01-08 - Fixed: MPRIS artwork in Sway notification center only 10 pixels - Adjusted to 96 pixels diff --git a/config/hypr/scripts/keybinds_parser.py b/config/hypr/scripts/keybinds_parser.py index cae57488..d12e3854 100755 --- a/config/hypr/scripts/keybinds_parser.py +++ b/config/hypr/scripts/keybinds_parser.py @@ -86,6 +86,13 @@ def parse_files(files): if file_path == user_conf_path: unbound_user[combo] = True + # If unbind is found, we should remove the bind from our map + # so it doesn't show up in the menu. + if combo in binding_map: + del binding_map[combo] + if combo in source_map: + del source_map[combo] + except Exception as e: # Silently ignore read errors to mimic bash behavior or log to stderr sys.stderr.write(f"Error reading {file_path}: {e}\n") -- cgit v1.2.3 From cf81f96f25a12e4bae9f3c3cb7b5fedd049aa7af Mon Sep 17 00:00:00 2001 From: Don Williams Date: Sun, 11 Jan 2026 16:50:35 -0500 Subject: Fixed window frame themeing fixed issue with kitty-themes Kity-themes was broken by global theme Not both should work Border colors weren't getting set by ThemeChanger On branch development Your branch is up to date with 'origin/development'. Changes to be committed: new file: config/hypr/hyprlock-2k.conf modified: config/hypr/scripts/ThemeChanger.sh renamed: config/hypr/v2.3.18 -> config/hypr/v2.3.19 modified: config/kitty/kitty-themes/00-Default.conf --- config/hypr/hyprlock-2k.conf | 183 ++++++++++++++++++++++++++++++ config/hypr/scripts/ThemeChanger.sh | 6 + config/hypr/v2.3.18 | 5 - config/hypr/v2.3.19 | 5 + config/kitty/kitty-themes/00-Default.conf | 1 + 5 files changed, 195 insertions(+), 5 deletions(-) create mode 100644 config/hypr/hyprlock-2k.conf delete mode 100644 config/hypr/v2.3.18 create mode 100644 config/hypr/v2.3.19 (limited to 'config/hypr') diff --git a/config/hypr/hyprlock-2k.conf b/config/hypr/hyprlock-2k.conf new file mode 100644 index 00000000..f359357f --- /dev/null +++ b/config/hypr/hyprlock-2k.conf @@ -0,0 +1,183 @@ +# /* ---- πŸ’« https://github.com/JaKooLit πŸ’« ---- */ # +# Hyprlock config for => 2k monitor resolutions +# Original config submitted by https://github.com/SherLock707 + +# Sourcing colors generated by wallust +source = $HOME/.config/hypr/wallust/wallust-hyprland.conf +$Scripts = $HOME/.config/hypr/scripts + +general { + grace = 1 + fractional_scaling = 2 + immediate_render = true +} + +background { + monitor = + # NOTE: use only 1 path + #path = screenshot # screenshot of your desktop + #path = $HOME/.config/hypr/wallpaper_effects/.wallpaper_modified # by wallpaper effects + path = $HOME/.config/hypr/wallpaper_effects/.wallpaper_current # current wallpaper + + color = rgb(0,0,0) # color will be rendered initially until path is available + + # all these options are taken from hyprland, see https://wiki.hyprland.org/Configuring/Variables/#blur for explanations + blur_size = 3 + blur_passes = 2 # 0 disables blurring + noise = 0.0117 + contrast = 1.3000 # Vibrant!!! + brightness = 0.8000 + vibrancy = 0.2100 + vibrancy_darkness = 0.0 +} + + +# Date +label { + monitor = + text = cmd[update:18000000] echo " "$(date +'%A, %-d %B')" " + color = $color13 + font_size = 64 + font_family = Victor Mono Bold Italic + position = 0, -20 + halign = center + valign = center +} + +# Hour-Time (single horizontal time like 1080p variant) +label { + monitor = +# text = cmd[update:1000] echo "$(date +"%H:%M")" # 24h option + text = cmd[update:1000] echo "$(date +"%I:%M %p")" # AM/PM + #color = rgba(255, 185, 0, .8) + color = $color8 + font_size = 173 + font_family = JetBrainsMono Nerd Font ExtraBold + position = 0, -133 + halign = center + valign = top +} + +# Minute-Time (disabled; kept for reference) +# label { +# monitor = +# text = cmd[update:1000] echo "$(date +"%M")" +# #color = rgba(15, 10, 222, .8) +# color = $color12 +# font_size = 240 +# font_family = JetBrainsMono Nerd Font ExtraBold +# position = 0, -450 +# halign = center +# valign = top +# } + +# Seconds-Time (disabled; kept for reference) +# label { +# monitor = +# text = cmd[update:1000] echo "$(date +"%S")" +# # text = cmd[update:1000] echo "$(date +"%S %p")" #AM/PM +# color = $color11 +# font_size = 50 +# font_family = JetBrainsMono Nerd Font ExtraBold +# position = 0, -450 +# halign = center +# valign = top +# } + +# Put a picture of choice here. Default is the current wallpaper +#image { +# monitor = +# #path = $HOME/.config/hypr/wallpaper_effects/.wallpaper_current +# size = 160 +# rounding = -1 +# border_size = 0 +# border_color = $color11 +# rotate = 0 +# reload_time = -1 +# position = 0, 400 +# halign = center +# valign = bottom +#} + +# USER +label { + monitor = + text =  $USER + color = $color9 + font_size = 48 + font_family = Victor Mono Bold Oblique + position = 0, 300 + halign = center + valign = bottom +} + +# INPUT FIELD +input-field { + monitor = + size = 306, 93 + outline_thickness = 2 + dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8 + dots_spacing = 0.2 # Scale of dots' absolute size, 0.0 - 1.0 + dots_center = true + outer_color = $color8 + inner_color = rgba(255, 255, 255, 0.1) + capslock_color = rgb(255,255,255) + font_color = $color13 + fade_on_empty = false + font_family = Victor Mono Bold Oblique + placeholder_text = πŸ”’ Type Password + hide_input = false + position = 0, 100 + halign = center + valign = bottom +} + +# Keyboard LAYOUT +label { + monitor = + text = $LAYOUT + color = $color8 + font_size = 19 + font_family = Victor Mono Bold Oblique + position = 0, 53 + halign = center + valign = bottom +} + +# uptime +label { + monitor = + text = cmd[update:60000] echo " "$(uptime -p || $Scripts/UptimeNixOS.sh)" " + color = $color8 + font_size = 32 + font_family = Victor Mono Bold Oblique + position = 0, 0 + halign = right + valign = bottom +} + +# battery information +label { + monitor = + text = cmd[update:1000] echo " "$($Scripts/Battery.sh)" " + color = $color8 + font_size = 21 + font_family = Victor Mono Bold Oblique + position = 0, 40 + halign = right + valign = bottom +} + +# weather edit the scripts for locations +# weather scripts are located in ~/.config/hypr/UserScripts Weather.sh and/or Weather.py +# see https://github.com/JaKooLit/Hyprland-Dots/wiki/TIPS#%EF%B8%8F-weather-app-related-for-waybar-and-hyprlock +label { + monitor = + text = cmd[update:3600000] [ -f "$HOME/.cache/.weather_cache" ] && cat "$HOME/.cache/.weather_cache" + color = $color8 + font_size = 19 + font_family = Victor Mono Bold Oblique + position = 50, 0 + halign = left + valign = bottom +} diff --git a/config/hypr/scripts/ThemeChanger.sh b/config/hypr/scripts/ThemeChanger.sh index 4c814f2c..19ee3298 100755 --- a/config/hypr/scripts/ThemeChanger.sh +++ b/config/hypr/scripts/ThemeChanger.sh @@ -50,6 +50,7 @@ if wallust theme -- "${choice}"; then "$HOME/.config/waybar/wallust/colors-waybar.css" "$HOME/.config/rofi/wallust/colors-rofi.rasi" "$HOME/.config/kitty/kitty-themes/01-Wallust.conf" + "$HOME/.config/hypr/wallust/wallust-hyprland.conf" "$HOME/.config/ghostty/wallust.conf" ) @@ -111,6 +112,11 @@ if wallust theme -- "${choice}"; then fi fi + # Reload Hyprland so new border colors from wallust-hyprland.conf take effect + if command -v hyprctl >/dev/null 2>&1; then + hyprctl reload >/dev/null 2>&1 || true + fi + # Refresh bars/menus after files are ready if [ -x "$HOME/.config/hypr/scripts/Refresh.sh" ]; then "$HOME/.config/hypr/scripts/Refresh.sh" >/dev/null 2>&1 || true diff --git a/config/hypr/v2.3.18 b/config/hypr/v2.3.18 deleted file mode 100644 index 31b3414d..00000000 --- a/config/hypr/v2.3.18 +++ /dev/null @@ -1,5 +0,0 @@ -### https://github.com/JaKooLit ### -## https://github.com/JaKooLit/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 diff --git a/config/hypr/v2.3.19 b/config/hypr/v2.3.19 new file mode 100644 index 00000000..31b3414d --- /dev/null +++ b/config/hypr/v2.3.19 @@ -0,0 +1,5 @@ +### https://github.com/JaKooLit ### +## https://github.com/JaKooLit/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 diff --git a/config/kitty/kitty-themes/00-Default.conf b/config/kitty/kitty-themes/00-Default.conf index 2c1ac15d..39fc496c 100644 --- a/config/kitty/kitty-themes/00-Default.conf +++ b/config/kitty/kitty-themes/00-Default.conf @@ -1,3 +1,4 @@ # /* ---- πŸ’« https://github.com/JaKooLit πŸ’« ---- */ # # This is just created to remove all the themes +include ./01-Wallust.conf -- cgit v1.2.3 From 365e82d2e8782969bc4dc522d4a4e87e65fef0b2 Mon Sep 17 00:00:00 2001 From: brockar Date: Mon, 12 Jan 2026 21:51:48 -0300 Subject: fix: windowrules center for float windows --- config/hypr/configs/WindowRules.conf | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'config/hypr') diff --git a/config/hypr/configs/WindowRules.conf b/config/hypr/configs/WindowRules.conf index 00c98644..d37e1636 100644 --- a/config/hypr/configs/WindowRules.conf +++ b/config/hypr/configs/WindowRules.conf @@ -124,11 +124,11 @@ windowrule = idle_inhibit fullscreen, match:class ^(*)$ windowrule = idle_inhibit fullscreen, match:title ^(*)$ # FLOAT -windowrule = match:tag KooL_Cheat, float on -windowrule = match:tag wallpaper, float on -windowrule = match:tag settings, float on -windowrule = match:tag viewer, float on -windowrule = match:tag KooL-Settings, float on +windowrule = match:tag KooL_Cheat, float on, center on +windowrule = match:tag wallpaper, float on, center on +windowrule = match:tag settings, float on, center on +windowrule = match:tag viewer, float on, center on +windowrule = match:tag KooL-Settings, float on, center on windowrule = match:class ([Zz]oom|onedriver|onedriver-launcher), float on windowrule = match:class (org.gnome.Calculator|qalculate-gtk), float on windowrule = match:class ^(mpv|com.github.rafostar.Clapper)$, float on -- cgit v1.2.3 From aa4595e25feea6cfa02a193d1a3818d4a50a4b0d Mon Sep 17 00:00:00 2001 From: Don Williams Date: Tue, 13 Jan 2026 15:12:34 -0500 Subject: Added toggle for Rainbow border in Edit menu On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/hypr/scripts/Kool_Quick_Settings.sh --- config/hypr/scripts/Kool_Quick_Settings.sh | 33 ++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'config/hypr') diff --git a/config/hypr/scripts/Kool_Quick_Settings.sh b/config/hypr/scripts/Kool_Quick_Settings.sh index 8ab71ba2..0a274e6a 100755 --- a/config/hypr/scripts/Kool_Quick_Settings.sh +++ b/config/hypr/scripts/Kool_Quick_Settings.sh @@ -24,6 +24,37 @@ UserScripts="$HOME/.config/hypr/UserScripts" show_info() { notify-send -i "$iDIR/info.png" "Info" "$1" } +# Function to toggle Rainbow Borders script availability and refresh UI components +toggle_rainbow_borders() { + local rainbow_script="$UserScripts/RainbowBorders.sh" + local rainbow_backup="${rainbow_script}.bak" + local refresh_script="$scriptsDir/Refresh.sh" + local status="" + + if [[ -f "$rainbow_script" ]]; then + if mv "$rainbow_script" "$rainbow_backup"; then + status="disabled" + if command -v hyprctl &>/dev/null; then + hyprctl reload >/dev/null 2>&1 || true + fi + fi + elif [[ -f "$rainbow_backup" ]]; then + if mv "$rainbow_backup" "$rainbow_script"; then + status="enabled" + fi + else + show_info "RainbowBorders.sh was not found in $UserScripts." + return + fi + + if [[ -x "$refresh_script" ]]; then + "$refresh_script" >/dev/null 2>&1 & + fi + + if [[ -n "$status" ]]; then + show_info "Rainbow Borders ${status}." + fi +} # Function to display the menu options without numbers menu() { @@ -56,6 +87,7 @@ Choose Rofi Themes Search for Keybinds Toggle Game Mode Switch Dark-Light Theme +Toggle Rainbow Borders EOF } @@ -115,6 +147,7 @@ main() { "Search for Keybinds") $scriptsDir/KeyBinds.sh ;; "Toggle Game Mode") $scriptsDir/GameMode.sh ;; "Switch Dark-Light Theme") $scriptsDir/DarkLight.sh ;; + "Toggle Rainbow Borders") toggle_rainbow_borders ;; *) return ;; # Do nothing for invalid choices esac -- cgit v1.2.3 From 6ed607ae3d1f8977d4f9892dd39cc9acae5059b4 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Tue, 13 Jan 2026 15:42:06 -0500 Subject: Script wasn't checking for proper filename fixed On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/hypr/scripts/Kool_Quick_Settings.sh --- config/hypr/scripts/Kool_Quick_Settings.sh | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) (limited to 'config/hypr') diff --git a/config/hypr/scripts/Kool_Quick_Settings.sh b/config/hypr/scripts/Kool_Quick_Settings.sh index 0a274e6a..c8f71d06 100755 --- a/config/hypr/scripts/Kool_Quick_Settings.sh +++ b/config/hypr/scripts/Kool_Quick_Settings.sh @@ -27,26 +27,44 @@ show_info() { # Function to toggle Rainbow Borders script availability and refresh UI components toggle_rainbow_borders() { local rainbow_script="$UserScripts/RainbowBorders.sh" - local rainbow_backup="${rainbow_script}.bak" + local disabled_sh_bak="${rainbow_script}.bak" # RainbowBorders.sh.bak + local disabled_bak_sh="$UserScripts/RainbowBorders.bak.sh" # RainbowBorders.bak.sh (created by copy.sh when disabled) local refresh_script="$scriptsDir/Refresh.sh" local status="" + # If both disabled variants exist, keep the newer one to avoid ambiguity + if [[ -f "$disabled_sh_bak" && -f "$disabled_bak_sh" ]]; then + if [[ "$disabled_sh_bak" -nt "$disabled_bak_sh" ]]; then + rm -f "$disabled_bak_sh" + else + rm -f "$disabled_sh_bak" + fi + fi + if [[ -f "$rainbow_script" ]]; then - if mv "$rainbow_script" "$rainbow_backup"; then + # Currently enabled -> disable to canonical .sh.bak + if mv "$rainbow_script" "$disabled_sh_bak"; then status="disabled" if command -v hyprctl &>/dev/null; then hyprctl reload >/dev/null 2>&1 || true fi fi - elif [[ -f "$rainbow_backup" ]]; then - if mv "$rainbow_backup" "$rainbow_script"; then + elif [[ -f "$disabled_sh_bak" ]]; then + # Disabled (.sh.bak) -> enable + if mv "$disabled_sh_bak" "$rainbow_script"; then + status="enabled" + fi + elif [[ -f "$disabled_bak_sh" ]]; then + # Disabled (.bak.sh) -> enable (normalize to .sh) + if mv "$disabled_bak_sh" "$rainbow_script"; then status="enabled" fi else - show_info "RainbowBorders.sh was not found in $UserScripts." + show_info "RainbowBorders script not found in $UserScripts (checked .sh, .sh.bak, .bak.sh)." return fi + # Run refresh if available if [[ -x "$refresh_script" ]]; then "$refresh_script" >/dev/null 2>&1 & fi -- cgit v1.2.3 From 39372f3c096ab95cebd2acffec81c55fb6b46851 Mon Sep 17 00:00:00 2001 From: brockar Date: Wed, 14 Jan 2026 15:20:04 -0300 Subject: fix: Email WindowRules --- config/hypr/configs/WindowRules.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'config/hypr') diff --git a/config/hypr/configs/WindowRules.conf b/config/hypr/configs/WindowRules.conf index d37e1636..4f54215d 100644 --- a/config/hypr/configs/WindowRules.conf +++ b/config/hypr/configs/WindowRules.conf @@ -42,8 +42,9 @@ windowrule = match:class ^(nwg-displays|nwg-look)$, tag +KooL-Settings windowrule = match:class ^(Alacritty|kitty|kitty-dropterm)$, tag +terminal # email tags -windowrule = match:class ^([Tt]hunderbird|org.gnome.Evolution)$, tag +email +windowrule = match:class ^([Tt]hunderbird|org.mozilla.Thunderbird)$, tag +email windowrule = match:class ^(eu.betterbird.Betterbird)$, tag +email +windowrule = match:class ^(org.gnome.Evolution)$, tag +email # project tags windowrule = match:class ^(codium|codium-url-handler|VSCodium)$, tag +projects -- cgit v1.2.3 From 8c70ac492c3058fce029ffa9a31cdb9556a40bcc Mon Sep 17 00:00:00 2001 From: Don Williams Date: Fri, 16 Jan 2026 19:42:32 -0500 Subject: Added submeu for RainbowBorders and the new modes - Added `Rainbow Borders sub memu` - Code provided by [brunoorsolon](https://github.com/brunoorsolon) - There are now mulitple modes for the Rainbow Borders feature - `Disabled`, `Wallust Color`, `Rainbow`, `Gradient flow` - Thank you for the submission On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: CHANGELOG.md modified: config/hypr/UserScripts/RainbowBorders.sh modified: config/hypr/scripts/Kool_Quick_Settings.sh --- CHANGELOG.md | 20 ++++--- config/hypr/UserScripts/RainbowBorders.sh | 92 +++++++++++++++++++++++++++--- config/hypr/scripts/Kool_Quick_Settings.sh | 74 +++++++++++++++++++++++- 3 files changed, 170 insertions(+), 16 deletions(-) (limited to 'config/hypr') diff --git a/CHANGELOG.md b/CHANGELOG.md index e22cb1be..9a9ecb61 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,14 +2,20 @@ ## v2.3.19 -- 2026-01-15 - - Created waybar configs for ML4W Glass style - - `TOP & Bottom Summit - glass` - - `Default Laptop - Glass` - - `Everforest - Glass` - - Fixed menu for express-update - - Fixed `Toggle Rainbow` checked for wrong file +- 2026-01-16 +- Added `Rainbow Borders sub memu` + - Code provided by [brunoorsolon](https://github.com/brunoorsolon) + - There are now mulitple modes for the Rainbow Borders feature + - `Disabled`, `Wallust Color`, `Rainbow`, `Gradient flow` + - Thank you for the submission +- 2026-01-15 +- Created waybar configs for ML4W Glass style +- `TOP & Bottom Summit - glass` +- `Default Laptop - Glass` +- `Everforest - Glass` +- Fixed menu for express-update +- Fixed `Toggle Rainbow` checked for wrong file - 2026-01-13 - Added `Toggle Rainbow borders` option to settings menu diff --git a/config/hypr/UserScripts/RainbowBorders.sh b/config/hypr/UserScripts/RainbowBorders.sh index 0a7fd721..7a392ffe 100755 --- a/config/hypr/UserScripts/RainbowBorders.sh +++ b/config/hypr/UserScripts/RainbowBorders.sh @@ -1,14 +1,92 @@ #!/usr/bin/env bash # /* ---- πŸ’« https://github.com/JaKooLit πŸ’« ---- */ ## -# for rainbow borders animation +# Smooth border cycling effect using Wallust palette or full rainbow +# Possible values: "wallust_random", "rainbow", "gradient_flow" +EFFECT_TYPE="gradient_flow" + +WALLUST_COLORS_SOURCE="$HOME/.config/hypr/wallust/wallust-hyprland.conf" + +WALLUST_COLORS=() + +# ---------- LOAD WALLUST COLORS ---------- +if [[ "$EFFECT_TYPE" == "wallust_random" || "$EFFECT_TYPE" == "gradient_flow" ]]; then + # Accept either hex (0xffRRGGBB) or rgb(r,g,b) and normalize to 0xffRRGGBB + mapfile -t WALLUST_COLORS < <( + grep -E '^\$color[0-9]+' "$WALLUST_COLORS_SOURCE" | awk ' + function hex2(s){ return (length(s)==6 ? "0xff"s : ""); } + function rgb2(r,g,b){ return sprintf("0xff%02x%02x%02x", r, g, b); } + { + if (match($0, /0x([0-9a-fA-F]{8})/, m)) { print "0x" m[1]; next } + if (match($0, /#([0-9a-fA-F]{6})/, m)) { print hex2(m[1]); next } + if (match($0, /rgb\(([0-9]+),[ ]*([0-9]+),[ ]*([0-9]+)\)/, m)) { + print rgb2(m[1], m[2], m[3]); next + } + }' + ) + + if (( ${#WALLUST_COLORS[@]} == 0 )); then + if [[ "$EFFECT_TYPE" == "wallust_random" ]]; then + echo "ERROR: wallust_random enabled but no colors loaded" >&2 + exit 1 + fi + # gradient_flow will fall back to random_hex later + fi +fi + +# ---------- RANDOM WALLUST COLORS ---------- +function wallust_random() { + echo "${WALLUST_COLORS[RANDOM % ${#WALLUST_COLORS[@]}]}" +} + +# ---------- RAINBOW COLORS ---------- function random_hex() { - random_hex=("0xff$(openssl rand -hex 3)") - echo $random_hex + echo "0xff$(openssl rand -hex 3)" +} + +# ---------- FLOW MODE ---------- +BASE_COLOR="${WALLUST_COLORS[10]}" +GRAD1_COLOR="${WALLUST_COLORS[14]}" +GRAD2_COLOR="${WALLUST_COLORS[13]}" +GLOW_COLOR="${WALLUST_COLORS[15]}" + +MAX_POS=10 +GLOW_POS=0 + +function gradient_flow_color() { + local pos=$1 + local d=$(( pos - GLOW_POS )) + + # wrap distance (-9..9) + if (( d > MAX_POS/2 )); then d=$((d - MAX_POS)); fi + if (( d < -MAX_POS/2 )); then d=$((d + MAX_POS)); fi + + case "${d#-}" in + 0) echo "$GLOW_COLOR" ;; + 1) echo "$GRAD1_COLOR" ;; + 2) echo "$GRAD2_COLOR" ;; + *) echo "$BASE_COLOR" ;; + esac + + if (( pos == MAX_POS - 1 )); then + GLOW_POS=$(( (GLOW_POS + 1) % MAX_POS )) + fi +} + +# ---------- Main function ---------- + +function get_color() { + if [[ "$EFFECT_TYPE" == "wallust_random" && ${#WALLUST_COLORS[@]} -gt 0 ]]; then + wallust_random + elif [[ "$EFFECT_TYPE" == "gradient_flow" && ${#WALLUST_COLORS[@]} -ge 16 ]]; then + gradient_flow_color "$1" + else + random_hex + fi } -# rainbow colors only for active window -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 +# border effect for ACTIVE window +hyprctl keyword general:col.active_border $(get_color 0) $(get_color 1) $(get_color 2) $(get_color 3) $(get_color 4) $(get_color 5) $(get_color 6) $(get_color 7) $(get_color 8) $(get_color 9) 270deg -# rainbow colors for inactive window (uncomment to take effect) -#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 \ No newline at end of file +# border effect for INACTIVE windows +#hyprctl keyword general:col.inactive_border $(get_color 0) $(get_color 1) $(get_color 2) $(get_color 3) $(get_color 4) $(get_color 5) $(get_color 6) $(get_color 7) $(get_color 8) $(get_color 9) 270deg \ No newline at end of file diff --git a/config/hypr/scripts/Kool_Quick_Settings.sh b/config/hypr/scripts/Kool_Quick_Settings.sh index c8f71d06..5f0193ed 100755 --- a/config/hypr/scripts/Kool_Quick_Settings.sh +++ b/config/hypr/scripts/Kool_Quick_Settings.sh @@ -74,6 +74,76 @@ toggle_rainbow_borders() { fi } +# Submenu to choose Rainbow Borders mode (disable, wallust_random, rainbow, gradient_flow) +rainbow_borders_menu() { + local rainbow_script="$UserScripts/RainbowBorders.sh" + local disabled_sh_bak="${rainbow_script}.bak" + local disabled_bak_sh="$UserScripts/RainbowBorders.bak.sh" + local refresh_script="$scriptsDir/Refresh.sh" + + # Determine current mode/status + local current="disabled" + if [[ -f "$rainbow_script" ]]; then + current=$(grep -E '^EFFECT_TYPE=' "$rainbow_script" 2>/dev/null | sed -E 's/^EFFECT_TYPE="?([^"]*)"?.*/\1/') + [[ -z "$current" ]] && current="unknown" + fi + + # Build options and prompt + local options="disable\nwallust_random\nrainbow\ngradient_flow" + local choice + choice=$(printf "%b" "$options" | rofi -i -dmenu -config "$rofi_theme" -mesg "Rainbow Borders: choose mode (current: $current)") + + [[ -z "$choice" ]] && return + + case "$choice" in + disable|Disable) + if [[ -f "$rainbow_script" ]]; then + mv "$rainbow_script" "$disabled_sh_bak" + fi + current="disabled" + ;; + wallust_random|rainbow|gradient_flow) + # Ensure script is enabled + if [[ ! -f "$rainbow_script" ]]; then + if [[ -f "$disabled_sh_bak" ]]; then + mv "$disabled_sh_bak" "$rainbow_script" + elif [[ -f "$disabled_bak_sh" ]]; then + mv "$disabled_bak_sh" "$rainbow_script" + else + show_info "RainbowBorders script not found in $UserScripts." + return + fi + fi + + # Update EFFECT_TYPE in place; insert if missing + if grep -q '^EFFECT_TYPE=' "$rainbow_script" 2>/dev/null; then + sed -i 's/^EFFECT_TYPE=.*/EFFECT_TYPE="'"$choice"'"/' "$rainbow_script" + else + if head -n1 "$rainbow_script" | grep -q '^#!'; then + sed -i '1a EFFECT_TYPE="'"$choice"'"' "$rainbow_script" + else + sed -i '1i EFFECT_TYPE="'"$choice"'"' "$rainbow_script" + fi + fi + current="$choice" + ;; + *) + return ;; + esac + + # Run refresh if available + if [[ -x "$refresh_script" ]]; then + "$refresh_script" >/dev/null 2>&1 & + fi + + # Notify + if [[ "$current" == "disabled" ]]; then + show_info "Rainbow Borders disabled." + else + show_info "Rainbow Borders: $current." + fi +} + # Function to display the menu options without numbers menu() { cat < Date: Fri, 16 Jan 2026 19:51:05 -0500 Subject: Fixed disable not working and send notification on mode change On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/hypr/scripts/Kool_Quick_Settings.sh --- config/hypr/scripts/Kool_Quick_Settings.sh | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) (limited to 'config/hypr') diff --git a/config/hypr/scripts/Kool_Quick_Settings.sh b/config/hypr/scripts/Kool_Quick_Settings.sh index 5f0193ed..59edc66d 100755 --- a/config/hypr/scripts/Kool_Quick_Settings.sh +++ b/config/hypr/scripts/Kool_Quick_Settings.sh @@ -84,23 +84,29 @@ rainbow_borders_menu() { # Determine current mode/status local current="disabled" if [[ -f "$rainbow_script" ]]; then - current=$(grep -E '^EFFECT_TYPE=' "$rainbow_script" 2>/dev/null | sed -E 's/^EFFECT_TYPE="?([^"]*)"?.*/\1/') + current=$(grep -E '^EFFECT_TYPE=' "$rainbow_script" 2>/dev/null | sed -E 's/^EFFECT_TYPE="?(.*)"?/\1/') [[ -z "$current" ]] && current="unknown" fi + # Build options and prompt - local options="disable\nwallust_random\nrainbow\ngradient_flow" + local options="Disable Rainbow Borders\nwallust_random\nrainbow\ngradient_flow" local choice - choice=$(printf "%b" "$options" | rofi -i -dmenu -config "$rofi_theme" -mesg "Rainbow Borders: choose mode (current: $current)") + choice=$(printf "%b" "$options" | rofi -i -dmenu -config "$rofi_theme" -mesg "Rainbow Borders: current = $current") [[ -z "$choice" ]] && return + local previous="$current" + case "$choice" in - disable|Disable) + "Disable Rainbow Borders") if [[ -f "$rainbow_script" ]]; then mv "$rainbow_script" "$disabled_sh_bak" fi current="disabled" + if command -v hyprctl &>/dev/null; then + hyprctl reload >/dev/null 2>&1 || true + fi ;; wallust_random|rainbow|gradient_flow) # Ensure script is enabled @@ -136,11 +142,13 @@ rainbow_borders_menu() { "$refresh_script" >/dev/null 2>&1 & fi - # Notify - if [[ "$current" == "disabled" ]]; then - show_info "Rainbow Borders disabled." - else - show_info "Rainbow Borders: $current." + # Notify only if changed + if [[ "$current" != "$previous" ]]; then + if [[ "$current" == "disabled" ]]; then + show_info "Rainbow Borders disabled." + else + show_info "Rainbow Borders: $current." + fi fi } -- cgit v1.2.3 From a1fa450d3f6ee8b423a3bde1e33c0b640018ef0d Mon Sep 17 00:00:00 2001 From: Don Williams Date: Fri, 16 Jan 2026 19:58:10 -0500 Subject: fixed new modes not working, change to more friendly menu names On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/hypr/scripts/Kool_Quick_Settings.sh --- config/hypr/scripts/Kool_Quick_Settings.sh | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) (limited to 'config/hypr') diff --git a/config/hypr/scripts/Kool_Quick_Settings.sh b/config/hypr/scripts/Kool_Quick_Settings.sh index 59edc66d..f61ffa5f 100755 --- a/config/hypr/scripts/Kool_Quick_Settings.sh +++ b/config/hypr/scripts/Kool_Quick_Settings.sh @@ -64,9 +64,11 @@ toggle_rainbow_borders() { return fi - # Run refresh if available + # Run refresh if available, otherwise apply borders directly if [[ -x "$refresh_script" ]]; then "$refresh_script" >/dev/null 2>&1 & + elif [[ "$current" != "disabled" && -x "$rainbow_script" ]]; then + "$rainbow_script" >/dev/null 2>&1 & fi if [[ -n "$status" ]]; then @@ -90,7 +92,7 @@ rainbow_borders_menu() { # Build options and prompt - local options="Disable Rainbow Borders\nwallust_random\nrainbow\ngradient_flow" + local options="Disable Rainbow Borders\nWallust Color\nOriginal Rainbow\nGradient Flow" local choice choice=$(printf "%b" "$options" | rofi -i -dmenu -config "$rofi_theme" -mesg "Rainbow Borders: current = $current") @@ -108,7 +110,13 @@ rainbow_borders_menu() { hyprctl reload >/dev/null 2>&1 || true fi ;; - wallust_random|rainbow|gradient_flow) + "Wallust Color"|"Original Rainbow"|"Gradient Flow") + local mode="" + case "$choice" in + "Wallust Color") mode="wallust_random" ;; + "Original Rainbow") mode="rainbow" ;; + "Gradient Flow") mode="gradient_flow" ;; + esac # Ensure script is enabled if [[ ! -f "$rainbow_script" ]]; then if [[ -f "$disabled_sh_bak" ]]; then @@ -123,15 +131,17 @@ rainbow_borders_menu() { # Update EFFECT_TYPE in place; insert if missing if grep -q '^EFFECT_TYPE=' "$rainbow_script" 2>/dev/null; then - sed -i 's/^EFFECT_TYPE=.*/EFFECT_TYPE="'"$choice"'"/' "$rainbow_script" + sed -i 's/^EFFECT_TYPE=.*/EFFECT_TYPE="'"$mode"'"/' "$rainbow_script" else if head -n1 "$rainbow_script" | grep -q '^#!'; then - sed -i '1a EFFECT_TYPE="'"$choice"'"' "$rainbow_script" + sed -i '1a EFFECT_TYPE="'"$mode"'"' "$rainbow_script" else - sed -i '1i EFFECT_TYPE="'"$choice"'"' "$rainbow_script" + sed -i '1i EFFECT_TYPE="'"$mode"'"' "$rainbow_script" fi fi - current="$choice" + # Re-read to confirm + current=$(grep -E '^EFFECT_TYPE=' "$rainbow_script" 2>/dev/null | sed -E 's/^EFFECT_TYPE="?(.*)"?/\1/') + [[ -z "$current" ]] && current="unknown" ;; *) return ;; @@ -149,6 +159,8 @@ rainbow_borders_menu() { else show_info "Rainbow Borders: $current." fi + elif [[ "$choice" == "Wallust Color" || "$choice" == "Original Rainbow" || "$choice" == "Gradient Flow" ]]; then + show_info "Rainbow Borders unchanged: $current." fi } -- cgit v1.2.3 From 4b8270e5a24ecbb27693e30eec5d9a2d75442d88 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Fri, 16 Jan 2026 20:06:33 -0500 Subject: Two modes weren't working and notifcation should be fixed On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/hypr/scripts/Kool_Quick_Settings.sh --- config/hypr/scripts/Kool_Quick_Settings.sh | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) (limited to 'config/hypr') diff --git a/config/hypr/scripts/Kool_Quick_Settings.sh b/config/hypr/scripts/Kool_Quick_Settings.sh index f61ffa5f..9dacd7c6 100755 --- a/config/hypr/scripts/Kool_Quick_Settings.sh +++ b/config/hypr/scripts/Kool_Quick_Settings.sh @@ -83,18 +83,27 @@ rainbow_borders_menu() { local disabled_bak_sh="$UserScripts/RainbowBorders.bak.sh" local refresh_script="$scriptsDir/Refresh.sh" - # Determine current mode/status + # Determine current mode/status (internal) local current="disabled" if [[ -f "$rainbow_script" ]]; then - current=$(grep -E '^EFFECT_TYPE=' "$rainbow_script" 2>/dev/null | sed -E 's/^EFFECT_TYPE="?(.*)"?/\1/') + current=$(grep -E '^EFFECT_TYPE=' "$rainbow_script" 2>/dev/null | sed -E 's/^EFFECT_TYPE="?([^"]*)"?/\1/') [[ -z "$current" ]] && current="unknown" fi + # Map internal mode to friendly display + local current_display="$current" + case "$current" in + wallust_random) current_display="Wallust Color" ;; + rainbow) current_display="Original Rainbow" ;; + gradient_flow) current_display="Gradient Flow" ;; + disabled) current_display="Disabled" ;; + esac + # Build options and prompt local options="Disable Rainbow Borders\nWallust Color\nOriginal Rainbow\nGradient Flow" local choice - choice=$(printf "%b" "$options" | rofi -i -dmenu -config "$rofi_theme" -mesg "Rainbow Borders: current = $current") + choice=$(printf "%b" "$options" | rofi -i -dmenu -config "$rofi_theme" -mesg "Rainbow Borders: current = $current_display") [[ -z "$choice" ]] && return @@ -140,7 +149,7 @@ rainbow_borders_menu() { fi fi # Re-read to confirm - current=$(grep -E '^EFFECT_TYPE=' "$rainbow_script" 2>/dev/null | sed -E 's/^EFFECT_TYPE="?(.*)"?/\1/') + current=$(grep -E '^EFFECT_TYPE=' "$rainbow_script" 2>/dev/null | sed -E 's/^EFFECT_TYPE="?([^"]*)"?/\1/') [[ -z "$current" ]] && current="unknown" ;; *) @@ -152,15 +161,20 @@ rainbow_borders_menu() { "$refresh_script" >/dev/null 2>&1 & fi - # Notify only if changed + # Notify only if changed (friendly display) if [[ "$current" != "$previous" ]]; then + local new_display="$current" + case "$current" in + wallust_random) new_display="Wallust Color" ;; + rainbow) new_display="Original Rainbow" ;; + gradient_flow) new_display="Gradient Flow" ;; + disabled) new_display="Disabled" ;; + esac if [[ "$current" == "disabled" ]]; then show_info "Rainbow Borders disabled." else - show_info "Rainbow Borders: $current." + show_info "Rainbow Borders: $new_display." fi - elif [[ "$choice" == "Wallust Color" || "$choice" == "Original Rainbow" || "$choice" == "Gradient Flow" ]]; then - show_info "Rainbow Borders unchanged: $current." fi } -- cgit v1.2.3 From 6339bc47664bdd30895c1026ae025b82e3a96f55 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Fri, 16 Jan 2026 20:09:29 -0500 Subject: Notification missing icon, failing silently On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/hypr/scripts/Kool_Quick_Settings.sh --- config/hypr/scripts/Kool_Quick_Settings.sh | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'config/hypr') diff --git a/config/hypr/scripts/Kool_Quick_Settings.sh b/config/hypr/scripts/Kool_Quick_Settings.sh index 9dacd7c6..2a36ea3b 100755 --- a/config/hypr/scripts/Kool_Quick_Settings.sh +++ b/config/hypr/scripts/Kool_Quick_Settings.sh @@ -22,7 +22,11 @@ UserScripts="$HOME/.config/hypr/UserScripts" # Function to show info notification show_info() { - notify-send -i "$iDIR/info.png" "Info" "$1" + if [[ -f "$iDIR/info.png" ]]; then + notify-send -i "$iDIR/info.png" "Info" "$1" + else + notify-send "Info" "$1" + fi } # Function to toggle Rainbow Borders script availability and refresh UI components toggle_rainbow_borders() { @@ -148,9 +152,8 @@ rainbow_borders_menu() { sed -i '1i EFFECT_TYPE="'"$mode"'"' "$rainbow_script" fi fi - # Re-read to confirm - current=$(grep -E '^EFFECT_TYPE=' "$rainbow_script" 2>/dev/null | sed -E 's/^EFFECT_TYPE="?([^"]*)"?/\1/') - [[ -z "$current" ]] && current="unknown" + # Set current to chosen mode + current="$mode" ;; *) return ;; @@ -161,6 +164,11 @@ rainbow_borders_menu() { "$refresh_script" >/dev/null 2>&1 & fi + # Apply mode immediately (in case refresh doesn't trigger it) + if [[ "$current" != "disabled" && -x "$rainbow_script" ]]; then + "$rainbow_script" >/dev/null 2>&1 & + fi + # Notify only if changed (friendly display) if [[ "$current" != "$previous" ]]; then local new_display="$current" -- cgit v1.2.3 From 6a9bb7b7331ab3d526e58b6e97fc38892db69c19 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Fri, 16 Jan 2026 20:13:08 -0500 Subject: Changed notification code, trying fix wallust mode On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/hypr/UserScripts/RainbowBorders.sh modified: config/hypr/scripts/Kool_Quick_Settings.sh --- config/hypr/UserScripts/RainbowBorders.sh | 7 ++----- config/hypr/scripts/Kool_Quick_Settings.sh | 24 +++++++++++------------- 2 files changed, 13 insertions(+), 18 deletions(-) (limited to 'config/hypr') diff --git a/config/hypr/UserScripts/RainbowBorders.sh b/config/hypr/UserScripts/RainbowBorders.sh index 7a392ffe..67269b8a 100755 --- a/config/hypr/UserScripts/RainbowBorders.sh +++ b/config/hypr/UserScripts/RainbowBorders.sh @@ -26,11 +26,8 @@ if [[ "$EFFECT_TYPE" == "wallust_random" || "$EFFECT_TYPE" == "gradient_flow" ]] ) if (( ${#WALLUST_COLORS[@]} == 0 )); then - if [[ "$EFFECT_TYPE" == "wallust_random" ]]; then - echo "ERROR: wallust_random enabled but no colors loaded" >&2 - exit 1 - fi - # gradient_flow will fall back to random_hex later + # If wallust colors can't be loaded, fall back to random_hex + EFFECT_TYPE="rainbow" fi fi diff --git a/config/hypr/scripts/Kool_Quick_Settings.sh b/config/hypr/scripts/Kool_Quick_Settings.sh index 2a36ea3b..7d9c1a70 100755 --- a/config/hypr/scripts/Kool_Quick_Settings.sh +++ b/config/hypr/scripts/Kool_Quick_Settings.sh @@ -170,19 +170,17 @@ rainbow_borders_menu() { fi # Notify only if changed (friendly display) - if [[ "$current" != "$previous" ]]; then - local new_display="$current" - case "$current" in - wallust_random) new_display="Wallust Color" ;; - rainbow) new_display="Original Rainbow" ;; - gradient_flow) new_display="Gradient Flow" ;; - disabled) new_display="Disabled" ;; - esac - if [[ "$current" == "disabled" ]]; then - show_info "Rainbow Borders disabled." - else - show_info "Rainbow Borders: $new_display." - fi + local new_display="$current" + case "$current" in + wallust_random) new_display="Wallust Color" ;; + rainbow) new_display="Original Rainbow" ;; + gradient_flow) new_display="Gradient Flow" ;; + disabled) new_display="Disabled" ;; + esac + if [[ "$current" == "disabled" ]]; then + show_info "Rainbow Borders disabled." + else + show_info "Rainbow Borders: $new_display." fi } -- cgit v1.2.3 From 9342aefe7b42f334c52c8697cd5ad8e12fadf88f Mon Sep 17 00:00:00 2001 From: Don Williams Date: Fri, 16 Jan 2026 20:17:41 -0500 Subject: removed inop notification code the current mode is in the rofi menu Any change is reflected immediately no need for an alert On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/hypr/scripts/Kool_Quick_Settings.sh --- config/hypr/scripts/Kool_Quick_Settings.sh | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) (limited to 'config/hypr') diff --git a/config/hypr/scripts/Kool_Quick_Settings.sh b/config/hypr/scripts/Kool_Quick_Settings.sh index 7d9c1a70..2437bd11 100755 --- a/config/hypr/scripts/Kool_Quick_Settings.sh +++ b/config/hypr/scripts/Kool_Quick_Settings.sh @@ -169,19 +169,7 @@ rainbow_borders_menu() { "$rainbow_script" >/dev/null 2>&1 & fi - # Notify only if changed (friendly display) - local new_display="$current" - case "$current" in - wallust_random) new_display="Wallust Color" ;; - rainbow) new_display="Original Rainbow" ;; - gradient_flow) new_display="Gradient Flow" ;; - disabled) new_display="Disabled" ;; - esac - if [[ "$current" == "disabled" ]]; then - show_info "Rainbow Borders disabled." - else - show_info "Rainbow Borders: $new_display." - fi + # No notifications; mode is shown in the menu } # Function to display the menu options without numbers -- cgit v1.2.3 From a4837a1bede62aae3655931d9f69ecafd7acefcf Mon Sep 17 00:00:00 2001 From: brockar Date: Sat, 17 Jan 2026 00:13:48 -0300 Subject: fix: WindowRules settings btrf --- config/hypr/configs/WindowRules.conf | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'config/hypr') diff --git a/config/hypr/configs/WindowRules.conf b/config/hypr/configs/WindowRules.conf index 4f54215d..7fcf6b3b 100644 --- a/config/hypr/configs/WindowRules.conf +++ b/config/hypr/configs/WindowRules.conf @@ -98,6 +98,8 @@ windowrule = match:class ^(qt5ct|qt6ct)$, tag +settings windowrule = match:class (xdg-desktop-portal-gtk), tag +settings windowrule = match:class ^(org.kde.polkit-kde-authentication-agent-1)$, tag +settings windowrule = match:class ^([Rr]ofi)$, tag +settings +windowrule = match:class ^(btrfs-assistant)$, tag +settings +windowrule = match:class ^(timeshift-gtk)$, tag +settings # viewer tags windowrule = match:class ^(gnome-system-monitor|org.gnome.SystemMonitor|io.missioncenter.MissionCenter)$, tag +viewer @@ -112,8 +114,8 @@ windowrule = match:tag multimedia, opacity 1.0 # POSITION windowrule = match:tag KooL_Cheat, center on -windowrule = match:title ^(ROG Control)$, center on windowrule = match:tag KooL-Settings, center on +windowrule = match:title ^(ROG Control)$, center on windowrule = match:title ^(Keybindings)$, center on windowrule = match:class ^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$, center on windowrule = match:class ^([Ff]erdium)$, center on @@ -125,7 +127,7 @@ windowrule = idle_inhibit fullscreen, match:class ^(*)$ windowrule = idle_inhibit fullscreen, match:title ^(*)$ # FLOAT -windowrule = match:tag KooL_Cheat, float on, center on +windowrule = match:tag KooL_Cheat, float on windowrule = match:tag wallpaper, float on, center on windowrule = match:tag settings, float on, center on windowrule = match:tag viewer, float on, center on @@ -188,11 +190,9 @@ layerrule = match:namespace quickshell:overview, ignore_alpha 0.5 windowrule { name = Whatsapp-zapzap match:class = ^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$ - float = on size = (monitor_w*0.6) (monitor_h*0.7) center = on } -# Picture-in-Picture windowrule { name = Picture-in-Picture match:title = ^(Picture-in-Picture)$ @@ -203,7 +203,6 @@ windowrule { keep_aspect_ratio = on size = (monitor_w*0.3) (monitor_h*0.3) } - # Thunar copy progress dialog windowrule { name = Thunar-Progress-bar @@ -214,4 +213,3 @@ windowrule { size = (monitor_w*0.26) (monitor_h*0.18) } - -- cgit v1.2.3 From ed06798cf9004b160d267a2452d06fdd25818059 Mon Sep 17 00:00:00 2001 From: brockar Date: Sat, 17 Jan 2026 00:14:25 -0300 Subject: fix: update WindowRules-config-v3.conf Now WindowRules = WindowRules-config-v3 --- config/hypr/configs/WindowRules-config-v3.conf | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) (limited to 'config/hypr') diff --git a/config/hypr/configs/WindowRules-config-v3.conf b/config/hypr/configs/WindowRules-config-v3.conf index 00c98644..7fcf6b3b 100644 --- a/config/hypr/configs/WindowRules-config-v3.conf +++ b/config/hypr/configs/WindowRules-config-v3.conf @@ -42,8 +42,9 @@ windowrule = match:class ^(nwg-displays|nwg-look)$, tag +KooL-Settings windowrule = match:class ^(Alacritty|kitty|kitty-dropterm)$, tag +terminal # email tags -windowrule = match:class ^([Tt]hunderbird|org.gnome.Evolution)$, tag +email +windowrule = match:class ^([Tt]hunderbird|org.mozilla.Thunderbird)$, tag +email windowrule = match:class ^(eu.betterbird.Betterbird)$, tag +email +windowrule = match:class ^(org.gnome.Evolution)$, tag +email # project tags windowrule = match:class ^(codium|codium-url-handler|VSCodium)$, tag +projects @@ -97,6 +98,8 @@ windowrule = match:class ^(qt5ct|qt6ct)$, tag +settings windowrule = match:class (xdg-desktop-portal-gtk), tag +settings windowrule = match:class ^(org.kde.polkit-kde-authentication-agent-1)$, tag +settings windowrule = match:class ^([Rr]ofi)$, tag +settings +windowrule = match:class ^(btrfs-assistant)$, tag +settings +windowrule = match:class ^(timeshift-gtk)$, tag +settings # viewer tags windowrule = match:class ^(gnome-system-monitor|org.gnome.SystemMonitor|io.missioncenter.MissionCenter)$, tag +viewer @@ -111,8 +114,8 @@ windowrule = match:tag multimedia, opacity 1.0 # POSITION windowrule = match:tag KooL_Cheat, center on -windowrule = match:title ^(ROG Control)$, center on windowrule = match:tag KooL-Settings, center on +windowrule = match:title ^(ROG Control)$, center on windowrule = match:title ^(Keybindings)$, center on windowrule = match:class ^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$, center on windowrule = match:class ^([Ff]erdium)$, center on @@ -125,10 +128,10 @@ windowrule = idle_inhibit fullscreen, match:title ^(*)$ # FLOAT windowrule = match:tag KooL_Cheat, float on -windowrule = match:tag wallpaper, float on -windowrule = match:tag settings, float on -windowrule = match:tag viewer, float on -windowrule = match:tag KooL-Settings, float on +windowrule = match:tag wallpaper, float on, center on +windowrule = match:tag settings, float on, center on +windowrule = match:tag viewer, float on, center on +windowrule = match:tag KooL-Settings, float on, center on windowrule = match:class ([Zz]oom|onedriver|onedriver-launcher), float on windowrule = match:class (org.gnome.Calculator|qalculate-gtk), float on windowrule = match:class ^(mpv|com.github.rafostar.Clapper)$, float on @@ -187,11 +190,9 @@ layerrule = match:namespace quickshell:overview, ignore_alpha 0.5 windowrule { name = Whatsapp-zapzap match:class = ^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$ - float = on size = (monitor_w*0.6) (monitor_h*0.7) center = on } -# Picture-in-Picture windowrule { name = Picture-in-Picture match:title = ^(Picture-in-Picture)$ @@ -202,7 +203,6 @@ windowrule { keep_aspect_ratio = on size = (monitor_w*0.3) (monitor_h*0.3) } - # Thunar copy progress dialog windowrule { name = Thunar-Progress-bar @@ -213,4 +213,3 @@ windowrule { size = (monitor_w*0.26) (monitor_h*0.18) } - -- cgit v1.2.3 From fedec77164a973edfb03e6a8d60382dc62f30f1d Mon Sep 17 00:00:00 2001 From: brockar Date: Sat, 17 Jan 2026 00:18:09 -0300 Subject: fix: WR Hyprland startup --- config/hypr/configs/WindowRules.conf | 1 + 1 file changed, 1 insertion(+) (limited to 'config/hypr') diff --git a/config/hypr/configs/WindowRules.conf b/config/hypr/configs/WindowRules.conf index 7fcf6b3b..24af7e70 100644 --- a/config/hypr/configs/WindowRules.conf +++ b/config/hypr/configs/WindowRules.conf @@ -148,6 +148,7 @@ windowrule = match:title ^(Save As)$, float on, size (monitor_w*0.7) (monitor_h* windowrule = match:initial_title (Open Files), float on, size (monitor_w*0.7) (monitor_h*0.6) windowrule = match:title ^(SDDM Background)$, float on, center on, size (monitor_w*0.16) (monitor_h*0.12) windowrule = match:class ^(yad)$, float on, center on, size (monitor_w*0.2) (monitor_h*0.2) +windowrule = match:class ^(hyprland-donate-screen)$, float on, center on # OPACITY windowrule = match:tag browser, opacity 0.99 0.8 -- cgit v1.2.3 From 3363d48f00d92bbefe1a65c5331a5671ef88ae6a Mon Sep 17 00:00:00 2001 From: Don Williams Date: Fri, 16 Jan 2026 22:22:14 -0500 Subject: Disabled RainbowBorders by default use quick settings to enable The new mode select menu for RainbowBorders makes the prompt at install redundant. Especially when upgrading On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: CHANGELOG.md renamed: config/hypr/UserScripts/RainbowBorders.sh -> config/hypr/UserScripts/RainbowBorders.bak.sh modified: config/hypr/configs/Startup_Apps.conf modified: copy.sh modified: scripts/lib_prompts.sh --- CHANGELOG.md | 2 + config/hypr/UserScripts/RainbowBorders.bak.sh | 89 +++++++++++++++++++++++++++ config/hypr/UserScripts/RainbowBorders.sh | 89 --------------------------- config/hypr/configs/Startup_Apps.conf | 4 +- copy.sh | 1 - scripts/lib_prompts.sh | 21 ------- 6 files changed, 93 insertions(+), 113 deletions(-) create mode 100755 config/hypr/UserScripts/RainbowBorders.bak.sh delete mode 100755 config/hypr/UserScripts/RainbowBorders.sh (limited to 'config/hypr') diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a9ecb61..8ae7c154 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,8 @@ - There are now mulitple modes for the Rainbow Borders feature - `Disabled`, `Wallust Color`, `Rainbow`, `Gradient flow` - Thank you for the submission +- Disabled `RainbowBorders.sh` by default +- Use the quick setings menu `SUPERSHIFT + E` to enable, select mode - 2026-01-15 - Created waybar configs for ML4W Glass style diff --git a/config/hypr/UserScripts/RainbowBorders.bak.sh b/config/hypr/UserScripts/RainbowBorders.bak.sh new file mode 100755 index 00000000..67269b8a --- /dev/null +++ b/config/hypr/UserScripts/RainbowBorders.bak.sh @@ -0,0 +1,89 @@ +#!/usr/bin/env bash +# /* ---- πŸ’« https://github.com/JaKooLit πŸ’« ---- */ ## +# Smooth border cycling effect using Wallust palette or full rainbow + +# Possible values: "wallust_random", "rainbow", "gradient_flow" +EFFECT_TYPE="gradient_flow" + +WALLUST_COLORS_SOURCE="$HOME/.config/hypr/wallust/wallust-hyprland.conf" + +WALLUST_COLORS=() + +# ---------- LOAD WALLUST COLORS ---------- +if [[ "$EFFECT_TYPE" == "wallust_random" || "$EFFECT_TYPE" == "gradient_flow" ]]; then + # Accept either hex (0xffRRGGBB) or rgb(r,g,b) and normalize to 0xffRRGGBB + mapfile -t WALLUST_COLORS < <( + grep -E '^\$color[0-9]+' "$WALLUST_COLORS_SOURCE" | awk ' + function hex2(s){ return (length(s)==6 ? "0xff"s : ""); } + function rgb2(r,g,b){ return sprintf("0xff%02x%02x%02x", r, g, b); } + { + if (match($0, /0x([0-9a-fA-F]{8})/, m)) { print "0x" m[1]; next } + if (match($0, /#([0-9a-fA-F]{6})/, m)) { print hex2(m[1]); next } + if (match($0, /rgb\(([0-9]+),[ ]*([0-9]+),[ ]*([0-9]+)\)/, m)) { + print rgb2(m[1], m[2], m[3]); next + } + }' + ) + + if (( ${#WALLUST_COLORS[@]} == 0 )); then + # If wallust colors can't be loaded, fall back to random_hex + EFFECT_TYPE="rainbow" + fi +fi + +# ---------- RANDOM WALLUST COLORS ---------- +function wallust_random() { + echo "${WALLUST_COLORS[RANDOM % ${#WALLUST_COLORS[@]}]}" +} + +# ---------- RAINBOW COLORS ---------- +function random_hex() { + echo "0xff$(openssl rand -hex 3)" +} + +# ---------- FLOW MODE ---------- +BASE_COLOR="${WALLUST_COLORS[10]}" +GRAD1_COLOR="${WALLUST_COLORS[14]}" +GRAD2_COLOR="${WALLUST_COLORS[13]}" +GLOW_COLOR="${WALLUST_COLORS[15]}" + +MAX_POS=10 +GLOW_POS=0 + +function gradient_flow_color() { + local pos=$1 + local d=$(( pos - GLOW_POS )) + + # wrap distance (-9..9) + if (( d > MAX_POS/2 )); then d=$((d - MAX_POS)); fi + if (( d < -MAX_POS/2 )); then d=$((d + MAX_POS)); fi + + case "${d#-}" in + 0) echo "$GLOW_COLOR" ;; + 1) echo "$GRAD1_COLOR" ;; + 2) echo "$GRAD2_COLOR" ;; + *) echo "$BASE_COLOR" ;; + esac + + if (( pos == MAX_POS - 1 )); then + GLOW_POS=$(( (GLOW_POS + 1) % MAX_POS )) + fi +} + +# ---------- Main function ---------- + +function get_color() { + if [[ "$EFFECT_TYPE" == "wallust_random" && ${#WALLUST_COLORS[@]} -gt 0 ]]; then + wallust_random + elif [[ "$EFFECT_TYPE" == "gradient_flow" && ${#WALLUST_COLORS[@]} -ge 16 ]]; then + gradient_flow_color "$1" + else + random_hex + fi +} + +# border effect for ACTIVE window +hyprctl keyword general:col.active_border $(get_color 0) $(get_color 1) $(get_color 2) $(get_color 3) $(get_color 4) $(get_color 5) $(get_color 6) $(get_color 7) $(get_color 8) $(get_color 9) 270deg + +# border effect for INACTIVE windows +#hyprctl keyword general:col.inactive_border $(get_color 0) $(get_color 1) $(get_color 2) $(get_color 3) $(get_color 4) $(get_color 5) $(get_color 6) $(get_color 7) $(get_color 8) $(get_color 9) 270deg \ No newline at end of file diff --git a/config/hypr/UserScripts/RainbowBorders.sh b/config/hypr/UserScripts/RainbowBorders.sh deleted file mode 100755 index 67269b8a..00000000 --- a/config/hypr/UserScripts/RainbowBorders.sh +++ /dev/null @@ -1,89 +0,0 @@ -#!/usr/bin/env bash -# /* ---- πŸ’« https://github.com/JaKooLit πŸ’« ---- */ ## -# Smooth border cycling effect using Wallust palette or full rainbow - -# Possible values: "wallust_random", "rainbow", "gradient_flow" -EFFECT_TYPE="gradient_flow" - -WALLUST_COLORS_SOURCE="$HOME/.config/hypr/wallust/wallust-hyprland.conf" - -WALLUST_COLORS=() - -# ---------- LOAD WALLUST COLORS ---------- -if [[ "$EFFECT_TYPE" == "wallust_random" || "$EFFECT_TYPE" == "gradient_flow" ]]; then - # Accept either hex (0xffRRGGBB) or rgb(r,g,b) and normalize to 0xffRRGGBB - mapfile -t WALLUST_COLORS < <( - grep -E '^\$color[0-9]+' "$WALLUST_COLORS_SOURCE" | awk ' - function hex2(s){ return (length(s)==6 ? "0xff"s : ""); } - function rgb2(r,g,b){ return sprintf("0xff%02x%02x%02x", r, g, b); } - { - if (match($0, /0x([0-9a-fA-F]{8})/, m)) { print "0x" m[1]; next } - if (match($0, /#([0-9a-fA-F]{6})/, m)) { print hex2(m[1]); next } - if (match($0, /rgb\(([0-9]+),[ ]*([0-9]+),[ ]*([0-9]+)\)/, m)) { - print rgb2(m[1], m[2], m[3]); next - } - }' - ) - - if (( ${#WALLUST_COLORS[@]} == 0 )); then - # If wallust colors can't be loaded, fall back to random_hex - EFFECT_TYPE="rainbow" - fi -fi - -# ---------- RANDOM WALLUST COLORS ---------- -function wallust_random() { - echo "${WALLUST_COLORS[RANDOM % ${#WALLUST_COLORS[@]}]}" -} - -# ---------- RAINBOW COLORS ---------- -function random_hex() { - echo "0xff$(openssl rand -hex 3)" -} - -# ---------- FLOW MODE ---------- -BASE_COLOR="${WALLUST_COLORS[10]}" -GRAD1_COLOR="${WALLUST_COLORS[14]}" -GRAD2_COLOR="${WALLUST_COLORS[13]}" -GLOW_COLOR="${WALLUST_COLORS[15]}" - -MAX_POS=10 -GLOW_POS=0 - -function gradient_flow_color() { - local pos=$1 - local d=$(( pos - GLOW_POS )) - - # wrap distance (-9..9) - if (( d > MAX_POS/2 )); then d=$((d - MAX_POS)); fi - if (( d < -MAX_POS/2 )); then d=$((d + MAX_POS)); fi - - case "${d#-}" in - 0) echo "$GLOW_COLOR" ;; - 1) echo "$GRAD1_COLOR" ;; - 2) echo "$GRAD2_COLOR" ;; - *) echo "$BASE_COLOR" ;; - esac - - if (( pos == MAX_POS - 1 )); then - GLOW_POS=$(( (GLOW_POS + 1) % MAX_POS )) - fi -} - -# ---------- Main function ---------- - -function get_color() { - if [[ "$EFFECT_TYPE" == "wallust_random" && ${#WALLUST_COLORS[@]} -gt 0 ]]; then - wallust_random - elif [[ "$EFFECT_TYPE" == "gradient_flow" && ${#WALLUST_COLORS[@]} -ge 16 ]]; then - gradient_flow_color "$1" - else - random_hex - fi -} - -# border effect for ACTIVE window -hyprctl keyword general:col.active_border $(get_color 0) $(get_color 1) $(get_color 2) $(get_color 3) $(get_color 4) $(get_color 5) $(get_color 6) $(get_color 7) $(get_color 8) $(get_color 9) 270deg - -# border effect for INACTIVE windows -#hyprctl keyword general:col.inactive_border $(get_color 0) $(get_color 1) $(get_color 2) $(get_color 3) $(get_color 4) $(get_color 5) $(get_color 6) $(get_color 7) $(get_color 8) $(get_color 9) 270deg \ No newline at end of file diff --git a/config/hypr/configs/Startup_Apps.conf b/config/hypr/configs/Startup_Apps.conf index 2bf902cd..0cc5da11 100644 --- a/config/hypr/configs/Startup_Apps.conf +++ b/config/hypr/configs/Startup_Apps.conf @@ -33,8 +33,8 @@ exec-once = $scriptsDir/Hyprsunset.sh init exec-once = wl-paste --type text --watch cliphist store exec-once = wl-paste --type image --watch cliphist store -# Rainbow borders -exec-once = $UserScripts/RainbowBorders.sh +# Rainbow borders (disabled by default; use quick settings menu) +#exec-once = $UserScripts/RainbowBorders.sh # Here are list of features available but disabled by default diff --git a/copy.sh b/copy.sh index 31c66a0b..b061f4ac 100755 --- a/copy.sh +++ b/copy.sh @@ -355,7 +355,6 @@ fi printf "\n%.0s" {1..1} prompt_clock_12h "$LOG" printf "\n%.0s" {1..1} -prompt_rainbow_borders "$LOG" >/dev/null printf "\n%.0s" {1..1} prompt_express_upgrade "$EXPRESS_SUPPORTED" "$LOG" diff --git a/scripts/lib_prompts.sh b/scripts/lib_prompts.sh index a63afde3..bf6fafd7 100644 --- a/scripts/lib_prompts.sh +++ b/scripts/lib_prompts.sh @@ -209,27 +209,6 @@ apply_sddm_12h_format_sequoia() { fi } -# Rainbow borders toggle; returns "disabled" or "kept". -prompt_rainbow_borders() { - local log="$1" - echo "${NOTE} ${SKY_BLUE}By default, Rainbow Borders animation is enabled" - echo "${WARN} However, this uses a bit more CPU and Memory resources." - if ! read -r -p "${CAT} Do you want to disable Rainbow Borders animation? (y/N): " border_choice &1 | tee -a "$log" - echo "kept" - return - fi - if [[ "$border_choice" =~ ^[Yy]$ ]]; then - mv config/hypr/UserScripts/RainbowBorders.sh config/hypr/UserScripts/RainbowBorders.bak.sh - sed -i '/exec-once = \$UserScripts\/RainbowBorders.sh/s/^/#/' config/hypr/configs/Startup_Apps.conf - sed -i '/^[[:space:]]*animation = borderangle, 1, 180, liner, loop/s/^/#/' config/hypr/configs/UserAnimations.conf - echo "${OK} Rainbow borders are now disabled." 2>&1 | tee -a "$log" - echo "disabled" - else - echo "${NOTE} No changes made. Rainbow borders remain enabled." 2>&1 | tee -a "$log" - echo "kept" - fi -} # Express upgrade confirmation; may set EXPRESS_MODE=1. prompt_express_upgrade() { -- cgit v1.2.3 From 5aedcf78f579e7aef6d7309d0b1ea5b4c94f2ca0 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Mon, 19 Jan 2026 07:57:18 -0500 Subject: Changed SDDM wallpaper setting to a dedicated menu item On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/hypr/UserScripts/WallpaperEffects.sh modified: config/hypr/UserScripts/WallpaperSelect.sh modified: config/hypr/scripts/Kool_Quick_Settings.sh --- config/hypr/UserScripts/WallpaperEffects.sh | 40 -------------------------- config/hypr/UserScripts/WallpaperSelect.sh | 44 ----------------------------- config/hypr/scripts/Kool_Quick_Settings.sh | 2 ++ 3 files changed, 2 insertions(+), 84 deletions(-) (limited to 'config/hypr') diff --git a/config/hypr/UserScripts/WallpaperEffects.sh b/config/hypr/UserScripts/WallpaperEffects.sh index 89577efa..475969d6 100755 --- a/config/hypr/UserScripts/WallpaperEffects.sh +++ b/config/hypr/UserScripts/WallpaperEffects.sh @@ -106,43 +106,3 @@ fi main sleep 1 - -if [[ -n "$choice" ]]; then - # Resolve SDDM themes directory (standard and NixOS path) - sddm_themes_dir="" - if [ -d "/usr/share/sddm/themes" ]; then - sddm_themes_dir="/usr/share/sddm/themes" - elif [ -d "/run/current-system/sw/share/sddm/themes" ]; then - sddm_themes_dir="/run/current-system/sw/share/sddm/themes" - fi - - if [ -n "$sddm_themes_dir" ]; then - sddm_simple="$sddm_themes_dir/simple_sddm_2" - - # Only prompt if theme exists and its Backgrounds directory is writable - if [ -d "$sddm_simple" ] && [ -w "$sddm_simple/Backgrounds" ]; 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 SIMPLE SDDM v2 Theme" \ - --text-align=left \ - --title="SDDM Background" \ - --timeout=5 \ - --timeout-indicator=right \ - --button="yad-yes:0" \ - --button="yad-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 - - exec "$SCRIPTSDIR/sddm_wallpaper.sh" --effects - fi - fi - fi -fi diff --git a/config/hypr/UserScripts/WallpaperSelect.sh b/config/hypr/UserScripts/WallpaperSelect.sh index 3fd3b858..316a7cd4 100755 --- a/config/hypr/UserScripts/WallpaperSelect.sh +++ b/config/hypr/UserScripts/WallpaperSelect.sh @@ -99,49 +99,6 @@ menu() { done } -# Offer SDDM Simple Wallpaper Option (only for non-video wallpapers) -set_sddm_wallpaper() { - sleep 1 - - # Resolve SDDM themes directory (standard and NixOS path) - local sddm_themes_dir="" - if [ -d "/usr/share/sddm/themes" ]; then - sddm_themes_dir="/usr/share/sddm/themes" - elif [ -d "/run/current-system/sw/share/sddm/themes" ]; then - sddm_themes_dir="/run/current-system/sw/share/sddm/themes" - fi - - [ -z "$sddm_themes_dir" ] && return 0 - - local sddm_simple="$sddm_themes_dir/simple_sddm_2" - - # Only prompt if theme exists and its Backgrounds directory is writable - if [ -d "$sddm_simple" ] && [ -w "$sddm_simple/Backgrounds" ]; 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 SIMPLE SDDM v2 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/error.png" "Missing $terminal" "Install $terminal to enable setting of wallpaper background" - exit 1 - fi - - exec "$SCRIPTSDIR/sddm_wallpaper.sh" --normal - - fi - fi -} modify_startup_config() { local selected_file="$1" @@ -187,7 +144,6 @@ apply_image_wallpaper() { "$SCRIPTSDIR/Refresh.sh" sleep 1 - set_sddm_wallpaper } apply_video_wallpaper() { diff --git a/config/hypr/scripts/Kool_Quick_Settings.sh b/config/hypr/scripts/Kool_Quick_Settings.sh index 2437bd11..0cd58f48 100755 --- a/config/hypr/scripts/Kool_Quick_Settings.sh +++ b/config/hypr/scripts/Kool_Quick_Settings.sh @@ -191,6 +191,7 @@ Edit System Default Startup Apps Edit System Default Window Rules Edit System Default Settings --- UTILITIES --- +Set SDDM Wallpaper Choose Kitty Terminal Theme Configure Monitors (nwg-displays) Configure Workspace Rules (nwg-displays) @@ -226,6 +227,7 @@ main() { "Edit System Default Startup Apps") file="$configs/Startup_Apps.conf" ;; "Edit System Default Window Rules") file="$configs/WindowRules.conf" ;; "Edit System Default Settings") file="$configs/SystemSettings.conf" ;; + "Set SDDM Wallpaper") $scriptsDir/sddm_wallpaper.sh --normal ;; "Choose Kitty Terminal Theme") $scriptsDir/Kitty_themes.sh ;; "Configure Monitors (nwg-displays)") if ! command -v nwg-displays &>/dev/null; then -- cgit v1.2.3 From 358690aa87b756a4a6848942f9b63c8cb5cc5e02 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Mon, 19 Jan 2026 08:06:23 -0500 Subject: Added check for SDDM active On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/hypr/scripts/sddm_wallpaper.sh --- config/hypr/scripts/sddm_wallpaper.sh | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'config/hypr') diff --git a/config/hypr/scripts/sddm_wallpaper.sh b/config/hypr/scripts/sddm_wallpaper.sh index b83f800a..17640f40 100755 --- a/config/hypr/scripts/sddm_wallpaper.sh +++ b/config/hypr/scripts/sddm_wallpaper.sh @@ -38,6 +38,17 @@ elif [[ "$1" == "--effects" ]]; then mode="effects" fi +# Abort if SDDM is not running (avoid errors on non-SDDM systems) +if command -v systemctl >/dev/null 2>&1; then + if ! systemctl is-active --quiet sddm; then + notify-send -i "$iDIR/error.png" "SDDM" "SDDM is not running. Skipping SDDM wallpaper update." + exit 0 + fi +elif ! pidof sddm >/dev/null 2>&1; then + notify-send -i "$iDIR/error.png" "SDDM" "SDDM is not running. Skipping SDDM wallpaper update." + exit 0 +fi + # Extract colors from rofi wallust config extract_color() { -- cgit v1.2.3