1
0
forked from extern/nix-config
donovanglover-nix-config/desktop/hyprland/swapmaster.sh
Donovan Glover 1286ec48cb
Revert "hyprland: Use hyprctl activeworkspace"
"activeworkspace" can be useful if you aren't interested in the special
workspace, but since it ignores special workspaces, it causes this
script to behave unexpectedly.
2023-05-21 14:17:08 -04:00

62 lines
1.9 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'`
# 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 there are no windows yet, function as a program launcher
if [[ $numWindowsOnWorkspace -eq 0 ]]; then
kitty &
hyprctl keyword animation workspaces,1,6,default,slidevert
exit
fi
# Focus the master window
hyprctl dispatch layoutmsg focusmaster master
# Focus the last window
hyprctl dispatch focuscurrentorlast
# Get the workspace ID of the last window
newWorkspaceID=`hyprctl activewindow -j | jq -r '.workspace.id'`
# If the workspaces are the same, swap master with that last window.
if [[ "$oldWorkspaceID" == "$newWorkspaceID" ]]; then
hyprctl dispatch layoutmsg swapwithmaster master
oldFullscreen=`echo "$cw" | jq -r '.fullscreen'`
oldFullscreenMode=`echo "$cw" | jq -r '.fullscreenMode'`
if [[ "$oldFullscreen" == "true" ]]; then
hyprctl dispatch fullscreen "$oldFullscreenMode"
fi
else
# Otherwise, don't do anything.
hyprctl dispatch focuscurrentorlast
oldFullscreen=`echo "$cw" | jq -r '.fullscreen'`
oldFullscreenMode=`echo "$cw" | jq -r '.fullscreenMode'`
if [[ "$oldFullscreen" == "true" ]]; then
hyprctl dispatch fullscreen "$oldFullscreenMode"
fi
# If the new workspace is special, focus the last focused special window
if [[ "$newWorkspaceID" == "-99" ]]; then
hyprctl dispatch focuscurrentorlast
fi
# If there are more windows, swap
if [[ $numWindowsOnWorkspace -gt 1 ]]; then
hyprctl dispatch layoutmsg swapwithmaster
hyprctl dispatch layoutmsg focusmaster master
fi
fi
sleep 0.1
# Use the default animation once more.
hyprctl keyword animation workspaces,1,6,default,slidevert