feat(hypr): add force switching of workspace
useful for going from special workspace to normal workspace
This commit is contained in:
@@ -7,6 +7,8 @@
|
|||||||
./hypr/animation.nix
|
./hypr/animation.nix
|
||||||
./hypr/misc.nix
|
./hypr/misc.nix
|
||||||
./hypr/input.nix
|
./hypr/input.nix
|
||||||
|
|
||||||
|
./scripts.nix
|
||||||
];
|
];
|
||||||
wayland.windowManager.hyprland.enable = true;
|
wayland.windowManager.hyprland.enable = true;
|
||||||
wayland.windowManager.hyprland.systemd.enable = false; # for UWSM support...
|
wayland.windowManager.hyprland.systemd.enable = false; # for UWSM support...
|
||||||
|
|||||||
@@ -0,0 +1,41 @@
|
|||||||
|
{pkgs, ...}: let
|
||||||
|
hakase-workspace-switch-force = pkgs.writeShellScriptBin "hakase-workspace-switch-force" ''
|
||||||
|
# Define binary paths to ensure they work regardless of environment PATH
|
||||||
|
HYPRCTL="${pkgs.hyprland}/bin/hyprctl"
|
||||||
|
JQ="${pkgs.jq}/bin/jq"
|
||||||
|
|
||||||
|
# Get the special workspace name
|
||||||
|
special_workspace=$($HYPRCTL monitors -j | $JQ -r '.[] | select(.focused) | .specialWorkspace.name')
|
||||||
|
|
||||||
|
# Strip the "special:" prefix (Nix escape: ''${var#*:})
|
||||||
|
workspace_name=''${special_workspace#*:}
|
||||||
|
|
||||||
|
# Get the target workspace number from argument
|
||||||
|
chosen_workspace_num=$1
|
||||||
|
|
||||||
|
if [[ -z ''${chosen_workspace_num} ]]; then
|
||||||
|
echo "Usage: $(basename "$0") [number]"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if we are actually in a special workspace
|
||||||
|
if [[ "''${special_workspace}" == *"special"* ]]; then
|
||||||
|
echo "[LOG] workspace is ''${special_workspace}"
|
||||||
|
|
||||||
|
# Toggle the special workspace OFF
|
||||||
|
$HYPRCTL dispatch togglespecialworkspace "''${workspace_name}"
|
||||||
|
|
||||||
|
# Switch to the requested normal workspace
|
||||||
|
$HYPRCTL dispatch workspace "''${chosen_workspace_num}"
|
||||||
|
else
|
||||||
|
echo "[ERR] workspace is not special"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
'';
|
||||||
|
in {
|
||||||
|
home.packages = [
|
||||||
|
hakase-workspace-switch-force
|
||||||
|
];
|
||||||
|
}
|
||||||
Executable
+26
@@ -0,0 +1,26 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# flow
|
||||||
|
# check workspace
|
||||||
|
# if the workspace is a special workspace, toggle it off
|
||||||
|
# switch to workspace based on the chosen num
|
||||||
|
|
||||||
|
special_workspace=$(hyprctl monitors -j | jq -r '.[] | select(.focused) | .specialWorkspace.name')
|
||||||
|
workspace_name=${special_workspace#*:}
|
||||||
|
chosen_workspace_num=$1
|
||||||
|
|
||||||
|
if [[ -z ${chosen_workspace_num} ]]; then
|
||||||
|
echo "Usage: $0 [number]"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "${special_workspace}" == *"special"* ]]; then
|
||||||
|
echo "[LOG] workspace is ${special_workspace}"
|
||||||
|
hyprctl dispatch togglespecialworkspace "${workspace_name}"
|
||||||
|
hyprctl dispatch workspace "${chosen_workspace_num}"
|
||||||
|
else
|
||||||
|
echo "[ERR] workspace is not special"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
||||||
Reference in New Issue
Block a user