47 lines
1.3 KiB
Nix
47 lines
1.3 KiB
Nix
{
|
|
lib,
|
|
pkgs,
|
|
}:
|
|
rec {
|
|
scripts = {
|
|
swapMonitorWorkspaces = 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"
|
|
'';
|
|
};
|
|
};
|
|
|
|
commands = lib.mapAttrs (_: lib.getExe) scripts;
|
|
}
|