From 5b440c0bb01b35eff1ebd92af1a2c013668fed04 Mon Sep 17 00:00:00 2001 From: Matan Kushner Date: Thu, 5 Dec 2019 13:15:21 -0500 Subject: [PATCH] docs: Simplify installation process and docs (#643) --- README.md | 85 ++++------ docs/.vuepress/public/install.sh | 1 + install/install.sh | 264 +++++++++++++++++++++++++++++++ 3 files changed, 300 insertions(+), 50 deletions(-) create mode 120000 docs/.vuepress/public/install.sh create mode 100755 install/install.sh diff --git a/README.md b/README.md index 234073c4..44846c52 100644 --- a/README.md +++ b/README.md @@ -19,12 +19,12 @@ src="https://repology.org/badge/tiny-repos/starship.svg" alt="Packaging status"/>
- All Contributors - Chat on Discord + All Contributors

@@ -39,27 +39,27 @@ English -  +   日本語 -  +   繁體中文 -  +   简体中文 -  +   Deutsch -  +   Français -  +   Русский @@ -82,21 +82,18 @@ The prompt shows information you need while you're working, while staying sleek ## 🍬 Features - Prompt character turns red if the last command exits with non-zero code -- Current username if not the same as the logged-in user +- Current Go version (`🐹`) - Current Java version(`☕`) - Current Node.js version(`⬢`) -- Current Rust version (`🦀`) -- Current Ruby version (`💎`) -- Current Python version (`🐍`) - Current PHP version (`🐘`) -- Current Go version (`🐹`) -- Nix-shell environment detection -- Print an environment variable +- Current Python version (`🐍`) +- Current Ruby version (`💎`) +- Current Rust version (`🦀`) +- Current .NET version (`•NET`) - Current version of package in current directory (`📦`) - npm (Node.js) - cargo (Rust) - poetry (Python) -- Current battery level and status - Current Git branch and rich repo status: - `=` — conflicting changes - `⇡` — ahead of remote branch @@ -108,10 +105,19 @@ The prompt shows information you need while you're working, while staying sleek - `+` — added files - `»` — renamed files - `✘` — deleted files -- Execution time of the last command if it exceeds the set threshold +- Current Mercurial branch +- Current battery level and status +- `⇡` – charging +- `⇣` – discharging +- `•` – fully charged - Indicator for jobs in the background (`✦`) - Current Kubernetes Cluster and Namespace (`☸`) -- Current AWS profile (`☁️`) +- Current Amazon Web Services (AWS) profile (`☁️`) +- Execution time of the last command +- Custom environment variable value +- Nix-shell environment detection +- Current username if not the same as the logged-in user +- Optional current time in 12/24hr format ## 🚀 Installation @@ -123,48 +129,26 @@ The prompt shows information you need while you're working, while staying sleek 1. Install the **starship** binary: - **[Download archives of precompiled binaries](https://github.com/starship/starship/releases)** if you don't use the platforms below. + #### Install Latest Version - #### Homebrew + ##### With Shell: ```sh - $ brew install starship + curl -fsSL https://starship.rs/install.sh | sh ``` - #### Rust (v1.38 or higher) + #### Install via Package Manager + + ##### With [Homebrew](https://brew.sh/): ```sh - $ cargo install starship + brew install starship ``` - #### Arch Linux (AUR) + ##### With [Scoop](https://scoop.sh): - Starship is available on the AUR under the name `starship`. Install it with `yay` or your favorite AUR helper. - - ```sh - $ yay -S starship - ``` - - #### Nix (unstable) - - ```sh - $ nix-env --install starship - ``` - - #### Termux - - ```sh - $ pkg install starship - ``` - - #### Other x86-64 Linux Platforms - - Download a prebuilt binary and place in /usr/local/bin/ - - ```sh - $ wget -q --show-progress https://github.com/starship/starship/releases/latest/download/starship-x86_64-unknown-linux-gnu.tar.gz - $ tar xvf starship-x86_64-unknown-linux-gnu.tar.gz - $ sudo mv starship /usr/local/bin/ + ```powershell + scoop install starship ``` 1. Add the init script to your shell's config file: @@ -308,6 +292,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d + This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! diff --git a/docs/.vuepress/public/install.sh b/docs/.vuepress/public/install.sh new file mode 120000 index 00000000..ecbb1201 --- /dev/null +++ b/docs/.vuepress/public/install.sh @@ -0,0 +1 @@ +../../../install/install.sh \ No newline at end of file diff --git a/install/install.sh b/install/install.sh new file mode 100755 index 00000000..b03fcd15 --- /dev/null +++ b/install/install.sh @@ -0,0 +1,264 @@ +#!/bin/bash + +# Options +# +# -V, --verbose +# Enable verbose output for the installer +# +# -f, -y, --force, --yes +# Skip the confirmation prompt during installation +# +# -p, --platform +# Override the platform identified by the installer +# +# -b, --bin-dir +# Override the bin installation directory +# +# -a, --arch +# Override the architecture identified by the installer +# +# -B, --base-url +# Override the base URL used for downloading releases + +set -euo pipefail +printf "\n" + +BOLD="$(tput bold 2>/dev/null || echo '')" +GREY="$(tput setaf 0 2>/dev/null || echo '')" +UNDERLINE="$(tput smul 2>/dev/null || echo '')" +RED="$(tput setaf 1 2>/dev/null || echo '')" +GREEN="$(tput setaf 2 2>/dev/null || echo '')" +YELLOW="$(tput setaf 3 2>/dev/null || echo '')" +BLUE="$(tput setaf 4 2>/dev/null || echo '')" +MAGENTA="$(tput setaf 5 2>/dev/null || echo '')" +CYAN="$(tput setaf 6 2>/dev/null || echo '')" +NO_COLOR="$(tput sgr0 2>/dev/null || echo '')" + +info() { + printf "${BOLD}${GREY}>${NO_COLOR} $@\n" +} + +warn() { + printf "${YELLOW}! $@${NO_COLOR}\n" +} + +error() { + printf "${RED}x $@${NO_COLOR}\n" >&2 +} + +complete() { + printf "${GREEN}✓${NO_COLOR} $@\n" +} + +fetch() { + local command + if hash curl 2>/dev/null; then + set +e + command="curl --silent --fail --location $1" + curl --silent --fail --location "$1" + rc=$? + set -e + else + if hash wget 2>/dev/null; then + set +e + command="wget -O- -q $1" + wget -O- -q "$1" + rc=$? + set -e + else + error "No HTTP download program (curl, wget) found…" + exit 1 + fi + fi + + if [ $rc -ne 0 ]; then + printf "\n" >&2 + error "Command failed (exit code $rc): ${BLUE}${command}${NO_COLOR}" + printf "\n" >&2 + info "This is likely due to Starship not yet supporting your configuration." >&2 + info "If you would like to see a build for your configuration," >&2 + info "please create an issue requesting a build for ${MAGENTA}${ARCH}-${PLATFORM}${NO_COLOR}:" >&2 + info "${BOLD}${UNDERLINE}https://github.com/starship/starship/issues/new/${NO_COLOR}\n" >&2 + exit $rc + fi +} + +# Currently supporting: +# - win (Git Bash) +# - darwin +# - linux +# - linux_musl (Alpine) +detect_platform() { + local platform="$(uname -s | tr '[:upper:]' '[:lower:]')" + + # check for MUSL + if [ "${platform}" = "linux" ]; then + if ldd /bin/sh | grep -i musl >/dev/null; then + platform=unknown-linux-musl + fi + fi + + # mingw is Git-Bash + if echo "${platform}" | grep -i mingw >/dev/null; then + platform=pc-windows-msvc + fi + + if [ "${platform}" = "linux" ]; then + platform=unknown-linux-gnu + fi + + if [ "${platform}" = "darwin" ]; then + platform=apple-darwin + fi + + echo "${platform}" +} + +# Currently supporting: +# - x86_64 +# - i386 +detect_arch() { + local arch="$(uname -m | tr '[:upper:]' '[:lower:]')" + + # `uname -m` in some cases mis-reports 32-bit OS as 64-bit, so double check + if [ "${arch}" = "x64" ] && [ "$(getconf LONG_BIT)" -eq 32 ]; then + arch=i386 + fi + + echo "${arch}" +} + +confirm() { + if [ -z "${FORCE-}" ]; then + printf "${MAGENTA}?${NO_COLOR} $@ ${BOLD}[y/N]${NO_COLOR} " + set +e + read yn < /dev/tty + rc=$? + set -e + if [ $rc -ne 0 ]; then + error "Error reading from prompt (please re-run with the \`--yes\` option)" + exit 1 + fi + if [ "$yn" != "y" ] && [ "$yn" != "yes" ]; then + error "Aborting (please answer \"yes\" to continue)" + exit 1 + fi + fi +} + +check_bin_dir() { + local bin_dir="$1" + + # https://stackoverflow.com/a/11655875 + local good=$( IFS=: + for path in $PATH; do + if [ "${path}" = "${bin_dir}" ]; then + echo 1 + break + fi + done + ) + + if [ "${good}" != "1" ]; then + warn "Bin directory ${bin_dir} is not in your \$PATH" + fi +} + +# defaults +if [ -z "${PLATFORM-}" ]; then + PLATFORM="$(detect_platform)" +fi + +if [ -z "${BIN_DIR-}" ]; then + BIN_DIR=/usr/local/bin +fi + +if [ -z "${ARCH-}" ]; then + ARCH="$(detect_arch)" +fi + +if [ -z "${BASE_URL-}" ]; then + BASE_URL="https://github.com/starship/starship/releases" +fi + +# parse argv variables +while [ "$#" -gt 0 ]; do + case "$1" in + -p|--platform) PLATFORM="$2"; shift 2;; + -b|--bin-dir) BIN_DIR="$2"; shift 2;; + -a|--arch) ARCH="$2"; shift 2;; + -B|--base-url) BASE_URL="$2"; shift 2;; + + -V|--verbose) VERBOSE=1; shift 1;; + -f|-y|--force|--yes) FORCE=1; shift 1;; + + -p=*|--platform=*) PLATFORM="${1#*=}"; shift 1;; + -b=*|--bin-dir=*) BIN_DIR="${1#*=}"; shift 1;; + -a=*|--arch=*) ARCH="${1#*=}"; shift 1;; + -B=*|--base-url=*) BASE_URL="${1#*=}"; shift 1;; + -V=*|--verbose=*) VERBOSE="${1#*=}"; shift 1;; + -f=*|-y=*|--force=*|--yes=*) FORCE="${1#*=}"; shift 1;; + + *) error "Unknown option: $1"; exit 1;; + esac +done + +if [ "${ARCH}" = "i386" ]; then + error "i386 builds are not yet available for Starship\n" + info "If you would like to see a build for your configuration," + info "please create an issue requesting a build for ${MAGENTA}${ARCH}-${PLATFORM}${NO_COLOR}:" + info "${BOLD}${UNDERLINE}https://github.com/starship/starship/issues/new/${NO_COLOR}\n" + exit 1 +fi + +printf " ${UNDERLINE}Configuration${NO_COLOR}\n" +info "${BOLD}Bin directory${NO_COLOR}: ${GREEN}${BIN_DIR}${NO_COLOR}" +info "${BOLD}Platform${NO_COLOR}: ${GREEN}${PLATFORM}${NO_COLOR}" +info "${BOLD}Arch${NO_COLOR}: ${GREEN}${ARCH}${NO_COLOR}" + +# non-empty VERBOSE enables verbose untarring +if [ ! -z "${VERBOSE-}" ]; then + VERBOSE=v + info "${BOLD}Verbose${NO_COLOR}: yes" +else + VERBOSE= +fi + +echo + +EXT=tar.gz +if [ "${PLATFORM}" = win ]; then + EXT=zip +fi + +URL="${BASE_URL}/latest/download/starship-${ARCH}-${PLATFORM}.${EXT}" +info "Tarball URL: ${UNDERLINE}${BLUE}${URL}${NO_COLOR}" +check_bin_dir "${BIN_DIR}" +confirm "Install Starship ${GREEN}latest${NO_COLOR} to ${BOLD}${GREEN}${BIN_DIR}${NO_COLOR}?" + +info "Installing Starship, please wait…" + +fetch "${URL}" \ + | tar xzf${VERBOSE} - \ + -C "${BIN_DIR}" + +complete "Starship installed" +echo +info "Please follow the steps for your shell to complete the installation: + + ${BOLD}${UNDERLINE}Bash${NO_COLOR} + Add the following to the end of ${BOLD}~/.bashrc${NO_COLOR}: + + eval \"\$(starship init bash)\" + + ${BOLD}${UNDERLINE}Fish${NO_COLOR} + Add the following to the end of ${BOLD}~/.config/fish/config.fish${NO_COLOR}: + + starship init fish | source + + ${BOLD}${UNDERLINE}Zsh${NO_COLOR} + Add the following to the end of ${BOLD}~/.zshrc${NO_COLOR}: + + eval \"\$(starship init zsh)\" + +"