aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/migrate-hypr-to-lua.sh
diff options
context:
space:
mode:
authorDon Williams <don.e.williams@gmail.com>2026-08-05 07:28:34 -0400
committerPinapelz <yukais@pinapelz.com>2026-08-29 21:41:34 -0700
commit0911f2c77d6b2d42203f47da072437f32f1029f3 (patch)
tree45e541829017764d33fcf03e5c28c02d149e8f20 /scripts/migrate-hypr-to-lua.sh
parentff8a39488f28343df98973817ce87351080a2063 (diff)
Fixed migrate script to handle SHIFT
Signed-off-by: Don Williams <don.e.williams@gmail.com>
Diffstat (limited to 'scripts/migrate-hypr-to-lua.sh')
-rwxr-xr-xscripts/migrate-hypr-to-lua.sh84
1 files changed, 81 insertions, 3 deletions
diff --git a/scripts/migrate-hypr-to-lua.sh b/scripts/migrate-hypr-to-lua.sh
index 0a127688..75a61db9 100755
--- a/scripts/migrate-hypr-to-lua.sh
+++ b/scripts/migrate-hypr-to-lua.sh
@@ -1112,6 +1112,46 @@ def emit_rule(rule_type, rule):
lines.append("})")
return "\n".join(lines)
+def normalize_bind_mods(mods):
+ """Uppercase known modifiers for Hyprland Lua key chords.
+
+ Hyprlang accepts mixed-case modifiers (e.g. "shift"), but hl.bind keysyms
+ require canonical names like SHIFT/CTRL/ALT/SUPER.
+ """
+ if not mods:
+ return ""
+ tokens = re.split(r"\s+", mods.strip())
+ known = {
+ "super": "SUPER",
+ "super_l": "SUPER_L",
+ "super_r": "SUPER_R",
+ "shift": "SHIFT",
+ "shift_l": "SHIFT_L",
+ "shift_r": "SHIFT_R",
+ "ctrl": "CTRL",
+ "control": "CTRL",
+ "ctrl_l": "CTRL_L",
+ "ctrl_r": "CTRL_R",
+ "control_l": "CTRL_L",
+ "control_r": "CTRL_R",
+ "alt": "ALT",
+ "alt_l": "ALT_L",
+ "alt_r": "ALT_R",
+ "meta": "META",
+ "meta_l": "META_L",
+ "meta_r": "META_R",
+ "mod2": "MOD2",
+ "mod3": "MOD3",
+ "mod5": "MOD5",
+ }
+ normalized = []
+ for token in tokens:
+ if not token:
+ continue
+ key = token.lower()
+ normalized.append(known.get(key, token))
+ return " ".join(normalized)
+
def parse_keybinds(path, *, variables=None, visited=None):
if not path.exists():
return []
@@ -1164,7 +1204,8 @@ def parse_keybinds(path, *, variables=None, visited=None):
if unbind:
parts = [expand(part.strip()) for part in unbind.group(1).split(",")]
if len(parts) >= 2:
- converted.append(f"unbind({lua_string(parts[0])}, {lua_string(parts[1])})")
+ mods = normalize_bind_mods(parts[0])
+ converted.append(f"unbind({lua_string(mods)}, {lua_string(parts[1])})")
continue
bind = re.match(r"^(bind[a-z]*)\s*=\s*(.+)$", line)
@@ -1185,6 +1226,8 @@ def parse_keybinds(path, *, variables=None, visited=None):
else:
continue
+ mods = normalize_bind_mods(mods)
+
opts = []
if description:
opts.append(f"description = {lua_string(description)}")
@@ -1444,8 +1487,43 @@ system_keybind_lines = [
" return (value or \"\"):gsub(\"^%s+\", \"\"):gsub(\"%s+$\", \"\")",
"end",
"",
+ "local function normalize_mods(mods)",
+ " mods = trim(mods)",
+ " if mods == \"\" then",
+ " return \"\"",
+ " end",
+ " local known = {",
+ " super = \"SUPER\",",
+ " super_l = \"SUPER_L\",",
+ " super_r = \"SUPER_R\",",
+ " shift = \"SHIFT\",",
+ " shift_l = \"SHIFT_L\",",
+ " shift_r = \"SHIFT_R\",",
+ " ctrl = \"CTRL\",",
+ " control = \"CTRL\",",
+ " ctrl_l = \"CTRL_L\",",
+ " ctrl_r = \"CTRL_R\",",
+ " control_l = \"CTRL_L\",",
+ " control_r = \"CTRL_R\",",
+ " alt = \"ALT\",",
+ " alt_l = \"ALT_L\",",
+ " alt_r = \"ALT_R\",",
+ " meta = \"META\",",
+ " meta_l = \"META_L\",",
+ " meta_r = \"META_R\",",
+ " mod2 = \"MOD2\",",
+ " mod3 = \"MOD3\",",
+ " mod5 = \"MOD5\",",
+ " }",
+ " local parts = {}",
+ " for token in mods:gmatch(\"%S+\") do",
+ " parts[#parts + 1] = known[token:lower()] or token",
+ " end",
+ " return table.concat(parts, \" \")",
+ "end",
+ "",
"local function chord(mods, key)",
- " mods = trim(mods):gsub(\"%s+\", \" + \")",
+ " mods = normalize_mods(mods):gsub(\"%s+\", \" + \")",
" key = trim(key)",
" if mods == \"\" then",
" return key",
@@ -1487,7 +1565,7 @@ system_keybind_lines = [
" [\"code:18\"] = \"9\",",
" [\"code:19\"] = \"0\",",
" }",
- " if mods:match(\"SHIFT\") and shifted_number_keys[key] then",
+ " if mods:upper():match(\"SHIFT\") and shifted_number_keys[key] then",
" local number_key = number_keys[key]",
" if number_key then",
" return { shifted_number_keys[key], number_key }",
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage