diff options
Diffstat (limited to 'config/hypr/scripts/ChangeLayout.sh')
| -rwxr-xr-x | config/hypr/scripts/ChangeLayout.sh | 133 |
1 files changed, 103 insertions, 30 deletions
diff --git a/config/hypr/scripts/ChangeLayout.sh b/config/hypr/scripts/ChangeLayout.sh index 499fa1e2..f52d783f 100755 --- a/config/hypr/scripts/ChangeLayout.sh +++ b/config/hypr/scripts/ChangeLayout.sh @@ -1,39 +1,112 @@ #!/usr/bin/env bash -# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ ## -# for changing Hyprland Layouts (Master or Dwindle) on the fly +# ================================================== +# KoolDots (2026) +# Project URL: https://github.com/LinuxBeginnings +# License: GNU GPLv3 +# SPDX-License-Identifier: GPL-3.0-or-later +# ================================================== +# for changing Hyprland Layouts (master, dwindle, scrolling, monocle) on the fly notif="$HOME/.config/swaync/images/ja.png" -LAYOUT=$(hyprctl -j getoption general:layout | jq '.str' | sed 's/"//g') +layouts=(master dwindle scrolling monocle) -# Reverse layout value to reuse toggle logic. So layouts don't get swapped initially. -if [ "$1" = "init" ]; then - if [ "$LAYOUT" = "master" ]; then - LAYOUT="dwindle" - else - LAYOUT="master" - fi -fi +get_layout() { + hyprctl -j getoption general:layout | jq -r '.str' +} -case $LAYOUT in -"master") - hyprctl keyword general:layout dwindle - hyprctl keyword unbind SUPER,J - hyprctl keyword unbind SUPER,K - hyprctl keyword bind SUPER,J,cyclenext - hyprctl keyword bind SUPER,K,cyclenext,prev - hyprctl keyword bind SUPER,O,togglesplit - notify-send -e -u low -i "$notif" " Dwindle Layout" - ;; -"dwindle") - hyprctl keyword general:layout master - hyprctl keyword unbind SUPER,J - hyprctl keyword unbind SUPER,K +next_layout() { + local current="$1" + local i + for i in "${!layouts[@]}"; do + if [[ "${layouts[i]}" == "$current" ]]; then + echo "${layouts[((i + 1) % ${#layouts[@]})]}" + return + fi + done + echo "${layouts[0]}" +} + +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 - hyprctl keyword bind SUPER,J,layoutmsg,cyclenext - hyprctl keyword bind SUPER,K,layoutmsg,cycleprev - notify-send -e -u low -i "$notif" " Master Layout" - ;; -*) ;; + hyprctl keyword unbind SUPER_SHIFT,M + + 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" + ;; + "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" + ;; + "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 + hyprctl keyword bind SUPER_SHIFT,M,layoutmsg,swapnext + notify-send -e -u low -i "$notif" " Monocle Layout" + ;; + "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" + ;; + *) + 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 + echo "Unknown layout: $target" >&2 + return 1 + ;; + esac +} +current="$(get_layout)" +arg="${1:-toggle}" + +case "$arg" in +init) + set_layout "$current" + ;; +toggle|next) + set_layout "$(next_layout "$current")" + ;; +master|dwindle|scrolling|monocle) + set_layout "$arg" + ;; +*) + echo "Usage: $(basename "$0") [toggle|next|init|master|dwindle|scrolling|monocle]" >&2 + exit 1 + ;; esac |
