mirror of
https://github.com/Llewellynvdm/zoxide.git
synced 2024-12-27 11:32:44 +00:00
Merge pull request #2 from crazystylus/master
One liner zoxide install script
This commit is contained in:
commit
831da99e87
143
install.sh
Normal file
143
install.sh
Normal file
@ -0,0 +1,143 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -u
|
||||
|
||||
usage() {
|
||||
cat 1>&2 <<EOF
|
||||
The installer for zoxide
|
||||
|
||||
USAGE
|
||||
zoxide-install
|
||||
EOF
|
||||
}
|
||||
|
||||
main() {
|
||||
need_cmd uname
|
||||
need_cmd curl
|
||||
need_cmd grep
|
||||
need_cmd cut
|
||||
need_cmd xargs
|
||||
need_cmd chmod
|
||||
install
|
||||
}
|
||||
|
||||
install() {
|
||||
local _ostype _cputype _clibtype _target _cargobuild _install_path
|
||||
_ostype="$(uname -s)"
|
||||
_cputype="$(uname -m)"
|
||||
_cargobuild="no"
|
||||
_install_path="/usr/local/bin"
|
||||
|
||||
case $_cputype in
|
||||
x86_64 | x86-64 | amd64)
|
||||
_cputype="x86_64"
|
||||
_clibtype="musl"
|
||||
;;
|
||||
*)
|
||||
warning "No binaries are available for your CPU architecture ($_cputype)"
|
||||
_clibtype="gnu"
|
||||
_cargobuild="yes"
|
||||
;;
|
||||
esac
|
||||
|
||||
case $_ostype in
|
||||
Linux)
|
||||
_ostype=unknown-linux-$_clibtype
|
||||
;;
|
||||
Darwin)
|
||||
_ostype=apple-darwin
|
||||
;;
|
||||
*)
|
||||
warning "No binaries are available for your operating system ($_ostype)"
|
||||
_cargobuild="yes"
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ $_cargobuild = "yes" ]; then
|
||||
cargo_build
|
||||
exit 0
|
||||
fi
|
||||
|
||||
_target="$_cputype-$_ostype"
|
||||
warning "Detected target: $_target"
|
||||
|
||||
success "Downloading zoxide..."
|
||||
|
||||
## Downloading the binaries
|
||||
ensure rm -rf "zoxide-$_target"
|
||||
curl -s https://api.github.com/repos/ajeetdsouza/zoxide/releases/latest | grep "browser_download_url" | cut -d '"' -f 4 | grep "$_target" | xargs -n 1 curl -LJO
|
||||
|
||||
ensure mv "zoxide-$_target" "zoxide_bin"
|
||||
|
||||
ensure sudo mv zoxide_bin "$_install_path/zoxide"
|
||||
ensure chmod +x "$_install_path/zoxide"
|
||||
|
||||
success "zoxide is installed!"
|
||||
info "Please ensure that $_install_path is added to your \$PATH."
|
||||
}
|
||||
|
||||
success() {
|
||||
printf "\033[32m%s\033[0m\n" "$1" >&1
|
||||
}
|
||||
|
||||
info() {
|
||||
printf "%s\n" "$1" >&1
|
||||
}
|
||||
|
||||
warning() {
|
||||
printf "\033[33m%s\033[0m\n" "$1" >&2
|
||||
}
|
||||
|
||||
error() {
|
||||
printf "\033[31;1m%s\033[0m\n" "$1" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
cmd_chk() {
|
||||
command -v "$1" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
## Ensures that the command executes without error
|
||||
ensure() {
|
||||
if ! "$@"; then error "command failed: $*"; fi
|
||||
}
|
||||
|
||||
need_cmd() {
|
||||
if ! cmd_chk "$1"; then
|
||||
error "need $1 (command not found)"
|
||||
fi
|
||||
}
|
||||
|
||||
prompt_confirm() {
|
||||
if [ ! -t 1 ]; then
|
||||
error "Unable to run interactively. Please execute this script using interactive shell"
|
||||
fi
|
||||
|
||||
while true; do
|
||||
read -rp "Is this okay? (y/N): " _choice
|
||||
_choice=$(echo "$_choice" | tr '[:upper:]' '[:lower:]')
|
||||
|
||||
case "$_choice" in
|
||||
y | yes) break ;;
|
||||
n | no) error "Operation aborted" ;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
cargo_build() {
|
||||
success "Compiling from source..."
|
||||
|
||||
if ! cmd_chk "cargo"; then
|
||||
success "Cargo will be installed."
|
||||
prompt_confirm
|
||||
|
||||
ensure curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
|
||||
|
||||
# shellcheck source=/dev/null
|
||||
source "$HOME/.cargo/env"
|
||||
fi
|
||||
|
||||
RUSTFLAGS="-C target-cpu=native" ensure cargo install zoxide
|
||||
}
|
||||
|
||||
main "$@" || exit 1
|
Loading…
Reference in New Issue
Block a user