#!/usr/bin/env bash APP=bat VERSION=${VERSION:-v0.17.1} DATA_DIR="${XDG_DATA_HOME}/apps/releases" DEST_DIR="${DATA_DIR}/${APP}/${VERSION}" OS= ARCH= case $(uname -s) in Linux*) OS=unknown-linux-gnu;; Darwin*) OS=apple-darwin;; CYGWIN_NT*|Windows_NT*) OS=pc-windows-msvc;; *) >&2 echo "unsupported os"; return; esac case $(uname -m) in amd64*|x86_64*) ARCH=x86_64;; i686*|i386*) ARCH=i686;; arm|armv7*|armv6*) ARCH=arm;; aarch64*|armv8*) ARCH=arm64;; *) >&2 echo "unsupported architecture: $(uname -m)"; exit 1;; esac function bail () { echo "unexpected error $1" exit 1 } function do_link () { local dir="$1" local link="$2" if [[ ! -d "${dir}" ]] ; then return fi if [[ -L "${dir}/$(basename "${link}")" ]] ; then return fi cd "${dir}" || bail "failed to change directory: ${dir}" ln --symbolic "${link}" "$(basename "${link}")" } URL="https://github.com/sharkdp/bat/releases/download/${VERSION}/bat-${VERSION}-${ARCH}-${OS}.tar.gz" TMP_DIR= if [[ ! -d "${DEST_DIR}" ]] ; then set -x TMP_DIR=$(mktemp --directory) TAR_GZ="${TMP_DIR}/release.tar.gz" echo "start download: ${URL}" curl --location --silent --output "${TAR_GZ}" "${URL}" echo "stop download: ${URL}" mkdir -p "${DEST_DIR}" tar xzf "${TAR_GZ}" --strip-components 1 --directory "${DEST_DIR}" rm -rf "${TMP_DIR}" fi unset TMP_DIR cd "${DATA_DIR}/${APP}" || bail "directory change failed: ${DATA_DIR}/${APP}" [[ -s current ]] && unlink current ln -s "${VERSION}" current # TODO: get the completion working #ZSH_CONFIG_D="${XDG_CONFIG_HOME}/zsh/zshrc.d" #FISH_CONFIG_D="${XDG_CONFIG_HOME}/fish/functions" MAN_DIR="${XDG_DATA_HOME}/man/man1" [[ -d ${MAN_DIR} ]] || mkdir -p "${MAN_DIR}" do_link "${XDG_BIN_HOME}" "${DATA_DIR}/${APP}/current/bat" #do_link "${ZSH_CONFIG_D}" "${DATA_DIR}/${APP}/current/autocomplete/bat.zsh" #do_link "${FISH_CONFIG_D}" "${DATA_DIR}/${APP}/current/autocomplete/bat.fish" do_link "${MAN_DIR}" "${DATA_DIR}/${APP}/current/bat.1"