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/misc.nix
|
||||
./hypr/input.nix
|
||||
|
||||
./scripts.nix
|
||||
];
|
||||
wayland.windowManager.hyprland.enable = true;
|
||||
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