{ pkgs }: pkgs.writeShellApplication { name = "niri-shortcut-swap-monitor-workspaces"; runtimeInputs = [ pkgs.jq pkgs.niri ]; text = '' focused_output="$(niri msg --json focused-output | jq -r '.name // empty')" if [ -z "$focused_output" ]; then exit 0 fi niri msg action focus-monitor-next target_output="$(niri msg --json focused-output | jq -r '.name // empty')" if [ -z "$target_output" ] || [ "$target_output" = "$focused_output" ]; then exit 0 fi target_workspace_idx="$( niri msg --json workspaces \ | jq -r --arg output "$target_output" ' first(.[] | select(.output == $output and .is_active) | .idx) // empty ' )" if [ -z "$target_workspace_idx" ]; then niri msg action focus-monitor "$focused_output" exit 0 fi niri msg action focus-monitor "$focused_output" niri msg action move-workspace-to-monitor "$target_output" niri msg action focus-workspace "$target_workspace_idx" niri msg action move-workspace-to-monitor "$focused_output" ''; }