aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDonald Williams <129223418+dwilliam62@users.noreply.github.com>2025-11-05 03:07:48 -0500
committerGitHub <noreply@github.com>2025-11-05 03:07:48 -0500
commit83c8c37abeacb32ce609c2d37c8656c1274ac6e0 (patch)
treed0e07343825aa39f4b43bc987bfa50012b3f4c9b
parent073fc0fb287777e39e6b9089a5db7a7cf010f24f (diff)
parent8361dcc058fb41225630934d37bae65dd9b76e43 (diff)
Merge pull request #861 from JaKooLit/ddubs-layout
feat(hypr): layout-aware J/K binds + startup sourcing fixes (v2.3.18)
-rw-r--r--CHANGELOG.md9
-rw-r--r--config/hypr/UserConfigs/ENVariables.conf2
-rw-r--r--config/hypr/configs/Startup_Apps.conf1
-rw-r--r--config/hypr/hyprland.conf6
-rwxr-xr-xconfig/hypr/scripts/ComposeHyprConfigs.sh4
-rwxr-xr-xconfig/hypr/scripts/KeybindsLayoutInit.sh30
-rwxr-xr-xconfig/hypr/scripts/Kool_Quick_Settings.sh2
-rw-r--r--config/hypr/v2.3.18 (renamed from config/hypr/v2.3.17)0
-rwxr-xr-xcopy.sh30
9 files changed, 76 insertions, 8 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index dd01997b..f6623708 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,14 @@
# Changelog — JAK's Hyprland Dotfiles
+## v2.3.18 — 2025-11-05
+
+- Keybinds: initialize SUPER+J/K at login to match the default layout (master or dwindle).
+ - Adds scripts/KeybindsLayoutInit.sh and wires it to Startup_Apps so J/K and O (togglesplit) are correct on first session.
+ - ChangeLayout.sh continues to rebind dynamically when layouts are toggled.
+ - Credits: [Suresh Thagunna](https://github.com/suresh466) for identifying the mismatch and proposing an auto-alignment approach.
+- Startup config sourcing: load vendor Startup_Apps and WindowRules first, then user overlays, restoring baseline autostarts while keeping user additions.
+- Quick Settings: “Edit Startup Apps” opens the full vendor defaults for clarity.
+
## October 2025
### ⌨️ Keybinds
diff --git a/config/hypr/UserConfigs/ENVariables.conf b/config/hypr/UserConfigs/ENVariables.conf
index d82fc2a6..4e736dc3 100644
--- a/config/hypr/UserConfigs/ENVariables.conf
+++ b/config/hypr/UserConfigs/ENVariables.conf
@@ -5,7 +5,7 @@
# environment-variables
# Current Version of JakooLit Dotfiles:
-env = DOTS_VERSION,2.3.17
+env = DOTS_VERSION,2.3.18
# Toolkit Backend Variables
env = GDK_BACKEND,wayland,x11,*
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/hyprland.conf b/config/hypr/hyprland.conf
index fa8435dc..8f0fc1e5 100644
--- a/config/hypr/hyprland.conf
+++ b/config/hypr/hyprland.conf
@@ -15,6 +15,8 @@ source=$configs/Keybinds.conf # Pre-configured keybinds
# ## This is where you want to start tinkering
$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
@@ -26,7 +28,9 @@ source= $UserConfigs/Laptops.conf # For laptop related
source= $UserConfigs/LaptopDisplay.conf # Laptop display related. You need to read the comment on this file
-source= $UserConfigs/WindowRules.conf # all about Hyprland Window Rules and Layer Rules
+# 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
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/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
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" ;;
diff --git a/config/hypr/v2.3.17 b/config/hypr/v2.3.18
index 31b3414d..31b3414d 100644
--- a/config/hypr/v2.3.17
+++ b/config/hypr/v2.3.18
diff --git a/copy.sh b/copy.sh
index b4e958a9..cd5f5212 100755
--- a/copy.sh
+++ b/copy.sh
@@ -281,6 +281,14 @@ if command -v qs >/dev/null 2>&1; then
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/UserConfigs/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
+
# Note: The SUPER+A keybind now uses OverviewToggle.sh which automatically
# tries quickshell first and falls back to AGS, so both can be installed
@@ -406,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"
@@ -846,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
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage