From 7441f2cb05b6916ff7cb08a8c0f14b7ff865a1b1 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Sun, 2 Nov 2025 17:23:53 -0500 Subject: feat: Add smart AGS/Quickshell fallback with OverviewToggle wrapper Implements a robust fallback mechanism for desktop overview functionality that handles both AGS and Quickshell installations gracefully. Changes: - Add OverviewToggle.sh wrapper script that tries Quickshell first, falls back to AGS if unavailable or broken - Update UserKeybinds.conf with new SUPER+A binding to OverviewToggle.sh - Preserve original AGS and Quickshell keybinds as commented references - Simplify copy.sh logic to enable both AGS and QS simultaneously - Remove conflicting keybind toggle logic from copy.sh Benefits: - Users can have both AGS and Quickshell installed simultaneously - Automatic fallback when one tool is broken or unavailable - Quickshell preferred (tried first) as it's more performant - Graceful degradation with user notification if neither available - Auto-starts AGS if installed but not running - Compatible with existing upgrade.sh and ComposeHyprConfigs.sh workflow Technical details: - OverviewToggle.sh checks for running processes before attempting toggle - Uses hyprctl dispatch for Quickshell's global dispatcher - Falls back to ags -t 'overview' with rofi cleanup for AGS - Shows desktop notification if neither tool is available - Script auto-made executable via existing chmod in copy.sh (line 1027) Addresses: Issue where AGS and Quickshell have had recent stability problems, requiring manual keybind switching between them --- config/hypr/scripts/OverviewToggle.sh | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 config/hypr/scripts/OverviewToggle.sh (limited to 'config/hypr/scripts') diff --git a/config/hypr/scripts/OverviewToggle.sh b/config/hypr/scripts/OverviewToggle.sh new file mode 100644 index 00000000..18683984 --- /dev/null +++ b/config/hypr/scripts/OverviewToggle.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash +# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # +# Overview toggle wrapper - tries quickshell first, falls back to AGS + +# Try quickshell first if installed +if command -v qs >/dev/null 2>&1; then + # Check if quickshell is running + if pgrep -x qs >/dev/null 2>&1; then + # Try to toggle quickshell overview + hyprctl dispatch global quickshell:overviewToggle 2>/dev/null && exit 0 + fi +fi + +# Fall back to AGS if quickshell failed or isn't available +if command -v ags >/dev/null 2>&1; then + # Check if AGS is running, start it if not + if ! pgrep -x ags >/dev/null 2>&1; then + ags & + sleep 0.5 + fi + # Toggle AGS overview + pkill rofi || true + ags -t 'overview' 2>/dev/null && exit 0 +fi + +# If we get here, neither worked +notify-send "Overview" "Neither Quickshell nor AGS is available" -u low 2>/dev/null || true +exit 1 -- cgit v1.2.3 From f992b375bfaf76e82df939ac16502755984db53e Mon Sep 17 00:00:00 2001 From: Don Williams Date: Mon, 3 Nov 2025 22:27:24 -0500 Subject: scripts is config/hypr/scripts weren't executable On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: scripts/Battery.sh modified: scripts/ComposeHyprConfigs.sh modified: scripts/OverviewToggle.sh modified: scripts/sddm_wallpaper.sh --- config/hypr/scripts/Battery.sh | 0 config/hypr/scripts/ComposeHyprConfigs.sh | 0 config/hypr/scripts/OverviewToggle.sh | 37 +++++++++++++++++++------------ config/hypr/scripts/sddm_wallpaper.sh | 0 4 files changed, 23 insertions(+), 14 deletions(-) mode change 100644 => 100755 config/hypr/scripts/Battery.sh mode change 100644 => 100755 config/hypr/scripts/ComposeHyprConfigs.sh mode change 100644 => 100755 config/hypr/scripts/OverviewToggle.sh mode change 100644 => 100755 config/hypr/scripts/sddm_wallpaper.sh (limited to 'config/hypr/scripts') diff --git a/config/hypr/scripts/Battery.sh b/config/hypr/scripts/Battery.sh old mode 100644 new mode 100755 diff --git a/config/hypr/scripts/ComposeHyprConfigs.sh b/config/hypr/scripts/ComposeHyprConfigs.sh old mode 100644 new mode 100755 diff --git a/config/hypr/scripts/OverviewToggle.sh b/config/hypr/scripts/OverviewToggle.sh old mode 100644 new mode 100755 index 18683984..21c2da34 --- a/config/hypr/scripts/OverviewToggle.sh +++ b/config/hypr/scripts/OverviewToggle.sh @@ -1,26 +1,35 @@ #!/usr/bin/env bash # /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # -# Overview toggle wrapper - tries quickshell first, falls back to AGS +# Overview toggle wrapper - tries Quickshell first, falls back to AGS -# Try quickshell first if installed +set -euo pipefail + +# 1) Try Quickshell via Hyprland global dispatch (works if QS is running and listening) +if hyprctl dispatch global quickshell:overviewToggle >/dev/null 2>&1; then + exit 0 +fi + +# If QS isn't running, try starting it and retry once if command -v qs >/dev/null 2>&1; then - # Check if quickshell is running - if pgrep -x qs >/dev/null 2>&1; then - # Try to toggle quickshell overview - hyprctl dispatch global quickshell:overviewToggle 2>/dev/null && exit 0 + qs >/dev/null 2>&1 & + sleep 0.6 + if hyprctl dispatch global quickshell:overviewToggle >/dev/null 2>&1; then + exit 0 fi fi -# Fall back to AGS if quickshell failed or isn't available +# 2) Fall back to AGS template if command -v ags >/dev/null 2>&1; then - # Check if AGS is running, start it if not - if ! pgrep -x ags >/dev/null 2>&1; then - ags & - sleep 0.5 - fi - # Toggle AGS overview pkill rofi || true - ags -t 'overview' 2>/dev/null && exit 0 + if ags -t 'overview' >/dev/null 2>&1; then + exit 0 + fi + # If it failed, try starting AGS daemon then call the template + ags >/dev/null 2>&1 & + sleep 0.6 + if ags -t 'overview' >/dev/null 2>&1; then + exit 0 + fi fi # If we get here, neither worked diff --git a/config/hypr/scripts/sddm_wallpaper.sh b/config/hypr/scripts/sddm_wallpaper.sh old mode 100644 new mode 100755 -- cgit v1.2.3 From ebae2be8c6cc37fd6e66baaac18368789ee97851 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Wed, 5 Nov 2025 00:50:08 -0500 Subject: feat(hypr): align SUPER+J/K binds to current layout on startup\n\n- Add scripts/KeybindsLayoutInit.sh to set J/K (and O for togglesplit) based on general:layout\n- Wire via Startup_Apps.conf (exec-once) so default dwindle or master both get correct binds\n- Complements scripts/ChangeLayout.sh dynamic rebinds --- config/hypr/configs/Startup_Apps.conf | 1 + config/hypr/scripts/KeybindsLayoutInit.sh | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100755 config/hypr/scripts/KeybindsLayoutInit.sh (limited to 'config/hypr/scripts') diff --git a/config/hypr/configs/Startup_Apps.conf b/config/hypr/configs/Startup_Apps.conf index d952e65b..07a92a3f 100644 --- a/config/hypr/configs/Startup_Apps.conf +++ b/config/hypr/configs/Startup_Apps.conf @@ -19,6 +19,7 @@ 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 # Initialize 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 & diff --git a/config/hypr/scripts/KeybindsLayoutInit.sh b/config/hypr/scripts/KeybindsLayoutInit.sh new file mode 100755 index 00000000..7e328cde --- /dev/null +++ b/config/hypr/scripts/KeybindsLayoutInit.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash +# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ## +# Initialize J/K keybinds to match the current default layout at startup + +# Query current layout (master|dwindle) +LAYOUT=$(hyprctl -j getoption general:layout | jq -r '.str') + +case "$LAYOUT" in + master) + # Ensure master layout-style binds + 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 + ;; + dwindle) + # Ensure dwindle layout-style binds + hyprctl keyword unbind SUPER,J + hyprctl keyword unbind SUPER,K + hyprctl keyword unbind SUPER,O + hyprctl keyword bind SUPER,J,cyclenext + hyprctl keyword bind SUPER,K,cyclenext,prev + hyprctl keyword bind SUPER,O,togglesplit + ;; + *) + # Do nothing for unexpected values + : + ;; + esac -- cgit v1.2.3 From a35eb612dda901c5d14d559e55e64c0b1e93eae4 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Wed, 5 Nov 2025 02:32:31 -0500 Subject: fix(startup): preserve KeybindsLayoutInit in composed Startup_Apps; harden hyprlock 12h edits\n\n- ComposeHyprConfigs.sh: ignore disabling /KeybindsLayoutInit.sh\n- copy.sh migration: filter KeybindsLayoutInit from Startup_Apps.disable\n- copy.sh: target existing hyprlock template, avoid sed errors --- config/hypr/scripts/ComposeHyprConfigs.sh | 4 ++++ copy.sh | 22 +++++++++++++++++----- 2 files changed, 21 insertions(+), 5 deletions(-) (limited to 'config/hypr/scripts') diff --git a/config/hypr/scripts/ComposeHyprConfigs.sh b/config/hypr/scripts/ComposeHyprConfigs.sh index 55bc3c5c..f0928a24 100755 --- a/config/hypr/scripts/ComposeHyprConfigs.sh +++ b/config/hypr/scripts/ComposeHyprConfigs.sh @@ -58,6 +58,10 @@ compose_startup_apps() { while IFS= read -r d; do d="$(echo "$d" | trim)" [[ -z "$d" || "$d" =~ ^# ]] && continue + # Never disable our layout-aware keybind init unless user re-enables via explicit edit here + if [[ "$d" == "\$scriptsDir/KeybindsLayoutInit.sh" ]]; then + continue + fi unset 'cmds[$d]' done <"$disable_file" fi diff --git a/copy.sh b/copy.sh index 1addda84..cd5f5212 100755 --- a/copy.sh +++ b/copy.sh @@ -414,11 +414,19 @@ while true; do sed -i 's#^\(\s*\)\("format": "{:%a %d | %H:%M}",\) #\1//\2#g' config/waybar/Modules 2>&1 | tee -a "$LOG" # for hyprlock - sed -i 's/^\s*text = cmd\[update:1000\] echo "\$(date +"%H")"/# &/' config/hypr/hyprlock.conf 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/' config/hypr/hyprlock.conf 2>&1 | tee -a "$LOG" + 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")"/# &/' config/hypr/hyprlock.conf 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/' config/hypr/hyprlock.conf 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" @@ -854,7 +862,11 @@ compose_overlay_from_backup() { 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+$//' | sort -u >"$disable_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 # additions -- cgit v1.2.3 From 67cc7cdab26ad7dc0f9c0aa691a1efc3a200518a Mon Sep 17 00:00:00 2001 From: Don Williams Date: Wed, 5 Nov 2025 02:45:53 -0500 Subject: fix(qs): Edit Startup Apps opens full vendor defaults (configs/Startup_Apps.conf)\n\n- Restores prior behavior where users edit the complete startup config\n- Composition still merges overlay+vendor at runtime --- config/hypr/scripts/Kool_Quick_Settings.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'config/hypr/scripts') diff --git a/config/hypr/scripts/Kool_Quick_Settings.sh b/config/hypr/scripts/Kool_Quick_Settings.sh index 79ddc163..d6e1b089 100755 --- a/config/hypr/scripts/Kool_Quick_Settings.sh +++ b/config/hypr/scripts/Kool_Quick_Settings.sh @@ -58,7 +58,7 @@ main() { "view/edit Window Rules") file="$UserConfigs/WindowRules.conf" ;; "view/edit User Keybinds") file="$UserConfigs/UserKeybinds.conf" ;; "view/edit User Settings") file="$UserConfigs/UserSettings.conf" ;; - "view/edit Startup Apps") file="$UserConfigs/Startup_Apps.conf" ;; + "view/edit Startup Apps") file="$configs/Startup_Apps.conf" ;; "view/edit Decorations") file="$UserConfigs/UserDecorations.conf" ;; "view/edit Animations") file="$UserConfigs/UserAnimations.conf" ;; "view/edit Laptop Keybinds") file="$UserConfigs/Laptops.conf" ;; -- cgit v1.2.3 From 74b5fe09f3a0b04093ff1442b1dfc683f40d3eca Mon Sep 17 00:00:00 2001 From: Don Williams Date: Wed, 5 Nov 2025 21:59:55 -0500 Subject: Dropped duplicate startup_apps.sh script Removed the ComposeHyprConfitg.sh script Your branch is up to date with 'origin/development'. Changes to be committed: deleted: config/hypr/UserConfigs/Startup_Apps.conf modified: config/hypr/hyprland.conf deleted: config/hypr/scripts/ComposeHyprConfigs.sh modified: config/hypr/scripts/Kool_Quick_Settings.sh modified: copy.sh modified: upgrade.sh --- config/hypr/UserConfigs/Startup_Apps.conf | 62 ---------------- config/hypr/hyprland.conf | 2 - config/hypr/scripts/ComposeHyprConfigs.sh | 113 ----------------------------- config/hypr/scripts/Kool_Quick_Settings.sh | 2 +- copy.sh | 4 - upgrade.sh | 4 - 6 files changed, 1 insertion(+), 186 deletions(-) delete mode 100644 config/hypr/UserConfigs/Startup_Apps.conf delete mode 100755 config/hypr/scripts/ComposeHyprConfigs.sh (limited to 'config/hypr/scripts') diff --git a/config/hypr/UserConfigs/Startup_Apps.conf b/config/hypr/UserConfigs/Startup_Apps.conf deleted file mode 100644 index 4f4fbd22..00000000 --- a/config/hypr/UserConfigs/Startup_Apps.conf +++ /dev/null @@ -1,62 +0,0 @@ -# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # -# Commands and Apps to be executed at launch - -$scriptsDir = $HOME/.config/hypr/scripts -$UserScripts = $HOME/.config/hypr/UserScripts - -$wallDIR=$HOME/Pictures/wallpapers -$lock = $scriptsDir/LockScreen.sh -$SwwwRandom = $UserScripts/WallpaperAutoChange.sh -$livewallpaper="" - -# wallpaper stuff -exec-once = swww-daemon --format argb # New flag for v0.11.2 -#exec-once = swww-daemon --format xrgb # old 0.9.5 option -#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 - -# Initialize 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 -#exec-once = ags -#exec-once = blueman-applet -#exec-once = rog-control-center -exec-once = waybar -exec-once = qs # quickshell AGS Desktop Overview alternative - -#clipboard manager -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 - -# Starting hypridle to start hyprlock -exec-once = hypridle - -# Weather script to populate cache on startup -exec-once = $UserScripts/WeatherWrap.sh - - -# Here are list of features available but disabled by default -# exec-once = swww-daemon --format xrgb && swww img $HOME/Pictures/wallpapers/mecha-nostalgia.png # persistent wallpaper - -#gnome polkit for nixos -#exec-once = $scriptsDir/Polkit-NixOS.sh - -# xdg-desktop-portal-hyprland (should be auto starting. However, you can force to start) -#exec-once = $scriptsDir/PortalHyprland.sh diff --git a/config/hypr/hyprland.conf b/config/hypr/hyprland.conf index 8f0fc1e5..8eb91df7 100644 --- a/config/hypr/hyprland.conf +++ b/config/hypr/hyprland.conf @@ -17,7 +17,6 @@ $UserConfigs = $HOME/.config/hypr/UserConfigs # User Configs directory path # Load vendor defaults, then user additions/overrides source= $configs/Startup_Apps.conf -source= $UserConfigs/Startup_Apps.conf source= $UserConfigs/ENVariables.conf # Environment variables to load @@ -30,7 +29,6 @@ source= $UserConfigs/LaptopDisplay.conf # Laptop display related. You need to re # Load vendor defaults, then user additions source= $configs/WindowRules.conf # all about Hyprland Window Rules and Layer Rules (defaults) -source= $UserConfigs/WindowRules.conf # user rules and layer rules source= $UserConfigs/UserDecorations.conf # Decorations config file diff --git a/config/hypr/scripts/ComposeHyprConfigs.sh b/config/hypr/scripts/ComposeHyprConfigs.sh deleted file mode 100755 index f0928a24..00000000 --- a/config/hypr/scripts/ComposeHyprConfigs.sh +++ /dev/null @@ -1,113 +0,0 @@ -#!/usr/bin/env bash -# Compose merged Hyprland configs for Startup_Apps and WindowRules -set -euo pipefail - -BASE_DIR="$HOME/.config/hypr" -BASE_CFG_DIR="$BASE_DIR/configs" -USER_DIR="$BASE_DIR/UserConfigs" -GEN_DIR="$BASE_DIR/generated" - -mkdir -p "$GEN_DIR" - -log() { printf "[compose] %s\n" "$*"; } - -# Trim leading/trailing whitespace -trim() { sed -E 's/^\s+//;s/\s+$//'; } - -# Normalize spaces in a directive line -normalize() { awk '{$1=$1;print}'; } - -# Build merged Startup_Apps.conf -compose_startup_apps() { - local base_file="$BASE_CFG_DIR/Startup_Apps.conf" - local user_file="$USER_DIR/Startup_Apps.conf" - local disable_file="$USER_DIR/Startup_Apps.disable" - local out_file="$GEN_DIR/Startup_Apps.conf" - - : >"$out_file" - - # Header and variable lines come from base - if [[ -f "$base_file" ]]; then - # Copy all non exec-once lines (comments, blanks, variables, etc.) - grep -Ev '^\s*exec-once\s*=' "$base_file" || true >>"$out_file" - fi - - # Collect exec-once commands (the right side of '=') - declare -A cmds=() - - if [[ -f "$base_file" ]]; then - while IFS= read -r line; do - [[ "$line" =~ ^\s*exec-once\s*= ]] || continue - cmd="${line#*=}" - cmd="$(echo "$cmd" | trim)" - cmds["$cmd"]=1 - done <"$base_file" - fi - - if [[ -f "$user_file" ]]; then - while IFS= read -r line; do - [[ "$line" =~ ^\s*exec-once\s*= ]] || continue - cmd="${line#*=}" - cmd="$(echo "$cmd" | trim)" - cmds["$cmd"]=1 - done <"$user_file" - fi - - # Apply disables (exact match of command string) - if [[ -f "$disable_file" ]]; then - while IFS= read -r d; do - d="$(echo "$d" | trim)" - [[ -z "$d" || "$d" =~ ^# ]] && continue - # Never disable our layout-aware keybind init unless user re-enables via explicit edit here - if [[ "$d" == "\$scriptsDir/KeybindsLayoutInit.sh" ]]; then - continue - fi - unset 'cmds[$d]' - done <"$disable_file" - fi - - # Emit combined exec-once (stable sort) - for k in "${!cmds[@]}"; do echo "$k"; done | sort -u | while IFS= read -r cmd; do - [[ -z "$cmd" ]] && continue - printf "exec-once = %s\n" "$cmd" >>"$out_file" - done - - log "Wrote $out_file" -} - -# Build merged WindowRules.conf -compose_window_rules() { - local base_file="$BASE_CFG_DIR/WindowRules.conf" - local user_file="$USER_DIR/WindowRules.conf" - local disable_file="$USER_DIR/WindowRules.disable" - local out_file="$GEN_DIR/WindowRules.conf" - - : >"$out_file" - echo "# Generated merged WindowRules" >>"$out_file" - - declare -A rules=() - add_rules() { - local f="$1" - [[ -f "$f" ]] || return 0 - grep -E '^(windowrule|layerrule)\s*=' "$f" | trim | while IFS= read -r r; do - rules["$r"]=1 - done - } - - add_rules "$base_file" - add_rules "$user_file" - - if [[ -f "$disable_file" ]]; then - while IFS= read -r d; do - d="$(echo "$d" | trim)" - [[ -z "$d" || "$d" =~ ^# ]] && continue - unset 'rules[$d]' - done <"$disable_file" - fi - - for r in "${!rules[@]}"; do echo "$r"; done | sort -u >>"$out_file" - log "Wrote $out_file" -} - -compose_startup_apps -compose_window_rules \ 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 d6e1b089..16742492 100755 --- a/config/hypr/scripts/Kool_Quick_Settings.sh +++ b/config/hypr/scripts/Kool_Quick_Settings.sh @@ -55,7 +55,7 @@ main() { case "$choice" in "view/edit User Defaults") file="$UserConfigs/01-UserDefaults.conf" ;; "view/edit ENV variables") file="$UserConfigs/ENVariables.conf" ;; - "view/edit Window Rules") file="$UserConfigs/WindowRules.conf" ;; + "view/edit Window Rules") file="$configs/WindowRules.conf" ;; "view/edit User Keybinds") file="$UserConfigs/UserKeybinds.conf" ;; "view/edit User Settings") file="$UserConfigs/UserSettings.conf" ;; "view/edit Startup Apps") file="$configs/Startup_Apps.conf" ;; diff --git a/copy.sh b/copy.sh index cd5f5212..b1cc6e1a 100755 --- a/copy.sh +++ b/copy.sh @@ -933,10 +933,6 @@ if [ -d "$BACKUP_DIR_PATH" ]; then done fi -# Compose merged configs (Startup_Apps and WindowRules) -if [ -x "$DIRPATH/scripts/ComposeHyprConfigs.sh" ]; then - "$DIRPATH/scripts/ComposeHyprConfigs.sh" 2>&1 | tee -a "$LOG" || true -fi printf "\n%.0s" {1..1} diff --git a/upgrade.sh b/upgrade.sh index 9aee3c2c..07ee1f8b 100755 --- a/upgrade.sh +++ b/upgrade.sh @@ -198,10 +198,6 @@ if version_gt "$latest_version" "$stored_version"; then # Set executable for initial-boot.sh chmod +x "$HOME/.config/hypr/initial-boot.sh" 2>&1 | tee -a "$LOG" - # Compose merged configs (Startup_Apps and WindowRules) - if [ -x "$HOME/.config/hypr/scripts/ComposeHyprConfigs.sh" ]; then - "$HOME/.config/hypr/scripts/ComposeHyprConfigs.sh" 2>&1 | tee -a "$LOG" || true - fi else echo "$MAGENTA Upgrade declined. No files or directories changed" 2>&1 | tee -a "$LOG" fi -- cgit v1.2.3 From 206f51d28f8f0cb17289c573991eea5eedae2eec Mon Sep 17 00:00:00 2001 From: Don Williams Date: Wed, 5 Nov 2025 22:07:57 -0500 Subject: Fixing layout aware SUPER J/K cycle next/prev On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/hypr/configs/Keybinds.conf modified: config/hypr/scripts/KeybindsLayoutInit.sh --- config/hypr/configs/Keybinds.conf | 6 ++++-- config/hypr/scripts/KeybindsLayoutInit.sh | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) (limited to 'config/hypr/scripts') diff --git a/config/hypr/configs/Keybinds.conf b/config/hypr/configs/Keybinds.conf index ebaee30a..fbe3bfe5 100644 --- a/config/hypr/configs/Keybinds.conf +++ b/config/hypr/configs/Keybinds.conf @@ -19,8 +19,10 @@ bindd = $mainMod SHIFT, E, Quick settings menu, exec, $scriptsDir/Kool_Quick_Set # Master Layout bindd = $mainMod CTRL, D, remove master, layoutmsg, removemaster bindd = $mainMod, I, add master, layoutmsg, addmaster -bindd = $mainMod, J, cycle next, layoutmsg, cyclenext -bindd = $mainMod, K, cycle previous, layoutmsg, cycleprev +# NOTE: J/K bindings are set dynamically by scripts/KeybindsLayoutInit.sh and scripts/ChangeLayout.sh +# (we intentionally do not bind them statically here to avoid conflicts across layouts) +# bindd = $mainMod, J, cycle next, layoutmsg, cyclenext +# bindd = $mainMod, K, cycle previous, layoutmsg, cycleprev bindd = $mainMod CTRL, Return, swap with master, layoutmsg, swapwithmaster # Dwindle Layout diff --git a/config/hypr/scripts/KeybindsLayoutInit.sh b/config/hypr/scripts/KeybindsLayoutInit.sh index 7e328cde..af81f62e 100755 --- a/config/hypr/scripts/KeybindsLayoutInit.sh +++ b/config/hypr/scripts/KeybindsLayoutInit.sh @@ -20,7 +20,8 @@ case "$LAYOUT" in hyprctl keyword unbind SUPER,K hyprctl keyword unbind SUPER,O hyprctl keyword bind SUPER,J,cyclenext - hyprctl keyword bind SUPER,K,cyclenext,prev +hyprctl keyword bind SUPER,K,cyclenext,prev +# ensure SUPER+O togglesplit is available on dwindle hyprctl keyword bind SUPER,O,togglesplit ;; *) -- cgit v1.2.3 From 1788691d242abe607add69d211478e306a154cc6 Mon Sep 17 00:00:00 2001 From: Don Williams Date: Fri, 7 Nov 2025 12:26:05 -0500 Subject: Fixing Super J/K cycle next/prev for auto layout Cycle next/prev is different for dwindle vs. master Oringinal code only worked in master. This script detects which and rebunds SUPER J/K accordingly On branch development Your branch is up to date with 'origin/development'. Changes to be committed: modified: config/hypr/scripts/KeybindsLayoutInit.sh --- config/hypr/scripts/KeybindsLayoutInit.sh | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'config/hypr/scripts') diff --git a/config/hypr/scripts/KeybindsLayoutInit.sh b/config/hypr/scripts/KeybindsLayoutInit.sh index af81f62e..fd34f90e 100755 --- a/config/hypr/scripts/KeybindsLayoutInit.sh +++ b/config/hypr/scripts/KeybindsLayoutInit.sh @@ -2,8 +2,15 @@ # /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ## # Initialize J/K keybinds to match the current default layout at startup -# Query current layout (master|dwindle) -LAYOUT=$(hyprctl -j getoption general:layout | jq -r '.str') +set -euo pipefail + +# Determine current layout (master|dwindle); be robust to null at startup +LAYOUT=$(hyprctl -j getoption general:layout | jq -r '.str // empty' 2>/dev/null || true) +if [ -z "${LAYOUT:-}" ]; then + # Fallback: parse non-JSON output (e.g., "str: dwindle") + LAYOUT=$(hyprctl getoption general:layout 2>/dev/null | awk -F'str:' 'NF>1 {gsub(/^ +| +$/,"",$2); print $2}') +fi +[ -z "${LAYOUT:-}" ] && exit 0 case "$LAYOUT" in master) @@ -20,8 +27,8 @@ case "$LAYOUT" in hyprctl keyword unbind SUPER,K hyprctl keyword unbind SUPER,O hyprctl keyword bind SUPER,J,cyclenext -hyprctl keyword bind SUPER,K,cyclenext,prev -# ensure SUPER+O togglesplit is available on dwindle + hyprctl keyword bind SUPER,K,cyclenext,prev + # ensure SUPER+O togglesplit is available on dwindle hyprctl keyword bind SUPER,O,togglesplit ;; *) -- cgit v1.2.3 From 672aaf336df2a4897c086d84da6fea8611a5ec54 Mon Sep 17 00:00:00 2001 From: Alberson Miranda <45690517+albersonmiranda@users.noreply.github.com> Date: Sat, 8 Nov 2025 00:17:21 -0300 Subject: feat: resume hyprsunset (#862) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Looks good! Merging this into development branch 👍 --- config/hypr/configs/Startup_Apps.conf | 2 ++ config/hypr/scripts/Hyprsunset.sh | 22 +++++++++++++++++----- 2 files changed, 19 insertions(+), 5 deletions(-) (limited to 'config/hypr/scripts') diff --git a/config/hypr/configs/Startup_Apps.conf b/config/hypr/configs/Startup_Apps.conf index 07a92a3f..c1670595 100644 --- a/config/hypr/configs/Startup_Apps.conf +++ b/config/hypr/configs/Startup_Apps.conf @@ -48,6 +48,8 @@ exec-once = $UserScripts/RainbowBorders.sh # Starting hypridle to start 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 # exec-once = swww-daemon --format xrgb && swww img $HOME/Pictures/wallpapers/mecha-nostalgia.png # persistent wallpaper diff --git a/config/hypr/scripts/Hyprsunset.sh b/config/hypr/scripts/Hyprsunset.sh index c7c4b395..4a2b52f4 100755 --- a/config/hypr/scripts/Hyprsunset.sh +++ b/config/hypr/scripts/Hyprsunset.sh @@ -8,12 +8,12 @@ set -euo pipefail # - On: sunset icon if available, otherwise a blue sun # # Customize via env vars: -# HYPERSUNSET_TEMP default 4500 (K) -# HYPERSUNSET_ICON_MODE sunset|blue (default: sunset) +# HYPRSUNSET_TEMP default 4500 (K) +# HYPRSUNSET_ICON_MODE sunset|blue (default: sunset) STATE_FILE="$HOME/.cache/.hyprsunset_state" -TARGET_TEMP="${HYPERSUNSET_TEMP:-4500}" -ICON_MODE="${HYPERSUNSET_ICON_MODE:-sunset}" +TARGET_TEMP="${HYPRSUNSET_TEMP:-4500}" +ICON_MODE="${HYPRSUNSET_ICON_MODE:-sunset}" ensure_state() { [[ -f "$STATE_FILE" ]] || echo "off" > "$STATE_FILE" @@ -92,8 +92,20 @@ cmd_status() { printf '{"text":"%s","class":"%s","tooltip":"%s"}\n' "$txt" "$cls" "$tip" } +cmd_init() { + ensure_state + state="$(cat "$STATE_FILE" || echo off)" + + if [[ "$state" == "on" ]]; then + if command -v hyprsunset >/dev/null 2>&1; then + nohup hyprsunset -t "$TARGET_TEMP" >/dev/null 2>&1 & + fi + fi +} + case "${1:-}" in toggle) cmd_toggle ;; status) cmd_status ;; - *) echo "usage: $0 [toggle|status]" >&2; exit 2 ;; + init) cmd_init ;; + *) echo "usage: $0 [toggle|status|init]" >&2; exit 2 ;; esac -- cgit v1.2.3