I'm trying to migrate my config to lua. I have been able to port most of the stuff to lua, except a few which either don't work or seem to be bugs.
keyword
I have these keybinds for zooming in my old config:
binde = Super, Minus, exec, ~/.config/hypr/hyprland/scripts/zoom.sh decrease 0.3
binde = Super, Equal, exec, ~/.config/hypr/hyprland/scripts/zoom.sh increase 0.3
the script is:
#!/usr/bin/env bash
# Controls Hyprland's cursor zoom_factor, clamped between 1.0 and 3.0
# Get current zoom level
get_zoom() {
hyprctl getoption -j cursor:zoom_factor | jq '.float'
}
# Clamp a value between 1.0 and 3.0
clamp() {
local val="$1"
awk "BEGIN {
v = $val;
if (v < 1.0) v = 1.0;
if (v > 3.0) v = 3.0;
print v;
}"
}
# Set zoom level
set_zoom() {
local value="$1"
clamped=$(clamp "$value")
hyprctl keyword cursor:zoom_factor "$clamped"
}
case "$1" in
reset)
set_zoom 1.0
;;
increase)
if [[ -z "$2" ]]; then
echo "Usage: $0 increase STEP"
exit 1
fi
current=$(get_zoom)
new=$(awk "BEGIN { print $current + $2 }")
set_zoom "$new"
;;
decrease)
if [[ -z "$2" ]]; then
echo "Usage: $0 decrease STEP"
exit 1
fi
current=$(get_zoom)
new=$(awk "BEGIN { print $current - $2 }")
set_zoom "$new"
;;
*)
echo "Usage: $0 {reset|increase STEP|decrease STEP}"
exit 1
;;
esac
The usage for keyword has been replaced by eval, so I replaced it with
hyprctl eval "hl.config { cursor = { zoom_factor = $clamped } }"
which seems to work in theory. The getoption result says the zoom has increased, but I don't see any visual changes.
code:*
In old config, I have plenty of keybinds which accept code:* keys. Take zoom for example:
binde = Super, code:82, exec, ~/.config/hypr/hyprland/scripts/zoom.sh decrease 0.3
binde = Super, code:86, exec, ~/.config/hypr/hyprland/scripts/zoom.sh increase 0.3
I tried to port these like this:
bind(mm .. '+code:82', exec(Hypr.hypr_scripts .. '/zoom.sh decrease 0.3'), { repeating = true })
bind(mm .. '+code:86', exec(Hypr.hypr_scripts .. '/zoom.sh increase 0.3'), { repeating = true })
But these don't seem to work. Hyprland throws Unknown keysym error.
A few minor ones
I have this keybind for moving around floating windows.
bindm = Super, mouse:272, movewindow
I ported it like this:
bind(mm .. '+mouse:272', dsp.window.move, { desc = 'Move window', mouse = true })
But I get runtime error that move accepts a table with arguments, like direction. As per the docs, direction only accepts left, right, up, down, so I am not sure how to do free motion.
I use end4's config. They have setup submaps for proper quickshell integration. One of the issues I found porting is this keybind.
binditn = Super, catchall, global, quickshell:searchToggleReleaseInterrupt
I'm not sure what this does. Further, I checked both the old and the new wikis for catchall, both don't seem to suggest much regarding how I can port this. I checked reddit and their github repo, that too didn't help much. If you know how I can port this, please do help.