aboutsummaryrefslogtreecommitdiffstats
path: root/config/hypr/scripts/KeyBinds.sh
diff options
context:
space:
mode:
authorDon Williams <don.e.williams@gmail.com>2025-10-30 22:39:02 -0400
committerDon Williams <don.e.williams@gmail.com>2025-10-30 22:39:02 -0400
commit70cb1f313d04558da9ab4e4f9ca5eecd373acb45 (patch)
treeca957b23ec90b3180e047e1bf92eea0162980e38 /config/hypr/scripts/KeyBinds.sh
parent9fcc463fd035c3c48c28430d7504c0f1870f9a30 (diff)
refactor(keybinds): use bindd with descriptions across configs
- Convert binds to description form (bindd/bindld/binded/bindmd/bindlnd) - Keep naming as powermenu for shutdown/reboot/logout/suspend - Update KeyBinds.sh to parse and display descriptions - Update CHANGELOG
Diffstat (limited to 'config/hypr/scripts/KeyBinds.sh')
-rwxr-xr-xconfig/hypr/scripts/KeyBinds.sh69
1 files changed, 56 insertions, 13 deletions
diff --git a/config/hypr/scripts/KeyBinds.sh b/config/hypr/scripts/KeyBinds.sh
index 3a19390f..46953cc5 100755
--- a/config/hypr/scripts/KeyBinds.sh
+++ b/config/hypr/scripts/KeyBinds.sh
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
-# searchable enabled keybinds using rofi
+# searchable enabled keybinds using rofi (supports bindd descriptions)
# kill yad to not interfere with this binds
pkill yad || true
@@ -17,23 +17,66 @@ laptop_conf="$HOME/.config/hypr/UserConfigs/Laptops.conf"
rofi_theme="$HOME/.config/rofi/config-keybinds.rasi"
msg='☣️ NOTE ☣️: Clicking with Mouse or Pressing ENTER will have NO function'
-# combine the contents of the keybinds files and filter for keybinds
-keybinds=$(cat "$keybinds_conf" "$user_keybinds_conf" | grep -E '^bind')
+# collect raw bind lines (strip end-of-line comments) from available files
+files=("$keybinds_conf" "$user_keybinds_conf")
+[[ -f "$laptop_conf" ]] && files+=("$laptop_conf")
-# check if laptop.conf exists and add its keybinds if present
-if [[ -f "$laptop_conf" ]]; then
- laptop_binds=$(grep -E '^bind' "$laptop_conf")
- keybinds+=$'\n'"$laptop_binds"
-fi
+raw_keybinds=$(cat "${files[@]}" 2>/dev/null \
+ | grep -E '^[[:space:]]*bind' \
+ | sed -E 's/[[:space:]]+#.*$//')
# check for any keybinds to display
-if [[ -z "$keybinds" ]]; then
+if [[ -z "$raw_keybinds" ]]; then
echo "no keybinds found."
exit 1
fi
-# replace $mainmod with super in the displayed keybinds for rofi
-display_keybinds=$(echo "$keybinds" | sed 's/\$mainMod/SUPER/g')
+# transform into a readable list: MODS+KEY — DESCRIPTION — DISPATCHER [PARAMS]
+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 (desc != "") {
+ if (dispatcher != "" && params != "")
+ print combo, " — ", desc, " — ", dispatcher, " ", params;
+ else if (dispatcher != "")
+ print combo, " — ", desc, " — ", dispatcher;
+ else
+ 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 with the modified content
-echo "$display_keybinds" | rofi -dmenu -i -config "$rofi_theme" -mesg "$msg" \ No newline at end of file
+# use rofi to display the keybinds
+printf '%s\n' "$display_keybinds" | rofi -dmenu -i -config "$rofi_theme" -mesg "$msg"
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage