aerospace-tmux-focus.nix 724 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. {
  2. writeShellScriptBin,
  3. lib,
  4. tmux,
  5. aerospace,
  6. }:
  7. let
  8. aerospaceBin = "${lib.getExe aerospace}";
  9. tmuxBin = "${lib.getExe tmux}";
  10. in
  11. writeShellScriptBin "tmux-aerospace-focus" ''
  12. direction="$1"
  13. if [[ -n "$(${aerospaceBin} list-windows --focused | grep tmux)" ]]; then
  14. tmux_dir=""
  15. case "$direction" in
  16. left) tmux_dir="L" ;;
  17. down) tmux_dir="D" ;;
  18. up) tmux_dir="U" ;;
  19. right) tmux_dir="R" ;;
  20. esac
  21. if [[ -n "$tmux_dir" ]]; then
  22. ret=$(${tmuxBin} run "#{at_edge} $tmux_dir")
  23. if [[ $ret -eq 1 ]]; then
  24. ${aerospaceBin} focus "$direction"
  25. else
  26. ${tmuxBin} select-pane "-$tmux_dir"
  27. fi
  28. fi
  29. fi
  30. ${aerospaceBin} focus "$direction"
  31. ''