38 lines
1.1 KiB
Nix
38 lines
1.1 KiB
Nix
{ 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"
|
|
'';
|
|
}
|