dotfiles/.config/hypr/scripts/ChangeLayout.sh
2026-05-13 21:22:17 +02:00

110 lines
3.3 KiB
Bash
Executable file

#!/usr/bin/env bash
# ==================================================
# 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"
layouts=(master dwindle scrolling monocle)
get_layout() {
hyprctl -j getoption general:layout | jq -r '.str'
}
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
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
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