nix-config/hyprland/.config/hypr/swapmaster.sh
Donovan Glover feb84afb12
hyprland: Add swapmaster script
This is an alternative to the default swapmaster behavior that, instead
of swapping with the first child, swaps with the last active window if
the currently focused window is master.
2023-04-30 13:43:24 -04:00

61 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
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
fi
fi
sleep 0.1
# Use the default animation once more.
hyprctl keyword animation workspaces,1,6,default