summaryrefslogtreecommitdiff
path: root/dotfiles/hyprland/.local/bin/layout-cycle
diff options
context:
space:
mode:
Diffstat (limited to 'dotfiles/hyprland/.local/bin/layout-cycle')
-rwxr-xr-xdotfiles/hyprland/.local/bin/layout-cycle35
1 files changed, 35 insertions, 0 deletions
diff --git a/dotfiles/hyprland/.local/bin/layout-cycle b/dotfiles/hyprland/.local/bin/layout-cycle
new file mode 100755
index 0000000..dcc7b6b
--- /dev/null
+++ b/dotfiles/hyprland/.local/bin/layout-cycle
@@ -0,0 +1,35 @@
+#!/bin/sh
+# Cycle Hyprland layout forward (next) or backward (prev)
+# Usage: layout-cycle next | layout-cycle prev
+
+LAYOUTS="master scrolling monocle"
+CURRENT=$(hyprctl getoption general:layout -j | jq -r '.str')
+DIR="${1:-next}"
+
+set -- $LAYOUTS
+COUNT=$#
+INDEX=0
+
+i=0
+for layout in $LAYOUTS; do
+ if [ "$layout" = "$CURRENT" ]; then
+ INDEX=$i
+ break
+ fi
+ i=$((i + 1))
+done
+
+if [ "$DIR" = "next" ]; then
+ INDEX=$(( (INDEX + 1) % COUNT ))
+else
+ INDEX=$(( (INDEX - 1 + COUNT) % COUNT ))
+fi
+
+i=0
+for layout in $LAYOUTS; do
+ if [ $i -eq $INDEX ]; then
+ hyprctl keyword general:layout "$layout"
+ break
+ fi
+ i=$((i + 1))
+done