33# Usage: curl -sSfL https://github.com/duneanalytics/cli/raw/main/install.sh | bash
44#
55# Environment variables:
6- # INSTALL_DIR — installation directory (default: /usr/local/bin )
6+ # INSTALL_DIR — override installation directory (default: auto-detected )
77# VERSION — specific version to install (default: latest)
88# GITHUB_TOKEN — GitHub token for private repo access
99
@@ -30,7 +30,11 @@ main() {
3030 # Strip leading 'v' for archive name
3131 version_num=" ${version# v} "
3232
33- install_dir=" ${INSTALL_DIR:-/ usr/ local/ bin} "
33+ if [ -n " $INSTALL_DIR " ]; then
34+ install_dir=" $INSTALL_DIR "
35+ else
36+ install_dir=$( detect_install_dir)
37+ fi
3438
3539 case " $os " in
3640 windows) ext=" zip" ;;
@@ -68,16 +72,39 @@ main() {
6872
6973 chmod +x " $tmp /$binary_name "
7074
75+ mkdir -p " $install_dir " 2> /dev/null || true
76+
7177 if [ -w " $install_dir " ]; then
7278 mv " $tmp /$binary_name " " $install_dir /$binary_name "
7379 else
7480 log " Installing to ${install_dir} (requires sudo)..."
81+ sudo mkdir -p " $install_dir "
7582 sudo mv " $tmp /$binary_name " " $install_dir /$binary_name "
7683 fi
7784
7885 log " Installed ${BINARY} ${version} to ${install_dir} /${binary_name} "
7986}
8087
88+ # Pick the best install directory by checking user-writable directories
89+ # already on PATH, falling back to /usr/local/bin (always on PATH).
90+ detect_install_dir () {
91+ for candidate in \
92+ " $HOME /.local/bin" \
93+ " $HOME /bin" \
94+ " $HOME /go/bin" \
95+ " $HOME /.cargo/bin" ; do
96+ case " :$PATH :" in
97+ * " :${candidate} :" * )
98+ if [ -d " $candidate " ] && [ -w " $candidate " ]; then
99+ echo " $candidate "
100+ return
101+ fi
102+ ;;
103+ esac
104+ done
105+ echo " /usr/local/bin"
106+ }
107+
81108detect_os () {
82109 os=$( uname -s | tr ' [:upper:]' ' [:lower:]' )
83110 case " $os " in
0 commit comments