diff options
Diffstat (limited to 'config/hypr/UserScripts/RainbowBorders.bak.sh')
| -rwxr-xr-x | config/hypr/UserScripts/RainbowBorders.bak.sh | 136 |
1 files changed, 102 insertions, 34 deletions
diff --git a/config/hypr/UserScripts/RainbowBorders.bak.sh b/config/hypr/UserScripts/RainbowBorders.bak.sh index 7a9c7171..ac7c177c 100755 --- a/config/hypr/UserScripts/RainbowBorders.bak.sh +++ b/config/hypr/UserScripts/RainbowBorders.bak.sh @@ -6,6 +6,14 @@ # SPDX-License-Identifier: GPL-3.0-or-later # ================================================== # Smooth border cycling effect using Wallust palette or full rainbow +# +# Disabled by default as RainbowBorders.bak.sh. +# Enable / choose mode via Quick Settings (SUPER SHIFT + E → Rainbow Borders Mode). +# That renames this file to RainbowBorders.sh. +# +# Under Hyprland Lua config mode, hyprctl keyword is rejected +# ("keyword can't work with non-legacy parsers"). This script falls back to: +# hyprctl eval 'hl.config({ general = { col = { active_border = { colors = {...}, angle = N } } } })' # Possible values: "wallust_random", "rainbow", "gradient_flow" EFFECT_TYPE="gradient_flow" @@ -16,9 +24,9 @@ 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 ' + # 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); } { @@ -28,22 +36,22 @@ if [[ "$EFFECT_TYPE" == "wallust_random" || "$EFFECT_TYPE" == "gradient_flow" ]] 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 + 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[@]}]}" + echo "${WALLUST_COLORS[RANDOM % ${#WALLUST_COLORS[@]}]}" } # ---------- RAINBOW COLORS ---------- function random_hex() { - echo "0xff$(openssl rand -hex 3)" + echo "0xff$(openssl rand -hex 3)" } # ---------- FLOW MODE ---------- @@ -56,39 +64,99 @@ MAX_POS=10 GLOW_POS=0 function gradient_flow_color() { - local pos=$1 - local d=$(( pos - GLOW_POS )) + 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 + # 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 + 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 + if ((pos == MAX_POS - 1)); then + GLOW_POS=$(((GLOW_POS + 1) % MAX_POS)) + fi } -# ---------- Main function ---------- - +# ---------- 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" + 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 +} + +# Set a gradient border option for both legacy hyprlang and Lua config modes. +# Usage: set_gradient_border general:col.active_border color0 color1 ... [angledeg] +set_gradient_border() { + local option="$1" + shift + local angle="270" + local -a colors=() + local arg c lua_colors expr out + + for arg in "$@"; do + if [[ "$arg" =~ ^([0-9]+)deg$ ]]; then + angle="${BASH_REMATCH[1]}" else - random_hex + colors+=("$arg") fi + done + + ((${#colors[@]} > 0)) || return 1 + + # Legacy conf mode + if out="$(hyprctl keyword "$option" "${colors[@]}" "${angle}deg" 2>&1)"; then + return 0 + fi + + # Lua config mode rejects keyword; use hl.config via eval. + lua_colors="" + for c in "${colors[@]}"; do + [[ -n "$lua_colors" ]] && lua_colors+=", " + lua_colors+="\"${c}\"" + done + + case "$option" in + general:col.active_border) + expr="hl.config({ general = { col = { active_border = { colors = { ${lua_colors} }, angle = ${angle} } } } })" + ;; + general:col.inactive_border) + expr="hl.config({ general = { col = { inactive_border = { colors = { ${lua_colors} }, angle = ${angle} } } } })" + ;; + *) + printf '[RainbowBorders] unsupported option for Lua fallback: %s\n' "$option" >&2 + printf '[RainbowBorders] keyword error: %s\n' "$out" >&2 + return 1 + ;; + esac + + if out="$(hyprctl eval "$expr" 2>&1)"; then + return 0 + fi + + printf '[RainbowBorders] failed to set %s\n' "$option" >&2 + printf '[RainbowBorders] keyword error: %s\n' "$out" >&2 + printf '[RainbowBorders] eval error: %s\n' "$out" >&2 + return 1 } # 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 +set_gradient_border 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 +# border effect for INACTIVE windows (optional) +# set_gradient_border 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 |
