1
1
Fork 0
nixos/options/custom/scripts/toggle.sh
Myned 4ed60e442e
nix: update toggle.sh comments
Signed-off-by: Myned <dev@bjork.tech>
2024-09-13 14:22:21 -05:00

60 lines
1.5 KiB
Bash

#! /usr/bin/env bash
# Toggle pinned window, launch if needed
#?? toggle --type TYPE --expression EXPRESSION --workspace WORKSPACE [COMMAND]
#!! Regex may need to be double-escaped
# https://jqlang.github.io/jq/manual/#regular-expressions
focus=false
while (("$#" > 0)); do
case "$1" in
-e | --expression)
shift
expression="$1"
;;
-f | --focus)
focus=true
;;
-t | --type)
shift
type="$1"
;;
-w | --workspace)
shift
workspace="$1"
;;
--)
shift
break
;;
esac
shift
done
command="${*}"
if [[ "$command" ]]; then
if ! hyprctl -j clients | jq -re "any(.[].$type | test(\"$expression\"); . == true)"; then
hyprctl dispatch exec -- "$command" # Launch window
exit
fi
fi
current_workspace="$(hyprctl -j clients | jq -r "first(.[] | select(.$type | test(\"$expression\")).workspace.name)")"
if [[ "$current_workspace" == "$workspace" ]]; then
# HACK: Move to current workspace before pinning, otherwise some windows freeze
# https://github.com/hyprwm/Hyprland/issues/7609
# https://github.com/hyprwm/Hyprland/issues/7191
hyprctl dispatch movetoworkspacesilent "0,$type:$expression"
hyprctl dispatch pin "$type:$expression" # Pin
if "$focus"; then
hyprctl dispatch focuswindow "$type:$expression" # Focus
fi
else
hyprctl dispatch pin "$type:$expression" # Unpin
hyprctl dispatch movetoworkspacesilent "$workspace,$type:$expression" # Move to workspace
fi