Add direnv installer script
This commit is contained in:
parent
7c8d960033
commit
bd4763cdda
109
packages/direnv.sh
Normal file
109
packages/direnv.sh
Normal file
|
@ -0,0 +1,109 @@
|
|||
#!/usr/bin/env bash
|
||||
#
|
||||
# A good old bash | curl script for direnv.
|
||||
#
|
||||
set -euo pipefail
|
||||
|
||||
{ # Prevent execution if this script was only partially downloaded
|
||||
|
||||
log() {
|
||||
echo "[installer] $*" >&2
|
||||
}
|
||||
|
||||
die() {
|
||||
log "$@"
|
||||
exit 1
|
||||
}
|
||||
|
||||
at_exit() {
|
||||
ret=$?
|
||||
if [[ $ret -gt 0 ]]; then
|
||||
log "the script failed with error $ret.\n" \
|
||||
"\n" \
|
||||
"To report installation errors, submit an issue to\n" \
|
||||
" https://github.com/direnv/direnv/issues/new/choose"
|
||||
fi
|
||||
exit "$ret"
|
||||
}
|
||||
trap at_exit EXIT
|
||||
|
||||
kernel=$(uname -s | tr "[:upper:]" "[:lower:]")
|
||||
case "${kernel}" in
|
||||
mingw*)
|
||||
kernel=windows
|
||||
;;
|
||||
esac
|
||||
case "$(uname -m)" in
|
||||
x86_64)
|
||||
machine=amd64
|
||||
;;
|
||||
i686 | i386)
|
||||
machine=386
|
||||
;;
|
||||
aarch64 | arm64)
|
||||
machine=arm64
|
||||
;;
|
||||
*)
|
||||
die "Machine $(uname -m) not supported by the installer.\n" \
|
||||
"Go to https://direnv for alternate installation methods."
|
||||
;;
|
||||
esac
|
||||
log "kernel=$kernel machine=$machine"
|
||||
|
||||
: "${use_sudo:=}"
|
||||
: "${bin_path:=}"
|
||||
|
||||
if [[ -z "$bin_path" ]]; then
|
||||
log "bin_path is not set, you can set bin_path to specify the installation path"
|
||||
log "e.g. export bin_path=/path/to/installation before installing"
|
||||
log "looking for a writeable path from PATH environment variable"
|
||||
for path in $(echo "$PATH" | tr ':' '\n'); do
|
||||
if [[ -w $path ]]; then
|
||||
bin_path=$path
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
if [[ -z "$bin_path" ]]; then
|
||||
die "did not find a writeable path in $PATH"
|
||||
fi
|
||||
echo "bin_path=$bin_path"
|
||||
|
||||
if [[ -n "${version:-}" ]]; then
|
||||
release="tags/${version}"
|
||||
else
|
||||
release="latest"
|
||||
fi
|
||||
echo "release=$release"
|
||||
|
||||
log "looking for a download URL"
|
||||
download_url=$(
|
||||
curl -fL "https://api.github.com/repos/direnv/direnv/releases/$release" \
|
||||
| grep browser_download_url \
|
||||
| cut -d '"' -f 4 \
|
||||
| grep "direnv.$kernel.$machine"
|
||||
)
|
||||
echo "download_url=$download_url"
|
||||
|
||||
log "downloading"
|
||||
curl -o "$bin_path/direnv" -fL "$download_url"
|
||||
chmod a+x "$bin_path/direnv"
|
||||
|
||||
cat <<DONE
|
||||
|
||||
The direnv binary is now available in:
|
||||
|
||||
$bin_path/direnv
|
||||
|
||||
The last step is to configure your shell to use it. For example for bash, add
|
||||
the following lines at the end of your ~/.bashrc:
|
||||
|
||||
eval "\$(direnv hook bash)"
|
||||
|
||||
Then restart the shell.
|
||||
|
||||
For other shells, see https://direnv.net/docs/hook.html
|
||||
|
||||
Thanks!
|
||||
DONE
|
||||
}
|
Loading…
Reference in a new issue