From 2d2f6198a92278a141c333926a94d8e82de0570d Mon Sep 17 00:00:00 2001 From: Ryan Garofano Date: Mon, 22 Dec 2025 18:05:31 -0800 Subject: feat: Add precise volume adjustment --- config/hypr/configs/Keybinds.conf | 2 ++ config/hypr/scripts/Volume.sh | 63 +++++++++++++++++++++++++-------------- 2 files changed, 42 insertions(+), 23 deletions(-) diff --git a/config/hypr/configs/Keybinds.conf b/config/hypr/configs/Keybinds.conf index 1ddbc81a..7d0e3fef 100644 --- a/config/hypr/configs/Keybinds.conf +++ b/config/hypr/configs/Keybinds.conf @@ -106,6 +106,8 @@ bindd = ALT, tab, bring active to top, bringactivetotop # Special Keys / Hot Keys bindeld = , xf86audioraisevolume, volume up, exec, $scriptsDir/Volume.sh --inc bindeld = , xf86audiolowervolume, volume down, exec, $scriptsDir/Volume.sh --dec +bindeld = ALT, xf86audioraisevolume, volume up precise, exec, $scriptsDir/Volume.sh --inc-precise +bindeld = ALT, xf86audiolowervolume, volume down precise, exec, $scriptsDir/Volume.sh --dec-precise bindld = , xf86AudioMicMute, toggle mic mute, exec, $scriptsDir/Volume.sh --toggle-mic bindld = , xf86audiomute, toggle mute, exec, $scriptsDir/Volume.sh --toggle bindld = , xf86Sleep, sleep, exec, systemctl suspend diff --git a/config/hypr/scripts/Volume.sh b/config/hypr/scripts/Volume.sh index 4c82f543..d870519c 100755 --- a/config/hypr/scripts/Volume.sh +++ b/config/hypr/scripts/Volume.sh @@ -44,7 +44,7 @@ inc_volume() { if [ "$(pamixer --get-mute)" == "true" ]; then toggle_mute else - pamixer -i 5 --allow-boost --set-limit 150 && notify_user + pamixer -i "$1" --allow-boost --set-limit 150 && notify_user fi } @@ -53,7 +53,7 @@ dec_volume() { if [ "$(pamixer --get-mute)" == "true" ]; then toggle_mute else - pamixer -d 5 && notify_user + pamixer -d "$1" && notify_user fi } @@ -120,24 +120,41 @@ dec_mic_volume() { } # Execute accordingly -if [[ "$1" == "--get" ]]; then - get_volume -elif [[ "$1" == "--inc" ]]; then - inc_volume -elif [[ "$1" == "--dec" ]]; then - dec_volume -elif [[ "$1" == "--toggle" ]]; then - toggle_mute -elif [[ "$1" == "--toggle-mic" ]]; then - toggle_mic -elif [[ "$1" == "--get-icon" ]]; then - get_icon -elif [[ "$1" == "--get-mic-icon" ]]; then - get_mic_icon -elif [[ "$1" == "--mic-inc" ]]; then - inc_mic_volume -elif [[ "$1" == "--mic-dec" ]]; then - dec_mic_volume -else - get_volume -fi \ No newline at end of file +case "$1" in +"--get") + get_volume + ;; +"--inc") + inc_volume 5 + ;; +"--inc-precise") + inc_volume 1 + ;; +"--dec") + dec_volume 5 + ;; +"--dec-precise") + dec_volume 1 + ;; +"--toggle") + toggle_mute + ;; +"--toggle-mic") + toggle_mic + ;; +"--get-icon") + get_icon + ;; +"--get-mic-icon") + get_mic_icon + ;; +"--mic-inc") + inc_mic_volume + ;; +"--mic-dec") + dec_mic_volume + ;; +*) + get_volume + ;; +esac -- cgit v1.2.3 From 7373df1e73f2adc5669b77d431fd8b16c2ea60f8 Mon Sep 17 00:00:00 2001 From: Donald Williams <129223418+dwilliam62@users.noreply.github.com> Date: Mon, 22 Dec 2025 21:43:34 -0500 Subject: Add optional keybinding for audio increment/decrement Introduced a new keybinding feature for audio control. --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ebbb51d8..e4895436 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # 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 + + ## v2.3.18 β€” 2025-12-10 ## FIXES: -- cgit v1.2.3 From 4da114f5e42f5b3c95109c9737ece7fcfbd2bd39 Mon Sep 17 00:00:00 2001 From: Donald Williams <129223418+dwilliam62@users.noreply.github.com> Date: Mon, 22 Dec 2025 21:56:40 -0500 Subject: Revise README for clarity and corrections Updated README to improve clarity and fix typos. --- README.md | 41 ++++++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index d0d7169f..dd347e28 100644 --- a/README.md +++ b/README.md @@ -62,8 +62,8 @@ https://github.com/user-attachments/assets/49bc12b2-abaf-45de-a21c-67aacd9bb872 sh <(curl -L https://raw.githubusercontent.com/JaKooLit/Hyprland-Dots/main/Distro-Hyprland.sh) ``` -- you can now use above command to automatically clone the Distro-Hyprland install scripts below -- it will clone the install scripts and start the `install.sh` 😎 +- You can use the above command to automatically clone the `Distro-Hyprland` install scripts +- It will clone the install script and start the `install.sh` 😎 ### πŸ‘οΈβ€πŸ—¨οΈ My Hyprland install Scripts πŸ‘οΈβ€πŸ—¨οΈ @@ -88,8 +88,8 @@ sh <(curl -L https://raw.githubusercontent.com/JaKooLit/Hyprland-Dots/main/Distr ### πŸͺ§ Attention πŸͺ§ -- This repo does NOT contain or will NOT install any packages. These are only pre-configured-hyprland configs or dotfiles -- refer to install scripts what packages needed to install... but atleast, Hyprland packages is needed 😏😏😏 duh!! +- This repo does not install any packages. This repo only contains pre-configured-hyprland configs aka `dotfiles` +- Refer to the install scripts for what packages needed to install. At mimimum, the Hyprland packages are needed 😏😏😏 duh!! - This repo will be pulled by the Distro-Hyprland install scripts above if you opt to download pre-configured dots ### πŸ‘€ Screenshots πŸ‘€ @@ -101,16 +101,23 @@ sh <(curl -L https://raw.githubusercontent.com/JaKooLit/Hyprland-Dots/main/Distr - To easily track changes, I will be updating the [CHANGELOGS](https://github.com/JaKooLit/Hyprland-Dots/wiki/Changelogs) Screenshots will be included if worth mentioning the changes! > [!NOTE] -> Kindly note that by defeault, Kools Dots are adjusted / configured for 2k (1440p) display without scaling. +> Kindly note that by default, Kools Dots are adjusted / configured for 2k (1440p) display without scaling. ### πŸ’₯ Copying / Installation / Update instructions πŸ’₯ - [`MORE INFO HERE`](https://github.com/JaKooLit/Hyprland-Dots/wiki/Install_&_Update) > [!Note] - > The auto copy script "copy.sh" will create backups of intended directories to be copied. However, still a good idea to manually backup just incase script failed to backup! -- clone this repo by using git. Change directory, make executable and run the script - -> to download from Master branch + > The auto copy script `copy.sh` will create backups of intended directories to be copied. + > However, it's still a good idea to manually backup just incase script fails to backup your configuration. + > If you already have a hyprland configuration, uninstall it first, or create a new user, and install it with that user + +- Clone this repo by using `git`. +- Change directory, i.e. `cd Arch-Hyprland` +- Make `install.sh` executable `chmod +x ./install.sh` +- Run the script `./install.sh` + +> To download from Master branch +> Note: Ubuntu is exception, it has version specific branches ```bash git clone --depth=1 https://github.com/JaKooLit/Hyprland-Dots.git @@ -118,7 +125,8 @@ cd Hyprland-Dots ``` > to download from Development branch (development and testing) -> Not recommeded for non-testing systems +> Not recommeded for non-testing systems!! +> REALLY, not recommended. ```bash git clone --depth=1 https://github.com/JaKooLit/Hyprland-Dots.git -b development @@ -162,9 +170,9 @@ chmod +x upgrade.sh #### ⚠️⚠️⚠️ ATTENTION - BACKUPS CREATED by SCRIPT > [!CAUTION] -> copy.sh, release.sh and even upgrade.sh creates a backup! -> Kindly investigate manually contents on your $HOME/.config -> Delete manually all the backups which you dont need +> `copy.sh`, `release.sh` and even `upgrade.sh` creates a backup! +> Kindly investigate manually contents on your `$HOME/.config` +> Delete manually any backups which you dont want. #### πŸ›ŽοΈ a small note on wallpapers @@ -172,7 +180,8 @@ chmod +x upgrade.sh #### ⚠️⚠️⚠️ A MUST! after copying / Installing these dots -- Press SUPER W and set a wallpaper. This is also to initiate wallust for waybar, kitty (tty) and rofi themes. However, If you use the copy.sh or the release.sh, there will be a preset initial Wallpaper and you dont have to do this +- Press `SUPER W` and set a wallpaper. This is also to initiate wallust for waybar, kitty (tty) and rofi themes. +- However, If you use the `copy.sh` or the `release.sh`, there will be a preset initial Wallpaper and you dont have to do this - Nvidia Owners. Make sure to edit your `~/.config/hypr/UserConfigs/ENVariables.conf` (highly recommended). @@ -197,11 +206,13 @@ chmod +x upgrade.sh #### πŸ™ Special request -- If you have improvements on the dotfiles or configuration, feel free to submit a PR for improvement. I always welcome improvements as I am also just learning just like you guys! +- If you have improvements on the dotfiles or configuration, feel free to submit a PR for improvement. +- I always welcome improvements as I am also just learning just like you guys! #### ✍️ Contributing - Want to contribute? Click [`HERE`](https://github.com/JaKooLit/Hyprland-Dots/blob/main/CONTRIBUTING.md) for a guide how to contribute +> Thanks to all who have contributed code, or support on the Discord server. You efforts are greatly appreciated #### πŸ€·β€β™‚οΈ TO DO! -- 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(-) 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(-) 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 f7725c6feeebdd1046e7bc3109f24bf40087da49 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Wed, 24 Dec 2025 23:54:53 -0500 Subject: Updated CHANGELOG On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: CHANGELOG.md --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fa37c8f9..3b924b5c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,9 @@ - Thanks [rgarofono](https://github.com/rgarofano) for the code - Fixed: - Switch Layout was looking in wrong location + - SUPER - J/K not working in both `master` and `dwindle` layouts + - You also get notification message on layout change + - Thanks [@suresh466](https://github.com/suresh466) for fixing it ## v2.3.18 β€” 2025-12-10 -- 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(-) 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 cafaa576cbe7018f4c3ef3301fde16b807e74190 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Mon, 29 Dec 2025 06:23:59 -0500 Subject: Updated CHANGELOG --- CHANGELOG.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3b924b5c..fc6bf78e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Changelog β€” JAK's Hyprland Dotfiles -## v2.3.19 β€” 2025-12-22 +## v2.3.19 + +- 2025-12-29 + - Fixed pathing in Wallust script + - Thank you [Lumethra](https://github.com/Lumethra) + +β€” 2025-12-22 - Added: - Optional keybinding to increment/decrement audio in 1% steps vs. 5% -- cgit v1.2.3 From 2307f03405f6b7f8695f190089d24a6c29dab09f Mon Sep 17 00:00:00 2001 From: Maximilian Zhu Date: Mon, 29 Dec 2025 12:51:57 +0100 Subject: Update: Enhance Weather.sh to get city from IP address Added functionality to retrieve current city based on IP address with fallbacks and manual setting. --- config/hypr/UserScripts/Weather.sh | 48 ++++++++++++++++++++++++++++++++------ 1 file changed, 41 insertions(+), 7 deletions(-) diff --git a/config/hypr/UserScripts/Weather.sh b/config/hypr/UserScripts/Weather.sh index ac9abc13..4588ed1d 100755 --- a/config/hypr/UserScripts/Weather.sh +++ b/config/hypr/UserScripts/Weather.sh @@ -2,16 +2,50 @@ # /* ---- πŸ’« https://github.com/JaKooLit πŸ’« ---- */ ## # weather info from wttr. https://github.com/chubin/wttr.in # Remember to add city +# Function to get current city from IP address with fallback + +# Get your current location with your IP adress +get_current_city() { + local city + + # First try: ipinfo.io + local location_data=$(curl -fsS "https://ipinfo.io/json" 2>/dev/null) + if [ $? -eq 0 ] && [ -n "$location_data" ]; then + city=$(echo "$location_data" | grep -o '"city"[[:space:]]*:[[:space:]]*"[^"]*"' | cut -d'"' -f4) + if [ -n "$city" ]; then + echo "$city" + return 0 + fi + fi + + # Fallback: ipapi.co + city=$(curl -fsS "https://ipapi.co/json" 2>/dev/null | grep -o '"city"[[:space:]]*:[[:space:]]*"[^"]*"' | cut -d'"' -f4) + if [ -n "$city" ]; then + echo "$city" + return 0 + fi + + # Last resort: ipwho.is + city=$(curl -fsS "https://ipwho.is/" 2>/dev/null | grep -o '"city"[[:space:]]*:[[:space:]]*"[^"]*"' | cut -d'"' -f4) + if [ -n "$city" ]; then + echo "$city" + return 0 + fi + + # If all fail + echo "Unknown" >&2 + return 1 +} -city="" - +city=$(get_current_city) -# if city is blank, use https://ipapi.co/json to get location from IP -if [ -z "$city" ]; then - city=$(curl -fsS https://ipapi.co/json | grep city | cut -f4 -d'"') +# If city is empty, that means the IP check failed, which means, we should use manual setting +if [ -z "$city" ] || [ "$city" = "Unknown" ]; then + # SET YOUR MANUAL CITY HERE + city=" " # ← Change this to your preferred city + echo "Using manual city: $city" >&2 fi - # URL-encode city for safe use in URLs encoded_city="$city" if command -v python3 >/dev/null 2>&1; then @@ -206,4 +240,4 @@ tooltip_json=$(json_escape "${weather[0]}: $temperature $cond_disp") printf '{"text":"%s", "alt":"%s", "tooltip":"%s"}\n' "$text_json" "$alt_json" "$tooltip_json" # Write a two-line cache with an actual newline between lines -printf ' %s \n%s %s\n' "$temperature" "$condition" "${weather[1]}" > "$HOME/.cache/.weather_cache" \ No newline at end of file +printf ' %s \n%s %s\n' "$temperature" "$condition" "${weather[1]}" > "$HOME/.cache/.weather_cache" -- cgit v1.2.3 From 59713a66e3dce8b2c006dc1ce7847b761d759147 Mon Sep 17 00:00:00 2001 From: Maximilian Zhu Date: Mon, 29 Dec 2025 13:02:07 +0100 Subject: Add network check to WeatherWrap script Added a network connectivity check function to determine if the script can proceed with fetching weather data. If no network is available, it returns an offline status. (It will show an offline Icon in Waybar after waking up from `systemctl suspend` or `systemctl hibernate` and having no network. If you click it in waybar it will recheck, but this is unintended) --- config/hypr/UserScripts/WeatherWrap.sh | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/config/hypr/UserScripts/WeatherWrap.sh b/config/hypr/UserScripts/WeatherWrap.sh index 10c125dc..5b266930 100755 --- a/config/hypr/UserScripts/WeatherWrap.sh +++ b/config/hypr/UserScripts/WeatherWrap.sh @@ -6,6 +6,30 @@ SCRIPT_DIR="$(dirname "$0")" PY_SCRIPT="$SCRIPT_DIR/Weather.py" BASH_FALLBACK="$SCRIPT_DIR/Weather.sh" +# Function to check network connectivity +check_network() { + # Try multiple methods to check network + if ping -c1 -W2 8.8.8.8 >/dev/null 2>&1; then + return 0 + fi + + if ping -c1 -W2 1.1.1.1 >/dev/null 2>&1; then + return 0 + fi + + if curl -s --connect-timeout 3 "https://ipinfo.io" >/dev/null 2>&1; then + return 0 + fi + + return 1 +} + +# If no network, return offline status immediately +if ! check_network; then + echo '{"text":"σ°–ͺ", "alt":"Offline", "tooltip":"No network connection"}' + exit 0 +fi + run_fallback() { if [ -f "$BASH_FALLBACK" ]; then # Invoke via bash to avoid requiring +x and ensure consistent shell @@ -30,4 +54,4 @@ else echo "python3 not found in PATH β€” falling back to Weather.sh" >&2 run_fallback "$@" exit $? -fi \ No newline at end of file +fi -- cgit v1.2.3 From 7389aef59d045c622e24797d7e46bdbd8d222f38 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Tue, 30 Dec 2025 12:19:13 -0500 Subject: Current WindowRules-config-v3 file Opactity keybinding not working SUPERCTRL+O On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/hypr/configs/WindowRules-config-v3.conf --- config/hypr/configs/WindowRules-config-v3.conf | 214 +++++++++++-------------- 1 file changed, 95 insertions(+), 119 deletions(-) diff --git a/config/hypr/configs/WindowRules-config-v3.conf b/config/hypr/configs/WindowRules-config-v3.conf index c4a8a624..ba179461 100644 --- a/config/hypr/configs/WindowRules-config-v3.conf +++ b/config/hypr/configs/WindowRules-config-v3.conf @@ -1,66 +1,82 @@ # /* ---- πŸ’« https://github.com/JaKooLit πŸ’« ---- */ # -# For window rules and layerrules +# Vendor defaults for window rules and layerrules # See https://wiki.hyprland.org/Configuring/Window-Rules/ for more # NOTES: This is only for Hyprland > 0.52.1 -# note: This should NOT be implemented on Debian and Ubuntu -# Vendor defaults for window rules and layerrules +# note for ja: This should NOT be implemented on Debian and Ubuntu # windowrule - tags - add apps under appropriate tag to use the same settings +# browser tags windowrule = match:class ^([Ff]irefox|org.mozilla.firefox|[Ff]irefox-esr|[Ff]irefox-bin)$, tag +browser windowrule = match:class ^([Gg]oogle-chrome(-beta|-dev|-unstable)?)$, tag +browser -windowrule = match:class ^(chrome-.+-Default)$ # Chrome PWAs, tag +browser +windowrule = match:class ^(chrome-.+-Default)$, tag +browser windowrule = match:class ^([Cc]hromium)$, tag +browser windowrule = match:class ^([Mm]icrosoft-edge(-stable|-beta|-dev|-unstable))$, tag +browser windowrule = match:class ^(Brave-browser(-beta|-dev|-unstable)?)$, tag +browser windowrule = match:class ^([Tt]horium-browser|[Cc]achy-browser)$, tag +browser windowrule = match:class ^(zen-alpha|zen)$, tag +browser +# notif tags windowrule = match:class ^(swaync-control-center|swaync-notification-window|swaync-client|class)$, tag +notif +# KooL settings tag windowrule = match:title ^(KooL Quick Cheat Sheet)$, tag +KooL_Cheat windowrule = match:title ^(KooL Hyprland Settings)$, tag +KooL_Settings windowrule = match:class ^(nwg-displays|nwg-look)$, tag +KooL-Settings +# terminal tags windowrule = match:class ^(Alacritty|kitty|kitty-dropterm)$, tag +terminal +# email tags windowrule = match:class ^([Tt]hunderbird|org.gnome.Evolution)$, tag +email windowrule = match:class ^(eu.betterbird.Betterbird)$, tag +email +# project tags windowrule = match:class ^(codium|codium-url-handler|VSCodium)$, tag +projects windowrule = match:class ^(VSCode|code|code-url-handler)$, tag +projects -windowrule = match:class ^(jetbrains-.+)$ # JetBrains IDEs, tag +projects +windowrule = match:class ^(jetbrains-.+)$, tag +projects +# screenshare tags windowrule = match:class ^(com.obsproject.Studio)$, tag +screenshare +# IM tags windowrule = match:class ^([Dd]iscord|[Ww]ebCord|[Vv]esktop)$, tag +im windowrule = match:class ^([Ff]erdium)$, tag +im windowrule = match:class ^([Ww]hatsapp-for-linux)$, tag +im windowrule = match:class ^(ZapZap|com.rtosta.zapzap)$, tag +im windowrule = match:class ^(org.telegram.desktop|io.github.tdesktop_x64.TDesktop)$, tag +im windowrule = match:class ^(teams-for-linux)$, tag +im -windowrule = match:class ^(im.riot.Riot|Element)$ # Element Matrix client, tag +im +windowrule = match:class ^(im.riot.Riot|Element)$, tag +im +# game tags windowrule = match:class ^(gamescope)$, tag +games -windowrule = match:class ^(steam_app_\d+)$, tag +games +windowrule = match:class ^(steam_app_\\d+)$, tag +games +# gamestore tags windowrule = match:class ^([Ss]team)$, tag +gamestore windowrule = match:title ^([Ll]utris)$, tag +gamestore windowrule = match:class ^(com.heroicgameslauncher.hgl)$, tag +gamestore +# file-manager tags windowrule = match:class ^([Tt]hunar|org.gnome.Nautilus|[Pp]cmanfm-qt)$, tag +file-manager windowrule = match:class ^(app.drey.Warp)$, tag +file-manager +# wallpaper tags windowrule = match:class ^([Ww]aytrogen)$, tag +wallpaper + +# multimedia tags windowrule = match:class ^([Aa]udacious)$, tag +multimedia + +# multimedia-video tags windowrule = match:class ^([Mm]pv|vlc)$, tag +multimedia_video +# settings tags windowrule = match:title ^(ROG Control)$, tag +settings -windowrule = match:class ^(wihotspot(-gui)?)$ # wifi hotspot, tag +settings -windowrule = match:class ^([Bb]aobab|org.gnome.[Bb]aobab)$ # Disk usage analyzer, tag +settings +windowrule = match:class ^(wihotspot(-gui)?)$, tag +settings +windowrule = match:class ^([Bb]aobab|org.gnome.[Bb]aobab)$, tag +settings windowrule = match:class ^(gnome-disks|wihotspot(-gui)?)$, tag +settings windowrule = match:title (Kvantum Manager), tag +settings -windowrule = match:class ^(file-roller|org.gnome.FileRoller)$ # archive manager, tag +settings +windowrule = match:class ^(file-roller|org.gnome.FileRoller)$, tag +settings windowrule = match:class ^(nm-applet|nm-connection-editor|blueman-manager)$, tag +settings windowrule = match:class ^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$, tag +settings windowrule = match:class ^(qt5ct|qt6ct|[Yy]ad)$, tag +settings @@ -68,137 +84,97 @@ windowrule = match:class (xdg-desktop-portal-gtk), tag +settings windowrule = match:class ^(org.kde.polkit-kde-authentication-agent-1)$, tag +settings windowrule = match:class ^([Rr]ofi)$, tag +settings -windowrule = match:class ^(gnome-system-monitor|org.gnome.SystemMonitor|io.missioncenter.MissionCenter)$ # system monitor, tag +viewer -windowrule = match:class ^(evince)$ # document viewer, tag +viewer -windowrule = match:class ^(eog|org.gnome.Loupe)$ # image viewer, tag +viewer +# viewer tags +windowrule = match:class ^(gnome-system-monitor|org.gnome.SystemMonitor|io.missioncenter.MissionCenter)$, tag +viewer +windowrule = match:class ^(evince)$, tag +viewer +windowrule = match:class ^(eog|org.gnome.Loupe)$, tag +viewer -windowrule = match:tag multimedia_video*, noblur -windowrule = match:tag multimedia_video*, opacity 1.0 +# Some special override rules +windowrule = match:tag multimedia_video, no_blur on +windowrule = match:tag multimedia_video, opacity 1.0 # POSITION -windowrule = match:tag KooL_Cheat*, center -windowrule = match:class ([Tt]hunar) title negative:(.*[Tt]hunar.*), center -windowrule = match:title ^(ROG Control)$, center -windowrule = match:tag KooL-Settings*, center -windowrule = match:title ^(Keybindings)$, center -windowrule = match:class ^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$, center -windowrule = match:class ^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$, center -windowrule = match:class ^([Ff]erdium)$, center +# windowrule = match:floating true, center on +windowrule = match:tag KooL_Cheat, center on +windowrule = match:class ([Tt]hunar) match:title negative:(.*[Tt]hunar.*), center on +windowrule = match:title ^(ROG Control)$, center on +windowrule = match:tag KooL-Settings, center on +windowrule = match:title ^(Keybindings)$, center on +windowrule = match:class ^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$, center on +windowrule = match:class ^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$, center on +windowrule = match:class ^([Ff]erdium)$, center on windowrule = match:title ^(Picture-in-Picture)$, move 72% 7% -#windowrule = move 72% 7%,title:^(Firefox)$ # windowrule to avoid idle for fullscreen apps -#windowrule = idleinhibit fullscreen, class:^(*)$ -#windowrule = idleinhibit fullscreen, title:^(*)$ -windowrule = match:fullscreen 1, idleinhibit fullscreen - -# windowrule move to workspace -#windowrule = workspace 1, tag:email* -#windowrule = workspace 2, tag:browser* -#windowrule = workspace 3, class:^([Tt]hunar)$ -#windowrule = workspace 3, tag:projects* -#windowrule = workspace 5, tag:gamestore* -#windowrule = workspace 7, tag:im* -#windowrule = workspace 8, tag:games* - -# windowrule move to workspace (silent) -#windowrule = workspace 4 silent, tag:screenshare* -#windowrule = workspace 6 silent, class:^(virt-manager)$ -#windowrule = workspace 6 silent, class:^(.virt-manager-wrapped)$ -#windowrule = workspace 9 silent, tag:multimedia* +windowrule = match:fullscreen true, idle_inhibit fullscreen # FLOAT -windowrule = match:tag KooL_Cheat*, float -windowrule = match:tag wallpaper*, float -windowrule = match:tag settings*, float -windowrule = match:tag viewer*, float -windowrule = match:tag KooL-Settings*, float -windowrule = match:class ([Zz]oom|onedriver|onedriver-launcher)$, float -windowrule = match:class (org.gnome.Calculator) title (Calculator), float -windowrule = match:class ^(mpv|com.github.rafostar.Clapper)$, float -windowrule = match:class ^([Qq]alculate-gtk)$, float -#windowrule = float, class:^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$ -windowrule = match:class ^([Ff]erdium)$, float -windowrule = match:title ^(Picture-in-Picture)$, float -#windowrule = float, title:^(Firefox)$ +windowrule = match:tag KooL_Cheat, float on +windowrule = match:tag wallpaper, float on +windowrule = match:tag settings, float on +windowrule = match:tag viewer, float on +windowrule = match:tag KooL-Settings, float on +windowrule = match:class ([Zz]oom|onedriver|onedriver-launcher), float on +windowrule = match:class (org.gnome.Calculator) match:title (Calculator), float on +windowrule = match:class ^(mpv|com.github.rafostar.Clapper)$, float on +windowrule = match:class ^([Qq]alculate-gtk)$, float on +windowrule = match:class ^([Ff]erdium)$, float on +windowrule = match:title ^(Picture-in-Picture)$, float on # windowrule - ######### float popups and dialogue ####### -windowrule = match:title ^(Authentication Required)$, float -windowrule = match:title ^(Authentication Required)$, center -windowrule = match:class (codium|codium-url-handler|VSCodium) title negative:(.*codium.*|.*VSCodium.*), float -windowrule = match:class ^(com.heroicgameslauncher.hgl)$ title negative:(Heroic Games Launcher), float -windowrule = match:class ^([Ss]team)$ title negative:^([Ss]team)$, float -windowrule = match:class ([Tt]hunar) title negative:(.*[Tt]hunar.*), float -windowrule = match:title ^(Add Folder to Workspace)$, float -windowrule = match:title ^(Add Folder to Workspace)$, size 70% 60% -windowrule = match:title ^(Add Folder to Workspace)$, center -windowrule = match:title ^(Save As)$, float -windowrule = match:title ^(Save As)$, size 70% 60% -windowrule = match:title ^(Save As)$, center -windowrule = match:initialTitle (Open Files), float -windowrule = match:initialTitle (Open Files), size 70% 60% -windowrule = match:title ^(SDDM Background)$ #KooL's Dots YAD for setting SDDM background, float -windowrule = match:title ^(SDDM Background)$ #KooL's Dots YAD for setting SDDM background, center -windowrule = match:title ^(SDDM Background)$ #KooL's Dots YAD for setting SDDM background, size 16% 12% +windowrule = match:title ^(Authentication Required)$, float on, center on +windowrule = match:class (codium|codium-url-handler|VSCodium) match:title negative:(.*codium.*|.*VSCodium.*), float on +windowrule = match:class ^(com.heroicgameslauncher.hgl)$ match:title negative:(Heroic Games Launcher), float on +windowrule = match:class ^([Ss]team)$ match:title negative:^([Ss]team)$, float on +windowrule = match:class ([Tt]hunar) match:title negative:(.*[Tt]hunar.*), float on + +windowrule = match:title ^(Add Folder to Workspace)$, float on, size (monitor_w*0.7) (monitor_h*0.6), center on + +windowrule = match:title ^(Save As)$, float on, size (monitor_w*0.7) (monitor_h*0.6), center on + +windowrule = match:initial_title (Open Files), float on, size (monitor_w*0.7) (monitor_h*0.6) + +windowrule = match:title ^(SDDM Background)$, float on, center on, size (monitor_w*0.16) (monitor_h*0.12) + +# YAD dialog for wallpaper confirmation +windowrule = match:class ^(yad)$ match:title ^(YAD)$, float on, center on, size (monitor_w*0.2) (monitor_h*0.2) # END of float popups and dialogue ####### # OPACITY -windowrule = match:tag browser*, opacity 0.99 0.8 -windowrule = match:tag projects*, opacity 0.9 0.8 -windowrule = match:tag im*, opacity 0.94 0.86 -windowrule = match:tag multimedia*, opacity 0.94 0.86 -windowrule = match:tag file-manager*, opacity 0.9 0.8 -windowrule = match:tag terminal*, opacity 0.9 0.7 -windowrule = match:tag settings*, opacity 0.8 0.7 -windowrule = match:tag viewer*, opacity 0.82 0.75 -windowrule = match:tag wallpaper*, opacity 0.9 0.7 +windowrule = match:tag browser, opacity 0.99 0.8 +windowrule = match:tag projects, opacity 0.9 0.8 +windowrule = match:tag im, opacity 0.94 0.86 +windowrule = match:tag multimedia, opacity 0.94 0.86 +windowrule = match:tag file-manager, opacity 0.9 0.8 +windowrule = match:tag terminal, opacity 0.9 0.7 +windowrule = match:tag settings, opacity 0.8 0.7 +windowrule = match:tag viewer, opacity 0.82 0.75 +windowrule = match:tag wallpaper, opacity 0.9 0.7 windowrule = match:class ^(gedit|org.gnome.TextEditor|mousepad)$, opacity 0.8 0.7 windowrule = match:class ^(deluge)$, opacity 0.9 0.8 -windowrule = match:class ^(seahorse)$ # gnome-keyring gui, opacity 0.9 0.8 +windowrule = match:class ^(seahorse)$, opacity 0.9 0.8 windowrule = match:title ^(Picture-in-Picture)$, opacity 0.95 0.75 # SIZE -windowrule = match:tag KooL_Cheat*, size 65% 90% -windowrule = match:tag wallpaper*, size 70% 70% -windowrule = match:tag settings*, size 70% 70% -windowrule = match:class ^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$, size 60% 70% -windowrule = match:class ^([Ff]erdium)$, size 60% 70% - -#windowrule = size 25% 25%, title:^(Picture-in-Picture)$ -#windowrule = size 25% 25%, title:^(Firefox)$ +windowrule = match:tag KooL_Cheat, size (monitor_w*0.65) (monitor_h*0.9) +windowrule = match:tag wallpaper, size (monitor_w*0.7) (monitor_h*0.7) +windowrule = match:tag settings, size (monitor_w*0.7) (monitor_h*0.7) +windowrule = match:class ^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$, size (monitor_w*0.6) (monitor_h*0.7) +windowrule = match:class ^([Ff]erdium)$, size (monitor_w*0.6) (monitor_h*0.7) # PINNING -windowrule = match:title ^(Picture-in-Picture)$, pin -#windowrule = pin,title:^(Firefox)$ - -# windowrule - extras -windowrule = match:title ^(Picture-in-Picture)$, keepaspectratio +windowrule = match:title ^(Picture-in-Picture)$, pin on, keep_aspect_ratio on # BLUR & FULLSCREEN -windowrule = match:tag games*, noblur -windowrule = match:tag games*, fullscreen - -#This not gonna take the focus to the window that appears when hovering over some of the parts of the IntelliJ Products -windowrule = match:class ^(jetbrains-*), noinitialfocus -windowrule = match:title ^(wind.*)$, noinitialfocus +windowrule = match:tag games, no_blur on, fullscreen 0 +windowrule = match:tag games, fullscreen 0 -#windowrule = bordercolor rgb(EE4B55) rgb(880808), fullscreen:1 -#windowrule = bordercolor rgb(282737) rgb(1E1D2D), floating:1 -#windowrule = opacity 0.8 0.8, pinned:1 +# This not gonna take the focus to the window that appears when hovering over some of the parts of the IntelliJ Products +windowrule = match:class ^(jetbrains-*), no_initial_focus on +windowrule = match:title ^(wind.*)$, no_initial_focus on # LAYER RULES -layerrule = blur, rofi -layerrule = ignorezero, rofi -layerrule = blur, notifications -layerrule = ignorezero, notifications -layerrule = blur, quickshell:overview -layerrule = ignorezero, quickshell:overview -layerrule = ignorealpha 0.5, quickshell:overview - -#layerrule = ignorealpha 0.5, tag:notif* -#layerrule = ignorezero, class:^([Rr]ofi)$ -#layerrule = blur, class:^([Rr]ofi)$ -#layerrule = unset,class:^([Rr]ofi)$ -#layerrule = ignorezero, -#layerrule = ignorezero, overview -#layerrule = blur, overview +layerrule = match:namespace rofi, blur on +layerrule = match:namespace notifications, blur on +layerrule = match:namespace quickshell:overview, blur on +layerrule = match:namespace quickshell:overview, ignore_alpha 0.5 -- cgit v1.2.3 From 330a934953fb79c56c60e2520210f8686b4c5459 Mon Sep 17 00:00:00 2001 From: brockar Date: Tue, 30 Dec 2025 18:41:59 -0300 Subject: fix: opaque toggle fis this: https://github.com/JaKooLit/Arch-Hyprland/issues/352 --- config/hypr/configs/Keybinds.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/hypr/configs/Keybinds.conf b/config/hypr/configs/Keybinds.conf index ddc516bc..43bd1e94 100644 --- a/config/hypr/configs/Keybinds.conf +++ b/config/hypr/configs/Keybinds.conf @@ -58,7 +58,7 @@ bindd = $mainMod SHIFT, M, online music, exec, $UserScripts/RofiBeats.sh bindd = $mainMod, W, select wallpaper, exec, $UserScripts/WallpaperSelect.sh bindd = $mainMod SHIFT, W, wallpaper effects, exec, $UserScripts/WallpaperEffects.sh bindd = CTRL ALT, W, random wallpaper, exec, $UserScripts/WallpaperRandom.sh -bindd = $mainMod CTRL, O, toggle active window opacity, exec, hyprctl setprop active opaque toggle +bindd = $mainMod CTRL, O, toggle active window opacity, setprop, active opaque toggle bindd = $mainMod SHIFT, K, search keybinds, exec, $scriptsDir/KeyBinds.sh bindd = $mainMod SHIFT, A, animations menu, exec, $scriptsDir/Animations.sh bindd = $mainMod SHIFT, O, change oh-my-zsh theme, exec, $UserScripts/ZshChangeTheme.sh -- cgit v1.2.3 From d05f22e5f4e92827ea69911cdd3dfc83c64c655c Mon Sep 17 00:00:00 2001 From: JaΓ«l Champagne Gareau Date: Tue, 30 Dec 2025 22:06:25 -0500 Subject: fix: respect XDG dir instead of forcing ~/Pictures (#899) * fix: respect XDG dir instead of forcing ~/Pictures * fix: make xdg-user-dir usage more robust --------- Co-authored-by: Donald Williams <129223418+dwilliam62@users.noreply.github.com> --- config/hypr/UserScripts/WallpaperRandom.sh | 5 +++-- config/hypr/UserScripts/WallpaperSelect.sh | 3 ++- config/hypr/configs/Startup_Apps.conf | 4 ++-- config/hypr/scripts/DarkLight.sh | 3 ++- config/hypr/scripts/ScreenShot.sh | 3 ++- config/hypr/scripts/sddm_wallpaper.sh | 3 ++- config/swappy/config | 2 +- copy.sh | 11 ++++++----- 8 files changed, 20 insertions(+), 14 deletions(-) diff --git a/config/hypr/UserScripts/WallpaperRandom.sh b/config/hypr/UserScripts/WallpaperRandom.sh index 654d4bd3..8dd680d5 100755 --- a/config/hypr/UserScripts/WallpaperRandom.sh +++ b/config/hypr/UserScripts/WallpaperRandom.sh @@ -2,12 +2,13 @@ # /* ---- πŸ’« https://github.com/JaKooLit πŸ’« ---- */ ## # Script for Random Wallpaper ( CTRL ALT W) -wallDIR="$HOME/Pictures/wallpapers" +PICTURES_DIR="$(xdg-user-dir PICTURES 2>/dev/null || echo "$HOME/Pictures")" +wallDIR="$PICTURES_DIR/wallpapers" SCRIPTSDIR="$HOME/.config/hypr/scripts" focused_monitor=$(hyprctl monitors -j | jq -r '.[] | select(.focused) | .name') -PICS=($(find -L ${wallDIR} -type f \( -name "*.jpg" -o -name "*.jpeg" -o -name "*.png" -o -name "*.pnm" -o -name "*.tga" -o -name "*.tiff" -o -name "*.webp" -o -name "*.bmp" -o -name "*.farbfeld" -o -name "*.gif" \))) +PICS=($(find -L "${wallDIR}" -type f \( -name "*.jpg" -o -name "*.jpeg" -o -name "*.png" -o -name "*.pnm" -o -name "*.tga" -o -name "*.tiff" -o -name "*.webp" -o -name "*.bmp" -o -name "*.farbfeld" -o -name "*.gif" \))) RANDOMPICS=${PICS[ $RANDOM % ${#PICS[@]} ]} diff --git a/config/hypr/UserScripts/WallpaperSelect.sh b/config/hypr/UserScripts/WallpaperSelect.sh index 0029d3e5..3fd3b858 100755 --- a/config/hypr/UserScripts/WallpaperSelect.sh +++ b/config/hypr/UserScripts/WallpaperSelect.sh @@ -4,7 +4,8 @@ # WALLPAPERS PATH terminal=kitty -wallDIR="$HOME/Pictures/wallpapers" +PICTURES_DIR="$(xdg-user-dir PICTURES 2>/dev/null || echo "$HOME/Pictures")" +wallDIR="$PICTURES_DIR/wallpapers" SCRIPTSDIR="$HOME/.config/hypr/scripts" wallpaper_current="$HOME/.config/hypr/wallpaper_effects/.wallpaper_current" diff --git a/config/hypr/configs/Startup_Apps.conf b/config/hypr/configs/Startup_Apps.conf index 27c8d26a..550c79d4 100644 --- a/config/hypr/configs/Startup_Apps.conf +++ b/config/hypr/configs/Startup_Apps.conf @@ -4,7 +4,7 @@ $scriptsDir = $HOME/.config/hypr/scripts $UserScripts = $HOME/.config/hypr/UserScripts -$wallDIR=$HOME/Pictures/wallpapers +$wallDIR = $HOME/Pictures/wallpapers # change path manually here if needed $lock = $scriptsDir/LockScreen.sh $SwwwRandom = $UserScripts/WallpaperAutoChange.sh $livewallpaper="" @@ -53,7 +53,7 @@ exec-once = $scriptsDir/Hyprsunset.sh init # Here are list of features available but disabled by default # Persistent wallpaper -# exec-once = swww-daemon --format xrgb && swww img $HOME/Pictures/wallpapers/mecha-nostalgia.png +# exec-once = swww-daemon --format xrgb && swww img $wallDIR/mecha-nostalgia.png # Gnome polkit for NixOS #exec-once = $scriptsDir/Polkit-NixOS.sh diff --git a/config/hypr/scripts/DarkLight.sh b/config/hypr/scripts/DarkLight.sh index e473efb2..a225c7bc 100755 --- a/config/hypr/scripts/DarkLight.sh +++ b/config/hypr/scripts/DarkLight.sh @@ -4,7 +4,8 @@ # Note: Scripts are looking for keywords Light or Dark except for wallpapers as the are in a separate directories # Paths -wallpaper_base_path="$HOME/Pictures/wallpapers/Dynamic-Wallpapers" +PICTURES_DIR="$(xdg-user-dir PICTURES 2>/dev/null || echo "$HOME/Pictures")" +wallpaper_base_path="$PICTURES_DIR/wallpapers/Dynamic-Wallpapers" dark_wallpapers="$wallpaper_base_path/Dark" light_wallpapers="$wallpaper_base_path/Light" hypr_config_path="$HOME/.config/hypr" diff --git a/config/hypr/scripts/ScreenShot.sh b/config/hypr/scripts/ScreenShot.sh index 0ef70964..3d578a51 100755 --- a/config/hypr/scripts/ScreenShot.sh +++ b/config/hypr/scripts/ScreenShot.sh @@ -4,7 +4,8 @@ # variables time=$(date "+%d-%b_%H-%M-%S") -dir="$(xdg-user-dir PICTURES)/Screenshots" +PICTURES_DIR="$(xdg-user-dir PICTURES 2>/dev/null || echo "$HOME/Pictures")" +dir="$PICTURES_DIR/Screenshots" file="Screenshot_${time}_${RANDOM}.png" iDIR="$HOME/.config/swaync/icons" diff --git a/config/hypr/scripts/sddm_wallpaper.sh b/config/hypr/scripts/sddm_wallpaper.sh index 9dca2f72..5ebab44c 100755 --- a/config/hypr/scripts/sddm_wallpaper.sh +++ b/config/hypr/scripts/sddm_wallpaper.sh @@ -6,7 +6,8 @@ # variables terminal=kitty -wallDIR="$HOME/Pictures/wallpapers" +PICTURES_DIR="$(xdg-user-dir PICTURES 2>/dev/null || echo "$HOME/Pictures")" +wallDIR="$PICTURES_DIR/wallpapers" SCRIPTSDIR="$HOME/.config/hypr/scripts" wallpaper_current="$HOME/.config/hypr/wallpaper_effects/.wallpaper_current" wallpaper_modified="$HOME/.config/hypr/wallpaper_effects/.wallpaper_modified" diff --git a/config/swappy/config b/config/swappy/config index 45d84e49..ea04ccc2 100644 --- a/config/swappy/config +++ b/config/swappy/config @@ -1,5 +1,5 @@ [Default] -save_dir=$HOME/Pictures/Screenshots +save_dir=$(xdg-user-dir PICTURES 2>/dev/null || echo "$HOME/Pictures")/Screenshots save_filename_format=swappy-%Y%m%d-%H%M%S.png show_pannel=false line_size=5 diff --git a/copy.sh b/copy.sh index 5b3d17cd..e925a698 100755 --- a/copy.sh +++ b/copy.sh @@ -1087,8 +1087,9 @@ fi printf "\n%.0s" {1..1} # wallpaper stuff -mkdir -p $HOME/Pictures/wallpapers -if cp -r wallpapers $HOME/Pictures/; then +PICTURES_DIR="$(xdg-user-dir PICTURES 2>/dev/null || echo "$HOME/Pictures")" +mkdir -p "$PICTURES_DIR/wallpapers" +if cp -r wallpapers "$PICTURES_DIR/"; then echo "${OK} Some ${MAGENTA}wallpapers${RESET} copied successfully!" | tee -a "$LOG" else echo "${ERROR} Failed to copy some ${YELLOW}wallpapers${RESET}" | tee -a "$LOG" @@ -1168,12 +1169,12 @@ while true; do echo "${OK} Wallpapers downloaded successfully." 2>&1 | tee -a "$LOG" # Check if wallpapers directory exists and create it if not - if [ ! -d "$HOME/Pictures/wallpapers" ]; then - mkdir -p "$HOME/Pictures/wallpapers" + if [ ! -d "$PICTURES_DIR/wallpapers" ]; then + mkdir -p "$PICTURES_DIR/wallpapers" echo "${OK} Created wallpapers directory." 2>&1 | tee -a "$LOG" fi - if cp -R Wallpaper-Bank/wallpapers/* "$HOME/Pictures/wallpapers/" >>"$LOG" 2>&1; then + if cp -R Wallpaper-Bank/wallpapers/* "$PICTURES_DIR/wallpapers/" >>"$LOG" 2>&1; then echo "${OK} Wallpapers copied successfully." 2>&1 | tee -a "$LOG" rm -rf Wallpaper-Bank 2>&1 # Remove cloned repository after copying wallpapers break -- cgit v1.2.3 From 54541e18dacb042c103540eaa4cb4477e05c85ff Mon Sep 17 00:00:00 2001 From: Don Williams Date: Tue, 30 Dec 2025 23:52:35 -0500 Subject: Fixed rule for gnome calculator, yad now centers Yad still not following the size settings but at least it's now floating and centered On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/hypr/configs/WindowRules-config-v3.conf --- config/hypr/configs/WindowRules-config-v3.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/hypr/configs/WindowRules-config-v3.conf b/config/hypr/configs/WindowRules-config-v3.conf index ba179461..a4da3694 100644 --- a/config/hypr/configs/WindowRules-config-v3.conf +++ b/config/hypr/configs/WindowRules-config-v3.conf @@ -115,7 +115,7 @@ windowrule = match:tag settings, float on windowrule = match:tag viewer, float on windowrule = match:tag KooL-Settings, float on windowrule = match:class ([Zz]oom|onedriver|onedriver-launcher), float on -windowrule = match:class (org.gnome.Calculator) match:title (Calculator), float on +windowrule = match:class (org.gnome.Calculator), float on windowrule = match:class ^(mpv|com.github.rafostar.Clapper)$, float on windowrule = match:class ^([Qq]alculate-gtk)$, float on windowrule = match:class ^([Ff]erdium)$, float on @@ -137,7 +137,7 @@ windowrule = match:initial_title (Open Files), float on, size (monitor_w*0.7) (m windowrule = match:title ^(SDDM Background)$, float on, center on, size (monitor_w*0.16) (monitor_h*0.12) # YAD dialog for wallpaper confirmation -windowrule = match:class ^(yad)$ match:title ^(YAD)$, float on, center on, size (monitor_w*0.2) (monitor_h*0.2) +windowrule = match:class ^(yad)$, float on, center on, size (monitor_w*0.2) (monitor_h*0.2) # END of float popups and dialogue ####### # OPACITY -- cgit v1.2.3 From 4c5d85bc769b53dd019c4d671fe42e9b3de7cd53 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Wed, 31 Dec 2025 00:11:29 -0500 Subject: Fixed yad windowsize, was overridden by settings rule On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/hypr/configs/WindowRules-config-v3.conf --- config/hypr/configs/WindowRules-config-v3.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/hypr/configs/WindowRules-config-v3.conf b/config/hypr/configs/WindowRules-config-v3.conf index a4da3694..d0200ad4 100644 --- a/config/hypr/configs/WindowRules-config-v3.conf +++ b/config/hypr/configs/WindowRules-config-v3.conf @@ -79,7 +79,7 @@ windowrule = match:title (Kvantum Manager), tag +settings windowrule = match:class ^(file-roller|org.gnome.FileRoller)$, tag +settings windowrule = match:class ^(nm-applet|nm-connection-editor|blueman-manager)$, tag +settings windowrule = match:class ^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$, tag +settings -windowrule = match:class ^(qt5ct|qt6ct|[Yy]ad)$, tag +settings +windowrule = match:class ^(qt5ct|qt6ct)$, tag +settings windowrule = match:class (xdg-desktop-portal-gtk), tag +settings windowrule = match:class ^(org.kde.polkit-kde-authentication-agent-1)$, tag +settings windowrule = match:class ^([Rr]ofi)$, tag +settings -- cgit v1.2.3 From 2ae39ff4ea20d67e38300a0f5ac5445a3af1c64a Mon Sep 17 00:00:00 2001 From: Don Williams Date: Wed, 31 Dec 2025 00:20:30 -0500 Subject: Updated CHANGELOG --- CHANGELOG.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fc6bf78e..27f07cf0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,19 @@ ## v2.3.19 +- 2025-12-31 + - Fixed rule for `Gnome Calculator` + - Thanks Warlord for finding/fixing that + - Fixed rule for `yad` + - Size was being overridden by `settings` tag + - `~/Pictures` now follows `XDG dir` vs. hard coded + - Thanks for JaΓ«l Champagne Gareau for the code + - Fixed `opache toggle` + - `Weather.py` and `Weather.sh` updated and improved + - Thank you Lumethra + - Added netowrk check to `WeatherWrap` script + - Thank you Maximilian Zhu + - 2025-12-29 - Fixed pathing in Wallust script - Thank you [Lumethra](https://github.com/Lumethra) -- 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 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 12f71793ae8d7e3ab32cf412b7c9fe5cc577308b Mon Sep 17 00:00:00 2001 From: Don Williams Date: Wed, 31 Dec 2025 21:33:32 -0500 Subject: Fixed copy.sh to properly print msgs having `\n` newlines On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: copy.sh --- copy.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/copy.sh b/copy.sh index e925a698..d73514b4 100755 --- a/copy.sh +++ b/copy.sh @@ -32,7 +32,8 @@ fi # Function to print colorful text print_color() { - printf "%b%s%b\n" "$1" "$2" "$RESET" + # Use %b for the message to interpret backslash escapes like \n, \t, etc. + printf "%b%b%b\n" "$1" "$2" "$RESET" } # Check /etc/os-release for Ubuntu or Debian and warn about Hyprland version requirement -- cgit v1.2.3 From 63f6b0c8aa02939646229900be84fe38d7aabbcc Mon Sep 17 00:00:00 2001 From: Don Williams Date: Wed, 31 Dec 2025 23:42:02 -0500 Subject: Added sample rules to start apps on specific workspaces They are commented out for now When they were active by default it caused new user confusion and many support requests On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: CHANGELOG.md modified: config/hypr/configs/WindowRules-config-v3.conf --- CHANGELOG.md | 2 ++ config/hypr/configs/WindowRules-config-v3.conf | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 27f07cf0..bd80cac8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,8 @@ - Thank you Lumethra - Added netowrk check to `WeatherWrap` script - Thank you Maximilian Zhu + - Added sample workspace rules to start apps on specific workspaces + - They are commented out but serve as references - 2025-12-29 - Fixed pathing in Wallust script diff --git a/config/hypr/configs/WindowRules-config-v3.conf b/config/hypr/configs/WindowRules-config-v3.conf index d0200ad4..62c7afdf 100644 --- a/config/hypr/configs/WindowRules-config-v3.conf +++ b/config/hypr/configs/WindowRules-config-v3.conf @@ -5,6 +5,25 @@ # NOTES: This is only for Hyprland > 0.52.1 # note for ja: This should NOT be implemented on Debian and Ubuntu +# Some samples on hwo to start apps on specific workspaces + +# windowrule move to workspace +#windowrule = workspace 1, match:tag email* +#windowrule = workspace 2, match:tag browser* +#windowrule = workspace 3, match:class ^([Tt]hunar)$ +#windowrule = workspace 3, match:tag projects* +#windowrule = workspace 5, match:tag gamestore* +#windowrule = workspace 7, match:tag im* +#windowrule = workspace 8, match:tag games* + +#windowrule move to workspace (silent) +#windowrule = workspace 4 silent, match:tag screenshare* +#windowrule = workspace 6 silent, match:class ^(virt-manager)$ +#windowrule = workspace 6 silent, match:class ^(.virt-manager-wrapped)$ +#windowrule = workspace 9 silent, match:tag multimedia* + + + # windowrule - tags - add apps under appropriate tag to use the same settings # browser tags windowrule = match:class ^([Ff]irefox|org.mozilla.firefox|[Ff]irefox-esr|[Ff]irefox-bin)$, tag +browser -- cgit v1.2.3 From 1764376bf795f0f47de4f3a5690a39a7fbfcb0da Mon Sep 17 00:00:00 2001 From: Don Williams Date: Wed, 31 Dec 2025 23:53:20 -0500 Subject: Added rules to inhibit screensaver when apps fullscreen On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: WindowRules-config-v3.conf --- config/hypr/configs/WindowRules-config-v3.conf | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/config/hypr/configs/WindowRules-config-v3.conf b/config/hypr/configs/WindowRules-config-v3.conf index 62c7afdf..f2c96256 100644 --- a/config/hypr/configs/WindowRules-config-v3.conf +++ b/config/hypr/configs/WindowRules-config-v3.conf @@ -126,6 +126,11 @@ windowrule = match:title ^(Picture-in-Picture)$, move 72% 7% # windowrule to avoid idle for fullscreen apps windowrule = match:fullscreen true, idle_inhibit fullscreen +windowrule = idle_inhibit fullscreen, match:fullscreen 1 +windowrule = idle_inhibit fullscreen, match:class ^(*)$ +windowrule = idle_inhibit fullscreen, match:title ^(*)$ + + # FLOAT windowrule = match:tag KooL_Cheat, float on -- cgit v1.2.3 From 3d09964129c2f3da6597bd7e74198a0cb804415e Mon Sep 17 00:00:00 2001 From: Ahum Maitra Date: Thu, 1 Jan 2026 16:17:23 +0530 Subject: update : Improve blur (#904) Thanks TheAhumMaitra --- config/hypr/UserConfigs/UserDecorations.conf | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/config/hypr/UserConfigs/UserDecorations.conf b/config/hypr/UserConfigs/UserDecorations.conf index 0b450904..f203fe5b 100644 --- a/config/hypr/UserConfigs/UserDecorations.conf +++ b/config/hypr/UserConfigs/UserDecorations.conf @@ -12,14 +12,14 @@ general { border_size = 2 gaps_in = 2 gaps_out = 4 - - col.active_border = $color12 + + col.active_border = $color12 col.inactive_border = $color10 } decoration { rounding = 10 - + active_opacity = 1.0 inactive_opacity = 0.9 fullscreen_opacity = 1.0 @@ -37,13 +37,13 @@ decoration { color_inactive = $color10 } - blur { - enabled = true + enabled = true size = 6 - passes = 2 - ignore_opacity = true + passes = 3 new_optimizations = true + xray = true + ignore_opacity = true special = true popups = true } -- cgit v1.2.3 From 4dbf3d82fd51fd96b86a19f9a9bcd0d7e02d569d Mon Sep 17 00:00:00 2001 From: Don Williams Date: Thu, 1 Jan 2026 05:51:18 -0500 Subject: Updated CHANGELOG for new blur effect On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: CHANGELOG.md --- CHANGELOG.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bd80cac8..22a25f75 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## v2.3.19 +- 2026-01-01 +- Added more blur and enabled xray + - Thank you [TheAhumMaitra](https://github.com/TheAhumMaitra) + - 2025-12-31 - Fixed rule for `Gnome Calculator` - Thanks Warlord for finding/fixing that @@ -12,7 +16,7 @@ - Fixed `opache toggle` - `Weather.py` and `Weather.sh` updated and improved - Thank you Lumethra - - Added netowrk check to `WeatherWrap` script + - Added network check to `WeatherWrap` script - Thank you Maximilian Zhu - Added sample workspace rules to start apps on specific workspaces - They are commented out but serve as references -- cgit v1.2.3 From ed13a23db110ecea04e00cdfb985789461f7a9a1 Mon Sep 17 00:00:00 2001 From: brockar Date: Sat, 3 Jan 2026 17:57:03 -0300 Subject: style(hypr): remove redundant blank lines in windowrules --- config/hypr/configs/WindowRules-config-v3.conf | 14 ++------------ config/hypr/configs/WindowRules.conf | 4 +--- 2 files changed, 3 insertions(+), 15 deletions(-) diff --git a/config/hypr/configs/WindowRules-config-v3.conf b/config/hypr/configs/WindowRules-config-v3.conf index f2c96256..8f639c5d 100644 --- a/config/hypr/configs/WindowRules-config-v3.conf +++ b/config/hypr/configs/WindowRules-config-v3.conf @@ -2,11 +2,9 @@ # Vendor defaults for window rules and layerrules # See https://wiki.hyprland.org/Configuring/Window-Rules/ for more -# NOTES: This is only for Hyprland > 0.52.1 -# note for ja: This should NOT be implemented on Debian and Ubuntu - -# Some samples on hwo to start apps on specific workspaces +# NOTES: This is only for Hyprland > 0.53 +# Some samples on how to start apps on specific workspaces # windowrule move to workspace #windowrule = workspace 1, match:tag email* #windowrule = workspace 2, match:tag browser* @@ -22,8 +20,6 @@ #windowrule = workspace 6 silent, match:class ^(.virt-manager-wrapped)$ #windowrule = workspace 9 silent, match:tag multimedia* - - # windowrule - tags - add apps under appropriate tag to use the same settings # browser tags windowrule = match:class ^([Ff]irefox|org.mozilla.firefox|[Ff]irefox-esr|[Ff]irefox-bin)$, tag +browser @@ -130,8 +126,6 @@ windowrule = idle_inhibit fullscreen, match:fullscreen 1 windowrule = idle_inhibit fullscreen, match:class ^(*)$ windowrule = idle_inhibit fullscreen, match:title ^(*)$ - - # FLOAT windowrule = match:tag KooL_Cheat, float on windowrule = match:tag wallpaper, float on @@ -151,13 +145,9 @@ windowrule = match:class (codium|codium-url-handler|VSCodium) match:title negati windowrule = match:class ^(com.heroicgameslauncher.hgl)$ match:title negative:(Heroic Games Launcher), float on windowrule = match:class ^([Ss]team)$ match:title negative:^([Ss]team)$, float on windowrule = match:class ([Tt]hunar) match:title negative:(.*[Tt]hunar.*), float on - windowrule = match:title ^(Add Folder to Workspace)$, float on, size (monitor_w*0.7) (monitor_h*0.6), center on - windowrule = match:title ^(Save As)$, float on, size (monitor_w*0.7) (monitor_h*0.6), center on - windowrule = match:initial_title (Open Files), float on, size (monitor_w*0.7) (monitor_h*0.6) - windowrule = match:title ^(SDDM Background)$, float on, center on, size (monitor_w*0.16) (monitor_h*0.12) # YAD dialog for wallpaper confirmation diff --git a/config/hypr/configs/WindowRules.conf b/config/hypr/configs/WindowRules.conf index d1fb9315..8a5f99c7 100644 --- a/config/hypr/configs/WindowRules.conf +++ b/config/hypr/configs/WindowRules.conf @@ -4,8 +4,6 @@ # NOTES: This is only for Hyprland > 0.48 -# note for ja: This should NOT be implemented on Debian and Ubuntu - # windowrule - tags - add apps under appropriate tag to use the same settings # browser tags windowrule = tag +browser, class:^([Ff]irefox|org.mozilla.firefox|[Ff]irefox-esr|[Ff]irefox-bin)$ @@ -228,4 +226,4 @@ layerrule = ignorealpha 0.5, quickshell:overview #layerrule = ignorezero, #layerrule = ignorezero, overview -#layerrule = blur, overview \ No newline at end of file +#layerrule = blur, overview -- cgit v1.2.3 From e504f6c1c50bd2037bea9b3b48e2e0b06b304c34 Mon Sep 17 00:00:00 2001 From: Ahum Maitra Date: Sun, 4 Jan 2026 03:53:41 +0530 Subject: feat: Add Wallust based global Theme Switcher (#905) * fix: Add Theme Switcher script * feat: Add theme switcher shortcut * enhancement: simplify the program, fix spelling mistakes, add safety mechanism --- config/hypr/configs/Keybinds.conf | 7 ++++--- config/hypr/scripts/ThemeChanger.sh | 27 +++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 config/hypr/scripts/ThemeChanger.sh diff --git a/config/hypr/configs/Keybinds.conf b/config/hypr/configs/Keybinds.conf index 91eb66e2..dea22719 100644 --- a/config/hypr/configs/Keybinds.conf +++ b/config/hypr/configs/Keybinds.conf @@ -23,6 +23,7 @@ bindd = $mainMod, Return, Open terminal, exec, $term bindd = $mainMod, E, file manager, exec, $files # FEATURES / EXTRAS +bindd = $mainMod, T, Global theme switcher using Wallust, exec, $scriptsDir/ThemeChanger.sh #Global theme switcher bindd = $mainMod, H, help / cheat sheet, exec, $scriptsDir/KeyHints.sh bindd = $mainMod ALT, R, refresh bar and menus, exec, $scriptsDir/Refresh.sh bindd = $mainMod ALT, E, emoji menu, exec, $scriptsDir/RofiEmoji.sh @@ -43,7 +44,7 @@ bindd = $mainMod SHIFT, Return, DropDown terminal, exec, $scriptsDir/Droptermina # Desktop zooming or magnifier bindd = $mainMod ALT, mouse_down, zoom in, exec, hyprctl keyword cursor:zoom_factor "$(hyprctl getoption cursor:zoom_factor | awk 'NR==1 {factor = $2; if (factor < 1) {factor = 1}; print factor * 2.0}')" -bindd = $mainMod ALT, mouse_up, zoom out, exec, hyprctl keyword cursor:zoom_factor "$(hyprctl getoption cursor:zoom_factor | awk 'NR==1 {factor = $2; if (factor < 1) {factor = 1}; print factor / 2.0}')" +bindd = $mainMod ALT, mouse_up, zoom out, exec, hyprctl keyword cursor:zoom_factor "$(hyprctl getoption cursor:zoom_factor | awk 'NR==1 {factor = $2; if (factor < 1) {factor = 1}; print factor / 2.0}')" # Waybar / Bar related bindd = $mainMod CTRL ALT, B, toggle waybar on/off, exec, pkill -SIGUSR1 waybar @@ -164,7 +165,7 @@ bindd = $mainMod CTRL, K, Move left into group, moveintogroup, l # Move active w bindd = $mainMod CTRL, L, Move Right into group, moveintogroup, r # Move active window right into a group bindd = $mainMod CTRL, H, Move active out of group, moveoutofgroup # Move active window out of group -# Try to dynamically move in grouped window and when ungrouped +# Try to dynamically move in grouped window and when ungrouped # Not working for me DW 11/26/25 PR: https://github.com/JaKooLit/Hyprland-Dots/pull/872 #bindd = $mainMod, right, focus right, exec, bash -c 'if hyprctl activewindow -j | jq -e "((.grouped | type) == \"boolean\") or (.address == (.grouped[-1] // empty))" >/dev/null 2>&1; then hyprctl dispatch movefocus r; else hyprctl dispatch changegroupactive f; fi' #bindd = $mainMod, left, focus left, exec, bash -c 'if hyprctl activewindow -j | jq -e "((.grouped | type) == \"boolean\") or (.address == (.grouped[0] // empty))" >/dev/null 2>&1; then hyprctl dispatch movefocus l; else hyprctl dispatch changegroupactive b; fi' @@ -185,7 +186,7 @@ bindd = $mainMod, U, toggle special workspace, togglespecialworkspace, # The following mappings use the key codes to better support various keyboard layouts # 1 is code:10, 2 is code 11, etc -# Switch workspaces with mainMod + [0-9] +# Switch workspaces with mainMod + [0-9] bindd = $mainMod, code:10, workspace 1, workspace, 1 # NOTE: code:10 = key 1 bindd = $mainMod, code:11, workspace 2, workspace, 2 # NOTE: code:11 = key 2 bindd = $mainMod, code:12, workspace 3, workspace, 3 # NOTE: code:12 = key 3 diff --git a/config/hypr/scripts/ThemeChanger.sh b/config/hypr/scripts/ThemeChanger.sh new file mode 100644 index 00000000..15534258 --- /dev/null +++ b/config/hypr/scripts/ThemeChanger.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +set -euo pipefail + +# SPDX-FileCopyrightText: 2025-present Ahum Maitra theahummaitra@gmail.com +# +# SPDX-License-Identifier: GPL-3.0-or-later + +# Repository url : https://github.com/TheAhumMaitra/cautious-waddle + +# User choice +choice=$(wallust theme list \ + | sed '1d' \ + | sed 's/^- //' \ + | rofi -dmenu -p "Select Global Theme") + +# If user requested to exit, then exit +[[ -z "$choice" ]] && exit 0 + +# Apply the theme +wallust theme "$choice" + +# Inform user about theme changed +notify-send "Global theme changed" "Global Theme selected $choice" + +# Give warning to user for Waybar theme refresh +notify-send "Press SUPER+ALT+R to Refresh Waybar Theme" -- cgit v1.2.3 From 3ca6417a0a4636f2a8721d635a9958247911f2b0 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Sun, 4 Jan 2026 01:52:25 -0500 Subject: Added rule for modal and fixed alt-tab for max'd windows On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: CHANGELOG.md modified: config/hypr/configs/SystemSettings.conf modified: config/hypr/configs/WindowRules-config-v3.conf --- CHANGELOG.md | 14 ++++++++++++++ config/hypr/configs/SystemSettings.conf | 4 ++++ config/hypr/configs/WindowRules-config-v3.conf | 3 +++ 3 files changed, 21 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 22a25f75..43cc9856 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,20 @@ ## v2.3.19 +- 2026-01-04 +- Fullscreen or maxixmized would exit using `ALT-TAB` (cycle next/bring-to-front) + - User `GoodBorn` found this fix + ``` + misc { + on_focus_under_fullscreen = 1 + # 0 - Default, no change + # 1 - New focused window takes over fullscreen (Windows-like Alt-Tab) + # 2 - New focused window stays behind the fullscreen one + } + ``` +- Added: modal rule so popup diaglog, like `Save as` or `Open File` center and float by default + - `windowrule = float on, center on, match:modal:1` + - 2026-01-01 - Added more blur and enabled xray - Thank you [TheAhumMaitra](https://github.com/TheAhumMaitra) diff --git a/config/hypr/configs/SystemSettings.conf b/config/hypr/configs/SystemSettings.conf index 44521156..af8fe7a6 100644 --- a/config/hypr/configs/SystemSettings.conf +++ b/config/hypr/configs/SystemSettings.conf @@ -93,6 +93,10 @@ misc { enable_anr_dialog = true # Application not Responding (ANR) anr_missed_pings = 15 # ANR Threshold default 1 is too low allow_session_lock_restore = true # Prevent lockscreen crash when resume from suspend + on_focus_under_fullscreen = 1 + # 0 - Default, no change + # 1 - New focused window takes over fullscreen (Windows-like Alt-Tab) + # 2 - New focused window stays behind the fullscreen one } #opengl { diff --git a/config/hypr/configs/WindowRules-config-v3.conf b/config/hypr/configs/WindowRules-config-v3.conf index 8f639c5d..d9d180d2 100644 --- a/config/hypr/configs/WindowRules-config-v3.conf +++ b/config/hypr/configs/WindowRules-config-v3.conf @@ -139,6 +139,9 @@ windowrule = match:class ^([Qq]alculate-gtk)$, float on windowrule = match:class ^([Ff]erdium)$, float on windowrule = match:title ^(Picture-in-Picture)$, float on +# Float and center dialog boxes by default +windowrule = float on, center on, match:modal:1 + # windowrule - ######### float popups and dialogue ####### windowrule = match:title ^(Authentication Required)$, float on, center on windowrule = match:class (codium|codium-url-handler|VSCodium) match:title negative:(.*codium.*|.*VSCodium.*), float on -- cgit v1.2.3 From e2cce1cd10b93ba39cc5d243b7caf4aee6c8e7a4 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Sun, 4 Jan 2026 02:15:53 -0500 Subject: Fixed modal floating/center rule --- config/hypr/configs/WindowRules-config-v3.conf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/config/hypr/configs/WindowRules-config-v3.conf b/config/hypr/configs/WindowRules-config-v3.conf index d9d180d2..a81cc20d 100644 --- a/config/hypr/configs/WindowRules-config-v3.conf +++ b/config/hypr/configs/WindowRules-config-v3.conf @@ -140,7 +140,9 @@ windowrule = match:class ^([Ff]erdium)$, float on windowrule = match:title ^(Picture-in-Picture)$, float on # Float and center dialog boxes by default -windowrule = float on, center on, match:modal:1 +rule = float(true), match:modal:1 +rule = center(true), match:modal:1 + # windowrule - ######### float popups and dialogue ####### windowrule = match:title ^(Authentication Required)$, float on, center on -- cgit v1.2.3 From 98d8ef7e5c511e1963b66679dc1bd1534440b880 Mon Sep 17 00:00:00 2001 From: Ahum Maitra Date: Mon, 5 Jan 2026 00:21:21 +0530 Subject: Add theme switcher help shortcut (#906) * fix: Add Theme Switcher script * enhancement: add theme switcher shortcut * Refactor ThemeChanger.sh for improved readability --- config/hypr/scripts/KeyHints.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 diff --git a/config/hypr/scripts/ThemeChanger.sh b/config/hypr/scripts/ThemeChanger.sh old mode 100644 new mode 100755 -- cgit v1.2.3 From 4845eacf3e6aa3f88ff284a2505d1efbd5fe6417 Mon Sep 17 00:00:00 2001 From: brockar Date: Mon, 5 Jan 2026 17:23:38 -0300 Subject: feat(hypr): update window rules for zed, antigravity, and qalculate --- config/hypr/configs/WindowRules-config-v3.conf | 78 +++++++++++++------------- 1 file changed, 40 insertions(+), 38 deletions(-) diff --git a/config/hypr/configs/WindowRules-config-v3.conf b/config/hypr/configs/WindowRules-config-v3.conf index a81cc20d..a09501ed 100644 --- a/config/hypr/configs/WindowRules-config-v3.conf +++ b/config/hypr/configs/WindowRules-config-v3.conf @@ -2,25 +2,22 @@ # Vendor defaults for window rules and layerrules # See https://wiki.hyprland.org/Configuring/Window-Rules/ for more -# NOTES: This is only for Hyprland > 0.53 - -# Some samples on how to start apps on specific workspaces -# windowrule move to workspace -#windowrule = workspace 1, match:tag email* -#windowrule = workspace 2, match:tag browser* -#windowrule = workspace 3, match:class ^([Tt]hunar)$ -#windowrule = workspace 3, match:tag projects* -#windowrule = workspace 5, match:tag gamestore* -#windowrule = workspace 7, match:tag im* -#windowrule = workspace 8, match:tag games* - -#windowrule move to workspace (silent) -#windowrule = workspace 4 silent, match:tag screenshare* -#windowrule = workspace 6 silent, match:class ^(virt-manager)$ -#windowrule = workspace 6 silent, match:class ^(.virt-manager-wrapped)$ -#windowrule = workspace 9 silent, match:tag multimedia* - -# windowrule - tags - add apps under appropriate tag to use the same settings +# NOTES: This is only for Hyprland >= 0.53 + +# Some samples on hwo to start apps on specific workspaces +# windowrule = match:tag email*, workspace 1 +# windowrule = match:tag browser*, workspace 2 +# windowrule = match:tag projects*, workspace 3 +# windowrule = match:tag screenshare*, workspace 4 silent +# windowrule = match:tag gamestore*, workspace 5 +# windowrule = match:class ^(virt-manager)$, workspace 6 silent +# windowrule = match:class ^(.virt-manager-wrapped)$, workspace 6 silent +# windowrule = match:tag im*, workspace 7 +# windowrule = match:class obsidian, workspace 8 +# windowrule = match:tag games*, workspace 8 +# windowrule = match:tag multimedia*, workspace 9 silent + +# TAGS - add apps under appropriate tag to use the same settings # browser tags windowrule = match:class ^([Ff]irefox|org.mozilla.firefox|[Ff]irefox-esr|[Ff]irefox-bin)$, tag +browser windowrule = match:class ^([Gg]oogle-chrome(-beta|-dev|-unstable)?)$, tag +browser @@ -29,7 +26,7 @@ windowrule = match:class ^([Cc]hromium)$, tag +browser windowrule = match:class ^([Mm]icrosoft-edge(-stable|-beta|-dev|-unstable))$, tag +browser windowrule = match:class ^(Brave-browser(-beta|-dev|-unstable)?)$, tag +browser windowrule = match:class ^([Tt]horium-browser|[Cc]achy-browser)$, tag +browser -windowrule = match:class ^(zen-alpha|zen)$, tag +browser +windowrule = match:class ^(zen)$, tag +browser # notif tags windowrule = match:class ^(swaync-control-center|swaync-notification-window|swaync-client|class)$, tag +notif @@ -50,6 +47,7 @@ windowrule = match:class ^(eu.betterbird.Betterbird)$, tag +email windowrule = match:class ^(codium|codium-url-handler|VSCodium)$, tag +projects windowrule = match:class ^(VSCode|code|code-url-handler)$, tag +projects windowrule = match:class ^(jetbrains-.+)$, tag +projects +windowrule = match:class ^(dev.zed.Zed|antigravity)$, tag +projects # screenshare tags windowrule = match:class ^(com.obsproject.Studio)$, tag +screenshare @@ -107,9 +105,10 @@ windowrule = match:class ^(eog|org.gnome.Loupe)$, tag +viewer # Some special override rules windowrule = match:tag multimedia_video, no_blur on windowrule = match:tag multimedia_video, opacity 1.0 +windowrule = match:tag multimedia, no_blur on +windowrule = match:tag multimedia, opacity 1.0 # POSITION -# windowrule = match:floating true, center on windowrule = match:tag KooL_Cheat, center on windowrule = match:class ([Tt]hunar) match:title negative:(.*[Tt]hunar.*), center on windowrule = match:title ^(ROG Control)$, center on @@ -118,7 +117,6 @@ windowrule = match:title ^(Keybindings)$, center on windowrule = match:class ^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$, center on windowrule = match:class ^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$, center on windowrule = match:class ^([Ff]erdium)$, center on -windowrule = match:title ^(Picture-in-Picture)$, move 72% 7% # windowrule to avoid idle for fullscreen apps windowrule = match:fullscreen true, idle_inhibit fullscreen @@ -133,18 +131,12 @@ windowrule = match:tag settings, float on windowrule = match:tag viewer, float on windowrule = match:tag KooL-Settings, float on windowrule = match:class ([Zz]oom|onedriver|onedriver-launcher), float on -windowrule = match:class (org.gnome.Calculator), float on +windowrule = match:class (org.gnome.Calculator|qalculate-gtk), float on windowrule = match:class ^(mpv|com.github.rafostar.Clapper)$, float on windowrule = match:class ^([Qq]alculate-gtk)$, float on windowrule = match:class ^([Ff]erdium)$, float on -windowrule = match:title ^(Picture-in-Picture)$, float on -# Float and center dialog boxes by default -rule = float(true), match:modal:1 -rule = center(true), match:modal:1 - - -# windowrule - ######### float popups and dialogue ####### +# popups and dialogue windowrule = match:title ^(Authentication Required)$, float on, center on windowrule = match:class (codium|codium-url-handler|VSCodium) match:title negative:(.*codium.*|.*VSCodium.*), float on windowrule = match:class ^(com.heroicgameslauncher.hgl)$ match:title negative:(Heroic Games Launcher), float on @@ -154,10 +146,7 @@ windowrule = match:title ^(Add Folder to Workspace)$, float on, size (monitor_w* windowrule = match:title ^(Save As)$, float on, size (monitor_w*0.7) (monitor_h*0.6), center on windowrule = match:initial_title (Open Files), float on, size (monitor_w*0.7) (monitor_h*0.6) windowrule = match:title ^(SDDM Background)$, float on, center on, size (monitor_w*0.16) (monitor_h*0.12) - -# YAD dialog for wallpaper confirmation windowrule = match:class ^(yad)$, float on, center on, size (monitor_w*0.2) (monitor_h*0.2) -# END of float popups and dialogue ####### # OPACITY windowrule = match:tag browser, opacity 0.99 0.8 @@ -172,23 +161,22 @@ windowrule = match:tag wallpaper, opacity 0.9 0.7 windowrule = match:class ^(gedit|org.gnome.TextEditor|mousepad)$, opacity 0.8 0.7 windowrule = match:class ^(deluge)$, opacity 0.9 0.8 windowrule = match:class ^(seahorse)$, opacity 0.9 0.8 -windowrule = match:title ^(Picture-in-Picture)$, opacity 0.95 0.75 # SIZE windowrule = match:tag KooL_Cheat, size (monitor_w*0.65) (monitor_h*0.9) windowrule = match:tag wallpaper, size (monitor_w*0.7) (monitor_h*0.7) windowrule = match:tag settings, size (monitor_w*0.7) (monitor_h*0.7) -windowrule = match:class ^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$, size (monitor_w*0.6) (monitor_h*0.7) windowrule = match:class ^([Ff]erdium)$, size (monitor_w*0.6) (monitor_h*0.7) +windowrule = match:class (org.gnome.Calculator|qalculate-gtk), center on, size (monitor_w*0.25) (monitor_h*0.3) +windowrule = match:class ^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$, size (monitor_w*0.6) (monitor_h*0.5) -# PINNING -windowrule = match:title ^(Picture-in-Picture)$, pin on, keep_aspect_ratio on # BLUR & FULLSCREEN windowrule = match:tag games, no_blur on, fullscreen 0 windowrule = match:tag games, fullscreen 0 -# This not gonna take the focus to the window that appears when hovering over some of the parts of the IntelliJ Products +# This not gonna take the focus to the window that appears when +# hovering over some of the parts of the IntelliJ Products windowrule = match:class ^(jetbrains-*), no_initial_focus on windowrule = match:title ^(wind.*)$, no_initial_focus on @@ -197,3 +185,17 @@ layerrule = match:namespace rofi, blur on layerrule = match:namespace notifications, blur on layerrule = match:namespace quickshell:overview, blur on layerrule = match:namespace quickshell:overview, ignore_alpha 0.5 + +# Picture-in-Picture +windowrule { + name = Picture-in-Picture + match:title = ^(Picture-in-Picture)$ + float = on + move = 72% 7% + opacity = 0.95 0.75 + pin = on + keep_aspect_ratio = on + size = (monitor_w*0.3) (monitor_h*0.3) +} + + -- cgit v1.2.3 From 304552fdc44350f9eb34e50a26d25ea1ff780b79 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Mon, 5 Jan 2026 15:32:29 -0500 Subject: Fixing rules for zapzap/pip --- config/hypr/configs/WindowRules-config-v3.conf | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/config/hypr/configs/WindowRules-config-v3.conf b/config/hypr/configs/WindowRules-config-v3.conf index a09501ed..d05416c6 100644 --- a/config/hypr/configs/WindowRules-config-v3.conf +++ b/config/hypr/configs/WindowRules-config-v3.conf @@ -17,6 +17,8 @@ # windowrule = match:tag games*, workspace 8 # windowrule = match:tag multimedia*, workspace 9 silent + + # TAGS - add apps under appropriate tag to use the same settings # browser tags windowrule = match:class ^([Ff]irefox|org.mozilla.firefox|[Ff]irefox-esr|[Ff]irefox-bin)$, tag +browser @@ -56,7 +58,6 @@ windowrule = match:class ^(com.obsproject.Studio)$, tag +screenshare windowrule = match:class ^([Dd]iscord|[Ww]ebCord|[Vv]esktop)$, tag +im windowrule = match:class ^([Ff]erdium)$, tag +im windowrule = match:class ^([Ww]hatsapp-for-linux)$, tag +im -windowrule = match:class ^(ZapZap|com.rtosta.zapzap)$, tag +im windowrule = match:class ^(org.telegram.desktop|io.github.tdesktop_x64.TDesktop)$, tag +im windowrule = match:class ^(teams-for-linux)$, tag +im windowrule = match:class ^(im.riot.Riot|Element)$, tag +im @@ -115,7 +116,6 @@ windowrule = match:title ^(ROG Control)$, center on windowrule = match:tag KooL-Settings, center on windowrule = match:title ^(Keybindings)$, center on windowrule = match:class ^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$, center on -windowrule = match:class ^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$, center on windowrule = match:class ^([Ff]erdium)$, center on # windowrule to avoid idle for fullscreen apps @@ -168,7 +168,6 @@ windowrule = match:tag wallpaper, size (monitor_w*0.7) (monitor_h*0.7) windowrule = match:tag settings, size (monitor_w*0.7) (monitor_h*0.7) windowrule = match:class ^([Ff]erdium)$, size (monitor_w*0.6) (monitor_h*0.7) windowrule = match:class (org.gnome.Calculator|qalculate-gtk), center on, size (monitor_w*0.25) (monitor_h*0.3) -windowrule = match:class ^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$, size (monitor_w*0.6) (monitor_h*0.5) # BLUR & FULLSCREEN @@ -186,6 +185,13 @@ layerrule = match:namespace notifications, blur on layerrule = match:namespace quickshell:overview, blur on layerrule = match:namespace quickshell:overview, ignore_alpha 0.5 +# Named rules for special cases +windowrule { + match:class = ^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$ + float = on + size = (monitor_w*0.6) (monitor_h*0.7) + center = on +} # Picture-in-Picture windowrule { name = Picture-in-Picture -- cgit v1.2.3 From 9a6295cd88fde3e662fd039c7fdc3bf238536f90 Mon Sep 17 00:00:00 2001 From: brockar Date: Mon, 5 Jan 2026 18:16:38 -0300 Subject: scripts: update_WindowRules.sh for hyprland 0.53 --- config/hypr/scripts/update_WindowRules.sh | 60 +++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100755 config/hypr/scripts/update_WindowRules.sh diff --git a/config/hypr/scripts/update_WindowRules.sh b/config/hypr/scripts/update_WindowRules.sh new file mode 100755 index 00000000..8b4262ba --- /dev/null +++ b/config/hypr/scripts/update_WindowRules.sh @@ -0,0 +1,60 @@ +#!/usr/bin/env bash +# Script to update WindowRules config if Hyprland version is >= 0.53 + +CONFIGS_DIR="$HOME/.config/hypr/configs" +TARGET_FILE="$CONFIGS_DIR/WindowRules.conf" +V3_FILE="$CONFIGS_DIR/WindowRules-config-v3.conf" + +if [[ ! -f "$V3_FILE" ]]; then + echo "Error: Source configuration file not found: $V3_FILE" + exit 1 +fi + +get_hyprland_version() { + local ver="0.0.0" + local raw_ver="" + + if command -v hyprctl &>/dev/null; then + raw_ver=$(hyprctl version 2>/dev/null | grep "Tag:" | cut -d 'v' -f2) + fi + + if [ -z "$raw_ver" ] && command -v Hyprland &>/dev/null; then + raw_ver=$(Hyprland --version 2>/dev/null | grep "Tag:" | cut -d 'v' -f2 | awk '{print $1}') + fi + + if [ -n "$raw_ver" ]; then + ver=$(echo "$raw_ver" | grep -oE '^[0-9]+\.[0-9]+(\.[0-9]+)?') + fi + + if [ -z "$ver" ]; then + echo "0.0.0" + else + echo "$ver" + fi +} + +VERSION=$(get_hyprland_version) +REQUIRED_VER="0.53" + +# Check if version >= REQUIRED_VER +SMALLEST=$(printf '%s\n' "$REQUIRED_VER" "$VERSION" | sort -V | head -n1) + +if [ "$SMALLEST" = "$REQUIRED_VER" ]; then + echo "Version $VERSION >= $REQUIRED_VER. Updating WindowRules config..." + # Backup existing config if it exists + if [ -f "$TARGET_FILE" ]; then + echo "Backing up existing WindowRules.conf to WindowRules.conf.bak" + mv "$TARGET_FILE" "$TARGET_FILE.bak" + fi + cp "$V3_FILE" "$TARGET_FILE" + + if command -v hyprctl &>/dev/null; then + if hyprctl instances &>/dev/null; then + echo "Reloading Hyprland..." + hyprctl reload + fi + fi +else + echo "Version $VERSION < $REQUIRED_VER. No update needed." +fi + -- cgit v1.2.3 From 07cbde7bbd7ee858f8325ddd1d64ae5bbc5a34c1 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Tue, 6 Jan 2026 04:11:59 -0500 Subject: Fixed rule for whatsapp missing rule name On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: WindowRules-config-v3.conf --- config/hypr/configs/WindowRules-config-v3.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/config/hypr/configs/WindowRules-config-v3.conf b/config/hypr/configs/WindowRules-config-v3.conf index d05416c6..7b772c26 100644 --- a/config/hypr/configs/WindowRules-config-v3.conf +++ b/config/hypr/configs/WindowRules-config-v3.conf @@ -187,6 +187,7 @@ layerrule = match:namespace quickshell:overview, ignore_alpha 0.5 # Named rules for special cases windowrule { + name = Whatsapp-zapzap match:class = ^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$ float = on size = (monitor_w*0.6) (monitor_h*0.7) -- cgit v1.2.3 From a99672cb8b515a346ea60cacf7096c65e18b07f7 Mon Sep 17 00:00:00 2001 From: Ahum Maitra Date: Tue, 6 Jan 2026 22:24:26 +0530 Subject: feat: Add glass theme for waybar (#910) --- config/waybar/style/ML4W Glass.css | 286 ++++++++++++++++++++++++++++++++ config/waybar/style/ML4W/glass.css | 52 ++++++ config/waybar/wallust/colors-waybar.css | 6 +- 3 files changed, 341 insertions(+), 3 deletions(-) create mode 100644 config/waybar/style/ML4W Glass.css create mode 100644 config/waybar/style/ML4W/glass.css diff --git a/config/waybar/style/ML4W Glass.css b/config/waybar/style/ML4W Glass.css new file mode 100644 index 00000000..3c1389ee --- /dev/null +++ b/config/waybar/style/ML4W Glass.css @@ -0,0 +1,286 @@ +/* ML4W GLASS THEME - CRYSTAL CLEAR */ + +/* SPDX-FileCopyrightText: 2026-present Ahum Maitra theahummaitra@gmail.com +SPDX-License-Identifier: GPL-3.0-or-later */ + +/* +----------------------------------------------------- +General +----------------------------------------------------- +*/ + +* { + background-color: transparent; + font-family: "JetBrainsMono Nerd Font"; + border: none; + font-weight: bolder; + border-radius: 0px; + + /* Extra tweaks */ + min-height: 0; + /* set font-size to 100% if font scaling is set to 1.00 using nwg-look */ + font-size: 97%; + font-feature-settings: '"zero", "ss01", "ss02", "ss03", "ss04", "ss05", "cv31"'; +} + +@import "../waybar/style/ML4W/glass.css"; + +window#waybar { + background: transparent; +} + +.modules-left { + background-color: @surface; + border-radius: 12px; + background: radial-gradient( + circle at 50% 250%, + alpha(darker(@surface), 0.9), + alpha(@surface_dim, 0.9) + ) + padding-box, + linear-gradient(@primary, @on_primary) border-box; + border: 1px solid transparent; + opacity: 0.8; + padding: 0px; + margin: 10px; + box-shadow: inset 1px 2px 2px rgba(255, 255, 255, 0.2); +} + +.modules-right { + background-color: @surface; + border-radius: 12px; + background: radial-gradient( + circle at 50% 250%, + alpha(darker(@surface), 0.9), + alpha(@surface_dim, 0.9) + ) + padding-box, + linear-gradient(@primary, @on_primary) border-box; + border: 1px solid transparent; + opacity: 0.8; + padding: 0px; + margin: 10px; + box-shadow: inset 1px 2px 2px rgba(255, 255, 255, 0.3); +} + +.modules-center { + background-color: @surface; + border-radius: 12px; + background: radial-gradient( + circle at 50% 250%, + alpha(darker(@surface), 0.9), + alpha(@surface_dim, 0.9) + ) + padding-box, + linear-gradient(@primary, @on_primary) border-box; + border: 1px solid transparent; + opacity: 0.8; + margin: 10px; + box-shadow: inset 0px 2px 2px rgba(255, 255, 255, 0.2); +} + +label.module { + font-size: 14px; + margin-left: 8px; + margin-right: 8px; + border-radius: 5px; +} + +label.module { + font-size: 14px; + color: @on_surface; + padding: 3px 10px; + transition: all 0.3s ease-out; + background: radial-gradient( + circle at 50% 250%, + @on_tertiary_fixed_variant, + @on_tertiary_fixed + ) + padding-box, + linear-gradient(@on_primary_fixed_variant, @on_primary_fixed) border-box; + border-radius: 10px; + border: 0px solid transparent; +} + +label.module:hover { +} + +/* ----------------------------------------------------- + * Workspaces + * ----------------------------------------------------- */ + +#workspaces { + padding: 5px 3px 5px 3px; + min-width: 176px; + font-weight: 600; +} + +#workspaces button { + color: @on_surface; + border-radius: 3px; + padding: 0px 5px 0px 5px; + margin: 0px 2px 0px 2px; + transition: all 0.3s ease-in-out; + border: 1px solid transparent; +} + +#workspaces button.active { + background: alpha(@primary, 0.2); + border: 1px solid transparent; + transition: all 0.3s ease-in-out; + min-width: 30px; + border-radius: 8px; + box-shadow: inset 1px 2px 2px rgba(255, 255, 255, 0.5), + inset 0 1px 1px rgba(255, 255, 255, 0.8); +} + +#workspaces button:hover { + background: alpha(@secondary, 0.2); + border-radius: 15px; +} + +/* ----------------------------------------------------- + * Tooltips + * ----------------------------------------------------- */ + +tooltip { + background-color: @surface; + border-radius: 12px; + background: radial-gradient(circle at 50% 250%, @surface, @surface_dim) + padding-box, + linear-gradient(#ffffff, @on_primary) border-box; + border: 1px solid transparent; + opacity: 0.7; + margin: 10px; +} + +tooltip label { + color: @on_surface; +} + +/* ----------------------------------------------------- + * Window + * ----------------------------------------------------- */ + +#window { + background-color: transparent; +} + +window#waybar.empty #window { + background-color: transparent; +} + +/* ----------------------------------------------------- + * Taskbar + * ----------------------------------------------------- */ + +#taskbar { + padding: 5px 0px 5px 0px; +} + +#taskbar button { + border-radius: 6px; + padding: 0px 5px 0px 5px; +} + +#taskbar button:hover { + background: @primary; + color: @on_primary; +} + +#custom-updates.yellow { + border-radius: 8px; + margin: 5px 0px 5px 5px; + padding: 0px 6px 0px 6px; + background-color: @secondary; + color: @on_secondary; +} + +#custom-updates.red { + border-radius: 8px; + margin: 6px 0px 6px 7px; + padding: 0px 6px 0px 6px; + background-color: @error; + color: @on_error; +} + +/* ----------------------------------------------------- + * Clock + * ----------------------------------------------------- */ + +#clock { + margin-left: 12px; + margin-right: 12px; +} + +@keyframes blink { + to { + background-color: @background; + color: @on_surface; + } +} + +#battery.critical:not(.charging) { + background-color: transparent; +} + +#backlight, +#backlight-slider, +#battery, +#bluetooth, +#clock, +#cpu, +#disk, +#idle_inhibitor, +#keyboard-state, +#memory, +#mode, +#mpris, +#network, +#power-profiles-daemon, +#pulseaudio, +#pulseaudio-slider, +#taskbar button, +#taskbar, +#temperature, +#tray, +#window, +#wireplumber, +#workspaces, +#custom-backlight, +#custom-browser, +#custom-cava_mviz, +#custom-cycle_wall, +#custom-dot_update, +#custom-file_manager, +#custom-keybinds, +#custom-keyboard, +#custom-light_dark, +#custom-lock, +#custom-hint, +#custom-hypridle, +#custom-menu, +#custom-playerctl, +#custom-power_vertical, +#custom-power, +#custom-quit, +#custom-reboot, +#custom-settings, +#custom-spotify, +#custom-swaync, +#custom-tty, +#custom-updater, +#custom-hyprpicker, +#custom-weather, +#custom-weather.clearNight, +#custom-weather.cloudyFoggyDay, +#custom-weather.cloudyFoggyNight, +#custom-weather.default, +#custom-weather.rainyDay, +#custom-weather.rainyNight, +#custom-weather.severe, +#custom-weather.showyIcyDay, +#custom-weather.snowyIcyNight, +#custom-weather.sunnyDay { + background-color: transparent; +} diff --git a/config/waybar/style/ML4W/glass.css b/config/waybar/style/ML4W/glass.css new file mode 100644 index 00000000..6986a6d1 --- /dev/null +++ b/config/waybar/style/ML4W/glass.css @@ -0,0 +1,52 @@ +/* ML4W Glass theme for Kool's Hyprland */ + +/* SPDX-FileCopyrightText: 2025-present Ahum Maitra theahummaitra@gmail.com + +SPDX-License-Identifier: GPL-3.0-or-later */ + +@import "../../wallust/colors-waybar.css"; + +/* ------------------------- + * Base surfaces + * ------------------------- */ + +@define-color background @background; +@define-color surface @color9; +@define-color surface_dim @color1; + +/* ------------------------- + * Primary colors + * ------------------------- */ + +@define-color primary @color12; +@define-color on_primary @color7; + +@define-color on_primary_fixed @color1; +@define-color on_primary_fixed_variant @color10; + +/* ------------------------- + * Secondary colors + * ------------------------- */ + +@define-color secondary @color14; +@define-color on_secondary @color1; + +/* ------------------------- + * Tertiary (used for module pills) + * ------------------------- */ + +@define-color on_tertiary_fixed @color1; +@define-color on_tertiary_fixed_variant @color11; + +/* ------------------------- + * Text + * ------------------------- */ + +@define-color on_surface @foreground; + +/* ------------------------- + * Error states + * ------------------------- */ + +@define-color error @color9; +@define-color on_error @color7; diff --git a/config/waybar/wallust/colors-waybar.css b/config/waybar/wallust/colors-waybar.css index b2afbce4..8a470b1a 100644 --- a/config/waybar/wallust/colors-waybar.css +++ b/config/waybar/wallust/colors-waybar.css @@ -1,11 +1,11 @@ -/* ---- πŸ’« https://github.com/JaKooLit πŸ’« ---- */ +/* ---- πŸ’« https://github.com/JaKooLit πŸ’« ---- */ /* wallust template - colors-waybar */ @define-color foreground #F9E3DF; @define-color background #151316; @define-color background-alt rgba(21,19,22,0.25); @define-color cursor #F9E3DF; - + @define-color color0 #3D3A3E; @define-color color1 #190E1E; @define-color color2 #191F64; @@ -21,4 +21,4 @@ @define-color color12 #7F4EA2; @define-color color13 #A0536C; @define-color color14 #EDAEA4; - @define-color color15 #EECEC9; \ No newline at end of file + @define-color color15 #EECEC9; -- cgit v1.2.3 From 32e564b0334d9a5e89b347d93972669d3e93f830 Mon Sep 17 00:00:00 2001 From: brockar Date: Tue, 6 Jan 2026 21:30:29 -0300 Subject: fix: clean hypr/configs/Startup_apps.conf --- config/hypr/configs/Startup_Apps.conf | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/config/hypr/configs/Startup_Apps.conf b/config/hypr/configs/Startup_Apps.conf index 550c79d4..2bf902cd 100644 --- a/config/hypr/configs/Startup_Apps.conf +++ b/config/hypr/configs/Startup_Apps.conf @@ -1,34 +1,23 @@ # /* ---- πŸ’« https://github.com/JaKooLit πŸ’« ---- */ # # Commands and Apps to be executed at launch (vendor defaults) - $scriptsDir = $HOME/.config/hypr/scripts $UserScripts = $HOME/.config/hypr/UserScripts - -$wallDIR = $HOME/Pictures/wallpapers # change path manually here if needed $lock = $scriptsDir/LockScreen.sh $SwwwRandom = $UserScripts/WallpaperAutoChange.sh $livewallpaper="" +$wallDIR = $HOME/Pictures/wallpapers # change path manually here if needed ### wallpaper stuff ### exec-once = swww-daemon --format xrgb #exec-once = mpvpaper '*' -o "load-scripts=no no-audio --loop" $livewallpaper - # wallpaper random #exec-once = $SwwwRandom $wallDIR # random wallpaper switcher every 30 minutes ### Startup ### exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP - -# Drop Down terminal -# See Bug#810 https://github.com/JaKooLit/Hyprland-Dots/issues/810#issuecomment-3351947644 exec-once = $HOME/.config/hypr/scripts/Dropterminal.sh kitty & - - -# Polkit (Polkit Gnome / KDE) exec-once = $scriptsDir/Polkit.sh - -# starup apps exec-once = nm-applet --indicator exec-once = nm-tray # For ubuntu exec-once = swaync @@ -37,6 +26,8 @@ exec-once = swaync #exec-once = rog-control-center exec-once = waybar exec-once = qs -c overview # Quickshell Overview +exec-once = hypridle +exec-once = $scriptsDir/Hyprsunset.sh init # Clipboard manager exec-once = wl-paste --type text --watch cliphist store @@ -45,11 +36,6 @@ exec-once = wl-paste --type image --watch cliphist store # Rainbow borders exec-once = $UserScripts/RainbowBorders.sh -# hypridle for hyprlock -exec-once = hypridle - -# Resume Hyprsunset if state is "on" from previous session -exec-once = $scriptsDir/Hyprsunset.sh init # Here are list of features available but disabled by default # Persistent wallpaper -- cgit v1.2.3 From f5e75aa7d630e170b777a06aea05feb5680ef019 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Tue, 6 Jan 2026 22:35:58 -0500 Subject: Improved error and dependency checking MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cancel behavior under set -e: rofi returns non‑zero on Escape/cancel. Added dependency checksf wallust/rofi/notify-send aren’t installed Combine the two sed calls into one. Error handling always send a β€œchanged” notification even if wallust theme fails. Check the exit status and notify on failure. On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/hypr/scripts/ThemeChanger.sh new file: config/hypr/scripts/ThemeChanger.sh.ori --- config/hypr/scripts/ThemeChanger.sh | 62 +++++++++++++++++++++++---------- config/hypr/scripts/ThemeChanger.sh.ori | 27 ++++++++++++++ 2 files changed, 71 insertions(+), 18 deletions(-) create mode 100755 config/hypr/scripts/ThemeChanger.sh.ori diff --git a/config/hypr/scripts/ThemeChanger.sh b/config/hypr/scripts/ThemeChanger.sh index 15534258..0843fd69 100755 --- a/config/hypr/scripts/ThemeChanger.sh +++ b/config/hypr/scripts/ThemeChanger.sh @@ -1,5 +1,4 @@ #!/usr/bin/env bash - set -euo pipefail # SPDX-FileCopyrightText: 2025-present Ahum Maitra theahummaitra@gmail.com @@ -8,20 +7,47 @@ set -euo pipefail # Repository url : https://github.com/TheAhumMaitra/cautious-waddle -# User choice -choice=$(wallust theme list \ - | sed '1d' \ - | sed 's/^- //' \ - | rofi -dmenu -p "Select Global Theme") - -# If user requested to exit, then exit -[[ -z "$choice" ]] && exit 0 - -# Apply the theme -wallust theme "$choice" - -# Inform user about theme changed -notify-send "Global theme changed" "Global Theme selected $choice" - -# Give warning to user for Waybar theme refresh -notify-send "Press SUPER+ALT+R to Refresh Waybar Theme" +require() { + command -v "$1" >/dev/null 2>&1 || { + printf '%s\n' "Missing dependency: $1" >&2 + exit 127 + } +} + +require wallust +require rofi + +# notify-send is optional +have_notify() { command -v notify-send >/dev/null 2>&1; } + +# Prompt for theme; guard -e on cancel +set +e +choice="$(wallust theme list \ + | sed -e '1d' -e 's/^- //' \ + | rofi -dmenu -i -p 'Select Global Theme')" +prompt_status=$? +set -e + +# Exit cleanly on cancel or empty selection +if (( prompt_status != 0 )) || [[ -z "${choice}" ]]; then + exit 0 +fi + +# Apply the theme and report result +if wallust theme -- "${choice}"; then + have_notify && notify-send -a ThemeChanger \ + -h string:x-dunst-stack-tag:themechanger \ + "Global theme changed" "Selected: ${choice}" + + # Try to refresh Waybar automatically; ignore failures + if command -v waybar-msg >/dev/null 2>&1; then + waybar-msg cmd reload >/dev/null 2>&1 || true + else + pkill -SIGUSR2 waybar >/dev/null 2>&1 || true + fi +else + have_notify && notify-send -u critical -a ThemeChanger \ + -h string:x-dunst-stack-tag:themechanger \ + "Failed to apply theme" "${choice}" + exit 1 +fi diff --git a/config/hypr/scripts/ThemeChanger.sh.ori b/config/hypr/scripts/ThemeChanger.sh.ori new file mode 100755 index 00000000..15534258 --- /dev/null +++ b/config/hypr/scripts/ThemeChanger.sh.ori @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +set -euo pipefail + +# SPDX-FileCopyrightText: 2025-present Ahum Maitra theahummaitra@gmail.com +# +# SPDX-License-Identifier: GPL-3.0-or-later + +# Repository url : https://github.com/TheAhumMaitra/cautious-waddle + +# User choice +choice=$(wallust theme list \ + | sed '1d' \ + | sed 's/^- //' \ + | rofi -dmenu -p "Select Global Theme") + +# If user requested to exit, then exit +[[ -z "$choice" ]] && exit 0 + +# Apply the theme +wallust theme "$choice" + +# Inform user about theme changed +notify-send "Global theme changed" "Global Theme selected $choice" + +# Give warning to user for Waybar theme refresh +notify-send "Press SUPER+ALT+R to Refresh Waybar Theme" -- cgit v1.2.3 From 2f03d6a418ea5f034fec40ff69e5adddb45f88f2 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Tue, 6 Jan 2026 23:08:38 -0500 Subject: Added comment focus_under_window only works in HL 0.53+ This setting resolves ALT+TAB cycle-next/bring-to-front when windows fullscreen or maximized. HL less than 53 will generate an error and that line will have be commented out On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/hypr/configs/SystemSettings.conf --- config/hypr/configs/SystemSettings.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/config/hypr/configs/SystemSettings.conf b/config/hypr/configs/SystemSettings.conf index af8fe7a6..f49960cd 100644 --- a/config/hypr/configs/SystemSettings.conf +++ b/config/hypr/configs/SystemSettings.conf @@ -93,6 +93,7 @@ misc { enable_anr_dialog = true # Application not Responding (ANR) anr_missed_pings = 15 # ANR Threshold default 1 is too low allow_session_lock_restore = true # Prevent lockscreen crash when resume from suspend + # This only works with HL v0.53+ on_focus_under_fullscreen = 1 # 0 - Default, no change # 1 - New focused window takes over fullscreen (Windows-like Alt-Tab) -- cgit v1.2.3 From eb31d00157e0f13687e26caaf87600e241d350b4 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Tue, 6 Jan 2026 23:24:10 -0500 Subject: Fixing pathing issue in ML4W Glass config file On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: waybar/style/ML4W Glass.css --- config/waybar/style/ML4W Glass.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/waybar/style/ML4W Glass.css b/config/waybar/style/ML4W Glass.css index 3c1389ee..6d5fa602 100644 --- a/config/waybar/style/ML4W Glass.css +++ b/config/waybar/style/ML4W Glass.css @@ -23,7 +23,7 @@ General font-feature-settings: '"zero", "ss01", "ss02", "ss03", "ss04", "ss05", "cv31"'; } -@import "../waybar/style/ML4W/glass.css"; +@import "ML4W/glass.css"; window#waybar { background: transparent; -- 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(-) 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(-) 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 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 66a102119763ff12c89a2ad5728891dd1a0806d3 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Wed, 7 Jan 2026 00:04:34 -0500 Subject: Fixing ML4W path again --- config/waybar/style/ML4W Glass.css | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/config/waybar/style/ML4W Glass.css b/config/waybar/style/ML4W Glass.css index 6d5fa602..066eb7fc 100644 --- a/config/waybar/style/ML4W Glass.css +++ b/config/waybar/style/ML4W Glass.css @@ -23,7 +23,7 @@ General font-feature-settings: '"zero", "ss01", "ss02", "ss03", "ss04", "ss05", "cv31"'; } -@import "ML4W/glass.css"; +@import "style/ML4W/glass.css"; window#waybar { background: transparent; @@ -32,7 +32,8 @@ window#waybar { .modules-left { background-color: @surface; border-radius: 12px; - background: radial-gradient( + background: + radial-gradient( circle at 50% 250%, alpha(darker(@surface), 0.9), alpha(@surface_dim, 0.9) @@ -49,7 +50,8 @@ window#waybar { .modules-right { background-color: @surface; border-radius: 12px; - background: radial-gradient( + background: + radial-gradient( circle at 50% 250%, alpha(darker(@surface), 0.9), alpha(@surface_dim, 0.9) @@ -66,7 +68,8 @@ window#waybar { .modules-center { background-color: @surface; border-radius: 12px; - background: radial-gradient( + background: + radial-gradient( circle at 50% 250%, alpha(darker(@surface), 0.9), alpha(@surface_dim, 0.9) @@ -91,7 +94,8 @@ label.module { color: @on_surface; padding: 3px 10px; transition: all 0.3s ease-out; - background: radial-gradient( + background: + radial-gradient( circle at 50% 250%, @on_tertiary_fixed_variant, @on_tertiary_fixed @@ -130,7 +134,8 @@ label.module:hover { transition: all 0.3s ease-in-out; min-width: 30px; border-radius: 8px; - box-shadow: inset 1px 2px 2px rgba(255, 255, 255, 0.5), + box-shadow: + inset 1px 2px 2px rgba(255, 255, 255, 0.5), inset 0 1px 1px rgba(255, 255, 255, 0.8); } @@ -146,8 +151,8 @@ label.module:hover { tooltip { background-color: @surface; border-radius: 12px; - background: radial-gradient(circle at 50% 250%, @surface, @surface_dim) - padding-box, + background: + radial-gradient(circle at 50% 250%, @surface, @surface_dim) padding-box, linear-gradient(#ffffff, @on_primary) border-box; border: 1px solid transparent; opacity: 0.7; -- cgit v1.2.3 From 6c22b060a60ef539b856da859375a8279f31c1f2 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Wed, 7 Jan 2026 14:02:56 -0500 Subject: Fixed Window Rule for thunar copy progress On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: WindowRules-config-v3.conf --- config/hypr/configs/WindowRules-config-v3.conf | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/config/hypr/configs/WindowRules-config-v3.conf b/config/hypr/configs/WindowRules-config-v3.conf index 7b772c26..00c98644 100644 --- a/config/hypr/configs/WindowRules-config-v3.conf +++ b/config/hypr/configs/WindowRules-config-v3.conf @@ -111,7 +111,6 @@ windowrule = match:tag multimedia, opacity 1.0 # POSITION windowrule = match:tag KooL_Cheat, center on -windowrule = match:class ([Tt]hunar) match:title negative:(.*[Tt]hunar.*), center on windowrule = match:title ^(ROG Control)$, center on windowrule = match:tag KooL-Settings, center on windowrule = match:title ^(Keybindings)$, center on @@ -141,7 +140,6 @@ windowrule = match:title ^(Authentication Required)$, float on, center on windowrule = match:class (codium|codium-url-handler|VSCodium) match:title negative:(.*codium.*|.*VSCodium.*), float on windowrule = match:class ^(com.heroicgameslauncher.hgl)$ match:title negative:(Heroic Games Launcher), float on windowrule = match:class ^([Ss]team)$ match:title negative:^([Ss]team)$, float on -windowrule = match:class ([Tt]hunar) match:title negative:(.*[Tt]hunar.*), float on windowrule = match:title ^(Add Folder to Workspace)$, float on, size (monitor_w*0.7) (monitor_h*0.6), center on windowrule = match:title ^(Save As)$, float on, size (monitor_w*0.7) (monitor_h*0.6), center on windowrule = match:initial_title (Open Files), float on, size (monitor_w*0.7) (monitor_h*0.6) @@ -205,4 +203,14 @@ windowrule { size = (monitor_w*0.3) (monitor_h*0.3) } +# Thunar copy progress dialog +windowrule { + name = Thunar-Progress-bar + match:class = ^(thunar)$ + match:title = ^(File Operation Progress)$ + float = on + center = on + size = (monitor_w*0.26) (monitor_h*0.18) +} + -- cgit v1.2.3 From 95861d3827ce294ef321b996813c910bcf22b816 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Wed, 7 Jan 2026 14:51:31 -0500 Subject: Adding better control over wallust pallete generation Then refresh On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/hypr/scripts/ThemeChanger.sh --- config/hypr/scripts/ThemeChanger.sh | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) 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(-) 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(-) 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 b19a90cd55c09e2cb43b9f3bd965c19ed9095fd2 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Wed, 7 Jan 2026 15:11:14 -0500 Subject: Found other rofi themes that were hard coded RED vs $color13 On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/rofi/themes/KooL_style-1.rasi modified: config/rofi/themes/KooL_style-13-Vertical.rasi modified: config/rofi/themes/KooL_style-14.rasi modified: config/rofi/themes/KooL_style-3-Fullscreen-v2.rasi modified: config/rofi/themes/KooL_style-5.rasi modified: config/rofi/themes/KooL_style-6.rasi modified: config/rofi/themes/KooL_style-7.rasi modified: config/rofi/themes/saint-rofi.rasi --- config/rofi/themes/KooL_style-1.rasi | 2 +- config/rofi/themes/KooL_style-13-Vertical.rasi | 2 +- config/rofi/themes/KooL_style-14.rasi | 2 +- config/rofi/themes/KooL_style-3-Fullscreen-v2.rasi | 2 +- config/rofi/themes/KooL_style-5.rasi | 2 +- config/rofi/themes/KooL_style-6.rasi | 2 +- config/rofi/themes/KooL_style-7.rasi | 2 +- config/rofi/themes/saint-rofi.rasi | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/config/rofi/themes/KooL_style-1.rasi b/config/rofi/themes/KooL_style-1.rasi index 89bb959e..0e2eb709 100644 --- a/config/rofi/themes/KooL_style-1.rasi +++ b/config/rofi/themes/KooL_style-1.rasi @@ -25,7 +25,7 @@ configuration { background-alt: @color1; selected: @color12; active: @color11; - urgent: red; + urgent: @color13; text-selected: @background; text-color: @foreground; diff --git a/config/rofi/themes/KooL_style-13-Vertical.rasi b/config/rofi/themes/KooL_style-13-Vertical.rasi index 1e7f8337..850b564c 100644 --- a/config/rofi/themes/KooL_style-13-Vertical.rasi +++ b/config/rofi/themes/KooL_style-13-Vertical.rasi @@ -25,7 +25,7 @@ configuration { background-alt: @color10; selected: @color12; active: @color11; - urgent: red; + urgent: @color13; text-selected: @background; text-color: @foreground; diff --git a/config/rofi/themes/KooL_style-14.rasi b/config/rofi/themes/KooL_style-14.rasi index a766cb96..fddf18bd 100644 --- a/config/rofi/themes/KooL_style-14.rasi +++ b/config/rofi/themes/KooL_style-14.rasi @@ -19,7 +19,7 @@ configuration { background-alt: @color0; selected: @color13; active: @color12; - urgent: #8E3596; + urgent: @color13; } /*****----- Main Window -----*****/ diff --git a/config/rofi/themes/KooL_style-3-Fullscreen-v2.rasi b/config/rofi/themes/KooL_style-3-Fullscreen-v2.rasi index 7e771105..37e515a9 100644 --- a/config/rofi/themes/KooL_style-3-Fullscreen-v2.rasi +++ b/config/rofi/themes/KooL_style-3-Fullscreen-v2.rasi @@ -26,7 +26,7 @@ configuration { background-alt: @color7; selected: @color12; active: @color11; - urgent: red; + urgent: @color13; border-color: @selected; handle-color: @selected; diff --git a/config/rofi/themes/KooL_style-5.rasi b/config/rofi/themes/KooL_style-5.rasi index 94555ebb..4f51b972 100644 --- a/config/rofi/themes/KooL_style-5.rasi +++ b/config/rofi/themes/KooL_style-5.rasi @@ -26,7 +26,7 @@ configuration { background-alt: @color1; selected: @color12; active: @color11; - urgent: red; + urgent: @color13; text-selected: @background; text-color: @foreground; diff --git a/config/rofi/themes/KooL_style-6.rasi b/config/rofi/themes/KooL_style-6.rasi index c0b1eaa6..dc33b780 100644 --- a/config/rofi/themes/KooL_style-6.rasi +++ b/config/rofi/themes/KooL_style-6.rasi @@ -26,7 +26,7 @@ configuration { background-alt: @color1; selected: @color12; active: @color11; - urgent: red; + urgent: @color13; text-selected: @background; text-color: @foreground; diff --git a/config/rofi/themes/KooL_style-7.rasi b/config/rofi/themes/KooL_style-7.rasi index b1a1a9a9..37172b33 100644 --- a/config/rofi/themes/KooL_style-7.rasi +++ b/config/rofi/themes/KooL_style-7.rasi @@ -26,7 +26,7 @@ configuration { background-alt: @color1; selected: @color12; active: @color11; - urgent: #8E3596; + urgent: @color13; } /*****----- Main Window -----*****/ diff --git a/config/rofi/themes/saint-rofi.rasi b/config/rofi/themes/saint-rofi.rasi index e85c678f..fb7b527a 100644 --- a/config/rofi/themes/saint-rofi.rasi +++ b/config/rofi/themes/saint-rofi.rasi @@ -23,7 +23,7 @@ configuration { background-alt: @color1; selected: @color12; active: @color11; - urgent: red; + urgent: @color13; text-selected: @background; text-color: @foreground; border-color: @selected; -- cgit v1.2.3 From c5c3a82383fc6f59d73f5284b2fcfa250d5e78ed Mon Sep 17 00:00:00 2001 From: Don Williams Date: Wed, 7 Jan 2026 15:16:08 -0500 Subject: Fixed KooL_style-4 was hard coded to red On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/rofi/themes/KooL_style-4.rasi --- config/rofi/themes/KooL_style-4.rasi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/rofi/themes/KooL_style-4.rasi b/config/rofi/themes/KooL_style-4.rasi index ea8d2c39..5742b848 100644 --- a/config/rofi/themes/KooL_style-4.rasi +++ b/config/rofi/themes/KooL_style-4.rasi @@ -42,8 +42,8 @@ configuration { selected-normal-foreground: @background; selected-urgent-background: @active; selected-urgent-foreground: @background; - selected-active-background: @urgent; - selected-active-foreground: @color12; + selected-active-background: @active; + selected-active-foreground: @background; alternate-normal-background: @background; alternate-normal-foreground: @foreground; alternate-urgent-background: @urgent; -- cgit v1.2.3 From 06662cbe00e83e2100e5b50d30c34c5a1be86df3 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Wed, 7 Jan 2026 15:22:29 -0500 Subject: Found more places where colors predefined --- config/rofi/themes/KooL_style-7.rasi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/rofi/themes/KooL_style-7.rasi b/config/rofi/themes/KooL_style-7.rasi index 37172b33..c66d9be1 100644 --- a/config/rofi/themes/KooL_style-7.rasi +++ b/config/rofi/themes/KooL_style-7.rasi @@ -153,8 +153,8 @@ element normal.normal { element-text selected, element selected.normal { border-radius: 30px; - background-color: @color11; - text-color: @foreground; + background-color: @selected; + text-color: @background; } element-icon { padding: 0px; -- cgit v1.2.3 From 9aaba19c1c2dbd920f275412044060fe8ad234e4 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Wed, 7 Jan 2026 15:28:44 -0500 Subject: Changed to non urgent colors With some themes, KooL_style-4 and KooL_style-7 selecting Dracula with the existing code sourced "selected" from Wallust colors. Resulting in bright red accent colors Accents now use @color11 and @color12 Hopefully this finally resolves the issues On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/rofi/themes/KooL_style-4.rasi modified: config/rofi/themes/KooL_style-7.rasi --- config/rofi/themes/KooL_style-4.rasi | 28 +++++++++++++++------------- config/rofi/themes/KooL_style-7.rasi | 5 +++-- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/config/rofi/themes/KooL_style-4.rasi b/config/rofi/themes/KooL_style-4.rasi index 5742b848..9c163edb 100644 --- a/config/rofi/themes/KooL_style-4.rasi +++ b/config/rofi/themes/KooL_style-4.rasi @@ -23,11 +23,12 @@ configuration { /*****----- Global Properties -----*****/ * { background-alt: @color1; - selected: @color12; - active: @color11; + /* swap accents: selected uses color11, active uses color12 */ + selected: @color11; + active: @color12; urgent: @color13; - border-color: @color11; + border-color: @active; handle-color: @selected; background-color: @background; foreground-color: @foreground; @@ -38,11 +39,12 @@ configuration { urgent-foreground: @background; active-background: @active; active-foreground: @background; + /* force selection to use the selected accent, not imported selected-* values */ selected-normal-background: @selected; selected-normal-foreground: @background; - selected-urgent-background: @active; + selected-urgent-background: @selected; selected-urgent-foreground: @background; - selected-active-background: @active; + selected-active-background: @selected; selected-active-foreground: @background; alternate-normal-background: @background; alternate-normal-foreground: @foreground; @@ -219,16 +221,16 @@ element normal.active { element-text selected, element selected.normal { - background-color: @selected-normal-background; - text-color: @selected-normal-foreground; + background-color: @selected; + text-color: @background; } element selected.urgent { - background-color: @selected-urgent-background; - text-color: @selected-urgent-foreground; + background-color: @selected; + text-color: @background; } element selected.active { - background-color: @selected-active-background; - text-color: @selected-active-foreground; + background-color: @selected; + text-color: @background; } element alternate.normal { background-color: @alternate-normal-background; @@ -285,8 +287,8 @@ button selected { border: 2px 0px 2px 2px; border-radius: 6px; border-color: @border-color; - background-color: @selected-normal-foreground; - text-color: @selected-normal-background; + background-color: @selected; + text-color: @background; } /*****----- Message -----*****/ diff --git a/config/rofi/themes/KooL_style-7.rasi b/config/rofi/themes/KooL_style-7.rasi index c66d9be1..842cdc06 100644 --- a/config/rofi/themes/KooL_style-7.rasi +++ b/config/rofi/themes/KooL_style-7.rasi @@ -24,8 +24,9 @@ configuration { /*****----- Global Properties -----*****/ * { background-alt: @color1; - selected: @color12; - active: @color11; + /* swap accents: selected uses color11, active uses color12 */ + selected: @color11; + active: @color12; urgent: @color13; } -- cgit v1.2.3 From 4a343d6cb9790f63c81cc28218c39e0388495c94 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Wed, 7 Jan 2026 15:53:28 -0500 Subject: Still issues with style-4/-7 remapping again --- config/rofi/themes/KooL_style-4.rasi | 6 +++--- config/rofi/themes/KooL_style-7.rasi | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/config/rofi/themes/KooL_style-4.rasi b/config/rofi/themes/KooL_style-4.rasi index 9c163edb..1a11b64f 100644 --- a/config/rofi/themes/KooL_style-4.rasi +++ b/config/rofi/themes/KooL_style-4.rasi @@ -23,9 +23,9 @@ configuration { /*****----- Global Properties -----*****/ * { background-alt: @color1; - /* swap accents: selected uses color11, active uses color12 */ - selected: @color11; - active: @color12; + /* selected uses color12, active uses color11 (match other working styles) */ + selected: @color12; + active: @color11; urgent: @color13; border-color: @active; diff --git a/config/rofi/themes/KooL_style-7.rasi b/config/rofi/themes/KooL_style-7.rasi index 842cdc06..5df4092e 100644 --- a/config/rofi/themes/KooL_style-7.rasi +++ b/config/rofi/themes/KooL_style-7.rasi @@ -24,9 +24,9 @@ configuration { /*****----- Global Properties -----*****/ * { background-alt: @color1; - /* swap accents: selected uses color11, active uses color12 */ - selected: @color11; - active: @color12; + /* selected uses color12, active uses color11 (match other working styles) */ + selected: @color12; + active: @color11; urgent: @color13; } -- cgit v1.2.3 From db65793f0894fa8c3d8df94ed4b3b2a1c6a4f50e Mon Sep 17 00:00:00 2001 From: Don Williams Date: Wed, 7 Jan 2026 16:03:30 -0500 Subject: Trying a different mapping for style-4/7 --- config/rofi/themes/KooL_style-4.rasi | 2 +- config/rofi/themes/KooL_style-7.rasi | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/config/rofi/themes/KooL_style-4.rasi b/config/rofi/themes/KooL_style-4.rasi index 1a11b64f..b1859c37 100644 --- a/config/rofi/themes/KooL_style-4.rasi +++ b/config/rofi/themes/KooL_style-4.rasi @@ -22,7 +22,7 @@ configuration { /*****----- Global Properties -----*****/ * { - background-alt: @color1; + background-alt: @color0; /* selected uses color12, active uses color11 (match other working styles) */ selected: @color12; active: @color11; diff --git a/config/rofi/themes/KooL_style-7.rasi b/config/rofi/themes/KooL_style-7.rasi index 5df4092e..bea2ba47 100644 --- a/config/rofi/themes/KooL_style-7.rasi +++ b/config/rofi/themes/KooL_style-7.rasi @@ -23,7 +23,7 @@ configuration { /*****----- Global Properties -----*****/ * { - background-alt: @color1; + background-alt: @color0; /* selected uses color12, active uses color11 (match other working styles) */ selected: @color12; active: @color11; -- cgit v1.2.3 From 4c33b456486ba67361fd65bed43aae7cb4f6ffdc Mon Sep 17 00:00:00 2001 From: Don Williams Date: Wed, 7 Jan 2026 22:21:07 -0500 Subject: Fixed two styles sheets with hardcoded colors On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/waybar/style/[WALLUST] ML4W-modern-mixed.css modified: config/waybar/style/[WALLUST] ML4W-modern.css --- .../waybar/style/[WALLUST] ML4W-modern-mixed.css | 22 +++++++++++----------- config/waybar/style/[WALLUST] ML4W-modern.css | 10 +++++----- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/config/waybar/style/[WALLUST] ML4W-modern-mixed.css b/config/waybar/style/[WALLUST] ML4W-modern-mixed.css index f1b64745..b27c1a9d 100644 --- a/config/waybar/style/[WALLUST] ML4W-modern-mixed.css +++ b/config/waybar/style/[WALLUST] ML4W-modern-mixed.css @@ -4,14 +4,14 @@ @import '../../.config/waybar/wallust/colors-waybar.css'; @define-color backgroundlight @color12; -@define-color backgrounddark #FFFFFF; +@define-color backgrounddark @background; @define-color workspacesbackground1 @color12; -@define-color workspacesbackground2 #FFFFFF; +@define-color workspacesbackground2 @background; @define-color bordercolor @color11; -@define-color textcolor1 @color12; -@define-color textcolor2 #FFFFFF; -@define-color textcolor3 #FFFFFF; -@define-color iconcolor #FFFFFF; +@define-color textcolor1 @foreground; +@define-color textcolor2 @background; +@define-color textcolor3 @foreground; +@define-color iconcolor @foreground; * { font-family: "JetBrainsMono Nerd Font"; @@ -25,7 +25,7 @@ window#waybar { background-color: rgba(0,0,0,0.8); - border-bottom: 0px solid #ffffff; +border-bottom: 0px solid @foreground; /* color: #FFFFFF; */ background: transparent; transition-property: background-color; @@ -241,12 +241,12 @@ window#waybar.empty #window { } #custom-updates.yellow { - background-color: #ff9a3c; - color: #FFFFFF; +background-color: @color11; +color: @foreground; } #custom-updates.red { - background-color: #dc2f2f; +background-color: @color13; color: #FFFFFF; } @@ -344,7 +344,7 @@ window#waybar.empty #window { } #battery.critical:not(.charging) { - background-color: #f53c3c; +background-color: @color13; color: @textcolor3; animation-name: blink; animation-duration: 3.0s; diff --git a/config/waybar/style/[WALLUST] ML4W-modern.css b/config/waybar/style/[WALLUST] ML4W-modern.css index 048f972b..27b72be5 100644 --- a/config/waybar/style/[WALLUST] ML4W-modern.css +++ b/config/waybar/style/[WALLUST] ML4W-modern.css @@ -25,7 +25,7 @@ window#waybar { background-color: rgba(0,0,0,0.8); - border-bottom: 0px solid #ffffff; +border-bottom: 0px solid @foreground; /* color: #FFFFFF; */ background: transparent; transition-property: background-color; @@ -201,7 +201,7 @@ window#waybar.empty #window { margin-right: 15px; font-size: 100%; font-weight: bold; - color: #dc2f2f; +color: @color13; } #custom-menu { @@ -240,12 +240,12 @@ window#waybar.empty #window { } #custom-updates.yellow { - background-color: #ff9a3c; +background-color: @color11; color: #FFFFFF; } #custom-updates.red { - background-color: #dc2f2f; +background-color: @color13; color: #FFFFFF; } @@ -337,7 +337,7 @@ window#waybar.empty #window { } #battery.critical:not(.charging) { - background-color: #f53c3c; +background-color: @color13; color: @textcolor3; animation-name: blink; animation-duration: 3.0s; -- cgit v1.2.3 From 8011b9da493daaf208635339787f4676a1834e50 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Wed, 7 Jan 2026 22:29:24 -0500 Subject: Fixing odd rofi selection colors On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/wallust/templates/colors-rofi.rasi --- config/wallust/templates/colors-rofi.rasi | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/config/wallust/templates/colors-rofi.rasi b/config/wallust/templates/colors-rofi.rasi index 68bc8b6b..b839d827 100644 --- a/config/wallust/templates/colors-rofi.rasi +++ b/config/wallust/templates/colors-rofi.rasi @@ -16,12 +16,12 @@ alternate-normal-foreground: {{foreground}}; alternate-urgent-background: {{background}}; alternate-urgent-foreground: {{foreground}}; -selected-active-background: {{color13}}; -selected-active-foreground: {{foreground}}; -selected-normal-background: {{color13}}; -selected-normal-foreground: {{foreground}}; -selected-urgent-background: {{color12}}; -selected-urgent-foreground: {{foreground}}; +selected-active-background: {{color12}}; +selected-active-foreground: {{background}}; +selected-normal-background: {{color12}}; +selected-normal-foreground: {{background}}; +selected-urgent-background: {{color11}}; +selected-urgent-foreground: {{background}}; background-color: {{background}}; background: rgba(0,0,0,0.7); -- 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(-) 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 7c57b620bd998cc171d24ad0c39ec3df5ccfe4e1 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Wed, 7 Jan 2026 23:05:42 -0500 Subject: Fixed (hopefully) incorrect selection colors in rofi On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/rofi/themes/KooL_style-3-FullScreen-v1.rasi modified: config/rofi/themes/KooL_style-6.rasi modified: config/rofi/themes/KooL_style-8.rasi modified: config/rofi/themes/KooL_style-9.rasi modified: config/rofi/themes/saint-rofi.rasi --- config/rofi/themes/KooL_style-3-FullScreen-v1.rasi | 14 +++++++------- config/rofi/themes/KooL_style-6.rasi | 16 ++++++++-------- config/rofi/themes/KooL_style-8.rasi | 8 ++++---- config/rofi/themes/KooL_style-9.rasi | 2 +- config/rofi/themes/saint-rofi.rasi | 4 ++-- 5 files changed, 22 insertions(+), 22 deletions(-) diff --git a/config/rofi/themes/KooL_style-3-FullScreen-v1.rasi b/config/rofi/themes/KooL_style-3-FullScreen-v1.rasi index 4efe106c..542f3a1f 100644 --- a/config/rofi/themes/KooL_style-3-FullScreen-v1.rasi +++ b/config/rofi/themes/KooL_style-3-FullScreen-v1.rasi @@ -23,10 +23,10 @@ configuration { /* ---- Global Properties ---- */ * { - background-alt: @selected-active-background; // Buttons background - selected: @selected-urgent-background; // Button selected - active: @selected-normal-background; // Window activated - urgent: @selected; // When hovering the activated window (maybe more?) + background-alt: @color0; // neutral background + selected: @color12; // accent + active: @color11; // secondary + urgent: @color13; // alert text-selected: @background; text-color: @foreground; @@ -150,7 +150,7 @@ button { } button selected { background-color: @selected; - text-color: @text-selected; + text-color: @background; } /* ---- Scrollbar ---- */ @@ -191,8 +191,8 @@ element selected.normal { border: 0px 3px 0px 3px; border-radius: 16px; border-color: @selected; - background-color: transparent; - text-color: @background-alt; + background-color: @selected; + text-color: @background; } element selected.urgent { diff --git a/config/rofi/themes/KooL_style-6.rasi b/config/rofi/themes/KooL_style-6.rasi index dc33b780..f0331fdf 100644 --- a/config/rofi/themes/KooL_style-6.rasi +++ b/config/rofi/themes/KooL_style-6.rasi @@ -145,8 +145,8 @@ button { cursor: pointer; } button selected { - background-color: @active; - text-color: @text-selected; + background-color: @selected; + text-color: @background; } @@ -176,16 +176,16 @@ element normal.active { } element selected.normal { - background-color: @color11; - text-color: @text-selected; + background-color: @selected; + text-color: @background; } element selected.urgent { - background-color: @urgent; - text-color: @text-selected; + background-color: @selected; + text-color: @background; } element selected.active { - background-color: @urgent; - text-color: @text-selected; + background-color: @selected; + text-color: @background; } // Adapt rofi theme element alternate.normal { diff --git a/config/rofi/themes/KooL_style-8.rasi b/config/rofi/themes/KooL_style-8.rasi index e0ca3208..37ce0172 100644 --- a/config/rofi/themes/KooL_style-8.rasi +++ b/config/rofi/themes/KooL_style-8.rasi @@ -131,8 +131,8 @@ button { } button selected { - background-color: @color12; - text-color: @foreground; + background-color: @selected; + text-color: @background; } /* ---- Scrollbar ---- */ @@ -156,8 +156,8 @@ element { element-text selected, element selected.normal { - background-color: @color11; - text-color: @foreground; + background-color: @selected; + text-color: @background; border-radius: 1.5em; } diff --git a/config/rofi/themes/KooL_style-9.rasi b/config/rofi/themes/KooL_style-9.rasi index 6b1346f6..dc50f941 100644 --- a/config/rofi/themes/KooL_style-9.rasi +++ b/config/rofi/themes/KooL_style-9.rasi @@ -23,7 +23,7 @@ configuration { /*****----- Global Properties -----*****/ * { BG: @background; - BGA: @color11; + BGA: @color12; FG: @foreground; FGA: #F28FADff; BDR: @color12; diff --git a/config/rofi/themes/saint-rofi.rasi b/config/rofi/themes/saint-rofi.rasi index fb7b527a..27fdea13 100644 --- a/config/rofi/themes/saint-rofi.rasi +++ b/config/rofi/themes/saint-rofi.rasi @@ -143,8 +143,8 @@ element normal.active { } element selected.normal { - background-color: @color11; - text-color: @text-selected; + background-color: @selected; + text-color: @background; } element selected.urgent { background-color: @urgent; -- cgit v1.2.3 From 80842a092b0e254c4570da9d4961606a82c2cb74 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Wed, 7 Jan 2026 23:20:23 -0500 Subject: Fixing colors on two rofi styles KooL_style-8 and -6 On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/rofi/themes/KooL_style-6.rasi modified: config/rofi/themes/KooL_style-8.rasi --- config/rofi/themes/KooL_style-6.rasi | 7 ++++++- config/rofi/themes/KooL_style-8.rasi | 7 +++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/config/rofi/themes/KooL_style-6.rasi b/config/rofi/themes/KooL_style-6.rasi index f0331fdf..a25eaa19 100644 --- a/config/rofi/themes/KooL_style-6.rasi +++ b/config/rofi/themes/KooL_style-6.rasi @@ -169,7 +169,12 @@ element normal.urgent { text-color: @foreground; } -element-text selected, +/* Separate rules so selected text does not paint a second background */ +element-text selected { + background-color: transparent; + text-color: @background; +} + element normal.active { background-color: @active; text-color: @foreground; diff --git a/config/rofi/themes/KooL_style-8.rasi b/config/rofi/themes/KooL_style-8.rasi index 37ce0172..a3dea01a 100644 --- a/config/rofi/themes/KooL_style-8.rasi +++ b/config/rofi/themes/KooL_style-8.rasi @@ -23,6 +23,13 @@ configuration { /* ---- Global Properties ---- */ * { + /* Define palette mappings used below */ + selected: @color12; /* accent */ + active: @color11; /* secondary */ + urgent: @color13; /* alerts */ + text-selected: @background; /* readable over accent */ + text-color: @foreground; + border-width: 2px; border-radius: 12px; } -- cgit v1.2.3 From 81a54c67aae4e24ca3e2eff88c5036e0a8c1671a Mon Sep 17 00:00:00 2001 From: Don Williams Date: Wed, 7 Jan 2026 23:50:21 -0500 Subject: Added ghostty config file w/wallust integration On branch development Your branch is up to date with 'origin/development'. Changes to be committed: new file: ghostty/ghostty.config modified: ../copy.sh --- config/ghostty/ghostty.config | 62 +++++++++++++++++++++++++++++++++++++++++++ copy.sh | 13 +++++++++ 2 files changed, 75 insertions(+) create mode 100644 config/ghostty/ghostty.config diff --git a/config/ghostty/ghostty.config b/config/ghostty/ghostty.config new file mode 100644 index 00000000..9101ce82 --- /dev/null +++ b/config/ghostty/ghostty.config @@ -0,0 +1,62 @@ +adjust-cell-height = 10% +background-blur-radius = 60 +background-opacity = 1.00 +bold-is-bright = false +confirm-close-surface = false +cursor-style = bar +font-family = Maple Mono NF +font-size = 12 +gtk-single-instance = true +keybind = clear +keybind = ctrl+shift+c=copy_to_clipboard +keybind = ctrl+shift+v=paste_from_clipboard +keybind = ctrl+shift+plus=increase_font_size:1 +keybind = ctrl+shift+minus=decrease_font_size:1 +keybind = ctrl+shift+zero=reset_font_size +keybind = alt+s>r=reload_config +keybind = alt+s>x=close_surface +keybind = alt+s>n=new_window +keybind = alt+s>c=new_tab +keybind = alt+s>shift+l=next_tab +keybind = alt+s>shift+h=previous_tab +keybind = alt+s>comma=move_tab:-1 +keybind = alt+s>period=move_tab:1 +keybind = alt+s>1=goto_tab:1 +keybind = alt+s>2=goto_tab:2 +keybind = alt+s>3=goto_tab:3 +keybind = alt+s>4=goto_tab:4 +keybind = alt+s>5=goto_tab:5 +keybind = alt+s>6=goto_tab:6 +keybind = alt+s>7=goto_tab:7 +keybind = alt+s>8=goto_tab:8 +keybind = alt+s>9=goto_tab:9 +keybind = alt+s>\\=new_split:right +keybind = alt+s>-=new_split:down +keybind = alt+s>j=goto_split:bottom +keybind = alt+s>k=goto_split:top +keybind = alt+s>h=goto_split:left +keybind = alt+s>l=goto_split:right +keybind = alt+s>z=toggle_split_zoom +keybind = alt+s>e=equalize_splits +mouse-hide-while-typing = true +quick-terminal-position = center +selection-background = #2d3f76 +selection-foreground = #c8d3f5 +shell-integration = detect +shell-integration-features = cursor,sudo +term = xterm-256color +#theme = dark:catppuccin-mocha,light:catppuccin-mocha +title = ddubsOS-GhosTTY +unfocused-split-opacity = 0.5 +wait-after-command = false +window-height = 32 +window-save-state = always +window-theme = dark +window-width = 110 +#config-file = ./config-dankcolors + +# Theme switching (optional): managed by your theme changer (symlink or generated file). +config-file = ?~/.config/ghostty/theme.conf + +# Wallust (optional): wallust template should write Ghostty colors here; it will override theme colors. +config-file = ?~/.config/ghostty/wallust.conf diff --git a/copy.sh b/copy.sh index d73514b4..9de8677c 100755 --- a/copy.sh +++ b/copy.sh @@ -717,6 +717,19 @@ for DIR_NAME in $DIR; do fi done +# Install Ghostty config +GHOSTTY_SRC="config/ghostty/ghostty.config" +GHOSTTY_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/ghostty" +GHOSTTY_DEST="$GHOSTTY_DIR/config" + +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" +else + echo "${ERROR} - $GHOSTTY_SRC not found; skipping Ghostty config install." 2>&1 | tee -a "$LOG" +fi + printf "\n%.0s" {1..1} # ags config -- cgit v1.2.3 From c0a774442d1d880e46d692d8c8875d560f6b0050 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Wed, 7 Jan 2026 23:51:58 -0500 Subject: Updated CHANGELOG On branch development Your branch is ahead of 'origin/development' by 1 commit. (use "git push" to publish your local commits) Changes to be committed: modified: CHANGELOG.md --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f778c622..91da190a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,8 @@ - Added "Glass Style" taken from `ML4W` dotfiles - Thank you [TheAhumMaitra](https://github.com/TheAhumMaitra) - Fixed more WindowRules + - Fixed rofi themes to work with Theme changer + - Added `ghostty` terminal config file integrated with `wallust` and themes - 2026-01-04 - Fullscreen or maximized would exit using `ALT-TAB` (cycle next/bring-to-front) -- cgit v1.2.3 From 230d85be9fbccb6653f031cecd248442350b7e58 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Wed, 7 Jan 2026 23:59:19 -0500 Subject: Had to remove some features for older ghostty builds On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: ghostty.config --- config/ghostty/ghostty.config | 35 +---------------------------------- 1 file changed, 1 insertion(+), 34 deletions(-) diff --git a/config/ghostty/ghostty.config b/config/ghostty/ghostty.config index 9101ce82..00def172 100644 --- a/config/ghostty/ghostty.config +++ b/config/ghostty/ghostty.config @@ -7,37 +7,6 @@ cursor-style = bar font-family = Maple Mono NF font-size = 12 gtk-single-instance = true -keybind = clear -keybind = ctrl+shift+c=copy_to_clipboard -keybind = ctrl+shift+v=paste_from_clipboard -keybind = ctrl+shift+plus=increase_font_size:1 -keybind = ctrl+shift+minus=decrease_font_size:1 -keybind = ctrl+shift+zero=reset_font_size -keybind = alt+s>r=reload_config -keybind = alt+s>x=close_surface -keybind = alt+s>n=new_window -keybind = alt+s>c=new_tab -keybind = alt+s>shift+l=next_tab -keybind = alt+s>shift+h=previous_tab -keybind = alt+s>comma=move_tab:-1 -keybind = alt+s>period=move_tab:1 -keybind = alt+s>1=goto_tab:1 -keybind = alt+s>2=goto_tab:2 -keybind = alt+s>3=goto_tab:3 -keybind = alt+s>4=goto_tab:4 -keybind = alt+s>5=goto_tab:5 -keybind = alt+s>6=goto_tab:6 -keybind = alt+s>7=goto_tab:7 -keybind = alt+s>8=goto_tab:8 -keybind = alt+s>9=goto_tab:9 -keybind = alt+s>\\=new_split:right -keybind = alt+s>-=new_split:down -keybind = alt+s>j=goto_split:bottom -keybind = alt+s>k=goto_split:top -keybind = alt+s>h=goto_split:left -keybind = alt+s>l=goto_split:right -keybind = alt+s>z=toggle_split_zoom -keybind = alt+s>e=equalize_splits mouse-hide-while-typing = true quick-terminal-position = center selection-background = #2d3f76 @@ -45,15 +14,13 @@ selection-foreground = #c8d3f5 shell-integration = detect shell-integration-features = cursor,sudo term = xterm-256color -#theme = dark:catppuccin-mocha,light:catppuccin-mocha -title = ddubsOS-GhosTTY +title = GhosTTY unfocused-split-opacity = 0.5 wait-after-command = false window-height = 32 window-save-state = always window-theme = dark window-width = 110 -#config-file = ./config-dankcolors # Theme switching (optional): managed by your theme changer (symlink or generated file). config-file = ?~/.config/ghostty/theme.conf -- 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 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 ba8b3514a022ed3c67f6ae2013e4ebfadad710ad Mon Sep 17 00:00:00 2001 From: Don Williams Date: Thu, 8 Jan 2026 00:24:22 -0500 Subject: Fixing colors for wallust in ghostty config On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/wallust/templates/colors-ghostty.conf --- config/wallust/templates/colors-ghostty.conf | 32 ++++++++++++++-------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/config/wallust/templates/colors-ghostty.conf b/config/wallust/templates/colors-ghostty.conf index 45f93a63..abbae8f9 100644 --- a/config/wallust/templates/colors-ghostty.conf +++ b/config/wallust/templates/colors-ghostty.conf @@ -10,19 +10,19 @@ 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 +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}} -- 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(-) 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(+) 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 de51fd7f8d6e5e0b0d68790b9c2d79d67d0564a7 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Thu, 8 Jan 2026 01:12:27 -0500 Subject: Create default config for Wezterm NOT themed yet At this time wezterm is not installed by default However, if user installs it they will have a nice config to begin with Later I hope to add theming support On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: CHANGELOG.md new file: config/wezterm/wezterm.lua modified: copy.sh --- CHANGELOG.md | 9 +++- config/wezterm/wezterm.lua | 115 +++++++++++++++++++++++++++++++++++++++++++++ copy.sh | 13 +++++ 3 files changed, 136 insertions(+), 1 deletion(-) create mode 100644 config/wezterm/wezterm.lua diff --git a/CHANGELOG.md b/CHANGELOG.md index 91da190a..9480f375 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,14 @@ - Thank you [TheAhumMaitra](https://github.com/TheAhumMaitra) - Fixed more WindowRules - Fixed rofi themes to work with Theme changer - - Added `ghostty` terminal config file integrated with `wallust` and themes + - Added `ghostty` terminal config file integrated with Themes + - `ghostty` is not installed by default + - The `COPR` is already there for Fedora + - `sudo dnf install ghostty` + - The `COPR` repo for `wezterm` is also available + - `sudo dnf install wezterm` + - A config file is already available when you install it + - Most other distros have these terminals in their repo - 2026-01-04 - Fullscreen or maximized would exit using `ALT-TAB` (cycle next/bring-to-front) diff --git a/config/wezterm/wezterm.lua b/config/wezterm/wezterm.lua new file mode 100644 index 00000000..8740cbcf --- /dev/null +++ b/config/wezterm/wezterm.lua @@ -0,0 +1,115 @@ +-- Config from Drew @justaguylinux small mods + +local wezterm = require("wezterm") + +local config = wezterm.config_builder() + +config.enable_wayland = true + +-- Enable if starship prompt won't start +-- config.default_prog = { "/usr/bin/env zsh" } + +-- General appearance and visuals +config.hide_tab_bar_if_only_one_tab = true +-- Set primary font with fallbacks + +config.font = wezterm.font_with_fallback({ + { family = "Fira Code", weight = 250, stretch = "Normal", style = "Normal" }, -- Thin variant + "Fira Code", + "JetBrains Mono", + "Hack", +}) + +-- Previous font config +-- font = wezterm.font("Maple Mono NF") +font_size = 14 + +config.colors = { + tab_bar = { + + active_tab = { + bg_color = "#80bfff", -- col_gray2 (selected tab in bright blue) + fg_color = "#00141d", -- contrast text on active tab + }, + + inactive_tab = { + bg_color = "#1a1a1a", -- col_gray4 (dark background for inactive tabs) + fg_color = "#FFFFFF", -- col_gray3 (white text on inactive tabs) + }, + + new_tab = { + bg_color = "#1a1a1a", -- same as inactive + fg_color = "#4fc3f7", -- col_barbie (for the "+" button) + }, + }, +} + +config.window_background_opacity = 1.0 +-- config.color_scheme = "nightfox" +-- config.color_scheme = 'AdventureTime' +-- config.color_scheme = 'Advark Blue' +config.color_scheme = "Catppuccin Mocha" +-- config.color_scheme = 'Dracula' +config.font_size = 12 +config.font = wezterm.font("FiraCode", { weight = "Regular", italic = false }) + +config.window_padding = { + left = 10, + right = 10, + top = 10, + bottom = 10, +} + +config.use_fancy_tab_bar = true +config.window_frame = { + -- font = wezterm.font({ family = "FiraCode Nerd Font Mono", weight = "Regular" }), + font = wezterm.font({ family = "JetBrainsMono Nerd Font Mono", weight = "Regular" }), +} + +config.default_cursor_style = "BlinkingUnderline" +config.cursor_blink_rate = 500 +config.term = "xterm-256color" +config.bold_brightens_ansi_colors = false +config.max_fps = 120 +config.animation_fps = 30 + +-- Keybindings using ALT for tabs & splits +config.keys = { + -- Tab management + { key = "t", mods = "ALT", action = wezterm.action.SpawnTab("CurrentPaneDomain") }, + { key = "w", mods = "ALT", action = wezterm.action.CloseCurrentTab({ confirm = false }) }, + { key = "n", mods = "ALT", action = wezterm.action.ActivateTabRelative(1) }, + { key = "p", mods = "ALT", action = wezterm.action.ActivateTabRelative(-1) }, + + -- Pane management + { key = "v", mods = "ALT", action = wezterm.action.SplitVertical({ domain = "CurrentPaneDomain" }) }, + { key = "h", mods = "ALT", action = wezterm.action.SplitHorizontal({ domain = "CurrentPaneDomain" }) }, + { key = "q", mods = "ALT", action = wezterm.action.CloseCurrentPane({ confirm = false }) }, + + -- Pane navigation (move between panes with ALT + Arrows) + { key = "LeftArrow", mods = "ALT", action = wezterm.action.ActivatePaneDirection("Left") }, + { key = "RightArrow", mods = "ALT", action = wezterm.action.ActivatePaneDirection("Right") }, + { key = "UpArrow", mods = "ALT", action = wezterm.action.ActivatePaneDirection("Up") }, + { key = "DownArrow", mods = "ALT", action = wezterm.action.ActivatePaneDirection("Down") }, +} + +-- Disable missing glyph warnings, since we have fallback fonts now +config.warn_about_missing_glyphs = false + +-- function for nvidia_gpu +local function is_nvidia_gpu() + local handle = io.popen("lspci | grep -i nvidia") + local result = handle:read("*a") + handle:close() + return result ~= "" +end + +-- NVIDIA optimization settings +-- config.enable_wayland = not is_nvidia_gpu() -- Disable Wayland if NVIDIA GPU is detected +-- config.front_end = "OpenGL" -- More stable than WebGPU with NVIDIA +-- config.webgpu_power_preference = "HighPerformance" +-- config.prefer_egl = true +-- config.freetype_load_target = "Light" +-- config.freetype_render_target = "HorizontalLcd" + +return config diff --git a/copy.sh b/copy.sh index 34a4e543..e552b1e0 100755 --- a/copy.sh +++ b/copy.sh @@ -734,6 +734,19 @@ else echo "${ERROR} - $GHOSTTY_SRC not found; skipping Ghostty config install." 2>&1 | tee -a "$LOG" fi +# Install WezTerm config +WEZTERM_SRC="config/wezterm/wezterm.lua" +WEZTERM_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/wezterm" +WEZTERM_DEST="$WEZTERM_DIR/wezterm.lua" + +if [ -f "$WEZTERM_SRC" ]; then + mkdir -p "$WEZTERM_DIR" + install -m 0644 "$WEZTERM_SRC" "$WEZTERM_DEST" 2>&1 | tee -a "$LOG" + echo "${OK} - Installed WezTerm config to ${MAGENTA}$WEZTERM_DEST${RESET}" 2>&1 | tee -a "$LOG" +else + echo "${ERROR} - $WEZTERM_SRC not found; skipping WezTerm config install." 2>&1 | tee -a "$LOG" +fi + printf "\\n%.0s" {1..1} # ags config -- cgit v1.2.3 From 7152d5ec6f237acc4eae66142f14f697d60a3ae6 Mon Sep 17 00:00:00 2001 From: Tim Date: Thu, 8 Jan 2026 21:46:05 +0200 Subject: fix(swaync): correct mpris album art size (#913) The mpris widget image-size was set to 10 pixels, causing album art to appear as a tiny distorted strip. Changed to 96 pixels for proper display with slight border radius for visual consistency. --- config/swaync/config.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/swaync/config.json b/config/swaync/config.json index 0aa1af40..a5518596 100755 --- a/config/swaync/config.json +++ b/config/swaync/config.json @@ -51,8 +51,8 @@ "text": "Notification" }, "mpris": { - "image-size": 10, - "image-radius": 0 + "image-size": 96, + "image-radius": 8 }, "volume": { "label": "σ°•Ύ" -- cgit v1.2.3 From b32d5df54895bc89f139592cb2116ebeeabe73dd Mon Sep 17 00:00:00 2001 From: Don Williams Date: Thu, 8 Jan 2026 14:50:48 -0500 Subject: Updated CHANGELOG with MPRIS artwork fix --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9480f375..60f6eb9b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ ## v2.3.19 +- 2026-01-08 +- Fixed: MPRIS artwork in Sway notification center only 10 pixels + - Adjusted to 96 pixels + - Thank you @godlyfas for fixing this + - 2026-01-06 - Added Global Theme Changer. - There are many themes to choose from -- 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(-) 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(-) 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 320d2a64813a537f45a986eb4a85fb7b82ed7316 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Thu, 8 Jan 2026 21:18:52 -0500 Subject: Updated CHANGELOG with current script fixes --- CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 60f6eb9b..d9f88343 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,16 @@ - Fixed: MPRIS artwork in Sway notification center only 10 pixels - Adjusted to 96 pixels - Thank you @godlyfas for fixing this +- Fixing scripts + - `TouchPad.sh` never expands `$TOUCHPAD_ENABLED` (and doesn’t source the file that defines it) + - `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. + - `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 a clear error if none are installed, so the script no longer calls the non-existent pa-play. - 2026-01-06 - Added Global Theme Changer. -- 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(-) 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(-) 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(+) 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 27ee85c99ca4f5ab3638d271ee6b372cfac97b4a Mon Sep 17 00:00:00 2001 From: Don Williams Date: Thu, 8 Jan 2026 22:10:22 -0500 Subject: Updated CHANGELOG on wallustswww script improvements On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 319d1fd7..32bb05b4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ - `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. + - Wallpaper and global theme changes are now dramatically faster - `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 -- cgit v1.2.3 From c62fc820dad1321197cc3f9a4dc71361b33357ee Mon Sep 17 00:00:00 2001 From: Don Williams Date: Thu, 8 Jan 2026 22:13:04 -0500 Subject: I updated main branch with 0.53 rules as default now development is same On branch development Your branch is up to date with 'origin/development'. Changes to be committed: new file: config/hypr/configs/WindowRules-pre-53.conf modified: config/hypr/configs/WindowRules.conf --- config/hypr/configs/WindowRules-pre-53.conf | 229 +++++++++++++++++++ config/hypr/configs/WindowRules.conf | 339 +++++++++++++--------------- 2 files changed, 392 insertions(+), 176 deletions(-) create mode 100644 config/hypr/configs/WindowRules-pre-53.conf diff --git a/config/hypr/configs/WindowRules-pre-53.conf b/config/hypr/configs/WindowRules-pre-53.conf new file mode 100644 index 00000000..8a5f99c7 --- /dev/null +++ b/config/hypr/configs/WindowRules-pre-53.conf @@ -0,0 +1,229 @@ +# /* ---- πŸ’« https://github.com/JaKooLit πŸ’« ---- */ # +# Vendor defaults for window rules and layerrules +# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more + +# NOTES: This is only for Hyprland > 0.48 + +# windowrule - tags - add apps under appropriate tag to use the same settings +# browser tags +windowrule = tag +browser, class:^([Ff]irefox|org.mozilla.firefox|[Ff]irefox-esr|[Ff]irefox-bin)$ +windowrule = tag +browser, class:^([Gg]oogle-chrome(-beta|-dev|-unstable)?)$ +windowrule = tag +browser, class:^(chrome-.+-Default)$ # Chrome PWAs +windowrule = tag +browser, class:^([Cc]hromium)$ +windowrule = tag +browser, class:^([Mm]icrosoft-edge(-stable|-beta|-dev|-unstable))$ +windowrule = tag +browser, class:^(Brave-browser(-beta|-dev|-unstable)?)$ +windowrule = tag +browser, class:^([Tt]horium-browser|[Cc]achy-browser)$ +windowrule = tag +browser, class:^(zen-alpha|zen)$ + +# notif tags +windowrule = tag +notif, class:^(swaync-control-center|swaync-notification-window|swaync-client|class)$ + +# KooL settings tag +windowrule = tag +KooL_Cheat, title:^(KooL Quick Cheat Sheet)$ +windowrule = tag +KooL_Settings, title:^(KooL Hyprland Settings)$ +windowrule = tag +KooL-Settings, class:^(nwg-displays|nwg-look)$ + +# terminal tags +windowrule = tag +terminal, class:^(Alacritty|kitty|kitty-dropterm)$ + +# email tags +windowrule = tag +email, class:^([Tt]hunderbird|org.gnome.Evolution)$ +windowrule = tag +email, class:^(eu.betterbird.Betterbird)$ + +# project tags +windowrule = tag +projects, class:^(codium|codium-url-handler|VSCodium)$ +windowrule = tag +projects, class:^(VSCode|code|code-url-handler)$ +windowrule = tag +projects, class:^(jetbrains-.+)$ # JetBrains IDEs + +# screenshare tags +windowrule = tag +screenshare, class:^(com.obsproject.Studio)$ + +# IM tags +windowrule = tag +im, class:^([Dd]iscord|[Ww]ebCord|[Vv]esktop)$ +windowrule = tag +im, class:^([Ff]erdium)$ +windowrule = tag +im, class:^([Ww]hatsapp-for-linux)$ +windowrule = tag +im, class:^(ZapZap|com.rtosta.zapzap)$ +windowrule = tag +im, class:^(org.telegram.desktop|io.github.tdesktop_x64.TDesktop)$ +windowrule = tag +im, class:^(teams-for-linux)$ +windowrule = tag +im, class:^(im.riot.Riot|Element)$ # Element Matrix client + +# game tags +windowrule = tag +games, class:^(gamescope)$ +windowrule = tag +games, class:^(steam_app_\d+)$ + +# gamestore tags +windowrule = tag +gamestore, class:^([Ss]team)$ +windowrule = tag +gamestore, title:^([Ll]utris)$ +windowrule = tag +gamestore, class:^(com.heroicgameslauncher.hgl)$ + +# file-manager tags +windowrule = tag +file-manager, class:^([Tt]hunar|org.gnome.Nautilus|[Pp]cmanfm-qt)$ +windowrule = tag +file-manager, class:^(app.drey.Warp)$ + +# wallpaper tags +windowrule = tag +wallpaper, class:^([Ww]aytrogen)$ + +# multimedia tags +windowrule = tag +multimedia, class:^([Aa]udacious)$ + +# multimedia-video tags +windowrule = tag +multimedia_video, class:^([Mm]pv|vlc)$ + +# settings tags +windowrule = tag +settings, title:^(ROG Control)$ +windowrule = tag +settings, class:^(wihotspot(-gui)?)$ # wifi hotspot +windowrule = tag +settings, class:^([Bb]aobab|org.gnome.[Bb]aobab)$ # Disk usage analyzer +windowrule = tag +settings, class:^(gnome-disks|wihotspot(-gui)?)$ +windowrule = tag +settings, title:(Kvantum Manager) +windowrule = tag +settings, class:^(file-roller|org.gnome.FileRoller)$ # archive manager +windowrule = tag +settings, class:^(nm-applet|nm-connection-editor|blueman-manager)$ +windowrule = tag +settings, class:^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$ +windowrule = tag +settings, class:^(qt5ct|qt6ct|[Yy]ad)$ +windowrule = tag +settings, class:(xdg-desktop-portal-gtk) +windowrule = tag +settings, class:^(org.kde.polkit-kde-authentication-agent-1)$ +windowrule = tag +settings, class:^([Rr]ofi)$ + +# viewer tags +windowrule = tag +viewer, class:^(gnome-system-monitor|org.gnome.SystemMonitor|io.missioncenter.MissionCenter)$ # system monitor +windowrule = tag +viewer, class:^(evince)$ # document viewer +windowrule = tag +viewer, class:^(eog|org.gnome.Loupe)$ # image viewer + +# Some special override rules +windowrule = noblur, tag:multimedia_video* +windowrule = opacity 1.0, tag:multimedia_video* + +# POSITION +# windowrule = center,floating:1 # warning, it cause even the menu to float and center. +windowrule = center, tag:KooL_Cheat* +windowrule = center, class:([Tt]hunar), title:negative:(.*[Tt]hunar.*) +windowrule = center, title:^(ROG Control)$ +windowrule = center, tag:KooL-Settings* +windowrule = center, title:^(Keybindings)$ +windowrule = center, class:^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$ +windowrule = center, class:^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$ +windowrule = center, class:^([Ff]erdium)$ +windowrule = move 72% 7%,title:^(Picture-in-Picture)$ +#windowrule = move 72% 7%,title:^(Firefox)$ + +# windowrule to avoid idle for fullscreen apps +#windowrule = idleinhibit fullscreen, class:^(*)$ +#windowrule = idleinhibit fullscreen, title:^(*)$ +windowrule = idleinhibit fullscreen, fullscreen:1 + +# windowrule move to workspace +#windowrule = workspace 1, tag:email* +#windowrule = workspace 2, tag:browser* +#windowrule = workspace 3, class:^([Tt]hunar)$ +#windowrule = workspace 3, tag:projects* +#windowrule = workspace 5, tag:gamestore* +#windowrule = workspace 7, tag:im* +#windowrule = workspace 8, tag:games* + +# windowrule move to workspace (silent) +#windowrule = workspace 4 silent, tag:screenshare* +#windowrule = workspace 6 silent, class:^(virt-manager)$ +#windowrule = workspace 6 silent, class:^(.virt-manager-wrapped)$ +#windowrule = workspace 9 silent, tag:multimedia* +# +# FLOAT +windowrule = float, tag:KooL_Cheat* +windowrule = float, tag:wallpaper* +windowrule = float, tag:settings* +windowrule = float, tag:viewer* +windowrule = float, tag:KooL-Settings* +windowrule = float, class:([Zz]oom|onedriver|onedriver-launcher)$ +windowrule = float, class:(org.gnome.Calculator), title:(Calculator) +windowrule = float, class:^(mpv|com.github.rafostar.Clapper)$ +windowrule = float, class:^([Qq]alculate-gtk)$ +#windowrule = float, class:^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$ +windowrule = float, class:^([Ff]erdium)$ +windowrule = float, title:^(Picture-in-Picture)$ +#windowrule = float, title:^(Firefox)$ + +# windowrule - ######### float popups and dialogue ####### +windowrule = float, title:^(Authentication Required)$ +windowrule = center, title:^(Authentication Required)$ +windowrule = float, class:(codium|codium-url-handler|VSCodium), title:negative:(.*codium.*|.*VSCodium.*) +windowrule = float, class:^(com.heroicgameslauncher.hgl)$, title:negative:(Heroic Games Launcher) +windowrule = float, class:^([Ss]team)$, title:negative:^([Ss]team)$ +windowrule = float, class:([Tt]hunar), title:negative:(.*[Tt]hunar.*) + +windowrule = float, title:^(Add Folder to Workspace)$ +windowrule = size 70% 60%, title:^(Add Folder to Workspace)$ +windowrule = center, title:^(Add Folder to Workspace)$ + +windowrule = float, title:^(Save As)$ +windowrule = size 70% 60%, title:^(Save As)$ +windowrule = center, title:^(Save As)$ + +windowrule = float, initialTitle:(Open Files) +windowrule = size 70% 60%, initialTitle:(Open Files) + +windowrule = float, title:^(SDDM Background)$ #KooL's Dots YAD for setting SDDM background +windowrule = center, title:^(SDDM Background)$ #KooL's Dots YAD for setting SDDM background +windowrule = size 16% 12%, title:^(SDDM Background)$ #KooL's Dots YAD for setting SDDM background +# END of float popups and dialogue ####### + +# OPACITY +windowrule = opacity 0.99 0.8, tag:browser* +windowrule = opacity 0.9 0.8, tag:projects* +windowrule = opacity 0.94 0.86, tag:im* +windowrule = opacity 0.94 0.86, tag:multimedia* +windowrule = opacity 0.9 0.8, tag:file-manager* +windowrule = opacity 0.9 0.7, tag:terminal* +windowrule = opacity 0.8 0.7, tag:settings* +windowrule = opacity 0.82 0.75, tag:viewer* +windowrule = opacity 0.9 0.7, tag:wallpaper* +windowrule = opacity 0.8 0.7, class:^(gedit|org.gnome.TextEditor|mousepad)$ +windowrule = opacity 0.9 0.8, class:^(deluge)$ +windowrule = opacity 0.9 0.8, class:^(seahorse)$ # gnome-keyring gui +windowrule = opacity 0.95 0.75, title:^(Picture-in-Picture)$ + +# SIZE +windowrule = size 65% 90%, tag:KooL_Cheat* +windowrule = size 70% 70%, tag:wallpaper* +windowrule = size 70% 70%, tag:settings* +windowrule = size 60% 70%, class:^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$ +windowrule = size 60% 70%, class:^([Ff]erdium)$ + +#windowrule = size 25% 25%, title:^(Picture-in-Picture)$ +#windowrule = size 25% 25%, title:^(Firefox)$ + +# PINNING +windowrule = pin, title:^(Picture-in-Picture)$ +#windowrule = pin,title:^(Firefox)$ + +# windowrule - extras +windowrule = keepaspectratio, title:^(Picture-in-Picture)$ + +# BLUR & FULLSCREEN +windowrule = noblur, tag:games* +windowrule = fullscreen, tag:games* + + +#This not gonna take the focus to the window that appears when hovering over some of the parts of the IntelliJ Products +windowrule = noinitialfocus, class:^(jetbrains-*) +windowrule = noinitialfocus, title:^(wind.*)$ + +#windowrule = bordercolor rgb(EE4B55) rgb(880808), fullscreen:1 +#windowrule = bordercolor rgb(282737) rgb(1E1D2D), floating:1 +#windowrule = opacity 0.8 0.8, pinned:1 + +# LAYER RULES +layerrule = blur, rofi +layerrule = ignorezero, rofi +layerrule = blur, notifications +layerrule = ignorezero, notifications +layerrule = blur, quickshell:overview +layerrule = ignorezero, quickshell:overview +layerrule = ignorealpha 0.5, quickshell:overview + +#layerrule = ignorealpha 0.5, tag:notif* + +#layerrule = ignorezero, class:^([Rr]ofi)$ +#layerrule = blur, class:^([Rr]ofi)$ +#layerrule = unset,class:^([Rr]ofi)$ +#layerrule = ignorezero, + +#layerrule = ignorezero, overview +#layerrule = blur, overview diff --git a/config/hypr/configs/WindowRules.conf b/config/hypr/configs/WindowRules.conf index 8a5f99c7..00c98644 100644 --- a/config/hypr/configs/WindowRules.conf +++ b/config/hypr/configs/WindowRules.conf @@ -2,228 +2,215 @@ # Vendor defaults for window rules and layerrules # See https://wiki.hyprland.org/Configuring/Window-Rules/ for more -# NOTES: This is only for Hyprland > 0.48 +# NOTES: This is only for Hyprland >= 0.53 -# windowrule - tags - add apps under appropriate tag to use the same settings +# Some samples on hwo to start apps on specific workspaces +# windowrule = match:tag email*, workspace 1 +# windowrule = match:tag browser*, workspace 2 +# windowrule = match:tag projects*, workspace 3 +# windowrule = match:tag screenshare*, workspace 4 silent +# windowrule = match:tag gamestore*, workspace 5 +# windowrule = match:class ^(virt-manager)$, workspace 6 silent +# windowrule = match:class ^(.virt-manager-wrapped)$, workspace 6 silent +# windowrule = match:tag im*, workspace 7 +# windowrule = match:class obsidian, workspace 8 +# windowrule = match:tag games*, workspace 8 +# windowrule = match:tag multimedia*, workspace 9 silent + + + +# TAGS - add apps under appropriate tag to use the same settings # browser tags -windowrule = tag +browser, class:^([Ff]irefox|org.mozilla.firefox|[Ff]irefox-esr|[Ff]irefox-bin)$ -windowrule = tag +browser, class:^([Gg]oogle-chrome(-beta|-dev|-unstable)?)$ -windowrule = tag +browser, class:^(chrome-.+-Default)$ # Chrome PWAs -windowrule = tag +browser, class:^([Cc]hromium)$ -windowrule = tag +browser, class:^([Mm]icrosoft-edge(-stable|-beta|-dev|-unstable))$ -windowrule = tag +browser, class:^(Brave-browser(-beta|-dev|-unstable)?)$ -windowrule = tag +browser, class:^([Tt]horium-browser|[Cc]achy-browser)$ -windowrule = tag +browser, class:^(zen-alpha|zen)$ +windowrule = match:class ^([Ff]irefox|org.mozilla.firefox|[Ff]irefox-esr|[Ff]irefox-bin)$, tag +browser +windowrule = match:class ^([Gg]oogle-chrome(-beta|-dev|-unstable)?)$, tag +browser +windowrule = match:class ^(chrome-.+-Default)$, tag +browser +windowrule = match:class ^([Cc]hromium)$, tag +browser +windowrule = match:class ^([Mm]icrosoft-edge(-stable|-beta|-dev|-unstable))$, tag +browser +windowrule = match:class ^(Brave-browser(-beta|-dev|-unstable)?)$, tag +browser +windowrule = match:class ^([Tt]horium-browser|[Cc]achy-browser)$, tag +browser +windowrule = match:class ^(zen)$, tag +browser # notif tags -windowrule = tag +notif, class:^(swaync-control-center|swaync-notification-window|swaync-client|class)$ +windowrule = match:class ^(swaync-control-center|swaync-notification-window|swaync-client|class)$, tag +notif # KooL settings tag -windowrule = tag +KooL_Cheat, title:^(KooL Quick Cheat Sheet)$ -windowrule = tag +KooL_Settings, title:^(KooL Hyprland Settings)$ -windowrule = tag +KooL-Settings, class:^(nwg-displays|nwg-look)$ +windowrule = match:title ^(KooL Quick Cheat Sheet)$, tag +KooL_Cheat +windowrule = match:title ^(KooL Hyprland Settings)$, tag +KooL_Settings +windowrule = match:class ^(nwg-displays|nwg-look)$, tag +KooL-Settings # terminal tags -windowrule = tag +terminal, class:^(Alacritty|kitty|kitty-dropterm)$ +windowrule = match:class ^(Alacritty|kitty|kitty-dropterm)$, tag +terminal # email tags -windowrule = tag +email, class:^([Tt]hunderbird|org.gnome.Evolution)$ -windowrule = tag +email, class:^(eu.betterbird.Betterbird)$ +windowrule = match:class ^([Tt]hunderbird|org.gnome.Evolution)$, tag +email +windowrule = match:class ^(eu.betterbird.Betterbird)$, tag +email # project tags -windowrule = tag +projects, class:^(codium|codium-url-handler|VSCodium)$ -windowrule = tag +projects, class:^(VSCode|code|code-url-handler)$ -windowrule = tag +projects, class:^(jetbrains-.+)$ # JetBrains IDEs +windowrule = match:class ^(codium|codium-url-handler|VSCodium)$, tag +projects +windowrule = match:class ^(VSCode|code|code-url-handler)$, tag +projects +windowrule = match:class ^(jetbrains-.+)$, tag +projects +windowrule = match:class ^(dev.zed.Zed|antigravity)$, tag +projects # screenshare tags -windowrule = tag +screenshare, class:^(com.obsproject.Studio)$ +windowrule = match:class ^(com.obsproject.Studio)$, tag +screenshare # IM tags -windowrule = tag +im, class:^([Dd]iscord|[Ww]ebCord|[Vv]esktop)$ -windowrule = tag +im, class:^([Ff]erdium)$ -windowrule = tag +im, class:^([Ww]hatsapp-for-linux)$ -windowrule = tag +im, class:^(ZapZap|com.rtosta.zapzap)$ -windowrule = tag +im, class:^(org.telegram.desktop|io.github.tdesktop_x64.TDesktop)$ -windowrule = tag +im, class:^(teams-for-linux)$ -windowrule = tag +im, class:^(im.riot.Riot|Element)$ # Element Matrix client +windowrule = match:class ^([Dd]iscord|[Ww]ebCord|[Vv]esktop)$, tag +im +windowrule = match:class ^([Ff]erdium)$, tag +im +windowrule = match:class ^([Ww]hatsapp-for-linux)$, tag +im +windowrule = match:class ^(org.telegram.desktop|io.github.tdesktop_x64.TDesktop)$, tag +im +windowrule = match:class ^(teams-for-linux)$, tag +im +windowrule = match:class ^(im.riot.Riot|Element)$, tag +im # game tags -windowrule = tag +games, class:^(gamescope)$ -windowrule = tag +games, class:^(steam_app_\d+)$ +windowrule = match:class ^(gamescope)$, tag +games +windowrule = match:class ^(steam_app_\\d+)$, tag +games # gamestore tags -windowrule = tag +gamestore, class:^([Ss]team)$ -windowrule = tag +gamestore, title:^([Ll]utris)$ -windowrule = tag +gamestore, class:^(com.heroicgameslauncher.hgl)$ +windowrule = match:class ^([Ss]team)$, tag +gamestore +windowrule = match:title ^([Ll]utris)$, tag +gamestore +windowrule = match:class ^(com.heroicgameslauncher.hgl)$, tag +gamestore # file-manager tags -windowrule = tag +file-manager, class:^([Tt]hunar|org.gnome.Nautilus|[Pp]cmanfm-qt)$ -windowrule = tag +file-manager, class:^(app.drey.Warp)$ +windowrule = match:class ^([Tt]hunar|org.gnome.Nautilus|[Pp]cmanfm-qt)$, tag +file-manager +windowrule = match:class ^(app.drey.Warp)$, tag +file-manager # wallpaper tags -windowrule = tag +wallpaper, class:^([Ww]aytrogen)$ +windowrule = match:class ^([Ww]aytrogen)$, tag +wallpaper # multimedia tags -windowrule = tag +multimedia, class:^([Aa]udacious)$ +windowrule = match:class ^([Aa]udacious)$, tag +multimedia # multimedia-video tags -windowrule = tag +multimedia_video, class:^([Mm]pv|vlc)$ +windowrule = match:class ^([Mm]pv|vlc)$, tag +multimedia_video # settings tags -windowrule = tag +settings, title:^(ROG Control)$ -windowrule = tag +settings, class:^(wihotspot(-gui)?)$ # wifi hotspot -windowrule = tag +settings, class:^([Bb]aobab|org.gnome.[Bb]aobab)$ # Disk usage analyzer -windowrule = tag +settings, class:^(gnome-disks|wihotspot(-gui)?)$ -windowrule = tag +settings, title:(Kvantum Manager) -windowrule = tag +settings, class:^(file-roller|org.gnome.FileRoller)$ # archive manager -windowrule = tag +settings, class:^(nm-applet|nm-connection-editor|blueman-manager)$ -windowrule = tag +settings, class:^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$ -windowrule = tag +settings, class:^(qt5ct|qt6ct|[Yy]ad)$ -windowrule = tag +settings, class:(xdg-desktop-portal-gtk) -windowrule = tag +settings, class:^(org.kde.polkit-kde-authentication-agent-1)$ -windowrule = tag +settings, class:^([Rr]ofi)$ +windowrule = match:title ^(ROG Control)$, tag +settings +windowrule = match:class ^(wihotspot(-gui)?)$, tag +settings +windowrule = match:class ^([Bb]aobab|org.gnome.[Bb]aobab)$, tag +settings +windowrule = match:class ^(gnome-disks|wihotspot(-gui)?)$, tag +settings +windowrule = match:title (Kvantum Manager), tag +settings +windowrule = match:class ^(file-roller|org.gnome.FileRoller)$, tag +settings +windowrule = match:class ^(nm-applet|nm-connection-editor|blueman-manager)$, tag +settings +windowrule = match:class ^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$, tag +settings +windowrule = match:class ^(qt5ct|qt6ct)$, tag +settings +windowrule = match:class (xdg-desktop-portal-gtk), tag +settings +windowrule = match:class ^(org.kde.polkit-kde-authentication-agent-1)$, tag +settings +windowrule = match:class ^([Rr]ofi)$, tag +settings # viewer tags -windowrule = tag +viewer, class:^(gnome-system-monitor|org.gnome.SystemMonitor|io.missioncenter.MissionCenter)$ # system monitor -windowrule = tag +viewer, class:^(evince)$ # document viewer -windowrule = tag +viewer, class:^(eog|org.gnome.Loupe)$ # image viewer +windowrule = match:class ^(gnome-system-monitor|org.gnome.SystemMonitor|io.missioncenter.MissionCenter)$, tag +viewer +windowrule = match:class ^(evince)$, tag +viewer +windowrule = match:class ^(eog|org.gnome.Loupe)$, tag +viewer # Some special override rules -windowrule = noblur, tag:multimedia_video* -windowrule = opacity 1.0, tag:multimedia_video* - +windowrule = match:tag multimedia_video, no_blur on +windowrule = match:tag multimedia_video, opacity 1.0 +windowrule = match:tag multimedia, no_blur on +windowrule = match:tag multimedia, opacity 1.0 + # POSITION -# windowrule = center,floating:1 # warning, it cause even the menu to float and center. -windowrule = center, tag:KooL_Cheat* -windowrule = center, class:([Tt]hunar), title:negative:(.*[Tt]hunar.*) -windowrule = center, title:^(ROG Control)$ -windowrule = center, tag:KooL-Settings* -windowrule = center, title:^(Keybindings)$ -windowrule = center, class:^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$ -windowrule = center, class:^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$ -windowrule = center, class:^([Ff]erdium)$ -windowrule = move 72% 7%,title:^(Picture-in-Picture)$ -#windowrule = move 72% 7%,title:^(Firefox)$ +windowrule = match:tag KooL_Cheat, center on +windowrule = match:title ^(ROG Control)$, center on +windowrule = match:tag KooL-Settings, center on +windowrule = match:title ^(Keybindings)$, center on +windowrule = match:class ^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$, center on +windowrule = match:class ^([Ff]erdium)$, center on # windowrule to avoid idle for fullscreen apps -#windowrule = idleinhibit fullscreen, class:^(*)$ -#windowrule = idleinhibit fullscreen, title:^(*)$ -windowrule = idleinhibit fullscreen, fullscreen:1 - -# windowrule move to workspace -#windowrule = workspace 1, tag:email* -#windowrule = workspace 2, tag:browser* -#windowrule = workspace 3, class:^([Tt]hunar)$ -#windowrule = workspace 3, tag:projects* -#windowrule = workspace 5, tag:gamestore* -#windowrule = workspace 7, tag:im* -#windowrule = workspace 8, tag:games* - -# windowrule move to workspace (silent) -#windowrule = workspace 4 silent, tag:screenshare* -#windowrule = workspace 6 silent, class:^(virt-manager)$ -#windowrule = workspace 6 silent, class:^(.virt-manager-wrapped)$ -#windowrule = workspace 9 silent, tag:multimedia* -# +windowrule = match:fullscreen true, idle_inhibit fullscreen +windowrule = idle_inhibit fullscreen, match:fullscreen 1 +windowrule = idle_inhibit fullscreen, match:class ^(*)$ +windowrule = idle_inhibit fullscreen, match:title ^(*)$ + # FLOAT -windowrule = float, tag:KooL_Cheat* -windowrule = float, tag:wallpaper* -windowrule = float, tag:settings* -windowrule = float, tag:viewer* -windowrule = float, tag:KooL-Settings* -windowrule = float, class:([Zz]oom|onedriver|onedriver-launcher)$ -windowrule = float, class:(org.gnome.Calculator), title:(Calculator) -windowrule = float, class:^(mpv|com.github.rafostar.Clapper)$ -windowrule = float, class:^([Qq]alculate-gtk)$ -#windowrule = float, class:^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$ -windowrule = float, class:^([Ff]erdium)$ -windowrule = float, title:^(Picture-in-Picture)$ -#windowrule = float, title:^(Firefox)$ - -# windowrule - ######### float popups and dialogue ####### -windowrule = float, title:^(Authentication Required)$ -windowrule = center, title:^(Authentication Required)$ -windowrule = float, class:(codium|codium-url-handler|VSCodium), title:negative:(.*codium.*|.*VSCodium.*) -windowrule = float, class:^(com.heroicgameslauncher.hgl)$, title:negative:(Heroic Games Launcher) -windowrule = float, class:^([Ss]team)$, title:negative:^([Ss]team)$ -windowrule = float, class:([Tt]hunar), title:negative:(.*[Tt]hunar.*) - -windowrule = float, title:^(Add Folder to Workspace)$ -windowrule = size 70% 60%, title:^(Add Folder to Workspace)$ -windowrule = center, title:^(Add Folder to Workspace)$ - -windowrule = float, title:^(Save As)$ -windowrule = size 70% 60%, title:^(Save As)$ -windowrule = center, title:^(Save As)$ - -windowrule = float, initialTitle:(Open Files) -windowrule = size 70% 60%, initialTitle:(Open Files) - -windowrule = float, title:^(SDDM Background)$ #KooL's Dots YAD for setting SDDM background -windowrule = center, title:^(SDDM Background)$ #KooL's Dots YAD for setting SDDM background -windowrule = size 16% 12%, title:^(SDDM Background)$ #KooL's Dots YAD for setting SDDM background -# END of float popups and dialogue ####### +windowrule = match:tag KooL_Cheat, float on +windowrule = match:tag wallpaper, float on +windowrule = match:tag settings, float on +windowrule = match:tag viewer, float on +windowrule = match:tag KooL-Settings, float on +windowrule = match:class ([Zz]oom|onedriver|onedriver-launcher), float on +windowrule = match:class (org.gnome.Calculator|qalculate-gtk), float on +windowrule = match:class ^(mpv|com.github.rafostar.Clapper)$, float on +windowrule = match:class ^([Qq]alculate-gtk)$, float on +windowrule = match:class ^([Ff]erdium)$, float on + +# popups and dialogue +windowrule = match:title ^(Authentication Required)$, float on, center on +windowrule = match:class (codium|codium-url-handler|VSCodium) match:title negative:(.*codium.*|.*VSCodium.*), float on +windowrule = match:class ^(com.heroicgameslauncher.hgl)$ match:title negative:(Heroic Games Launcher), float on +windowrule = match:class ^([Ss]team)$ match:title negative:^([Ss]team)$, float on +windowrule = match:title ^(Add Folder to Workspace)$, float on, size (monitor_w*0.7) (monitor_h*0.6), center on +windowrule = match:title ^(Save As)$, float on, size (monitor_w*0.7) (monitor_h*0.6), center on +windowrule = match:initial_title (Open Files), float on, size (monitor_w*0.7) (monitor_h*0.6) +windowrule = match:title ^(SDDM Background)$, float on, center on, size (monitor_w*0.16) (monitor_h*0.12) +windowrule = match:class ^(yad)$, float on, center on, size (monitor_w*0.2) (monitor_h*0.2) # OPACITY -windowrule = opacity 0.99 0.8, tag:browser* -windowrule = opacity 0.9 0.8, tag:projects* -windowrule = opacity 0.94 0.86, tag:im* -windowrule = opacity 0.94 0.86, tag:multimedia* -windowrule = opacity 0.9 0.8, tag:file-manager* -windowrule = opacity 0.9 0.7, tag:terminal* -windowrule = opacity 0.8 0.7, tag:settings* -windowrule = opacity 0.82 0.75, tag:viewer* -windowrule = opacity 0.9 0.7, tag:wallpaper* -windowrule = opacity 0.8 0.7, class:^(gedit|org.gnome.TextEditor|mousepad)$ -windowrule = opacity 0.9 0.8, class:^(deluge)$ -windowrule = opacity 0.9 0.8, class:^(seahorse)$ # gnome-keyring gui -windowrule = opacity 0.95 0.75, title:^(Picture-in-Picture)$ +windowrule = match:tag browser, opacity 0.99 0.8 +windowrule = match:tag projects, opacity 0.9 0.8 +windowrule = match:tag im, opacity 0.94 0.86 +windowrule = match:tag multimedia, opacity 0.94 0.86 +windowrule = match:tag file-manager, opacity 0.9 0.8 +windowrule = match:tag terminal, opacity 0.9 0.7 +windowrule = match:tag settings, opacity 0.8 0.7 +windowrule = match:tag viewer, opacity 0.82 0.75 +windowrule = match:tag wallpaper, opacity 0.9 0.7 +windowrule = match:class ^(gedit|org.gnome.TextEditor|mousepad)$, opacity 0.8 0.7 +windowrule = match:class ^(deluge)$, opacity 0.9 0.8 +windowrule = match:class ^(seahorse)$, opacity 0.9 0.8 # SIZE -windowrule = size 65% 90%, tag:KooL_Cheat* -windowrule = size 70% 70%, tag:wallpaper* -windowrule = size 70% 70%, tag:settings* -windowrule = size 60% 70%, class:^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$ -windowrule = size 60% 70%, class:^([Ff]erdium)$ +windowrule = match:tag KooL_Cheat, size (monitor_w*0.65) (monitor_h*0.9) +windowrule = match:tag wallpaper, size (monitor_w*0.7) (monitor_h*0.7) +windowrule = match:tag settings, size (monitor_w*0.7) (monitor_h*0.7) +windowrule = match:class ^([Ff]erdium)$, size (monitor_w*0.6) (monitor_h*0.7) +windowrule = match:class (org.gnome.Calculator|qalculate-gtk), center on, size (monitor_w*0.25) (monitor_h*0.3) -#windowrule = size 25% 25%, title:^(Picture-in-Picture)$ -#windowrule = size 25% 25%, title:^(Firefox)$ - -# PINNING -windowrule = pin, title:^(Picture-in-Picture)$ -#windowrule = pin,title:^(Firefox)$ - -# windowrule - extras -windowrule = keepaspectratio, title:^(Picture-in-Picture)$ # BLUR & FULLSCREEN -windowrule = noblur, tag:games* -windowrule = fullscreen, tag:games* +windowrule = match:tag games, no_blur on, fullscreen 0 +windowrule = match:tag games, fullscreen 0 +# This not gonna take the focus to the window that appears when +# hovering over some of the parts of the IntelliJ Products +windowrule = match:class ^(jetbrains-*), no_initial_focus on +windowrule = match:title ^(wind.*)$, no_initial_focus on -#This not gonna take the focus to the window that appears when hovering over some of the parts of the IntelliJ Products -windowrule = noinitialfocus, class:^(jetbrains-*) -windowrule = noinitialfocus, title:^(wind.*)$ +# LAYER RULES +layerrule = match:namespace rofi, blur on +layerrule = match:namespace notifications, blur on +layerrule = match:namespace quickshell:overview, blur on +layerrule = match:namespace quickshell:overview, ignore_alpha 0.5 + +# Named rules for special cases +windowrule { + name = Whatsapp-zapzap + match:class = ^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$ + float = on + size = (monitor_w*0.6) (monitor_h*0.7) + center = on +} +# Picture-in-Picture +windowrule { + name = Picture-in-Picture + match:title = ^(Picture-in-Picture)$ + float = on + move = 72% 7% + opacity = 0.95 0.75 + pin = on + keep_aspect_ratio = on + size = (monitor_w*0.3) (monitor_h*0.3) +} + +# Thunar copy progress dialog +windowrule { + name = Thunar-Progress-bar + match:class = ^(thunar)$ + match:title = ^(File Operation Progress)$ + float = on + center = on + size = (monitor_w*0.26) (monitor_h*0.18) +} -#windowrule = bordercolor rgb(EE4B55) rgb(880808), fullscreen:1 -#windowrule = bordercolor rgb(282737) rgb(1E1D2D), floating:1 -#windowrule = opacity 0.8 0.8, pinned:1 -# LAYER RULES -layerrule = blur, rofi -layerrule = ignorezero, rofi -layerrule = blur, notifications -layerrule = ignorezero, notifications -layerrule = blur, quickshell:overview -layerrule = ignorezero, quickshell:overview -layerrule = ignorealpha 0.5, quickshell:overview - -#layerrule = ignorealpha 0.5, tag:notif* - -#layerrule = ignorezero, class:^([Rr]ofi)$ -#layerrule = blur, class:^([Rr]ofi)$ -#layerrule = unset,class:^([Rr]ofi)$ -#layerrule = ignorezero, - -#layerrule = ignorezero, overview -#layerrule = blur, overview -- cgit v1.2.3 From e541b2b00869895734f29b5caf1c65d116ee35d0 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Fri, 9 Jan 2026 00:33:00 -0500 Subject: Moving keybinds parsing to python to speed it up On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/hypr/scripts/KeyBinds.sh new file: config/hypr/scripts/keybinds_parser.py --- config/hypr/scripts/KeyBinds.sh | 138 ++----------------- config/hypr/scripts/keybinds_parser.py | 238 +++++++++++++++++++++++++++++++++ 2 files changed, 249 insertions(+), 127 deletions(-) create mode 100755 config/hypr/scripts/keybinds_parser.py 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(+) 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 695fe10be8790fc4411b94eee161506cad7f612d Mon Sep 17 00:00:00 2001 From: Don Williams Date: Fri, 9 Jan 2026 13:59:18 -0500 Subject: Phase 1 of copy.sh update add --upgrade and --express-upgrade opts This allow you to bypass some of the questions, like triming each backup file, they will all be trimmed to one backup No prompting for setting sddm wallpaper nor download wallpapers (since it's upgrade mostly likely already have them) No prompting to restore user customized files. On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: copy.sh --- copy.sh | 223 +++++++++++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 164 insertions(+), 59 deletions(-) diff --git a/copy.sh b/copy.sh index e552b1e0..885fed89 100755 --- a/copy.sh +++ b/copy.sh @@ -22,6 +22,41 @@ GREEN="$(tput setaf 2)" BLUE="$(tput setaf 4)" SKY_BLUE="$(tput setaf 6)" RESET="$(tput sgr0)" +print_usage() { + cat <<'EOF' +Usage: copy.sh [--upgrade] [--express-upgrade] [--help] + +Options: + --upgrade Run the script in upgrade mode (can still prompt for express). + --express-upgrade Upgrade with express behavior (no restore prompts, trims backups). + -h, --help Show this help message and exit. +EOF +} + +UPGRADE_MODE=0 +EXPRESS_MODE=0 + +while [[ $# -gt 0 ]]; do + case "$1" in + --upgrade) + UPGRADE_MODE=1 + ;; + --express-upgrade) + UPGRADE_MODE=1 + EXPRESS_MODE=1 + ;; + -h | --help) + print_usage + exit 0 + ;; + *) + echo "${ERROR} Unknown option: $1" + print_usage + exit 1 + ;; + esac + shift +done # Check if running as root. If root, script will exit if [[ $EUID -eq 0 ]]; then @@ -85,6 +120,12 @@ LOG="Copy-Logs/install-$(date +%d-%H%M%S)_dotfiles.log" # update home directories xdg-user-dirs-update 2>&1 | tee -a "$LOG" || true +if [ "$UPGRADE_MODE" -eq 1 ]; then + echo "${INFO} Upgrade mode enabled." 2>&1 | tee -a "$LOG" +fi +if [ "$EXPRESS_MODE" -eq 1 ]; then + echo "${INFO} Express mode enabled. Optional restore prompts will be skipped." 2>&1 | tee -a "$LOG" +fi # setting up for NVIDIA if lspci -k | grep -A 2 -E "(VGA|3D)" | grep -iq nvidia; then @@ -493,6 +534,28 @@ else fi printf "\n%.0s" {1..1} +if [ "$UPGRADE_MODE" -eq 1 ] && [ "$EXPRESS_MODE" -eq 0 ]; then + while true; do + echo "${NOTE} Express mode skips config restore prompts, SDDM/background questions, and trims old backups." + echo -n "${CAT} Do you want to continue with EXPRESS upgrade mode? (y/N): " + read express_choice + case "$express_choice" in + [Yy]) + EXPRESS_MODE=1 + echo "${INFO} Express mode enabled for this upgrade." 2>&1 | tee -a "$LOG" + break + ;; + [Nn] | "") + echo "${NOTE} Continuing with standard upgrade prompts." 2>&1 | tee -a "$LOG" + break + ;; + *) + echo "${WARN} Please answer y or n." + ;; + esac + done +fi + set -e # Function to create a unique backup directory name with month, day, hours, and minutes @@ -857,28 +920,32 @@ BACKUP_DIR=$(get_backup_dirname) BACKUP_HYPR_PATH="$HYPR_DIR-backup-$BACKUP_DIR" if [ -d "$BACKUP_HYPR_PATH" ]; then - echo -e "\n${NOTE} Restoring ${SKY_BLUE}Animations & Monitor Profiles${RESET} directories into ${YELLOW}$HYPR_DIR${RESET}..." - - DIR_B=("Monitor_Profiles" "animations" "wallpaper_effects") - # Restore directories automatically - for DIR_RESTORE in "${DIR_B[@]}"; do - BACKUP_SUBDIR="$BACKUP_HYPR_PATH/$DIR_RESTORE" - if [ -d "$BACKUP_SUBDIR" ]; then - cp -r "$BACKUP_SUBDIR" "$HYPR_DIR/" - echo "${OK} - Restored directory: ${MAGENTA}$DIR_RESTORE${RESET}" 2>&1 | tee -a "$LOG" - fi - done + if [ "$EXPRESS_MODE" -eq 1 ]; then + echo "${NOTE} Express mode: skipping automatic restoration of animations and monitor profiles." 2>&1 | tee -a "$LOG" + else + echo -e "\n${NOTE} Restoring ${SKY_BLUE}Animations & Monitor Profiles${RESET} directories into ${YELLOW}$HYPR_DIR${RESET}..." + + DIR_B=("Monitor_Profiles" "animations" "wallpaper_effects") + # Restore directories automatically + for DIR_RESTORE in "${DIR_B[@]}"; do + BACKUP_SUBDIR="$BACKUP_HYPR_PATH/$DIR_RESTORE" + if [ -d "$BACKUP_SUBDIR" ]; then + cp -r "$BACKUP_SUBDIR" "$HYPR_DIR/" + echo "${OK} - Restored directory: ${MAGENTA}$DIR_RESTORE${RESET}" 2>&1 | tee -a "$LOG" + fi + done - # Restore files automatically - FILE_B=("monitors.conf" "workspaces.conf") - for FILE_RESTORE in "${FILE_B[@]}"; do - BACKUP_FILE="$BACKUP_HYPR_PATH/$FILE_RESTORE" + # Restore files automatically + FILE_B=("monitors.conf" "workspaces.conf") + for FILE_RESTORE in "${FILE_B[@]}"; do + BACKUP_FILE="$BACKUP_HYPR_PATH/$FILE_RESTORE" - if [ -f "$BACKUP_FILE" ]; then - cp "$BACKUP_FILE" "$HYPR_DIR/$FILE_RESTORE" - echo "${OK} - Restored file: ${MAGENTA}$FILE_RESTORE${RESET}" 2>&1 | tee -a "$LOG" - fi - done + if [ -f "$BACKUP_FILE" ]; then + cp "$BACKUP_FILE" "$HYPR_DIR/$FILE_RESTORE" + echo "${OK} - Restored file: ${MAGENTA}$FILE_RESTORE${RESET}" 2>&1 | tee -a "$LOG" + fi + done + fi fi printf "\n%.0s" {1..1} @@ -935,7 +1002,11 @@ if [ -z "$BACKUP_DIR" ]; then exit 1 fi -if [ -d "$BACKUP_DIR_PATH" ]; then +if [ -d "$BACKUP_DIR_PATH" ] && [ "$EXPRESS_MODE" -eq 1 ]; then + echo "${NOTE} Express mode: skipping UserConfigs restoration prompts." 2>&1 | tee -a "$LOG" +fi + +if [ -d "$BACKUP_DIR_PATH" ] && [ "$EXPRESS_MODE" -eq 0 ]; then # Detect version VERSION_FILE=$(find "$DIRPATH" -maxdepth 1 -name "v*.*.*" | head -n 1) CURRENT_VERSION="999.9.9" @@ -1033,7 +1104,11 @@ SCRIPTS_TO_RESTORE=( DIRSHPATH="$HOME/.config/$DIRSH" BACKUP_DIR_PATH_S="$DIRSHPATH-backup-$BACKUP_DIR/UserScripts" -if [ -d "$BACKUP_DIR_PATH_S" ]; then +if [ -d "$BACKUP_DIR_PATH_S" ] && [ "$EXPRESS_MODE" -eq 1 ]; then + echo "${NOTE} Express mode: skipping UserScripts restoration prompts." 2>&1 | tee -a "$LOG" +fi + +if [ -d "$BACKUP_DIR_PATH_S" ] && [ "$EXPRESS_MODE" -eq 0 ]; then echo -e "${NOTE} Restoring previous ${MAGENTA}User-Scripts${RESET}..." for SCRIPT_NAME in "${SCRIPTS_TO_RESTORE[@]}"; do @@ -1070,7 +1145,11 @@ DIRPATH="$HOME/.config/$DIR_H" BACKUP_DIR=$(get_backup_dirname) BACKUP_DIR_PATH_F="$DIRPATH-backup-$BACKUP_DIR" -if [ -d "$BACKUP_DIR_PATH_F" ]; then +if [ -d "$BACKUP_DIR_PATH_F" ] && [ "$EXPRESS_MODE" -eq 1 ]; then + echo "${NOTE} Express mode: skipping individual hypr file restoration prompts." 2>&1 | tee -a "$LOG" +fi + +if [ -d "$BACKUP_DIR_PATH_F" ] && [ "$EXPRESS_MODE" -eq 0 ]; then echo -e "${NOTE} Restoring some files in ${MAGENTA}$HOME/.config/hypr directory${RESET}..." for FILE_RESTORE in "${FILES_2_RESTORE[@]}"; do @@ -1158,7 +1237,9 @@ printf "\n%.0s" {1..1} # for SDDM (simple_sddm_2) sddm_simple_sddm_2="/usr/share/sddm/themes/simple_sddm_2" -if [ -d "$sddm_simple_sddm_2" ]; then +if [ -d "$sddm_simple_sddm_2" ] && [ "$EXPRESS_MODE" -eq 1 ]; then + echo "${NOTE} Express mode: skipping SDDM wallpaper prompt." 2>&1 | tee -a "$LOG" +elif [ -d "$sddm_simple_sddm_2" ]; then while true; do echo -n "${CAT} SDDM simple_sddm_2 theme detected! Apply current wallpaper as SDDM background? (y/n): " read SDDM_WALL @@ -1188,46 +1269,51 @@ fi printf "\n%.0s" {1..1} echo "${MAGENTA}By default only a few wallpapers are copied${RESET}..." -while true; do - echo "${NOTE} A number of these wallpapers are AI generated or enhanced. Select (N/n) if this is an issue for you. " - echo -n "${CAT} Would you like to download additional wallpapers? ${WARN} This is 1GB in size (y/n): " - read WALL - - case $WALL in - [Yy]) - echo "${NOTE} Downloading additional wallpapers..." - if git clone "https://github.com/JaKooLit/Wallpaper-Bank.git"; then - echo "${OK} Wallpapers downloaded successfully." 2>&1 | tee -a "$LOG" - - # Check if wallpapers directory exists and create it if not - if [ ! -d "$PICTURES_DIR/wallpapers" ]; then - mkdir -p "$PICTURES_DIR/wallpapers" - echo "${OK} Created wallpapers directory." 2>&1 | tee -a "$LOG" - fi +if [ "$EXPRESS_MODE" -eq 1 ]; then + echo "${NOTE} Express mode: skipping additional wallpaper download prompt." 2>&1 | tee -a "$LOG" +else + while true; do + echo "${NOTE} A number of these wallpapers are AI generated or enhanced. Select (N/n) if this is an issue for you. " + echo -n "${CAT} Would you like to download additional wallpapers? ${WARN} This is 1GB in size (y/n): " + read WALL - 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 + case $WALL in + [Yy]) + echo "${NOTE} Downloading additional wallpapers..." + if git clone "https://github.com/JaKooLit/Wallpaper-Bank.git"; then + echo "${OK} Wallpapers downloaded successfully." 2>&1 | tee -a "$LOG" + + # Check if wallpapers directory exists and create it if not + 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/* "$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 + else + echo "${ERROR} Copying wallpapers failed" 2>&1 | tee -a "$LOG" + fi else - echo "${ERROR} Copying wallpapers failed" 2>&1 | tee -a "$LOG" + echo "${ERROR} Downloading additional wallpapers failed" 2>&1 | tee -a "$LOG" fi - else - echo "${ERROR} Downloading additional wallpapers failed" 2>&1 | tee -a "$LOG" - fi - ;; - [Nn]) - echo "${NOTE} You chose not to download additional wallpapers." 2>&1 | tee -a "$LOG" - break - ;; - *) - echo "Please enter 'y' or 'n' to proceed." - ;; - esac -done + ;; + [Nn]) + echo "${NOTE} You chose not to download additional wallpapers." 2>&1 | tee -a "$LOG" + break + ;; + *) + echo "Please enter 'y' or 'n' to proceed." + ;; + esac + done +fi # CLeaning up of ~/.config/ backups cleanup_backups() { + local mode="${1:-prompt}" CONFIG_DIR="$HOME/.config" BACKUP_PREFIX="-backup" @@ -1245,6 +1331,21 @@ cleanup_backups() { # If more than one backup found if [ ${#BACKUP_DIRS[@]} -gt 1 ]; then + if [ "$mode" = "auto" ]; then + latest_backup="${BACKUP_DIRS[0]}" + for BACKUP in "${BACKUP_DIRS[@]}"; do + if [ "$BACKUP" -nt "$latest_backup" ]; then + latest_backup="$BACKUP" + fi + done + for BACKUP in "${BACKUP_DIRS[@]}"; do + if [ "$BACKUP" != "$latest_backup" ]; then + rm -rf "$BACKUP" + fi + done + echo "${INFO} Express mode: trimmed backups for ${YELLOW}${DIR##*/}${RESET}, keeping ${MAGENTA}${latest_backup##*/}${RESET}." 2>&1 | tee -a "$LOG" + continue + fi printf "\n%.0s" {1..2} echo -e "${INFO} Found ${MAGENTA}multiple backups${RESET} for: ${YELLOW}${DIR##*/}${RESET}" echo "${YELLOW}Backups: ${RESET}" @@ -1279,7 +1380,11 @@ cleanup_backups() { done } # Execute the cleanup function -cleanup_backups +if [ "$EXPRESS_MODE" -eq 1 ]; then + cleanup_backups auto +else + cleanup_backups prompt +fi # Check if ~/.config/waybar/style.css does not exist or is a symlink if [ ! -e "$HOME/.config/waybar/style.css" ] || [ -L "$HOME/.config/waybar/style.css" ]; then -- cgit v1.2.3 From f5b3f93eba7a1074e8fe0127a99acd3c53aaf7b8 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Fri, 9 Jan 2026 14:27:27 -0500 Subject: Updted copy.sh to check for 2.3.18+ before allowing express update On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: copy.sh --- copy.sh | 81 ++++++++++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 57 insertions(+), 24 deletions(-) diff --git a/copy.sh b/copy.sh index 885fed89..8dc94649 100755 --- a/copy.sh +++ b/copy.sh @@ -22,6 +22,31 @@ GREEN="$(tput setaf 2)" BLUE="$(tput setaf 4)" SKY_BLUE="$(tput setaf 6)" RESET="$(tput sgr0)" +MIN_EXPRESS_VERSION="2.3.18" + +version_gte() { + [ "$1" = "$(echo -e "$1\n$2" | sort -V | tail -n1)" ] +} + +get_installed_dotfiles_version() { + local hypr_dir="$HOME/.config/hypr" + local version_file + if [ -d "$hypr_dir" ]; then + version_file=$(find "$hypr_dir" -maxdepth 1 -name "v*.*.*" | head -n 1) + if [ -n "$version_file" ]; then + basename "$version_file" | sed 's/^v//' + fi + fi +} + +express_supported() { + local current_version + current_version=$(get_installed_dotfiles_version) + if [ -z "$current_version" ]; then + return 1 + fi + version_gte "$current_version" "$MIN_EXPRESS_VERSION" +} print_usage() { cat <<'EOF' Usage: copy.sh [--upgrade] [--express-upgrade] [--help] @@ -57,6 +82,15 @@ while [[ $# -gt 0 ]]; do esac shift done +EXPRESS_SUPPORTED=0 +if express_supported; then + EXPRESS_SUPPORTED=1 +fi + +if [ "$EXPRESS_MODE" -eq 1 ] && [ "$EXPRESS_SUPPORTED" -eq 0 ]; then + echo "${WARN} Express upgrade requires installed dotfiles v${MIN_EXPRESS_VERSION} or newer. Falling back to standard upgrade." + EXPRESS_MODE=0 +fi # Check if running as root. If root, script will exit if [[ $EUID -eq 0 ]]; then @@ -535,25 +569,29 @@ fi printf "\n%.0s" {1..1} if [ "$UPGRADE_MODE" -eq 1 ] && [ "$EXPRESS_MODE" -eq 0 ]; then - while true; do - echo "${NOTE} Express mode skips config restore prompts, SDDM/background questions, and trims old backups." - echo -n "${CAT} Do you want to continue with EXPRESS upgrade mode? (y/N): " - read express_choice - case "$express_choice" in - [Yy]) - EXPRESS_MODE=1 - echo "${INFO} Express mode enabled for this upgrade." 2>&1 | tee -a "$LOG" - break - ;; - [Nn] | "") - echo "${NOTE} Continuing with standard upgrade prompts." 2>&1 | tee -a "$LOG" - break - ;; - *) - echo "${WARN} Please answer y or n." - ;; - esac - done + if [ "$EXPRESS_SUPPORTED" -eq 0 ]; then + echo "${NOTE} Express mode requires installed dotfiles v${MIN_EXPRESS_VERSION} or newer. Continuing with standard upgrade prompts." 2>&1 | tee -a "$LOG" + else + while true; do + echo "${NOTE} Express mode skips config restore prompts, SDDM/background questions, and trims old backups." + echo -n "${CAT} Do you want to continue with EXPRESS upgrade mode? (y/N): " + read express_choice + case "$express_choice" in + [Yy]) + EXPRESS_MODE=1 + echo "${INFO} Express mode enabled for this upgrade." 2>&1 | tee -a "$LOG" + break + ;; + [Nn] | "") + echo "${NOTE} Continuing with standard upgrade prompts." 2>&1 | tee -a "$LOG" + break + ;; + *) + echo "${WARN} Please answer y or n." + ;; + esac + done + fi fi set -e @@ -986,11 +1024,6 @@ compose_overlay_from_backup() { fi } -# Function to compare versions -version_gte() { - # Returns 0 if $1 >= $2, 1 otherwise - [ "$1" = "$(echo -e "$1\n$2" | sort -V | tail -n1)" ] -} DIRH="hypr" DIRPATH="$HOME/.config/$DIRH" -- cgit v1.2.3 From 97f614c536d000a46098c25199c9521680c7ff95 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Fri, 9 Jan 2026 14:31:53 -0500 Subject: Update CHANGELOG --- CHANGELOG.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 92d777ab..cbe91230 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,17 @@ - Fixed: Keybind parser latency - Changed the parsing login to python instead of bash - Also fixed duplicate bindings when you unmap / remap keybinds + - Added: `--express-update` to `copy.sh` + - This will bypass some of the questions + - Updating SDDM wallpaper + - Downloading wallpaper from repo + - Mostly like that was done at install time or previous upgrade + - Restoring User configs : + - `Weather.sh` and `Weather.sh` + - `Rofibeats.sh` + - etc. + - Automatically trims the backed up directories leaving just latest backup + - This dramatically reduces the time/effort to udpate dotfiles - 2026-01-08 - Fixed: MPRIS artwork in Sway notification center only 10 pixels -- cgit v1.2.3 From db41c69e3bf2396d7dcf56b2c6314b4078a61299 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Fri, 9 Jan 2026 17:33:24 -0500 Subject: Update CHANGELOG --- CHANGELOG.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cbe91230..05f1e788 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,8 +5,11 @@ - 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 + - Also fixed duplicates when you unmap, then remap keybinds + - Ex. Change keybind for `file manger` + - Both the old and new keybind were show in keybind menu - Added: `--express-update` to `copy.sh` + - `./copy.sh --express-update` - This will bypass some of the questions - Updating SDDM wallpaper - Downloading wallpaper from repo @@ -16,7 +19,8 @@ - `Rofibeats.sh` - etc. - Automatically trims the backed up directories leaving just latest backup - - This dramatically reduces the time/effort to udpate dotfiles + - This dramatically reduces the time/effort to update dotfiles + - Most users don't restore these custom files on upgrades - 2026-01-08 - Fixed: MPRIS artwork in Sway notification center only 10 pixels -- cgit v1.2.3 From 46e342ceb3a2757554685853597e12a9e70427e0 Mon Sep 17 00:00:00 2001 From: Donald Williams <129223418+dwilliam62@users.noreply.github.com> Date: Fri, 9 Jan 2026 18:47:42 -0500 Subject: Copy menu - 1st step in menu driven dot files install / upgrade process (#917) * Phase 1 of creating TUI for copy.sh for installs and upgrades On branch copy-menu Changes to be committed: modified: copy.sh new file: scripts/copy_menu.sh * Fixing formatting in copy-menu On branch copy-menu Your branch is up to date with 'origin/copy-menu'. Changes to be committed: modified: scripts/copy_menu.sh * More formatting and color first letter as selectable option On branch copy-menu Your branch is up to date with 'origin/copy-menu'. Changes to be committed: modified: copy.sh modified: scripts/copy_menu.sh * Fixing syntax error * Some whiptail versions don't support color Added check before displaying colors On branch copy-menu Your branch is up to date with 'origin/copy-menu'. Changes to be committed: modified: scripts/copy_menu.sh * fixing formatting On branch copy-menu Your branch is up to date with 'origin/copy-menu'. Changes to be committed: modified: scripts/copy_menu.sh * More formatting for whiptail * Formatting whiptail is so much fun * Changed descrption to two lines * Whiltail 4, human 0 * Whiltail 5, human 0 - shortened text * Whiltail 6, human 1 - remove dup items * Whiltail 6, human 2 - removed color highlight --- copy.sh | 51 +++++++++++++++++++++++++++++++++++++++++++++ scripts/copy_menu.sh | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+) create mode 100755 scripts/copy_menu.sh diff --git a/copy.sh b/copy.sh index 8dc94649..0e88b65e 100755 --- a/copy.sh +++ b/copy.sh @@ -23,6 +23,12 @@ BLUE="$(tput setaf 4)" SKY_BLUE="$(tput setaf 6)" RESET="$(tput sgr0)" MIN_EXPRESS_VERSION="2.3.18" +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +MENU_HELPER="$SCRIPT_DIR/scripts/copy_menu.sh" +if [ -f "$MENU_HELPER" ]; then + # shellcheck source=./scripts/copy_menu.sh + . "$MENU_HELPER" +fi version_gte() { [ "$1" = "$(echo -e "$1\n$2" | sort -V | tail -n1)" ] @@ -60,15 +66,18 @@ EOF UPGRADE_MODE=0 EXPRESS_MODE=0 +RUN_MODE="" while [[ $# -gt 0 ]]; do case "$1" in --upgrade) UPGRADE_MODE=1 + RUN_MODE="upgrade" ;; --express-upgrade) UPGRADE_MODE=1 EXPRESS_MODE=1 + RUN_MODE="express" ;; -h | --help) print_usage @@ -90,6 +99,47 @@ fi if [ "$EXPRESS_MODE" -eq 1 ] && [ "$EXPRESS_SUPPORTED" -eq 0 ]; then echo "${WARN} Express upgrade requires installed dotfiles v${MIN_EXPRESS_VERSION} or newer. Falling back to standard upgrade." EXPRESS_MODE=0 + RUN_MODE="upgrade" +fi + +if [ -z "$RUN_MODE" ]; then + if declare -f show_copy_menu >/dev/null 2>&1; then + while [ -z "$RUN_MODE" ]; do + show_copy_menu "$EXPRESS_SUPPORTED" + choice_lower=$(echo "$COPY_MENU_CHOICE" | tr '[:upper:]' '[:lower:]') + case "$choice_lower" in + install) + RUN_MODE="install" + UPGRADE_MODE=0 + EXPRESS_MODE=0 + ;; + upgrade) + RUN_MODE="upgrade" + UPGRADE_MODE=1 + EXPRESS_MODE=0 + ;; + express) + if [ "$EXPRESS_SUPPORTED" -eq 0 ]; then + echo "${WARN} Express mode requires installed dotfiles v${MIN_EXPRESS_VERSION} or newer. Please choose another option." + continue + fi + RUN_MODE="express" + UPGRADE_MODE=1 + EXPRESS_MODE=1 + ;; + quit) + echo "${NOTE} Exiting per user selection." + exit 0 + ;; + *) + echo "${WARN} Invalid selection." + ;; + esac + done + else + echo "${NOTE} Menu helper not found; defaulting to install workflow." + RUN_MODE="install" + fi fi # Check if running as root. If root, script will exit @@ -154,6 +204,7 @@ LOG="Copy-Logs/install-$(date +%d-%H%M%S)_dotfiles.log" # update home directories xdg-user-dirs-update 2>&1 | tee -a "$LOG" || true +echo "${INFO} Selected workflow: ${RUN_MODE}" 2>&1 | tee -a "$LOG" if [ "$UPGRADE_MODE" -eq 1 ]; then echo "${INFO} Upgrade mode enabled." 2>&1 | tee -a "$LOG" fi diff --git a/scripts/copy_menu.sh b/scripts/copy_menu.sh new file mode 100755 index 00000000..18482b18 --- /dev/null +++ b/scripts/copy_menu.sh @@ -0,0 +1,58 @@ +#!/usr/bin/env bash + +# show_copy_menu +# Arguments: +# $1 - express_supported flag (1 if available, 0 otherwise) +# Sets global COPY_MENU_CHOICE to one of: install, upgrade, express, quit +show_copy_menu() { + local express_supported="${1:-0}" + local menu_title=" KooL's Hyprland Dotfiles " + local prompt="Select what you would like to do:" + + local install_tag="Install" + local upgrade_tag="Upgrade" + local express_tag="Express" + local quit_tag="Quit" + + local install_desc="Fresh copy" + local upgrade_desc="Backups + prompts" + local express_desc="Skips restores & wallpapers" + local quit_desc="Exit without changes" + if [ "$express_supported" -ne 1 ]; then + express_body="xpress - Requires dots >= ${MIN_EXPRESS_VERSION}" + fi + + local choice="" + + if command -v whiptail >/dev/null 2>&1; then + if ! choice=$(whiptail --title "$menu_title" --menu "$prompt" 17 60 8 \ + "$install_tag" "$install_desc" \ + "$upgrade_tag" "$upgrade_desc" \ + "$express_tag" "$express_desc" \ + "$quit_tag" "$quit_desc" 3>&1 1>&2 2>&3); then + COPY_MENU_CHOICE="quit" + return 1 + fi + else + while true; do + printf "\n%s\n" "$menu_title" + printf "%s\n" "$prompt" + printf " 1) Install - %s\n" "$install_desc" + printf " 2) Upgrade - %s\n" "$upgrade_desc" + printf " 3) Express - %s\n" "$express_desc" + printf " 4) Quit - %s\n" "$quit_desc" + printf "Enter choice [1-4]: " + read -r text_choice + case "$text_choice" in + 1) choice="$install_tag"; break ;; + 2) choice="$upgrade_tag"; break ;; + 3) choice="$express_tag"; break ;; + 4) choice="$quit_tag"; break ;; + *) echo "Invalid selection. Please choose 1-4." ;; + esac + done + fi + + # shellcheck disable=SC2034 # used by parent script after sourcing this file + COPY_MENU_CHOICE="$choice" +} -- cgit v1.2.3 From bd736891d8c30ce8d42b6a3586567b9f826ec153 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Sun, 11 Jan 2026 02:08:07 -0500 Subject: Updated Distro-Hyprland to suppport all the ubuntu branches Also moved upgrade and release.sh scripts they need updating, so moved to archive dir for now On branch development Your branch is behind 'origin/development' by 1 commit, and can be fast-forwarded. (use "git pull" to update your local branch) Changes to be committed: modified: Distro-Hyprland.sh renamed: release.sh -> archive/release.sh renamed: upgrade.sh -> archive/upgrade.sh --- Distro-Hyprland.sh | 14 ++++ archive/release.sh | 155 ++++++++++++++++++++++++++++++++++++++ archive/upgrade.sh | 216 +++++++++++++++++++++++++++++++++++++++++++++++++++++ release.sh | 155 -------------------------------------- upgrade.sh | 216 ----------------------------------------------------- 5 files changed, 385 insertions(+), 371 deletions(-) create mode 100755 archive/release.sh create mode 100755 archive/upgrade.sh delete mode 100755 release.sh delete mode 100755 upgrade.sh diff --git a/Distro-Hyprland.sh b/Distro-Hyprland.sh index 99a1fc34..88964ea7 100755 --- a/Distro-Hyprland.sh +++ b/Distro-Hyprland.sh @@ -64,6 +64,20 @@ elif [ "$distro_name" = "Ubuntu" ]; then Distro_DIR="$HOME/$Distro-$Github_URL_branch" echo "${INFO} Ubuntu 25.04 detected. Customizing setup for Ubuntu 25.04." ;; + "25.10") + Distro="Ubuntu-Hyprland" + Github_URL="https://github.com/JaKooLit/$Distro.git" + Github_URL_branch="25.10" + Distro_DIR="$HOME/$Distro-$Github_URL_branch" + echo "${INFO} Ubuntu 25.10 detected. Customizing setup for Ubuntu 25.10." + ;; + "26.04-development") + Distro="Ubuntu-Hyprland" + Github_URL="https://github.com/JaKooLit/$Distro.git" + Github_URL_branch="26.04-development" + Distro_DIR="$HOME/$Distro-$Github_URL_branch" + echo "${INFO} Ubuntu 26.04 (development) detected. Customizing setup for Ubuntu 26.04 development branch." + ;; *) Distro="Ubuntu-Hyprland" echo "${ERROR} Unsupported distribution: $distro_version. Exiting." diff --git a/archive/release.sh b/archive/release.sh new file mode 100755 index 00000000..e29eaa79 --- /dev/null +++ b/archive/release.sh @@ -0,0 +1,155 @@ +#!/usr/bin/env bash +# /* ---- πŸ’« https://github.com/JaKooLit πŸ’« ---- */ # +# For downloading dots from releases + +# Set some colors for output messages +OK="$(tput setaf 2)[OK]$(tput sgr0)" +ERROR="$(tput setaf 1)[ERROR]$(tput sgr0)" +NOTE="$(tput setaf 3)[NOTE]$(tput sgr0)" +INFO="$(tput setaf 4)[INFO]$(tput sgr0)" +WARN="$(tput setaf 1)[WARN]$(tput sgr0)" +CAT="$(tput setaf 6)[ACTION]$(tput sgr0)" +MAGENTA="$(tput setaf 5)" +ORANGE="$(tput setaf 214)" +WARNING="$(tput setaf 1)" +YELLOW="$(tput setaf 3)" +GREEN="$(tput setaf 2)" +BLUE="$(tput setaf 4)" +SKY_BLUE="$(tput setaf 6)" +RESET="$(tput sgr0)" + +# Check /etc/os-release for Ubuntu or Debian and warn about Hyprland version requirement +if grep -iqE '^(ID_LIKE|ID)=.*(ubuntu|debian)' /etc/os-release >/dev/null 2>&1; then + printf "\n%.0s" {1..1} + echo "${WARNING} These Dotfiles are only supported on Hyprland 0.51.1 or greater. Do not install on older revisions.${RESET}" + while true; do + echo -n "${CAT} Do you want to continue anyway? (y/N): ${RESET}" + read _continue + _continue=$(echo "${_continue}" | tr '[:upper:]' '[:lower:]') + case "${_continue}" in + y|yes) + echo "${NOTE} Proceeding on Ubuntu/Debian by user confirmation." + break + ;; + n|no|"") + printf "\n%.0s" {1..1} + echo "${INFO} Aborting per user choice. No changes made." + printf "\n%.0s" {1..1} + exit 1 + ;; + *) + echo "${WARN} Please answer 'y' or 'n'." + ;; + esac + done +fi + + +printf "\n%.0s" {1..1} +echo -e "\e[35m + β•¦β•”β•β”Œβ”€β”β”Œβ”€β”β•¦ β•”β•¦β•—β”Œβ”€β”β”Œβ”¬β”β”Œβ”€β” + β• β•©β•—β”‚ β”‚β”‚ β”‚β•‘ β•‘β•‘β”‚ β”‚ β”‚ └─┐ 2025 + β•© β•©β””β”€β”˜β””β”€β”˜β•©β•β• β•β•©β•β””β”€β”˜ β”΄ β””β”€β”˜ release.sh +\e[0m" +printf "\n%.0s" {1..1} + +echo "${WARNING}A T T E N T I O N !${RESET}" +echo "${SKY_BLUE}This script is meant to download from the "RELEASES" on the KooL Hyprland-Dots${RESET}" +echo "${YELLOW}Kindly note that the RELEASES is one version older that from main${RESET}" +printf "\n%.0s" {1..1} +echo "${MAGENTA}If you want to get the latest, kindly ran the ${SKY_BLUE}copy.sh${RESET} ${MAGENTA}instead${RESET}" +printf "\n%.0s" {1..1} +read -p "${CAT} - Would you like to proceed and install from releases? (y/n): ${RESET}" proceed + +if [ "$proceed" != "y" ]; then + printf "\n%.0s" {1..1} + echo "${INFO} Installation aborted. ${SKY_BLUE}No changes in your system.${RESET} ${YELLOW}Goodbye!${RESET}" + printf "\n%.0s" {1..1} + exit 1 +fi + +printf "${NOTE} Downloading / Checking for existing Hyprland-Dots.tar.gz...\n" + +# Check if Hyprland-Dots.tar.gz exists +if [ -f Hyprland-Dots.tar.gz ]; then + printf "${NOTE} Hyprland-Dots.tar.gz found.\n" + + # Get the version from the existing tarball filename + existing_version=$(echo Hyprland-Dots.tar.gz | grep -oP 'v\d+\.\d+\.\d+' | sed 's/v//') + + # Fetch the tag_name for the latest release using the GitHub API + latest_version=$(curl -s https://api.github.com/repos/JaKooLit/Hyprland-Dots/releases/latest | grep "tag_name" | cut -d '"' -f 4 | sed 's/v//') + + # Check if versions match + if [ "$existing_version" = "$latest_version" ]; then + echo -e "${OK} Hyprland-Dots.tar.gz is up-to-date with the latest release ($latest_version)." + + # Sleep for 10 seconds before exiting + printf "${NOTE} No update found. Sleeping for 10 seconds...\n" + sleep 10 + exit 0 + else + echo -e "${WARN} Hyprland-Dots.tar.gz is outdated (Existing version: $existing_version, Latest version: $latest_version)." + read -p "Do you want to upgrade to the latest version? (y/n): " upgrade_choice + if [ "$upgrade_choice" = "y" ]; then + echo -e "${NOTE} Proceeding to download the latest release." + + # Delete existing directories starting with JaKooLit-Hyprland-Dots + find . -type d -name 'JaKooLit-Hyprland-Dots*' -exec rm -rf {} + + rm -f Hyprland-Dots.tar.gz + printf "${WARN} Removed existing Hyprland-Dots.tar.gz.\n" + else + echo -e "${NOTE} User chose not to upgrade. Exiting..." + exit 0 + fi + fi +fi + +printf "${NOTE} Downloading the latest Hyprland source code release...\n" + +# Fetch the tag name for the latest release using the GitHub API +latest_tag=$(curl -s https://api.github.com/repos/JaKooLit/Hyprland-Dots/releases/latest | grep "tag_name" | cut -d '"' -f 4) + +# Check if the tag is obtained successfully +if [ -z "$latest_tag" ]; then + echo -e "${ERROR} Unable to fetch the latest tag information." + exit 1 +fi + +# Fetch the tarball URL for the latest release using the GitHub API +latest_tarball_url=$(curl -s https://api.github.com/repos/JaKooLit/Hyprland-Dots/releases/latest | grep "tarball_url" | cut -d '"' -f 4) + +# Check if the URL is obtained successfully +if [ -z "$latest_tarball_url" ]; then + echo -e "${ERROR} Unable to fetch the tarball URL for the latest release." + exit 1 +fi + +# Get the filename from the URL and include the tag name in the file name +file_name="Hyprland-Dots-${latest_tag}.tar.gz" + +# Download the latest release source code tarball to the current directory +if curl -L "$latest_tarball_url" -o "$file_name"; then + # Extract the contents of the tarball + tar -xzf "$file_name" || exit 1 + + # delete existing Hyprland-Dots + rm -rf JaKooLit-Hyprland-Dots + + # Identify the extracted directory + extracted_directory=$(tar -tf "$file_name" | grep -o '^[^/]\+' | uniq) + + # Rename the extracted directory to JaKooLit-Hyprland-Dots + mv "$extracted_directory" JaKooLit-Hyprland-Dots || exit 1 + + cd "JaKooLit-Hyprland-Dots" || exit 1 + + # Set execute permission for copy.sh and execute it + chmod +x copy.sh + ./copy.sh 2>&1 | tee -a "../install-$(date +'%d-%H%M%S')_dots.log" + + echo -e "${OK} Latest source code release downloaded, extracted, and processed successfully." +else + echo -e "${ERROR} Failed to download the latest source code release." + exit 1 +fi diff --git a/archive/upgrade.sh b/archive/upgrade.sh new file mode 100755 index 00000000..45624c4f --- /dev/null +++ b/archive/upgrade.sh @@ -0,0 +1,216 @@ +#!/usr/bin/env bash +# /* ---- πŸ’« https://github.com/JaKooLit πŸ’« ---- */ # +# for Semi-Manual upgrading your system. +# NOTE: requires rsync + +# Set some colors for output messages +OK="$(tput setaf 2)[OK]$(tput sgr0)" +ERROR="$(tput setaf 1)[ERROR]$(tput sgr0)" +NOTE="$(tput setaf 3)[NOTE]$(tput sgr0)" +INFO="$(tput setaf 4)[INFO]$(tput sgr0)" +WARN="$(tput setaf 1)[WARN]$(tput sgr0)" +CAT="$(tput setaf 6)[ACTION]$(tput sgr0)" +MAGENTA="$(tput setaf 5)" +ORANGE="$(tput setaf 214)" +WARNING="$(tput setaf 1)" +YELLOW="$(tput setaf 3)" +GREEN="$(tput setaf 2)" +BLUE="$(tput setaf 4)" +SKY_BLUE="$(tput setaf 6)" +RESET="$(tput sgr0)" + +printf "\n%.0s" {1..1} +echo -e "\e[35m + β•¦β•”β•β”Œβ”€β”β”Œβ”€β”β•¦ β•”β•¦β•—β”Œβ”€β”β”Œβ”¬β”β”Œβ”€β” + β• β•©β•—β”‚ β”‚β”‚ β”‚β•‘ β•‘β•‘β”‚ β”‚ β”‚ └─┐ 2025 + β•© β•©β””β”€β”˜β””β”€β”˜β•©β•β• β•β•©β•β””β”€β”˜ β”΄ β””β”€β”˜ upgrade.sh +\e[0m" +printf "\n%.0s" {1..1} + +# On Ubuntu/Debian, warn about required Hyprland version and prompt to continue +if grep -iqE '^(ID_LIKE|ID)=.*(ubuntu|debian)' /etc/os-release >/dev/null 2>&1; then + echo "${WARNING} These Dotfiles are only supported on Hyprland 0.51.1 or greater. Do not install on older revisions.${RESET}" + while true; do + echo -n "${CAT} Do you want to continue anyway? (y/N): ${RESET}" + read _continue + _continue=$(echo "${_continue}" | tr '[:upper:]' '[:lower:]') + case "${_continue}" in + y|yes) + echo "${NOTE} Proceeding on Ubuntu/Debian by user confirmation." + break + ;; + n|no|"") + printf "\n%.0s" {1..1} + echo "${INFO} Aborting per user choice. No changes made." + printf "\n%.0s" {1..1} + exit 1 + ;; + *) + echo "${WARN} Please answer 'y' or 'n'." + ;; + esac + done +fi + +echo "${WARNING}A T T E N T I O N !${RESET}" +echo "${SKY_BLUE}This script is meant to manually upgrade your KooL Hyprland Dots${RESET}" +echo "${YELLOW}NOTE that you should edit this script and assign an Directory or Files exclusion${RESET}" +printf "\n%.0s" {1..1} +echo "${MAGENTA}If you are not sure what you are doing,ran the ${SKY_BLUE}copy.sh${RESET} ${MAGENTA}instead${RESET}" +printf "\n%.0s" {1..1} +read -p "${CAT} - Would you like to proceed (y/n): ${RESET}" proceed + +if [ "$proceed" != "y" ]; then + printf "\n%.0s" {1..1} + echo "${INFO} Installation aborted. ${SKY_BLUE}No changes in your system.${RESET} ${YELLOW}Goodbye!${RESET}" + printf "\n%.0s" {1..1} + exit 1 +fi + +# Create Directory for Upgrade Logs +if [ ! -d Upgrade-Logs ]; then + mkdir Upgrade-Logs +fi + +LOG="Upgrade-Logs/upgrade-$(date +%d-%H%M%S)_upgrade_dotfiles.log" + +# source and target versions +source_dir="config" +target_dir="$HOME/.config" + +# Specify the update source directories, their corresponding target directories, and their exclusions +declare -A directories=( + ["config/hypr/"]="$HOME/.config/hypr/" + ["config/kitty/"]="$HOME/.config/kitty/" + ["config/Kvantum/"]="$HOME/.config/Kvantum/" + ["config/nvim/"]="$HOME/.config/nvim/" + ["config/qt5ct/"]="$HOME/.config/qt5ct" + ["config/qt6ct/"]="$HOME/.config/qt6ct/" + ["config/rofi/"]="$HOME/.config/rofi/" + ["config/swaync/"]="$HOME/.config/swaync/" + ["config/waybar/"]="$HOME/.config/waybar/" + ["config/cava/"]="$HOME/.config/cava/" + ["config/ags/"]="$HOME/.config/ags/" + ["config/quickshell/"]="$HOME/.config/quickshell/" + ["config/fastfetch/"]="$HOME/.config/fastfetch/" + ["config/wallust/"]="$HOME/.config/wallust/" + ["config/wlogout/"]="$HOME/.config/wlogout/" + # Add more directories to compare as needed +) + +# Update the exclusion rules +declare -A exclusions=( + ["config/hypr/"]="--exclude=UserConfigs/ --exclude=UserScripts/" + ["config/waybar/"]="--exclude=config --exclude=style.css" + ["config/rofi/"]="--exclude=.current_wallpaper" + ["config/quickshell/"]="--exclude=shell.qml" + # Add more exclusions as needed +) + +# Function to compare directories +compare_directories() { + local source_dir="$1" + local target_dir="$2" + local exclusion="${exclusions[$source_dir]}" # Get exclusions for the source directory + + # Perform dry-run comparison using rsync with exclusions + diff=$(rsync -avn --delete "$source_dir" "$target_dir" $exclusion) + echo "$diff" +} + +# Function to create backup of target directory +create_backup() { + local target_dir="$1" + local backup_suffix="-b4-upgrade" + local target_base=$(basename "$target_dir") + local backup_dir="$HOME/.config/${target_base}${backup_suffix}" + + if [ -d "$backup_dir" ]; then + echo "$NOTE Updating existing backup of the $target_dir..." + rsync -av --delete "$target_dir" "$backup_dir" + echo "$NOTE $backup_dir Backup updated successfully." 2>&1 | tee -a "$LOG" + else + echo "$NOTE Creating backup of the $target_dir..." + rsync -av --exclude="${backup_suffix}" "$target_dir" "$backup_dir"/ + echo "$NOTE $backup_dir Backup created successfully." 2>&1 | tee -a "$LOG" + fi +} + +# Check if the version file exists in target directory, if not exit +target_version_file=$(find "$target_dir/hypr" -name 'v*' | sort -V | tail -n 1) +if [ -z "$target_version_file" ]; then + echo "$ERROR Version number not found in ~/.config/hypr/" 2>&1 | tee -a "$LOG" + echo "$ERROR Upgrade your dots first by running ./copy.sh" 2>&1 | tee -a "$LOG" + exit 1 +fi + +# Get the stored version from the target directory +stored_version=$(basename "$target_version_file") + +# Get the latest version from the source directory +source_version_file=$(find "$source_dir/hypr" -name 'v*' | sort -V | tail -n 1) +latest_version=$(basename "$source_version_file") + +# Function to compare versions +version_gt() { test "$(printf '%s\n' "$@" | sort -V | head -n 1)" != "$1"; } + +# Compare versions +if version_gt "$latest_version" "$stored_version"; then + echo "$CAT newer version ($latest_version) is available. Do you want to upgrade? (Y/N)" 2>&1 | tee -a "$LOG" + read -r answer + if [[ "$answer" =~ ^[Yy]$ ]]; then + # Loop through directories for comparison + for source_directory in "${!directories[@]}"; do + target_directory="${directories[$source_directory]}" + echo "$YELLOW Comparing directories: $source_directory and $target_directory" $RESET + # Compare source and target directories + comparison=$(compare_directories "$source_directory" "$target_directory") + if [ -n "$comparison" ]; then + echo "$NOTE Here are difference of $source_directory and $target_directory:" + echo "$comparison" + + printf "\n%.0s" {1..2} + + # Prompt user for action + echo "$CAT Do you want to copy files and directories from $source_directory to $target_directory? (Y/N)" + read -r answer + + if [[ "$answer" =~ ^[Yy]$ ]]; then + # Creating backup of the target directory + create_backup "$target_directory" + + printf "\n%.0s" {1..2} + # Copy differences from source directory to target directory + rsync -av --delete ${exclusions[$source_directory]} "$source_directory" "$target_directory" + echo "$NOTE Differences of "$target_directory" copied successfully." 2>&1 | tee -a "$LOG" + printf "\n%.0s" {1..2} + else + echo "$NOTE No changes were made for $target_directory" 2>&1 | tee -a "$LOG" + fi + else + echo "$OK No differences found between $source_directory and $target_directory" 2>&1 | tee -a "$LOG" + fi + done + printf "\n%.0s" {1..2} + echo "$NOTE Files or directories updated successfully to version $latest_version" 2>&1 | tee -a "$LOG" + + # Set some files as executable + chmod +x "$HOME/.config/hypr/scripts/"* 2>&1 | tee -a "$LOG" + chmod +x "$HOME/.config/hypr/UserScripts/"* 2>&1 | tee -a "$LOG" + # Set executable for initial-boot.sh + chmod +x "$HOME/.config/hypr/initial-boot.sh" 2>&1 | tee -a "$LOG" + + else + echo "$MAGENTA Upgrade declined. No files or directories changed" 2>&1 | tee -a "$LOG" + fi +else + echo "$OK πŸ‘Œ No upgrade found. The installed version ${MAGENTA}($stored_version)${RESET} is up to date with the KooL Hyprland-Dots version ${YELLOW}($latest_version)${RESET}" 2>&1 | tee -a "$LOG" +fi + +printf "\n%.0s" {1..3} +echo "$(tput bold)$(tput setaf 3)ATTENTION!!!! VERY IMPORTANT NOTICE!!!! $(tput sgr0)" +echo "$(tput bold)$(tput setaf 7)If you updated waybar directory, and you have your own waybar layout and styles $(tput sgr0)" +echo "$(tput bold)$(tput setaf 7)Copy those files from the created backup ~/.config/waybar-b4-upgrade $(tput sgr0)" +echo "$(tput bold)$(tput setaf 7)Make sure to set your waybar and style before logout or reboot $(tput sgr0)" +echo "$(tput bold)$(tput setaf 7)SUPER CTRL B for Waybar Styles and SUPER ALT B for Waybar Layout $(tput sgr0)" +printf "\n%.0s" {1..3} diff --git a/release.sh b/release.sh deleted file mode 100755 index e29eaa79..00000000 --- a/release.sh +++ /dev/null @@ -1,155 +0,0 @@ -#!/usr/bin/env bash -# /* ---- πŸ’« https://github.com/JaKooLit πŸ’« ---- */ # -# For downloading dots from releases - -# Set some colors for output messages -OK="$(tput setaf 2)[OK]$(tput sgr0)" -ERROR="$(tput setaf 1)[ERROR]$(tput sgr0)" -NOTE="$(tput setaf 3)[NOTE]$(tput sgr0)" -INFO="$(tput setaf 4)[INFO]$(tput sgr0)" -WARN="$(tput setaf 1)[WARN]$(tput sgr0)" -CAT="$(tput setaf 6)[ACTION]$(tput sgr0)" -MAGENTA="$(tput setaf 5)" -ORANGE="$(tput setaf 214)" -WARNING="$(tput setaf 1)" -YELLOW="$(tput setaf 3)" -GREEN="$(tput setaf 2)" -BLUE="$(tput setaf 4)" -SKY_BLUE="$(tput setaf 6)" -RESET="$(tput sgr0)" - -# Check /etc/os-release for Ubuntu or Debian and warn about Hyprland version requirement -if grep -iqE '^(ID_LIKE|ID)=.*(ubuntu|debian)' /etc/os-release >/dev/null 2>&1; then - printf "\n%.0s" {1..1} - echo "${WARNING} These Dotfiles are only supported on Hyprland 0.51.1 or greater. Do not install on older revisions.${RESET}" - while true; do - echo -n "${CAT} Do you want to continue anyway? (y/N): ${RESET}" - read _continue - _continue=$(echo "${_continue}" | tr '[:upper:]' '[:lower:]') - case "${_continue}" in - y|yes) - echo "${NOTE} Proceeding on Ubuntu/Debian by user confirmation." - break - ;; - n|no|"") - printf "\n%.0s" {1..1} - echo "${INFO} Aborting per user choice. No changes made." - printf "\n%.0s" {1..1} - exit 1 - ;; - *) - echo "${WARN} Please answer 'y' or 'n'." - ;; - esac - done -fi - - -printf "\n%.0s" {1..1} -echo -e "\e[35m - β•¦β•”β•β”Œβ”€β”β”Œβ”€β”β•¦ β•”β•¦β•—β”Œβ”€β”β”Œβ”¬β”β”Œβ”€β” - β• β•©β•—β”‚ β”‚β”‚ β”‚β•‘ β•‘β•‘β”‚ β”‚ β”‚ └─┐ 2025 - β•© β•©β””β”€β”˜β””β”€β”˜β•©β•β• β•β•©β•β””β”€β”˜ β”΄ β””β”€β”˜ release.sh -\e[0m" -printf "\n%.0s" {1..1} - -echo "${WARNING}A T T E N T I O N !${RESET}" -echo "${SKY_BLUE}This script is meant to download from the "RELEASES" on the KooL Hyprland-Dots${RESET}" -echo "${YELLOW}Kindly note that the RELEASES is one version older that from main${RESET}" -printf "\n%.0s" {1..1} -echo "${MAGENTA}If you want to get the latest, kindly ran the ${SKY_BLUE}copy.sh${RESET} ${MAGENTA}instead${RESET}" -printf "\n%.0s" {1..1} -read -p "${CAT} - Would you like to proceed and install from releases? (y/n): ${RESET}" proceed - -if [ "$proceed" != "y" ]; then - printf "\n%.0s" {1..1} - echo "${INFO} Installation aborted. ${SKY_BLUE}No changes in your system.${RESET} ${YELLOW}Goodbye!${RESET}" - printf "\n%.0s" {1..1} - exit 1 -fi - -printf "${NOTE} Downloading / Checking for existing Hyprland-Dots.tar.gz...\n" - -# Check if Hyprland-Dots.tar.gz exists -if [ -f Hyprland-Dots.tar.gz ]; then - printf "${NOTE} Hyprland-Dots.tar.gz found.\n" - - # Get the version from the existing tarball filename - existing_version=$(echo Hyprland-Dots.tar.gz | grep -oP 'v\d+\.\d+\.\d+' | sed 's/v//') - - # Fetch the tag_name for the latest release using the GitHub API - latest_version=$(curl -s https://api.github.com/repos/JaKooLit/Hyprland-Dots/releases/latest | grep "tag_name" | cut -d '"' -f 4 | sed 's/v//') - - # Check if versions match - if [ "$existing_version" = "$latest_version" ]; then - echo -e "${OK} Hyprland-Dots.tar.gz is up-to-date with the latest release ($latest_version)." - - # Sleep for 10 seconds before exiting - printf "${NOTE} No update found. Sleeping for 10 seconds...\n" - sleep 10 - exit 0 - else - echo -e "${WARN} Hyprland-Dots.tar.gz is outdated (Existing version: $existing_version, Latest version: $latest_version)." - read -p "Do you want to upgrade to the latest version? (y/n): " upgrade_choice - if [ "$upgrade_choice" = "y" ]; then - echo -e "${NOTE} Proceeding to download the latest release." - - # Delete existing directories starting with JaKooLit-Hyprland-Dots - find . -type d -name 'JaKooLit-Hyprland-Dots*' -exec rm -rf {} + - rm -f Hyprland-Dots.tar.gz - printf "${WARN} Removed existing Hyprland-Dots.tar.gz.\n" - else - echo -e "${NOTE} User chose not to upgrade. Exiting..." - exit 0 - fi - fi -fi - -printf "${NOTE} Downloading the latest Hyprland source code release...\n" - -# Fetch the tag name for the latest release using the GitHub API -latest_tag=$(curl -s https://api.github.com/repos/JaKooLit/Hyprland-Dots/releases/latest | grep "tag_name" | cut -d '"' -f 4) - -# Check if the tag is obtained successfully -if [ -z "$latest_tag" ]; then - echo -e "${ERROR} Unable to fetch the latest tag information." - exit 1 -fi - -# Fetch the tarball URL for the latest release using the GitHub API -latest_tarball_url=$(curl -s https://api.github.com/repos/JaKooLit/Hyprland-Dots/releases/latest | grep "tarball_url" | cut -d '"' -f 4) - -# Check if the URL is obtained successfully -if [ -z "$latest_tarball_url" ]; then - echo -e "${ERROR} Unable to fetch the tarball URL for the latest release." - exit 1 -fi - -# Get the filename from the URL and include the tag name in the file name -file_name="Hyprland-Dots-${latest_tag}.tar.gz" - -# Download the latest release source code tarball to the current directory -if curl -L "$latest_tarball_url" -o "$file_name"; then - # Extract the contents of the tarball - tar -xzf "$file_name" || exit 1 - - # delete existing Hyprland-Dots - rm -rf JaKooLit-Hyprland-Dots - - # Identify the extracted directory - extracted_directory=$(tar -tf "$file_name" | grep -o '^[^/]\+' | uniq) - - # Rename the extracted directory to JaKooLit-Hyprland-Dots - mv "$extracted_directory" JaKooLit-Hyprland-Dots || exit 1 - - cd "JaKooLit-Hyprland-Dots" || exit 1 - - # Set execute permission for copy.sh and execute it - chmod +x copy.sh - ./copy.sh 2>&1 | tee -a "../install-$(date +'%d-%H%M%S')_dots.log" - - echo -e "${OK} Latest source code release downloaded, extracted, and processed successfully." -else - echo -e "${ERROR} Failed to download the latest source code release." - exit 1 -fi diff --git a/upgrade.sh b/upgrade.sh deleted file mode 100755 index 45624c4f..00000000 --- a/upgrade.sh +++ /dev/null @@ -1,216 +0,0 @@ -#!/usr/bin/env bash -# /* ---- πŸ’« https://github.com/JaKooLit πŸ’« ---- */ # -# for Semi-Manual upgrading your system. -# NOTE: requires rsync - -# Set some colors for output messages -OK="$(tput setaf 2)[OK]$(tput sgr0)" -ERROR="$(tput setaf 1)[ERROR]$(tput sgr0)" -NOTE="$(tput setaf 3)[NOTE]$(tput sgr0)" -INFO="$(tput setaf 4)[INFO]$(tput sgr0)" -WARN="$(tput setaf 1)[WARN]$(tput sgr0)" -CAT="$(tput setaf 6)[ACTION]$(tput sgr0)" -MAGENTA="$(tput setaf 5)" -ORANGE="$(tput setaf 214)" -WARNING="$(tput setaf 1)" -YELLOW="$(tput setaf 3)" -GREEN="$(tput setaf 2)" -BLUE="$(tput setaf 4)" -SKY_BLUE="$(tput setaf 6)" -RESET="$(tput sgr0)" - -printf "\n%.0s" {1..1} -echo -e "\e[35m - β•¦β•”β•β”Œβ”€β”β”Œβ”€β”β•¦ β•”β•¦β•—β”Œβ”€β”β”Œβ”¬β”β”Œβ”€β” - β• β•©β•—β”‚ β”‚β”‚ β”‚β•‘ β•‘β•‘β”‚ β”‚ β”‚ └─┐ 2025 - β•© β•©β””β”€β”˜β””β”€β”˜β•©β•β• β•β•©β•β””β”€β”˜ β”΄ β””β”€β”˜ upgrade.sh -\e[0m" -printf "\n%.0s" {1..1} - -# On Ubuntu/Debian, warn about required Hyprland version and prompt to continue -if grep -iqE '^(ID_LIKE|ID)=.*(ubuntu|debian)' /etc/os-release >/dev/null 2>&1; then - echo "${WARNING} These Dotfiles are only supported on Hyprland 0.51.1 or greater. Do not install on older revisions.${RESET}" - while true; do - echo -n "${CAT} Do you want to continue anyway? (y/N): ${RESET}" - read _continue - _continue=$(echo "${_continue}" | tr '[:upper:]' '[:lower:]') - case "${_continue}" in - y|yes) - echo "${NOTE} Proceeding on Ubuntu/Debian by user confirmation." - break - ;; - n|no|"") - printf "\n%.0s" {1..1} - echo "${INFO} Aborting per user choice. No changes made." - printf "\n%.0s" {1..1} - exit 1 - ;; - *) - echo "${WARN} Please answer 'y' or 'n'." - ;; - esac - done -fi - -echo "${WARNING}A T T E N T I O N !${RESET}" -echo "${SKY_BLUE}This script is meant to manually upgrade your KooL Hyprland Dots${RESET}" -echo "${YELLOW}NOTE that you should edit this script and assign an Directory or Files exclusion${RESET}" -printf "\n%.0s" {1..1} -echo "${MAGENTA}If you are not sure what you are doing,ran the ${SKY_BLUE}copy.sh${RESET} ${MAGENTA}instead${RESET}" -printf "\n%.0s" {1..1} -read -p "${CAT} - Would you like to proceed (y/n): ${RESET}" proceed - -if [ "$proceed" != "y" ]; then - printf "\n%.0s" {1..1} - echo "${INFO} Installation aborted. ${SKY_BLUE}No changes in your system.${RESET} ${YELLOW}Goodbye!${RESET}" - printf "\n%.0s" {1..1} - exit 1 -fi - -# Create Directory for Upgrade Logs -if [ ! -d Upgrade-Logs ]; then - mkdir Upgrade-Logs -fi - -LOG="Upgrade-Logs/upgrade-$(date +%d-%H%M%S)_upgrade_dotfiles.log" - -# source and target versions -source_dir="config" -target_dir="$HOME/.config" - -# Specify the update source directories, their corresponding target directories, and their exclusions -declare -A directories=( - ["config/hypr/"]="$HOME/.config/hypr/" - ["config/kitty/"]="$HOME/.config/kitty/" - ["config/Kvantum/"]="$HOME/.config/Kvantum/" - ["config/nvim/"]="$HOME/.config/nvim/" - ["config/qt5ct/"]="$HOME/.config/qt5ct" - ["config/qt6ct/"]="$HOME/.config/qt6ct/" - ["config/rofi/"]="$HOME/.config/rofi/" - ["config/swaync/"]="$HOME/.config/swaync/" - ["config/waybar/"]="$HOME/.config/waybar/" - ["config/cava/"]="$HOME/.config/cava/" - ["config/ags/"]="$HOME/.config/ags/" - ["config/quickshell/"]="$HOME/.config/quickshell/" - ["config/fastfetch/"]="$HOME/.config/fastfetch/" - ["config/wallust/"]="$HOME/.config/wallust/" - ["config/wlogout/"]="$HOME/.config/wlogout/" - # Add more directories to compare as needed -) - -# Update the exclusion rules -declare -A exclusions=( - ["config/hypr/"]="--exclude=UserConfigs/ --exclude=UserScripts/" - ["config/waybar/"]="--exclude=config --exclude=style.css" - ["config/rofi/"]="--exclude=.current_wallpaper" - ["config/quickshell/"]="--exclude=shell.qml" - # Add more exclusions as needed -) - -# Function to compare directories -compare_directories() { - local source_dir="$1" - local target_dir="$2" - local exclusion="${exclusions[$source_dir]}" # Get exclusions for the source directory - - # Perform dry-run comparison using rsync with exclusions - diff=$(rsync -avn --delete "$source_dir" "$target_dir" $exclusion) - echo "$diff" -} - -# Function to create backup of target directory -create_backup() { - local target_dir="$1" - local backup_suffix="-b4-upgrade" - local target_base=$(basename "$target_dir") - local backup_dir="$HOME/.config/${target_base}${backup_suffix}" - - if [ -d "$backup_dir" ]; then - echo "$NOTE Updating existing backup of the $target_dir..." - rsync -av --delete "$target_dir" "$backup_dir" - echo "$NOTE $backup_dir Backup updated successfully." 2>&1 | tee -a "$LOG" - else - echo "$NOTE Creating backup of the $target_dir..." - rsync -av --exclude="${backup_suffix}" "$target_dir" "$backup_dir"/ - echo "$NOTE $backup_dir Backup created successfully." 2>&1 | tee -a "$LOG" - fi -} - -# Check if the version file exists in target directory, if not exit -target_version_file=$(find "$target_dir/hypr" -name 'v*' | sort -V | tail -n 1) -if [ -z "$target_version_file" ]; then - echo "$ERROR Version number not found in ~/.config/hypr/" 2>&1 | tee -a "$LOG" - echo "$ERROR Upgrade your dots first by running ./copy.sh" 2>&1 | tee -a "$LOG" - exit 1 -fi - -# Get the stored version from the target directory -stored_version=$(basename "$target_version_file") - -# Get the latest version from the source directory -source_version_file=$(find "$source_dir/hypr" -name 'v*' | sort -V | tail -n 1) -latest_version=$(basename "$source_version_file") - -# Function to compare versions -version_gt() { test "$(printf '%s\n' "$@" | sort -V | head -n 1)" != "$1"; } - -# Compare versions -if version_gt "$latest_version" "$stored_version"; then - echo "$CAT newer version ($latest_version) is available. Do you want to upgrade? (Y/N)" 2>&1 | tee -a "$LOG" - read -r answer - if [[ "$answer" =~ ^[Yy]$ ]]; then - # Loop through directories for comparison - for source_directory in "${!directories[@]}"; do - target_directory="${directories[$source_directory]}" - echo "$YELLOW Comparing directories: $source_directory and $target_directory" $RESET - # Compare source and target directories - comparison=$(compare_directories "$source_directory" "$target_directory") - if [ -n "$comparison" ]; then - echo "$NOTE Here are difference of $source_directory and $target_directory:" - echo "$comparison" - - printf "\n%.0s" {1..2} - - # Prompt user for action - echo "$CAT Do you want to copy files and directories from $source_directory to $target_directory? (Y/N)" - read -r answer - - if [[ "$answer" =~ ^[Yy]$ ]]; then - # Creating backup of the target directory - create_backup "$target_directory" - - printf "\n%.0s" {1..2} - # Copy differences from source directory to target directory - rsync -av --delete ${exclusions[$source_directory]} "$source_directory" "$target_directory" - echo "$NOTE Differences of "$target_directory" copied successfully." 2>&1 | tee -a "$LOG" - printf "\n%.0s" {1..2} - else - echo "$NOTE No changes were made for $target_directory" 2>&1 | tee -a "$LOG" - fi - else - echo "$OK No differences found between $source_directory and $target_directory" 2>&1 | tee -a "$LOG" - fi - done - printf "\n%.0s" {1..2} - echo "$NOTE Files or directories updated successfully to version $latest_version" 2>&1 | tee -a "$LOG" - - # Set some files as executable - chmod +x "$HOME/.config/hypr/scripts/"* 2>&1 | tee -a "$LOG" - chmod +x "$HOME/.config/hypr/UserScripts/"* 2>&1 | tee -a "$LOG" - # Set executable for initial-boot.sh - chmod +x "$HOME/.config/hypr/initial-boot.sh" 2>&1 | tee -a "$LOG" - - else - echo "$MAGENTA Upgrade declined. No files or directories changed" 2>&1 | tee -a "$LOG" - fi -else - echo "$OK πŸ‘Œ No upgrade found. The installed version ${MAGENTA}($stored_version)${RESET} is up to date with the KooL Hyprland-Dots version ${YELLOW}($latest_version)${RESET}" 2>&1 | tee -a "$LOG" -fi - -printf "\n%.0s" {1..3} -echo "$(tput bold)$(tput setaf 3)ATTENTION!!!! VERY IMPORTANT NOTICE!!!! $(tput sgr0)" -echo "$(tput bold)$(tput setaf 7)If you updated waybar directory, and you have your own waybar layout and styles $(tput sgr0)" -echo "$(tput bold)$(tput setaf 7)Copy those files from the created backup ~/.config/waybar-b4-upgrade $(tput sgr0)" -echo "$(tput bold)$(tput setaf 7)Make sure to set your waybar and style before logout or reboot $(tput sgr0)" -echo "$(tput bold)$(tput setaf 7)SUPER CTRL B for Waybar Styles and SUPER ALT B for Waybar Layout $(tput sgr0)" -printf "\n%.0s" {1..3} -- cgit v1.2.3 From 2f09b78e20c68c60e171f71979bae3551c51eb08 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Sun, 11 Jan 2026 02:17:07 -0500 Subject: Phase 2a of copy.sh modularization lib_backup functions This module takes care of backing up objects with date-time Removes the duplicate code in copy.sh On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: copy.sh new file: scripts/lib_backup.sh --- copy.sh | 113 ++++++++++++++++---------------------------------- scripts/lib_backup.sh | 72 ++++++++++++++++++++++++++++++++ 2 files changed, 108 insertions(+), 77 deletions(-) create mode 100644 scripts/lib_backup.sh diff --git a/copy.sh b/copy.sh index 0e88b65e..eba99fbd 100755 --- a/copy.sh +++ b/copy.sh @@ -1,5 +1,31 @@ #!/usr/bin/env bash # /* ---- πŸ’« https://github.com/JaKooLit πŸ’« ---- */ # +# Purpose: +# Orchestrates copying/upgrading JaKooLit's Hyprland dotfiles into ~/.config. +# Handles interactive prompts, backups/restores, per-app tweaks, and express mode. +# +# Layout (high-level; future modularization targets): +# - Constants/colors, helper sourcing (copy_menu.sh). +# - Version helpers and CLI parsing (install/upgrade/express). +# - Safety checks (non-root), banners/notices. +# - Environment/distro checks and warnings. +# - GPU/VM/NixOS detection tweaks. +# - Input prompts (keyboard, resolution, clock format, animations). +# - Workflow selection effects (express vs standard). +# - Backup/restore helpers (inline today; planned to move to scripts/lib_backup.sh). +# - Copy phases: +# * Part 1: fastfetch/kitty/rofi/swaync (prompted replace). +# * Waybar special handling (symlinks, configs/styles restore). +# * Part 2: other configs (btop, cava, hypr, etc.). +# * App-specific installs (ghostty, wezterm, ags, quickshell). +# - UserConfigs/UserScripts and hypr file restores. +# - Wallpaper handling (default + optional 1GB pack). +# - Backup cleanup (auto in express). +# - Final symlinks (waybar) and wallust init. +# +# Next modular step: +# Extract backup/restore/cleanup functions into scripts/lib_backup.sh +# and source them similar to scripts/copy_menu.sh. clear wallpaper=$HOME/.config/hypr/wallpaper_effects/.wallpaper_current @@ -25,10 +51,18 @@ RESET="$(tput sgr0)" MIN_EXPRESS_VERSION="2.3.18" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" MENU_HELPER="$SCRIPT_DIR/scripts/copy_menu.sh" +BACKUP_HELPER="$SCRIPT_DIR/scripts/lib_backup.sh" if [ -f "$MENU_HELPER" ]; then # shellcheck source=./scripts/copy_menu.sh . "$MENU_HELPER" fi +if [ -f "$BACKUP_HELPER" ]; then + # shellcheck source=./scripts/lib_backup.sh + . "$BACKUP_HELPER" +else + echo "${ERROR} Backup helper not found at $BACKUP_HELPER. Exiting." + exit 1 +fi version_gte() { [ "$1" = "$(echo -e "$1\n$2" | sort -V | tail -n1)" ] @@ -647,13 +681,6 @@ fi set -e -# Function to create a unique backup directory name with month, day, hours, and minutes -get_backup_dirname() { - local timestamp - timestamp=$(date +"%m%d_%H%M") - echo "back-up_${timestamp}" -} - # Check if the ~/.config/ directory exists if [ ! -d "$HOME/.config" ]; then echo "${ERROR} - $HOME/.config directory does not exist. Creating it now." @@ -1395,79 +1422,11 @@ else done fi -# CLeaning up of ~/.config/ backups -cleanup_backups() { - local mode="${1:-prompt}" - CONFIG_DIR="$HOME/.config" - BACKUP_PREFIX="-backup" - - # Loop through directories in $HOME/.config - for DIR in "$CONFIG_DIR"/*; do - if [ -d "$DIR" ]; then - BACKUP_DIRS=() - - # Check for backup directories - for BACKUP in "$DIR"$BACKUP_PREFIX*; do - if [ -d "$BACKUP" ]; then - BACKUP_DIRS+=("$BACKUP") - fi - done - - # If more than one backup found - if [ ${#BACKUP_DIRS[@]} -gt 1 ]; then - if [ "$mode" = "auto" ]; then - latest_backup="${BACKUP_DIRS[0]}" - for BACKUP in "${BACKUP_DIRS[@]}"; do - if [ "$BACKUP" -nt "$latest_backup" ]; then - latest_backup="$BACKUP" - fi - done - for BACKUP in "${BACKUP_DIRS[@]}"; do - if [ "$BACKUP" != "$latest_backup" ]; then - rm -rf "$BACKUP" - fi - done - echo "${INFO} Express mode: trimmed backups for ${YELLOW}${DIR##*/}${RESET}, keeping ${MAGENTA}${latest_backup##*/}${RESET}." 2>&1 | tee -a "$LOG" - continue - fi - printf "\n%.0s" {1..2} - echo -e "${INFO} Found ${MAGENTA}multiple backups${RESET} for: ${YELLOW}${DIR##*/}${RESET}" - echo "${YELLOW}Backups: ${RESET}" - - # List the backups - for BACKUP in "${BACKUP_DIRS[@]}"; do - echo " - ${BACKUP##*/}" - done - - echo -n "${CAT} Do you want to delete the older backups of ${YELLOW}${DIR##*/}${RESET} and keep the latest backup only? (y/N): " - read back_choice - - if [[ "$back_choice" == [Yy]* ]]; then - # Sort backups by modification time - latest_backup="${BACKUP_DIRS[0]}" - for BACKUP in "${BACKUP_DIRS[@]}"; do - if [ "$BACKUP" -nt "$latest_backup" ]; then - latest_backup="$BACKUP" - fi - done - - for BACKUP in "${BACKUP_DIRS[@]}"; do - if [ "$BACKUP" != "$latest_backup" ]; then - echo "Deleting: ${BACKUP##*/}" - rm -rf "$BACKUP" - fi - done - echo "Old backups of ${YELLOW}${DIR##*/}${RESET} deleted, keeping: ${MAGENTA}${latest_backup##*/}${RESET}" - fi - fi - fi - done -} # Execute the cleanup function if [ "$EXPRESS_MODE" -eq 1 ]; then - cleanup_backups auto + cleanup_backups auto "$LOG" else - cleanup_backups prompt + cleanup_backups prompt "$LOG" fi # Check if ~/.config/waybar/style.css does not exist or is a symlink diff --git a/scripts/lib_backup.sh b/scripts/lib_backup.sh new file mode 100644 index 00000000..6867fb6d --- /dev/null +++ b/scripts/lib_backup.sh @@ -0,0 +1,72 @@ +#!/usr/bin/env bash +# Backup helper utilities shared by copy.sh (and future scripts). + +# Create a unique backup directory name with month, day, hours, and minutes. +get_backup_dirname() { + echo "back-up_$(date +"%m%d_%H%M")" +} + +# Move a directory to a timestamped backup alongside the original. +# Usage: backup_dir "/path/to/dir" [logfile] +backup_dir() { + local dir="$1" + local log="${2:-/dev/null}" + local backup_suffix + + [ -z "$dir" ] && return 1 + backup_suffix=$(get_backup_dirname) + mv "$dir" "${dir}-backup-${backup_suffix}" 2>&1 | tee -a "$log" +} + +# Cleanup old backups under ~/.config, keeping the newest for each base dir. +# mode: "auto" (no prompts) or "prompt" (asks before delete); log optional. +cleanup_backups() { + local mode="${1:-prompt}" + local log="${2:-/dev/null}" + local CONFIG_DIR="$HOME/.config" + local BACKUP_PREFIX="-backup" + + for DIR in "$CONFIG_DIR"/*; do + [ -d "$DIR" ] || continue + local BACKUP_DIRS=() + + for BACKUP in "$DIR"$BACKUP_PREFIX*; do + [ -d "$BACKUP" ] && BACKUP_DIRS+=("$BACKUP") + done + + [ ${#BACKUP_DIRS[@]} -gt 1 ] || continue + + # Determine latest backup by mtime + local latest_backup="${BACKUP_DIRS[0]}" + for BACKUP in "${BACKUP_DIRS[@]}"; do + [ "$BACKUP" -nt "$latest_backup" ] && latest_backup="$BACKUP" + done + + if [ "$mode" = "auto" ]; then + for BACKUP in "${BACKUP_DIRS[@]}"; do + if [ "$BACKUP" != "$latest_backup" ]; then + rm -rf "$BACKUP" + fi + done + echo "${INFO:-[INFO]} Express mode: trimmed backups for ${YELLOW:-}${DIR##*/}${RESET:-}, keeping ${MAGENTA:-}${latest_backup##*/}${RESET:-}." 2>&1 | tee -a "$log" + continue + fi + + printf "\n%s Found multiple backups for: %s\n" "${INFO:-[INFO]}" "${DIR##*/}" + echo "${YELLOW:-}Backups:${RESET:-}" + for BACKUP in "${BACKUP_DIRS[@]}"; do + echo " - ${BACKUP##*/}" + done + echo -n "${CAT:-[ACTION]} Delete older backups and keep only the latest? (y/N): " + read back_choice + if [[ "$back_choice" == [Yy]* ]]; then + for BACKUP in "${BACKUP_DIRS[@]}"; do + if [ "$BACKUP" != "$latest_backup" ]; then + rm -rf "$BACKUP" + echo "Deleted: ${BACKUP##*/}" + fi + done + echo "Kept: ${latest_backup##*/}" + fi + done +} -- cgit v1.2.3 From b7115794b4419affe58d751b80fed99d49246e6d Mon Sep 17 00:00:00 2001 From: Don Williams Date: Sun, 11 Jan 2026 02:25:37 -0500 Subject: Phase 3 Moved nvidia, vm, nixos code to lib_detect.sh This code make configuration adjustsments On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: copy.sh new file: scripts/lib_detect.sh --- copy.sh | 51 +++++++++++++-------------------------------------- scripts/lib_detect.sh | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 38 deletions(-) create mode 100644 scripts/lib_detect.sh diff --git a/copy.sh b/copy.sh index eba99fbd..386cbe17 100755 --- a/copy.sh +++ b/copy.sh @@ -52,6 +52,7 @@ MIN_EXPRESS_VERSION="2.3.18" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" MENU_HELPER="$SCRIPT_DIR/scripts/copy_menu.sh" BACKUP_HELPER="$SCRIPT_DIR/scripts/lib_backup.sh" +DETECT_HELPER="$SCRIPT_DIR/scripts/lib_detect.sh" if [ -f "$MENU_HELPER" ]; then # shellcheck source=./scripts/copy_menu.sh . "$MENU_HELPER" @@ -63,6 +64,13 @@ else echo "${ERROR} Backup helper not found at $BACKUP_HELPER. Exiting." exit 1 fi +if [ -f "$DETECT_HELPER" ]; then + # shellcheck source=./scripts/lib_detect.sh + . "$DETECT_HELPER" +else + echo "${ERROR} Detect helper not found at $DETECT_HELPER. Exiting." + exit 1 +fi version_gte() { [ "$1" = "$(echo -e "$1\n$2" | sort -V | tail -n1)" ] @@ -246,42 +254,9 @@ if [ "$EXPRESS_MODE" -eq 1 ]; then echo "${INFO} Express mode enabled. Optional restore prompts will be skipped." 2>&1 | tee -a "$LOG" fi -# setting up for NVIDIA -if lspci -k | grep -A 2 -E "(VGA|3D)" | grep -iq nvidia; then - echo "${INFO} Nvidia GPU detected. Setting up proper env's and configs" 2>&1 | tee -a "$LOG" || true - sed -i '/env = LIBVA_DRIVER_NAME,nvidia/s/^#//' config/hypr/configs/ENVariables.conf - sed -i '/env = __GLX_VENDOR_LIBRARY_NAME,nvidia/s/^#//' config/hypr/configs/ENVariables.conf - sed -i '/env = NVD_BACKEND,direct/s/^#//' config/hypr/configs/ENVariables.conf - sed -i '/env = GSK_RENDERER,ngl/s/^#//' config/hypr/configs/ENVariables.conf - - # no hardware cursors if nvidia detected - sed -i 's/^\([[:space:]]*no_hardware_cursors[[:space:]]*=[[:space:]]*\)2/\1 1/' config/hypr/configs/SystemSettings.conf -fi - -# uncommenting WLR_RENDERER_ALLOW_SOFTWARE,1 if running in a VM is detected -if hostnamectl | grep -q 'Chassis: vm'; then - echo "${INFO} System is running in a virtual machine. Setting up proper env's and configs" 2>&1 | tee -a "$LOG" || true - sed -i 's/^\([[:space:]]*no_hardware_cursors[[:space:]]*=[[:space:]]*\)2/\1 1/' config/hypr/configs/SystemSettings.conf - # enabling proper ENV's for Virtual Environment which should help - sed -i '/env = WLR_RENDERER_ALLOW_SOFTWARE,1/s/^#//' config/hypr/configs/ENVariables.conf - sed -i '/monitor = Virtual-1, 1920x1080@60,auto,1/s/^#//' config/hypr/monitors.conf -fi - -# Proper Polkit for NixOS -if hostnamectl | grep -q 'Operating System: NixOS'; then - echo "${INFO} NixOS Distro Detected. Setting up proper env's and configs." 2>&1 | tee -a "$LOG" || true - # Ensure NixOS polkit is enabled via overlay and default polkit is disabled via disable list - OVERLAY_SA="config/hypr/configs/Startup_Apps.conf" - DISABLE_SA="config/hypr/configs/Startup_Apps.disable" - mkdir -p "$(dirname "$OVERLAY_SA")" - touch "$OVERLAY_SA" "$DISABLE_SA" - if ! grep -qx 'exec-once = $scriptsDir/Polkit-NixOS.sh' "$OVERLAY_SA"; then - echo 'exec-once = $scriptsDir/Polkit-NixOS.sh' >>"$OVERLAY_SA" - fi - if ! grep -qx '\$scriptsDir/Polkit.sh' "$DISABLE_SA"; then - echo '$scriptsDir/Polkit.sh' >>"$DISABLE_SA" - fi -fi +detect_nvidia_adjust "$LOG" +detect_vm_adjust "$LOG" +detect_nixos_adjust "$LOG" # activating hyprcursor on env by checking if the directory ~/.icons/Bibata-Modern-Ice/hyprcursors exists if [ -d "$HOME/.icons/Bibata-Modern-Ice/hyprcursors" ]; then @@ -1322,8 +1297,8 @@ chmod +x "$HOME/.config/hypr/UserScripts/"* 2>&1 | tee -a "$LOG" # Set executable for initial-boot.sh chmod +x "$HOME/.config/hypr/initial-boot.sh" 2>&1 | tee -a "$LOG" -# Waybar config to symlink & retain based on machine type -if hostnamectl | grep -q 'Chassis: desktop'; then +chassis_type=$(detect_waybar_config) +if [ "$chassis_type" = "desktop" ]; then config_file="$waybar_config" config_remove=" Laptop" else diff --git a/scripts/lib_detect.sh b/scripts/lib_detect.sh new file mode 100644 index 00000000..5cb26c1b --- /dev/null +++ b/scripts/lib_detect.sh @@ -0,0 +1,49 @@ +#!/usr/bin/env bash +# Detection and environment adjustment helpers shared by copy.sh. + +# Nvidia tweaks: uncomments envs and adjusts hardware cursor setting. +detect_nvidia_adjust() { + local log="$1" + if lspci -k | grep -A 2 -E "(VGA|3D)" | grep -iq nvidia; then + echo "${INFO:-[INFO]} Nvidia GPU detected. Setting up proper env's and configs" 2>&1 | tee -a "$log" || true + sed -i '/env = LIBVA_DRIVER_NAME,nvidia/s/^#//' config/hypr/configs/ENVariables.conf + sed -i '/env = __GLX_VENDOR_LIBRARY_NAME,nvidia/s/^#//' config/hypr/configs/ENVariables.conf + sed -i '/env = NVD_BACKEND,direct/s/^#//' config/hypr/configs/ENVariables.conf + sed -i '/env = GSK_RENDERER,ngl/s/^#//' config/hypr/configs/ENVariables.conf + sed -i 's/^\([[:space:]]*no_hardware_cursors[[:space:]]*=[[:space:]]*\)2/\1 1/' config/hypr/configs/SystemSettings.conf + fi +} + +# VM tweaks: enable software renderer envs and virtual monitor defaults. +detect_vm_adjust() { + local log="$1" + if hostnamectl | grep -q 'Chassis: vm'; then + echo "${INFO:-[INFO]} System is running in a virtual machine. Setting up proper env's and configs" 2>&1 | tee -a "$log" || true + sed -i 's/^\([[:space:]]*no_hardware_cursors[[:space:]]*=[[:space:]]*\)2/\1 1/' config/hypr/configs/SystemSettings.conf + sed -i '/env = WLR_RENDERER_ALLOW_SOFTWARE,1/s/^#//' config/hypr/configs/ENVariables.conf + sed -i '/monitor = Virtual-1, 1920x1080@60,auto,1/s/^#//' config/hypr/monitors.conf + fi +} + +# NixOS tweaks: ensure polkit overlay is enabled and default disabled. +detect_nixos_adjust() { + local log="$1" + if hostnamectl | grep -q 'Operating System: NixOS'; then + echo "${INFO:-[INFO]} NixOS Distro Detected. Setting up proper env's and configs." 2>&1 | tee -a "$log" || true + local OVERLAY_SA="config/hypr/configs/Startup_Apps.conf" + local DISABLE_SA="config/hypr/configs/Startup_Apps.disable" + mkdir -p "$(dirname "$OVERLAY_SA")" + touch "$OVERLAY_SA" "$DISABLE_SA" + grep -qx 'exec-once = $scriptsDir/Polkit-NixOS.sh' "$OVERLAY_SA" || echo 'exec-once = $scriptsDir/Polkit-NixOS.sh' >>"$OVERLAY_SA" + grep -qx '\$scriptsDir/Polkit.sh' "$DISABLE_SA" || echo '$scriptsDir/Polkit.sh' >>"$DISABLE_SA" + fi +} + +# Decide waybar config/style based on chassis type. Echoes chosen config path. +detect_waybar_config() { + if hostnamectl | grep -q 'Chassis: desktop'; then + echo "desktop" + else + echo "laptop" + fi +} -- cgit v1.2.3 From a31e55ca4acac4bc256b6bb38915b6e414da90ad Mon Sep 17 00:00:00 2001 From: Don Williams Date: Sun, 11 Jan 2026 02:30:05 -0500 Subject: Moved the prompts for keyboard, resolution, clock, rainbow borders Further modularizing the copy.sh script The express upgrade is almost moved here On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: copy.sh new file: scripts/lib_prompts.sh --- copy.sh | 303 ++++--------------------------------------------- scripts/lib_prompts.sh | 256 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 276 insertions(+), 283 deletions(-) create mode 100644 scripts/lib_prompts.sh diff --git a/copy.sh b/copy.sh index 386cbe17..aa634fd3 100755 --- a/copy.sh +++ b/copy.sh @@ -5,14 +5,14 @@ # Handles interactive prompts, backups/restores, per-app tweaks, and express mode. # # Layout (high-level; future modularization targets): -# - Constants/colors, helper sourcing (copy_menu.sh). +# - Constants/colors, helper sourcing (copy_menu.sh, lib_backup.sh, lib_detect.sh, lib_prompts.sh). # - Version helpers and CLI parsing (install/upgrade/express). # - Safety checks (non-root), banners/notices. # - Environment/distro checks and warnings. -# - GPU/VM/NixOS detection tweaks. -# - Input prompts (keyboard, resolution, clock format, animations). +# - GPU/VM/NixOS detection tweaks (lib_detect.sh). +# - Input prompts (keyboard, resolution, clock format, animations) (lib_prompts.sh). # - Workflow selection effects (express vs standard). -# - Backup/restore helpers (inline today; planned to move to scripts/lib_backup.sh). +# - Backup/restore helpers (in scripts/lib_backup.sh). # - Copy phases: # * Part 1: fastfetch/kitty/rofi/swaync (prompted replace). # * Waybar special handling (symlinks, configs/styles restore). @@ -24,8 +24,8 @@ # - Final symlinks (waybar) and wallust init. # # Next modular step: -# Extract backup/restore/cleanup functions into scripts/lib_backup.sh -# and source them similar to scripts/copy_menu.sh. +# Extract per-app installers (ags/quickshell/ghostty/wezterm) and editor selection +# into scripts/lib_apps.sh; then consider splitting copy phases into dedicated helpers. clear wallpaper=$HOME/.config/hypr/wallpaper_effects/.wallpaper_current @@ -53,6 +53,7 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" MENU_HELPER="$SCRIPT_DIR/scripts/copy_menu.sh" BACKUP_HELPER="$SCRIPT_DIR/scripts/lib_backup.sh" DETECT_HELPER="$SCRIPT_DIR/scripts/lib_detect.sh" +PROMPTS_HELPER="$SCRIPT_DIR/scripts/lib_prompts.sh" if [ -f "$MENU_HELPER" ]; then # shellcheck source=./scripts/copy_menu.sh . "$MENU_HELPER" @@ -71,6 +72,13 @@ else echo "${ERROR} Detect helper not found at $DETECT_HELPER. Exiting." exit 1 fi +if [ -f "$PROMPTS_HELPER" ]; then + # shellcheck source=./scripts/lib_prompts.sh + . "$PROMPTS_HELPER" +else + echo "${ERROR} Prompts helper not found at $PROMPTS_HELPER. Exiting." + exit 1 +fi version_gte() { [ "$1" = "$(echo -e "$1\n$2" | sort -V | tail -n1)" ] @@ -137,7 +145,6 @@ EXPRESS_SUPPORTED=0 if express_supported; then EXPRESS_SUPPORTED=1 fi - if [ "$EXPRESS_MODE" -eq 1 ] && [ "$EXPRESS_SUPPORTED" -eq 0 ]; then echo "${WARN} Express upgrade requires installed dotfiles v${MIN_EXPRESS_VERSION} or newer. Falling back to standard upgrade." EXPRESS_MODE=0 @@ -268,114 +275,8 @@ fi printf "\n%.0s" {1..1} -# Function to detect keyboard layout using localectl or setxkbmap -detect_layout() { - if command -v localectl >/dev/null 2>&1; then - layout=$(localectl status --no-pager | awk '/X11 Layout/ {print $3}') - if [ -n "$layout" ]; then - echo "$layout" - fi - elif command -v setxkbmap >/dev/null 2>&1; then - layout=$(setxkbmap -query | grep layout | awk '{print $2}') - if [ -n "$layout" ]; then - echo "$layout" - fi - fi -} - -# Detect the current keyboard layout -layout=$(detect_layout) - -if [ "$layout" = "(unset)" ]; then - while true; do - printf "\n%.0s" {1..1} - print_color $WARNING " - β–ˆβ–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–ˆ - STOP AND READ - β–ˆβ–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–ˆ - - !!! IMPORTANT WARNING !!! - -The Default Keyboard Layout could not be detected -You need to set it Manually - - !!! WARNING !!! - -Setting a wrong Keyboard Layout will cause Hyprland to crash -If you are not sure, just type ${YELLOW}us${RESET} -${SKYBLUE}You can change later in ~/.config/hypr/UserConfigs/UserSettings.conf${RESET} - -${MAGENTA} NOTE:${RESET} -β€’ You can also set more than 2 keyboard layouts -β€’ For example: ${YELLOW}us, kr, gb, ru${RESET} -" - printf "\n%.0s" {1..1} - - echo -n "${CAT} - Please enter the correct keyboard layout: " - read new_layout - - if [ -n "$new_layout" ]; then - layout="$new_layout" - break - else - echo "${CAT} Please enter a keyboard layout." - fi - done -fi - -printf "${NOTE} Detecting keyboard layout to prepare proper Hyprland Settings\n" - -# Prompt the user to confirm whether the detected layout is correct -while true; do - printf "${INFO} Current keyboard layout is ${MAGENTA}$layout${RESET}\n" - echo -n "${CAT} Is this correct? [y/n] " - read keyboard_layout - - case $keyboard_layout in - [yY]) - awk -v layout="$layout" '/kb_layout/ {$0 = " kb_layout = " layout} 1' config/hypr/configs/SystemSettings.conf >temp.conf - mv temp.conf config/hypr/configs/SystemSettings.conf - - echo "${NOTE} kb_layout ${MAGENTA}$layout${RESET} configured in settings." 2>&1 | tee -a "$LOG" - break - ;; - [nN]) - printf "\n%.0s" {1..2} - print_color $WARNING " - β–ˆβ–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–ˆ - STOP AND READ - β–ˆβ–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–ˆ - - !!! IMPORTANT WARNING !!! - -The Default Keyboard Layout could not be detected -You need to set it Manually - - !!! WARNING !!! - -Setting a wrong Keyboard Layout will cause Hyprland to crash -If you are not sure, just type ${YELLOW}us${RESET} -${SKYBLUE}You can change later in ~/.config/hypr/UserConfigs/UserSettings.conf${RESET} - -${MAGENTA} NOTE:${RESET} -β€’ You can also set more than 2 keyboard layouts -β€’ For example: ${YELLOW}us, kr, gb, ru${RESET} -" - printf "\n%.0s" {1..1} - - echo -n "${CAT} - Please enter the correct keyboard layout: " - read new_layout - - awk -v new_layout="$new_layout" '/kb_layout/ {$0 = " kb_layout = " new_layout} 1' config/hypr/configs/SystemSettings.conf >temp.conf - mv temp.conf config/hypr/configs/SystemSettings.conf - echo "${OK} kb_layout $new_layout configured in settings." 2>&1 | tee -a "$LOG" - break - ;; - *) - echo "${ERROR} Please enter either 'y' or 'n'." - ;; - esac -done +layout=$(prompt_detect_layout) +prompt_keyboard_layout "$layout" "$LOG" # Check if asusctl is installed and add rog-control-center on Startup if command -v asusctl >/dev/null 2>&1; then @@ -460,37 +361,8 @@ fi printf "\n" -# Action to do for better appearance -while true; do - echo "${NOTE} ${SKY_BLUE} By default, KooL's Dots are configured for 1440p or 2k." - echo "${WARN} If you dont select proper resolution, Hyprlock will look FUNKY!" - echo "${INFO} If you are not sure what is your resolution, choose 1 here!" - echo "${MAGENTA}Select monitor resolution to properly configure appearance and fonts:" - echo "$YELLOW -- Enter 1. for monitor resolution less than 1440p (< 1440p)" - echo "$YELLOW -- Enter 2. for monitor resolution equal to or higher than 1440p (β‰₯ 1440p)" - - echo -n "$CAT Enter the number of your choice (1 or 2): " - read res_choice - - case $res_choice in - 1) - resolution="< 1440p" - break - ;; - 2) - resolution="β‰₯ 1440p" - break - ;; - *) - echo "${ERROR} Invalid choice. Please enter 1 for < 1440p or 2 for β‰₯ 1440p." - ;; - esac -done - -# Use the selected resolution in your existing script +resolution=$(prompt_resolution_choice) echo "${OK} You have chosen $resolution resolution." 2>&1 | tee -a "$LOG" - -# actions if < 1440p is chosen if [ "$resolution" == "< 1440p" ]; then # kitty font size sed -i 's/font_size 16.0/font_size 14.0/' config/kitty/kitty.conf @@ -513,146 +385,11 @@ fi printf "\n%.0s" {1..1} -# Ask whether to change to 12hr format -while true; do - echo -e "${NOTE} ${SKY_BLUE} By default, KooL's Dots are configured in 24H clock format." - echo -n "$CAT Do you want to change to 12H (AM/PM) clock format? (y/n): " - read answer - - # Convert the answer to lowercase for comparison - answer=$(echo "$answer" | tr '[:upper:]' '[:lower:]') - - # Check if the answer is valid - if [[ "$answer" == "y" ]]; then - # Modify waybar clock modules if 12hr is selected - # Clock 1 - sed -i 's#^\(\s*\)//\("format": "ο€— {:%I:%M %p}",\) #\1\2 #g' config/waybar/Modules 2>&1 | tee -a "$LOG" - sed -i 's#^\(\s*\)\("format": "ο€— {:%H:%M:%S}",\) #\1//\2#g' config/waybar/Modules 2>&1 | tee -a "$LOG" - - # Clock 2 - sed -i 's#^\(\s*\)\("format": "ο€— {:%H:%M}",\) #\1//\2#g' config/waybar/Modules 2>&1 | tee -a "$LOG" - - # Clock 3 - sed -i 's#^\(\s*\)//\("format": "{:%I:%M %p - %d/%b}",\) #\1\2#g' config/waybar/Modules 2>&1 | tee -a "$LOG" - sed -i 's#^\(\s*\)\("format": "{:%H:%M - %d/%b}",\) #\1//\2#g' config/waybar/Modules 2>&1 | tee -a "$LOG" - - # Clock 4 - sed -i 's#^\(\s*\)//\("format": "{:%B | %a %d, %Y | %I:%M %p}",\) #\1\2#g' config/waybar/Modules 2>&1 | tee -a "$LOG" - sed -i 's#^\(\s*\)\("format": "{:%B | %a %d, %Y | %H:%M}",\) #\1//\2#g' config/waybar/Modules 2>&1 | tee -a "$LOG" - - # Clock 5 - sed -i 's#^\(\s*\)//\("format": "{:%A, %I:%M %P}",\) #\1\2#g' config/waybar/Modules 2>&1 | tee -a "$LOG" - sed -i 's#^\(\s*\)\("format": "{:%a %d | %H:%M}",\) #\1//\2#g' config/waybar/Modules 2>&1 | tee -a "$LOG" - - # for hyprlock - HYPRLOCK_FILE="config/hypr/hyprlock.conf" - if [ ! -f "$HYPRLOCK_FILE" ] && [ -f "config/hypr/hyprlock-1080p.conf" ]; then - HYPRLOCK_FILE="config/hypr/hyprlock-1080p.conf" - fi - if [ -f "$HYPRLOCK_FILE" ]; then - sed -i 's/^\s*text = cmd\[update:1000\] echo "\$(date +"%H")"/# &/' "$HYPRLOCK_FILE" 2>&1 | tee -a "$LOG" - sed -i 's/^\(\s*\)# *text = cmd\[update:1000\] echo "\$(date +"%I")" #AM\/PM/\1 text = cmd\[update:1000\] echo "\$(date +"%I")" #AM\/PM/' "$HYPRLOCK_FILE" 2>&1 | tee -a "$LOG" - - sed -i 's/^\s*text = cmd\[update:1000\] echo "\$(date +"%S")"/# &/' "$HYPRLOCK_FILE" 2>&1 | tee -a "$LOG" - sed -i 's/^\(\s*\)# *text = cmd\[update:1000\] echo "\$(date +"%S %p")" #AM\/PM/\1 text = cmd\[update:1000\] echo "\$(date +"%S %p")" #AM\/PM/' "$HYPRLOCK_FILE" 2>&1 | tee -a "$LOG" - else - echo "${WARN} hyprlock template not found; skipping 12H lock format edits" 2>&1 | tee -a "$LOG" - fi - - echo "${OK} 12H format set on waybar clocks succesfully." 2>&1 | tee -a "$LOG" - - # Function to apply 12H format to SDDM themes - apply_sddm_12h_format() { - local sddm_directory=$1 - - # Check if the directory exists - if [ -d "$sddm_directory" ]; then - echo "Editing ${SKY_BLUE}$sddm_directory${RESET} to 12H format" 2>&1 | tee -a "$LOG" - - sudo sed -i 's|^## HourFormat="hh:mm AP"|HourFormat="hh:mm AP"|' "$sddm_directory/theme.conf" 2>&1 | tee -a "$LOG" || true - sudo sed -i 's|^HourFormat="HH:mm"|## HourFormat="HH:mm"|' "$sddm_directory/theme.conf" 2>&1 | tee -a "$LOG" || true - fi - } - - # Applying to different SDDM themes - apply_sddm_12h_format "/usr/share/sddm/themes/simple-sddm" - apply_sddm_12h_format "/usr/share/sddm/themes/simple_sddm_2" - - # For SDDM (sequoia_2) - sddm_directory_3="/usr/share/sddm/themes/sequoia_2" - if [ -d "$sddm_directory_3" ]; then - echo "${YELLOW}sddm sequoia_2${RESET} theme exists. Editing to 12H format" 2>&1 | tee -a "$LOG" - - # Comment out the existing clockFormat="HH:mm" line - sudo sed -i 's|^clockFormat="HH:mm"|## clockFormat="HH:mm"|' "$sddm_directory_3/theme.conf" 2>&1 | tee -a "$LOG" || true - - # Insert the new clockFormat="hh:mm AP" line if it's not already present - if ! grep -q 'clockFormat="hh:mm AP"' "$sddm_directory_3/theme.conf"; then - sudo sed -i '/^clockFormat=/a clockFormat="hh:mm AP"' "$sddm_directory_3/theme.conf" 2>&1 | tee -a "$LOG" || true - fi - - echo "${OK} 12H format set to SDDM successfully." 2>&1 | tee -a "$LOG" - fi - - break - - elif [[ "$answer" == "n" ]]; then - echo "${NOTE} You chose not to change to 12H format." 2>&1 | tee -a "$LOG" - break # Exit the loop if the user chooses "n" - else - echo "${ERROR} Invalid choice. Please enter y for yes or n for no." - fi -done +prompt_clock_12h "$LOG" printf "\n%.0s" {1..1} - -# Check if the user wants to disable Rainbow borders -echo "${NOTE} ${SKY_BLUE}By default, Rainbow Borders animation is enabled" -echo "${WARN} However, this uses a bit more CPU and Memory resources." - -# Ask whether to disable Rainbow Borders animation -echo -n "${CAT} Do you want to disable Rainbow Borders animation? (y/N): " -read border_choice - -# Check user's choice -if [[ "$border_choice" =~ ^[Yy]$ ]]; then - # Disable Rainbow Borders - mv config/hypr/UserScripts/RainbowBorders.sh config/hypr/UserScripts/RainbowBorders.bak.sh - - # Comment out the exec-once and animation lines - sed -i '/exec-once = \$UserScripts\/RainbowBorders.sh/s/^/#/' config/hypr/configs/Startup_Apps.conf - sed -i '/^[[:space:]]*animation = borderangle, 1, 180, liner, loop/s/^/#/' config/hypr/configs/UserAnimations.conf - - echo "${OK} Rainbow borders are now disabled." 2>&1 | tee -a "$LOG" -else - echo "${NOTE} No changes made. Rainbow borders remain enabled." 2>&1 | tee -a "$LOG" -fi +prompt_rainbow_borders "$LOG" >/dev/null printf "\n%.0s" {1..1} - -if [ "$UPGRADE_MODE" -eq 1 ] && [ "$EXPRESS_MODE" -eq 0 ]; then - if [ "$EXPRESS_SUPPORTED" -eq 0 ]; then - echo "${NOTE} Express mode requires installed dotfiles v${MIN_EXPRESS_VERSION} or newer. Continuing with standard upgrade prompts." 2>&1 | tee -a "$LOG" - else - while true; do - echo "${NOTE} Express mode skips config restore prompts, SDDM/background questions, and trims old backups." - echo -n "${CAT} Do you want to continue with EXPRESS upgrade mode? (y/N): " - read express_choice - case "$express_choice" in - [Yy]) - EXPRESS_MODE=1 - echo "${INFO} Express mode enabled for this upgrade." 2>&1 | tee -a "$LOG" - break - ;; - [Nn] | "") - echo "${NOTE} Continuing with standard upgrade prompts." 2>&1 | tee -a "$LOG" - break - ;; - *) - echo "${WARN} Please answer y or n." - ;; - esac - done - fi -fi +prompt_express_upgrade "$EXPRESS_SUPPORTED" "$LOG" set -e diff --git a/scripts/lib_prompts.sh b/scripts/lib_prompts.sh new file mode 100644 index 00000000..16931892 --- /dev/null +++ b/scripts/lib_prompts.sh @@ -0,0 +1,256 @@ +#!/usr/bin/env bash +# User interaction helpers extracted from copy.sh. Each helper echoes state or sets +# globals deliberately to minimize side effects. + +# Detect keyboard layout via localectl or setxkbmap. +prompt_detect_layout() { + if command -v localectl >/dev/null 2>&1; then + local layout + layout=$(localectl status --no-pager | awk '/X11 Layout/ {print $3}') + [ -n "$layout" ] && { echo "$layout"; return; } + fi + if command -v setxkbmap >/dev/null 2>&1; then + local layout + layout=$(setxkbmap -query | awk '/layout/ {print $2}') + [ -n "$layout" ] && { echo "$layout"; return; } + fi + echo "(unset)" +} + +# Confirm or set keyboard layout; writes to SystemSettings.conf. +prompt_keyboard_layout() { + local layout="$1" + local log="$2" + + if [ "$layout" = "(unset)" ]; then + while true; do + printf "\n%.0s" {1..1} + print_color $WARNING "\n β–ˆβ–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–ˆ + STOP AND READ + β–ˆβ–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–ˆ + + !!! IMPORTANT WARNING !!! + +The Default Keyboard Layout could not be detected +You need to set it Manually + + !!! WARNING !!! + +Setting a wrong Keyboard Layout will cause Hyprland to crash +If you are not sure, just type ${YELLOW}us${RESET} +${SKYBLUE}You can change later in ~/.config/hypr/UserConfigs/UserSettings.conf${RESET} + +${MAGENTA} NOTE:${RESET} +β€’ You can also set more than 2 keyboard layouts +β€’ For example: ${YELLOW}us, kr, gb, ru${RESET} +" + printf "\n%.0s" {1..1} + + echo -n "${CAT} - Please enter the correct keyboard layout: " + read new_layout + + if [ -n "$new_layout" ]; then + layout="$new_layout" + break + else + echo "${CAT} Please enter a keyboard layout." + fi + done + fi + + printf "${NOTE} Detecting keyboard layout to prepare proper Hyprland Settings\n" + while true; do + printf "${INFO} Current keyboard layout is ${MAGENTA}$layout${RESET}\n" + echo -n "${CAT} Is this correct? [y/n] " + read keyboard_layout + case $keyboard_layout in + [yY]) + awk -v layout="$layout" '/kb_layout/ {$0 = " kb_layout = " layout} 1' config/hypr/configs/SystemSettings.conf >temp.conf + mv temp.conf config/hypr/configs/SystemSettings.conf + echo "${NOTE} kb_layout ${MAGENTA}$layout${RESET} configured in settings." 2>&1 | tee -a "$log" + break + ;; + [nN]) + printf "\n%.0s" {1..2} + print_color $WARNING " + β–ˆβ–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–ˆ + STOP AND READ + β–ˆβ–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–ˆ + + !!! IMPORTANT WARNING !!! + +The Default Keyboard Layout could not be detected +You need to set it Manually + + !!! WARNING !!! + +Setting a wrong Keyboard Layout will cause Hyprland to crash +If you are not sure, just type ${YELLOW}us${RESET} +${SKYBLUE}You can change later in ~/.config/hypr/UserConfigs/UserSettings.conf${RESET} + +${MAGENTA} NOTE:${RESET} +β€’ You can also set more than 2 keyboard layouts +β€’ For example: ${YELLOW}us, kr, gb, ru${RESET} +" + printf "\n%.0s" {1..1} + echo -n "${CAT} - Please enter the correct keyboard layout: " + read new_layout + awk -v new_layout="$new_layout" '/kb_layout/ {$0 = " kb_layout = " new_layout} 1' config/hypr/configs/SystemSettings.conf >temp.conf + mv temp.conf config/hypr/configs/SystemSettings.conf + echo "${OK} kb_layout $new_layout configured in settings." 2>&1 | tee -a "$log" + break + ;; + *) + echo "${ERROR} Please enter either 'y' or 'n'." + ;; + esac + done +} + +# Prompt for resolution choice; echoes "< 1440p" or "β‰₯ 1440p". +prompt_resolution_choice() { + local choice + while true; do + echo "${NOTE} ${SKY_BLUE} By default, KooL's Dots are configured for 1440p or 2k." + echo "${WARN} If you dont select proper resolution, Hyprlock will look FUNKY!" + echo "${INFO} If you are not sure what is your resolution, choose 1 here!" + echo "${MAGENTA}Select monitor resolution to properly configure appearance and fonts:" + echo "$YELLOW -- Enter 1. for monitor resolution less than 1440p (< 1440p)" + echo "$YELLOW -- Enter 2. for monitor resolution equal to or higher than 1440p (β‰₯ 1440p)" + + echo -n "$CAT Enter the number of your choice (1 or 2): " + read choice + case $choice in + 1) echo "< 1440p"; return ;; + 2) echo "β‰₯ 1440p"; return ;; + *) echo "${ERROR} Invalid choice. Please enter 1 for < 1440p or 2 for β‰₯ 1440p." ;; + esac + done +} + +# Prompt for 12H clock; sets waybar/hyprlock/SDDM changes when accepted. +prompt_clock_12h() { + local log="$1" + while true; do + echo -e "${NOTE} ${SKY_BLUE} By default, KooL's Dots are configured in 24H clock format." + echo -n "$CAT Do you want to change to 12H (AM/PM) clock format? (y/n): " + read answer + answer=$(echo "$answer" | tr '[:upper:]' '[:lower:]') + if [[ "$answer" == "y" ]]; then + # waybar clocks + sed -i 's#^\(\s*\)//\("format": "ο€— {:%I:%M %p}",\) #\1\2 #g' config/waybar/Modules 2>&1 | tee -a "$log" + sed -i 's#^\(\s*\)\("format": "ο€— {:%H:%M:%S}",\) #\1//\2#g' config/waybar/Modules 2>&1 | tee -a "$log" + sed -i 's#^\(\s*\)\("format": "ο€— {:%H:%M}",\) #\1//\2#g' config/waybar/Modules 2>&1 | tee -a "$log" + sed -i 's#^\(\s*\)//\("format": "{:%I:%M %p - %d/%b}",\) #\1\2#g' config/waybar/Modules 2>&1 | tee -a "$log" + sed -i 's#^\(\s*\)\("format": "{:%H:%M - %d/%b}",\) #\1//\2#g' config/waybar/Modules 2>&1 | tee -a "$log" + sed -i 's#^\(\s*\)//\("format": "{:%B | %a %d, %Y | %I:%M %p}",\) #\1\2#g' config/waybar/Modules 2>&1 | tee -a "$log" + sed -i 's#^\(\s*\)\("format": "{:%B | %a %d, %Y | %H:%M}",\) #\1//\2#g' config/waybar/Modules 2>&1 | tee -a "$log" + sed -i 's#^\(\s*\)//\("format": "{:%A, %I:%M %P}",\) #\1\2#g' config/waybar/Modules 2>&1 | tee -a "$log" + sed -i 's#^\(\s*\)\("format": "{:%a %d | %H:%M}",\) #\1//\2#g' config/waybar/Modules 2>&1 | tee -a "$log" + + # hyprlock + local HYPRLOCK_FILE="config/hypr/hyprlock.conf" + if [ ! -f "$HYPRLOCK_FILE" ] && [ -f "config/hypr/hyprlock-1080p.conf" ]; then + HYPRLOCK_FILE="config/hypr/hyprlock-1080p.conf" + fi + if [ -f "$HYPRLOCK_FILE" ]; then + sed -i 's/^\s*text = cmd\[update:1000\] echo \"\$(date +\"%H\")\"/# &/' "$HYPRLOCK_FILE" 2>&1 | tee -a "$log" + sed -i 's/^\(\s*\)# *text = cmd\[update:1000\] echo \"\$(date +\"%I\")\" #AM\/PM/\1 text = cmd\[update:1000\] echo \"\$(date +\"%I\")\" #AM\/PM/' "$HYPRLOCK_FILE" 2>&1 | tee -a "$log" + sed -i 's/^\s*text = cmd\[update:1000\] echo \"\$(date +\"%S\")\"/# &/' "$HYPRLOCK_FILE" 2>&1 | tee -a "$log" + sed -i 's/^\(\s*\)# *text = cmd\[update:1000\] echo \"\$(date +\"%S %p\")\" #AM\/PM/\1 text = cmd\[update:1000\] echo \"\$(date +\"%S %p\")\" #AM\/PM/' "$HYPRLOCK_FILE" 2>&1 | tee -a "$log" + else + echo "${WARN} hyprlock template not found; skipping 12H lock format edits" 2>&1 | tee -a "$log" + fi + + # SDDM themes + apply_sddm_12h_format "/usr/share/sddm/themes/simple-sddm" "$log" + apply_sddm_12h_format "/usr/share/sddm/themes/simple_sddm_2" "$log" + apply_sddm_12h_format_sequoia "/usr/share/sddm/themes/sequoia_2" "$log" + echo "${OK} 12H format set on waybar clocks succesfully." 2>&1 | tee -a "$log" + return + elif [[ "$answer" == "n" ]]; then + echo "${NOTE} You chose not to change to 12H format." 2>&1 | tee -a "$log" + return + else + echo "${ERROR} Invalid choice. Please enter y for yes or n for no." + fi + done +} + +apply_sddm_12h_format() { + local sddm_directory="$1" + local log="$2" + if [ -d "$sddm_directory" ]; then + echo "Editing ${SKY_BLUE}$sddm_directory${RESET} to 12H format" 2>&1 | tee -a "$log" + sudo sed -i 's|^## HourFormat=\"hh:mm AP\"|HourFormat=\"hh:mm AP\"|' "$sddm_directory/theme.conf" 2>&1 | tee -a "$log" || true + sudo sed -i 's|^HourFormat=\"HH:mm\"|## HourFormat=\"HH:mm\"|' "$sddm_directory/theme.conf" 2>&1 | tee -a "$log" || true + fi +} + +apply_sddm_12h_format_sequoia() { + local sddm_directory="$1" + local log="$2" + if [ -d "$sddm_directory" ]; then + echo "${YELLOW}sddm sequoia_2${RESET} theme exists. Editing to 12H format" 2>&1 | tee -a "$log" + sudo sed -i 's|^clockFormat=\"HH:mm\"|## clockFormat=\"HH:mm\"|' "$sddm_directory/theme.conf" 2>&1 | tee -a "$log" || true + if ! grep -q 'clockFormat=\"hh:mm AP\"' "$sddm_directory/theme.conf"; then + sudo sed -i '/^clockFormat=/a clockFormat=\"hh:mm AP\"' "$sddm_directory/theme.conf" 2>&1 | tee -a "$log" || true + fi + echo "${OK} 12H format set to SDDM successfully." 2>&1 | tee -a "$log" + fi +} + +# Rainbow borders toggle; returns "disabled" or "kept". +prompt_rainbow_borders() { + local log="$1" + echo "${NOTE} ${SKY_BLUE}By default, Rainbow Borders animation is enabled" + echo "${WARN} However, this uses a bit more CPU and Memory resources." + echo -n "${CAT} Do you want to disable Rainbow Borders animation? (y/N): " + read border_choice + if [[ "$border_choice" =~ ^[Yy]$ ]]; then + mv config/hypr/UserScripts/RainbowBorders.sh config/hypr/UserScripts/RainbowBorders.bak.sh + sed -i '/exec-once = \$UserScripts\/RainbowBorders.sh/s/^/#/' config/hypr/configs/Startup_Apps.conf + sed -i '/^[[:space:]]*animation = borderangle, 1, 180, liner, loop/s/^/#/' config/hypr/configs/UserAnimations.conf + echo "${OK} Rainbow borders are now disabled." 2>&1 | tee -a "$log" + echo "disabled" + else + echo "${NOTE} No changes made. Rainbow borders remain enabled." 2>&1 | tee -a "$log" + echo "kept" + fi +} + +# Express upgrade confirmation; may set EXPRESS_MODE=1. +prompt_express_upgrade() { + local express_supported="$1" + local log="$2" + if [ "$EXPRESS_MODE" -eq 1 ] && [ "$express_supported" -eq 0 ]; then + echo "${NOTE} Express mode requires installed dotfiles v${MIN_EXPRESS_VERSION} or newer. Continuing with standard upgrade prompts." 2>&1 | tee -a "$log" + EXPRESS_MODE=0 + return + fi + if [ "$UPGRADE_MODE" -eq 1 ] && [ "$EXPRESS_MODE" -eq 0 ]; then + if [ "$express_supported" -eq 0 ]; then + echo "${NOTE} Express mode requires installed dotfiles v${MIN_EXPRESS_VERSION} or newer. Continuing with standard upgrade prompts." 2>&1 | tee -a "$log" + else + while true; do + echo "${NOTE} Express mode skips config restore prompts, SDDM/background questions, and trims old backups." + echo -n "${CAT} Do you want to continue with EXPRESS upgrade mode? (y/N): " + read express_choice + case "$express_choice" in + [Yy]) + EXPRESS_MODE=1 + echo "${INFO} Express mode enabled for this upgrade." 2>&1 | tee -a "$log" + break + ;; + [Nn] | "") + echo "${NOTE} Continuing with standard upgrade prompts." 2>&1 | tee -a "$log" + break + ;; + *) + echo "${WARN} Please answer y or n." + ;; + esac + done + fi + fi +} -- cgit v1.2.3 From e73e6a5ce96a7fd0e849cd112321e3160bedff80 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Sun, 11 Jan 2026 02:39:15 -0500 Subject: fixing prompts for resolution, clock, etc On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: copy.sh modified: scripts/lib_prompts.sh --- copy.sh | 3 +-- scripts/lib_prompts.sh | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/copy.sh b/copy.sh index aa634fd3..0a68ea02 100755 --- a/copy.sh +++ b/copy.sh @@ -360,7 +360,7 @@ if [[ "$EDITOR_SET" -eq 0 ]] && command -v vim &>/dev/null; then fi printf "\n" - +echo "${INFO} Awaiting monitor resolution selection (1=<1440p, 2=β‰₯1440p)..." 2>&1 | tee -a "$LOG" resolution=$(prompt_resolution_choice) echo "${OK} You have chosen $resolution resolution." 2>&1 | tee -a "$LOG" if [ "$resolution" == "< 1440p" ]; then @@ -384,7 +384,6 @@ if [ "$resolution" == "< 1440p" ]; then fi printf "\n%.0s" {1..1} - prompt_clock_12h "$LOG" printf "\n%.0s" {1..1} prompt_rainbow_borders "$LOG" >/dev/null diff --git a/scripts/lib_prompts.sh b/scripts/lib_prompts.sh index 16931892..ae493842 100644 --- a/scripts/lib_prompts.sh +++ b/scripts/lib_prompts.sh @@ -111,6 +111,7 @@ ${MAGENTA} NOTE:${RESET} prompt_resolution_choice() { local choice while true; do + echo "${INFO:-[INFO]} Resolution selection required (1 = <1440p, 2 = β‰₯1440p)" echo "${NOTE} ${SKY_BLUE} By default, KooL's Dots are configured for 1440p or 2k." echo "${WARN} If you dont select proper resolution, Hyprlock will look FUNKY!" echo "${INFO} If you are not sure what is your resolution, choose 1 here!" -- cgit v1.2.3 From 292bbd0bce87926157a58f2f1f6a73046a122130 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Sun, 11 Jan 2026 02:43:22 -0500 Subject: Fixing resoltion prmpt --- copy.sh | 1 - scripts/lib_prompts.sh | 5 ++--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/copy.sh b/copy.sh index 0a68ea02..d35af646 100755 --- a/copy.sh +++ b/copy.sh @@ -360,7 +360,6 @@ if [[ "$EDITOR_SET" -eq 0 ]] && command -v vim &>/dev/null; then fi printf "\n" -echo "${INFO} Awaiting monitor resolution selection (1=<1440p, 2=β‰₯1440p)..." 2>&1 | tee -a "$LOG" resolution=$(prompt_resolution_choice) echo "${OK} You have chosen $resolution resolution." 2>&1 | tee -a "$LOG" if [ "$resolution" == "< 1440p" ]; then diff --git a/scripts/lib_prompts.sh b/scripts/lib_prompts.sh index ae493842..45772abb 100644 --- a/scripts/lib_prompts.sh +++ b/scripts/lib_prompts.sh @@ -119,9 +119,8 @@ prompt_resolution_choice() { echo "$YELLOW -- Enter 1. for monitor resolution less than 1440p (< 1440p)" echo "$YELLOW -- Enter 2. for monitor resolution equal to or higher than 1440p (β‰₯ 1440p)" - echo -n "$CAT Enter the number of your choice (1 or 2): " - read choice - case $choice in + read -r -p "${CAT} Enter the number of your choice (1 or 2): " choice + case "$choice" in 1) echo "< 1440p"; return ;; 2) echo "β‰₯ 1440p"; return ;; *) echo "${ERROR} Invalid choice. Please enter 1 for < 1440p or 2 for β‰₯ 1440p." ;; -- cgit v1.2.3 From 27dae2e40ac4fa27cc55a7fa90927fb47a641a85 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Sun, 11 Jan 2026 02:44:51 -0500 Subject: Fixed res prompt --- scripts/lib_prompts.sh | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/scripts/lib_prompts.sh b/scripts/lib_prompts.sh index 45772abb..ce75462c 100644 --- a/scripts/lib_prompts.sh +++ b/scripts/lib_prompts.sh @@ -111,13 +111,9 @@ ${MAGENTA} NOTE:${RESET} prompt_resolution_choice() { local choice while true; do - echo "${INFO:-[INFO]} Resolution selection required (1 = <1440p, 2 = β‰₯1440p)" - echo "${NOTE} ${SKY_BLUE} By default, KooL's Dots are configured for 1440p or 2k." - echo "${WARN} If you dont select proper resolution, Hyprlock will look FUNKY!" - echo "${INFO} If you are not sure what is your resolution, choose 1 here!" - echo "${MAGENTA}Select monitor resolution to properly configure appearance and fonts:" - echo "$YELLOW -- Enter 1. for monitor resolution less than 1440p (< 1440p)" - echo "$YELLOW -- Enter 2. for monitor resolution equal to or higher than 1440p (β‰₯ 1440p)" + echo "${INFO:-[INFO]} Select monitor resolution for scaling:" + echo " 1) < 1440p (lower DPI; smaller displays)" + echo " 2) β‰₯ 1440p (default; 1440p/2k/4k)" read -r -p "${CAT} Enter the number of your choice (1 or 2): " choice case "$choice" in -- cgit v1.2.3 From bf494381829c904425b8bda46b087572b09e7ca4 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Sun, 11 Jan 2026 02:46:11 -0500 Subject: Fixed banner --- scripts/lib_prompts.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/scripts/lib_prompts.sh b/scripts/lib_prompts.sh index ce75462c..6f426b53 100644 --- a/scripts/lib_prompts.sh +++ b/scripts/lib_prompts.sh @@ -115,7 +115,11 @@ prompt_resolution_choice() { echo " 1) < 1440p (lower DPI; smaller displays)" echo " 2) β‰₯ 1440p (default; 1440p/2k/4k)" - read -r -p "${CAT} Enter the number of your choice (1 or 2): " choice + if ! read -r -p "${CAT} Enter the number of your choice (1 or 2): " choice Date: Sun, 11 Jan 2026 02:47:56 -0500 Subject: Banner formatting fixed --- copy.sh | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/copy.sh b/copy.sh index d35af646..0553865a 100755 --- a/copy.sh +++ b/copy.sh @@ -360,7 +360,19 @@ if [[ "$EDITOR_SET" -eq 0 ]] && command -v vim &>/dev/null; then fi printf "\n" -resolution=$(prompt_resolution_choice) +resolution="" +while true; do + echo "${INFO} Select monitor resolution for scaling:" + echo " 1) < 1440p (lower DPI; smaller displays)" + echo " 2) β‰₯ 1440p (default; 1440p/2k/4k)" + echo -n "${CAT} Enter the number of your choice (1 or 2): " + read -r choice + case "$choice" in + 1) resolution="< 1440p"; break ;; + 2) resolution="β‰₯ 1440p"; break ;; + *) echo "${ERROR} Invalid choice. Please enter 1 or 2.";; + esac +done echo "${OK} You have chosen $resolution resolution." 2>&1 | tee -a "$LOG" if [ "$resolution" == "< 1440p" ]; then # kitty font size -- cgit v1.2.3 From e19fdb060b8cbaba989577a145bfe71ef82d13fa Mon Sep 17 00:00:00 2001 From: Don Williams Date: Sun, 11 Jan 2026 02:50:31 -0500 Subject: Fixd issues with sddm wallpaper set code --- copy.sh | 2 +- scripts/lib_prompts.sh | 16 +++++++++++----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/copy.sh b/copy.sh index 0553865a..5275eeb5 100755 --- a/copy.sh +++ b/copy.sh @@ -1083,7 +1083,7 @@ elif [ -d "$sddm_simple_sddm_2" ]; then case $SDDM_WALL in [Yy]) # Copy the wallpaper, ignore errors if the file exists or fails - sudo cp -r "config/hypr/wallpaper_effects/.wallpaper_current" "/usr/share/sddm/themes/simple_sddm_2/Backgrounds/default" || true + sudo -n cp -r "config/hypr/wallpaper_effects/.wallpaper_current" "/usr/share/sddm/themes/simple_sddm_2/Backgrounds/default" || true echo "${NOTE} Current wallpaper applied as default SDDM background" 2>&1 | tee -a "$LOG" break ;; diff --git a/scripts/lib_prompts.sh b/scripts/lib_prompts.sh index 6f426b53..dcad7682 100644 --- a/scripts/lib_prompts.sh +++ b/scripts/lib_prompts.sh @@ -182,8 +182,11 @@ apply_sddm_12h_format() { local log="$2" if [ -d "$sddm_directory" ]; then echo "Editing ${SKY_BLUE}$sddm_directory${RESET} to 12H format" 2>&1 | tee -a "$log" - sudo sed -i 's|^## HourFormat=\"hh:mm AP\"|HourFormat=\"hh:mm AP\"|' "$sddm_directory/theme.conf" 2>&1 | tee -a "$log" || true - sudo sed -i 's|^HourFormat=\"HH:mm\"|## HourFormat=\"HH:mm\"|' "$sddm_directory/theme.conf" 2>&1 | tee -a "$log" || true + if ! sudo -n sed -i 's|^## HourFormat="hh:mm AP"|HourFormat="hh:mm AP"|' "$sddm_directory/theme.conf" 2>&1 | tee -a "$log"; then + echo "${WARN:-[WARN]} Skipping SDDM 12H edit (sudo password required)." 2>&1 | tee -a "$log" + return + fi + sudo -n sed -i 's|^HourFormat="HH:mm"|## HourFormat="HH:mm"|' "$sddm_directory/theme.conf" 2>&1 | tee -a "$log" || true fi } @@ -192,9 +195,12 @@ apply_sddm_12h_format_sequoia() { local log="$2" if [ -d "$sddm_directory" ]; then echo "${YELLOW}sddm sequoia_2${RESET} theme exists. Editing to 12H format" 2>&1 | tee -a "$log" - sudo sed -i 's|^clockFormat=\"HH:mm\"|## clockFormat=\"HH:mm\"|' "$sddm_directory/theme.conf" 2>&1 | tee -a "$log" || true - if ! grep -q 'clockFormat=\"hh:mm AP\"' "$sddm_directory/theme.conf"; then - sudo sed -i '/^clockFormat=/a clockFormat=\"hh:mm AP\"' "$sddm_directory/theme.conf" 2>&1 | tee -a "$log" || true + if ! sudo -n sed -i 's|^clockFormat="HH:mm"|## clockFormat="HH:mm"|' "$sddm_directory/theme.conf" 2>&1 | tee -a "$log"; then + echo "${WARN:-[WARN]} Skipping sequoia SDDM 12H edit (sudo password required)." 2>&1 | tee -a "$log" + return + fi + if ! grep -q 'clockFormat="hh:mm AP"' "$sddm_directory/theme.conf"; then + sudo -n sed -i '/^clockFormat=/a clockFormat="hh:mm AP"' "$sddm_directory/theme.conf" 2>&1 | tee -a "$log" || true fi echo "${OK} 12H format set to SDDM successfully." 2>&1 | tee -a "$log" fi -- cgit v1.2.3 From d10333068edefd57a354332c3d32cb8ae3fb81b2 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Sun, 11 Jan 2026 02:53:39 -0500 Subject: Got caught in sudo/sddm loop --- scripts/lib_prompts.sh | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/scripts/lib_prompts.sh b/scripts/lib_prompts.sh index dcad7682..c79c9da6 100644 --- a/scripts/lib_prompts.sh +++ b/scripts/lib_prompts.sh @@ -162,10 +162,13 @@ prompt_clock_12h() { echo "${WARN} hyprlock template not found; skipping 12H lock format edits" 2>&1 | tee -a "$log" fi - # SDDM themes - apply_sddm_12h_format "/usr/share/sddm/themes/simple-sddm" "$log" - apply_sddm_12h_format "/usr/share/sddm/themes/simple_sddm_2" "$log" - apply_sddm_12h_format_sequoia "/usr/share/sddm/themes/sequoia_2" "$log" + if [ "${EXPRESS_MODE:-0}" -eq 0 ]; then + apply_sddm_12h_format "/usr/share/sddm/themes/simple-sddm" "$log" + apply_sddm_12h_format "/usr/share/sddm/themes/simple_sddm_2" "$log" + apply_sddm_12h_format_sequoia "/usr/share/sddm/themes/sequoia_2" "$log" + else + echo "${NOTE:-[NOTE]} Express mode: skipping SDDM 12H edits to avoid sudo prompts." 2>&1 | tee -a "$log" + fi echo "${OK} 12H format set on waybar clocks succesfully." 2>&1 | tee -a "$log" return elif [[ "$answer" == "n" ]]; then -- cgit v1.2.3 From 3392c883f24c62e011775fa41c2cfc93086bfd7d Mon Sep 17 00:00:00 2001 From: Don Williams Date: Sun, 11 Jan 2026 02:59:35 -0500 Subject: Still working on prompts code On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: scripts/lib_prompts.sh --- scripts/lib_prompts.sh | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/scripts/lib_prompts.sh b/scripts/lib_prompts.sh index c79c9da6..a63afde3 100644 --- a/scripts/lib_prompts.sh +++ b/scripts/lib_prompts.sh @@ -214,8 +214,11 @@ prompt_rainbow_borders() { local log="$1" echo "${NOTE} ${SKY_BLUE}By default, Rainbow Borders animation is enabled" echo "${WARN} However, this uses a bit more CPU and Memory resources." - echo -n "${CAT} Do you want to disable Rainbow Borders animation? (y/N): " - read border_choice + if ! read -r -p "${CAT} Do you want to disable Rainbow Borders animation? (y/N): " border_choice &1 | tee -a "$log" + echo "kept" + return + fi if [[ "$border_choice" =~ ^[Yy]$ ]]; then mv config/hypr/UserScripts/RainbowBorders.sh config/hypr/UserScripts/RainbowBorders.bak.sh sed -i '/exec-once = \$UserScripts\/RainbowBorders.sh/s/^/#/' config/hypr/configs/Startup_Apps.conf @@ -243,8 +246,10 @@ prompt_express_upgrade() { else while true; do echo "${NOTE} Express mode skips config restore prompts, SDDM/background questions, and trims old backups." - echo -n "${CAT} Do you want to continue with EXPRESS upgrade mode? (y/N): " - read express_choice + if ! read -r -p "${CAT} Do you want to continue with EXPRESS upgrade mode? (y/N): " express_choice &1 | tee -a "$log" + break + fi case "$express_choice" in [Yy]) EXPRESS_MODE=1 -- cgit v1.2.3 From 997a522e5aca800392c93c42446991bd46a76a0d Mon Sep 17 00:00:00 2001 From: Don Williams Date: Sun, 11 Jan 2026 03:17:29 -0500 Subject: created next modules for apps, editr,bt,rog,rog,ags,qs Phase 4 moving apps to its own module On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: copy.sh new file: scripts/lib_apps.sh --- copy.sh | 100 ++++++++++------------------------------------------ scripts/lib_apps.sh | 87 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 105 insertions(+), 82 deletions(-) create mode 100644 scripts/lib_apps.sh diff --git a/copy.sh b/copy.sh index 5275eeb5..11a6223b 100755 --- a/copy.sh +++ b/copy.sh @@ -5,7 +5,7 @@ # Handles interactive prompts, backups/restores, per-app tweaks, and express mode. # # Layout (high-level; future modularization targets): -# - Constants/colors, helper sourcing (copy_menu.sh, lib_backup.sh, lib_detect.sh, lib_prompts.sh). +# - Constants/colors, helper sourcing (copy_menu.sh, lib_backup.sh, lib_detect.sh, lib_prompts.sh, lib_apps.sh). # - Version helpers and CLI parsing (install/upgrade/express). # - Safety checks (non-root), banners/notices. # - Environment/distro checks and warnings. @@ -13,6 +13,7 @@ # - Input prompts (keyboard, resolution, clock format, animations) (lib_prompts.sh). # - Workflow selection effects (express vs standard). # - Backup/restore helpers (in scripts/lib_backup.sh). +# - App enablement/editor selection (lib_apps.sh). # - Copy phases: # * Part 1: fastfetch/kitty/rofi/swaync (prompted replace). # * Waybar special handling (symlinks, configs/styles restore). @@ -24,8 +25,8 @@ # - Final symlinks (waybar) and wallust init. # # Next modular step: -# Extract per-app installers (ags/quickshell/ghostty/wezterm) and editor selection -# into scripts/lib_apps.sh; then consider splitting copy phases into dedicated helpers. +# Split copy phases into dedicated helpers (phase1, waybar, phase2) and consider +# moving ghostty/wezterm install logic into lib_apps.sh. clear wallpaper=$HOME/.config/hypr/wallpaper_effects/.wallpaper_current @@ -54,6 +55,7 @@ MENU_HELPER="$SCRIPT_DIR/scripts/copy_menu.sh" BACKUP_HELPER="$SCRIPT_DIR/scripts/lib_backup.sh" DETECT_HELPER="$SCRIPT_DIR/scripts/lib_detect.sh" PROMPTS_HELPER="$SCRIPT_DIR/scripts/lib_prompts.sh" +APPS_HELPER="$SCRIPT_DIR/scripts/lib_apps.sh" if [ -f "$MENU_HELPER" ]; then # shellcheck source=./scripts/copy_menu.sh . "$MENU_HELPER" @@ -79,6 +81,13 @@ else echo "${ERROR} Prompts helper not found at $PROMPTS_HELPER. Exiting." exit 1 fi +if [ -f "$APPS_HELPER" ]; then + # shellcheck source=./scripts/lib_apps.sh + . "$APPS_HELPER" +else + echo "${ERROR} Apps helper not found at $APPS_HELPER. Exiting." + exit 1 +fi version_gte() { [ "$1" = "$(echo -e "$1\n$2" | sort -V | tail -n1)" ] @@ -278,88 +287,15 @@ printf "\n%.0s" {1..1} layout=$(prompt_detect_layout) prompt_keyboard_layout "$layout" "$LOG" -# Check if asusctl is installed and add rog-control-center on Startup -if command -v asusctl >/dev/null 2>&1; then - OVERLAY_SA="config/hypr/configs/Startup_Apps.conf" - mkdir -p "$(dirname "$OVERLAY_SA")" - touch "$OVERLAY_SA" - grep -qx 'exec-once = rog-control-center' "$OVERLAY_SA" || echo 'exec-once = rog-control-center' >>"$OVERLAY_SA" -fi - -# Check if blueman-applet is installed and add blueman-applet on Startup -if command -v blueman-applet >/dev/null 2>&1; then - OVERLAY_SA="config/hypr/configs/Startup_Apps.conf" - mkdir -p "$(dirname "$OVERLAY_SA")" - touch "$OVERLAY_SA" - grep -qx 'exec-once = blueman-applet' "$OVERLAY_SA" || echo 'exec-once = blueman-applet' >>"$OVERLAY_SA" -fi - -# Check if ags is installed and enable it -if command -v ags >/dev/null 2>&1; then - echo "${INFO} AGS detected - enabling in startup and refresh scripts" 2>&1 | tee -a "$LOG" - OVERLAY_SA="config/hypr/configs/Startup_Apps.conf" - mkdir -p "$(dirname "$OVERLAY_SA")" - touch "$OVERLAY_SA" - grep -qx 'exec-once = ags' "$OVERLAY_SA" || echo 'exec-once = ags' >>"$OVERLAY_SA" - sed -i '/#ags -q && ags &/s/^#//' config/hypr/scripts/RefreshNoWaybar.sh - sed -i '/#ags -q && ags &/s/^#//' config/hypr/scripts/Refresh.sh -fi - -# Check if quickshell is installed and enable it -if command -v qs >/dev/null 2>&1; then - echo "${INFO} Quickshell detected - enabling in startup and refresh scripts" 2>&1 | tee -a "$LOG" - OVERLAY_SA="config/hypr/configs/Startup_Apps.conf" - mkdir -p "$(dirname "$OVERLAY_SA")" - touch "$OVERLAY_SA" - grep -qx 'exec-once = qs' "$OVERLAY_SA" || echo 'exec-once = qs' >>"$OVERLAY_SA" - sed -i '/#pkill qs && qs &/s/^#//' config/hypr/scripts/RefreshNoWaybar.sh - sed -i '/#pkill qs && qs &/s/^#//' config/hypr/scripts/Refresh.sh -fi - -# Ensure layout-aware keybinds init runs on startup (adds to user overlay so it survives composes) -OVERLAY_SA="config/hypr/configs/Startup_Apps.conf" -mkdir -p "$(dirname "$OVERLAY_SA")" -if ! grep -qx 'exec-once = \$scriptsDir/KeybindsLayoutInit.sh' "$OVERLAY_SA"; then - echo 'exec-once = $scriptsDir/KeybindsLayoutInit.sh' >>"$OVERLAY_SA" - echo "${INFO} Added KeybindsLayoutInit.sh to user Startup_Apps overlay" 2>&1 | tee -a "$LOG" -fi +enable_asusctl "$LOG" +enable_blueman "$LOG" +enable_ags "$LOG" +enable_quickshell "$LOG" +ensure_keybinds_init "$LOG" printf "\n%.0s" {1..1} -# Checking if neovim or vim is installed and offer user if they want to make as default editor -# Function to modify the ENVariables.conf file -update_editor() { - local editor=$1 - sed -i "s/#env = EDITOR,.*/env = EDITOR,$editor #default editor/" config/hypr/UserConfigs/01-UserDefaults.conf - echo "${OK} Default editor set to ${MAGENTA}$editor${RESET}." 2>&1 | tee -a "$LOG" -} - -EDITOR_SET=0 -# Check for neovim if installed -if command -v nvim &>/dev/null; then - printf "${INFO} ${MAGENTA}neovim${RESET} is detected as installed\n" - echo -n "${CAT} Do you want to make ${MAGENTA}neovim${RESET} the default editor? (y/N): " - read EDITOR_CHOICE - if [[ "$EDITOR_CHOICE" == "y" || "$EDITOR_CHOICE" == "Y" ]]; then - update_editor "nvim" - EDITOR_SET=1 - fi -fi - -printf "\n" - -# Check for vim if installed, but only if neovim wasn't chosen -if [[ "$EDITOR_SET" -eq 0 ]] && command -v vim &>/dev/null; then - printf "${INFO} ${MAGENTA}vim${RESET} is detected as installed\n" - echo -n "${CAT} Do you want to make ${MAGENTA}vim${RESET} the default editor? (y/N): " - read EDITOR_CHOICE - if [[ "$EDITOR_CHOICE" == "y" || "$EDITOR_CHOICE" == "Y" ]]; then - update_editor "vim" - EDITOR_SET=1 - fi -fi - -printf "\n" +choose_default_editor "$LOG" resolution="" while true; do echo "${INFO} Select monitor resolution for scaling:" diff --git a/scripts/lib_apps.sh b/scripts/lib_apps.sh new file mode 100644 index 00000000..a1ee2fe5 --- /dev/null +++ b/scripts/lib_apps.sh @@ -0,0 +1,87 @@ +#!/usr/bin/env bash +# App enablement and editor selection helpers. + +enable_asusctl() { + local log="$1" + if command -v asusctl >/dev/null 2>&1; then + local OVERLAY_SA="config/hypr/configs/Startup_Apps.conf" + mkdir -p "$(dirname "$OVERLAY_SA")" + touch "$OVERLAY_SA" + grep -qx 'exec-once = rog-control-center' "$OVERLAY_SA" || echo 'exec-once = rog-control-center' >>"$OVERLAY_SA" + fi +} + +enable_blueman() { + local log="$1" + if command -v blueman-applet >/dev/null 2>&1; then + local OVERLAY_SA="config/hypr/configs/Startup_Apps.conf" + mkdir -p "$(dirname "$OVERLAY_SA")" + touch "$OVERLAY_SA" + grep -qx 'exec-once = blueman-applet' "$OVERLAY_SA" || echo 'exec-once = blueman-applet' >>"$OVERLAY_SA" + fi +} + +enable_ags() { + local log="$1" + if command -v ags >/dev/null 2>&1; then + echo "${INFO:-[INFO]} AGS detected - enabling in startup and refresh scripts" 2>&1 | tee -a "$log" + local OVERLAY_SA="config/hypr/configs/Startup_Apps.conf" + mkdir -p "$(dirname "$OVERLAY_SA")" + touch "$OVERLAY_SA" + grep -qx 'exec-once = ags' "$OVERLAY_SA" || echo 'exec-once = ags' >>"$OVERLAY_SA" + sed -i '/#ags -q && ags &/s/^#//' config/hypr/scripts/RefreshNoWaybar.sh + sed -i '/#ags -q && ags &/s/^#//' config/hypr/scripts/Refresh.sh + fi +} + +enable_quickshell() { + local log="$1" + if command -v qs >/dev/null 2>&1; then + echo "${INFO:-[INFO]} Quickshell detected - enabling in startup and refresh scripts" 2>&1 | tee -a "$log" + local OVERLAY_SA="config/hypr/configs/Startup_Apps.conf" + mkdir -p "$(dirname "$OVERLAY_SA")" + touch "$OVERLAY_SA" + grep -qx 'exec-once = qs' "$OVERLAY_SA" || echo 'exec-once = qs' >>"$OVERLAY_SA" + sed -i '/#pkill qs && qs &/s/^#//' config/hypr/scripts/RefreshNoWaybar.sh + sed -i '/#pkill qs && qs &/s/^#//' config/hypr/scripts/Refresh.sh + fi +} + +ensure_keybinds_init() { + local log="$1" + local OVERLAY_SA="config/hypr/configs/Startup_Apps.conf" + mkdir -p "$(dirname "$OVERLAY_SA")" + if ! grep -qx 'exec-once = \$scriptsDir/KeybindsLayoutInit.sh' "$OVERLAY_SA"; then + echo 'exec-once = $scriptsDir/KeybindsLayoutInit.sh' >>"$OVERLAY_SA" + echo "${INFO:-[INFO]} Added KeybindsLayoutInit.sh to user Startup_Apps overlay" 2>&1 | tee -a "$log" + fi +} + +choose_default_editor() { + local log="$1" + local editor_set=0 + update_editor() { + local editor=$1 + sed -i "s/#env = EDITOR,.*/env = EDITOR,$editor #default editor/" config/hypr/UserConfigs/01-UserDefaults.conf + echo "${OK:-[OK]} Default editor set to ${MAGENTA:-}$editor${RESET:-}." 2>&1 | tee -a "$log" + } + if command -v nvim &>/dev/null; then + printf "${INFO:-[INFO]} ${MAGENTA:-}neovim${RESET:-} is detected as installed\n" + if ! read -r -p "${CAT:-[ACTION]} Do you want to make ${MAGENTA:-}neovim${RESET:-} the default editor? (y/N): " EDITOR_CHOICE /dev/null; then + printf "${INFO:-[INFO]} ${MAGENTA:-}vim${RESET:-} is detected as installed\n" + if read -r -p "${CAT:-[ACTION]} Do you want to make ${MAGENTA:-}vim${RESET:-} the default editor? (y/N): " EDITOR_CHOICE Date: Sun, 11 Jan 2026 03:37:07 -0500 Subject: Created lib_copy phase1/2 waybar,fastfetch,kitty,rofi,swaync Also btop,cava, hypr,ghostty, wezterm On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: copy.sh new file: scripts/lib_copy.sh --- copy.sh | 257 ++++------------------------------------------------ scripts/lib_copy.sh | 141 ++++++++++++++++++++++++++++ 2 files changed, 157 insertions(+), 241 deletions(-) create mode 100644 scripts/lib_copy.sh diff --git a/copy.sh b/copy.sh index 11a6223b..8d143800 100755 --- a/copy.sh +++ b/copy.sh @@ -5,7 +5,7 @@ # Handles interactive prompts, backups/restores, per-app tweaks, and express mode. # # Layout (high-level; future modularization targets): -# - Constants/colors, helper sourcing (copy_menu.sh, lib_backup.sh, lib_detect.sh, lib_prompts.sh, lib_apps.sh). +# - Constants/colors, helper sourcing (copy_menu.sh, lib_backup.sh, lib_detect.sh, lib_prompts.sh, lib_apps.sh, lib_copy.sh). # - Version helpers and CLI parsing (install/upgrade/express). # - Safety checks (non-root), banners/notices. # - Environment/distro checks and warnings. @@ -14,19 +14,18 @@ # - Workflow selection effects (express vs standard). # - Backup/restore helpers (in scripts/lib_backup.sh). # - App enablement/editor selection (lib_apps.sh). -# - Copy phases: +# - Copy phases (lib_copy.sh): # * Part 1: fastfetch/kitty/rofi/swaync (prompted replace). # * Waybar special handling (symlinks, configs/styles restore). -# * Part 2: other configs (btop, cava, hypr, etc.). -# * App-specific installs (ghostty, wezterm, ags, quickshell). +# * Part 2: other configs (btop, cava, hypr, etc.) + ghostty/wezterm installs. # - UserConfigs/UserScripts and hypr file restores. # - Wallpaper handling (default + optional 1GB pack). # - Backup cleanup (auto in express). # - Final symlinks (waybar) and wallust init. # # Next modular step: -# Split copy phases into dedicated helpers (phase1, waybar, phase2) and consider -# moving ghostty/wezterm install logic into lib_apps.sh. +# Move ghostty/wezterm install logic into lib_apps.sh (optional) and consider +# breaking user restore logic into helpers for clarity. clear wallpaper=$HOME/.config/hypr/wallpaper_effects/.wallpaper_current @@ -56,6 +55,7 @@ BACKUP_HELPER="$SCRIPT_DIR/scripts/lib_backup.sh" DETECT_HELPER="$SCRIPT_DIR/scripts/lib_detect.sh" PROMPTS_HELPER="$SCRIPT_DIR/scripts/lib_prompts.sh" APPS_HELPER="$SCRIPT_DIR/scripts/lib_apps.sh" +COPY_HELPER="$SCRIPT_DIR/scripts/lib_copy.sh" if [ -f "$MENU_HELPER" ]; then # shellcheck source=./scripts/copy_menu.sh . "$MENU_HELPER" @@ -88,6 +88,13 @@ else echo "${ERROR} Apps helper not found at $APPS_HELPER. Exiting." exit 1 fi +if [ -f "$COPY_HELPER" ]; then + # shellcheck source=./scripts/lib_copy.sh + . "$COPY_HELPER" +else + echo "${ERROR} Copy helper not found at $COPY_HELPER. Exiting." + exit 1 +fi version_gte() { [ "$1" = "$(echo -e "$1\n$2" | sort -V | tail -n1)" ] @@ -346,244 +353,12 @@ if [ ! -d "$HOME/.config" ]; then fi printf "${INFO} - copying dotfiles ${SKY_BLUE}first${RESET} part\n" -# Config directories which will ask the user whether to replace or not -DIRS="fastfetch kitty rofi swaync" - -for DIR2 in $DIRS; do - DIRPATH="$HOME/.config/$DIR2" - - if [ -d "$DIRPATH" ]; then - while true; do - printf "\n${INFO} Found ${YELLOW}$DIR2${RESET} config found in ~/.config/\n" - echo -n "${CAT} Do you want to replace ${YELLOW}$DIR2${RESET} config? (y/n): " - read DIR1_CHOICE - - case "$DIR1_CHOICE" in - [Yy]*) - BACKUP_DIR=$(get_backup_dirname) - # Backup the existing directory - mv "$DIRPATH" "$DIRPATH-backup-$BACKUP_DIR" 2>&1 | tee -a "$LOG" - echo -e "${NOTE} - Backed up $DIR2 to $DIRPATH-backup-$BACKUP_DIR." 2>&1 | tee -a "$LOG" - - # Copy the new config - cp -r "config/$DIR2" "$HOME/.config/$DIR2" 2>&1 | tee -a "$LOG" - echo -e "${OK} - Replaced $DIR2 with new configuration." 2>&1 | tee -a "$LOG" - - # Restoring rofi themes directory unique themes - if [ "$DIR2" = "rofi" ]; then - if [ -d "$DIRPATH-backup-$BACKUP_DIR/themes" ]; then - for file in "$DIRPATH-backup-$BACKUP_DIR/themes"/*; do - [ -e "$file" ] || continue # Skip if no files are found - echo "Copying $file to $HOME/.config/rofi/themes/" >>"$LOG" - cp -n "$file" "$HOME/.config/rofi/themes/" >>"$LOG" 2>&1 - done || true - fi - - # restoring global 0-shared-fonts.rasi - if [ -f "$DIRPATH-backup-$BACKUP_DIR/0-shared-fonts.rasi" ]; then - echo "Restoring $DIRPATH-backup-$BACKUP_DIR/0-shared-fonts.rasi to $HOME/.config/rofi/" >>"$LOG" - cp "$DIRPATH-backup-$BACKUP_DIR/0-shared-fonts.rasi" "$HOME/.config/rofi/0-shared-fonts.rasi" >>"$LOG" 2>&1 - fi - - fi - - break - ;; - [Nn]*) - echo -e "${NOTE} - Skipping ${YELLOW}$DIR2${RESET}" 2>&1 | tee -a "$LOG" - break - ;; - *) - echo -e "${WARN} - Invalid choice. Please enter Y or N." - ;; - esac - done - else - # Copy new config if directory does not exist - cp -r "config/$DIR2" "$HOME/.config/$DIR2" 2>&1 | tee -a "$LOG" - echo -e "${OK} - Copy completed for ${YELLOW}$DIR2${RESET}" 2>&1 | tee -a "$LOG" - fi -done - +copy_phase1 "$LOG" printf "\n%.0s" {1..1} - -# for waybar special part since it contains symlink -DIRW="waybar" -DIRPATHw="$HOME/.config/$DIRW" -if [ -d "$DIRPATHw" ]; then - while true; do - echo -n "${CAT} Do you want to replace ${YELLOW}$DIRW${RESET} config? (y/n): " - read DIR1_CHOICE - - case "$DIR1_CHOICE" in - [Yy]*) - BACKUP_DIR=$(get_backup_dirname) - cp -r "$DIRPATHw" "$DIRPATHw-backup-$BACKUP_DIR" 2>&1 | tee -a "$LOG" - echo -e "${NOTE} - Backed up $DIRW to $DIRPATHw-backup-$BACKUP_DIR." 2>&1 | tee -a "$LOG" - - # Remove the old $DIRPATHw and copy the new one - rm -rf "$DIRPATHw" && cp -r "config/$DIRW" "$DIRPATHw" 2>&1 | tee -a "$LOG" - - # Step 1: Handle waybar symlinks - for file in "config" "style.css"; do - symlink="$DIRPATHw-backup-$BACKUP_DIR/$file" - target_file="$DIRPATHw/$file" - - if [ -L "$symlink" ]; then - symlink_target=$(readlink "$symlink") - if [ -f "$symlink_target" ]; then - rm -f "$target_file" && cp -f "$symlink_target" "$target_file" - echo -e "${NOTE} - Copied $file as a regular file." - else - echo -e "${WARN} - Symlink target for $file does not exist." - fi - fi - done - - # Step 2: Copy non-existing directories and files under waybar/configs - for dir in "$DIRPATHw-backup-$BACKUP_DIR/configs"/*; do - [ -e "$dir" ] || continue # Skip if no files are found - if [ -d "$dir" ]; then - target_dir="$HOME/.config/waybar/configs/$(basename "$dir")" - if [ ! -d "$target_dir" ]; then - echo "Copying directory $dir to $HOME/.config/waybar/configs/" >>"$LOG" - cp -r "$dir" "$HOME/.config/waybar/configs/" - else - echo "Directory $target_dir already exists. Skipping." >>"$LOG" - fi - fi - done - - for file in "$DIRPATHw-backup-$BACKUP_DIR/configs"/*; do - [ -e "$file" ] || continue - target_file="$HOME/.config/waybar/configs/$(basename "$file")" - if [ ! -e "$target_file" ]; then - echo "Copying $file to $HOME/.config/waybar/configs/" >>"$LOG" - cp "$file" "$HOME/.config/waybar/configs/" - else - echo "File $target_file already exists. Skipping." >>"$LOG" - fi - done || true - - # Step 3: Copy unique files in waybar/style - for file in "$DIRPATHw-backup-$BACKUP_DIR/style"/*; do - [ -e "$file" ] || continue - - if [ -d "$file" ]; then - target_dir="$HOME/.config/waybar/style/$(basename "$file")" - if [ ! -d "$target_dir" ]; then - echo "Copying directory $file to $HOME/.config/waybar/style/" >>"$LOG" - cp -r "$file" "$HOME/.config/waybar/style/" - else - echo "Directory $target_dir already exists. Skipping." >>"$LOG" - fi - else - target_file="$HOME/.config/waybar/style/$(basename "$file")" - if [ ! -e "$target_file" ]; then - echo "Copying file $file to $HOME/.config/waybar/style/" >>"$LOG" - cp "$file" "$HOME/.config/waybar/style/" - else - echo "File $target_file already exists. Skipping." >>"$LOG" - fi - fi - done || true - - # Step 4: restore Modules_Extras - BACKUP_FILEw="$DIRPATHw-backup-$BACKUP_DIR/UserModules" - if [ -f "$BACKUP_FILEw" ]; then - cp -f "$BACKUP_FILEw" "$DIRPATHw/UserModules" - fi - - break - ;; - [Nn]*) - echo -e "${NOTE} - Skipping ${YELLOW}$DIRW${RESET} config replacement." 2>&1 | tee -a "$LOG" - break - ;; - *) - echo -e "${WARN} - Invalid choice. Please enter Y or N." - ;; - esac - done -else - cp -r "config/$DIRW" "$DIRPATHw" 2>&1 | tee -a "$LOG" - echo -e "${OK} - Copy completed for ${YELLOW}$DIRW${RESET}" 2>&1 | tee -a "$LOG" -fi - +copy_waybar "$LOG" printf "\n%.0s" {1..1} - printf "${INFO} - Copying dotfiles ${SKY_BLUE}second${RESET} part\n" - -# Check if the config directory exists -if [ ! -d "config" ]; then - echo "${ERROR} - The 'config' directory does not exist." - exit 1 -fi - -DIR="btop cava hypr Kvantum qt5ct qt6ct swappy wallust wlogout" - -for DIR_NAME in $DIR; do - DIRPATH="$HOME/.config/$DIR_NAME" - - # Backup the existing directory if it exists - if [ -d "$DIRPATH" ]; then - echo -e "\n${NOTE} - Config for ${YELLOW}$DIR_NAME${RESET} found, attempting to back up." - BACKUP_DIR=$(get_backup_dirname) - - # Backup the existing directory - mv "$DIRPATH" "$DIRPATH-backup-$BACKUP_DIR" 2>&1 | tee -a "$LOG" - if [ $? -eq 0 ]; then - echo -e "${NOTE} - Backed up $DIR_NAME to $DIRPATH-backup-$BACKUP_DIR." - else - echo "${ERROR} - Failed to back up $DIR_NAME." - exit 1 - fi - fi - - # Copy the new config - if [ -d "config/$DIR_NAME" ]; then - cp -r "config/$DIR_NAME/" "$HOME/.config/$DIR_NAME" 2>&1 | tee -a "$LOG" - if [ $? -eq 0 ]; then - echo "${OK} - Copy of config for ${YELLOW}$DIR_NAME${RESET} completed!" - else - echo "${ERROR} - Failed to copy $DIR_NAME." - exit 1 - fi - else - echo "${ERROR} - Directory config/$DIR_NAME does not exist to copy." - fi -done - -# Install Ghostty config -GHOSTTY_SRC="config/ghostty/ghostty.config" -GHOSTTY_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/ghostty" -GHOSTTY_DEST="$GHOSTTY_DIR/config" - -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 - -# Install WezTerm config -WEZTERM_SRC="config/wezterm/wezterm.lua" -WEZTERM_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/wezterm" -WEZTERM_DEST="$WEZTERM_DIR/wezterm.lua" - -if [ -f "$WEZTERM_SRC" ]; then - mkdir -p "$WEZTERM_DIR" - install -m 0644 "$WEZTERM_SRC" "$WEZTERM_DEST" 2>&1 | tee -a "$LOG" - echo "${OK} - Installed WezTerm config to ${MAGENTA}$WEZTERM_DEST${RESET}" 2>&1 | tee -a "$LOG" -else - echo "${ERROR} - $WEZTERM_SRC not found; skipping WezTerm config install." 2>&1 | tee -a "$LOG" -fi - +copy_phase2 "$LOG" printf "\\n%.0s" {1..1} # ags config diff --git a/scripts/lib_copy.sh b/scripts/lib_copy.sh new file mode 100644 index 00000000..e449d668 --- /dev/null +++ b/scripts/lib_copy.sh @@ -0,0 +1,141 @@ +#!/usr/bin/env bash +# Copy helpers split into phases to keep copy.sh lean. + +copy_phase1() { + local log="$1" + local dirs="fastfetch kitty rofi swaync" + for DIR2 in $dirs; do + local DIRPATH="$HOME/.config/$DIR2" + if [ -d "$DIRPATH" ]; then + while true; do + printf "\n${INFO:-[INFO]} Found ${YELLOW:-}$DIR2${RESET:-} config found in ~/.config/\n" + echo -n "${CAT:-[ACTION]} Do you want to replace ${YELLOW:-}$DIR2${RESET:-} config? (y/n): " + read DIR1_CHOICE + case "$DIR1_CHOICE" in + [Yy]*) BACKUP_DIR=$(get_backup_dirname) + mv "$DIRPATH" "$DIRPATH-backup-$BACKUP_DIR" 2>&1 | tee -a "$log" + echo -e "${NOTE:-[NOTE]} - Backed up $DIR2 to $DIRPATH-backup-$BACKUP_DIR." 2>&1 | tee -a "$log" + cp -r "config/$DIR2" "$HOME/.config/$DIR2" 2>&1 | tee -a "$log" + echo -e "${OK:-[OK]} - Replaced $DIR2 with new configuration." 2>&1 | tee -a "$log" + if [ "$DIR2" = "rofi" ]; then + if [ -d "$DIRPATH-backup-$BACKUP_DIR/themes" ]; then + for file in "$DIRPATH-backup-$BACKUP_DIR/themes"/*; do + [ -e "$file" ] || continue + cp -n "$file" "$HOME/.config/rofi/themes/" >>"$log" 2>&1 || true + done || true + fi + if [ -f "$DIRPATH-backup-$BACKUP_DIR/0-shared-fonts.rasi" ]; then + cp "$DIRPATH-backup-$BACKUP_DIR/0-shared-fonts.rasi" "$HOME/.config/rofi/0-shared-fonts.rasi" >>"$log" 2>&1 + fi + fi + break ;; + [Nn]*) echo -e "${NOTE:-[NOTE]} - Skipping ${YELLOW:-}$DIR2${RESET:-}" 2>&1 | tee -a "$log"; break ;; + *) echo -e "${WARN:-[WARN]} - Invalid choice. Please enter Y or N." ;; + esac + done + else + cp -r "config/$DIR2" "$HOME/.config/$DIR2" 2>&1 | tee -a "$log" + echo -e "${OK:-[OK]} - Copy completed for ${YELLOW:-}$DIR2${RESET:-}" 2>&1 | tee -a "$log" + fi + done +} + +copy_waybar() { + local log="$1" + local DIRW="waybar" + local DIRPATHw="$HOME/.config/$DIRW" + if [ -d "$DIRPATHw" ]; then + while true; do + echo -n "${CAT:-[ACTION]} Do you want to replace ${YELLOW:-}$DIRW${RESET:-} config? (y/n): " + read DIR1_CHOICE + case "$DIR1_CHOICE" in + [Yy]*) BACKUP_DIR=$(get_backup_dirname) + cp -r "$DIRPATHw" "$DIRPATHw-backup-$BACKUP_DIR" 2>&1 | tee -a "$log" + echo -e "${NOTE:-[NOTE]} - Backed up $DIRW to $DIRPATHw-backup-$BACKUP_DIR." 2>&1 | tee -a "$log" + rm -rf "$DIRPATHw" && cp -r "config/$DIRW" "$DIRPATHw" 2>&1 | tee -a "$log" + for file in "config" "style.css"; do + symlink="$DIRPATHw-backup-$BACKUP_DIR/$file" + target_file="$DIRPATHw/$file" + if [ -L "$symlink" ]; then + symlink_target=$(readlink "$symlink") + if [ -f "$symlink_target" ]; then + rm -f "$target_file" && cp -f "$symlink_target" "$target_file" + fi + fi + done + for dir in "$DIRPATHw-backup-$BACKUP_DIR/configs"/*; do + [ -e "$dir" ] || continue + if [ -d "$dir" ]; then + target_dir="$HOME/.config/waybar/configs/$(basename "$dir")" + [ -d "$target_dir" ] || cp -r "$dir" "$HOME/.config/waybar/configs/" + fi + done + for file in "$DIRPATHw-backup-$BACKUP_DIR/configs"/*; do + [ -e "$file" ] || continue + target_file="$HOME/.config/waybar/configs/$(basename "$file")" + [ -e "$target_file" ] || cp "$file" "$HOME/.config/waybar/configs/" + done || true + for file in "$DIRPATHw-backup-$BACKUP_DIR/style"/*; do + [ -e "$file" ] || continue + if [ -d "$file" ]; then + target_dir="$HOME/.config/waybar/style/$(basename "$file")" + [ -d "$target_dir" ] || cp -r "$file" "$HOME/.config/waybar/style/" + else + target_file="$HOME/.config/waybar/style/$(basename "$file")" + [ -e "$target_file" ] || cp "$file" "$HOME/.config/waybar/style/" + fi + done || true + BACKUP_FILEw="$DIRPATHw-backup-$BACKUP_DIR/UserModules" + [ -f "$BACKUP_FILEw" ] && cp -f "$BACKUP_FILEw" "$DIRPATHw/UserModules" + break ;; + [Nn]*) echo -e "${NOTE:-[NOTE]} - Skipping ${YELLOW:-}$DIRW${RESET:-} config replacement." 2>&1 | tee -a "$log"; break ;; + *) echo -e "${WARN:-[WARN]} - Invalid choice. Please enter Y or N." ;; + esac + done + else + cp -r "config/$DIRW" "$DIRPATHw" 2>&1 | tee -a "$log" + echo -e "${OK:-[OK]} - Copy completed for ${YELLOW:-}$DIRW${RESET:-}" 2>&1 | tee -a "$log" + fi +} + +copy_phase2() { + local log="$1" + local DIR="btop cava hypr Kvantum qt5ct qt6ct swappy wallust wlogout" + for DIR_NAME in $DIR; do + local DIRPATH="$HOME/.config/$DIR_NAME" + if [ -d "$DIRPATH" ]; then + echo -e "\n${NOTE:-[NOTE]} - Config for ${YELLOW:-}$DIR_NAME${RESET:-} found, attempting to back up." + BACKUP_DIR=$(get_backup_dirname) + mv "$DIRPATH" "$DIRPATH-backup-$BACKUP_DIR" 2>&1 | tee -a "$log" + fi + if [ -d "config/$DIR_NAME" ]; then + cp -r "config/$DIR_NAME/" "$HOME/.config/$DIR_NAME" 2>&1 | tee -a "$log" + echo "${OK:-[OK]} - Copy of config for ${YELLOW:-}$DIR_NAME${RESET:-} completed!" 2>&1 | tee -a "$log" + else + echo "${ERROR:-[ERROR]} - Directory config/$DIR_NAME does not exist to copy." 2>&1 | tee -a "$log" + fi + done + # Ghostty + local GHOSTTY_SRC="config/ghostty/ghostty.config" + local GHOSTTY_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/ghostty" + local GHOSTTY_DEST="$GHOSTTY_DIR/config" + if [ -f "$GHOSTTY_SRC" ]; then + mkdir -p "$GHOSTTY_DIR" + install -m 0644 "$GHOSTTY_SRC" "$GHOSTTY_DEST" 2>&1 | tee -a "$log" + 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:-[ERROR]} - $GHOSTTY_SRC not found; skipping Ghostty config install." 2>&1 | tee -a "$log" + fi + # WezTerm + local WEZTERM_SRC="config/wezterm/wezterm.lua" + local WEZTERM_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/wezterm" + local WEZTERM_DEST="$WEZTERM_DIR/wezterm.lua" + if [ -f "$WEZTERM_SRC" ]; then + mkdir -p "$WEZTERM_DIR" + install -m 0644 "$WEZTERM_SRC" "$WEZTERM_DEST" 2>&1 | tee -a "$log" + else + echo "${ERROR:-[ERROR]} - $WEZTERM_SRC not found; skipping WezTerm config install." 2>&1 | tee -a "$log" + fi +} -- cgit v1.2.3 From 842a0b42c21e9f4fd6b8aed34a7829784563ecfe Mon Sep 17 00:00:00 2001 From: Ahum Maitra Date: Sun, 11 Jan 2026 23:10:19 +0530 Subject: enhancement: Improved ML4W glass theme for waybar (#919) Fixed margin/paddings issues. Thank you --- config/waybar/style/ML4W Glass.css | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/config/waybar/style/ML4W Glass.css b/config/waybar/style/ML4W Glass.css index 066eb7fc..9b2b77c1 100644 --- a/config/waybar/style/ML4W Glass.css +++ b/config/waybar/style/ML4W Glass.css @@ -1,4 +1,4 @@ -/* ML4W GLASS THEME - CRYSTAL CLEAR */ +/* ML4W GLASS THEME */ /* SPDX-FileCopyrightText: 2026-present Ahum Maitra theahummaitra@gmail.com SPDX-License-Identifier: GPL-3.0-or-later */ @@ -21,6 +21,8 @@ General /* set font-size to 100% if font scaling is set to 1.00 using nwg-look */ font-size: 97%; font-feature-settings: '"zero", "ss01", "ss02", "ss03", "ss04", "ss05", "cv31"'; + margin-top: 3px; + padding-bottom: 2px; } @import "style/ML4W/glass.css"; -- cgit v1.2.3 From d1b2375085e31e99b10b582dd2cc5b89412b9d76 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Sun, 11 Jan 2026 13:52:00 -0500 Subject: Fixing glass waybar spacing --- config/waybar/style/ML4W Glass.css | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/config/waybar/style/ML4W Glass.css b/config/waybar/style/ML4W Glass.css index 9b2b77c1..397613a6 100644 --- a/config/waybar/style/ML4W Glass.css +++ b/config/waybar/style/ML4W Glass.css @@ -171,12 +171,21 @@ tooltip label { #window { background-color: transparent; + /* Override global margin/padding so the window pill hugs the bar edges */ + margin: 0; + padding: 0; } window#waybar.empty #window { background-color: transparent; } +/* Tighter content padding specifically for the window title */ +#window label { + margin: 0; + padding: 4px 10px; +} + /* ----------------------------------------------------- * Taskbar * ----------------------------------------------------- */ -- cgit v1.2.3 From 8eb838792b4372b385c919055c3ff30c7aca61dc Mon Sep 17 00:00:00 2001 From: Don Williams Date: Sun, 11 Jan 2026 13:57:13 -0500 Subject: ML4W glass has fixed colors which breaks themeing --- config/waybar/style/ML4W Glass.css | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/config/waybar/style/ML4W Glass.css b/config/waybar/style/ML4W Glass.css index 397613a6..ae65903c 100644 --- a/config/waybar/style/ML4W Glass.css +++ b/config/waybar/style/ML4W Glass.css @@ -26,6 +26,12 @@ General } @import "style/ML4W/glass.css"; +/* Override ML4W defaults so wallust doesn't force a red accent. + * Using neutral background-derived tones keeps the bar aligned with current palette. */ +@define-color surface @background-alt; +@define-color surface_dim @background; +@define-color primary @foreground; +@define-color on_primary @background; window#waybar { background: transparent; -- cgit v1.2.3 From bacd7b5b9f9000cb9cdea12e3bde5fe7b1771428 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Sun, 11 Jan 2026 14:07:10 -0500 Subject: ML4W accent variables changed to wallust colors --- config/waybar/style/ML4W Glass.css | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/config/waybar/style/ML4W Glass.css b/config/waybar/style/ML4W Glass.css index ae65903c..dd8f9ec2 100644 --- a/config/waybar/style/ML4W Glass.css +++ b/config/waybar/style/ML4W Glass.css @@ -27,11 +27,19 @@ General @import "style/ML4W/glass.css"; /* Override ML4W defaults so wallust doesn't force a red accent. - * Using neutral background-derived tones keeps the bar aligned with current palette. */ + * Use current palette values from wallust instead of fixed reds. */ @define-color surface @background-alt; @define-color surface_dim @background; -@define-color primary @foreground; -@define-color on_primary @background; +@define-color primary @color4; +@define-color on_primary @color15; +@define-color on_primary_fixed @color15; +@define-color on_primary_fixed_variant @color6; +@define-color secondary @color6; +@define-color on_secondary @color15; +@define-color on_tertiary_fixed @color15; +@define-color on_tertiary_fixed_variant @color5; +@define-color error @color1; +@define-color on_error @color15; window#waybar { background: transparent; -- cgit v1.2.3 From 45953d8f8b92d5563d6b90c9ae2eaff08b635cb4 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Sun, 11 Jan 2026 14:09:50 -0500 Subject: More color map tweaking --- config/waybar/style/ML4W Glass.css | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/config/waybar/style/ML4W Glass.css b/config/waybar/style/ML4W Glass.css index dd8f9ec2..b2266a28 100644 --- a/config/waybar/style/ML4W Glass.css +++ b/config/waybar/style/ML4W Glass.css @@ -26,19 +26,18 @@ General } @import "style/ML4W/glass.css"; -/* Override ML4W defaults so wallust doesn't force a red accent. - * Use current palette values from wallust instead of fixed reds. */ -@define-color surface @background-alt; -@define-color surface_dim @background; -@define-color primary @color4; +/* Override ML4W defaults to a cooler wallust-derived accent (avoid harsh reds). */ +@define-color surface @color9; +@define-color surface_dim @color1; +@define-color primary @color6; /* cooler accent */ @define-color on_primary @color15; @define-color on_primary_fixed @color15; @define-color on_primary_fixed_variant @color6; -@define-color secondary @color6; +@define-color secondary @color4; @define-color on_secondary @color15; @define-color on_tertiary_fixed @color15; -@define-color on_tertiary_fixed_variant @color5; -@define-color error @color1; +@define-color on_tertiary_fixed_variant @color10; +@define-color error @color3; @define-color on_error @color15; window#waybar { -- cgit v1.2.3 From 7f1e614f6653abdd0ea3d0c6fcab09d32dd11edf Mon Sep 17 00:00:00 2001 From: Don Williams Date: Sun, 11 Jan 2026 14:12:05 -0500 Subject: I made it worse removing custom accent colors --- config/waybar/style/ML4W Glass.css | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/config/waybar/style/ML4W Glass.css b/config/waybar/style/ML4W Glass.css index b2266a28..397613a6 100644 --- a/config/waybar/style/ML4W Glass.css +++ b/config/waybar/style/ML4W Glass.css @@ -26,19 +26,6 @@ General } @import "style/ML4W/glass.css"; -/* Override ML4W defaults to a cooler wallust-derived accent (avoid harsh reds). */ -@define-color surface @color9; -@define-color surface_dim @color1; -@define-color primary @color6; /* cooler accent */ -@define-color on_primary @color15; -@define-color on_primary_fixed @color15; -@define-color on_primary_fixed_variant @color6; -@define-color secondary @color4; -@define-color on_secondary @color15; -@define-color on_tertiary_fixed @color15; -@define-color on_tertiary_fixed_variant @color10; -@define-color error @color3; -@define-color on_error @color15; window#waybar { background: transparent; -- cgit v1.2.3 From 4ab8a911301b3caf53d8b8c6824b317c653f6d07 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Sun, 11 Jan 2026 14:14:33 -0500 Subject: Restored gradient tryin fix color w/theme --- config/waybar/style/ML4W Glass.css | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/config/waybar/style/ML4W Glass.css b/config/waybar/style/ML4W Glass.css index 397613a6..0cfcf14e 100644 --- a/config/waybar/style/ML4W Glass.css +++ b/config/waybar/style/ML4W Glass.css @@ -26,6 +26,19 @@ General } @import "style/ML4W/glass.css"; +/* Soft-neutral override: keeps glass gradients but avoids red-dominant palettes */ +@define-color surface @background-alt; +@define-color surface_dim @background; +@define-color primary @foreground; +@define-color on_primary @background; +@define-color on_primary_fixed @background; +@define-color on_primary_fixed_variant @foreground; +@define-color secondary @foreground; +@define-color on_secondary @background; +@define-color on_tertiary_fixed @background; +@define-color on_tertiary_fixed_variant @foreground; +@define-color error @foreground; +@define-color on_error @background; window#waybar { background: transparent; -- cgit v1.2.3 From 1c9648ff60124ca51c7ce5f4ed6f0e2ce44e5cbc Mon Sep 17 00:00:00 2001 From: Don Williams Date: Sun, 11 Jan 2026 14:29:29 -0500 Subject: Trying prim wallust color as accent on ML4W glass --- config/waybar/style/ML4W Glass.css | 3 +++ 1 file changed, 3 insertions(+) diff --git a/config/waybar/style/ML4W Glass.css b/config/waybar/style/ML4W Glass.css index 0cfcf14e..5d8e589e 100644 --- a/config/waybar/style/ML4W Glass.css +++ b/config/waybar/style/ML4W Glass.css @@ -39,9 +39,12 @@ General @define-color on_tertiary_fixed_variant @foreground; @define-color error @foreground; @define-color on_error @background; +@define-color accent @color12; /* wallust primary for subtle highlights */ window#waybar { background: transparent; + box-shadow: + inset 0 -2px 0 alpha(@accent, 0.35); /* soft accent strip on bottom edge */ } .modules-left { -- cgit v1.2.3 From 3cc5046b74f3d438e4ab297ef7c2591faffa8880 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Sun, 11 Jan 2026 14:33:50 -0500 Subject: Accent didn't work trying something else (I love CSS. NOT) --- config/waybar/style/ML4W Glass.css | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/config/waybar/style/ML4W Glass.css b/config/waybar/style/ML4W Glass.css index 5d8e589e..c798acc6 100644 --- a/config/waybar/style/ML4W Glass.css +++ b/config/waybar/style/ML4W Glass.css @@ -43,8 +43,13 @@ General window#waybar { background: transparent; + background-image: + linear-gradient(to bottom, + alpha(@surface, 0.85) 0%, + alpha(@surface_dim, 0.85) 65%, + alpha(@accent, 0.28) 100%); box-shadow: - inset 0 -2px 0 alpha(@accent, 0.35); /* soft accent strip on bottom edge */ + inset 0 -3px 0 alpha(@accent, 0.6); /* visible accent strip on bottom edge */ } .modules-left { @@ -147,14 +152,15 @@ label.module:hover { } #workspaces button.active { - background: alpha(@primary, 0.2); + background: alpha(@accent, 0.20); border: 1px solid transparent; transition: all 0.3s ease-in-out; min-width: 30px; border-radius: 8px; box-shadow: - inset 1px 2px 2px rgba(255, 255, 255, 0.5), - inset 0 1px 1px rgba(255, 255, 255, 0.8); + inset 0 -3px 0 alpha(@accent, 0.8), + inset 1px 2px 2px rgba(255, 255, 255, 0.45), + inset 0 1px 1px rgba(255, 255, 255, 0.7); } #workspaces button:hover { -- cgit v1.2.3 From c6a372c3ae70eeee2ad3c413bb8a60264d0be904 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Sun, 11 Jan 2026 14:39:05 -0500 Subject: Fixing line under waybar, hope doesn't break other fixes --- config/waybar/style/ML4W Glass.css | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/config/waybar/style/ML4W Glass.css b/config/waybar/style/ML4W Glass.css index c798acc6..2a6893e3 100644 --- a/config/waybar/style/ML4W Glass.css +++ b/config/waybar/style/ML4W Glass.css @@ -43,11 +43,8 @@ General window#waybar { background: transparent; - background-image: - linear-gradient(to bottom, - alpha(@surface, 0.85) 0%, - alpha(@surface_dim, 0.85) 65%, - alpha(@accent, 0.28) 100%); + border: 0; + outline: none; box-shadow: inset 0 -3px 0 alpha(@accent, 0.6); /* visible accent strip on bottom edge */ } -- cgit v1.2.3 From 412c51cde3f167822a7245715bea6b0bb208c332 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Sun, 11 Jan 2026 14:41:10 -0500 Subject: Trying to remove line under waybar #2 --- config/waybar/style/ML4W Glass.css | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/config/waybar/style/ML4W Glass.css b/config/waybar/style/ML4W Glass.css index 2a6893e3..ba4f99c6 100644 --- a/config/waybar/style/ML4W Glass.css +++ b/config/waybar/style/ML4W Glass.css @@ -45,8 +45,6 @@ window#waybar { background: transparent; border: 0; outline: none; - box-shadow: - inset 0 -3px 0 alpha(@accent, 0.6); /* visible accent strip on bottom edge */ } .modules-left { @@ -64,7 +62,10 @@ window#waybar { opacity: 0.8; padding: 0px; margin: 10px; - box-shadow: inset 1px 2px 2px rgba(255, 255, 255, 0.2); + box-shadow: + inset 0 -2px 0 alpha(@accent, 0.45), + inset 1px 2px 2px rgba(255, 255, 255, 0.3); + inset 1px 2px 2px rgba(255, 255, 255, 0.2); } .modules-right { @@ -99,7 +100,9 @@ window#waybar { border: 1px solid transparent; opacity: 0.8; margin: 10px; - box-shadow: inset 0px 2px 2px rgba(255, 255, 255, 0.2); + box-shadow: + inset 0 -2px 0 alpha(@accent, 0.45), + inset 0px 2px 2px rgba(255, 255, 255, 0.2); } label.module { -- cgit v1.2.3 From 33ac2be5d1ae7fe3f245f67c68a99a5326f2406c Mon Sep 17 00:00:00 2001 From: Don Williams Date: Sun, 11 Jan 2026 14:43:50 -0500 Subject: Broke waybar, fixing --- config/waybar/style/ML4W Glass.css | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/config/waybar/style/ML4W Glass.css b/config/waybar/style/ML4W Glass.css index ba4f99c6..bba95214 100644 --- a/config/waybar/style/ML4W Glass.css +++ b/config/waybar/style/ML4W Glass.css @@ -64,8 +64,7 @@ window#waybar { margin: 10px; box-shadow: inset 0 -2px 0 alpha(@accent, 0.45), - inset 1px 2px 2px rgba(255, 255, 255, 0.3); - inset 1px 2px 2px rgba(255, 255, 255, 0.2); + inset 1px 2px 2px rgba(255, 255, 255, 0.2); } .modules-right { @@ -83,7 +82,9 @@ window#waybar { opacity: 0.8; padding: 0px; margin: 10px; - box-shadow: inset 1px 2px 2px rgba(255, 255, 255, 0.3); + box-shadow: + inset 0 -2px 0 alpha(@accent, 0.45), + inset 1px 2px 2px rgba(255, 255, 255, 0.3); } .modules-center { -- cgit v1.2.3 From 2a5901251bd19bcb11174338e57749b3b338dd21 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Sun, 11 Jan 2026 15:28:48 -0500 Subject: Update CHANGELOG --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 05f1e788..5e50670c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,15 @@ ## v2.3.19 +- 2026-01-11 + - Improved `ML4W Glass` theme + - Now has proper 3d gradient look + - Theme based nightlight color + - `copy.sh` is now more modular + - Helper scripts in `scripts` dir per function + - Making `copy.sh` smaller (1200 lines to 800 so far) + - Easier to maintain going forward + - 2026-01-09 - Fixed: Keybind parser latency - Changed the parsing login to python instead of bash -- 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 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 a8415be54a1cbb194a8fd915e570681f13cdce92 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Sun, 11 Jan 2026 20:01:40 -0500 Subject: Moved ghostty/wezterm config file process out of copy.sh On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: copy.sh modified: scripts/lib_apps.sh modified: scripts/lib_copy.sh --- copy.sh | 2 +- scripts/lib_apps.sh | 29 +++++++++++++++++++++++++++++ scripts/lib_copy.sh | 24 +----------------------- 3 files changed, 31 insertions(+), 24 deletions(-) diff --git a/copy.sh b/copy.sh index 8d143800..398f72d0 100755 --- a/copy.sh +++ b/copy.sh @@ -24,7 +24,7 @@ # - Final symlinks (waybar) and wallust init. # # Next modular step: -# Move ghostty/wezterm install logic into lib_apps.sh (optional) and consider +# Ghostty/WezTerm install logic lives in lib_apps.sh now; consider # breaking user restore logic into helpers for clarity. clear diff --git a/scripts/lib_apps.sh b/scripts/lib_apps.sh index a1ee2fe5..562e5c5b 100644 --- a/scripts/lib_apps.sh +++ b/scripts/lib_apps.sh @@ -57,6 +57,35 @@ ensure_keybinds_init() { fi } +install_terminal_configs() { + local log="$1" + + # Ghostty + local GHOSTTY_SRC="config/ghostty/ghostty.config" + local GHOSTTY_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/ghostty" + local GHOSTTY_DEST="$GHOSTTY_DIR/config" + if [ -f "$GHOSTTY_SRC" ]; then + mkdir -p "$GHOSTTY_DIR" + install -m 0644 "$GHOSTTY_SRC" "$GHOSTTY_DEST" 2>&1 | tee -a "$log" + 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:-[ERROR]} - $GHOSTTY_SRC not found; skipping Ghostty config install." 2>&1 | tee -a "$log" + fi + + # WezTerm + local WEZTERM_SRC="config/wezterm/wezterm.lua" + local WEZTERM_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/wezterm" + local WEZTERM_DEST="$WEZTERM_DIR/wezterm.lua" + if [ -f "$WEZTERM_SRC" ]; then + mkdir -p "$WEZTERM_DIR" + install -m 0644 "$WEZTERM_SRC" "$WEZTERM_DEST" 2>&1 | tee -a "$log" + else + echo "${ERROR:-[ERROR]} - $WEZTERM_SRC not found; skipping WezTerm config install." 2>&1 | tee -a "$log" + fi +} + choose_default_editor() { local log="$1" local editor_set=0 diff --git a/scripts/lib_copy.sh b/scripts/lib_copy.sh index e449d668..7d76cfc4 100644 --- a/scripts/lib_copy.sh +++ b/scripts/lib_copy.sh @@ -115,27 +115,5 @@ copy_phase2() { echo "${ERROR:-[ERROR]} - Directory config/$DIR_NAME does not exist to copy." 2>&1 | tee -a "$log" fi done - # Ghostty - local GHOSTTY_SRC="config/ghostty/ghostty.config" - local GHOSTTY_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/ghostty" - local GHOSTTY_DEST="$GHOSTTY_DIR/config" - if [ -f "$GHOSTTY_SRC" ]; then - mkdir -p "$GHOSTTY_DIR" - install -m 0644 "$GHOSTTY_SRC" "$GHOSTTY_DEST" 2>&1 | tee -a "$log" - 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:-[ERROR]} - $GHOSTTY_SRC not found; skipping Ghostty config install." 2>&1 | tee -a "$log" - fi - # WezTerm - local WEZTERM_SRC="config/wezterm/wezterm.lua" - local WEZTERM_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/wezterm" - local WEZTERM_DEST="$WEZTERM_DIR/wezterm.lua" - if [ -f "$WEZTERM_SRC" ]; then - mkdir -p "$WEZTERM_DIR" - install -m 0644 "$WEZTERM_SRC" "$WEZTERM_DEST" 2>&1 | tee -a "$log" - else - echo "${ERROR:-[ERROR]} - $WEZTERM_SRC not found; skipping WezTerm config install." 2>&1 | tee -a "$log" - fi + install_terminal_configs "$log" } -- cgit v1.2.3 From 41de1f75fe689fe9fa2249dfff11dd66b5aae4e6 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Sun, 11 Jan 2026 20:10:32 -0500 Subject: Adding Spanish Translations of common files On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: README.md Untracked files: CODE_OF_CONDUCT.es.md COMMIT_MESSAGE_GUIDELINES.es.md CONTRIBUTING.es.md --- README.md | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index dd347e28..f7926cd6 100644 --- a/README.md +++ b/README.md @@ -14,12 +14,12 @@
@@ -245,3 +245,8 @@ Or you can donate cryto on my btc wallet :) ## 🫰 Thank you for the stars 🩷 [![Stargazers over time](https://starchart.cc/JaKooLit/Hyprland-Dots.svg?variant=adaptive)](https://starchart.cc/JaKooLit/Hyprland-Dots) + + +### Document translations + +- Spanish: [CΓ³digo de Conducta](./CODE_OF_CONDUCT.es.md) Β· [GuΓ­a de mensajes de commit](./COMMIT_MESSAGE_GUIDELINES.es.md) Β· [GuΓ­a de contribuciΓ³n](./CONTRIBUTING.es.md) -- cgit v1.2.3 From 050121695a344e95ac4181e079c45e898c3dcda6 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Sun, 11 Jan 2026 20:13:49 -0500 Subject: Adding translated files On branch development Your branch is up to date with 'origin/development'. Changes to be committed: new file: CODE_OF_CONDUCT.es.md new file: COMMIT_MESSAGE_GUIDELINES.es.md new file: CONTRIBUTING.es.md --- CODE_OF_CONDUCT.es.md | 81 ++++++++++++++++++++++ COMMIT_MESSAGE_GUIDELINES.es.md | 148 ++++++++++++++++++++++++++++++++++++++++ CONTRIBUTING.es.md | 69 +++++++++++++++++++ 3 files changed, 298 insertions(+) create mode 100644 CODE_OF_CONDUCT.es.md create mode 100644 COMMIT_MESSAGE_GUIDELINES.es.md create mode 100644 CONTRIBUTING.es.md diff --git a/CODE_OF_CONDUCT.es.md b/CODE_OF_CONDUCT.es.md new file mode 100644 index 00000000..14d7b067 --- /dev/null +++ b/CODE_OF_CONDUCT.es.md @@ -0,0 +1,81 @@ +# CΓ³digo de Conducta del Pacto del Colaborador + +[Ver versiΓ³n en inglΓ©s](./CODE_OF_CONDUCT.md) + +## Nuestro compromiso + +Nosotros, como miembros, contribuyentes y lΓ­deres, nos comprometemos a hacer que la participaciΓ³n en nuestra comunidad sea una experiencia libre de acoso para todas las personas, sin distinciΓ³n de edad, complexiΓ³n, discapacidad visible o invisible, etnia, caracterΓ­sticas sexuales, identidad y expresiΓ³n de gΓ©nero, nivel de experiencia, educaciΓ³n, situaciΓ³n socioeconΓ³mica, nacionalidad, apariencia personal, raza, religiΓ³n, orientaciΓ³n o identidad sexual. + +Nos comprometemos a actuar e interactuar de maneras que contribuyan a una comunidad abierta, acogedora, diversa, inclusiva y saludable. + +## Nuestros estΓ‘ndares + +Ejemplos de comportamiento que contribuye a un entorno positivo para nuestra comunidad incluyen: + +- Demostrar empatΓ­a y amabilidad hacia otras personas. +- Ser respetuoso con opiniones, puntos de vista y experiencias que difieran de las nuestras. +- Dar y aceptar con gracia retroalimentaciΓ³n constructiva. +- Asumir la responsabilidad y disculparse ante quienes se vean afectados por nuestros errores, y aprender de la experiencia. +- Centrarse en lo que es mejor no solo para nosotros como individuos, sino para la comunidad en su conjunto. + +Ejemplos de comportamiento inaceptable incluyen: + +- El uso de lenguaje o imΓ‘genes sexualizadas, y cualquier tipo de atenciΓ³n o insinuaciΓ³n sexual. +- Troleo, comentarios insultantes o despectivos, y ataques personales o polΓ­ticos. +- Acoso pΓΊblico o privado. +- PublicaciΓ³n de informaciΓ³n privada de otras personas, como direcciones fΓ­sicas o de correo electrΓ³nico, sin su permiso explΓ­cito. +- Otra conducta que, razonablemente, pudiera considerarse inapropiada en un entorno profesional. + +## Responsabilidades de cumplimiento + +Los lΓ­deres de la comunidad son responsables de aclarar y hacer cumplir nuestros estΓ‘ndares de comportamiento aceptable y tomarΓ‘n medidas correctivas apropiadas y justas en respuesta a cualquier comportamiento que consideren inapropiado, amenazante, ofensivo o daΓ±ino. + +Los lΓ­deres de la comunidad tienen el derecho y la responsabilidad de eliminar, editar o rechazar comentarios, confirmaciones de cambios (commits), cΓ³digo, ediciones del wiki, incidencias y otras contribuciones que no estΓ©n alineadas con este CΓ³digo de Conducta, y comunicarΓ‘n los motivos de las decisiones de moderaciΓ³n cuando corresponda. + +## Alcance + +Este CΓ³digo de Conducta se aplica a todos los espacios de la comunidad y tambiΓ©n cuando una persona representa oficialmente a la comunidad en espacios pΓΊblicos. Ejemplos de representar a nuestra comunidad incluyen usar una direcciΓ³n de correo electrΓ³nico oficial, publicar a travΓ©s de una cuenta oficial en redes sociales o actuar como representante designado en un evento en lΓ­nea o presencial. + +## Cumplimiento + +Los casos de comportamiento abusivo, acosador o de otra forma inaceptable pueden ser reportados a los lΓ­deres de la comunidad responsables del cumplimiento en [abrir un issue o discusiΓ³n]. Todas las quejas serΓ‘n revisadas e investigadas de manera rΓ‘pida y justa. + +Todos los lΓ­deres de la comunidad estΓ‘n obligados a respetar la privacidad y seguridad de quien reporte cualquier incidente. + +## GuΓ­as de aplicaciΓ³n + +Los lΓ­deres de la comunidad seguirΓ‘n estas GuΓ­as de Impacto Comunitario para determinar las consecuencias por cualquier acciΓ³n que consideren en violaciΓ³n de este CΓ³digo de Conducta: + +### 1. CorrecciΓ³n + +Impacto comunitario: Uso de lenguaje inapropiado u otro comportamiento considerado no profesional o no bienvenido en la comunidad. + +Consecuencia: Una advertencia privada y por escrito de parte de los lΓ­deres de la comunidad, brindando claridad sobre la naturaleza de la violaciΓ³n y una explicaciΓ³n de por quΓ© el comportamiento fue inapropiado. Se puede solicitar una disculpa pΓΊblica. + +### 2. Advertencia + +Impacto comunitario: Una violaciΓ³n por un incidente ΓΊnico o una serie de acciones. + +Consequence: Una advertencia con consecuencias para comportamientos continuados. Ninguna interacciΓ³n con las personas involucradas, incluida la interacciΓ³n no solicitada con quienes hacen cumplir el CΓ³digo de Conducta, por un perΓ­odo de tiempo especificado. Esto incluye evitar interacciones en espacios de la comunidad asΓ­ como en canales externos como redes sociales. Violaciones a estos tΓ©rminos pueden llevar a una suspensiΓ³n temporal o permanente. + +### 3. SuspensiΓ³n temporal + +Impacto comunitario: Una violaciΓ³n grave de los estΓ‘ndares de la comunidad, incluido el comportamiento inapropiado sostenido. + +Consecuencia: Una suspensiΓ³n temporal de cualquier tipo de interacciΓ³n o comunicaciΓ³n pΓΊblica con la comunidad por un perΓ­odo de tiempo especificado. No se permite interacciΓ³n pΓΊblica o privada con las personas involucradas, incluida la interacciΓ³n no solicitada con quienes hacen cumplir el CΓ³digo de Conducta, durante este perΓ­odo. Violar estos tΓ©rminos puede llevar a una suspensiΓ³n permanente. + +### 4. SuspensiΓ³n permanente + +Impacto comunitario: Demostrar un patrΓ³n de violaciΓ³n de los estΓ‘ndares de la comunidad, incluido el comportamiento inapropiado sostenido, acoso a una persona o agresiΓ³n o desprecio hacia clases de individuos. + +Consecuencia: SuspensiΓ³n permanente de cualquier tipo de interacciΓ³n pΓΊblica dentro de la comunidad. + +## AtribuciΓ³n + +Este CΓ³digo de Conducta estΓ‘ adaptado del [Contributor Covenant][homepage], versiΓ³n 2.0, disponible en https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. + +Las GuΓ­as de Impacto Comunitario se inspiraron en la [escala de aplicaciΓ³n del cΓ³digo de conducta de Mozilla](https://github.com/mozilla/diversity). + +[homepage]: https://www.contributor-covenant.org + +Para respuestas a preguntas comunes sobre este cΓ³digo de conducta, vea las preguntas frecuentes en https://www.contributor-covenant.org/faq. Traducciones disponibles en https://www.contributor-covenant.org/translations. diff --git a/COMMIT_MESSAGE_GUIDELINES.es.md b/COMMIT_MESSAGE_GUIDELINES.es.md new file mode 100644 index 00000000..87888736 --- /dev/null +++ b/COMMIT_MESSAGE_GUIDELINES.es.md @@ -0,0 +1,148 @@ +# GuΓ­a para Mensajes de Commit + +[Ver versiΓ³n en inglΓ©s](./COMMIT_MESSAGE_GUIDELINES.md) + +Un buen mensaje de commit debe ser descriptivo y aportar contexto sobre los cambios realizados. Esto facilita entender y revisar los cambios en el futuro. + +## Recomendaciones + +- Empieza con un resumen breve de los cambios del commit. +- Usa el modo imperativo en el resumen, como si dieras una instrucciΓ³n. Por ejemplo, "Add feature" en lugar de "Added feature". +- Proporciona detalles adicionales en el cuerpo del mensaje, si es necesario: motivo del cambio, impacto, dependencias aΓ±adidas o eliminadas, etc. +- MantΓ©n cada lΓ­nea en 72 caracteres o menos para que sea fΓ‘cil de leer en la salida de `git log`. + +### Ejemplos de buenos mensajes + +- "Add authentication feature for user login" +- "Fix bug causing application to crash on startup" +- "Update documentation for API endpoints" + +Recordatorio: escribir mensajes de commit descriptivos ahorra tiempo en el futuro y ayuda a otras personas a entender los cambios hechos al cΓ³digo. + +## Tipos de commit + +A continuaciΓ³n, una lista (ampliable) de tipos de commit que puedes usar: + +`feat`: AΓ±ade una caracterΓ­stica nueva al proyecto + +```markdown +feat: Add multi-image upload support +``` + +`fix`: Corrige un error o problema en el proyecto + +```markdown +fix: Fix bug causing application to crash on startup +``` + +`docs`: Cambios en documentaciΓ³n + +```markdown +docs: Update documentation for API endpoints +``` + +`style`: Cambios cosmΓ©ticos o de formato (colores, formateo de cΓ³digo, etc.) + +```markdown +style: Update colors and formatting +``` + +`refactor`: Cambios internos que no alteran el comportamiento, pero mejoran calidad/mantenibilidad + +```markdown +refactor: Remove unused code +``` + +`test`: AΓ±adir o modificar tests + +```markdown +test: Add tests for new feature +``` + +`chore`: Cambios que no encajan en otras categorΓ­as (actualizar dependencias, configurar build, etc.) + +```markdown +chore: Update dependencies +``` + +`perf`: Mejoras de rendimiento + +```markdown +perf: Improve performance of image processing +``` + +`security`: Aborda temas de seguridad + +```markdown +security: Update dependencies to address security issues +``` + +`merge`: Fusiones de ramas + +```markdown +merge: Merge branch 'feature/branch-name' into develop +``` + +`revert`: Revertir un commit previo + +```markdown +revert: Revert "Add feature" +``` + +`build`: Cambios en el sistema de build o dependencias + +```markdown +build: Update dependencies +``` + +`ci`: Cambios en la integraciΓ³n continua (CI) + +```markdown +ci: Update CI configuration +``` + +`config`: Cambios en archivos de configuraciΓ³n + +```markdown +config: Update configuration files +``` + +`deploy`: Cambios en el proceso de despliegue + +```markdown +deploy: Update deployment scripts +``` + +`init`: InicializaciΓ³n de repositorio o proyecto + +```markdown +init: Initialize project +``` + +`move`: Mover archivos o directorios + +```markdown +move: Move files to new directory +``` + +`rename`: Renombrar archivos o directorios + +```markdown +rename: Rename files +``` + +`remove`: Eliminar archivos o directorios + +```markdown +remove: Remove files +``` + +`update`: ActualizaciΓ³n de cΓ³digo, dependencias u otros componentes + +```markdown +update: Update code +``` + +Estos son solo ejemplos; puedes definir tipos personalizados si los usas de forma consistente y con mensajes claros y descriptivos. + +**Importante:** Si planeas usar un tipo de commit personalizado que no estΓ© en la lista, aΓ±Γ‘delo aquΓ­ para que otras personas lo entiendan tambiΓ©n. Crea un pull request para incluirlo en este archivo. diff --git a/CONTRIBUTING.es.md b/CONTRIBUTING.es.md new file mode 100644 index 00000000..e0d5e28e --- /dev/null +++ b/CONTRIBUTING.es.md @@ -0,0 +1,69 @@ +# GuΓ­a para Contribuir a KooL Hyprland Projects + +[Ver versiΓ³n en inglΓ©s](./CONTRIBUTING.md) + +Β‘Gracias por tu interΓ©s en contribuir a KooL Hyprland Projects! Aceptamos todo tipo de contribuciones: correcciones de errores, nuevas caracterΓ­sticas, mejoras en documentaciΓ³n y otras mejoras generales. + +## Primeros pasos + +1. Haz un fork del repositorio de la rama `development` en tu cuenta de GitHub. AsΓ­ tendrΓ‘s una copia sobre la cual trabajar sin afectar el repositorio original. + - Para hacer fork, pulsa el botΓ³n **Fork** en la esquina superior derecha de esta pΓ‘gina o haz clic [aquΓ­](https://github.com/JaKooLit/Hyprland-Dots/fork). + - AsegΓΊrate de desmarcar la opciΓ³n de copiar solo la rama `main`. AsΓ­ se copiarΓ‘n la rama `development` y otras ramas (si existen). + +2. Clona tu repositorio bifurcado en tu equipo. + + - Usa el siguiente comando para clonar tu fork: + + ```bash + git clone --depth=1 -b development https://github.com/JaKooLit/Hyprland-Dots.git + ``` + +3. Crea una rama nueva para tus cambios. + + - Por ejemplo, para crear una rama llamada `tu-rama`, ejecuta: + + ```bash + git checkout -b tu-rama + ``` + +4. Realiza tus cambios y haz commit con un mensaje descriptivo. + + - Por ejemplo, para hacer commit de tus cambios, ejecuta (siguiendo la [guΓ­a de mensajes de commit](./COMMIT_MESSAGE_GUIDELINES.md)): + + ```bash + git commit -m "feat: add a new feature" + ``` + +5. Empuja tu rama a tu fork. + + ```bash + git push origin tu-rama + ``` + +6. Abre un **pull request** contra el repositorio en la rama `development`. + - Pasos sugeridos: + 1. Ve a tu fork en GitHub. + 2. Haz clic en **Compare & pull request** junto a tu rama. + 3. AΓ±ade un tΓ­tulo y una descripciΓ³n. + 4. Pulsa **Create pull request** y recuerda aΓ±adir las etiquetas correspondientes usando la [plantilla de PR](https://github.com/JaKooLit/Hyprland-Dots/blob/main/.github/PULL_REQUEST_TEMPLATE.md). + +## Directrices + +- Sigue el estilo de cΓ³digo del proyecto. +- Actualiza la **documentaciΓ³n** si es necesario. +- AΓ±ade tests cuando corresponda. +- AsegΓΊrate de que todos los tests pasen o que los cambios estΓ©n probados antes de enviar. +- MantΓ©n tu PR enfocado y evita incluir cambios no relacionados. +- Revisa estos archivos antes de enviar tus cambios: + - [bug.yml](https://github.com/JaKooLit/Hyprland-Dots/blob/main/.github/ISSUE_TEMPLATE/bug.yml) – Reporte de errores. + - [feature.yml](https://github.com/JaKooLit/Hyprland-Dots/blob/main/.github/ISSUE_TEMPLATE/feature.yml) – Sugerir caracterΓ­sticas. + - [documentation-update.yml](https://github.com/JaKooLit/Hyprland-Dots/blob/main/.github/ISSUE_TEMPLATE/documentation-update.yml) – Cambios de documentaciΓ³n. + - [PULL_REQUEST_TEMPLATE.md](https://github.com/JaKooLit/Hyprland-Dots/blob/main/.github/PULL_REQUEST_TEMPLATE.md) – Plantilla de PR. + - [COMMIT_MESSAGE_GUIDELINES.md](./COMMIT_MESSAGE_GUIDELINES.md) – GuΓ­a de mensajes de commit. + - [CONTRIBUTING.md](./CONTRIBUTING.md) – GuΓ­a en inglΓ©s. + - [LICENSE](https://github.com/JaKooLit/Hyprland-Dots/blob/main/LICENSE.md) – Licencia. + - [README.md](https://github.com/JaKooLit/Hyprland-Dots/blob/main/README.md) – Proyecto. + +## Contacto + +Si tienes preguntas, utiliza [GitHub Discussions](https://github.com/JaKooLit/Hyprland-Dots/discussions) o el [Servidor de Discord](https://discord.gg/kool-tech-world). -- cgit v1.2.3 From a7c359e377d6daed4af9158ea0cc915d804ea359 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Sun, 11 Jan 2026 21:13:07 -0500 Subject: Moved UserScripts/UserConfigs restore function to lib_copy helper copy.sh is nearly 50% smaller now a little over 600 lines now down from over 1200 at the start On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: copy.sh modified: scripts/lib_copy.sh --- copy.sh | 256 +--------------------------------------------------- scripts/lib_copy.sh | 243 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 248 insertions(+), 251 deletions(-) diff --git a/copy.sh b/copy.sh index 398f72d0..c36e73e9 100755 --- a/copy.sh +++ b/copy.sh @@ -462,263 +462,17 @@ if command -v qs >/dev/null 2>&1; then fi printf "\n%.0s" {1..1} -# Restore automatically Animations and Monitor-Profiles -# including monitors.conf and workspaces.conf -HYPR_DIR="$HOME/.config/hypr" -BACKUP_DIR=$(get_backup_dirname) -BACKUP_HYPR_PATH="$HYPR_DIR-backup-$BACKUP_DIR" - -if [ -d "$BACKUP_HYPR_PATH" ]; then - if [ "$EXPRESS_MODE" -eq 1 ]; then - echo "${NOTE} Express mode: skipping automatic restoration of animations and monitor profiles." 2>&1 | tee -a "$LOG" - else - echo -e "\n${NOTE} Restoring ${SKY_BLUE}Animations & Monitor Profiles${RESET} directories into ${YELLOW}$HYPR_DIR${RESET}..." - - DIR_B=("Monitor_Profiles" "animations" "wallpaper_effects") - # Restore directories automatically - for DIR_RESTORE in "${DIR_B[@]}"; do - BACKUP_SUBDIR="$BACKUP_HYPR_PATH/$DIR_RESTORE" - if [ -d "$BACKUP_SUBDIR" ]; then - cp -r "$BACKUP_SUBDIR" "$HYPR_DIR/" - echo "${OK} - Restored directory: ${MAGENTA}$DIR_RESTORE${RESET}" 2>&1 | tee -a "$LOG" - fi - done - - # Restore files automatically - FILE_B=("monitors.conf" "workspaces.conf") - for FILE_RESTORE in "${FILE_B[@]}"; do - BACKUP_FILE="$BACKUP_HYPR_PATH/$FILE_RESTORE" - - if [ -f "$BACKUP_FILE" ]; then - cp "$BACKUP_FILE" "$HYPR_DIR/$FILE_RESTORE" - echo "${OK} - Restored file: ${MAGENTA}$FILE_RESTORE${RESET}" 2>&1 | tee -a "$LOG" - fi - done - fi -fi - +restore_hypr_assets "$LOG" "$EXPRESS_MODE" printf "\n%.0s" {1..1} -# Restoring UserConfigs and UserScripts -# Helper to extract overlay (additions) and optional disables from a previous user file compared to vendor base -compose_overlay_from_backup() { - local type="$1" # startup|windowrules - local base_file="$2" - local old_user_file="$3" - local new_user_file="$4" - local disable_file="$5" - - mkdir -p "$(dirname "$new_user_file")" - : >"$new_user_file" - : >"$disable_file" - - if [ "$type" = "startup" ]; then - # additions: exec-once lines present in old user but not in base - grep -E '^\s*exec-once\s*=' "$old_user_file" | sed -E 's/^\s+//;s/\s+$//' | sort -u >"$old_user_file.tmp.exec" - grep -E '^\s*exec-once\s*=' "$base_file" | sed -E 's/^\s+//;s/\s+$//' | sort -u >"$base_file.tmp.exec" - comm -23 "$old_user_file.tmp.exec" "$base_file.tmp.exec" >"$new_user_file" - # treat commented exec-once in old user as disables - grep -E '^\s*#\s*exec-once\s*=' "$old_user_file" | - sed -E 's/^\s*#\s*exec-once\s*=\s*//' | - sed -E 's/^\s+//;s/\s+$//' | - grep -Ev '^\$scriptsDir/KeybindsLayoutInit\.sh$' | - sort -u >"$disable_file" - rm -f "$old_user_file.tmp.exec" "$base_file.tmp.exec" - elif [ "$type" = "windowrules" ]; then - # additions - grep -E '^(windowrule|layerrule)\s*=' "$old_user_file" | sed -E 's/^\s+//;s/\s+$//' | sort -u >"$old_user_file.tmp.rules" - grep -E '^(windowrule|layerrule)\s*=' "$base_file" | sed -E 's/^\s+//;s/\s+$//' | sort -u >"$base_file.tmp.rules" - comm -23 "$old_user_file.tmp.rules" "$base_file.tmp.rules" >"$new_user_file" - # disables: lines commented in old user - grep -E '^\s*#\s*(windowrule|layerrule)\s*=' "$old_user_file" | sed -E 's/^\s*#\s*//' | sed -E 's/^\s+//;s/\s+$//' | sort -u >"$disable_file" - rm -f "$old_user_file.tmp.rules" "$base_file.tmp.rules" - fi -} - - -DIRH="hypr" -DIRPATH="$HOME/.config/$DIRH" -BACKUP_DIR=$(get_backup_dirname) -BACKUP_DIR_PATH="$DIRPATH-backup-$BACKUP_DIR/UserConfigs" - -if [ -z "$BACKUP_DIR" ]; then - echo "${ERROR} - Backup directory name is empty. Exiting." - exit 1 -fi - -if [ -d "$BACKUP_DIR_PATH" ] && [ "$EXPRESS_MODE" -eq 1 ]; then - echo "${NOTE} Express mode: skipping UserConfigs restoration prompts." 2>&1 | tee -a "$LOG" -fi - -if [ -d "$BACKUP_DIR_PATH" ] && [ "$EXPRESS_MODE" -eq 0 ]; then - # Detect version - VERSION_FILE=$(find "$DIRPATH" -maxdepth 1 -name "v*.*.*" | head -n 1) - CURRENT_VERSION="999.9.9" - if [ -n "$VERSION_FILE" ]; then - CURRENT_VERSION=$(basename "$VERSION_FILE" | sed 's/^v//') - fi - - TARGET_VERSION="2.3.19" - - echo -e "${NOTE} Restoring previous ${MAGENTA}User-Configs${RESET}... " - print_color $WARNING " - β–ˆβ–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–ˆ - NOTES for RESTORING PREVIOUS CONFIGS - β–ˆβ–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–ˆ - - The 'UserConfigs' directory is for all your personal settings. - Files in this directory will override the default configurations, - so your customizations are not lost when you update. - " - - if version_gte "$CURRENT_VERSION" "$TARGET_VERSION"; then - # NEW BEHAVIOR (>= 2.3.19) - Bulk Restore - echo -n "${CAT} Do you want to restore your previous UserConfigs directory? (Y/n): " - read -r restore_userconfigs_dir - - if [[ "$restore_userconfigs_dir" != [Nn]* ]]; then - echo "${NOTE} Restoring UserConfigs directory..." 2>&1 | tee -a "$LOG" - # Use rsync to copy contents, overwriting existing files. - rsync -a "$BACKUP_DIR_PATH/" "$DIRPATH/UserConfigs/" 2>&1 | tee -a "$LOG" - echo "${OK} - UserConfigs directory restored." 2>&1 | tee -a "$LOG" - else - echo "${NOTE} - Skipped restoring UserConfigs." 2>&1 | tee -a "$LOG" - fi - - else - # OLD BEHAVIOR (<= 2.3.18) - Selective Restore - echo -e "${NOTE} Detected version ${YELLOW}v$CURRENT_VERSION${RESET} (older than v$TARGET_VERSION). Using legacy restoration mode." - - FILES_TO_RESTORE=( - "01-UserDefaults.conf" - "ENVariables.conf" - "LaptopDisplay.conf" - "Laptops.conf" - "Startup_Apps.conf" - "UserDecorations.conf" - "UserAnimations.conf" - "UserKeybinds.conf" - "UserSettings.conf" - "WindowRules.conf" - ) - - for FILE_NAME in "${FILES_TO_RESTORE[@]}"; do - BACKUP_FILE="$BACKUP_DIR_PATH/$FILE_NAME" - if [ -f "$BACKUP_FILE" ]; then - # Special handling for Startup_Apps.conf and WindowRules.conf - if [ "$FILE_NAME" = "Startup_Apps.conf" ]; then - compose_overlay_from_backup "startup" "$DIRPATH/configs/Startup_Apps.conf" "$BACKUP_FILE" "$DIRPATH/UserConfigs/Startup_Apps.conf" "$DIRPATH/UserConfigs/Startup_Apps.disable" - echo "${OK} - Migrated overlay for ${YELLOW}$FILE_NAME${RESET}" 2>&1 | tee -a "$LOG" - continue - fi - if [ "$FILE_NAME" = "WindowRules.conf" ]; then - compose_overlay_from_backup "windowrules" "$DIRPATH/configs/WindowRules.conf" "$BACKUP_FILE" "$DIRPATH/UserConfigs/WindowRules.conf" "$DIRPATH/UserConfigs/WindowRules.disable" - echo "${OK} - Migrated overlay for ${YELLOW}$FILE_NAME${RESET}" 2>&1 | tee -a "$LOG" - continue - fi - - printf "\n${INFO} Found ${YELLOW}$FILE_NAME${RESET} in hypr backup...\n" - echo -n "${CAT} Do you want to restore ${YELLOW}$FILE_NAME${RESET} from backup? (Y/n): " - read file_restore - - if [[ "$file_restore" != [Nn]* ]]; then - if cp "$BACKUP_FILE" "$DIRPATH/UserConfigs/$FILE_NAME"; then - echo "${OK} - $FILE_NAME restored!" 2>&1 | tee -a "$LOG" - else - echo "${ERROR} - Failed to restore $FILE_NAME!" 2>&1 | tee -a "$LOG" - fi - else - echo "${NOTE} - Skipped restoring $FILE_NAME." 2>&1 | tee -a "$LOG" - fi - fi - done - fi -fi - +restore_user_configs "$LOG" "$EXPRESS_MODE" printf "\n%.0s" {1..1} -# Restoring previous UserScripts -DIRSH="hypr" -SCRIPTS_TO_RESTORE=( - "RofiBeats.sh" - "Weather.py" - "Weather.sh" -) - -DIRSHPATH="$HOME/.config/$DIRSH" -BACKUP_DIR_PATH_S="$DIRSHPATH-backup-$BACKUP_DIR/UserScripts" - -if [ -d "$BACKUP_DIR_PATH_S" ] && [ "$EXPRESS_MODE" -eq 1 ]; then - echo "${NOTE} Express mode: skipping UserScripts restoration prompts." 2>&1 | tee -a "$LOG" -fi - -if [ -d "$BACKUP_DIR_PATH_S" ] && [ "$EXPRESS_MODE" -eq 0 ]; then - echo -e "${NOTE} Restoring previous ${MAGENTA}User-Scripts${RESET}..." - - for SCRIPT_NAME in "${SCRIPTS_TO_RESTORE[@]}"; do - BACKUP_SCRIPT="$BACKUP_DIR_PATH_S/$SCRIPT_NAME" - - if [ -f "$BACKUP_SCRIPT" ]; then - printf "\n${INFO} Found ${YELLOW}$SCRIPT_NAME${RESET} in hypr backup...\n" - echo -n "${CAT} Do you want to restore ${YELLOW}$SCRIPT_NAME${RESET} from backup? (y/N): " - read script_restore - - if [[ "$script_restore" == [Yy]* ]]; then - if cp "$BACKUP_SCRIPT" "$DIRSHPATH/UserScripts/$SCRIPT_NAME"; then - echo "${OK} - $SCRIPT_NAME restored!" 2>&1 | tee -a "$LOG" - else - echo "${ERROR} - Failed to restore $SCRIPT_NAME!" 2>&1 | tee -a "$LOG" - fi - else - echo "${NOTE} - Skipped restoring $SCRIPT_NAME." 2>&1 | tee -a "$LOG" - fi - fi - done -fi - +restore_user_scripts "$LOG" "$EXPRESS_MODE" printf "\n%.0s" {1..1} -# restoring some files in ~/.config/hypr -DIR_H="hypr" -FILES_2_RESTORE=( - "hyprlock.conf" - "hypridle.conf" -) - -DIRPATH="$HOME/.config/$DIR_H" -BACKUP_DIR=$(get_backup_dirname) -BACKUP_DIR_PATH_F="$DIRPATH-backup-$BACKUP_DIR" - -if [ -d "$BACKUP_DIR_PATH_F" ] && [ "$EXPRESS_MODE" -eq 1 ]; then - echo "${NOTE} Express mode: skipping individual hypr file restoration prompts." 2>&1 | tee -a "$LOG" -fi - -if [ -d "$BACKUP_DIR_PATH_F" ] && [ "$EXPRESS_MODE" -eq 0 ]; then - echo -e "${NOTE} Restoring some files in ${MAGENTA}$HOME/.config/hypr directory${RESET}..." - - for FILE_RESTORE in "${FILES_2_RESTORE[@]}"; do - BACKUP_FILE="$BACKUP_DIR_PATH_F/$FILE_RESTORE" - - if [ -f "$BACKUP_FILE" ]; then - echo -e "\n${INFO} Found ${YELLOW}$FILE_RESTORE${RESET} in hypr backup..." - echo -n "${CAT} Do you want to restore ${YELLOW}$FILE_RESTORE${RESET} from backup? (y/N): " - read file2restore - - if [[ "$file2restore" == [Yy]* ]]; then - if cp "$BACKUP_FILE" "$DIRPATH/$FILE_RESTORE"; then - echo "${OK} - $FILE_RESTORE restored!" 2>&1 | tee -a "$LOG" - else - echo "${ERROR} - Failed to restore $FILE_RESTORE!" 2>&1 | tee -a "$LOG" - fi - else - echo "${NOTE} - Skipped restoring $FILE_RESTORE." 2>&1 | tee -a "$LOG" - fi - else - echo "${ERROR} - Backup file $BACKUP_FILE does not exist." - fi - done -fi - +restore_hypr_files "$LOG" "$EXPRESS_MODE" +printf "\n%.0s" {1..1} printf "\n%.0s" {1..1} # Define the target directory for rofi themes diff --git a/scripts/lib_copy.sh b/scripts/lib_copy.sh index 7d76cfc4..fa1231c5 100644 --- a/scripts/lib_copy.sh +++ b/scripts/lib_copy.sh @@ -117,3 +117,246 @@ copy_phase2() { done install_terminal_configs "$log" } + +# Restore Animations and Monitor Profiles plus key hypr files from backup +restore_hypr_assets() { + local log="$1" + local express_mode="$2" + + local HYPR_DIR="$HOME/.config/hypr" + local BACKUP_DIR + BACKUP_DIR=$(get_backup_dirname) + local BACKUP_HYPR_PATH="$HYPR_DIR-backup-$BACKUP_DIR" + + if [ -d "$BACKUP_HYPR_PATH" ]; then + if [ "$express_mode" -eq 1 ]; then + echo "${NOTE:-[NOTE]} Express mode: skipping automatic restoration of animations and monitor profiles." 2>&1 | tee -a "$log" + return + fi + + echo -e "\n${NOTE:-[NOTE]} Restoring ${SKY_BLUE:-}Animations & Monitor Profiles${RESET:-} into ${YELLOW:-}$HYPR_DIR${RESET:-}..." + + local DIR_B=("Monitor_Profiles" "animations" "wallpaper_effects") + for DIR_RESTORE in "${DIR_B[@]}"; do + local BACKUP_SUBDIR="$BACKUP_HYPR_PATH/$DIR_RESTORE" + if [ -d "$BACKUP_SUBDIR" ]; then + cp -r "$BACKUP_SUBDIR" "$HYPR_DIR/" 2>&1 | tee -a "$log" + echo "${OK:-[OK]} - Restored directory: ${MAGENTA:-}$DIR_RESTORE${RESET:-}" 2>&1 | tee -a "$log" + fi + done + + local FILE_B=("monitors.conf" "workspaces.conf") + for FILE_RESTORE in "${FILE_B[@]}"; do + local BACKUP_FILE="$BACKUP_HYPR_PATH/$FILE_RESTORE" + if [ -f "$BACKUP_FILE" ]; then + cp "$BACKUP_FILE" "$HYPR_DIR/$FILE_RESTORE" 2>&1 | tee -a "$log" + echo "${OK:-[OK]} - Restored file: ${MAGENTA:-}$FILE_RESTORE${RESET:-}" 2>&1 | tee -a "$log" + fi + done + fi +} + +# Helper to extract overlay additions/disables from previous user file vs base +compose_overlay_from_backup() { + local type="$1" # startup|windowrules + local base_file="$2" + local old_user_file="$3" + local new_user_file="$4" + local disable_file="$5" + + mkdir -p "$(dirname "$new_user_file")" + : >"$new_user_file" + : >"$disable_file" + + if [ "$type" = "startup" ]; then + grep -E '^\s*exec-once\s*=' "$old_user_file" | sed -E 's/^\s+//;s/\s+$//' | sort -u >"$old_user_file.tmp.exec" + grep -E '^\s*exec-once\s*=' "$base_file" | sed -E 's/^\s+//;s/\s+$//' | sort -u >"$base_file.tmp.exec" + comm -23 "$old_user_file.tmp.exec" "$base_file.tmp.exec" >"$new_user_file" + grep -E '^\s*#\s*exec-once\s*=' "$old_user_file" | + sed -E 's/^\s*#\s*exec-once\s*=\s*//' | + sed -E 's/^\s+//;s/\s+$//' | + grep -Ev '^\$scriptsDir/KeybindsLayoutInit\.sh$' | + sort -u >"$disable_file" + rm -f "$old_user_file.tmp.exec" "$base_file.tmp.exec" + elif [ "$type" = "windowrules" ]; then + grep -E '^(windowrule|layerrule)\s*=' "$old_user_file" | sed -E 's/^\s+//;s/\s+$//' | sort -u >"$old_user_file.tmp.rules" + grep -E '^(windowrule|layerrule)\s*=' "$base_file" | sed -E 's/^\s+//;s/\s+$//' | sort -u >"$base_file.tmp.rules" + comm -23 "$old_user_file.tmp.rules" "$base_file.tmp.rules" >"$new_user_file" + grep -E '^\s*#\s*(windowrule|layerrule)\s*=' "$old_user_file" | sed -E 's/^\s*#\s*//' | sed -E 's/^\s+//;s/\s+$//' | sort -u >"$disable_file" + rm -f "$old_user_file.tmp.rules" "$base_file.tmp.rules" + fi +} + +restore_user_configs() { + local log="$1" + local express_mode="$2" + + local DIRPATH="$HOME/.config/hypr" + local BACKUP_DIR + BACKUP_DIR=$(get_backup_dirname) + local BACKUP_DIR_PATH="$DIRPATH-backup-$BACKUP_DIR/UserConfigs" + + if [ -z "$BACKUP_DIR" ]; then + echo "${ERROR:-[ERROR]} - Backup directory name is empty. Exiting." 2>&1 | tee -a "$log" + exit 1 + fi + + if [ -d "$BACKUP_DIR_PATH" ] && [ "$express_mode" -eq 1 ]; then + echo "${NOTE:-[NOTE]} Express mode: skipping UserConfigs restoration prompts." 2>&1 | tee -a "$log" + return + fi + + if [ -d "$BACKUP_DIR_PATH" ] && [ "$express_mode" -eq 0 ]; then + local VERSION_FILE + VERSION_FILE=$(find "$DIRPATH" -maxdepth 1 -name "v*.*.*" | head -n 1) + local CURRENT_VERSION="999.9.9" + if [ -n "$VERSION_FILE" ]; then + CURRENT_VERSION=$(basename "$VERSION_FILE" | sed 's/^v//') + fi + + local TARGET_VERSION="2.3.19" + + echo -e "${NOTE:-[NOTE]} Restoring previous ${MAGENTA:-}User-Configs${RESET:-}... " 2>&1 | tee -a "$log" + printf "${WARNING:-}\ + β–ˆβ–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–€β–ˆ\n\ + NOTES for RESTORING PREVIOUS CONFIGS\n\ + β–ˆβ–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–ˆ\n\n\ + The 'UserConfigs' directory is for all your personal settings.\n\ + Files in this directory will override the default configurations,\n\ + so your customizations are not lost when you update.\n\ +" >&2 + + if version_gte "$CURRENT_VERSION" "$TARGET_VERSION"; then + read -r -p "${CAT:-[ACTION]} Do you want to restore your previous UserConfigs directory? (Y/n): " restore_userconfigs_dir + if [[ "$restore_userconfigs_dir" != [Nn]* ]]; then + echo "${NOTE:-[NOTE]} Restoring UserConfigs directory..." 2>&1 | tee -a "$log" + rsync -a "$BACKUP_DIR_PATH/" "$DIRPATH/UserConfigs/" 2>&1 | tee -a "$log" + echo "${OK:-[OK]} - UserConfigs directory restored." 2>&1 | tee -a "$log" + else + echo "${NOTE:-[NOTE]} - Skipped restoring UserConfigs." 2>&1 | tee -a "$log" + fi + else + echo -e "${NOTE:-[NOTE]} Detected version ${YELLOW:-}v$CURRENT_VERSION${RESET:-} (older than v$TARGET_VERSION). Using legacy restoration mode." 2>&1 | tee -a "$log" + + local FILES_TO_RESTORE=( + "01-UserDefaults.conf" + "ENVariables.conf" + "LaptopDisplay.conf" + "Laptops.conf" + "Startup_Apps.conf" + "UserDecorations.conf" + "UserAnimations.conf" + "UserKeybinds.conf" + "UserSettings.conf" + "WindowRules.conf" + ) + + for FILE_NAME in "${FILES_TO_RESTORE[@]}"; do + local BACKUP_FILE="$BACKUP_DIR_PATH/$FILE_NAME" + if [ -f "$BACKUP_FILE" ]; then + if [ "$FILE_NAME" = "Startup_Apps.conf" ]; then + compose_overlay_from_backup "startup" "$DIRPATH/configs/Startup_Apps.conf" "$BACKUP_FILE" "$DIRPATH/UserConfigs/Startup_Apps.conf" "$DIRPATH/UserConfigs/Startup_Apps.disable" + echo "${OK:-[OK]} - Migrated overlay for ${YELLOW:-}$FILE_NAME${RESET:-}" 2>&1 | tee -a "$log" + continue + fi + if [ "$FILE_NAME" = "WindowRules.conf" ]; then + compose_overlay_from_backup "windowrules" "$DIRPATH/configs/WindowRules.conf" "$BACKUP_FILE" "$DIRPATH/UserConfigs/WindowRules.conf" "$DIRPATH/UserConfigs/WindowRules.disable" + echo "${OK:-[OK]} - Migrated overlay for ${YELLOW:-}$FILE_NAME${RESET:-}" 2>&1 | tee -a "$log" + continue + fi + + printf "\n${INFO:-[INFO]} Found ${YELLOW:-}$FILE_NAME${RESET:-} in hypr backup...\n" + read -r -p "${CAT:-[ACTION]} Do you want to restore ${YELLOW:-}$FILE_NAME${RESET:-} from backup? (Y/n): " file_restore + + if [[ "$file_restore" != [Nn]* ]]; then + if cp "$BACKUP_FILE" "$DIRPATH/UserConfigs/$FILE_NAME"; then + echo "${OK:-[OK]} - $FILE_NAME restored!" 2>&1 | tee -a "$log" + else + echo "${ERROR:-[ERROR]} - Failed to restore $FILE_NAME!" 2>&1 | tee -a "$log" + fi + else + echo "${NOTE:-[NOTE]} - Skipped restoring $FILE_NAME." 2>&1 | tee -a "$log" + fi + fi + done + fi + fi +} + +restore_user_scripts() { + local log="$1" + local express_mode="$2" + + local DIRSHPATH="$HOME/.config/hypr" + local BACKUP_DIR + BACKUP_DIR=$(get_backup_dirname) + local BACKUP_DIR_PATH_S="$DIRSHPATH-backup-$BACKUP_DIR/UserScripts" + local SCRIPTS_TO_RESTORE=("RofiBeats.sh" "Weather.py" "Weather.sh") + + if [ -d "$BACKUP_DIR_PATH_S" ] && [ "$express_mode" -eq 1 ]; then + echo "${NOTE:-[NOTE]} Express mode: skipping UserScripts restoration prompts." 2>&1 | tee -a "$log" + return + fi + + if [ -d "$BACKUP_DIR_PATH_S" ] && [ "$express_mode" -eq 0 ]; then + echo -e "${NOTE:-[NOTE]} Restoring previous ${MAGENTA:-}User-Scripts${RESET:-}..." 2>&1 | tee -a "$log" + + for SCRIPT_NAME in "${SCRIPTS_TO_RESTORE[@]}"; do + local BACKUP_SCRIPT="$BACKUP_DIR_PATH_S/$SCRIPT_NAME" + if [ -f "$BACKUP_SCRIPT" ]; then + printf "\n${INFO:-[INFO]} Found ${YELLOW:-}$SCRIPT_NAME${RESET:-} in hypr backup...\n" + read -r -p "${CAT:-[ACTION]} Do you want to restore ${YELLOW:-}$SCRIPT_NAME${RESET:-} from backup? (y/N): " script_restore + + if [[ "$script_restore" == [Yy]* ]]; then + if cp "$BACKUP_SCRIPT" "$DIRSHPATH/UserScripts/$SCRIPT_NAME"; then + echo "${OK:-[OK]} - $SCRIPT_NAME restored!" 2>&1 | tee -a "$log" + else + echo "${ERROR:-[ERROR]} - Failed to restore $SCRIPT_NAME!" 2>&1 | tee -a "$log" + fi + else + echo "${NOTE:-[NOTE]} - Skipped restoring $SCRIPT_NAME." 2>&1 | tee -a "$log" + fi + fi + done + fi +} + +restore_hypr_files() { + local log="$1" + local express_mode="$2" + + local DIRPATH="$HOME/.config/hypr" + local BACKUP_DIR + BACKUP_DIR=$(get_backup_dirname) + local BACKUP_DIR_PATH_F="$DIRPATH-backup-$BACKUP_DIR" + local FILES_2_RESTORE=("hyprlock.conf" "hypridle.conf") + + if [ -d "$BACKUP_DIR_PATH_F" ] && [ "$express_mode" -eq 1 ]; then + echo "${NOTE:-[NOTE]} Express mode: skipping individual hypr file restoration prompts." 2>&1 | tee -a "$log" + return + fi + + if [ -d "$BACKUP_DIR_PATH_F" ] && [ "$express_mode" -eq 0 ]; then + echo -e "${NOTE:-[NOTE]} Restoring some files in ${MAGENTA:-}$HOME/.config/hypr directory${RESET:-}..." 2>&1 | tee -a "$log" + + for FILE_RESTORE in "${FILES_2_RESTORE[@]}"; do + local BACKUP_FILE="$BACKUP_DIR_PATH_F/$FILE_RESTORE" + if [ -f "$BACKUP_FILE" ]; then + echo -e "\n${INFO:-[INFO]} Found ${YELLOW:-}$FILE_RESTORE${RESET:-} in hypr backup..." + read -r -p "${CAT:-[ACTION]} Do you want to restore ${YELLOW:-}$FILE_RESTORE${RESET:-} from backup? (y/N): " file2restore + + if [[ "$file2restore" == [Yy]* ]]; then + if cp "$BACKUP_FILE" "$DIRPATH/$FILE_RESTORE"; then + echo "${OK:-[OK]} - $FILE_RESTORE restored!" 2>&1 | tee -a "$log" + else + echo "${ERROR:-[ERROR]} - Failed to restore $FILE_RESTORE!" 2>&1 | tee -a "$log" + fi + else + echo "${NOTE:-[NOTE]} - Skipped restoring $FILE_RESTORE." 2>&1 | tee -a "$log" + fi + else + echo "${ERROR:-[ERROR]} - Backup file $BACKUP_FILE does not exist." 2>&1 | tee -a "$log" + fi + done + fi +} -- cgit v1.2.3 From 88029592bbee3d227e15500b13f3a01f8b095862 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Sun, 11 Jan 2026 21:15:39 -0500 Subject: Updated copy.sh with current status and next steps On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: copy.sh --- copy.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/copy.sh b/copy.sh index c36e73e9..8df2532d 100755 --- a/copy.sh +++ b/copy.sh @@ -23,9 +23,10 @@ # - Backup cleanup (auto in express). # - Final symlinks (waybar) and wallust init. # -# Next modular step: -# Ghostty/WezTerm install logic lives in lib_apps.sh now; consider -# breaking user restore logic into helpers for clarity. +# Next modular steps: +# - Restore logic has been moved into lib_copy helpers; review for further +# consolidation or tests. +# - Consider modularizing remaining app-specific tweaks/prompts. clear wallpaper=$HOME/.config/hypr/wallpaper_effects/.wallpaper_current -- cgit v1.2.3 From a988f706e0080cde8aad3966948ac68ea0075da7 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Mon, 12 Jan 2026 10:12:20 -0500 Subject: Added update dotfiles option to men On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: copy.sh modified: scripts/copy_menu.sh new file: scripts/lib_update.sh --- copy.sh | 14 +++++++++ scripts/copy_menu.sh | 13 +++++--- scripts/lib_update.sh | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 107 insertions(+), 4 deletions(-) create mode 100644 scripts/lib_update.sh diff --git a/copy.sh b/copy.sh index 8df2532d..def8b209 100755 --- a/copy.sh +++ b/copy.sh @@ -6,6 +6,7 @@ # # Layout (high-level; future modularization targets): # - Constants/colors, helper sourcing (copy_menu.sh, lib_backup.sh, lib_detect.sh, lib_prompts.sh, lib_apps.sh, lib_copy.sh). +# - New update helper (lib_update.sh) provides menu-driven repo update: verifies Hyprland-Dots root, stashes changes, git pull, logs, summarizes, waits for keypress. # - Version helpers and CLI parsing (install/upgrade/express). # - Safety checks (non-root), banners/notices. # - Environment/distro checks and warnings. @@ -57,6 +58,7 @@ DETECT_HELPER="$SCRIPT_DIR/scripts/lib_detect.sh" PROMPTS_HELPER="$SCRIPT_DIR/scripts/lib_prompts.sh" APPS_HELPER="$SCRIPT_DIR/scripts/lib_apps.sh" COPY_HELPER="$SCRIPT_DIR/scripts/lib_copy.sh" +UPDATE_HELPER="$SCRIPT_DIR/scripts/lib_update.sh" if [ -f "$MENU_HELPER" ]; then # shellcheck source=./scripts/copy_menu.sh . "$MENU_HELPER" @@ -96,6 +98,13 @@ else echo "${ERROR} Copy helper not found at $COPY_HELPER. Exiting." exit 1 fi +if [ -f "$UPDATE_HELPER" ]; then + # shellcheck source=./scripts/lib_update.sh + . "$UPDATE_HELPER" +else + echo "${ERROR} Update helper not found at $UPDATE_HELPER. Exiting." + exit 1 +fi version_gte() { [ "$1" = "$(echo -e "$1\n$2" | sort -V | tail -n1)" ] @@ -193,6 +202,11 @@ if [ -z "$RUN_MODE" ]; then UPGRADE_MODE=1 EXPRESS_MODE=1 ;; + update) + run_repo_update "$SCRIPT_DIR" + # After update, continue showing the menu without exiting + continue + ;; quit) echo "${NOTE} Exiting per user selection." exit 0 diff --git a/scripts/copy_menu.sh b/scripts/copy_menu.sh index 18482b18..78fb4070 100755 --- a/scripts/copy_menu.sh +++ b/scripts/copy_menu.sh @@ -12,11 +12,13 @@ show_copy_menu() { local install_tag="Install" local upgrade_tag="Upgrade" local express_tag="Express" + local update_tag="Update" local quit_tag="Quit" local install_desc="Fresh copy" local upgrade_desc="Backups + prompts" local express_desc="Skips restores & wallpapers" + local update_desc="Stash + git pull" local quit_desc="Exit without changes" if [ "$express_supported" -ne 1 ]; then express_body="xpress - Requires dots >= ${MIN_EXPRESS_VERSION}" @@ -29,6 +31,7 @@ show_copy_menu() { "$install_tag" "$install_desc" \ "$upgrade_tag" "$upgrade_desc" \ "$express_tag" "$express_desc" \ + "$update_tag" "$update_desc" \ "$quit_tag" "$quit_desc" 3>&1 1>&2 2>&3); then COPY_MENU_CHOICE="quit" return 1 @@ -40,15 +43,17 @@ show_copy_menu() { printf " 1) Install - %s\n" "$install_desc" printf " 2) Upgrade - %s\n" "$upgrade_desc" printf " 3) Express - %s\n" "$express_desc" - printf " 4) Quit - %s\n" "$quit_desc" - printf "Enter choice [1-4]: " + printf " 4) Update - %s\n" "$update_desc" + printf " 5) Quit - %s\n" "$quit_desc" + printf "Enter choice [1-5]: " read -r text_choice case "$text_choice" in 1) choice="$install_tag"; break ;; 2) choice="$upgrade_tag"; break ;; 3) choice="$express_tag"; break ;; - 4) choice="$quit_tag"; break ;; - *) echo "Invalid selection. Please choose 1-4." ;; + 4) choice="$update_tag"; break ;; + 5) choice="$quit_tag"; break ;; + *) echo "Invalid selection. Please choose 1-5." ;; esac done fi diff --git a/scripts/lib_update.sh b/scripts/lib_update.sh new file mode 100644 index 00000000..0a70dff0 --- /dev/null +++ b/scripts/lib_update.sh @@ -0,0 +1,84 @@ +#!/usr/bin/env bash + +# run_repo_update +# Arguments: +# $1 - expected repository root (typically SCRIPT_DIR from copy.sh) +# Behavior: +# * Verifies the script is executed from Hyprland-Dots root. +# * Stashes local changes (including untracked), pulls latest changes. +# * Shows progress, reports errors, and summarizes results. +# * Waits for user input before returning control to caller. +run_repo_update() { + local repo_dir="${1:-$(pwd)}" + local expected_name="Hyprland-Dots" + local log_dir="$repo_dir/Copy-Logs" + local log_file="$log_dir/update-$(date +%d-%H%M%S)_git.log" + + mkdir -p "$log_dir" + + echo "${INFO} Starting repository update..." | tee -a "$log_file" + + if [ ! -d "$repo_dir" ] || [ "$(basename "$repo_dir")" != "$expected_name" ]; then + echo "${ERROR} This helper must be run from the $expected_name directory. Current: $(pwd)" | tee -a "$log_file" + read -n1 -s -r -p "Press any key to return to the menu..." + echo + return 1 + fi + + if [ "$PWD" != "$repo_dir" ]; then + echo "${INFO} Changing directory to $repo_dir" | tee -a "$log_file" + cd "$repo_dir" || { + echo "${ERROR} Failed to change directory to $repo_dir" | tee -a "$log_file" + read -n1 -s -r -p "Press any key to return to the menu..." + echo + return 1 + } + fi + + local head_before stash_msg pull_status=0 + head_before=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown") + + echo "${INFO} Checking working tree..." | tee -a "$log_file" + if git diff --quiet && git diff --cached --quiet; then + stash_msg="No local changes; no stash created." + echo "${NOTE} $stash_msg" | tee -a "$log_file" + else + echo "${INFO} Stashing local changes (tracked + untracked)..." | tee -a "$log_file" + if stash_output=$(git stash push -u 2>&1); then + stash_msg="Created stash: $(echo "$stash_output" | head -n1)" + echo "${OK} $stash_msg" | tee -a "$log_file" + else + echo "${ERROR} git stash failed. Details:" | tee -a "$log_file" + echo "$stash_output" | tee -a "$log_file" + read -n1 -s -r -p "Press any key to return to the menu..." + echo + return 1 + fi + fi + + echo "${INFO} Pulling latest changes..." | tee -a "$log_file" + if git pull --ff-only 2>&1 | tee -a "$log_file"; then + pull_status=0 + echo "${OK} Repository updated successfully." | tee -a "$log_file" + else + pull_status=$? + echo "${ERROR} git pull failed (exit $pull_status)." | tee -a "$log_file" + fi + + local head_after + head_after=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown") + + echo "----------------------------------------" | tee -a "$log_file" + echo "Summary:" | tee -a "$log_file" + echo " Repo : $repo_dir" | tee -a "$log_file" + echo " HEAD before : $head_before" | tee -a "$log_file" + echo " HEAD after : $head_after" | tee -a "$log_file" + echo " Stash : $stash_msg" | tee -a "$log_file" + echo " Pull status : $( [ $pull_status -eq 0 ] && echo success || echo failure )" | tee -a "$log_file" + echo "----------------------------------------" | tee -a "$log_file" + + read -n1 -s -r -p "Press any key to return to the main menu..." + echo + + return $pull_status +} -- cgit v1.2.3 From 365e82d2e8782969bc4dc522d4a4e87e65fef0b2 Mon Sep 17 00:00:00 2001 From: brockar Date: Mon, 12 Jan 2026 21:51:48 -0300 Subject: fix: windowrules center for float windows --- config/hypr/configs/WindowRules.conf | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/config/hypr/configs/WindowRules.conf b/config/hypr/configs/WindowRules.conf index 00c98644..d37e1636 100644 --- a/config/hypr/configs/WindowRules.conf +++ b/config/hypr/configs/WindowRules.conf @@ -124,11 +124,11 @@ windowrule = idle_inhibit fullscreen, match:class ^(*)$ windowrule = idle_inhibit fullscreen, match:title ^(*)$ # FLOAT -windowrule = match:tag KooL_Cheat, float on -windowrule = match:tag wallpaper, float on -windowrule = match:tag settings, float on -windowrule = match:tag viewer, float on -windowrule = match:tag KooL-Settings, float on +windowrule = match:tag KooL_Cheat, float on, center on +windowrule = match:tag wallpaper, float on, center on +windowrule = match:tag settings, float on, center on +windowrule = match:tag viewer, float on, center on +windowrule = match:tag KooL-Settings, float on, center on windowrule = match:class ([Zz]oom|onedriver|onedriver-launcher), float on windowrule = match:class (org.gnome.Calculator|qalculate-gtk), float on windowrule = match:class ^(mpv|com.github.rafostar.Clapper)$, float on -- cgit v1.2.3 From aa4595e25feea6cfa02a193d1a3818d4a50a4b0d Mon Sep 17 00:00:00 2001 From: Don Williams Date: Tue, 13 Jan 2026 15:12:34 -0500 Subject: Added toggle for Rainbow border in Edit menu On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/hypr/scripts/Kool_Quick_Settings.sh --- config/hypr/scripts/Kool_Quick_Settings.sh | 33 ++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) 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(-) 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 f164bcfd828df98e58d88859820d0f648d178728 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Tue, 13 Jan 2026 16:21:22 -0500 Subject: Updated CHANLOG with Toggle Rainbow feature Thanks Arkboi for suggesting it On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: CHANGELOG.md --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5e50670c..c88b8513 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ ## v2.3.19 +- 2026-01-13 +- Added `Toggle Rainbow borders` option to settings menu +- `SUPERSHIFT+E` search for `Rainbow` +- It will toggle the current state and run `Refresh.sh` to start or stop + - Thanks to @Arkboi for suggesting it. + - Later if there are more settings like this I will create a new menu + - 2026-01-11 - Improved `ML4W Glass` theme - Now has proper 3d gradient look -- cgit v1.2.3 From 39372f3c096ab95cebd2acffec81c55fb6b46851 Mon Sep 17 00:00:00 2001 From: brockar Date: Wed, 14 Jan 2026 15:20:04 -0300 Subject: fix: Email WindowRules --- config/hypr/configs/WindowRules.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/config/hypr/configs/WindowRules.conf b/config/hypr/configs/WindowRules.conf index d37e1636..4f54215d 100644 --- a/config/hypr/configs/WindowRules.conf +++ b/config/hypr/configs/WindowRules.conf @@ -42,8 +42,9 @@ windowrule = match:class ^(nwg-displays|nwg-look)$, tag +KooL-Settings windowrule = match:class ^(Alacritty|kitty|kitty-dropterm)$, tag +terminal # email tags -windowrule = match:class ^([Tt]hunderbird|org.gnome.Evolution)$, tag +email +windowrule = match:class ^([Tt]hunderbird|org.mozilla.Thunderbird)$, tag +email windowrule = match:class ^(eu.betterbird.Betterbird)$, tag +email +windowrule = match:class ^(org.gnome.Evolution)$, tag +email # project tags windowrule = match:class ^(codium|codium-url-handler|VSCodium)$, tag +projects -- cgit v1.2.3 From 1451c8f90cab6a28216872f017083a77dad54be1 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Thu, 15 Jan 2026 01:46:51 -0500 Subject: Adding python based tui to replace whiptail On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: scripts/copy_menu.sh new file: scripts/tui_menu.py --- scripts/copy_menu.sh | 19 ++- scripts/tui_menu.py | 328 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 344 insertions(+), 3 deletions(-) create mode 100755 scripts/tui_menu.py diff --git a/scripts/copy_menu.sh b/scripts/copy_menu.sh index 78fb4070..212cab84 100755 --- a/scripts/copy_menu.sh +++ b/scripts/copy_menu.sh @@ -20,12 +20,24 @@ show_copy_menu() { local express_desc="Skips restores & wallpapers" local update_desc="Stash + git pull" local quit_desc="Exit without changes" - if [ "$express_supported" -ne 1 ]; then - express_body="xpress - Requires dots >= ${MIN_EXPRESS_VERSION}" - fi local choice="" + # Prefer Python TUI if available (mouse + keyboard, styled hotkeys, help) + # Determine repo dir robustly: prefer SCRIPT_DIR if set by caller (copy.sh); fallback to this file's parent + local __self_dir __repo_dir + __self_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + __repo_dir="${SCRIPT_DIR:-$(cd "${__self_dir}/.." 2>/dev/null && pwd)}" + local py_menu="${__repo_dir}/scripts/tui_menu.py" + if command -v python3 >/dev/null 2>&1 && [ -f "$py_menu" ]; then + if choice=$(python3 "$py_menu" --express-supported "$express_supported"); then + # shellcheck disable=SC2034 # used by parent script after sourcing this file + COPY_MENU_CHOICE="$choice" + return 0 + fi + fi + + # Fallback to whiptail if present if command -v whiptail >/dev/null 2>&1; then if ! choice=$(whiptail --title "$menu_title" --menu "$prompt" 17 60 8 \ "$install_tag" "$install_desc" \ @@ -37,6 +49,7 @@ show_copy_menu() { return 1 fi else + # Plain-text fallback while true; do printf "\n%s\n" "$menu_title" printf "%s\n" "$prompt" diff --git a/scripts/tui_menu.py b/scripts/tui_menu.py new file mode 100755 index 00000000..abf35751 --- /dev/null +++ b/scripts/tui_menu.py @@ -0,0 +1,328 @@ +#!/usr/bin/env python3 +# Simple TUI menu for Hyprland-Dots copy workflow +# - Prefers Textual (rich) for a nicer UI with mouse + keyboard +# - Falls back to curses if Textual is unavailable +# - Prints the chosen action (Install|Upgrade|Express|Update|Quit) to stdout + +from __future__ import annotations + +import argparse +import os +import sys + +CHOICES = [ + ("Install", "Fresh copy of the dotfiles into ~/.config"), + ("Upgrade", "Backups + interactive prompts"), + ("Express", "Skips restore prompts and large wallpaper download"), + ("Update", "Update this repo: stash local changes, git pull"), + ("Help", "Explain the options shown here"), + ("Quit", "Exit without making changes"), +] + +HELP_TEXT = ( + "Install: Perform a fresh copy of configs into ~/.config.\n" + "Upgrade: Back up existing configs and prompt to restore what you want.\n" + "Express: Faster upgrade (requires installed dots >= the minimum version).\n" + "Update: Safely update this Git repo (stash local changes, then git pull).\n" + "Quit: Exit without making changes.\n\n" + "Tips:\n" + "- Use Up/Down or mouse to select, Enter to confirm.\n" + "- Press the highlighted first letter (I/U/E/U/Q/H) as a shortcut.\n" + "- Press h or ? at any time to view this help.\n" +) + + +def main() -> int: + parser = argparse.ArgumentParser() + parser.add_argument("--express-supported", default="0", choices=["0", "1"], help="Whether Express is allowed (1) or not (0)") + args = parser.parse_args() + express_supported = args.express_supported == "1" + + # Try Textual first + try: + return run_textual(express_supported) + except Exception: # noqa: BLE001 - silently fall back + pass + + # Then try curses + try: + return run_curses(express_supported) + except Exception: + # Final fallback to a very simple stdin prompt to avoid breaking workflows + return run_basic(express_supported) + + +def stylize_first_letter(label: str) -> tuple[str, str]: + # returns (styled_label_for_ui, hotkey) + hotkey = label[0].upper() + rest = label[1:] + # Textual Rich markup: bold + accent color for the first letter + styled = f"[b][cyan]{hotkey}[/cyan][/b]{rest}" + return styled, hotkey + + +def run_textual(express_supported: bool) -> int: + from textual.app import App, ComposeResult + from textual.widgets import Header, Footer, Static, Button + from textual.containers import Vertical + from textual.reactive import reactive + from textual import events + + class MenuButton(Button): + def __init__(self, label: str, choice_key: str, disabled: bool = False) -> None: + super().__init__(label, disabled=disabled) + self.choice_key = choice_key + + class MenuApp(App): + CSS = """ + Screen { background: black; } + #title { content-align: center middle; height: 3; color: white; } + Vertical { width: 80; max-width: 90; margin: 1 auto; } + Button { margin: 1 0; padding: 1 2; border: round cornflowerblue; } + Button:hover { background: rgba(100,100,255,0.1); } + Button.-disabled { color: grey50; border: round grey35; } + #help { padding: 1 2; border: round grey42; height: auto; } + """ + + selected: reactive[str | None] = reactive(None) + + def compose(self) -> ComposeResult: # type: ignore[override] + yield Header(show_clock=False) + yield Static("KooL's Hyprland Dotfiles", id="title") + with Vertical(): + # Build buttons + for (name, _desc) in CHOICES: + if name == "Express" and not express_supported: + styled, _hk = stylize_first_letter(name) + yield MenuButton(f"{styled} [grey62](requires newer installed dots)\n[/grey62]", name, disabled=True) + else: + styled, _hk = stylize_first_letter(name) + yield MenuButton(styled, name) + yield Static("Press h or ? for help", id="help") + yield Footer() + + def on_button_pressed(self, event: Button.Pressed) -> None: # type: ignore[override] + btn = event.button + if isinstance(btn, MenuButton): + if btn.choice_key == "Help": + self.show_help() + return + if btn.choice_key == "Express" and not express_supported: + return + self.selected = btn.choice_key + self.exit_app() + + def action_quit(self) -> None: # Esc + self.exit_app("Quit") + + BINDINGS = [ + ("escape", "quit", "Quit"), + ("i", "select('Install')", "Install"), + ("u", "select('Upgrade')", "Upgrade"), + ("e", "select('Express')", "Express"), + ("d", "select('Update')", "Update"), + ("q", "select('Quit')", "Quit"), + ("h", "help", "Help"), + ("?", "help", "Help"), + ("enter", "activate", "Select"), + ] + + def action_select(self, name: str) -> None: + if name == "Express" and not express_supported: + return + if name == "Help": + self.show_help() + return + self.selected = name + self.exit_app() + + def action_help(self) -> None: + self.show_help() + + def action_activate(self) -> None: + # Activate focused button + focused = self.focused + if isinstance(focused, MenuButton): + self.on_button_pressed(Button.Pressed(focused)) + + def show_help(self) -> None: + self.push_screen(HelpScreen()) + + def exit_app(self, fallback: str | None = None) -> None: + result = self.selected or fallback + if result: + print(result) + self.exit(0) + + from textual.screen import ModalScreen + + class HelpScreen(ModalScreen[None]): + def compose(self) -> ComposeResult: # type: ignore[override] + yield Static("[b]Help[/b]\n\n" + HELP_TEXT, id="help") + + BINDINGS = [("escape", "dismiss", "Close"), ("q", "dismiss", "Close")] + + def action_dismiss(self) -> None: + self.dismiss(None) + + app = MenuApp() + app.run() + return 0 + + +def run_curses(express_supported: bool) -> int: + import curses + + labels = [name for (name, _d) in CHOICES] + + def draw_menu(stdscr, idx: int, show_help: bool) -> None: + stdscr.clear() + h, w = stdscr.getmaxyx() + title = "KooL's Hyprland Dotfiles" + stdscr.attron(curses.A_BOLD) + stdscr.addstr(1, (w - len(title)) // 2, title) + stdscr.attroff(curses.A_BOLD) + + y = 4 + for i, name in enumerate(labels): + disabled = (name == "Express" and not express_supported) + hk = name[0].upper() + rest = name[1:] + if i == idx: + stdscr.attron(curses.A_REVERSE) + if disabled: + color = curses.color_pair(2) + else: + color = curses.color_pair(1) + # First letter styled + stdscr.attron(color | curses.A_BOLD) + stdscr.addstr(y, 4, hk) + stdscr.attroff(color | curses.A_BOLD) + stdscr.addstr(y, 5, rest) + if disabled: + msg = " (requires newer installed dots)" + stdscr.attron(curses.color_pair(2)) + stdscr.addstr(y, 5 + len(rest), msg) + stdscr.attroff(curses.color_pair(2)) + if i == idx: + stdscr.attroff(curses.A_REVERSE) + y += 2 + + info = "Enter=Select ↑/↓=Move Mouse=Click h/?=Help q=Quit" + stdscr.addstr(h - 2, 2, info) + + if show_help: + box_w = min(w - 6, 76) + box_h = min(12, h - 6) + bx = (w - box_w) // 2 + by = (h - box_h) // 2 + # simple box + for yy in range(by, by + box_h): + stdscr.addstr(yy, bx, " " * box_w, curses.color_pair(3)) + stdscr.attron(curses.A_BOLD) + stdscr.addstr(by, bx + 2, "Help") + stdscr.attroff(curses.A_BOLD) + for i, line in enumerate(HELP_TEXT.splitlines()[: box_h - 3]): + stdscr.addstr(by + 2 + i, bx + 2, line) + stdscr.addstr(by + box_h - 2, bx + 2, "Press q or Esc to close help") + + stdscr.refresh() + + def loop(stdscr) -> str: + curses.curs_set(0) + curses.mousemask(1) + curses.start_color() + curses.init_pair(1, curses.COLOR_CYAN, -1) + curses.init_pair(2, curses.COLOR_BLACK, curses.COLOR_BLACK) + curses.init_pair(3, curses.COLOR_WHITE, curses.COLOR_BLUE) + idx = 0 + showing_help = False + + while True: + draw_menu(stdscr, idx, showing_help) + ch = stdscr.getch() + if showing_help: + if ch in (ord('q'), ord('Q'), 27): + showing_help = False + continue + + if ch in (curses.KEY_UP, ord('k')): + idx = (idx - 1) % len(labels) + elif ch in (curses.KEY_DOWN, ord('j')): + idx = (idx + 1) % len(labels) + elif ch in (ord('h'), ord('?')): + showing_help = True + elif ch in (ord('q'), 27): + return "Quit" + elif ch == curses.KEY_MOUSE: + try: + _, mx, my, _, _ = curses.getmouse() + # map click row to item + base_y = 4 + if my >= base_y: + clicked = (my - base_y) // 2 + if 0 <= clicked < len(labels): + name = labels[clicked] + if name == "Help": + showing_help = True + elif name == "Express" and not express_supported: + pass + else: + return name + except Exception: + pass + elif ch in (curses.KEY_ENTER, 10, 13): + name = labels[idx] + if name == "Help": + showing_help = True + elif name == "Express" and not express_supported: + pass + else: + return name + else: + # hotkeys by first letter + key = chr(ch).lower() if 0 <= ch < 256 else "" + mapping = {"i": "Install", "u": "Upgrade", "e": "Express", "d": "Update", "q": "Quit", "h": "Help"} + if key in mapping: + name = mapping[key] + if name == "Help": + showing_help = True + elif name == "Express" and not express_supported: + pass + else: + return name + + choice = curses.wrapper(loop) + print(choice) + return 0 + + +def run_basic(express_supported: bool) -> int: + # Minimal stdin-only fallback + options = [n for (n, _d) in CHOICES] + while True: + print("Select:") + for i, name in enumerate(options, 1): + if name == "Express" and not express_supported: + print(f" {i}) {name} (disabled)") + else: + print(f" {i}) {name}") + try: + sel = input("> ").strip() + except EOFError: + print("Quit") + return 0 + if sel.isdigit(): + idx = int(sel) - 1 + if 0 <= idx < len(options): + choice = options[idx] + if choice == "Express" and not express_supported: + continue + if choice == "Help": + print(HELP_TEXT) + continue + print(choice) + return 0 + +if __name__ == "__main__": + sys.exit(main()) -- cgit v1.2.3 From 0886304d0fe31f88343391f5405465f90d2ac8fe Mon Sep 17 00:00:00 2001 From: Don Williams Date: Thu, 15 Jan 2026 01:56:42 -0500 Subject: Fixing menu and version detection code for express upgrade On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: copy.sh modified: scripts/copy_menu.sh modified: scripts/tui_menu.py --- copy.sh | 10 ++++---- scripts/copy_menu.sh | 17 +++++++++---- scripts/tui_menu.py | 70 ++++++++++++++++++++++++++++++---------------------- 3 files changed, 58 insertions(+), 39 deletions(-) diff --git a/copy.sh b/copy.sh index def8b209..31c66a0b 100755 --- a/copy.sh +++ b/copy.sh @@ -112,12 +112,12 @@ version_gte() { get_installed_dotfiles_version() { local hypr_dir="$HOME/.config/hypr" - local version_file if [ -d "$hypr_dir" ]; then - version_file=$(find "$hypr_dir" -maxdepth 1 -name "v*.*.*" | head -n 1) - if [ -n "$version_file" ]; then - basename "$version_file" | sed 's/^v//' - fi + # Pick the highest semantic version among files named vX.Y.Z + find "$hypr_dir" -maxdepth 1 -type f -name 'v*.*.*' -printf '%f\n' 2>/dev/null \ + | sed 's/^v//' \ + | sort -V \ + | tail -n1 fi } diff --git a/scripts/copy_menu.sh b/scripts/copy_menu.sh index 212cab84..258c2fae 100755 --- a/scripts/copy_menu.sh +++ b/scripts/copy_menu.sh @@ -29,11 +29,18 @@ show_copy_menu() { __self_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" __repo_dir="${SCRIPT_DIR:-$(cd "${__self_dir}/.." 2>/dev/null && pwd)}" local py_menu="${__repo_dir}/scripts/tui_menu.py" - if command -v python3 >/dev/null 2>&1 && [ -f "$py_menu" ]; then - if choice=$(python3 "$py_menu" --express-supported "$express_supported"); then - # shellcheck disable=SC2034 # used by parent script after sourcing this file - COPY_MENU_CHOICE="$choice" - return 0 +if command -v python3 >/dev/null 2>&1 && [ -f "$py_menu" ]; then + # Allow forcing backend via COPY_TUI_BACKEND=auto|textual|curses|basic + if [ -n "$COPY_TUI_BACKEND" ]; then + if choice=$(python3 "$py_menu" --express-supported "$express_supported" --backend "$COPY_TUI_BACKEND"); then + COPY_MENU_CHOICE="$choice" + return 0 + fi + else + if choice=$(python3 "$py_menu" --express-supported "$express_supported"); then + COPY_MENU_CHOICE="$choice" + return 0 + fi fi fi diff --git a/scripts/tui_menu.py b/scripts/tui_menu.py index abf35751..d57ba1ac 100755 --- a/scripts/tui_menu.py +++ b/scripts/tui_menu.py @@ -35,20 +35,26 @@ HELP_TEXT = ( def main() -> int: parser = argparse.ArgumentParser() parser.add_argument("--express-supported", default="0", choices=["0", "1"], help="Whether Express is allowed (1) or not (0)") + parser.add_argument("--backend", default=os.environ.get("COPY_TUI_BACKEND", "auto"), choices=["auto", "textual", "curses", "basic"], help="Choose UI backend") args = parser.parse_args() express_supported = args.express_supported == "1" + backend = args.backend - # Try Textual first + if backend == "textual": + return run_textual(express_supported) + if backend == "curses": + return run_curses(express_supported) + if backend == "basic": + return run_basic(express_supported) + + # auto: Try Textual, then curses, then basic try: return run_textual(express_supported) - except Exception: # noqa: BLE001 - silently fall back + except Exception: pass - - # Then try curses try: return run_curses(express_supported) except Exception: - # Final fallback to a very simple stdin prompt to avoid breaking workflows return run_basic(express_supported) @@ -180,7 +186,7 @@ def run_curses(express_supported: bool) -> int: h, w = stdscr.getmaxyx() title = "KooL's Hyprland Dotfiles" stdscr.attron(curses.A_BOLD) - stdscr.addstr(1, (w - len(title)) // 2, title) + stdscr.addstr(1, max(2, (w - len(title)) // 2), title) stdscr.attroff(curses.A_BOLD) y = 4 @@ -190,40 +196,36 @@ def run_curses(express_supported: bool) -> int: rest = name[1:] if i == idx: stdscr.attron(curses.A_REVERSE) - if disabled: - color = curses.color_pair(2) - else: - color = curses.color_pair(1) # First letter styled - stdscr.attron(color | curses.A_BOLD) + stdscr.attron(curses.color_pair(1) | curses.A_BOLD) stdscr.addstr(y, 4, hk) - stdscr.attroff(color | curses.A_BOLD) + stdscr.attroff(curses.color_pair(1) | curses.A_BOLD) + if disabled: + stdscr.attron(curses.A_DIM) stdscr.addstr(y, 5, rest) if disabled: msg = " (requires newer installed dots)" - stdscr.attron(curses.color_pair(2)) - stdscr.addstr(y, 5 + len(rest), msg) - stdscr.attroff(curses.color_pair(2)) + stdscr.addstr(y, 5 + len(rest), msg, curses.A_DIM) + stdscr.attroff(curses.A_DIM) if i == idx: stdscr.attroff(curses.A_REVERSE) y += 2 - info = "Enter=Select ↑/↓=Move Mouse=Click h/?=Help q=Quit" - stdscr.addstr(h - 2, 2, info) + info = "Enter=Select Up/Down=Move Mouse=Click h/?=Help q=Quit" + stdscr.addstr(h - 2, 2, info[: max(0, w - 4)]) if show_help: box_w = min(w - 6, 76) box_h = min(12, h - 6) - bx = (w - box_w) // 2 - by = (h - box_h) // 2 - # simple box + bx = max(2, (w - box_w) // 2) + by = max(2, (h - box_h) // 2) for yy in range(by, by + box_h): - stdscr.addstr(yy, bx, " " * box_w, curses.color_pair(3)) + stdscr.addstr(yy, bx, " " * max(0, box_w), curses.color_pair(3)) stdscr.attron(curses.A_BOLD) stdscr.addstr(by, bx + 2, "Help") stdscr.attroff(curses.A_BOLD) - for i, line in enumerate(HELP_TEXT.splitlines()[: box_h - 3]): - stdscr.addstr(by + 2 + i, bx + 2, line) + for i, line in enumerate(HELP_TEXT.splitlines()[: max(0, box_h - 3)]): + stdscr.addstr(by + 2 + i, bx + 2, line[: max(0, box_w - 4)]) stdscr.addstr(by + box_h - 2, bx + 2, "Press q or Esc to close help") stdscr.refresh() @@ -232,9 +234,18 @@ def run_curses(express_supported: bool) -> int: curses.curs_set(0) curses.mousemask(1) curses.start_color() - curses.init_pair(1, curses.COLOR_CYAN, -1) - curses.init_pair(2, curses.COLOR_BLACK, curses.COLOR_BLACK) - curses.init_pair(3, curses.COLOR_WHITE, curses.COLOR_BLUE) + try: + curses.use_default_colors() + except Exception: + pass + try: + curses.init_pair(1, curses.COLOR_CYAN, -1) + except Exception: + curses.init_pair(1, curses.COLOR_CYAN, 0) + try: + curses.init_pair(3, curses.COLOR_WHITE, curses.COLOR_BLUE) + except Exception: + curses.init_pair(3, curses.COLOR_WHITE, 0) idx = 0 showing_help = False @@ -257,7 +268,6 @@ def run_curses(express_supported: bool) -> int: elif ch == curses.KEY_MOUSE: try: _, mx, my, _, _ = curses.getmouse() - # map click row to item base_y = 4 if my >= base_y: clicked = (my - base_y) // 2 @@ -280,8 +290,10 @@ def run_curses(express_supported: bool) -> int: else: return name else: - # hotkeys by first letter - key = chr(ch).lower() if 0 <= ch < 256 else "" + try: + key = chr(ch).lower() if 0 <= ch < 256 else "" + except Exception: + key = "" mapping = {"i": "Install", "u": "Upgrade", "e": "Express", "d": "Update", "q": "Quit", "h": "Help"} if key in mapping: name = mapping[key] -- cgit v1.2.3 From b8c823fbab99f857c933e9b45609ab21cee55f31 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Thu, 15 Jan 2026 02:02:37 -0500 Subject: triage file On branch development Your branch is up to date with 'origin/development'. Changes to be committed: new file: copy-menu-issue.txt --- copy-menu-issue.txt | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 copy-menu-issue.txt diff --git a/copy-menu-issue.txt b/copy-menu-issue.txt new file mode 100644 index 00000000..94672040 --- /dev/null +++ b/copy-menu-issue.txt @@ -0,0 +1,52 @@ +Summary: copy.sh menu issues on Debian host + +Symptoms +- Running copy.sh shows a black screen with a cursor; no visible menu. +- Running scripts/tui_menu.py directly renders an ncurses menu, but Express appears disabled. +- The host has ~/.config/hypr/v2.3.18 present. + +Changes already made (in repo) +- Added Python TUI (scripts/tui_menu.py) with backends: Textual -> curses -> basic; mouse + keyboard; hotkeys; Help panel. +- Updated scripts/copy_menu.sh to prefer Python TUI and to accept COPY_TUI_BACKEND=auto|textual|curses|basic, passing --express-supported accordingly. +- Hardened curses drawing to avoid blank screens (use_default_colors, safer bounds). +- Fixed Express detection in copy.sh to pick the highest version marker (sort -V) under ~/.config/hypr (vX.Y.Z). + +Why Express shows disabled when running the TUI directly +- scripts/tui_menu.py defaults to --express-supported=0 unless told otherwise. When launched by copy.sh, it is passed the correct flag. Running it manually without the flag will show Express as disabled. + +Immediate workaround on the Debian host +1) Ensure you have the latest repo changes + git --no-pager status + git pull --ff-only + +2) Force the curses backend to avoid the black Textual screen + # one-shot + COPY_TUI_BACKEND=curses ./copy.sh + # or set permanently for the session + export COPY_TUI_BACKEND=curses + ./copy.sh + +3) If curses ever fails to render, use the basic fallback + COPY_TUI_BACKEND=basic ./copy.sh + +4) To test the TUI directly with Express allowed + python3 scripts/tui_menu.py --express-supported 1 --backend curses + +Verify Express detection on the host +- Confirm the installed version marker and what copy.sh will see: + find "$HOME/.config/hypr" -maxdepth 1 -type f -name 'v*.*.*' -printf '%f\n' | sed 's/^v//' | sort -V | tail -n1 +- Expected output: 2.3.18 (or newer). If empty, create the marker: + : > "$HOME/.config/hypr/v2.3.18" + +If black screen persists with copy.sh +- Dump debug logs for the menu selection phase: + set -x; COPY_TUI_BACKEND=curses bash -c 'source scripts/copy_menu.sh; show_copy_menu 1; echo "CHOICE=$COPY_MENU_CHOICE"'; set +x +- Check TERM and Python TUI dependency situations: + echo "$TERM" + command -v python3 || true + python3 -c "import curses; print('curses OK')" || true + +Notes for future session +- copy_menu.sh already honors COPY_TUI_BACKEND and falls back to whiptail/text if Python fails. +- copy.sh now uses highest version marker to enable Express; the marker must be a file named exactly vX.Y.Z under ~/.config/hypr. +- If this host lacks Textual (rich) and shows black screen in Textual, forcing curses via COPY_TUI_BACKEND=curses is the recommended run mode on Debian for now. -- cgit v1.2.3 From 122f607047b16488c95ea25e842084d88b394e1d Mon Sep 17 00:00:00 2001 From: Don Williams Date: Thu, 15 Jan 2026 02:25:36 -0500 Subject: Removed python script didn't work On branch development Your branch is up to date with 'origin/development'. Changes to be committed: deleted: copy-menu-issue.txt modified: scripts/copy_menu.sh deleted: scripts/tui_menu.py --- copy-menu-issue.txt | 52 -------- scripts/copy_menu.sh | 73 ++++++----- scripts/tui_menu.py | 340 --------------------------------------------------- 3 files changed, 36 insertions(+), 429 deletions(-) delete mode 100644 copy-menu-issue.txt delete mode 100755 scripts/tui_menu.py diff --git a/copy-menu-issue.txt b/copy-menu-issue.txt deleted file mode 100644 index 94672040..00000000 --- a/copy-menu-issue.txt +++ /dev/null @@ -1,52 +0,0 @@ -Summary: copy.sh menu issues on Debian host - -Symptoms -- Running copy.sh shows a black screen with a cursor; no visible menu. -- Running scripts/tui_menu.py directly renders an ncurses menu, but Express appears disabled. -- The host has ~/.config/hypr/v2.3.18 present. - -Changes already made (in repo) -- Added Python TUI (scripts/tui_menu.py) with backends: Textual -> curses -> basic; mouse + keyboard; hotkeys; Help panel. -- Updated scripts/copy_menu.sh to prefer Python TUI and to accept COPY_TUI_BACKEND=auto|textual|curses|basic, passing --express-supported accordingly. -- Hardened curses drawing to avoid blank screens (use_default_colors, safer bounds). -- Fixed Express detection in copy.sh to pick the highest version marker (sort -V) under ~/.config/hypr (vX.Y.Z). - -Why Express shows disabled when running the TUI directly -- scripts/tui_menu.py defaults to --express-supported=0 unless told otherwise. When launched by copy.sh, it is passed the correct flag. Running it manually without the flag will show Express as disabled. - -Immediate workaround on the Debian host -1) Ensure you have the latest repo changes - git --no-pager status - git pull --ff-only - -2) Force the curses backend to avoid the black Textual screen - # one-shot - COPY_TUI_BACKEND=curses ./copy.sh - # or set permanently for the session - export COPY_TUI_BACKEND=curses - ./copy.sh - -3) If curses ever fails to render, use the basic fallback - COPY_TUI_BACKEND=basic ./copy.sh - -4) To test the TUI directly with Express allowed - python3 scripts/tui_menu.py --express-supported 1 --backend curses - -Verify Express detection on the host -- Confirm the installed version marker and what copy.sh will see: - find "$HOME/.config/hypr" -maxdepth 1 -type f -name 'v*.*.*' -printf '%f\n' | sed 's/^v//' | sort -V | tail -n1 -- Expected output: 2.3.18 (or newer). If empty, create the marker: - : > "$HOME/.config/hypr/v2.3.18" - -If black screen persists with copy.sh -- Dump debug logs for the menu selection phase: - set -x; COPY_TUI_BACKEND=curses bash -c 'source scripts/copy_menu.sh; show_copy_menu 1; echo "CHOICE=$COPY_MENU_CHOICE"'; set +x -- Check TERM and Python TUI dependency situations: - echo "$TERM" - command -v python3 || true - python3 -c "import curses; print('curses OK')" || true - -Notes for future session -- copy_menu.sh already honors COPY_TUI_BACKEND and falls back to whiptail/text if Python fails. -- copy.sh now uses highest version marker to enable Express; the marker must be a file named exactly vX.Y.Z under ~/.config/hypr. -- If this host lacks Textual (rich) and shows black screen in Textual, forcing curses via COPY_TUI_BACKEND=curses is the recommended run mode on Debian for now. diff --git a/scripts/copy_menu.sh b/scripts/copy_menu.sh index 258c2fae..87f9301f 100755 --- a/scripts/copy_menu.sh +++ b/scripts/copy_menu.sh @@ -22,47 +22,17 @@ show_copy_menu() { local quit_desc="Exit without changes" local choice="" - - # Prefer Python TUI if available (mouse + keyboard, styled hotkeys, help) - # Determine repo dir robustly: prefer SCRIPT_DIR if set by caller (copy.sh); fallback to this file's parent - local __self_dir __repo_dir - __self_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" - __repo_dir="${SCRIPT_DIR:-$(cd "${__self_dir}/.." 2>/dev/null && pwd)}" - local py_menu="${__repo_dir}/scripts/tui_menu.py" -if command -v python3 >/dev/null 2>&1 && [ -f "$py_menu" ]; then - # Allow forcing backend via COPY_TUI_BACKEND=auto|textual|curses|basic - if [ -n "$COPY_TUI_BACKEND" ]; then - if choice=$(python3 "$py_menu" --express-supported "$express_supported" --backend "$COPY_TUI_BACKEND"); then - COPY_MENU_CHOICE="$choice" - return 0 - fi - else - if choice=$(python3 "$py_menu" --express-supported "$express_supported"); then - COPY_MENU_CHOICE="$choice" - return 0 - fi - fi - fi - - # Fallback to whiptail if present - if command -v whiptail >/dev/null 2>&1; then - if ! choice=$(whiptail --title "$menu_title" --menu "$prompt" 17 60 8 \ - "$install_tag" "$install_desc" \ - "$upgrade_tag" "$upgrade_desc" \ - "$express_tag" "$express_desc" \ - "$update_tag" "$update_desc" \ - "$quit_tag" "$quit_desc" 3>&1 1>&2 2>&3); then - COPY_MENU_CHOICE="quit" - return 1 - fi - else - # Plain-text fallback + run_basic_menu() { while true; do printf "\n%s\n" "$menu_title" printf "%s\n" "$prompt" printf " 1) Install - %s\n" "$install_desc" printf " 2) Upgrade - %s\n" "$upgrade_desc" - printf " 3) Express - %s\n" "$express_desc" + if [ "$express_supported" -eq 1 ]; then + printf " 3) Express - %s\n" "$express_desc" + else + printf " 3) Express - %s (disabled)\n" "$express_desc" + fi printf " 4) Update - %s\n" "$update_desc" printf " 5) Quit - %s\n" "$quit_desc" printf "Enter choice [1-5]: " @@ -70,12 +40,41 @@ if command -v python3 >/dev/null 2>&1 && [ -f "$py_menu" ]; then case "$text_choice" in 1) choice="$install_tag"; break ;; 2) choice="$upgrade_tag"; break ;; - 3) choice="$express_tag"; break ;; + 3) + if [ "$express_supported" -eq 1 ]; then + choice="$express_tag" + break + else + echo "Express is disabled on this system." + fi + ;; 4) choice="$update_tag"; break ;; 5) choice="$quit_tag"; break ;; *) echo "Invalid selection. Please choose 1-5." ;; esac done + } + + if [ "$COPY_TUI_BACKEND" = "basic" ]; then + run_basic_menu + COPY_MENU_CHOICE="$choice" + return 0 + fi + + # Fallback to whiptail if present + if command -v whiptail >/dev/null 2>&1; then + if ! choice=$(whiptail --title "$menu_title" --menu "$prompt" 17 60 8 \ + "$install_tag" "$install_desc" \ + "$upgrade_tag" "$upgrade_desc" \ + "$express_tag" "$express_desc" \ + "$update_tag" "$update_desc" \ + "$quit_tag" "$quit_desc" 3>&1 1>&2 2>&3); then + COPY_MENU_CHOICE="quit" + return 1 + fi + else + # Plain-text fallback + run_basic_menu fi # shellcheck disable=SC2034 # used by parent script after sourcing this file diff --git a/scripts/tui_menu.py b/scripts/tui_menu.py deleted file mode 100755 index d57ba1ac..00000000 --- a/scripts/tui_menu.py +++ /dev/null @@ -1,340 +0,0 @@ -#!/usr/bin/env python3 -# Simple TUI menu for Hyprland-Dots copy workflow -# - Prefers Textual (rich) for a nicer UI with mouse + keyboard -# - Falls back to curses if Textual is unavailable -# - Prints the chosen action (Install|Upgrade|Express|Update|Quit) to stdout - -from __future__ import annotations - -import argparse -import os -import sys - -CHOICES = [ - ("Install", "Fresh copy of the dotfiles into ~/.config"), - ("Upgrade", "Backups + interactive prompts"), - ("Express", "Skips restore prompts and large wallpaper download"), - ("Update", "Update this repo: stash local changes, git pull"), - ("Help", "Explain the options shown here"), - ("Quit", "Exit without making changes"), -] - -HELP_TEXT = ( - "Install: Perform a fresh copy of configs into ~/.config.\n" - "Upgrade: Back up existing configs and prompt to restore what you want.\n" - "Express: Faster upgrade (requires installed dots >= the minimum version).\n" - "Update: Safely update this Git repo (stash local changes, then git pull).\n" - "Quit: Exit without making changes.\n\n" - "Tips:\n" - "- Use Up/Down or mouse to select, Enter to confirm.\n" - "- Press the highlighted first letter (I/U/E/U/Q/H) as a shortcut.\n" - "- Press h or ? at any time to view this help.\n" -) - - -def main() -> int: - parser = argparse.ArgumentParser() - parser.add_argument("--express-supported", default="0", choices=["0", "1"], help="Whether Express is allowed (1) or not (0)") - parser.add_argument("--backend", default=os.environ.get("COPY_TUI_BACKEND", "auto"), choices=["auto", "textual", "curses", "basic"], help="Choose UI backend") - args = parser.parse_args() - express_supported = args.express_supported == "1" - backend = args.backend - - if backend == "textual": - return run_textual(express_supported) - if backend == "curses": - return run_curses(express_supported) - if backend == "basic": - return run_basic(express_supported) - - # auto: Try Textual, then curses, then basic - try: - return run_textual(express_supported) - except Exception: - pass - try: - return run_curses(express_supported) - except Exception: - return run_basic(express_supported) - - -def stylize_first_letter(label: str) -> tuple[str, str]: - # returns (styled_label_for_ui, hotkey) - hotkey = label[0].upper() - rest = label[1:] - # Textual Rich markup: bold + accent color for the first letter - styled = f"[b][cyan]{hotkey}[/cyan][/b]{rest}" - return styled, hotkey - - -def run_textual(express_supported: bool) -> int: - from textual.app import App, ComposeResult - from textual.widgets import Header, Footer, Static, Button - from textual.containers import Vertical - from textual.reactive import reactive - from textual import events - - class MenuButton(Button): - def __init__(self, label: str, choice_key: str, disabled: bool = False) -> None: - super().__init__(label, disabled=disabled) - self.choice_key = choice_key - - class MenuApp(App): - CSS = """ - Screen { background: black; } - #title { content-align: center middle; height: 3; color: white; } - Vertical { width: 80; max-width: 90; margin: 1 auto; } - Button { margin: 1 0; padding: 1 2; border: round cornflowerblue; } - Button:hover { background: rgba(100,100,255,0.1); } - Button.-disabled { color: grey50; border: round grey35; } - #help { padding: 1 2; border: round grey42; height: auto; } - """ - - selected: reactive[str | None] = reactive(None) - - def compose(self) -> ComposeResult: # type: ignore[override] - yield Header(show_clock=False) - yield Static("KooL's Hyprland Dotfiles", id="title") - with Vertical(): - # Build buttons - for (name, _desc) in CHOICES: - if name == "Express" and not express_supported: - styled, _hk = stylize_first_letter(name) - yield MenuButton(f"{styled} [grey62](requires newer installed dots)\n[/grey62]", name, disabled=True) - else: - styled, _hk = stylize_first_letter(name) - yield MenuButton(styled, name) - yield Static("Press h or ? for help", id="help") - yield Footer() - - def on_button_pressed(self, event: Button.Pressed) -> None: # type: ignore[override] - btn = event.button - if isinstance(btn, MenuButton): - if btn.choice_key == "Help": - self.show_help() - return - if btn.choice_key == "Express" and not express_supported: - return - self.selected = btn.choice_key - self.exit_app() - - def action_quit(self) -> None: # Esc - self.exit_app("Quit") - - BINDINGS = [ - ("escape", "quit", "Quit"), - ("i", "select('Install')", "Install"), - ("u", "select('Upgrade')", "Upgrade"), - ("e", "select('Express')", "Express"), - ("d", "select('Update')", "Update"), - ("q", "select('Quit')", "Quit"), - ("h", "help", "Help"), - ("?", "help", "Help"), - ("enter", "activate", "Select"), - ] - - def action_select(self, name: str) -> None: - if name == "Express" and not express_supported: - return - if name == "Help": - self.show_help() - return - self.selected = name - self.exit_app() - - def action_help(self) -> None: - self.show_help() - - def action_activate(self) -> None: - # Activate focused button - focused = self.focused - if isinstance(focused, MenuButton): - self.on_button_pressed(Button.Pressed(focused)) - - def show_help(self) -> None: - self.push_screen(HelpScreen()) - - def exit_app(self, fallback: str | None = None) -> None: - result = self.selected or fallback - if result: - print(result) - self.exit(0) - - from textual.screen import ModalScreen - - class HelpScreen(ModalScreen[None]): - def compose(self) -> ComposeResult: # type: ignore[override] - yield Static("[b]Help[/b]\n\n" + HELP_TEXT, id="help") - - BINDINGS = [("escape", "dismiss", "Close"), ("q", "dismiss", "Close")] - - def action_dismiss(self) -> None: - self.dismiss(None) - - app = MenuApp() - app.run() - return 0 - - -def run_curses(express_supported: bool) -> int: - import curses - - labels = [name for (name, _d) in CHOICES] - - def draw_menu(stdscr, idx: int, show_help: bool) -> None: - stdscr.clear() - h, w = stdscr.getmaxyx() - title = "KooL's Hyprland Dotfiles" - stdscr.attron(curses.A_BOLD) - stdscr.addstr(1, max(2, (w - len(title)) // 2), title) - stdscr.attroff(curses.A_BOLD) - - y = 4 - for i, name in enumerate(labels): - disabled = (name == "Express" and not express_supported) - hk = name[0].upper() - rest = name[1:] - if i == idx: - stdscr.attron(curses.A_REVERSE) - # First letter styled - stdscr.attron(curses.color_pair(1) | curses.A_BOLD) - stdscr.addstr(y, 4, hk) - stdscr.attroff(curses.color_pair(1) | curses.A_BOLD) - if disabled: - stdscr.attron(curses.A_DIM) - stdscr.addstr(y, 5, rest) - if disabled: - msg = " (requires newer installed dots)" - stdscr.addstr(y, 5 + len(rest), msg, curses.A_DIM) - stdscr.attroff(curses.A_DIM) - if i == idx: - stdscr.attroff(curses.A_REVERSE) - y += 2 - - info = "Enter=Select Up/Down=Move Mouse=Click h/?=Help q=Quit" - stdscr.addstr(h - 2, 2, info[: max(0, w - 4)]) - - if show_help: - box_w = min(w - 6, 76) - box_h = min(12, h - 6) - bx = max(2, (w - box_w) // 2) - by = max(2, (h - box_h) // 2) - for yy in range(by, by + box_h): - stdscr.addstr(yy, bx, " " * max(0, box_w), curses.color_pair(3)) - stdscr.attron(curses.A_BOLD) - stdscr.addstr(by, bx + 2, "Help") - stdscr.attroff(curses.A_BOLD) - for i, line in enumerate(HELP_TEXT.splitlines()[: max(0, box_h - 3)]): - stdscr.addstr(by + 2 + i, bx + 2, line[: max(0, box_w - 4)]) - stdscr.addstr(by + box_h - 2, bx + 2, "Press q or Esc to close help") - - stdscr.refresh() - - def loop(stdscr) -> str: - curses.curs_set(0) - curses.mousemask(1) - curses.start_color() - try: - curses.use_default_colors() - except Exception: - pass - try: - curses.init_pair(1, curses.COLOR_CYAN, -1) - except Exception: - curses.init_pair(1, curses.COLOR_CYAN, 0) - try: - curses.init_pair(3, curses.COLOR_WHITE, curses.COLOR_BLUE) - except Exception: - curses.init_pair(3, curses.COLOR_WHITE, 0) - idx = 0 - showing_help = False - - while True: - draw_menu(stdscr, idx, showing_help) - ch = stdscr.getch() - if showing_help: - if ch in (ord('q'), ord('Q'), 27): - showing_help = False - continue - - if ch in (curses.KEY_UP, ord('k')): - idx = (idx - 1) % len(labels) - elif ch in (curses.KEY_DOWN, ord('j')): - idx = (idx + 1) % len(labels) - elif ch in (ord('h'), ord('?')): - showing_help = True - elif ch in (ord('q'), 27): - return "Quit" - elif ch == curses.KEY_MOUSE: - try: - _, mx, my, _, _ = curses.getmouse() - base_y = 4 - if my >= base_y: - clicked = (my - base_y) // 2 - if 0 <= clicked < len(labels): - name = labels[clicked] - if name == "Help": - showing_help = True - elif name == "Express" and not express_supported: - pass - else: - return name - except Exception: - pass - elif ch in (curses.KEY_ENTER, 10, 13): - name = labels[idx] - if name == "Help": - showing_help = True - elif name == "Express" and not express_supported: - pass - else: - return name - else: - try: - key = chr(ch).lower() if 0 <= ch < 256 else "" - except Exception: - key = "" - mapping = {"i": "Install", "u": "Upgrade", "e": "Express", "d": "Update", "q": "Quit", "h": "Help"} - if key in mapping: - name = mapping[key] - if name == "Help": - showing_help = True - elif name == "Express" and not express_supported: - pass - else: - return name - - choice = curses.wrapper(loop) - print(choice) - return 0 - - -def run_basic(express_supported: bool) -> int: - # Minimal stdin-only fallback - options = [n for (n, _d) in CHOICES] - while True: - print("Select:") - for i, name in enumerate(options, 1): - if name == "Express" and not express_supported: - print(f" {i}) {name} (disabled)") - else: - print(f" {i}) {name}") - try: - sel = input("> ").strip() - except EOFError: - print("Quit") - return 0 - if sel.isdigit(): - idx = int(sel) - 1 - if 0 <= idx < len(options): - choice = options[idx] - if choice == "Express" and not express_supported: - continue - if choice == "Help": - print(HELP_TEXT) - continue - print(choice) - return 0 - -if __name__ == "__main__": - sys.exit(main()) -- cgit v1.2.3 From 0ae0a5a8519357addde8cf6a7aa87ba0db0f68b1 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Thu, 15 Jan 2026 02:39:24 -0500 Subject: Added small script to automate the updating of dotfiles It will check for new version and git stash && git pull On branch development Your branch is up to date with 'origin/development'. Changes to be committed: new file: update-dots.sh --- update-dots.sh | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100755 update-dots.sh diff --git a/update-dots.sh b/update-dots.sh new file mode 100755 index 00000000..84bd7611 --- /dev/null +++ b/update-dots.sh @@ -0,0 +1,81 @@ +#!/usr/bin/env bash +set -euo pipefail +IFS=$'\n\t' + +if [[ -t 1 ]]; then + BOLD="$(tput bold || true)" + DIM="$(tput dim || true)" + RED="$(tput setaf 1 || true)" + GREEN="$(tput setaf 2 || true)" + YELLOW="$(tput setaf 3 || true)" + BLUE="$(tput setaf 4 || true)" + RESET="$(tput sgr0 || true)" +else + BOLD=""; DIM=""; RED=""; GREEN=""; YELLOW=""; BLUE=""; RESET="" +fi + +log() { printf "%b\n" "${BLUE}==>${RESET} $*"; } +ok() { printf "%b\n" "${GREEN}βœ”${RESET} $*"; } +warn() { printf "%b\n" "${YELLOW}⚠${RESET} $*"; } +err() { printf "%b\n" "${RED}βœ–${RESET} $*"; } + +log "${BOLD}Hyprland-Dots updater${RESET}" + +if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then + err "Not inside a git repository." + exit 1 +fi + +branch="$(git rev-parse --abbrev-ref HEAD)" +if [[ "$branch" == "HEAD" ]]; then + warn "Detached HEAD state detected." +fi + +log "Fetching remote updates..." +git fetch --tags --quiet + +upstream="" +if git rev-parse --abbrev-ref --symbolic-full-name "@{u}" >/dev/null 2>&1; then + upstream="$(git rev-parse --abbrev-ref --symbolic-full-name "@{u}")" +else + if git show-ref --verify --quiet "refs/remotes/origin/${branch}"; then + upstream="origin/${branch}" + fi +fi + +if [[ -z "$upstream" ]]; then + err "No upstream found for branch '${branch}'." + exit 1 +fi + +log "Current branch: ${BOLD}${branch}${RESET}" +log "Upstream: ${BOLD}${upstream}${RESET}" + +behind_count="$(git rev-list --count "HEAD..${upstream}")" +ahead_count="$(git rev-list --count "${upstream}..HEAD")" + +if [[ "$behind_count" -eq 0 ]]; then + ok "Already up to date with ${upstream}." + if [[ "$ahead_count" -gt 0 ]]; then + warn "Local branch is ahead by ${ahead_count} commit(s)." + fi + exit 0 +fi + +warn "Updates available: behind by ${behind_count} commit(s)." +read -r -p "Update now? [y/N] " reply +case "${reply:-}" in + y|Y|yes|YES) + log "Stashing local changes..." + git stash -u + + log "Pulling latest changes from ${upstream}..." + git pull + + ok "Update complete." + printf "%b\n" "${DIM}Next: run ./copy.sh to upgrade the Hyprland dotfiles.${RESET}" + ;; + *) + warn "Update cancelled." + ;; +esac -- cgit v1.2.3 From 17ef56989c03094af99d68a82aadcdf6e32c791e Mon Sep 17 00:00:00 2001 From: Don Williams Date: Thu, 15 Jan 2026 10:57:38 -0500 Subject: Added new waybar config tuned for ML4W glass style On branch development Your branch is up to date with 'origin/development'. Changes to be committed: new file: config/waybar/configs/[TOP & BOT] SummitSplit-glass --- .../waybar/configs/[TOP & BOT] SummitSplit-glass | 93 ++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 config/waybar/configs/[TOP & BOT] SummitSplit-glass diff --git a/config/waybar/configs/[TOP & BOT] SummitSplit-glass b/config/waybar/configs/[TOP & BOT] SummitSplit-glass new file mode 100644 index 00000000..feef4e76 --- /dev/null +++ b/config/waybar/configs/[TOP & BOT] SummitSplit-glass @@ -0,0 +1,93 @@ +/* ---- πŸ’« https://github.com/JaKooLit πŸ’« ---- */ + +// ### DUAL TOP and BOTTOM ### // + +[{ +"include": [ + "$HOME/.config/waybar/Modules", + "$HOME/.config/waybar/ModulesWorkspaces", + "$HOME/.config/waybar/ModulesCustom", + "$HOME/.config/waybar/ModulesGroups", + "$HOME/.config/waybar/UserModules", + ], +"layer": "top", +//"mode": "dock", +"exclusive": true, +"passthrough": false, +"position": "bottom", +"spacing": 3, +"fixed-center": true, +"ipc": true, +"margin-top": 1, +"margin-left": 8, +"margin-right": 8, + +"modules-left": [ + "cpu", + "power-profiles-daemon", + "temperature", + "memory", + "disk", + ], + +"modules-center": [ + "idle_inhibitor", + "clock", + "custom/light_dark", + ], + +"modules-right": [ + "custom/weather", + "battery", + "backlight", + "bluetooth", + "network", + "custom/updater", + "custom/cycle_wall", + "custom/nightlight", + "custom/lock", + ], +}, + +{ +"include": [ + "$HOME/.config/waybar/Modules", + "$HOME/.config/waybar/ModulesWorkspaces", + "$HOME/.config/waybar/ModulesCustom", + "$HOME/.config/waybar/ModulesGroups", + "$HOME/.config/waybar/UserModules", + ], +"layer": "top", +//"mode": "dock", +"exclusive": true, +"passthrough": false, +"position": "top", +"spacing": 5, +"fixed-center": true, +"ipc": true, +"height": 0, +"margin-left": 8, +"margin-right": 8, +//"gtk-layer-shell": true, +//"margin-bottom": 0, + +"modules-left": [ + "custom/menu", + "wlr/taskbar", + "hyprland/window", + "mpris", + ], + +"modules-center": [ + "hyprland/workspaces#rw", + ], + +"modules-right": [ + "tray", + "group/notify", + "pulseaudio", + //"wireplumber", + "pulseaudio#microphone", + "custom/power", + ], +}], -- cgit v1.2.3 From 15101c44651e1966e10f5942430bd8ad64078069 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Thu, 15 Jan 2026 11:10:26 -0500 Subject: Small fix to waybar disables wlr/taskbar On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/waybar/configs/[TOP & BOT] SummitSplit-glass --- config/waybar/configs/[TOP & BOT] SummitSplit-glass | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/waybar/configs/[TOP & BOT] SummitSplit-glass b/config/waybar/configs/[TOP & BOT] SummitSplit-glass index feef4e76..0c36cc14 100644 --- a/config/waybar/configs/[TOP & BOT] SummitSplit-glass +++ b/config/waybar/configs/[TOP & BOT] SummitSplit-glass @@ -73,7 +73,7 @@ "modules-left": [ "custom/menu", - "wlr/taskbar", + // "wlr/taskbar", "hyprland/window", "mpris", ], -- cgit v1.2.3 From 166a68702e3fe9cece86dbc1be54efe3240cfbb4 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Thu, 15 Jan 2026 17:29:37 -0500 Subject: Added glass varient to default laptop config On branch development Your branch is up to date with 'origin/development'. Changes to be committed: new file: config/waybar/configs/[TOP] Default Laptop-glass --- config/waybar/configs/[TOP] Default Laptop-glass | 51 ++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 config/waybar/configs/[TOP] Default Laptop-glass diff --git a/config/waybar/configs/[TOP] Default Laptop-glass b/config/waybar/configs/[TOP] Default Laptop-glass new file mode 100644 index 00000000..2a6db533 --- /dev/null +++ b/config/waybar/configs/[TOP] Default Laptop-glass @@ -0,0 +1,51 @@ +/* ---- πŸ’« https://github.com/JaKooLit πŸ’« ---- */ + +// ### DEFAULT Laptop - Top ### // +{ +"include": [ + "$HOME/.config/waybar/Modules", + "$HOME/.config/waybar/ModulesWorkspaces", + "$HOME/.config/waybar/ModulesCustom", + "$HOME/.config/waybar/ModulesGroups", + "$HOME/.config/waybar/UserModules", + ], +"layer": "top", +//"mode": "dock", +"exclusive": true, +"passthrough": false, +"position": "top", +"spacing": 3, +"fixed-center": true, +"ipc": true, +"margin-top": 3, +"margin-left": 8, +"margin-right": 8, + +"modules-left": [ + "custom/separator#blank", + "custom/cava_mviz", + "custom/separator#blank", + "custom/playerctl", + "hyprland/window", + ], + +"modules-center": [ + "group/app_drawer", + "custom/separator#blank", + "group/notify", + "hyprland/workspaces#rw", + "clock", + "custom/weather", + "idle_inhibitor", + "custom/hint", + ], + +"modules-right": [ + "tray", + "group/laptop", + "group/mobo_drawer", + "group/audio", + "custom/nightlight", + "group/status", + ], +} -- cgit v1.2.3 From fc859cf1d492cd8b37d0ea8fdc4b06dcfe3f4dfd Mon Sep 17 00:00:00 2001 From: Don Williams Date: Thu, 15 Jan 2026 19:30:40 -0500 Subject: Added Everforest-glass config for ML4W glass style(scope): title On branch development Your branch is up to date with 'origin/development'. Changes to be committed: new file: config/waybar/configs/[TOP] Everforest-glass --- config/waybar/configs/[TOP] Everforest-glass | 143 +++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 config/waybar/configs/[TOP] Everforest-glass diff --git a/config/waybar/configs/[TOP] Everforest-glass b/config/waybar/configs/[TOP] Everforest-glass new file mode 100644 index 00000000..8032f216 --- /dev/null +++ b/config/waybar/configs/[TOP] Everforest-glass @@ -0,0 +1,143 @@ +/* ---- πŸ’« https://github.com/JaKooLit πŸ’« ---- */ +/* -- designed by https://github.com/DevNChill */ +// ### Everforest ### // + +{ +"include": [ + "$HOME/.config/waybar/Modules", + "$HOME/.config/waybar/ModulesWorkspaces", + "$HOME/.config/waybar/ModulesCustom", + "$HOME/.config/waybar/ModulesGroups", + "$HOME/.config/waybar/UserModules", + ], +"layer": "top", +//"mode": "dock", +"exclusive": true, +"passthrough": false, +"position": "top", +//"spacing": 6, +"fixed-center": true, +"ipc": true, +//"margin-top": 3, +//"margin-left": 8, +//"margin-right": 8, + +"modules-left": [ + "custom/arch", + "hyprland/workspaces#rw", +// "mpris", + "group/notify", + "tray", + ], +"modules-center": [ + "clock#forest", + "idle_inhibitor", + ], +"modules-right": [ + "cpu#forest", + "memory#forest", + "temperature#forest", + "disk#forest", + "backlight", + "battery#forest", + "group/audio", + "custom/nightlight", + ], + +// Additional / Edited Waybar Modules // +"custom/arch": { + "format":"οŒƒ ", + "tooltip": false, + "on-click": "rofi -show drun" +}, +"clock#forest": { + "format": "{:L%A %d.%m.%Y - %H:%M}", + "tooltip-format": "{:%Y %B}\n{calendar}", + "calendar-weeks-pos": "right", + "today-format": "{}", + "format-calendar": "{}", + "format-calendar-weeks": "W{:%V}", + "format-calendar-weekdays": "{}", + "on-scroll": { + "calendar": 1 + } +}, +"battery#forest": { + //"interval": 5, + "align": 0, + "rotate": 0, + //"bat": "BAT1", + //"adapter": "ACAD", + "full-at": 100, + "design-capacity": false, + "states": { + "good": 95, + "warning": 30, + "critical": 15 + }, + "format": "Battery {icon} {capacity}%", + "format-charging": "Battery  {capacity}%", + "format-plugged": "Battery σ±˜– {capacity}%", + "format-alt-click": "click", + "format-full": "Battery {icon} Full", + "format-alt": "Battery {icon} {time}", + "format-icons": [ + "σ°‚Ž", "󰁺", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "σ°‚€", "󰂁", "σ°‚‚", "󰁹" + ], + "format-time": "{H}h {M}min", + "tooltip": true, + "tooltip-format": "{timeTo} {power}w", + "on-click-middle": "$HOME/.config/hypr/scripts/ChangeBlur.sh", + "on-click-right": "$HOME/.config/hypr/scripts/Wlogout.sh", +}, + +"cpu#forest": { + "format": "Cpu 󰍛 {usage}%", + "interval": 1, + "min-length": 5, + "format-alt-click": "click", + "format-alt": "{icon0}{icon1}{icon2}{icon3} {usage:>2}% 󰍛", + "format-icons": [ + "▁", "β–‚", "β–ƒ", "β–„", "β–…", "β–†", "β–‡", "β–ˆ" + ], + "on-click-right": "gnome-system-monitor", +}, + +"disk#forest": { + "interval": 30, + //"format": "Disk σ°‹Š", + "path": "/", + //"format-alt-click": "click", + "format": "Disk σ°‹Š {used}", + "on-click-right": "baobab", +// "tooltip": true, +// "tooltip-format": "Disk {used} used out of {total} on {path} ({percentage_used}%)", +}, + +"memory#forest": { + "interval": 10, + "format": "Ram σ°Ύ† {used:0.1f}G", + "format-alt": "Ram {percentage}% σ°Ύ†", + "format-alt-click": "click", + "tooltip": true, + "tooltip-format": "Ram {used:0.1f}GB/{total:0.1f}G", + "on-click-right": "kitty --title btop sh -c 'btop'" +}, +"temperature#forest": { + "interval": 10, + "tooltip": true, + "hwmon-path": [ + "/sys/class/hwmon/hwmon1/temp1_input", + "/sys/class/thermal/thermal_zone0/temp" + ], + //"thermal-zone": 0, + "critical-threshold": 82, + "format-critical": "Temp {icon} {temperatureC}Β°C", + "format": "Temp {icon} {temperatureC}Β°C", + "format-icons": [ + " 󰈸" + ], + "on-click-right": "kitty --title nvtop sh -c 'nvtop'" +}, +} + -- cgit v1.2.3 From 4105866c25176505f7d5c3962055345f78cfee80 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Thu, 15 Jan 2026 19:37:26 -0500 Subject: Updated CHANGELOG On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: CHANGELOG.md --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c88b8513..e22cb1be 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,15 @@ ## 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-13 - Added `Toggle Rainbow borders` option to settings menu - `SUPERSHIFT+E` search for `Rainbow` -- 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(-) 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(-) 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(-) 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(-) 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(-) 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(-) 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(-) diff --git a/config/hypr/scripts/Kool_Quick_Settings.sh b/config/hypr/scripts/Kool_Quick_Settings.sh index 7d9c1a70..2437bd11 100755 --- a/config/hypr/scripts/Kool_Quick_Settings.sh +++ b/config/hypr/scripts/Kool_Quick_Settings.sh @@ -169,19 +169,7 @@ rainbow_borders_menu() { "$rainbow_script" >/dev/null 2>&1 & fi - # Notify only if changed (friendly display) - local new_display="$current" - case "$current" in - wallust_random) new_display="Wallust Color" ;; - rainbow) new_display="Original Rainbow" ;; - gradient_flow) new_display="Gradient Flow" ;; - disabled) new_display="Disabled" ;; - esac - if [[ "$current" == "disabled" ]]; then - show_info "Rainbow Borders disabled." - else - show_info "Rainbow Borders: $new_display." - fi + # No notifications; mode is shown in the menu } # Function to display the menu options without numbers -- cgit v1.2.3 From a4837a1bede62aae3655931d9f69ecafd7acefcf Mon Sep 17 00:00:00 2001 From: brockar Date: Sat, 17 Jan 2026 00:13:48 -0300 Subject: fix: WindowRules settings btrf --- config/hypr/configs/WindowRules.conf | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/config/hypr/configs/WindowRules.conf b/config/hypr/configs/WindowRules.conf index 4f54215d..7fcf6b3b 100644 --- a/config/hypr/configs/WindowRules.conf +++ b/config/hypr/configs/WindowRules.conf @@ -98,6 +98,8 @@ windowrule = match:class ^(qt5ct|qt6ct)$, tag +settings windowrule = match:class (xdg-desktop-portal-gtk), tag +settings windowrule = match:class ^(org.kde.polkit-kde-authentication-agent-1)$, tag +settings windowrule = match:class ^([Rr]ofi)$, tag +settings +windowrule = match:class ^(btrfs-assistant)$, tag +settings +windowrule = match:class ^(timeshift-gtk)$, tag +settings # viewer tags windowrule = match:class ^(gnome-system-monitor|org.gnome.SystemMonitor|io.missioncenter.MissionCenter)$, tag +viewer @@ -112,8 +114,8 @@ windowrule = match:tag multimedia, opacity 1.0 # POSITION windowrule = match:tag KooL_Cheat, center on -windowrule = match:title ^(ROG Control)$, center on windowrule = match:tag KooL-Settings, center on +windowrule = match:title ^(ROG Control)$, center on windowrule = match:title ^(Keybindings)$, center on windowrule = match:class ^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$, center on windowrule = match:class ^([Ff]erdium)$, center on @@ -125,7 +127,7 @@ windowrule = idle_inhibit fullscreen, match:class ^(*)$ windowrule = idle_inhibit fullscreen, match:title ^(*)$ # FLOAT -windowrule = match:tag KooL_Cheat, float on, center on +windowrule = match:tag KooL_Cheat, float on windowrule = match:tag wallpaper, float on, center on windowrule = match:tag settings, float on, center on windowrule = match:tag viewer, float on, center on @@ -188,11 +190,9 @@ layerrule = match:namespace quickshell:overview, ignore_alpha 0.5 windowrule { name = Whatsapp-zapzap match:class = ^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$ - float = on size = (monitor_w*0.6) (monitor_h*0.7) center = on } -# Picture-in-Picture windowrule { name = Picture-in-Picture match:title = ^(Picture-in-Picture)$ @@ -203,7 +203,6 @@ windowrule { keep_aspect_ratio = on size = (monitor_w*0.3) (monitor_h*0.3) } - # Thunar copy progress dialog windowrule { name = Thunar-Progress-bar @@ -214,4 +213,3 @@ windowrule { size = (monitor_w*0.26) (monitor_h*0.18) } - -- cgit v1.2.3 From ed06798cf9004b160d267a2452d06fdd25818059 Mon Sep 17 00:00:00 2001 From: brockar Date: Sat, 17 Jan 2026 00:14:25 -0300 Subject: fix: update WindowRules-config-v3.conf Now WindowRules = WindowRules-config-v3 --- config/hypr/configs/WindowRules-config-v3.conf | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/config/hypr/configs/WindowRules-config-v3.conf b/config/hypr/configs/WindowRules-config-v3.conf index 00c98644..7fcf6b3b 100644 --- a/config/hypr/configs/WindowRules-config-v3.conf +++ b/config/hypr/configs/WindowRules-config-v3.conf @@ -42,8 +42,9 @@ windowrule = match:class ^(nwg-displays|nwg-look)$, tag +KooL-Settings windowrule = match:class ^(Alacritty|kitty|kitty-dropterm)$, tag +terminal # email tags -windowrule = match:class ^([Tt]hunderbird|org.gnome.Evolution)$, tag +email +windowrule = match:class ^([Tt]hunderbird|org.mozilla.Thunderbird)$, tag +email windowrule = match:class ^(eu.betterbird.Betterbird)$, tag +email +windowrule = match:class ^(org.gnome.Evolution)$, tag +email # project tags windowrule = match:class ^(codium|codium-url-handler|VSCodium)$, tag +projects @@ -97,6 +98,8 @@ windowrule = match:class ^(qt5ct|qt6ct)$, tag +settings windowrule = match:class (xdg-desktop-portal-gtk), tag +settings windowrule = match:class ^(org.kde.polkit-kde-authentication-agent-1)$, tag +settings windowrule = match:class ^([Rr]ofi)$, tag +settings +windowrule = match:class ^(btrfs-assistant)$, tag +settings +windowrule = match:class ^(timeshift-gtk)$, tag +settings # viewer tags windowrule = match:class ^(gnome-system-monitor|org.gnome.SystemMonitor|io.missioncenter.MissionCenter)$, tag +viewer @@ -111,8 +114,8 @@ windowrule = match:tag multimedia, opacity 1.0 # POSITION windowrule = match:tag KooL_Cheat, center on -windowrule = match:title ^(ROG Control)$, center on windowrule = match:tag KooL-Settings, center on +windowrule = match:title ^(ROG Control)$, center on windowrule = match:title ^(Keybindings)$, center on windowrule = match:class ^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$, center on windowrule = match:class ^([Ff]erdium)$, center on @@ -125,10 +128,10 @@ windowrule = idle_inhibit fullscreen, match:title ^(*)$ # FLOAT windowrule = match:tag KooL_Cheat, float on -windowrule = match:tag wallpaper, float on -windowrule = match:tag settings, float on -windowrule = match:tag viewer, float on -windowrule = match:tag KooL-Settings, float on +windowrule = match:tag wallpaper, float on, center on +windowrule = match:tag settings, float on, center on +windowrule = match:tag viewer, float on, center on +windowrule = match:tag KooL-Settings, float on, center on windowrule = match:class ([Zz]oom|onedriver|onedriver-launcher), float on windowrule = match:class (org.gnome.Calculator|qalculate-gtk), float on windowrule = match:class ^(mpv|com.github.rafostar.Clapper)$, float on @@ -187,11 +190,9 @@ layerrule = match:namespace quickshell:overview, ignore_alpha 0.5 windowrule { name = Whatsapp-zapzap match:class = ^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$ - float = on size = (monitor_w*0.6) (monitor_h*0.7) center = on } -# Picture-in-Picture windowrule { name = Picture-in-Picture match:title = ^(Picture-in-Picture)$ @@ -202,7 +203,6 @@ windowrule { keep_aspect_ratio = on size = (monitor_w*0.3) (monitor_h*0.3) } - # Thunar copy progress dialog windowrule { name = Thunar-Progress-bar @@ -213,4 +213,3 @@ windowrule { size = (monitor_w*0.26) (monitor_h*0.18) } - -- cgit v1.2.3 From fedec77164a973edfb03e6a8d60382dc62f30f1d Mon Sep 17 00:00:00 2001 From: brockar Date: Sat, 17 Jan 2026 00:18:09 -0300 Subject: fix: WR Hyprland startup --- config/hypr/configs/WindowRules.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/config/hypr/configs/WindowRules.conf b/config/hypr/configs/WindowRules.conf index 7fcf6b3b..24af7e70 100644 --- a/config/hypr/configs/WindowRules.conf +++ b/config/hypr/configs/WindowRules.conf @@ -148,6 +148,7 @@ windowrule = match:title ^(Save As)$, float on, size (monitor_w*0.7) (monitor_h* windowrule = match:initial_title (Open Files), float on, size (monitor_w*0.7) (monitor_h*0.6) windowrule = match:title ^(SDDM Background)$, float on, center on, size (monitor_w*0.16) (monitor_h*0.12) windowrule = match:class ^(yad)$, float on, center on, size (monitor_w*0.2) (monitor_h*0.2) +windowrule = match:class ^(hyprland-donate-screen)$, float on, center on # OPACITY windowrule = match:tag browser, opacity 0.99 0.8 -- cgit v1.2.3 From 3363d48f00d92bbefe1a65c5331a5671ef88ae6a Mon Sep 17 00:00:00 2001 From: Don Williams Date: Fri, 16 Jan 2026 22:22:14 -0500 Subject: Disabled RainbowBorders by default use quick settings to enable The new mode select menu for RainbowBorders makes the prompt at install redundant. Especially when upgrading On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: CHANGELOG.md renamed: config/hypr/UserScripts/RainbowBorders.sh -> config/hypr/UserScripts/RainbowBorders.bak.sh modified: config/hypr/configs/Startup_Apps.conf modified: copy.sh modified: scripts/lib_prompts.sh --- CHANGELOG.md | 2 + config/hypr/UserScripts/RainbowBorders.bak.sh | 89 +++++++++++++++++++++++++++ config/hypr/UserScripts/RainbowBorders.sh | 89 --------------------------- config/hypr/configs/Startup_Apps.conf | 4 +- copy.sh | 1 - scripts/lib_prompts.sh | 21 ------- 6 files changed, 93 insertions(+), 113 deletions(-) create mode 100755 config/hypr/UserScripts/RainbowBorders.bak.sh delete mode 100755 config/hypr/UserScripts/RainbowBorders.sh diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a9ecb61..8ae7c154 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,8 @@ - There are now mulitple modes for the Rainbow Borders feature - `Disabled`, `Wallust Color`, `Rainbow`, `Gradient flow` - Thank you for the submission +- Disabled `RainbowBorders.sh` by default +- Use the quick setings menu `SUPERSHIFT + E` to enable, select mode - 2026-01-15 - Created waybar configs for ML4W Glass style diff --git a/config/hypr/UserScripts/RainbowBorders.bak.sh b/config/hypr/UserScripts/RainbowBorders.bak.sh new file mode 100755 index 00000000..67269b8a --- /dev/null +++ b/config/hypr/UserScripts/RainbowBorders.bak.sh @@ -0,0 +1,89 @@ +#!/usr/bin/env bash +# /* ---- πŸ’« https://github.com/JaKooLit πŸ’« ---- */ ## +# Smooth border cycling effect using Wallust palette or full rainbow + +# Possible values: "wallust_random", "rainbow", "gradient_flow" +EFFECT_TYPE="gradient_flow" + +WALLUST_COLORS_SOURCE="$HOME/.config/hypr/wallust/wallust-hyprland.conf" + +WALLUST_COLORS=() + +# ---------- LOAD WALLUST COLORS ---------- +if [[ "$EFFECT_TYPE" == "wallust_random" || "$EFFECT_TYPE" == "gradient_flow" ]]; then + # Accept either hex (0xffRRGGBB) or rgb(r,g,b) and normalize to 0xffRRGGBB + mapfile -t WALLUST_COLORS < <( + grep -E '^\$color[0-9]+' "$WALLUST_COLORS_SOURCE" | awk ' + function hex2(s){ return (length(s)==6 ? "0xff"s : ""); } + function rgb2(r,g,b){ return sprintf("0xff%02x%02x%02x", r, g, b); } + { + if (match($0, /0x([0-9a-fA-F]{8})/, m)) { print "0x" m[1]; next } + if (match($0, /#([0-9a-fA-F]{6})/, m)) { print hex2(m[1]); next } + if (match($0, /rgb\(([0-9]+),[ ]*([0-9]+),[ ]*([0-9]+)\)/, m)) { + print rgb2(m[1], m[2], m[3]); next + } + }' + ) + + if (( ${#WALLUST_COLORS[@]} == 0 )); then + # If wallust colors can't be loaded, fall back to random_hex + EFFECT_TYPE="rainbow" + fi +fi + +# ---------- RANDOM WALLUST COLORS ---------- +function wallust_random() { + echo "${WALLUST_COLORS[RANDOM % ${#WALLUST_COLORS[@]}]}" +} + +# ---------- RAINBOW COLORS ---------- +function random_hex() { + echo "0xff$(openssl rand -hex 3)" +} + +# ---------- FLOW MODE ---------- +BASE_COLOR="${WALLUST_COLORS[10]}" +GRAD1_COLOR="${WALLUST_COLORS[14]}" +GRAD2_COLOR="${WALLUST_COLORS[13]}" +GLOW_COLOR="${WALLUST_COLORS[15]}" + +MAX_POS=10 +GLOW_POS=0 + +function gradient_flow_color() { + local pos=$1 + local d=$(( pos - GLOW_POS )) + + # wrap distance (-9..9) + if (( d > MAX_POS/2 )); then d=$((d - MAX_POS)); fi + if (( d < -MAX_POS/2 )); then d=$((d + MAX_POS)); fi + + case "${d#-}" in + 0) echo "$GLOW_COLOR" ;; + 1) echo "$GRAD1_COLOR" ;; + 2) echo "$GRAD2_COLOR" ;; + *) echo "$BASE_COLOR" ;; + esac + + if (( pos == MAX_POS - 1 )); then + GLOW_POS=$(( (GLOW_POS + 1) % MAX_POS )) + fi +} + +# ---------- Main function ---------- + +function get_color() { + if [[ "$EFFECT_TYPE" == "wallust_random" && ${#WALLUST_COLORS[@]} -gt 0 ]]; then + wallust_random + elif [[ "$EFFECT_TYPE" == "gradient_flow" && ${#WALLUST_COLORS[@]} -ge 16 ]]; then + gradient_flow_color "$1" + else + random_hex + fi +} + +# border effect for ACTIVE window +hyprctl keyword general:col.active_border $(get_color 0) $(get_color 1) $(get_color 2) $(get_color 3) $(get_color 4) $(get_color 5) $(get_color 6) $(get_color 7) $(get_color 8) $(get_color 9) 270deg + +# border effect for INACTIVE windows +#hyprctl keyword general:col.inactive_border $(get_color 0) $(get_color 1) $(get_color 2) $(get_color 3) $(get_color 4) $(get_color 5) $(get_color 6) $(get_color 7) $(get_color 8) $(get_color 9) 270deg \ No newline at end of file diff --git a/config/hypr/UserScripts/RainbowBorders.sh b/config/hypr/UserScripts/RainbowBorders.sh deleted file mode 100755 index 67269b8a..00000000 --- a/config/hypr/UserScripts/RainbowBorders.sh +++ /dev/null @@ -1,89 +0,0 @@ -#!/usr/bin/env bash -# /* ---- πŸ’« https://github.com/JaKooLit πŸ’« ---- */ ## -# Smooth border cycling effect using Wallust palette or full rainbow - -# Possible values: "wallust_random", "rainbow", "gradient_flow" -EFFECT_TYPE="gradient_flow" - -WALLUST_COLORS_SOURCE="$HOME/.config/hypr/wallust/wallust-hyprland.conf" - -WALLUST_COLORS=() - -# ---------- LOAD WALLUST COLORS ---------- -if [[ "$EFFECT_TYPE" == "wallust_random" || "$EFFECT_TYPE" == "gradient_flow" ]]; then - # Accept either hex (0xffRRGGBB) or rgb(r,g,b) and normalize to 0xffRRGGBB - mapfile -t WALLUST_COLORS < <( - grep -E '^\$color[0-9]+' "$WALLUST_COLORS_SOURCE" | awk ' - function hex2(s){ return (length(s)==6 ? "0xff"s : ""); } - function rgb2(r,g,b){ return sprintf("0xff%02x%02x%02x", r, g, b); } - { - if (match($0, /0x([0-9a-fA-F]{8})/, m)) { print "0x" m[1]; next } - if (match($0, /#([0-9a-fA-F]{6})/, m)) { print hex2(m[1]); next } - if (match($0, /rgb\(([0-9]+),[ ]*([0-9]+),[ ]*([0-9]+)\)/, m)) { - print rgb2(m[1], m[2], m[3]); next - } - }' - ) - - if (( ${#WALLUST_COLORS[@]} == 0 )); then - # If wallust colors can't be loaded, fall back to random_hex - EFFECT_TYPE="rainbow" - fi -fi - -# ---------- RANDOM WALLUST COLORS ---------- -function wallust_random() { - echo "${WALLUST_COLORS[RANDOM % ${#WALLUST_COLORS[@]}]}" -} - -# ---------- RAINBOW COLORS ---------- -function random_hex() { - echo "0xff$(openssl rand -hex 3)" -} - -# ---------- FLOW MODE ---------- -BASE_COLOR="${WALLUST_COLORS[10]}" -GRAD1_COLOR="${WALLUST_COLORS[14]}" -GRAD2_COLOR="${WALLUST_COLORS[13]}" -GLOW_COLOR="${WALLUST_COLORS[15]}" - -MAX_POS=10 -GLOW_POS=0 - -function gradient_flow_color() { - local pos=$1 - local d=$(( pos - GLOW_POS )) - - # wrap distance (-9..9) - if (( d > MAX_POS/2 )); then d=$((d - MAX_POS)); fi - if (( d < -MAX_POS/2 )); then d=$((d + MAX_POS)); fi - - case "${d#-}" in - 0) echo "$GLOW_COLOR" ;; - 1) echo "$GRAD1_COLOR" ;; - 2) echo "$GRAD2_COLOR" ;; - *) echo "$BASE_COLOR" ;; - esac - - if (( pos == MAX_POS - 1 )); then - GLOW_POS=$(( (GLOW_POS + 1) % MAX_POS )) - fi -} - -# ---------- Main function ---------- - -function get_color() { - if [[ "$EFFECT_TYPE" == "wallust_random" && ${#WALLUST_COLORS[@]} -gt 0 ]]; then - wallust_random - elif [[ "$EFFECT_TYPE" == "gradient_flow" && ${#WALLUST_COLORS[@]} -ge 16 ]]; then - gradient_flow_color "$1" - else - random_hex - fi -} - -# border effect for ACTIVE window -hyprctl keyword general:col.active_border $(get_color 0) $(get_color 1) $(get_color 2) $(get_color 3) $(get_color 4) $(get_color 5) $(get_color 6) $(get_color 7) $(get_color 8) $(get_color 9) 270deg - -# border effect for INACTIVE windows -#hyprctl keyword general:col.inactive_border $(get_color 0) $(get_color 1) $(get_color 2) $(get_color 3) $(get_color 4) $(get_color 5) $(get_color 6) $(get_color 7) $(get_color 8) $(get_color 9) 270deg \ No newline at end of file diff --git a/config/hypr/configs/Startup_Apps.conf b/config/hypr/configs/Startup_Apps.conf index 2bf902cd..0cc5da11 100644 --- a/config/hypr/configs/Startup_Apps.conf +++ b/config/hypr/configs/Startup_Apps.conf @@ -33,8 +33,8 @@ exec-once = $scriptsDir/Hyprsunset.sh init exec-once = wl-paste --type text --watch cliphist store exec-once = wl-paste --type image --watch cliphist store -# Rainbow borders -exec-once = $UserScripts/RainbowBorders.sh +# Rainbow borders (disabled by default; use quick settings menu) +#exec-once = $UserScripts/RainbowBorders.sh # Here are list of features available but disabled by default diff --git a/copy.sh b/copy.sh index 31c66a0b..b061f4ac 100755 --- a/copy.sh +++ b/copy.sh @@ -355,7 +355,6 @@ fi printf "\n%.0s" {1..1} prompt_clock_12h "$LOG" printf "\n%.0s" {1..1} -prompt_rainbow_borders "$LOG" >/dev/null printf "\n%.0s" {1..1} prompt_express_upgrade "$EXPRESS_SUPPORTED" "$LOG" diff --git a/scripts/lib_prompts.sh b/scripts/lib_prompts.sh index a63afde3..bf6fafd7 100644 --- a/scripts/lib_prompts.sh +++ b/scripts/lib_prompts.sh @@ -209,27 +209,6 @@ apply_sddm_12h_format_sequoia() { fi } -# Rainbow borders toggle; returns "disabled" or "kept". -prompt_rainbow_borders() { - local log="$1" - echo "${NOTE} ${SKY_BLUE}By default, Rainbow Borders animation is enabled" - echo "${WARN} However, this uses a bit more CPU and Memory resources." - if ! read -r -p "${CAT} Do you want to disable Rainbow Borders animation? (y/N): " border_choice &1 | tee -a "$log" - echo "kept" - return - fi - if [[ "$border_choice" =~ ^[Yy]$ ]]; then - mv config/hypr/UserScripts/RainbowBorders.sh config/hypr/UserScripts/RainbowBorders.bak.sh - sed -i '/exec-once = \$UserScripts\/RainbowBorders.sh/s/^/#/' config/hypr/configs/Startup_Apps.conf - sed -i '/^[[:space:]]*animation = borderangle, 1, 180, liner, loop/s/^/#/' config/hypr/configs/UserAnimations.conf - echo "${OK} Rainbow borders are now disabled." 2>&1 | tee -a "$log" - echo "disabled" - else - echo "${NOTE} No changes made. Rainbow borders remain enabled." 2>&1 | tee -a "$log" - echo "kept" - fi -} # Express upgrade confirmation; may set EXPRESS_MODE=1. prompt_express_upgrade() { -- cgit v1.2.3 From 5d1bbd7e7ba0ea328f00fc77c3ae2c47c36965d5 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Mon, 19 Jan 2026 01:18:10 -0500 Subject: Fixed glass styles - modified default laptop config file On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: waybar/configs/[TOP] Default Laptop new file: waybar/configs/[TOP] Default Laptop (old v5) new file: waybar/style/Crystal Clear Glass.css new file: waybar/style/ML4W Glass-3d.css modified: waybar/style/ML4W Glass.css --- config/waybar/configs/[TOP] Default Laptop | 13 +- .../waybar/configs/[TOP] Default Laptop (old v5) | 60 ++++ config/waybar/style/Crystal Clear Glass.css | 243 +++++++++++++++ config/waybar/style/ML4W Glass-3d.css | 325 +++++++++++++++++++++ config/waybar/style/ML4W Glass.css | 46 +-- 5 files changed, 638 insertions(+), 49 deletions(-) create mode 100644 config/waybar/configs/[TOP] Default Laptop (old v5) create mode 100644 config/waybar/style/Crystal Clear Glass.css create mode 100644 config/waybar/style/ML4W Glass-3d.css diff --git a/config/waybar/configs/[TOP] Default Laptop b/config/waybar/configs/[TOP] Default Laptop index 0b264c6b..08a87244 100644 --- a/config/waybar/configs/[TOP] Default Laptop +++ b/config/waybar/configs/[TOP] Default Laptop @@ -26,20 +26,17 @@ "custom/cava_mviz", "custom/separator#blank", "custom/playerctl", - "custom/separator#blank_2", + "custom/separator#blank", "hyprland/window", ], "modules-center": [ - "group/app_drawer", "custom/separator#blank", + "group/app_drawer", "group/notify", - "custom/separator#dot-line", "hyprland/workspaces#rw", "clock", - "custom/separator#dot-line", "custom/weather", - "custom/separator#dot-line", "idle_inhibitor", "custom/hint", ], @@ -47,14 +44,10 @@ "modules-right": [ "tray", "network#speed", - "custom/separator#dot-line", "group/laptop", - "custom/separator#dot-line", "group/mobo_drawer", - "custom/separator#line", "group/audio", - "custom/separator#dot-line", "custom/nightlight", "group/status", ], -} \ No newline at end of file +} diff --git a/config/waybar/configs/[TOP] Default Laptop (old v5) b/config/waybar/configs/[TOP] Default Laptop (old v5) new file mode 100644 index 00000000..0b264c6b --- /dev/null +++ b/config/waybar/configs/[TOP] Default Laptop (old v5) @@ -0,0 +1,60 @@ +/* ---- πŸ’« https://github.com/JaKooLit πŸ’« ---- */ + +// ### DEFAULT Laptop - Top ### // +{ +"include": [ + "$HOME/.config/waybar/Modules", + "$HOME/.config/waybar/ModulesWorkspaces", + "$HOME/.config/waybar/ModulesCustom", + "$HOME/.config/waybar/ModulesGroups", + "$HOME/.config/waybar/UserModules", + ], +"layer": "top", +//"mode": "dock", +"exclusive": true, +"passthrough": false, +"position": "top", +"spacing": 3, +"fixed-center": true, +"ipc": true, +"margin-top": 3, +"margin-left": 8, +"margin-right": 8, + +"modules-left": [ + "custom/separator#blank", + "custom/cava_mviz", + "custom/separator#blank", + "custom/playerctl", + "custom/separator#blank_2", + "hyprland/window", + ], + +"modules-center": [ + "group/app_drawer", + "custom/separator#blank", + "group/notify", + "custom/separator#dot-line", + "hyprland/workspaces#rw", + "clock", + "custom/separator#dot-line", + "custom/weather", + "custom/separator#dot-line", + "idle_inhibitor", + "custom/hint", + ], + +"modules-right": [ + "tray", + "network#speed", + "custom/separator#dot-line", + "group/laptop", + "custom/separator#dot-line", + "group/mobo_drawer", + "custom/separator#line", + "group/audio", + "custom/separator#dot-line", + "custom/nightlight", + "group/status", + ], +} \ No newline at end of file diff --git a/config/waybar/style/Crystal Clear Glass.css b/config/waybar/style/Crystal Clear Glass.css new file mode 100644 index 00000000..a98567d4 --- /dev/null +++ b/config/waybar/style/Crystal Clear Glass.css @@ -0,0 +1,243 @@ +/* CRYSTAL CLEAR Glass theme for Waybar */ + +/* SPDX-FileCopyrightText: 2026-present Ahum Maitra theahummaitra@gmail.com +SPDX-License-Identifier: GPL-3.0-or-later */ + +/* +----------------------------------------------------- +General +----------------------------------------------------- +*/ + +* { + background-color: transparent; + font-family: "JetBrainsMono Nerd Font"; + border: none; + font-weight: bolder; + border-radius: 0px; + + /* Extra tweaks */ + min-height: 0; + /* set font-size to 100% if font scaling is set to 1.00 using nwg-look */ + font-size: 97%; + font-feature-settings: '"zero", "ss01", "ss02", "ss03", "ss04", "ss05", "cv31"'; + margin-top: 3px; + padding-bottom: 2px; +} + +window#waybar { + background: transparent; +} + +.modules-left { + border-radius: 12px; + border: 1px solid transparent; + opacity: 0.8; + padding: 0px; + margin: 10px; + background-color: rgba(255, 255, 255, 0.25); + box-shadow: inset 1px 2px 2px rgba(255, 255, 255, 0.2); +} + +.modules-right { + border-radius: 12px; + border: 1px solid transparent; + opacity: 0.8; + padding: 0px; + margin: 10px; + background-color: rgba(255, 255, 255, 0.25); + box-shadow: inset 1px 2px 2px rgba(255, 255, 255, 0.3); +} + +.modules-center { + border-radius: 12px; + border: 1px solid transparent; + opacity: 0.8; + margin: 10px; + background-color: rgba(255, 255, 255, 0.25); + box-shadow: inset 0px 2px 2px rgba(255, 255, 255, 0.2); +} + +label.module { + font-size: 14px; + margin-left: 8px; + margin-right: 8px; + border-radius: 5px; +} + +label.module { + font-size: 14px; + padding: 3px 10px; + transition: all 0.3s ease-out; + border-radius: 10px; + border: 0px solid transparent; +} + +label.module:hover { +} + +/* ----------------------------------------------------- + * Workspaces + * ----------------------------------------------------- */ + +#workspaces { + padding: 5px 3px 5px 3px; + min-width: 176px; + font-weight: 600; +} + +#workspaces button { + border-radius: 3px; + padding: 0px 5px 0px 5px; + margin: 0px 2px 0px 2px; + transition: all 0.3s ease-in-out; + border: 1px solid transparent; +} + +#workspaces button.active { + background-color: rgba(255, 255, 255, 0.35); + + border: 1px solid transparent; + transition: all 0.3s ease-in-out; + min-width: 30px; + border-radius: 8px; + box-shadow: + inset 1px 2px 2px rgba(255, 255, 255, 0.5), + inset 0 1px 1px rgba(255, 255, 255, 0.8); +} + +#workspaces button:hover { + background-color: rgba(255, 255, 255, 0.2); + border-radius: 15px; +} + +/* ----------------------------------------------------- + * Tooltips + * ----------------------------------------------------- */ + +tooltip { + border-radius: 12px; + border: 1px solid transparent; + opacity: 0.7; + margin: 10px; +} + +/* ----------------------------------------------------- + * Window + * ----------------------------------------------------- */ + +#window { + background-color: transparent; + padding-right: 12px; +} + +window#waybar.empty #window { + background-color: transparent; +} + +/* ----------------------------------------------------- + * Taskbar + * ----------------------------------------------------- */ + +#taskbar { + padding: 5px 0px 5px 0px; +} + +#taskbar button { + border-radius: 6px; + padding: 0px 5px 0px 5px; +} + + +#custom-updates.yellow { + border-radius: 8px; + margin: 5px 0px 5px 5px; + padding: 0px 6px 0px 6px; +} + +#custom-updates.red { + border-radius: 8px; + margin: 6px 0px 6px 7px; + padding: 0px 6px 0px 6px; +} + +/* ----------------------------------------------------- + * Clock + * ----------------------------------------------------- */ + +#clock { + margin-left: 12px; + margin-right: 12px; +} + +@keyframes blink { + to { + background-color: #ffffff; + color: #ffffff; + } +} + +#battery.critical:not(.charging) { + background-color: transparent; +} + +#backlight, +#backlight-slider, +#battery, +#bluetooth, +#clock, +#cpu, +#disk, +#idle_inhibitor, +#keyboard-state, +#memory, +#mode, +#mpris, +#network, +#power-profiles-daemon, +#pulseaudio, +#pulseaudio-slider, +#taskbar button, +#taskbar, +#temperature, +#tray, +#window, +#wireplumber, +#workspaces, +#custom-backlight, +#custom-browser, +#custom-cava_mviz, +#custom-cycle_wall, +#custom-dot_update, +#custom-file_manager, +#custom-keybinds, +#custom-keyboard, +#custom-light_dark, +#custom-lock, +#custom-hint, +#custom-hypridle, +#custom-menu, +#custom-playerctl, +#custom-power_vertical, +#custom-power, +#custom-quit, +#custom-reboot, +#custom-settings, +#custom-spotify, +#custom-swaync, +#custom-tty, +#custom-updater, +#custom-hyprpicker, +#custom-weather, +#custom-weather.clearNight, +#custom-weather.cloudyFoggyDay, +#custom-weather.cloudyFoggyNight, +#custom-weather.default, +#custom-weather.rainyDay, +#custom-weather.rainyNight, +#custom-weather.severe, +#custom-weather.showyIcyDay, +#custom-weather.snowyIcyNight, +#custom-weather.sunnyDay { + background-color: transparent; +} diff --git a/config/waybar/style/ML4W Glass-3d.css b/config/waybar/style/ML4W Glass-3d.css new file mode 100644 index 00000000..bba95214 --- /dev/null +++ b/config/waybar/style/ML4W Glass-3d.css @@ -0,0 +1,325 @@ +/* ML4W GLASS THEME */ + +/* SPDX-FileCopyrightText: 2026-present Ahum Maitra theahummaitra@gmail.com +SPDX-License-Identifier: GPL-3.0-or-later */ + +/* +----------------------------------------------------- +General +----------------------------------------------------- +*/ + +* { + background-color: transparent; + font-family: "JetBrainsMono Nerd Font"; + border: none; + font-weight: bolder; + border-radius: 0px; + + /* Extra tweaks */ + min-height: 0; + /* set font-size to 100% if font scaling is set to 1.00 using nwg-look */ + font-size: 97%; + font-feature-settings: '"zero", "ss01", "ss02", "ss03", "ss04", "ss05", "cv31"'; + margin-top: 3px; + padding-bottom: 2px; +} + +@import "style/ML4W/glass.css"; +/* Soft-neutral override: keeps glass gradients but avoids red-dominant palettes */ +@define-color surface @background-alt; +@define-color surface_dim @background; +@define-color primary @foreground; +@define-color on_primary @background; +@define-color on_primary_fixed @background; +@define-color on_primary_fixed_variant @foreground; +@define-color secondary @foreground; +@define-color on_secondary @background; +@define-color on_tertiary_fixed @background; +@define-color on_tertiary_fixed_variant @foreground; +@define-color error @foreground; +@define-color on_error @background; +@define-color accent @color12; /* wallust primary for subtle highlights */ + +window#waybar { + background: transparent; + border: 0; + outline: none; +} + +.modules-left { + background-color: @surface; + border-radius: 12px; + background: + radial-gradient( + circle at 50% 250%, + alpha(darker(@surface), 0.9), + alpha(@surface_dim, 0.9) + ) + padding-box, + linear-gradient(@primary, @on_primary) border-box; + border: 1px solid transparent; + opacity: 0.8; + padding: 0px; + margin: 10px; + box-shadow: + inset 0 -2px 0 alpha(@accent, 0.45), + inset 1px 2px 2px rgba(255, 255, 255, 0.2); +} + +.modules-right { + background-color: @surface; + border-radius: 12px; + background: + radial-gradient( + circle at 50% 250%, + alpha(darker(@surface), 0.9), + alpha(@surface_dim, 0.9) + ) + padding-box, + linear-gradient(@primary, @on_primary) border-box; + border: 1px solid transparent; + opacity: 0.8; + padding: 0px; + margin: 10px; + box-shadow: + inset 0 -2px 0 alpha(@accent, 0.45), + inset 1px 2px 2px rgba(255, 255, 255, 0.3); +} + +.modules-center { + background-color: @surface; + border-radius: 12px; + background: + radial-gradient( + circle at 50% 250%, + alpha(darker(@surface), 0.9), + alpha(@surface_dim, 0.9) + ) + padding-box, + linear-gradient(@primary, @on_primary) border-box; + border: 1px solid transparent; + opacity: 0.8; + margin: 10px; + box-shadow: + inset 0 -2px 0 alpha(@accent, 0.45), + inset 0px 2px 2px rgba(255, 255, 255, 0.2); +} + +label.module { + font-size: 14px; + margin-left: 8px; + margin-right: 8px; + border-radius: 5px; +} + +label.module { + font-size: 14px; + color: @on_surface; + padding: 3px 10px; + transition: all 0.3s ease-out; + background: + radial-gradient( + circle at 50% 250%, + @on_tertiary_fixed_variant, + @on_tertiary_fixed + ) + padding-box, + linear-gradient(@on_primary_fixed_variant, @on_primary_fixed) border-box; + border-radius: 10px; + border: 0px solid transparent; +} + +label.module:hover { +} + +/* ----------------------------------------------------- + * Workspaces + * ----------------------------------------------------- */ + +#workspaces { + padding: 5px 3px 5px 3px; + min-width: 176px; + font-weight: 600; +} + +#workspaces button { + color: @on_surface; + border-radius: 3px; + padding: 0px 5px 0px 5px; + margin: 0px 2px 0px 2px; + transition: all 0.3s ease-in-out; + border: 1px solid transparent; +} + +#workspaces button.active { + background: alpha(@accent, 0.20); + border: 1px solid transparent; + transition: all 0.3s ease-in-out; + min-width: 30px; + border-radius: 8px; + box-shadow: + inset 0 -3px 0 alpha(@accent, 0.8), + inset 1px 2px 2px rgba(255, 255, 255, 0.45), + inset 0 1px 1px rgba(255, 255, 255, 0.7); +} + +#workspaces button:hover { + background: alpha(@secondary, 0.2); + border-radius: 15px; +} + +/* ----------------------------------------------------- + * Tooltips + * ----------------------------------------------------- */ + +tooltip { + background-color: @surface; + border-radius: 12px; + background: + radial-gradient(circle at 50% 250%, @surface, @surface_dim) padding-box, + linear-gradient(#ffffff, @on_primary) border-box; + border: 1px solid transparent; + opacity: 0.7; + margin: 10px; +} + +tooltip label { + color: @on_surface; +} + +/* ----------------------------------------------------- + * Window + * ----------------------------------------------------- */ + +#window { + background-color: transparent; + /* Override global margin/padding so the window pill hugs the bar edges */ + margin: 0; + padding: 0; +} + +window#waybar.empty #window { + background-color: transparent; +} + +/* Tighter content padding specifically for the window title */ +#window label { + margin: 0; + padding: 4px 10px; +} + +/* ----------------------------------------------------- + * Taskbar + * ----------------------------------------------------- */ + +#taskbar { + padding: 5px 0px 5px 0px; +} + +#taskbar button { + border-radius: 6px; + padding: 0px 5px 0px 5px; +} + +#taskbar button:hover { + background: @primary; + color: @on_primary; +} + +#custom-updates.yellow { + border-radius: 8px; + margin: 5px 0px 5px 5px; + padding: 0px 6px 0px 6px; + background-color: @secondary; + color: @on_secondary; +} + +#custom-updates.red { + border-radius: 8px; + margin: 6px 0px 6px 7px; + padding: 0px 6px 0px 6px; + background-color: @error; + color: @on_error; +} + +/* ----------------------------------------------------- + * Clock + * ----------------------------------------------------- */ + +#clock { + margin-left: 12px; + margin-right: 12px; +} + +@keyframes blink { + to { + background-color: @background; + color: @on_surface; + } +} + +#battery.critical:not(.charging) { + background-color: transparent; +} + +#backlight, +#backlight-slider, +#battery, +#bluetooth, +#clock, +#cpu, +#disk, +#idle_inhibitor, +#keyboard-state, +#memory, +#mode, +#mpris, +#network, +#power-profiles-daemon, +#pulseaudio, +#pulseaudio-slider, +#taskbar button, +#taskbar, +#temperature, +#tray, +#window, +#wireplumber, +#workspaces, +#custom-backlight, +#custom-browser, +#custom-cava_mviz, +#custom-cycle_wall, +#custom-dot_update, +#custom-file_manager, +#custom-keybinds, +#custom-keyboard, +#custom-light_dark, +#custom-lock, +#custom-hint, +#custom-hypridle, +#custom-menu, +#custom-playerctl, +#custom-power_vertical, +#custom-power, +#custom-quit, +#custom-reboot, +#custom-settings, +#custom-spotify, +#custom-swaync, +#custom-tty, +#custom-updater, +#custom-hyprpicker, +#custom-weather, +#custom-weather.clearNight, +#custom-weather.cloudyFoggyDay, +#custom-weather.cloudyFoggyNight, +#custom-weather.default, +#custom-weather.rainyDay, +#custom-weather.rainyNight, +#custom-weather.severe, +#custom-weather.showyIcyDay, +#custom-weather.snowyIcyNight, +#custom-weather.sunnyDay { + background-color: transparent; +} diff --git a/config/waybar/style/ML4W Glass.css b/config/waybar/style/ML4W Glass.css index bba95214..c02520bd 100644 --- a/config/waybar/style/ML4W Glass.css +++ b/config/waybar/style/ML4W Glass.css @@ -1,4 +1,4 @@ -/* ML4W GLASS THEME */ +/* ML4W GLASS THEME - CRYSTAL CLEAR */ /* SPDX-FileCopyrightText: 2026-present Ahum Maitra theahummaitra@gmail.com SPDX-License-Identifier: GPL-3.0-or-later */ @@ -26,25 +26,9 @@ General } @import "style/ML4W/glass.css"; -/* Soft-neutral override: keeps glass gradients but avoids red-dominant palettes */ -@define-color surface @background-alt; -@define-color surface_dim @background; -@define-color primary @foreground; -@define-color on_primary @background; -@define-color on_primary_fixed @background; -@define-color on_primary_fixed_variant @foreground; -@define-color secondary @foreground; -@define-color on_secondary @background; -@define-color on_tertiary_fixed @background; -@define-color on_tertiary_fixed_variant @foreground; -@define-color error @foreground; -@define-color on_error @background; -@define-color accent @color12; /* wallust primary for subtle highlights */ window#waybar { background: transparent; - border: 0; - outline: none; } .modules-left { @@ -62,9 +46,7 @@ window#waybar { opacity: 0.8; padding: 0px; margin: 10px; - box-shadow: - inset 0 -2px 0 alpha(@accent, 0.45), - inset 1px 2px 2px rgba(255, 255, 255, 0.2); + box-shadow: inset 1px 2px 2px rgba(255, 255, 255, 0.2); } .modules-right { @@ -82,9 +64,7 @@ window#waybar { opacity: 0.8; padding: 0px; margin: 10px; - box-shadow: - inset 0 -2px 0 alpha(@accent, 0.45), - inset 1px 2px 2px rgba(255, 255, 255, 0.3); + box-shadow: inset 1px 2px 2px rgba(255, 255, 255, 0.3); } .modules-center { @@ -101,9 +81,7 @@ window#waybar { border: 1px solid transparent; opacity: 0.8; margin: 10px; - box-shadow: - inset 0 -2px 0 alpha(@accent, 0.45), - inset 0px 2px 2px rgba(255, 255, 255, 0.2); + box-shadow: inset 0px 2px 2px rgba(255, 255, 255, 0.2); } label.module { @@ -153,15 +131,14 @@ label.module:hover { } #workspaces button.active { - background: alpha(@accent, 0.20); + background: alpha(@primary, 0.2); border: 1px solid transparent; transition: all 0.3s ease-in-out; min-width: 30px; border-radius: 8px; box-shadow: - inset 0 -3px 0 alpha(@accent, 0.8), - inset 1px 2px 2px rgba(255, 255, 255, 0.45), - inset 0 1px 1px rgba(255, 255, 255, 0.7); + inset 1px 2px 2px rgba(255, 255, 255, 0.5), + inset 0 1px 1px rgba(255, 255, 255, 0.8); } #workspaces button:hover { @@ -194,21 +171,12 @@ tooltip label { #window { background-color: transparent; - /* Override global margin/padding so the window pill hugs the bar edges */ - margin: 0; - padding: 0; } window#waybar.empty #window { background-color: transparent; } -/* Tighter content padding specifically for the window title */ -#window label { - margin: 0; - padding: 4px 10px; -} - /* ----------------------------------------------------- * Taskbar * ----------------------------------------------------- */ -- 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(-) 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(+) 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 From 99e8e2e3a198b9cfb1a56c3b49454028b0bdc650 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Mon, 19 Jan 2026 12:49:53 -0500 Subject: Fixed padding On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: style/Crystal Clear Glass.css --- config/waybar/style/Crystal Clear Glass.css | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/config/waybar/style/Crystal Clear Glass.css b/config/waybar/style/Crystal Clear Glass.css index a98567d4..330393a2 100644 --- a/config/waybar/style/Crystal Clear Glass.css +++ b/config/waybar/style/Crystal Clear Glass.css @@ -33,7 +33,7 @@ window#waybar { border-radius: 12px; border: 1px solid transparent; opacity: 0.8; - padding: 0px; + padding-right: 15px; margin: 10px; background-color: rgba(255, 255, 255, 0.25); box-shadow: inset 1px 2px 2px rgba(255, 255, 255, 0.2); @@ -43,7 +43,7 @@ window#waybar { border-radius: 12px; border: 1px solid transparent; opacity: 0.8; - padding: 0px; + padding-left: 15px; margin: 10px; background-color: rgba(255, 255, 255, 0.25); box-shadow: inset 1px 2px 2px rgba(255, 255, 255, 0.3); @@ -148,7 +148,6 @@ window#waybar.empty #window { padding: 0px 5px 0px 5px; } - #custom-updates.yellow { border-radius: 8px; margin: 5px 0px 5px 5px; -- cgit v1.2.3 From b81ce8cee49ab586e7fb94635d4706a5385d4a00 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Mon, 19 Jan 2026 12:55:43 -0500 Subject: Fixed padding On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: style/ML4W Glass-3d.css modified: style/ML4W Glass.css --- config/waybar/style/ML4W Glass-3d.css | 6 +++--- config/waybar/style/ML4W Glass.css | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/config/waybar/style/ML4W Glass-3d.css b/config/waybar/style/ML4W Glass-3d.css index bba95214..3123e3c1 100644 --- a/config/waybar/style/ML4W Glass-3d.css +++ b/config/waybar/style/ML4W Glass-3d.css @@ -60,7 +60,7 @@ window#waybar { linear-gradient(@primary, @on_primary) border-box; border: 1px solid transparent; opacity: 0.8; - padding: 0px; + padding-right: 15px; margin: 10px; box-shadow: inset 0 -2px 0 alpha(@accent, 0.45), @@ -80,7 +80,7 @@ window#waybar { linear-gradient(@primary, @on_primary) border-box; border: 1px solid transparent; opacity: 0.8; - padding: 0px; + padding-left: 15px; margin: 10px; box-shadow: inset 0 -2px 0 alpha(@accent, 0.45), @@ -153,7 +153,7 @@ label.module:hover { } #workspaces button.active { - background: alpha(@accent, 0.20); + background: alpha(@accent, 0.2); border: 1px solid transparent; transition: all 0.3s ease-in-out; min-width: 30px; diff --git a/config/waybar/style/ML4W Glass.css b/config/waybar/style/ML4W Glass.css index c02520bd..e16e0ed1 100644 --- a/config/waybar/style/ML4W Glass.css +++ b/config/waybar/style/ML4W Glass.css @@ -44,7 +44,7 @@ window#waybar { linear-gradient(@primary, @on_primary) border-box; border: 1px solid transparent; opacity: 0.8; - padding: 0px; + padding-right: 15px; margin: 10px; box-shadow: inset 1px 2px 2px rgba(255, 255, 255, 0.2); } @@ -62,7 +62,7 @@ window#waybar { linear-gradient(@primary, @on_primary) border-box; border: 1px solid transparent; opacity: 0.8; - padding: 0px; + padding-left: 15px; margin: 10px; box-shadow: inset 1px 2px 2px rgba(255, 255, 255, 0.3); } -- cgit v1.2.3 From dc798ae3b7989da125b731aefb59b86e28f44a9a Mon Sep 17 00:00:00 2001 From: Don Williams Date: Tue, 20 Jan 2026 03:03:59 -0500 Subject: Adjusted left padding on Crystal Glass On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/waybar/style/Crystal Clear Glass.css --- config/waybar/style/Crystal Clear Glass.css | 1 + 1 file changed, 1 insertion(+) diff --git a/config/waybar/style/Crystal Clear Glass.css b/config/waybar/style/Crystal Clear Glass.css index 330393a2..38f1cc74 100644 --- a/config/waybar/style/Crystal Clear Glass.css +++ b/config/waybar/style/Crystal Clear Glass.css @@ -33,6 +33,7 @@ window#waybar { border-radius: 12px; border: 1px solid transparent; opacity: 0.8; + padding-left: 5px; padding-right: 15px; margin: 10px; background-color: rgba(255, 255, 255, 0.25); -- cgit v1.2.3 From 0c69fe3c63a7699433dbdafc69eacac9177caa43 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Tue, 20 Jan 2026 08:18:13 -0500 Subject: Add: custom-nightlight to CSS files, to properly format nightlight On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/waybar/style/Crystal Clear Glass.css modified: config/waybar/style/ML4W Glass-3d.css modified: config/waybar/style/ML4W Glass.css modified: config/waybar/style/[0 VERTICAL] Golden Noir.css modified: config/waybar/style/[0 VERTICAL] Oglo Chicklets.css modified: config/waybar/style/[0 VERTICAL] [Catpuccin] Mocha.css modified: config/waybar/style/[Black & White] Monochrome.css modified: config/waybar/style/[Catppuccin] Frappe.css modified: config/waybar/style/[Catppuccin] Latte.css modified: config/waybar/style/[Catppuccin] Mocha.css modified: config/waybar/style/[Colored] Chroma Glow.css modified: config/waybar/style/[Colored] Translucent.css modified: config/waybar/style/[Colorful] Aurora Blossom.css modified: config/waybar/style/[Colorful] Aurora.css modified: config/waybar/style/[Colorful] Oglo Chicklets.css modified: config/waybar/style/[Colorful] Rainbow Spectrum.css modified: config/waybar/style/[Colorful] stolen-style.css modified: config/waybar/style/[Dark] Golden Eclipse.css modified: config/waybar/style/[Dark] Golden Noir.css modified: config/waybar/style/[Dark] Half-Moon.css modified: config/waybar/style/[Dark] Latte-Wallust combined v2.css modified: config/waybar/style/[Dark] Latte-Wallust combined.css modified: config/waybar/style/[Dark] Purpl.css modified: config/waybar/style/[Dark] Wallust Obsidian Edge.css modified: config/waybar/style/[Extra] Arrow.css modified: config/waybar/style/[Extra] Crimson.css modified: config/waybar/style/[Extra] EverForest.css modified: config/waybar/style/[Extra] ML4W starter.css modified: config/waybar/style/[Extra] Mauve.css modified: config/waybar/style/[Extra] Modern-Combined - Transparent.css modified: config/waybar/style/[Extra] Modern-Combined.css modified: config/waybar/style/[Extra] Neon Circuit.css modified: config/waybar/style/[Extra] Prismatic Glow.css modified: config/waybar/style/[Extra] Rose Pine.css modified: config/waybar/style/[Extra] Simple Pink.css modified: config/waybar/style/[Light] Monochrome Contrast.css modified: config/waybar/style/[Light] Obsidian Glow.css modified: config/waybar/style/[Rainbow] RGB Bordered.css modified: config/waybar/style/[Retro] Simple Style.css modified: config/waybar/style/[Transparent] Crystal Clear.css modified: config/waybar/style/[VERTICAL] [Catpuccin] Mocha.css modified: config/waybar/style/[WALLUST] ML4W-modern-mixed.css modified: config/waybar/style/[WALLUST] ML4W-modern.css modified: config/waybar/style/[Wallust Bordered] Chroma Fusion Edge.css modified: config/waybar/style/[Wallust Bordered] Chroma Simple.css modified: config/waybar/style/[Wallust Transparent] Crystal Clear.css modified: config/waybar/style/[Wallust] Box type.css modified: config/waybar/style/[Wallust] Chroma Edge.css modified: config/waybar/style/[Wallust] Chroma Fusion.css modified: config/waybar/style/[Wallust] Chroma Tally V2.css modified: config/waybar/style/[Wallust] Chroma Tally.css modified: config/waybar/style/[Wallust] Colored.css modified: config/waybar/style/[Wallust] Simple.css --- config/waybar/style/Crystal Clear Glass.css | 1 + config/waybar/style/ML4W Glass-3d.css | 1 + config/waybar/style/ML4W Glass.css | 1 + config/waybar/style/[0 VERTICAL] Golden Noir.css | 1 + .../waybar/style/[0 VERTICAL] Oglo Chicklets.css | 1 + .../style/[0 VERTICAL] [Catpuccin] Mocha.css | 1 + config/waybar/style/[Black & White] Monochrome.css | 1 + config/waybar/style/[Catppuccin] Frappe.css | 1 + config/waybar/style/[Catppuccin] Latte.css | 1 + config/waybar/style/[Catppuccin] Mocha.css | 1 + config/waybar/style/[Colored] Chroma Glow.css | 1 + config/waybar/style/[Colored] Translucent.css | 1 + config/waybar/style/[Colorful] Aurora Blossom.css | 1 + config/waybar/style/[Colorful] Aurora.css | 1 + config/waybar/style/[Colorful] Oglo Chicklets.css | 1 + .../waybar/style/[Colorful] Rainbow Spectrum.css | 1 + config/waybar/style/[Colorful] stolen-style.css | 1 + config/waybar/style/[Dark] Golden Eclipse.css | 1 + config/waybar/style/[Dark] Golden Noir.css | 1 + config/waybar/style/[Dark] Half-Moon.css | 1 + .../style/[Dark] Latte-Wallust combined v2.css | 1 + .../waybar/style/[Dark] Latte-Wallust combined.css | 1 + config/waybar/style/[Dark] Purpl.css | 1 + .../waybar/style/[Dark] Wallust Obsidian Edge.css | 1 + config/waybar/style/[Extra] Arrow.css | 1 + config/waybar/style/[Extra] Crimson.css | 1 + config/waybar/style/[Extra] EverForest.css | 1 + config/waybar/style/[Extra] ML4W starter.css | 1 + config/waybar/style/[Extra] Mauve.css | 1 + .../[Extra] Modern-Combined - Transparent.css | 1 + config/waybar/style/[Extra] Modern-Combined.css | 1 + config/waybar/style/[Extra] Neon Circuit.css | 1 + config/waybar/style/[Extra] Prismatic Glow.css | 1 + config/waybar/style/[Extra] Rose Pine.css | 1 + config/waybar/style/[Extra] Simple Pink.css | 1 + .../waybar/style/[Light] Monochrome Contrast.css | 1 + config/waybar/style/[Light] Obsidian Glow.css | 1 + config/waybar/style/[Rainbow] RGB Bordered.css | 1 + config/waybar/style/[Retro] Simple Style.css | 1 + .../waybar/style/[Transparent] Crystal Clear.css | 1 + .../waybar/style/[VERTICAL] [Catpuccin] Mocha.css | 1 + .../waybar/style/[WALLUST] ML4W-modern-mixed.css | 1 + config/waybar/style/[WALLUST] ML4W-modern.css | 1 + .../[Wallust Bordered] Chroma Fusion Edge.css | 1 + .../style/[Wallust Bordered] Chroma Simple.css | 1 + .../style/[Wallust Transparent] Crystal Clear.css | 1 + config/waybar/style/[Wallust] Box type.css | 179 ++++++++++----------- config/waybar/style/[Wallust] Chroma Edge.css | 1 + config/waybar/style/[Wallust] Chroma Fusion.css | 1 + config/waybar/style/[Wallust] Chroma Tally V2.css | 1 + config/waybar/style/[Wallust] Chroma Tally.css | 1 + config/waybar/style/[Wallust] Colored.css | 1 + config/waybar/style/[Wallust] Simple.css | 1 + 53 files changed, 141 insertions(+), 90 deletions(-) diff --git a/config/waybar/style/Crystal Clear Glass.css b/config/waybar/style/Crystal Clear Glass.css index 38f1cc74..37e54744 100644 --- a/config/waybar/style/Crystal Clear Glass.css +++ b/config/waybar/style/Crystal Clear Glass.css @@ -205,6 +205,7 @@ window#waybar.empty #window { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/ML4W Glass-3d.css b/config/waybar/style/ML4W Glass-3d.css index 3123e3c1..9df5eaf7 100644 --- a/config/waybar/style/ML4W Glass-3d.css +++ b/config/waybar/style/ML4W Glass-3d.css @@ -287,6 +287,7 @@ window#waybar.empty #window { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/ML4W Glass.css b/config/waybar/style/ML4W Glass.css index e16e0ed1..7cacf7c1 100644 --- a/config/waybar/style/ML4W Glass.css +++ b/config/waybar/style/ML4W Glass.css @@ -255,6 +255,7 @@ window#waybar.empty #window { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[0 VERTICAL] Golden Noir.css b/config/waybar/style/[0 VERTICAL] Golden Noir.css index c64fedf9..1c6fef93 100644 --- a/config/waybar/style/[0 VERTICAL] Golden Noir.css +++ b/config/waybar/style/[0 VERTICAL] Golden Noir.css @@ -118,6 +118,7 @@ tooltip { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[0 VERTICAL] Oglo Chicklets.css b/config/waybar/style/[0 VERTICAL] Oglo Chicklets.css index 3a6084cb..8395dd79 100644 --- a/config/waybar/style/[0 VERTICAL] Oglo Chicklets.css +++ b/config/waybar/style/[0 VERTICAL] Oglo Chicklets.css @@ -80,6 +80,7 @@ button.active { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[0 VERTICAL] [Catpuccin] Mocha.css b/config/waybar/style/[0 VERTICAL] [Catpuccin] Mocha.css index 971dc40f..92b5c753 100644 --- a/config/waybar/style/[0 VERTICAL] [Catpuccin] Mocha.css +++ b/config/waybar/style/[0 VERTICAL] [Catpuccin] Mocha.css @@ -90,6 +90,7 @@ tooltip label { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Black & White] Monochrome.css b/config/waybar/style/[Black & White] Monochrome.css index 700bebfc..5802eb7d 100644 --- a/config/waybar/style/[Black & White] Monochrome.css +++ b/config/waybar/style/[Black & White] Monochrome.css @@ -127,6 +127,7 @@ tooltip label{ #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Catppuccin] Frappe.css b/config/waybar/style/[Catppuccin] Frappe.css index 82f79678..a018480a 100644 --- a/config/waybar/style/[Catppuccin] Frappe.css +++ b/config/waybar/style/[Catppuccin] Frappe.css @@ -91,6 +91,7 @@ window#waybar.hidden { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Catppuccin] Latte.css b/config/waybar/style/[Catppuccin] Latte.css index 80608e53..ae495323 100644 --- a/config/waybar/style/[Catppuccin] Latte.css +++ b/config/waybar/style/[Catppuccin] Latte.css @@ -90,6 +90,7 @@ window#waybar.hidden { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Catppuccin] Mocha.css b/config/waybar/style/[Catppuccin] Mocha.css index 67f4efa5..22ee3f01 100644 --- a/config/waybar/style/[Catppuccin] Mocha.css +++ b/config/waybar/style/[Catppuccin] Mocha.css @@ -113,6 +113,7 @@ window#waybar.empty #window { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Colored] Chroma Glow.css b/config/waybar/style/[Colored] Chroma Glow.css index 2497d69f..c498a1ca 100644 --- a/config/waybar/style/[Colored] Chroma Glow.css +++ b/config/waybar/style/[Colored] Chroma Glow.css @@ -114,6 +114,7 @@ tooltip label{ #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Colored] Translucent.css b/config/waybar/style/[Colored] Translucent.css index 50803ef7..dfe545d3 100644 --- a/config/waybar/style/[Colored] Translucent.css +++ b/config/waybar/style/[Colored] Translucent.css @@ -115,6 +115,7 @@ tooltip { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Colorful] Aurora Blossom.css b/config/waybar/style/[Colorful] Aurora Blossom.css index dbd405d2..5d4e61cb 100644 --- a/config/waybar/style/[Colorful] Aurora Blossom.css +++ b/config/waybar/style/[Colorful] Aurora Blossom.css @@ -106,6 +106,7 @@ tooltip label{ #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Colorful] Aurora.css b/config/waybar/style/[Colorful] Aurora.css index 92c058c6..e89f557d 100644 --- a/config/waybar/style/[Colorful] Aurora.css +++ b/config/waybar/style/[Colorful] Aurora.css @@ -95,6 +95,7 @@ tooltip label{ #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Colorful] Oglo Chicklets.css b/config/waybar/style/[Colorful] Oglo Chicklets.css index b5ac3584..2bc07c2d 100644 --- a/config/waybar/style/[Colorful] Oglo Chicklets.css +++ b/config/waybar/style/[Colorful] Oglo Chicklets.css @@ -80,6 +80,7 @@ button.active { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Colorful] Rainbow Spectrum.css b/config/waybar/style/[Colorful] Rainbow Spectrum.css index 6ca5906f..675cc6b9 100644 --- a/config/waybar/style/[Colorful] Rainbow Spectrum.css +++ b/config/waybar/style/[Colorful] Rainbow Spectrum.css @@ -98,6 +98,7 @@ tooltip label{ #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Colorful] stolen-style.css b/config/waybar/style/[Colorful] stolen-style.css index c6b3345f..a2d7a1b4 100644 --- a/config/waybar/style/[Colorful] stolen-style.css +++ b/config/waybar/style/[Colorful] stolen-style.css @@ -51,6 +51,7 @@ window#waybar.empty #window { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-cycle_wall, #custom-github, #custom-hint, diff --git a/config/waybar/style/[Dark] Golden Eclipse.css b/config/waybar/style/[Dark] Golden Eclipse.css index af3160a6..449edbb1 100644 --- a/config/waybar/style/[Dark] Golden Eclipse.css +++ b/config/waybar/style/[Dark] Golden Eclipse.css @@ -54,6 +54,7 @@ window#waybar.hidden { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Dark] Golden Noir.css b/config/waybar/style/[Dark] Golden Noir.css index 17025266..5fc037c6 100644 --- a/config/waybar/style/[Dark] Golden Noir.css +++ b/config/waybar/style/[Dark] Golden Noir.css @@ -118,6 +118,7 @@ tooltip { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Dark] Half-Moon.css b/config/waybar/style/[Dark] Half-Moon.css index ab89c048..c120f511 100644 --- a/config/waybar/style/[Dark] Half-Moon.css +++ b/config/waybar/style/[Dark] Half-Moon.css @@ -122,6 +122,7 @@ color: #F3F4F5; } #custom-light_dark, +#custom-nightlight, #custom-dot_update, #custom-swaync, #custom-hypridle, diff --git a/config/waybar/style/[Dark] Latte-Wallust combined v2.css b/config/waybar/style/[Dark] Latte-Wallust combined v2.css index 46d55346..b29d000d 100644 --- a/config/waybar/style/[Dark] Latte-Wallust combined v2.css +++ b/config/waybar/style/[Dark] Latte-Wallust combined v2.css @@ -132,6 +132,7 @@ tooltip { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Dark] Latte-Wallust combined.css b/config/waybar/style/[Dark] Latte-Wallust combined.css index ea5c08a5..b2466370 100644 --- a/config/waybar/style/[Dark] Latte-Wallust combined.css +++ b/config/waybar/style/[Dark] Latte-Wallust combined.css @@ -137,6 +137,7 @@ tooltip { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Dark] Purpl.css b/config/waybar/style/[Dark] Purpl.css index 5e2ff8aa..5e7cefb0 100644 --- a/config/waybar/style/[Dark] Purpl.css +++ b/config/waybar/style/[Dark] Purpl.css @@ -122,6 +122,7 @@ tooltip { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Dark] Wallust Obsidian Edge.css b/config/waybar/style/[Dark] Wallust Obsidian Edge.css index 94ad7cac..9f7403b2 100644 --- a/config/waybar/style/[Dark] Wallust Obsidian Edge.css +++ b/config/waybar/style/[Dark] Wallust Obsidian Edge.css @@ -108,6 +108,7 @@ tooltip label { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Extra] Arrow.css b/config/waybar/style/[Extra] Arrow.css index 9435d226..42119200 100644 --- a/config/waybar/style/[Extra] Arrow.css +++ b/config/waybar/style/[Extra] Arrow.css @@ -84,6 +84,7 @@ #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Extra] Crimson.css b/config/waybar/style/[Extra] Crimson.css index cf9e7db2..8d7f4c2c 100644 --- a/config/waybar/style/[Extra] Crimson.css +++ b/config/waybar/style/[Extra] Crimson.css @@ -106,6 +106,7 @@ tooltip { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Extra] EverForest.css b/config/waybar/style/[Extra] EverForest.css index f0014762..d26dde10 100644 --- a/config/waybar/style/[Extra] EverForest.css +++ b/config/waybar/style/[Extra] EverForest.css @@ -286,6 +286,7 @@ window#waybar.hidden { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Extra] ML4W starter.css b/config/waybar/style/[Extra] ML4W starter.css index 8d651da6..5cba2f61 100644 --- a/config/waybar/style/[Extra] ML4W starter.css +++ b/config/waybar/style/[Extra] ML4W starter.css @@ -155,6 +155,7 @@ window#waybar.empty #window { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Extra] Mauve.css b/config/waybar/style/[Extra] Mauve.css index ec24bec7..52285f1f 100644 --- a/config/waybar/style/[Extra] Mauve.css +++ b/config/waybar/style/[Extra] Mauve.css @@ -125,6 +125,7 @@ tooltip { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Extra] Modern-Combined - Transparent.css b/config/waybar/style/[Extra] Modern-Combined - Transparent.css index c4ff7197..285c1440 100644 --- a/config/waybar/style/[Extra] Modern-Combined - Transparent.css +++ b/config/waybar/style/[Extra] Modern-Combined - Transparent.css @@ -139,6 +139,7 @@ tooltip { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Extra] Modern-Combined.css b/config/waybar/style/[Extra] Modern-Combined.css index dbbddf60..a225f483 100644 --- a/config/waybar/style/[Extra] Modern-Combined.css +++ b/config/waybar/style/[Extra] Modern-Combined.css @@ -143,6 +143,7 @@ tooltip { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cycle_wall, #custom-dot_update, diff --git a/config/waybar/style/[Extra] Neon Circuit.css b/config/waybar/style/[Extra] Neon Circuit.css index 7fbb39a5..2912a604 100644 --- a/config/waybar/style/[Extra] Neon Circuit.css +++ b/config/waybar/style/[Extra] Neon Circuit.css @@ -103,6 +103,7 @@ tooltip { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Extra] Prismatic Glow.css b/config/waybar/style/[Extra] Prismatic Glow.css index 8179352d..1c1c646f 100644 --- a/config/waybar/style/[Extra] Prismatic Glow.css +++ b/config/waybar/style/[Extra] Prismatic Glow.css @@ -150,6 +150,7 @@ window#waybar.empty { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Extra] Rose Pine.css b/config/waybar/style/[Extra] Rose Pine.css index 023b03a2..0ee7334a 100644 --- a/config/waybar/style/[Extra] Rose Pine.css +++ b/config/waybar/style/[Extra] Rose Pine.css @@ -126,6 +126,7 @@ tooltip { #window, #wireplumber, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Extra] Simple Pink.css b/config/waybar/style/[Extra] Simple Pink.css index db63a02f..d63e751d 100644 --- a/config/waybar/style/[Extra] Simple Pink.css +++ b/config/waybar/style/[Extra] Simple Pink.css @@ -118,6 +118,7 @@ tooltip { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Light] Monochrome Contrast.css b/config/waybar/style/[Light] Monochrome Contrast.css index 95b34fcc..91a330bf 100644 --- a/config/waybar/style/[Light] Monochrome Contrast.css +++ b/config/waybar/style/[Light] Monochrome Contrast.css @@ -107,6 +107,7 @@ tooltip label{ #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Light] Obsidian Glow.css b/config/waybar/style/[Light] Obsidian Glow.css index 692ce5d5..8cb4cd4c 100644 --- a/config/waybar/style/[Light] Obsidian Glow.css +++ b/config/waybar/style/[Light] Obsidian Glow.css @@ -94,6 +94,7 @@ tooltip label { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Rainbow] RGB Bordered.css b/config/waybar/style/[Rainbow] RGB Bordered.css index b38ae40d..4908ebe5 100644 --- a/config/waybar/style/[Rainbow] RGB Bordered.css +++ b/config/waybar/style/[Rainbow] RGB Bordered.css @@ -114,6 +114,7 @@ window#waybar.empty #window { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Retro] Simple Style.css b/config/waybar/style/[Retro] Simple Style.css index 8a601487..f360632a 100644 --- a/config/waybar/style/[Retro] Simple Style.css +++ b/config/waybar/style/[Retro] Simple Style.css @@ -68,6 +68,7 @@ window#waybar { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Transparent] Crystal Clear.css b/config/waybar/style/[Transparent] Crystal Clear.css index b355c176..39eced1a 100644 --- a/config/waybar/style/[Transparent] Crystal Clear.css +++ b/config/waybar/style/[Transparent] Crystal Clear.css @@ -89,6 +89,7 @@ window#waybar.empty #window { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[VERTICAL] [Catpuccin] Mocha.css b/config/waybar/style/[VERTICAL] [Catpuccin] Mocha.css index d265506c..d7269b08 100644 --- a/config/waybar/style/[VERTICAL] [Catpuccin] Mocha.css +++ b/config/waybar/style/[VERTICAL] [Catpuccin] Mocha.css @@ -89,6 +89,7 @@ tooltip label { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[WALLUST] ML4W-modern-mixed.css b/config/waybar/style/[WALLUST] ML4W-modern-mixed.css index b27c1a9d..1f85b878 100644 --- a/config/waybar/style/[WALLUST] ML4W-modern-mixed.css +++ b/config/waybar/style/[WALLUST] ML4W-modern-mixed.css @@ -139,6 +139,7 @@ window#waybar.empty #window { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[WALLUST] ML4W-modern.css b/config/waybar/style/[WALLUST] ML4W-modern.css index 27b72be5..86ac8674 100644 --- a/config/waybar/style/[WALLUST] ML4W-modern.css +++ b/config/waybar/style/[WALLUST] ML4W-modern.css @@ -146,6 +146,7 @@ window#waybar.empty #window { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Wallust Bordered] Chroma Fusion Edge.css b/config/waybar/style/[Wallust Bordered] Chroma Fusion Edge.css index 812dbf6f..9cfea07b 100644 --- a/config/waybar/style/[Wallust Bordered] Chroma Fusion Edge.css +++ b/config/waybar/style/[Wallust Bordered] Chroma Fusion Edge.css @@ -78,6 +78,7 @@ tooltip { #window, #wireplumber, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Wallust Bordered] Chroma Simple.css b/config/waybar/style/[Wallust Bordered] Chroma Simple.css index 3bf56789..4a3c04a5 100644 --- a/config/waybar/style/[Wallust Bordered] Chroma Simple.css +++ b/config/waybar/style/[Wallust Bordered] Chroma Simple.css @@ -103,6 +103,7 @@ tooltip { #window, #wireplumber, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Wallust Transparent] Crystal Clear.css b/config/waybar/style/[Wallust Transparent] Crystal Clear.css index cddee7e7..9786d6e3 100644 --- a/config/waybar/style/[Wallust Transparent] Crystal Clear.css +++ b/config/waybar/style/[Wallust Transparent] Crystal Clear.css @@ -122,6 +122,7 @@ tooltip { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Wallust] Box type.css b/config/waybar/style/[Wallust] Box type.css index 84c85cf6..d7f2c5ac 100644 --- a/config/waybar/style/[Wallust] Box type.css +++ b/config/waybar/style/[Wallust] Box type.css @@ -1,83 +1,81 @@ /* ---- πŸ’« https://github.com/JaKooLit πŸ’« ---- */ /* Wallust - Box type */ -@import '../../.config/waybar/wallust/colors-waybar.css'; +@import "../../.config/waybar/wallust/colors-waybar.css"; * { -font-family: "JetBrainsMono Nerd Font"; -font-weight: bold; -min-height: 0; -/* set font-size to 100% if font scaling is set to 1.00 using nwg-look */ -font-size: 97%; -font-feature-settings: '"zero", "ss01", "ss02", "ss03", "ss04", "ss05", "cv31"'; + font-family: "JetBrainsMono Nerd Font"; + font-weight: bold; + min-height: 0; + /* set font-size to 100% if font scaling is set to 1.00 using nwg-look */ + font-size: 97%; + font-feature-settings: '"zero", "ss01", "ss02", "ss03", "ss04", "ss05", "cv31"'; } - window#waybar { - background: transparent; + background: transparent; } window#waybar.hidden { - opacity: 0.2; + opacity: 0.2; } - window#waybar.empty, window#waybar.empty #window { - background-color: transparent; - padding: 0px; - border: 0px; + background-color: transparent; + padding: 0px; + border: 0px; } #window { - padding-left: 10px; - padding-right: 10px; - border-radius: 10px; - transition: none; - color: transparent; - background: transparent; + padding-left: 10px; + padding-right: 10px; + border-radius: 10px; + transition: none; + color: transparent; + background: transparent; } #taskbar button, #workspaces button { - color: @foreground; - box-shadow: none; - text-shadow: none; - padding: 0px; - border-radius: 9px; - padding-left: 4px; - padding-right: 4px; - animation: gradient_f 20s ease-in infinite; - transition: all 0.5s cubic-bezier(.55,-0.68,.48,1.682); + color: @foreground; + box-shadow: none; + text-shadow: none; + padding: 0px; + border-radius: 9px; + padding-left: 4px; + padding-right: 4px; + animation: gradient_f 20s ease-in infinite; + transition: all 0.5s cubic-bezier(0.55, -0.68, 0.48, 1.682); } #taskbar button.active, #workspaces button.active { - color: @color12; - background-color: @foreground; - padding-left: 4px; - padding-right: 8px; - animation: gradient_f 20s ease-in infinite; - transition: all 0.3s cubic-bezier(.55,-0.68,.48,1.682); + color: @color12; + background-color: @foreground; + padding-left: 4px; + padding-right: 8px; + animation: gradient_f 20s ease-in infinite; + transition: all 0.3s cubic-bezier(0.55, -0.68, 0.48, 1.682); } #taskbar button.focused, #workspaces button.focused { - color: @color4; + color: @color4; } #workspaces button.urgent { - color: #11111b; - border-radius: 10px; + color: #11111b; + border-radius: 10px; } #taskbar button:hover, #workspaces button:hover { - color: @color4; - padding-left: 2px; - padding-right: 8px; - animation: gradient_f 20s ease-in infinite; - transition: all 0.3s cubic-bezier(.55,-0.68,.48,1.682); + color: @color4; + padding-left: 2px; + padding-right: 8px; + animation: gradient_f 20s ease-in infinite; + transition: all 0.3s cubic-bezier(0.55, -0.68, 0.48, 1.682); } #backlight, @@ -95,7 +93,7 @@ window#waybar.empty #window { #network, #power-profiles-daemon, #pulseaudio, -#pulseaudio-slider, +#pulseaudio-slider, #taskbar, #temperature, #tray, @@ -103,6 +101,7 @@ window#waybar.empty #window { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, @@ -130,91 +129,91 @@ window#waybar.empty #window { #custom-weather.clearNight, #custom-weather.cloudyFoggyDay, #custom-weather.cloudyFoggyNight, -#custom-weather.default, +#custom-weather.default, #custom-weather.rainyDay, #custom-weather.rainyNight, #custom-weather.severe, #custom-weather.showyIcyDay, #custom-weather.snowyIcyNight, -#custom-weather.sunnyDay{ - padding-top: 4px; - padding-bottom: 4px; - padding-left: 8px; - padding-right: 10px; - border-radius: 10px; - transition: none; - color: @foreground; - background: @color0; - border-bottom-width: 5px; - border-bottom-color: @color12; - border-bottom-style: solid; +#custom-weather.sunnyDay { + padding-top: 4px; + padding-bottom: 4px; + padding-left: 8px; + padding-right: 10px; + border-radius: 10px; + transition: none; + color: @foreground; + background: @color0; + border-bottom-width: 5px; + border-bottom-color: @color12; + border-bottom-style: solid; } #custom-power { - padding-right: 2px; + padding-right: 2px; } /*-----Indicators----*/ #custom-hypridle.notactive, #idle_inhibitor.activated { - color: #39FF14; + color: #39ff14; } #network { - padding-right: 12px; + padding-right: 12px; } #temperature.critical { - background-color: red; - color: black; + background-color: red; + color: black; } #mpris { - padding-right: 2px; - padding-left: 8px; + padding-right: 2px; + padding-left: 8px; } #backlight { - padding-right: 2px; + padding-right: 2px; } #battery.critical:not(.charging) { - background-color: #ffffff; - color: #000000; - animation-name: blink; - animation-duration: 3.0s; - animation-timing-function: steps(12); - animation-iteration-count: infinite; - animation-direction: alternate; - border-bottom-width: 5px; - border-bottom-color: @color12; - border-bottom-style: solid; + background-color: #ffffff; + color: #000000; + animation-name: blink; + animation-duration: 3s; + animation-timing-function: steps(12); + animation-iteration-count: infinite; + animation-direction: alternate; + border-bottom-width: 5px; + border-bottom-color: @color12; + border-bottom-style: solid; } @keyframes blink { - to { - background-color: #ffffff; - color: #000000; - } + to { + background-color: #ffffff; + color: #000000; + } } #backlight-slider slider, #pulseaudio-slider slider { - min-width: 0px; - min-height: 0px; - opacity: 10; - background-image: none; - border: none; - box-shadow: @color12; + min-width: 0px; + min-height: 0px; + opacity: 10; + background-image: none; + border: none; + box-shadow: @color12; } #backlight-slider trough, #pulseaudio-slider trough { - min-width: 80px; - min-height: 5px; - border-radius: 5px; + min-width: 80px; + min-height: 5px; + border-radius: 5px; } #backlight-slider highlight, #pulseaudio-slider highlight { - min-height: 10px; - border-radius: 5px; + min-height: 10px; + border-radius: 5px; } diff --git a/config/waybar/style/[Wallust] Chroma Edge.css b/config/waybar/style/[Wallust] Chroma Edge.css index 3530c3af..aab65c83 100644 --- a/config/waybar/style/[Wallust] Chroma Edge.css +++ b/config/waybar/style/[Wallust] Chroma Edge.css @@ -106,6 +106,7 @@ tooltip label{ #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Wallust] Chroma Fusion.css b/config/waybar/style/[Wallust] Chroma Fusion.css index d740c78f..3d424570 100644 --- a/config/waybar/style/[Wallust] Chroma Fusion.css +++ b/config/waybar/style/[Wallust] Chroma Fusion.css @@ -79,6 +79,7 @@ tooltip { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Wallust] Chroma Tally V2.css b/config/waybar/style/[Wallust] Chroma Tally V2.css index 8082331b..eeea49d9 100644 --- a/config/waybar/style/[Wallust] Chroma Tally V2.css +++ b/config/waybar/style/[Wallust] Chroma Tally V2.css @@ -91,6 +91,7 @@ tooltip { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Wallust] Chroma Tally.css b/config/waybar/style/[Wallust] Chroma Tally.css index a6fd1ee9..6d2fdc0f 100644 --- a/config/waybar/style/[Wallust] Chroma Tally.css +++ b/config/waybar/style/[Wallust] Chroma Tally.css @@ -90,6 +90,7 @@ tooltip { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Wallust] Colored.css b/config/waybar/style/[Wallust] Colored.css index 435f3651..299692fd 100644 --- a/config/waybar/style/[Wallust] Colored.css +++ b/config/waybar/style/[Wallust] Colored.css @@ -131,6 +131,7 @@ tooltip { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, diff --git a/config/waybar/style/[Wallust] Simple.css b/config/waybar/style/[Wallust] Simple.css index c2206c10..3285cb31 100644 --- a/config/waybar/style/[Wallust] Simple.css +++ b/config/waybar/style/[Wallust] Simple.css @@ -110,6 +110,7 @@ tooltip { #wireplumber, #workspaces, #custom-backlight, +#custom-nightlight, #custom-browser, #custom-cava_mviz, #custom-cycle_wall, -- cgit v1.2.3 From d2ab85d414b798f5c2623d422f4202643c7911d4 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Tue, 20 Jan 2026 08:26:16 -0500 Subject: Updated CHANGELOG --- CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8ae7c154..e49b5ffc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,16 @@ ## v2.3.19 +- 2026-01-20 +- Fixed CSS to format the `custom/nightlight` module +- Fixed padding on some CSS files + +- 2026-01-19 +- Removed "Set wallpaper SDDM prompt" +- When changing wallpaper there is no longer a prompt to set it on SDDM +- It's not a menu option under Quick Settings menu `SUPER SHIFT + E` +- Fixed `Glass` style sheets + - 2026-01-16 - Added `Rainbow Borders sub memu` - Code provided by [brunoorsolon](https://github.com/brunoorsolon) -- cgit v1.2.3 From 342a366e492b7c55d6db9a9c10702cc81ebbf534 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Tue, 20 Jan 2026 09:47:06 -0500 Subject: Fixing night-light across all themes dark/light On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/waybar/style/Crystal Clear Glass.css modified: config/waybar/style/ML4W Glass-3d.css modified: config/waybar/style/ML4W Glass.css modified: config/waybar/style/[0 VERTICAL] Golden Noir.css modified: config/waybar/style/[0 VERTICAL] Oglo Chicklets.css modified: config/waybar/style/[0 VERTICAL] [Catpuccin] Mocha.css modified: config/waybar/style/[Black & White] Monochrome.css modified: config/waybar/style/[Catppuccin] Frappe.css modified: config/waybar/style/[Catppuccin] Latte.css modified: config/waybar/style/[Catppuccin] Mocha.css modified: config/waybar/style/[Colored] Chroma Glow.css modified: config/waybar/style/[Colored] Translucent.css modified: config/waybar/style/[Colorful] Aurora Blossom.css modified: config/waybar/style/[Colorful] Aurora.css modified: config/waybar/style/[Colorful] Oglo Chicklets.css modified: config/waybar/style/[Colorful] Rainbow Spectrum.css modified: config/waybar/style/[Colorful] stolen-style.css modified: config/waybar/style/[Dark] Golden Eclipse.css modified: config/waybar/style/[Dark] Golden Noir.css modified: config/waybar/style/[Dark] Latte-Wallust combined v2.css modified: config/waybar/style/[Dark] Latte-Wallust combined.css modified: config/waybar/style/[Dark] Purpl.css modified: config/waybar/style/[Dark] Wallust Obsidian Edge.css modified: config/waybar/style/[Extra] Arrow.css modified: config/waybar/style/[Extra] Crimson.css modified: config/waybar/style/[Extra] EverForest.css modified: config/waybar/style/[Extra] ML4W starter.css modified: config/waybar/style/[Extra] Mauve.css modified: config/waybar/style/[Extra] Modern-Combined - Transparent.css modified: config/waybar/style/[Extra] Modern-Combined.css modified: config/waybar/style/[Extra] Neon Circuit.css modified: config/waybar/style/[Extra] Prismatic Glow.css modified: config/waybar/style/[Extra] Rose Pine.css modified: config/waybar/style/[Extra] Simple Pink.css modified: config/waybar/style/[Light] Monochrome Contrast.css modified: config/waybar/style/[Light] Obsidian Glow.css modified: config/waybar/style/[Rainbow] RGB Bordered.css modified: config/waybar/style/[Retro] Simple Style.css modified: config/waybar/style/[Transparent] Crystal Clear.css modified: config/waybar/style/[VERTICAL] [Catpuccin] Mocha.css modified: config/waybar/style/[WALLUST] ML4W-modern-mixed.css modified: config/waybar/style/[WALLUST] ML4W-modern.css modified: config/waybar/style/[Wallust Bordered] Chroma Fusion Edge.css modified: config/waybar/style/[Wallust Bordered] Chroma Simple.css modified: config/waybar/style/[Wallust Transparent] Crystal Clear.css modified: config/waybar/style/[Wallust] Box type.css modified: config/waybar/style/[Wallust] Chroma Edge.css modified: config/waybar/style/[Wallust] Chroma Fusion.css modified: config/waybar/style/[Wallust] Chroma Tally V2.css modified: config/waybar/style/[Wallust] Chroma Tally.css modified: config/waybar/style/[Wallust] Colored.css modified: config/waybar/style/[Wallust] Simple.css --- config/waybar/style/Crystal Clear Glass.css | 1 + config/waybar/style/ML4W Glass-3d.css | 1 + config/waybar/style/ML4W Glass.css | 1 + config/waybar/style/[0 VERTICAL] Golden Noir.css | 1 + config/waybar/style/[0 VERTICAL] Oglo Chicklets.css | 2 ++ config/waybar/style/[0 VERTICAL] [Catpuccin] Mocha.css | 1 + config/waybar/style/[Black & White] Monochrome.css | 1 + config/waybar/style/[Catppuccin] Frappe.css | 1 + config/waybar/style/[Catppuccin] Latte.css | 1 + config/waybar/style/[Catppuccin] Mocha.css | 1 + config/waybar/style/[Colored] Chroma Glow.css | 2 ++ config/waybar/style/[Colored] Translucent.css | 1 + config/waybar/style/[Colorful] Aurora Blossom.css | 1 + config/waybar/style/[Colorful] Aurora.css | 1 + config/waybar/style/[Colorful] Oglo Chicklets.css | 3 +++ config/waybar/style/[Colorful] Rainbow Spectrum.css | 2 ++ config/waybar/style/[Colorful] stolen-style.css | 1 + config/waybar/style/[Dark] Golden Eclipse.css | 1 + config/waybar/style/[Dark] Golden Noir.css | 1 + config/waybar/style/[Dark] Latte-Wallust combined v2.css | 1 + config/waybar/style/[Dark] Latte-Wallust combined.css | 1 + config/waybar/style/[Dark] Purpl.css | 1 + config/waybar/style/[Dark] Wallust Obsidian Edge.css | 1 + config/waybar/style/[Extra] Arrow.css | 1 + config/waybar/style/[Extra] Crimson.css | 1 + config/waybar/style/[Extra] EverForest.css | 1 + config/waybar/style/[Extra] ML4W starter.css | 1 + config/waybar/style/[Extra] Mauve.css | 1 + config/waybar/style/[Extra] Modern-Combined - Transparent.css | 1 + config/waybar/style/[Extra] Modern-Combined.css | 1 + config/waybar/style/[Extra] Neon Circuit.css | 1 + config/waybar/style/[Extra] Prismatic Glow.css | 1 + config/waybar/style/[Extra] Rose Pine.css | 1 + config/waybar/style/[Extra] Simple Pink.css | 1 + config/waybar/style/[Light] Monochrome Contrast.css | 1 + config/waybar/style/[Light] Obsidian Glow.css | 1 + config/waybar/style/[Rainbow] RGB Bordered.css | 1 + config/waybar/style/[Retro] Simple Style.css | 1 + config/waybar/style/[Transparent] Crystal Clear.css | 1 + config/waybar/style/[VERTICAL] [Catpuccin] Mocha.css | 1 + config/waybar/style/[WALLUST] ML4W-modern-mixed.css | 1 + config/waybar/style/[WALLUST] ML4W-modern.css | 1 + config/waybar/style/[Wallust Bordered] Chroma Fusion Edge.css | 2 ++ config/waybar/style/[Wallust Bordered] Chroma Simple.css | 1 + config/waybar/style/[Wallust Transparent] Crystal Clear.css | 1 + config/waybar/style/[Wallust] Box type.css | 1 + config/waybar/style/[Wallust] Chroma Edge.css | 1 + config/waybar/style/[Wallust] Chroma Fusion.css | 2 ++ config/waybar/style/[Wallust] Chroma Tally V2.css | 2 ++ config/waybar/style/[Wallust] Chroma Tally.css | 2 ++ config/waybar/style/[Wallust] Colored.css | 1 + config/waybar/style/[Wallust] Simple.css | 1 + 52 files changed, 61 insertions(+) diff --git a/config/waybar/style/Crystal Clear Glass.css b/config/waybar/style/Crystal Clear Glass.css index 37e54744..3e309abb 100644 --- a/config/waybar/style/Crystal Clear Glass.css +++ b/config/waybar/style/Crystal Clear Glass.css @@ -214,6 +214,7 @@ window#waybar.empty #window { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/ML4W Glass-3d.css b/config/waybar/style/ML4W Glass-3d.css index 9df5eaf7..e54b07cc 100644 --- a/config/waybar/style/ML4W Glass-3d.css +++ b/config/waybar/style/ML4W Glass-3d.css @@ -296,6 +296,7 @@ window#waybar.empty #window { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/ML4W Glass.css b/config/waybar/style/ML4W Glass.css index 7cacf7c1..3a48d39a 100644 --- a/config/waybar/style/ML4W Glass.css +++ b/config/waybar/style/ML4W Glass.css @@ -264,6 +264,7 @@ window#waybar.empty #window { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[0 VERTICAL] Golden Noir.css b/config/waybar/style/[0 VERTICAL] Golden Noir.css index 1c6fef93..4ba5ce5c 100644 --- a/config/waybar/style/[0 VERTICAL] Golden Noir.css +++ b/config/waybar/style/[0 VERTICAL] Golden Noir.css @@ -127,6 +127,7 @@ tooltip { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[0 VERTICAL] Oglo Chicklets.css b/config/waybar/style/[0 VERTICAL] Oglo Chicklets.css index 8395dd79..c4dc5528 100644 --- a/config/waybar/style/[0 VERTICAL] Oglo Chicklets.css +++ b/config/waybar/style/[0 VERTICAL] Oglo Chicklets.css @@ -89,6 +89,7 @@ button.active { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, @@ -222,6 +223,7 @@ label:focus { #custom-lock, #custom-light_dark, +#custom-nightlight, #backlight { background-color: #64b6ac; color: #2d353b; diff --git a/config/waybar/style/[0 VERTICAL] [Catpuccin] Mocha.css b/config/waybar/style/[0 VERTICAL] [Catpuccin] Mocha.css index 92b5c753..51dcd663 100644 --- a/config/waybar/style/[0 VERTICAL] [Catpuccin] Mocha.css +++ b/config/waybar/style/[0 VERTICAL] [Catpuccin] Mocha.css @@ -99,6 +99,7 @@ tooltip label { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[Black & White] Monochrome.css b/config/waybar/style/[Black & White] Monochrome.css index 5802eb7d..bc48e705 100644 --- a/config/waybar/style/[Black & White] Monochrome.css +++ b/config/waybar/style/[Black & White] Monochrome.css @@ -136,6 +136,7 @@ tooltip label{ #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[Catppuccin] Frappe.css b/config/waybar/style/[Catppuccin] Frappe.css index a018480a..99ee27f2 100644 --- a/config/waybar/style/[Catppuccin] Frappe.css +++ b/config/waybar/style/[Catppuccin] Frappe.css @@ -100,6 +100,7 @@ window#waybar.hidden { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[Catppuccin] Latte.css b/config/waybar/style/[Catppuccin] Latte.css index ae495323..28a877d3 100644 --- a/config/waybar/style/[Catppuccin] Latte.css +++ b/config/waybar/style/[Catppuccin] Latte.css @@ -99,6 +99,7 @@ window#waybar.hidden { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[Catppuccin] Mocha.css b/config/waybar/style/[Catppuccin] Mocha.css index 22ee3f01..8a51b1da 100644 --- a/config/waybar/style/[Catppuccin] Mocha.css +++ b/config/waybar/style/[Catppuccin] Mocha.css @@ -122,6 +122,7 @@ window#waybar.empty #window { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[Colored] Chroma Glow.css b/config/waybar/style/[Colored] Chroma Glow.css index c498a1ca..0bef9582 100644 --- a/config/waybar/style/[Colored] Chroma Glow.css +++ b/config/waybar/style/[Colored] Chroma Glow.css @@ -123,6 +123,7 @@ tooltip label{ #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, @@ -215,6 +216,7 @@ label:focus { } #custom-light_dark, +#custom-nightlight, #backlight { color: white; } diff --git a/config/waybar/style/[Colored] Translucent.css b/config/waybar/style/[Colored] Translucent.css index dfe545d3..f53680df 100644 --- a/config/waybar/style/[Colored] Translucent.css +++ b/config/waybar/style/[Colored] Translucent.css @@ -124,6 +124,7 @@ tooltip { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[Colorful] Aurora Blossom.css b/config/waybar/style/[Colorful] Aurora Blossom.css index 5d4e61cb..b31b0dfb 100644 --- a/config/waybar/style/[Colorful] Aurora Blossom.css +++ b/config/waybar/style/[Colorful] Aurora Blossom.css @@ -115,6 +115,7 @@ tooltip label{ #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[Colorful] Aurora.css b/config/waybar/style/[Colorful] Aurora.css index e89f557d..d2ae729c 100644 --- a/config/waybar/style/[Colorful] Aurora.css +++ b/config/waybar/style/[Colorful] Aurora.css @@ -104,6 +104,7 @@ tooltip label{ #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[Colorful] Oglo Chicklets.css b/config/waybar/style/[Colorful] Oglo Chicklets.css index 2bc07c2d..88df9d8c 100644 --- a/config/waybar/style/[Colorful] Oglo Chicklets.css +++ b/config/waybar/style/[Colorful] Oglo Chicklets.css @@ -89,6 +89,7 @@ button.active { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, @@ -222,6 +223,7 @@ label:focus { #custom-lock, #custom-light_dark, +#custom-nightlight, #backlight { background-color: #64b6ac; color: #2d353b; @@ -297,6 +299,7 @@ label:focus { #idle_inhibitor { background-color: #2d3436; + border-bottom: 8px solid #1d2327; } #idle_inhibitor.activated { diff --git a/config/waybar/style/[Colorful] Rainbow Spectrum.css b/config/waybar/style/[Colorful] Rainbow Spectrum.css index 675cc6b9..dfaf335e 100644 --- a/config/waybar/style/[Colorful] Rainbow Spectrum.css +++ b/config/waybar/style/[Colorful] Rainbow Spectrum.css @@ -107,6 +107,7 @@ tooltip label{ #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, @@ -261,6 +262,7 @@ tooltip label{ #custom-power_vertical, #custom-light_dark, +#custom-nightlight, #custom-hypridle, #idle_inhibitor { background-color: #86b4fa; diff --git a/config/waybar/style/[Colorful] stolen-style.css b/config/waybar/style/[Colorful] stolen-style.css index a2d7a1b4..7e8ee80d 100644 --- a/config/waybar/style/[Colorful] stolen-style.css +++ b/config/waybar/style/[Colorful] stolen-style.css @@ -58,6 +58,7 @@ window#waybar.empty #window { #custom-hyprWindowMode, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-menu, #custom-power, diff --git a/config/waybar/style/[Dark] Golden Eclipse.css b/config/waybar/style/[Dark] Golden Eclipse.css index 449edbb1..80adc52a 100644 --- a/config/waybar/style/[Dark] Golden Eclipse.css +++ b/config/waybar/style/[Dark] Golden Eclipse.css @@ -63,6 +63,7 @@ window#waybar.hidden { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[Dark] Golden Noir.css b/config/waybar/style/[Dark] Golden Noir.css index 5fc037c6..1ccaaac7 100644 --- a/config/waybar/style/[Dark] Golden Noir.css +++ b/config/waybar/style/[Dark] Golden Noir.css @@ -127,6 +127,7 @@ tooltip { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[Dark] Latte-Wallust combined v2.css b/config/waybar/style/[Dark] Latte-Wallust combined v2.css index b29d000d..415fb37f 100644 --- a/config/waybar/style/[Dark] Latte-Wallust combined v2.css +++ b/config/waybar/style/[Dark] Latte-Wallust combined v2.css @@ -141,6 +141,7 @@ tooltip { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[Dark] Latte-Wallust combined.css b/config/waybar/style/[Dark] Latte-Wallust combined.css index b2466370..1ccd741a 100644 --- a/config/waybar/style/[Dark] Latte-Wallust combined.css +++ b/config/waybar/style/[Dark] Latte-Wallust combined.css @@ -146,6 +146,7 @@ tooltip { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[Dark] Purpl.css b/config/waybar/style/[Dark] Purpl.css index 5e7cefb0..0115756a 100644 --- a/config/waybar/style/[Dark] Purpl.css +++ b/config/waybar/style/[Dark] Purpl.css @@ -131,6 +131,7 @@ tooltip { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[Dark] Wallust Obsidian Edge.css b/config/waybar/style/[Dark] Wallust Obsidian Edge.css index 9f7403b2..9705376e 100644 --- a/config/waybar/style/[Dark] Wallust Obsidian Edge.css +++ b/config/waybar/style/[Dark] Wallust Obsidian Edge.css @@ -117,6 +117,7 @@ tooltip label { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[Extra] Arrow.css b/config/waybar/style/[Extra] Arrow.css index 42119200..84d9ead0 100644 --- a/config/waybar/style/[Extra] Arrow.css +++ b/config/waybar/style/[Extra] Arrow.css @@ -93,6 +93,7 @@ #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[Extra] Crimson.css b/config/waybar/style/[Extra] Crimson.css index 8d7f4c2c..e8b0e1fd 100644 --- a/config/waybar/style/[Extra] Crimson.css +++ b/config/waybar/style/[Extra] Crimson.css @@ -115,6 +115,7 @@ tooltip { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[Extra] EverForest.css b/config/waybar/style/[Extra] EverForest.css index d26dde10..f1f78271 100644 --- a/config/waybar/style/[Extra] EverForest.css +++ b/config/waybar/style/[Extra] EverForest.css @@ -295,6 +295,7 @@ window#waybar.hidden { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[Extra] ML4W starter.css b/config/waybar/style/[Extra] ML4W starter.css index 5cba2f61..42abcdac 100644 --- a/config/waybar/style/[Extra] ML4W starter.css +++ b/config/waybar/style/[Extra] ML4W starter.css @@ -164,6 +164,7 @@ window#waybar.empty #window { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[Extra] Mauve.css b/config/waybar/style/[Extra] Mauve.css index 52285f1f..9c37caba 100644 --- a/config/waybar/style/[Extra] Mauve.css +++ b/config/waybar/style/[Extra] Mauve.css @@ -134,6 +134,7 @@ tooltip { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[Extra] Modern-Combined - Transparent.css b/config/waybar/style/[Extra] Modern-Combined - Transparent.css index 285c1440..0b387865 100644 --- a/config/waybar/style/[Extra] Modern-Combined - Transparent.css +++ b/config/waybar/style/[Extra] Modern-Combined - Transparent.css @@ -148,6 +148,7 @@ tooltip { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[Extra] Modern-Combined.css b/config/waybar/style/[Extra] Modern-Combined.css index a225f483..5fe379d7 100644 --- a/config/waybar/style/[Extra] Modern-Combined.css +++ b/config/waybar/style/[Extra] Modern-Combined.css @@ -151,6 +151,7 @@ tooltip { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[Extra] Neon Circuit.css b/config/waybar/style/[Extra] Neon Circuit.css index 2912a604..413021c9 100644 --- a/config/waybar/style/[Extra] Neon Circuit.css +++ b/config/waybar/style/[Extra] Neon Circuit.css @@ -112,6 +112,7 @@ tooltip { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[Extra] Prismatic Glow.css b/config/waybar/style/[Extra] Prismatic Glow.css index 1c1c646f..367d2076 100644 --- a/config/waybar/style/[Extra] Prismatic Glow.css +++ b/config/waybar/style/[Extra] Prismatic Glow.css @@ -159,6 +159,7 @@ window#waybar.empty { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[Extra] Rose Pine.css b/config/waybar/style/[Extra] Rose Pine.css index 0ee7334a..ed08fdc5 100644 --- a/config/waybar/style/[Extra] Rose Pine.css +++ b/config/waybar/style/[Extra] Rose Pine.css @@ -135,6 +135,7 @@ tooltip { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[Extra] Simple Pink.css b/config/waybar/style/[Extra] Simple Pink.css index d63e751d..7c3454e3 100644 --- a/config/waybar/style/[Extra] Simple Pink.css +++ b/config/waybar/style/[Extra] Simple Pink.css @@ -127,6 +127,7 @@ tooltip { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[Light] Monochrome Contrast.css b/config/waybar/style/[Light] Monochrome Contrast.css index 91a330bf..ddf0e4e9 100644 --- a/config/waybar/style/[Light] Monochrome Contrast.css +++ b/config/waybar/style/[Light] Monochrome Contrast.css @@ -116,6 +116,7 @@ tooltip label{ #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[Light] Obsidian Glow.css b/config/waybar/style/[Light] Obsidian Glow.css index 8cb4cd4c..6ed128de 100644 --- a/config/waybar/style/[Light] Obsidian Glow.css +++ b/config/waybar/style/[Light] Obsidian Glow.css @@ -103,6 +103,7 @@ tooltip label { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[Rainbow] RGB Bordered.css b/config/waybar/style/[Rainbow] RGB Bordered.css index 4908ebe5..8a4a66e2 100644 --- a/config/waybar/style/[Rainbow] RGB Bordered.css +++ b/config/waybar/style/[Rainbow] RGB Bordered.css @@ -123,6 +123,7 @@ window#waybar.empty #window { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[Retro] Simple Style.css b/config/waybar/style/[Retro] Simple Style.css index f360632a..081dcc16 100644 --- a/config/waybar/style/[Retro] Simple Style.css +++ b/config/waybar/style/[Retro] Simple Style.css @@ -77,6 +77,7 @@ window#waybar { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[Transparent] Crystal Clear.css b/config/waybar/style/[Transparent] Crystal Clear.css index 39eced1a..f1542c15 100644 --- a/config/waybar/style/[Transparent] Crystal Clear.css +++ b/config/waybar/style/[Transparent] Crystal Clear.css @@ -98,6 +98,7 @@ window#waybar.empty #window { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[VERTICAL] [Catpuccin] Mocha.css b/config/waybar/style/[VERTICAL] [Catpuccin] Mocha.css index d7269b08..297b9f57 100644 --- a/config/waybar/style/[VERTICAL] [Catpuccin] Mocha.css +++ b/config/waybar/style/[VERTICAL] [Catpuccin] Mocha.css @@ -98,6 +98,7 @@ tooltip label { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[WALLUST] ML4W-modern-mixed.css b/config/waybar/style/[WALLUST] ML4W-modern-mixed.css index 1f85b878..d16a011b 100644 --- a/config/waybar/style/[WALLUST] ML4W-modern-mixed.css +++ b/config/waybar/style/[WALLUST] ML4W-modern-mixed.css @@ -148,6 +148,7 @@ window#waybar.empty #window { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[WALLUST] ML4W-modern.css b/config/waybar/style/[WALLUST] ML4W-modern.css index 86ac8674..f0bb4f47 100644 --- a/config/waybar/style/[WALLUST] ML4W-modern.css +++ b/config/waybar/style/[WALLUST] ML4W-modern.css @@ -155,6 +155,7 @@ window#waybar.empty #window { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[Wallust Bordered] Chroma Fusion Edge.css b/config/waybar/style/[Wallust Bordered] Chroma Fusion Edge.css index 9cfea07b..97c4af6e 100644 --- a/config/waybar/style/[Wallust Bordered] Chroma Fusion Edge.css +++ b/config/waybar/style/[Wallust Bordered] Chroma Fusion Edge.css @@ -87,6 +87,7 @@ tooltip { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, @@ -130,6 +131,7 @@ tooltip { padding: 0px 2px 0px 6px; } #custom-light_dark, +#custom-nightlight, #custom-menu{ color: @flamingo; padding: 0px 8px 0px 4px; diff --git a/config/waybar/style/[Wallust Bordered] Chroma Simple.css b/config/waybar/style/[Wallust Bordered] Chroma Simple.css index 4a3c04a5..ff2f976f 100644 --- a/config/waybar/style/[Wallust Bordered] Chroma Simple.css +++ b/config/waybar/style/[Wallust Bordered] Chroma Simple.css @@ -112,6 +112,7 @@ tooltip { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[Wallust Transparent] Crystal Clear.css b/config/waybar/style/[Wallust Transparent] Crystal Clear.css index 9786d6e3..cc5133d7 100644 --- a/config/waybar/style/[Wallust Transparent] Crystal Clear.css +++ b/config/waybar/style/[Wallust Transparent] Crystal Clear.css @@ -131,6 +131,7 @@ tooltip { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[Wallust] Box type.css b/config/waybar/style/[Wallust] Box type.css index d7f2c5ac..90917d67 100644 --- a/config/waybar/style/[Wallust] Box type.css +++ b/config/waybar/style/[Wallust] Box type.css @@ -110,6 +110,7 @@ window#waybar.empty #window { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[Wallust] Chroma Edge.css b/config/waybar/style/[Wallust] Chroma Edge.css index aab65c83..4ee806ac 100644 --- a/config/waybar/style/[Wallust] Chroma Edge.css +++ b/config/waybar/style/[Wallust] Chroma Edge.css @@ -115,6 +115,7 @@ tooltip label{ #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[Wallust] Chroma Fusion.css b/config/waybar/style/[Wallust] Chroma Fusion.css index 3d424570..2fa36e24 100644 --- a/config/waybar/style/[Wallust] Chroma Fusion.css +++ b/config/waybar/style/[Wallust] Chroma Fusion.css @@ -88,6 +88,7 @@ tooltip { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, @@ -132,6 +133,7 @@ tooltip { opacity:1.0; } #custom-light_dark, +#custom-nightlight, #custom-menu{ color: @flamingo; padding: 0px 8px 0px 4px; diff --git a/config/waybar/style/[Wallust] Chroma Tally V2.css b/config/waybar/style/[Wallust] Chroma Tally V2.css index eeea49d9..d3f4b126 100644 --- a/config/waybar/style/[Wallust] Chroma Tally V2.css +++ b/config/waybar/style/[Wallust] Chroma Tally V2.css @@ -100,6 +100,7 @@ tooltip { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, @@ -200,6 +201,7 @@ tooltip { } #custom-light_dark, +#custom-nightlight, #temperature { color: @color6; /* Lighter */ } diff --git a/config/waybar/style/[Wallust] Chroma Tally.css b/config/waybar/style/[Wallust] Chroma Tally.css index 6d2fdc0f..d34708b5 100644 --- a/config/waybar/style/[Wallust] Chroma Tally.css +++ b/config/waybar/style/[Wallust] Chroma Tally.css @@ -99,6 +99,7 @@ tooltip { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, @@ -203,6 +204,7 @@ tooltip { } #custom-light_dark, +#custom-nightlight, #temperature { color: #7287fd; } diff --git a/config/waybar/style/[Wallust] Colored.css b/config/waybar/style/[Wallust] Colored.css index 299692fd..921ce5cb 100644 --- a/config/waybar/style/[Wallust] Colored.css +++ b/config/waybar/style/[Wallust] Colored.css @@ -140,6 +140,7 @@ tooltip { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, diff --git a/config/waybar/style/[Wallust] Simple.css b/config/waybar/style/[Wallust] Simple.css index 3285cb31..4a05999f 100644 --- a/config/waybar/style/[Wallust] Simple.css +++ b/config/waybar/style/[Wallust] Simple.css @@ -119,6 +119,7 @@ tooltip { #custom-keybinds, #custom-keyboard, #custom-light_dark, +#custom-nightlight, #custom-lock, #custom-hint, #custom-hypridle, -- cgit v1.2.3 From 503a85b0ef35724e9e8bc1053713539c39febd54 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Tue, 20 Jan 2026 09:52:44 -0500 Subject: I loved editing CSS files I really do! I swear! On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/waybar/style/[0 VERTICAL] Golden Noir.css modified: config/waybar/style/[0 VERTICAL] Oglo Chicklets.css modified: config/waybar/style/[0 VERTICAL] [Catpuccin] Mocha.css modified: config/waybar/style/[Black & White] Monochrome.css modified: config/waybar/style/[Catppuccin] Frappe.css modified: config/waybar/style/[Catppuccin] Latte.css modified: config/waybar/style/[Catppuccin] Mocha.css modified: config/waybar/style/[Colored] Chroma Glow.css modified: config/waybar/style/[Colored] Translucent.css modified: config/waybar/style/[Colorful] Aurora Blossom.css modified: config/waybar/style/[Colorful] Aurora.css modified: config/waybar/style/[Colorful] Oglo Chicklets.css modified: config/waybar/style/[Colorful] Rainbow Spectrum.css modified: config/waybar/style/[Colorful] stolen-style.css modified: config/waybar/style/[Dark] Golden Eclipse.css modified: config/waybar/style/[Dark] Golden Noir.css modified: config/waybar/style/[Dark] Half-Moon.css modified: config/waybar/style/[Dark] Latte-Wallust combined v2.css modified: config/waybar/style/[Dark] Latte-Wallust combined.css modified: config/waybar/style/[Dark] Purpl.css modified: config/waybar/style/[Dark] Wallust Obsidian Edge.css modified: config/waybar/style/[Extra] Crimson.css modified: config/waybar/style/[Extra] EverForest.css modified: config/waybar/style/[Extra] Mauve.css modified: config/waybar/style/[Extra] Modern-Combined - Transparent.css modified: config/waybar/style/[Extra] Modern-Combined.css modified: config/waybar/style/[Extra] Rose Pine.css modified: config/waybar/style/[Extra] Simple Pink.css modified: config/waybar/style/[Light] Monochrome Contrast.css modified: config/waybar/style/[Light] Obsidian Glow.css modified: config/waybar/style/[Rainbow] RGB Bordered.css modified: config/waybar/style/[Retro] Simple Style.css modified: config/waybar/style/[Transparent] Crystal Clear.css modified: config/waybar/style/[VERTICAL] [Catpuccin] Mocha.css modified: config/waybar/style/[WALLUST] ML4W-modern-mixed.css modified: config/waybar/style/[WALLUST] ML4W-modern.css modified: config/waybar/style/[Wallust Bordered] Chroma Fusion Edge.css modified: config/waybar/style/[Wallust Bordered] Chroma Simple.css modified: config/waybar/style/[Wallust Transparent] Crystal Clear.css modified: config/waybar/style/[Wallust] Box type.css modified: config/waybar/style/[Wallust] Chroma Edge.css modified: config/waybar/style/[Wallust] Chroma Fusion.css modified: config/waybar/style/[Wallust] Chroma Tally V2.css modified: config/waybar/style/[Wallust] Chroma Tally.css modified: config/waybar/style/[Wallust] Colored.css modified: config/waybar/style/[Wallust] Simple.css --- config/waybar/style/[0 VERTICAL] Golden Noir.css | 1 + config/waybar/style/[0 VERTICAL] Oglo Chicklets.css | 2 ++ config/waybar/style/[0 VERTICAL] [Catpuccin] Mocha.css | 1 + config/waybar/style/[Black & White] Monochrome.css | 1 + config/waybar/style/[Catppuccin] Frappe.css | 1 + config/waybar/style/[Catppuccin] Latte.css | 1 + config/waybar/style/[Catppuccin] Mocha.css | 1 + config/waybar/style/[Colored] Chroma Glow.css | 1 + config/waybar/style/[Colored] Translucent.css | 4 +++- config/waybar/style/[Colorful] Aurora Blossom.css | 1 + config/waybar/style/[Colorful] Aurora.css | 1 + config/waybar/style/[Colorful] Oglo Chicklets.css | 1 + config/waybar/style/[Colorful] Rainbow Spectrum.css | 2 ++ config/waybar/style/[Colorful] stolen-style.css | 1 + config/waybar/style/[Dark] Golden Eclipse.css | 1 + config/waybar/style/[Dark] Golden Noir.css | 1 + config/waybar/style/[Dark] Half-Moon.css | 1 + config/waybar/style/[Dark] Latte-Wallust combined v2.css | 2 ++ config/waybar/style/[Dark] Latte-Wallust combined.css | 2 ++ config/waybar/style/[Dark] Purpl.css | 1 + config/waybar/style/[Dark] Wallust Obsidian Edge.css | 1 + config/waybar/style/[Extra] Crimson.css | 1 + config/waybar/style/[Extra] EverForest.css | 2 ++ config/waybar/style/[Extra] Mauve.css | 1 + config/waybar/style/[Extra] Modern-Combined - Transparent.css | 2 ++ config/waybar/style/[Extra] Modern-Combined.css | 2 ++ config/waybar/style/[Extra] Rose Pine.css | 1 + config/waybar/style/[Extra] Simple Pink.css | 1 + config/waybar/style/[Light] Monochrome Contrast.css | 1 + config/waybar/style/[Light] Obsidian Glow.css | 1 + config/waybar/style/[Rainbow] RGB Bordered.css | 1 + config/waybar/style/[Retro] Simple Style.css | 1 + config/waybar/style/[Transparent] Crystal Clear.css | 1 + config/waybar/style/[VERTICAL] [Catpuccin] Mocha.css | 1 + config/waybar/style/[WALLUST] ML4W-modern-mixed.css | 2 ++ config/waybar/style/[WALLUST] ML4W-modern.css | 2 ++ config/waybar/style/[Wallust Bordered] Chroma Fusion Edge.css | 2 ++ config/waybar/style/[Wallust Bordered] Chroma Simple.css | 1 + config/waybar/style/[Wallust Transparent] Crystal Clear.css | 1 + config/waybar/style/[Wallust] Box type.css | 3 +++ config/waybar/style/[Wallust] Chroma Edge.css | 4 +++- config/waybar/style/[Wallust] Chroma Fusion.css | 2 ++ config/waybar/style/[Wallust] Chroma Tally V2.css | 2 ++ config/waybar/style/[Wallust] Chroma Tally.css | 2 ++ config/waybar/style/[Wallust] Colored.css | 1 + config/waybar/style/[Wallust] Simple.css | 1 + 46 files changed, 65 insertions(+), 2 deletions(-) diff --git a/config/waybar/style/[0 VERTICAL] Golden Noir.css b/config/waybar/style/[0 VERTICAL] Golden Noir.css index 4ba5ce5c..c89aefda 100644 --- a/config/waybar/style/[0 VERTICAL] Golden Noir.css +++ b/config/waybar/style/[0 VERTICAL] Golden Noir.css @@ -175,6 +175,7 @@ tooltip { #custom-hypridle.notactive, #idle_inhibitor.activated { color: #39FF14; + border-bottom: 8px solid rgba(0, 0, 0, 0.2); } #battery.critical:not(.charging) { diff --git a/config/waybar/style/[0 VERTICAL] Oglo Chicklets.css b/config/waybar/style/[0 VERTICAL] Oglo Chicklets.css index c4dc5528..053cb007 100644 --- a/config/waybar/style/[0 VERTICAL] Oglo Chicklets.css +++ b/config/waybar/style/[0 VERTICAL] Oglo Chicklets.css @@ -299,10 +299,12 @@ label:focus { #idle_inhibitor { background-color: #2d3436; + border-bottom: 8px solid #7a8c37; } #idle_inhibitor.activated { background-color: #ecf0f1; + border-bottom: 8px solid #7a8c37; color: #2d3436; } diff --git a/config/waybar/style/[0 VERTICAL] [Catpuccin] Mocha.css b/config/waybar/style/[0 VERTICAL] [Catpuccin] Mocha.css index 51dcd663..0aa6fd45 100644 --- a/config/waybar/style/[0 VERTICAL] [Catpuccin] Mocha.css +++ b/config/waybar/style/[0 VERTICAL] [Catpuccin] Mocha.css @@ -135,6 +135,7 @@ tooltip label { #idle_inhibitor { color: @pink; + border-bottom: 8px solid rgba(0, 0, 0, 0.2); } #mpris { diff --git a/config/waybar/style/[Black & White] Monochrome.css b/config/waybar/style/[Black & White] Monochrome.css index bc48e705..e1e08a60 100644 --- a/config/waybar/style/[Black & White] Monochrome.css +++ b/config/waybar/style/[Black & White] Monochrome.css @@ -172,6 +172,7 @@ tooltip label{ #custom-hypridle.notactive, #idle_inhibitor.activated { color: #39FF14; + border-bottom: 8px solid rgba(0, 0, 0, 0.2); } #pulseaudio.muted { diff --git a/config/waybar/style/[Catppuccin] Frappe.css b/config/waybar/style/[Catppuccin] Frappe.css index 99ee27f2..5ea4884c 100644 --- a/config/waybar/style/[Catppuccin] Frappe.css +++ b/config/waybar/style/[Catppuccin] Frappe.css @@ -137,6 +137,7 @@ window#waybar.hidden { #custom-hypridle.notactive, #idle_inhibitor.activated { color: #39FF14; + border-bottom: 3px solid @sapphire; } #backlight { diff --git a/config/waybar/style/[Catppuccin] Latte.css b/config/waybar/style/[Catppuccin] Latte.css index 28a877d3..4f7411c6 100644 --- a/config/waybar/style/[Catppuccin] Latte.css +++ b/config/waybar/style/[Catppuccin] Latte.css @@ -136,6 +136,7 @@ window#waybar.hidden { #custom-hypridle.notactive, #idle_inhibitor.activated { color: #39FF14; + border-bottom: 3px solid @lavender; } #backlight { diff --git a/config/waybar/style/[Catppuccin] Mocha.css b/config/waybar/style/[Catppuccin] Mocha.css index 8a51b1da..c2b70a2a 100644 --- a/config/waybar/style/[Catppuccin] Mocha.css +++ b/config/waybar/style/[Catppuccin] Mocha.css @@ -158,6 +158,7 @@ window#waybar.empty #window { #custom-hypridle.notactive, #idle_inhibitor.activated { color: #39FF14; + border-bottom: 8px solid rgba(0, 0, 0, 0.2); } #bluetooth, diff --git a/config/waybar/style/[Colored] Chroma Glow.css b/config/waybar/style/[Colored] Chroma Glow.css index 0bef9582..794ca085 100644 --- a/config/waybar/style/[Colored] Chroma Glow.css +++ b/config/waybar/style/[Colored] Chroma Glow.css @@ -284,6 +284,7 @@ label:focus { #custom-hypridle.notactive, #idle_inhibitor.activated { color: #39FF14; + border-bottom: 8px solid rgba(0, 0, 0, 0.2); } #mpd { diff --git a/config/waybar/style/[Colored] Translucent.css b/config/waybar/style/[Colored] Translucent.css index f53680df..edac012c 100644 --- a/config/waybar/style/[Colored] Translucent.css +++ b/config/waybar/style/[Colored] Translucent.css @@ -292,13 +292,15 @@ label:focus { #custom-hypridle, #idle_inhibitor { color: #f9e2af; - /*background-color: #2d3436;*/ + /*background-color: #2d3436; + border-bottom: 8px solid rgba(0, 0, 0, 0.2);*/ } /*-----Indicators----*/ #custom-hypridle.notactive, #idle_inhibitor.activated { color: #39FF14; + border-bottom: 8px solid rgba(0, 0, 0, 0.2); } #mpd { diff --git a/config/waybar/style/[Colorful] Aurora Blossom.css b/config/waybar/style/[Colorful] Aurora Blossom.css index b31b0dfb..8de9c905 100644 --- a/config/waybar/style/[Colorful] Aurora Blossom.css +++ b/config/waybar/style/[Colorful] Aurora Blossom.css @@ -154,6 +154,7 @@ tooltip label{ #custom-hypridle.notactive, #idle_inhibitor.activated { color: #39FF14; + border-bottom: 8px solid rgba(0, 0, 0, 0.2); } #pulseaudio.muted { diff --git a/config/waybar/style/[Colorful] Aurora.css b/config/waybar/style/[Colorful] Aurora.css index d2ae729c..c5e5fde8 100644 --- a/config/waybar/style/[Colorful] Aurora.css +++ b/config/waybar/style/[Colorful] Aurora.css @@ -161,6 +161,7 @@ tooltip label{ #custom-hypridle.notactive, #idle_inhibitor.activated { color: #39FF14; + border-bottom: 8px solid rgba(0, 0, 0, 0.2); } #pulseaudio.muted { diff --git a/config/waybar/style/[Colorful] Oglo Chicklets.css b/config/waybar/style/[Colorful] Oglo Chicklets.css index 88df9d8c..b1910128 100644 --- a/config/waybar/style/[Colorful] Oglo Chicklets.css +++ b/config/waybar/style/[Colorful] Oglo Chicklets.css @@ -304,6 +304,7 @@ label:focus { #idle_inhibitor.activated { background-color: #ecf0f1; + border-bottom: 8px solid #7a8c37; color: #2d3436; } diff --git a/config/waybar/style/[Colorful] Rainbow Spectrum.css b/config/waybar/style/[Colorful] Rainbow Spectrum.css index dfaf335e..4cd9cda8 100644 --- a/config/waybar/style/[Colorful] Rainbow Spectrum.css +++ b/config/waybar/style/[Colorful] Rainbow Spectrum.css @@ -266,12 +266,14 @@ tooltip label{ #custom-hypridle, #idle_inhibitor { background-color: #86b4fa; + border-bottom: 8px solid rgba(0, 0, 0, 0.2); } /*-----Indicators----*/ #custom-hypridle.notactive, #idle_inhibitor.activated { color: #39FF14; + border-bottom: 8px solid rgba(0, 0, 0, 0.2); } #bluetooth { diff --git a/config/waybar/style/[Colorful] stolen-style.css b/config/waybar/style/[Colorful] stolen-style.css index 7e8ee80d..be1a9f61 100644 --- a/config/waybar/style/[Colorful] stolen-style.css +++ b/config/waybar/style/[Colorful] stolen-style.css @@ -117,6 +117,7 @@ window#waybar.empty #window { #idle_inhibitor { color: #7aa2f7; + border-bottom: 2px solid #455a64; } #backlight { diff --git a/config/waybar/style/[Dark] Golden Eclipse.css b/config/waybar/style/[Dark] Golden Eclipse.css index 80adc52a..cb152b48 100644 --- a/config/waybar/style/[Dark] Golden Eclipse.css +++ b/config/waybar/style/[Dark] Golden Eclipse.css @@ -117,6 +117,7 @@ window#waybar.hidden { #custom-hypridle.notactive, #idle_inhibitor.activated { color: cyan; + border-bottom: 8px solid rgba(0, 0, 0, 0.2); } #battery.critical:not(.charging) { diff --git a/config/waybar/style/[Dark] Golden Noir.css b/config/waybar/style/[Dark] Golden Noir.css index 1ccaaac7..8664c35e 100644 --- a/config/waybar/style/[Dark] Golden Noir.css +++ b/config/waybar/style/[Dark] Golden Noir.css @@ -175,6 +175,7 @@ tooltip { #custom-hypridle.notactive, #idle_inhibitor.activated { color: #39FF14; + border-bottom: 8px solid rgba(0, 0, 0, 0.2); } #battery.critical:not(.charging) { diff --git a/config/waybar/style/[Dark] Half-Moon.css b/config/waybar/style/[Dark] Half-Moon.css index c120f511..ba6f78de 100644 --- a/config/waybar/style/[Dark] Half-Moon.css +++ b/config/waybar/style/[Dark] Half-Moon.css @@ -139,6 +139,7 @@ color: #F3F4F5; #custom-hypridle.notactive, #idle_inhibitor.activated { color: #39FF14; + border-bottom: 1px solid rgba(26,27,38,0); } #bluetooth { diff --git a/config/waybar/style/[Dark] Latte-Wallust combined v2.css b/config/waybar/style/[Dark] Latte-Wallust combined v2.css index 415fb37f..e8d8f438 100644 --- a/config/waybar/style/[Dark] Latte-Wallust combined v2.css +++ b/config/waybar/style/[Dark] Latte-Wallust combined v2.css @@ -250,12 +250,14 @@ tooltip { #custom-lock, #idle_inhibitor { color: @teal; + border-bottom: 2px solid @border-color; } /*-----Indicators----*/ #custom-hypridle.notactive, #idle_inhibitor.activated { color: #39FF14; + border-bottom: 2px solid @border-color; } #clock { diff --git a/config/waybar/style/[Dark] Latte-Wallust combined.css b/config/waybar/style/[Dark] Latte-Wallust combined.css index 1ccd741a..a969c395 100644 --- a/config/waybar/style/[Dark] Latte-Wallust combined.css +++ b/config/waybar/style/[Dark] Latte-Wallust combined.css @@ -255,12 +255,14 @@ tooltip { #custom-lock, #idle_inhibitor { color: @teal; + border-bottom: 8px solid rgba(0, 0, 0, 0.2); } /*-----Indicators----*/ #custom-hypridle.notactive, #idle_inhibitor.activated { color: #39FF14; + border-bottom: 8px solid rgba(0, 0, 0, 0.2); } diff --git a/config/waybar/style/[Dark] Purpl.css b/config/waybar/style/[Dark] Purpl.css index 0115756a..090d11ab 100644 --- a/config/waybar/style/[Dark] Purpl.css +++ b/config/waybar/style/[Dark] Purpl.css @@ -179,6 +179,7 @@ tooltip { #custom-hypridle.notactive, #idle_inhibitor.activated { color: #39FF14; + border-bottom: 8px solid rgba(0, 0, 0, 0.2); } #taskbar button.active { diff --git a/config/waybar/style/[Dark] Wallust Obsidian Edge.css b/config/waybar/style/[Dark] Wallust Obsidian Edge.css index 9705376e..c5e2fd48 100644 --- a/config/waybar/style/[Dark] Wallust Obsidian Edge.css +++ b/config/waybar/style/[Dark] Wallust Obsidian Edge.css @@ -166,6 +166,7 @@ tooltip label { #custom-hypridle.notactive, #idle_inhibitor.activated { color: #39FF14; + border-bottom: 8px solid rgba(0, 0, 0, 0.2); } #battery.critical:not(.charging) { diff --git a/config/waybar/style/[Extra] Crimson.css b/config/waybar/style/[Extra] Crimson.css index e8b0e1fd..52441a19 100644 --- a/config/waybar/style/[Extra] Crimson.css +++ b/config/waybar/style/[Extra] Crimson.css @@ -163,6 +163,7 @@ tooltip { #custom-hypridle.notactive, #idle_inhibitor.activated { color: #39FF14; + border-bottom: 8px solid rgba(0, 0, 0, 0.2); } #battery.critical:not(.charging) { diff --git a/config/waybar/style/[Extra] EverForest.css b/config/waybar/style/[Extra] EverForest.css index f1f78271..cae9b753 100644 --- a/config/waybar/style/[Extra] EverForest.css +++ b/config/waybar/style/[Extra] EverForest.css @@ -221,12 +221,14 @@ window#waybar.hidden { border-radius: 5px; margin-left: 5px; background-color: @blue; + border-bottom: 8px solid rgba(0, 0, 0, 0.2); color: @black; } /*-----Indicators----*/ #custom-hypridle.notactive, #idle_inhibitor.activated { background-color: @fg; + border-bottom: 8px solid rgba(0, 0, 0, 0.2); color: @bg0; } diff --git a/config/waybar/style/[Extra] Mauve.css b/config/waybar/style/[Extra] Mauve.css index 9c37caba..1c565375 100644 --- a/config/waybar/style/[Extra] Mauve.css +++ b/config/waybar/style/[Extra] Mauve.css @@ -183,6 +183,7 @@ tooltip { #custom-hypridle.notactive, #idle_inhibitor.activated { color: #39FF14; + border-bottom: 8px solid rgba(0, 0, 0, 0.2); } #battery.critical:not(.charging) { diff --git a/config/waybar/style/[Extra] Modern-Combined - Transparent.css b/config/waybar/style/[Extra] Modern-Combined - Transparent.css index 0b387865..b357ea6c 100644 --- a/config/waybar/style/[Extra] Modern-Combined - Transparent.css +++ b/config/waybar/style/[Extra] Modern-Combined - Transparent.css @@ -245,6 +245,7 @@ tooltip { #custom-lock, #idle_inhibitor { color: @teal; + border-bottom: 8px solid rgba(0, 0, 0, 0.2); } #custom-weather, @@ -267,6 +268,7 @@ tooltip { #custom-hypridle.notactive, #idle_inhibitor.activated { color: #39FF14; + border-bottom: 8px solid rgba(0, 0, 0, 0.2); } #clock { diff --git a/config/waybar/style/[Extra] Modern-Combined.css b/config/waybar/style/[Extra] Modern-Combined.css index 5fe379d7..ab32852b 100644 --- a/config/waybar/style/[Extra] Modern-Combined.css +++ b/config/waybar/style/[Extra] Modern-Combined.css @@ -259,6 +259,7 @@ tooltip { #custom-lock, #idle_inhibitor { color: @teal; + border-bottom: 8px solid rgba(0, 0, 0, 0.2); } #custom-weather, @@ -281,6 +282,7 @@ tooltip { #custom-hypridle.notactive, #idle_inhibitor.activated { color: #39FF14; + border-bottom: 8px solid rgba(0, 0, 0, 0.2); } #clock { diff --git a/config/waybar/style/[Extra] Rose Pine.css b/config/waybar/style/[Extra] Rose Pine.css index ed08fdc5..86b83655 100644 --- a/config/waybar/style/[Extra] Rose Pine.css +++ b/config/waybar/style/[Extra] Rose Pine.css @@ -183,6 +183,7 @@ tooltip { #custom-hypridle.notactive, #idle_inhibitor.activated { color: #39FF14; + border-bottom: 2px; } @keyframes blink { diff --git a/config/waybar/style/[Extra] Simple Pink.css b/config/waybar/style/[Extra] Simple Pink.css index 7c3454e3..937a1dc2 100644 --- a/config/waybar/style/[Extra] Simple Pink.css +++ b/config/waybar/style/[Extra] Simple Pink.css @@ -176,6 +176,7 @@ tooltip { #custom-hypridle.notactive, #idle_inhibitor.activated { color: #39FF14; + border-bottom: 8px solid rgba(0, 0, 0, 0.2); } #battery.critical:not(.charging) { diff --git a/config/waybar/style/[Light] Monochrome Contrast.css b/config/waybar/style/[Light] Monochrome Contrast.css index ddf0e4e9..820d9934 100644 --- a/config/waybar/style/[Light] Monochrome Contrast.css +++ b/config/waybar/style/[Light] Monochrome Contrast.css @@ -155,6 +155,7 @@ tooltip label{ #custom-hypridle.notactive, #idle_inhibitor.activated { color: #39FF14; + border-bottom: 8px solid rgba(0, 0, 0, 0.2); } #pulseaudio.muted { diff --git a/config/waybar/style/[Light] Obsidian Glow.css b/config/waybar/style/[Light] Obsidian Glow.css index 6ed128de..8de4e888 100644 --- a/config/waybar/style/[Light] Obsidian Glow.css +++ b/config/waybar/style/[Light] Obsidian Glow.css @@ -152,6 +152,7 @@ tooltip label { #custom-hypridle.notactive, #idle_inhibitor.activated { color: #39FF14; + border-bottom: 8px solid rgba(0, 0, 0, 0.2); } #taskbar button.active { diff --git a/config/waybar/style/[Rainbow] RGB Bordered.css b/config/waybar/style/[Rainbow] RGB Bordered.css index 8a4a66e2..e3d996d7 100644 --- a/config/waybar/style/[Rainbow] RGB Bordered.css +++ b/config/waybar/style/[Rainbow] RGB Bordered.css @@ -159,6 +159,7 @@ window#waybar.empty #window { #custom-hypridle.notactive, #idle_inhibitor.activated { color: #39FF14; + border-bottom: 8px solid rgba(0, 0, 0, 0.2); } #bluetooth, diff --git a/config/waybar/style/[Retro] Simple Style.css b/config/waybar/style/[Retro] Simple Style.css index 081dcc16..6b14e221 100644 --- a/config/waybar/style/[Retro] Simple Style.css +++ b/config/waybar/style/[Retro] Simple Style.css @@ -137,6 +137,7 @@ window#waybar { #custom-hypridle.notactive, #idle_inhibitor.activated { color: #39FF14; + border-bottom: 3px solid yellow; } #battery.critical, diff --git a/config/waybar/style/[Transparent] Crystal Clear.css b/config/waybar/style/[Transparent] Crystal Clear.css index f1542c15..6f4ec33f 100644 --- a/config/waybar/style/[Transparent] Crystal Clear.css +++ b/config/waybar/style/[Transparent] Crystal Clear.css @@ -145,6 +145,7 @@ window#waybar.empty #window { #custom-hypridle.notactive, #idle_inhibitor.activated { color: #39FF14; + border-bottom: 8px solid rgba(0, 0, 0, 0.2); } #taskbar button:hover { diff --git a/config/waybar/style/[VERTICAL] [Catpuccin] Mocha.css b/config/waybar/style/[VERTICAL] [Catpuccin] Mocha.css index 297b9f57..df1fe00e 100644 --- a/config/waybar/style/[VERTICAL] [Catpuccin] Mocha.css +++ b/config/waybar/style/[VERTICAL] [Catpuccin] Mocha.css @@ -134,6 +134,7 @@ tooltip label { #idle_inhibitor { color: @pink; + border-bottom: 8px solid rgba(0, 0, 0, 0.2); } #mpris { diff --git a/config/waybar/style/[WALLUST] ML4W-modern-mixed.css b/config/waybar/style/[WALLUST] ML4W-modern-mixed.css index d16a011b..ce4faff8 100644 --- a/config/waybar/style/[WALLUST] ML4W-modern-mixed.css +++ b/config/waybar/style/[WALLUST] ML4W-modern-mixed.css @@ -193,6 +193,7 @@ window#waybar.empty #window { font-weight: bold; opacity: 0.8; color: @iconcolor; + border-bottom: 0px solid @foreground; } #idle_inhibitor.activated { @@ -201,6 +202,7 @@ window#waybar.empty #window { font-weight: bold; opacity: 0.8; color: #dc2f2f; + border-bottom: 0px solid @foreground; } #custom-menu { diff --git a/config/waybar/style/[WALLUST] ML4W-modern.css b/config/waybar/style/[WALLUST] ML4W-modern.css index f0bb4f47..437e4e21 100644 --- a/config/waybar/style/[WALLUST] ML4W-modern.css +++ b/config/waybar/style/[WALLUST] ML4W-modern.css @@ -197,6 +197,7 @@ window#waybar.empty #window { font-size: 102%; font-weight: bold; color: @iconcolor; + border-bottom: 0px solid @foreground; } #idle_inhibitor.activated { @@ -204,6 +205,7 @@ window#waybar.empty #window { font-size: 100%; font-weight: bold; color: @color13; + border-bottom: 0px solid @foreground; } #custom-menu { diff --git a/config/waybar/style/[Wallust Bordered] Chroma Fusion Edge.css b/config/waybar/style/[Wallust Bordered] Chroma Fusion Edge.css index 97c4af6e..01ac8069 100644 --- a/config/waybar/style/[Wallust Bordered] Chroma Fusion Edge.css +++ b/config/waybar/style/[Wallust Bordered] Chroma Fusion Edge.css @@ -184,12 +184,14 @@ tooltip { #custom-hypridle, #idle_inhibitor { color: @teal; + border-bottom: 8px solid rgba(0, 0, 0, 0.2); } /*-----Indicators----*/ #custom-hypridle.notactive, #idle_inhibitor.activated { color: #39FF14; + border-bottom: 8px solid rgba(0, 0, 0, 0.2); } #custom-cava_mviz{ diff --git a/config/waybar/style/[Wallust Bordered] Chroma Simple.css b/config/waybar/style/[Wallust Bordered] Chroma Simple.css index ff2f976f..eda7664a 100644 --- a/config/waybar/style/[Wallust Bordered] Chroma Simple.css +++ b/config/waybar/style/[Wallust Bordered] Chroma Simple.css @@ -244,6 +244,7 @@ tooltip { #custom-hypridle.notactive, #idle_inhibitor.activated { color: #39FF14; + border-bottom: 8px solid rgba(0, 0, 0, 0.2); } #battery.good { diff --git a/config/waybar/style/[Wallust Transparent] Crystal Clear.css b/config/waybar/style/[Wallust Transparent] Crystal Clear.css index cc5133d7..461d4c56 100644 --- a/config/waybar/style/[Wallust Transparent] Crystal Clear.css +++ b/config/waybar/style/[Wallust Transparent] Crystal Clear.css @@ -178,6 +178,7 @@ tooltip { #custom-hypridle.notactive, #idle_inhibitor.activated { color: #39FF14; + border-bottom: 8px solid rgba(0, 0, 0, 0.2); } #battery.critical:not(.charging) { diff --git a/config/waybar/style/[Wallust] Box type.css b/config/waybar/style/[Wallust] Box type.css index 90917d67..38ed2a1a 100644 --- a/config/waybar/style/[Wallust] Box type.css +++ b/config/waybar/style/[Wallust] Box type.css @@ -158,6 +158,9 @@ window#waybar.empty #window { #custom-hypridle.notactive, #idle_inhibitor.activated { color: #39ff14; + border-bottom-width: 5px; + border-bottom-color: @color12; + border-bottom-style: solid; } #network { diff --git a/config/waybar/style/[Wallust] Chroma Edge.css b/config/waybar/style/[Wallust] Chroma Edge.css index 4ee806ac..719c89c9 100644 --- a/config/waybar/style/[Wallust] Chroma Edge.css +++ b/config/waybar/style/[Wallust] Chroma Edge.css @@ -324,13 +324,15 @@ label:focus { } #idle_inhibitor { - /*background-color: #2d3436;*/ + /*background-color: #2d3436; + border-bottom: 8px solid rgba(0, 0, 0, 0.2);*/ } /*-----Indicators----*/ #custom-hypridle.notactive, #idle_inhibitor.activated { color: #39FF14; + border-bottom: 8px solid rgba(0, 0, 0, 0.2); } #temperature { diff --git a/config/waybar/style/[Wallust] Chroma Fusion.css b/config/waybar/style/[Wallust] Chroma Fusion.css index 2fa36e24..6830d55b 100644 --- a/config/waybar/style/[Wallust] Chroma Fusion.css +++ b/config/waybar/style/[Wallust] Chroma Fusion.css @@ -186,12 +186,14 @@ tooltip { #custom-hypridle, #idle_inhibitor { color: @teal; + border-bottom: 8px solid rgba(0, 0, 0, 0.2); } /*-----Indicators----*/ #custom-hypridle.notactive, #idle_inhibitor.activated { color: #39FF14; + border-bottom: 8px solid rgba(0, 0, 0, 0.2); } #workspaces { diff --git a/config/waybar/style/[Wallust] Chroma Tally V2.css b/config/waybar/style/[Wallust] Chroma Tally V2.css index d3f4b126..305dcc4e 100644 --- a/config/waybar/style/[Wallust] Chroma Tally V2.css +++ b/config/waybar/style/[Wallust] Chroma Tally V2.css @@ -214,12 +214,14 @@ tooltip { #custom-hypridle, #idle_inhibitor { color: @color5; /* Lighter */ + border-bottom: 2px; } /*-----Indicators----*/ #custom-hypridle.notactive, #idle_inhibitor.activated { color: @color4; /* Slightly lighter */ + border-bottom: 2px; } #tray { diff --git a/config/waybar/style/[Wallust] Chroma Tally.css b/config/waybar/style/[Wallust] Chroma Tally.css index d34708b5..3a7679d2 100644 --- a/config/waybar/style/[Wallust] Chroma Tally.css +++ b/config/waybar/style/[Wallust] Chroma Tally.css @@ -217,12 +217,14 @@ tooltip { #custom-hypridle, #idle_inhibitor { color: #ebcb8b; + border-bottom: 2px; } /*-----Indicators----*/ #custom-hypridle.notactive, #idle_inhibitor.activated { color: #39FF14; + border-bottom: 2px; } #tray { diff --git a/config/waybar/style/[Wallust] Colored.css b/config/waybar/style/[Wallust] Colored.css index 921ce5cb..c95429da 100644 --- a/config/waybar/style/[Wallust] Colored.css +++ b/config/waybar/style/[Wallust] Colored.css @@ -188,6 +188,7 @@ tooltip { #custom-hypridle.notactive, #idle_inhibitor.activated { color: #39FF14; + border-bottom: 8px solid rgba(0, 0, 0, 0.2); } #battery.critical:not(.charging) { diff --git a/config/waybar/style/[Wallust] Simple.css b/config/waybar/style/[Wallust] Simple.css index 4a05999f..0eec7ba7 100644 --- a/config/waybar/style/[Wallust] Simple.css +++ b/config/waybar/style/[Wallust] Simple.css @@ -166,6 +166,7 @@ tooltip { #custom-hypridle.notactive, #idle_inhibitor.activated { color: #39FF14; + border-bottom: 8px solid rgba(0, 0, 0, 0.2); } #pulseaudio.muted { -- cgit v1.2.3 From 27eef41d0b9d5cc9b03c1d64050c99dc23e220e7 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Wed, 21 Jan 2026 12:19:09 -0500 Subject: Fixed CHANGELOG typo --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e49b5ffc..7e37ba52 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,7 +9,7 @@ - 2026-01-19 - Removed "Set wallpaper SDDM prompt" - When changing wallpaper there is no longer a prompt to set it on SDDM -- It's not a menu option under Quick Settings menu `SUPER SHIFT + E` +- It's now a menu option under Quick Settings menu `SUPER SHIFT + E` - Fixed `Glass` style sheets - 2026-01-16 -- cgit v1.2.3