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/scripts/Volume.sh | 63 +++++++++++++++++++++++++++---------------- 1 file changed, 40 insertions(+), 23 deletions(-) (limited to 'config/hypr/scripts') 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/scripts') 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/scripts') 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/scripts') 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 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/scripts') 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 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/scripts') 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 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/scripts') 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 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/scripts') 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/scripts') 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 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/scripts') 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 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/scripts') 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 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/scripts') 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/scripts') 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/scripts') 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 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/scripts') 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/scripts') 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/scripts') 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/scripts') 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/scripts') 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/scripts') 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/scripts') 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/scripts') 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/scripts') 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/scripts') 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/scripts') 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/scripts') 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 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/scripts') 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/scripts') 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/scripts') 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 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/scripts') 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/scripts') 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 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/scripts') 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/scripts') 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/scripts') 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/scripts') 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/scripts') 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/scripts') 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/scripts') 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 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/scripts') 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/scripts') 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