qmd 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #!/usr/bin/env bash
  2. # qmd - Quick Markdown Search
  3. set -euo pipefail
  4. # Find node - prefer PATH, fallback to known locations
  5. find_node() {
  6. if command -v node &>/dev/null; then
  7. local ver=$(node --version 2>/dev/null | sed 's/^v//' || echo "0")
  8. local major="${ver%%.*}"
  9. if [[ "$major" -ge 22 ]]; then
  10. command -v node
  11. return 0
  12. fi
  13. fi
  14. # Fallback: derive paths (need HOME)
  15. : "${HOME:=$(eval echo ~)}"
  16. # Check known locations
  17. local candidates=(
  18. "$HOME/.local/share/mise/installs/node/latest/bin/node"
  19. "$HOME/.local/share/mise/shims/node"
  20. "$HOME/.asdf/shims/node"
  21. "/opt/homebrew/bin/node"
  22. "/usr/local/bin/node"
  23. "$HOME/.nvm/current/bin/node"
  24. )
  25. for c in "${candidates[@]}"; do
  26. [[ -x "$c" ]] && { echo "$c"; return 0; }
  27. done
  28. return 1
  29. }
  30. NODE=$(find_node) || { echo "Error: node (>=22) not found. Install from https://nodejs.org" >&2; exit 1; }
  31. # Resolve symlinks to find script location
  32. SOURCE="${BASH_SOURCE[0]}"
  33. while [[ -L "$SOURCE" ]]; do
  34. DIR="$(cd -P "$(dirname "$SOURCE")" && pwd)"
  35. SOURCE="$(readlink "$SOURCE")"
  36. [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE"
  37. done
  38. SCRIPT_DIR="$(cd -P "$(dirname "$SOURCE")" && pwd)"
  39. exec "$NODE" "$SCRIPT_DIR/dist/qmd.js" "$@"