aboutsummaryrefslogtreecommitdiffstats
path: root/config/hypr/scripts/ChangeLayout.sh
diff options
context:
space:
mode:
Diffstat (limited to 'config/hypr/scripts/ChangeLayout.sh')
-rwxr-xr-xconfig/hypr/scripts/ChangeLayout.sh120
1 files changed, 76 insertions, 44 deletions
diff --git a/config/hypr/scripts/ChangeLayout.sh b/config/hypr/scripts/ChangeLayout.sh
index f9f6b52b..3c81bcbe 100755
--- a/config/hypr/scripts/ChangeLayout.sh
+++ b/config/hypr/scripts/ChangeLayout.sh
@@ -10,11 +10,31 @@
notif="$HOME/.config/swaync/images/ja.png"
layouts=(master dwindle scrolling monocle)
+quiet_mode=0
get_layout() {
hyprctl -j getoption general:layout | jq -r '.str'
}
+set_hypr_layout() {
+ local target="$1"
+ local output
+
+ output="$(hyprctl keyword general:layout "$target" 2>&1)"
+ if grep -q "keyword can't work with non-legacy parsers" <<<"$output"; then
+ output="$(hyprctl eval "hl.config({ general = { layout = \"${target}\" } })" 2>&1)"
+ fi
+
+ if ! grep -q "^ok$" <<<"$output"; then
+ echo "$output" >&2
+ return 1
+ fi
+}
+
+hypr_keyword() {
+ hyprctl keyword "$@" >/dev/null 2>&1 || true
+}
+
next_layout() {
local current="$1"
local i
@@ -30,66 +50,78 @@ next_layout() {
set_layout() {
local target="$1"
- hyprctl keyword general:layout "$target"
- hyprctl keyword unbind SUPER,j
- hyprctl keyword unbind SUPER,k
- hyprctl keyword unbind SUPER,left
- hyprctl keyword unbind SUPER,right
- hyprctl keyword unbind SUPER,up
- hyprctl keyword unbind SUPER,down
- hyprctl keyword unbind SUPER,O
+ if ! set_hypr_layout "$target"; then
+ if [[ "$quiet_mode" -eq 0 ]]; then
+ notify-send -e -u critical -i "$notif" " Layout switch failed: $target"
+ fi
+ return 1
+ fi
+
+ hypr_keyword unbind SUPER,j
+ hypr_keyword unbind SUPER,k
+ hypr_keyword bind SUPER,j,cyclenext
+ hypr_keyword bind SUPER,k,cyclenext,prev
+ hypr_keyword unbind SUPER,left
+ hypr_keyword unbind SUPER,right
+ hypr_keyword unbind SUPER,up
+ hypr_keyword unbind SUPER,down
+ hypr_keyword unbind SUPER,O
case "$target" in
"dwindle")
- hyprctl keyword bind SUPER,j,cyclenext
- hyprctl keyword bind SUPER,k,cyclenext,prev
- hyprctl keyword bind SUPER,left,cyclenext,prev
- hyprctl keyword bind SUPER,up,cyclenext,prev
- hyprctl keyword bind SUPER,right,cyclenext
- hyprctl keyword bind SUPER,down,cyclenext
- hyprctl keyword bind SUPER,O,layoutmsg,togglesplit
- notify-send -e -u low -i "$notif" " Dwindle Layout"
+ hypr_keyword bind SUPER,left,cyclenext,prev
+ hypr_keyword bind SUPER,up,cyclenext,prev
+ hypr_keyword bind SUPER,right,cyclenext
+ hypr_keyword bind SUPER,down,cyclenext
+ hypr_keyword bind SUPER,O,layoutmsg,togglesplit
;;
"scrolling")
- hyprctl keyword bind SUPER,j,cyclenext
- hyprctl keyword bind SUPER,k,cyclenext,prev
- hyprctl keyword bind SUPER,left,cyclenext,prev
- hyprctl keyword bind SUPER,up,cyclenext,prev
- hyprctl keyword bind SUPER,right,cyclenext
- hyprctl keyword bind SUPER,down,cyclenext
- notify-send -e -u low -i "$notif" " Scrolling Layout"
+ hypr_keyword bind SUPER,left,cyclenext,prev
+ hypr_keyword bind SUPER,up,cyclenext,prev
+ hypr_keyword bind SUPER,right,cyclenext
+ hypr_keyword bind SUPER,down,cyclenext
;;
"monocle")
- hyprctl keyword bind SUPER,j,layoutmsg,cyclenext
- hyprctl keyword bind SUPER,k,layoutmsg,cycleprev
- hyprctl keyword bind SUPER,left,layoutmsg,cycleprev
- hyprctl keyword bind SUPER,up,layoutmsg,cycleprev
- hyprctl keyword bind SUPER,right,layoutmsg,cyclenext
- hyprctl keyword bind SUPER,down,layoutmsg,cyclenext
- notify-send -e -u low -i "$notif" " Monocle Layout"
+ hypr_keyword bind SUPER,left,layoutmsg,cycleprev
+ hypr_keyword bind SUPER,up,layoutmsg,cycleprev
+ hypr_keyword bind SUPER,right,layoutmsg,cyclenext
+ hypr_keyword bind SUPER,down,layoutmsg,cyclenext
;;
"master")
- hyprctl keyword bind SUPER,j,layoutmsg,cyclenext
- hyprctl keyword bind SUPER,k,layoutmsg,cycleprev
- hyprctl keyword bind SUPER,left,movefocus,l
- hyprctl keyword bind SUPER,right,movefocus,r
- hyprctl keyword bind SUPER,up,movefocus,u
- hyprctl keyword bind SUPER,down,movefocus,d
- notify-send -e -u low -i "$notif" " Master Layout"
+ hypr_keyword bind SUPER,left,movefocus,l
+ hypr_keyword bind SUPER,right,movefocus,r
+ hypr_keyword bind SUPER,up,movefocus,u
+ hypr_keyword bind SUPER,down,movefocus,d
;;
*)
- hyprctl keyword bind SUPER,j,layoutmsg,cyclenext
- hyprctl keyword bind SUPER,k,layoutmsg,cycleprev
- hyprctl keyword bind SUPER,left,movefocus,l
- hyprctl keyword bind SUPER,right,movefocus,r
- hyprctl keyword bind SUPER,up,movefocus,u
- hyprctl keyword bind SUPER,down,movefocus,d
+ hypr_keyword bind SUPER,left,movefocus,l
+ hypr_keyword bind SUPER,right,movefocus,r
+ hypr_keyword bind SUPER,up,movefocus,u
+ hypr_keyword bind SUPER,down,movefocus,d
echo "Unknown layout: $target" >&2
return 1
;;
esac
+
+ local actual
+ actual="$(get_layout)"
+ if [[ "$actual" == "$target" ]]; then
+ if [[ "$quiet_mode" -eq 0 ]]; then
+ notify-send -e -u low -i "$notif" " ${actual^} Layout"
+ fi
+ else
+ if [[ "$quiet_mode" -eq 0 ]]; then
+ notify-send -e -u critical -i "$notif" " Layout switch failed: still ${actual}"
+ fi
+ return 1
+ fi
}
+if [[ "${1:-}" == "--quiet" || "${1:-}" == "--no-notify" ]]; then
+ quiet_mode=1
+ shift
+fi
+
current="$(get_layout)"
arg="${1:-toggle}"
@@ -104,7 +136,7 @@ master|dwindle|scrolling|monocle)
set_layout "$arg"
;;
*)
- echo "Usage: $(basename "$0") [toggle|next|init|master|dwindle|scrolling|monocle]" >&2
+ echo "Usage: $(basename "$0") [--quiet|--no-notify] [toggle|next|init|master|dwindle|scrolling|monocle]" >&2
exit 1
;;
esac
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage