qmd 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #!/usr/bin/env bash
  2. # qmd - Quick Markdown Search
  3. set -euo pipefail
  4. # Find bun - prefer PATH, fallback to known locations
  5. find_bun() {
  6. # First: check if bun is in PATH and modern enough
  7. if command -v bun &>/dev/null; then
  8. local ver=$(bun --version 2>/dev/null || echo "0")
  9. if [[ "$ver" =~ ^1\. ]]; then
  10. command -v bun
  11. return 0
  12. fi
  13. fi
  14. # Fallback: derive paths (need HOME)
  15. : "${HOME:=$(eval echo ~)}"
  16. # If running from .bun tree, use that bun
  17. if [[ "${BASH_SOURCE[0]}" == */.bun/* ]]; then
  18. local bun_home="${BASH_SOURCE[0]%%/.bun/*}/.bun"
  19. if [[ -x "$bun_home/bin/bun" ]]; then
  20. echo "$bun_home/bin/bun"
  21. return 0
  22. fi
  23. fi
  24. # Check known locations
  25. local candidates=(
  26. "$HOME/.local/share/mise/installs/bun/latest/bin/bun"
  27. "$HOME/.local/share/mise/shims/bun"
  28. "$HOME/.asdf/shims/bun"
  29. "/opt/homebrew/bin/bun"
  30. "/usr/local/bin/bun"
  31. "$HOME/.bun/bin/bun"
  32. )
  33. for c in "${candidates[@]}"; do
  34. [[ -x "$c" ]] && { echo "$c"; return 0; }
  35. done
  36. return 1
  37. }
  38. BUN=$(find_bun) || { echo "Error: bun not found. Install from https://bun.sh" >&2; exit 1; }
  39. # Resolve symlinks to find script location
  40. SOURCE="${BASH_SOURCE[0]}"
  41. while [[ -L "$SOURCE" ]]; do
  42. DIR="$(cd -P "$(dirname "$SOURCE")" && pwd)"
  43. SOURCE="$(readlink "$SOURCE")"
  44. [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE"
  45. done
  46. SCRIPT_DIR="$(cd -P "$(dirname "$SOURCE")" && pwd)"
  47. exec "$BUN" "$SCRIPT_DIR/src/qmd.ts" "$@"