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"/>
-
-
+
@@ -39,27 +39,27 @@
-
+
-
+
-
+
-
+
-
+
-
+
@@ -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)\"
+
+"