0
0

project_launch.zsh 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #!/bin/zsh
  2. if [ -z "$1" ]; then
  3. (sleep 3; exit 1) &
  4. PROJECT=$(timeout 2 fd \
  5. --base-directory ~ \
  6. -d 10 \
  7. -u -E '.[a-fh-zA-FG-Z]*' \
  8. --prune \\.git$ \
  9. -E "Library" \
  10. -E "OrbStack" \
  11. -E "node_modules" \
  12. -E "target" \
  13. -E "dist" \
  14. -E ".bare" \
  15. -E ".cargo" \
  16. -E ".npm" \
  17. -E ".rustup" \
  18. -E "venv" \
  19. -E ".venv" \
  20. -x echo {//} \
  21. | sort -u -r \
  22. | fzf);
  23. else
  24. PROJECT="$1"
  25. fi;
  26. if [ -n "$PROJECT" ]; then
  27. PROJECT=$(realpath "$PROJECT")
  28. NAME=$(basename "$PROJECT")
  29. if git -C "$PROJECT" rev-parse --is-inside-work-tree &>/dev/null; then
  30. GIT_DIR=$(git -C "$PROJECT" rev-parse --git-dir 2>/dev/null)
  31. COMMON_DIR=$(git -C "$PROJECT" rev-parse --git-common-dir 2>/dev/null)
  32. if [[ "$GIT_DIR" != "$COMMON_DIR" ]]; then
  33. REPO_ROOT=$(dirname "$COMMON_DIR")
  34. REPO_NAME=$(basename "$REPO_ROOT")
  35. NAME="$NAME | $REPO_NAME"
  36. fi
  37. fi
  38. tmux select-window -t "$NAME" || \
  39. tmux new-window -c "$PROJECT" -n "$NAME" /bin/zsh $DOTFILES_DIR/.scripts/nvim_launch.zsh "$PROJECT"
  40. else
  41. exit 1
  42. fi;