25 lines
980 B
Nix
25 lines
980 B
Nix
{pkgs, ...}: let
|
|
workspace-toggle = pkgs.writeShellScriptBin "workspace-toggle" ''
|
|
#!/usr/bin/env bash
|
|
target_workspace="$1"
|
|
|
|
# Get current workspace info
|
|
current_info=$(${pkgs.hyprland}/bin/hyprctl activeworkspace -j)
|
|
current=$(echo "$current_info" | ${pkgs.jq}/bin/jq -r '.id')
|
|
|
|
# Check if we're in a special workspace (negative ID)
|
|
if [[ $current -lt 0 ]]; then
|
|
# We're in a special workspace, force switch to target workspace
|
|
${pkgs.hyprland}/bin/hyprctl dispatch focusworkspaceoncurrentmonitor "$target_workspace"
|
|
elif [[ $current -eq $target_workspace ]]; then
|
|
# We're already on the target workspace, toggle back to previous
|
|
${pkgs.hyprland}/bin/hyprctl dispatch workspace previous
|
|
else
|
|
# We're on a different normal workspace, switch to target using split:workspace
|
|
${pkgs.hyprland}/bin/hyprctl dispatch split:workspace "$target_workspace"
|
|
fi
|
|
'';
|
|
in {
|
|
home.packages = [workspace-toggle];
|
|
}
|