forked from extern/nix-config
aee65e4cb1
Vertical is nice since the animation is faster and covers less of the screen. It works well with the master layout since you can easily see the master window of each workspace. Being able to have unique partitioning schemes for each workspace (as long as they're using the master layout) is a nice advantage of Hyprland over other compositors like river.
40 lines
1.3 KiB
Bash
Executable File
40 lines
1.3 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# Temporary make the animation a fade for effect
|
|
hyprctl keyword animation workspaces,1,12,default,fade
|
|
|
|
# Get the workspace ID of the current window
|
|
cw=`hyprctl activewindow -j`
|
|
oldWorkspaceID=`echo "$cw" | jq -r '.workspace.id'`
|
|
oldAddress=`echo "$cw" | jq -r '.address'`
|
|
|
|
# Get the number of windows on the workspace (0 = do nothing, 2 or more = swap)
|
|
numWindowsOnWorkspace=`hyprctl workspaces -j | jq -r ".[] | select(.id==$oldWorkspaceID) | .windows"`
|
|
|
|
if [[ "$numWindowsOnWorkspace" -gt 1 ]]; then
|
|
# Focus the master window
|
|
hyprctl dispatch layoutmsg focusmaster master
|
|
|
|
# If the master window is the same, focus the last window
|
|
nw=`hyprctl activewindow -j`
|
|
newAddress=`echo "$nw" | jq -r '.address'`
|
|
if [[ "$newAddress" == "$oldAddress" ]]; then
|
|
hyprctl dispatch focuscurrentorlast
|
|
|
|
# If the workspaces are not the same, revert & focus the first child instead
|
|
newWorkspaceID=`hyprctl activewindow -j | jq -r '.workspace.id'`
|
|
if [[ "$oldWorkspaceID" != "$newWorkspaceID" ]]; then
|
|
# Only do so if we're not in the special workspace
|
|
if [[ "$newWorkspaceID" != "-99" ]]; then
|
|
hyprctl dispatch focuscurrentorlast
|
|
hyprctl dispatch layoutmsg focusmaster
|
|
fi
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
sleep 0.1
|
|
|
|
# Use the default animation once more.
|
|
hyprctl keyword animation workspaces,1,6,default,slidevert
|