123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- #!/usr/bin/env bash
- # Requirements to install fonts
- REQUIREMENTS="awk curl fc-cache mkdir mktemp unlink unzip"
- readonly REQUIREMENTS
- # Fonts local directory
- LOCAL_FONTS_DIR="${HOME}/.local/share/fonts"
- readonly LOCAL_FONTS_DIR
- # Latest fonts release info in JSON
- LATEST_RELEASE_INFO="https://api.github.com/repos/JetBrains/JetBrainsMono/releases/latest"
- readonly LATEST_RELEASE_INFO
- RED=$(echo -en '\033[00;31m')
- readonly RED
- RESTORE=$(echo -en '\033[0m')
- readonly RESTORE
- # Print error message to STDERR and exit
- function die() {
- echo >&2 "${RED}$*${RESTORE}"
- exit 1
- }
- # Check requirements
- function check_requirements() {
- echo "Checking requirements..."
- for tool in ${REQUIREMENTS}; do
- echo -n "${tool}... "
- if command -v "${tool}" >/dev/null 2>&1; then
- echo "Found"
- else
- die "Not found. Please install \"${tool}\" to fix it."
- fi
- done
- }
- # Download URL
- function download() {
- url="${1}"
- save_as="${2}"
- curl -sL "${1}" -o "${save_as}" || die "Unable to download: ${url}"
- }
- # Generate temporary filename
- function get_tempfile() {
- mktemp
- }
- # Get item from latest release data
- function get_item() {
- item="${1}"
- read_from="${2}"
- awk -F '"' "/${item}/ {print \$4}" "${read_from}"
- }
- # Extract fonts archive
- function extract() {
- archive="${1}"
- extract_to="${2}"
- unzip -o "${archive}" -d "${extract_to}" >/dev/null 2>&1
- }
- # Create fonts directory
- function create_fonts_dir() {
- if [ ! -d "${LOCAL_FONTS_DIR}" ]; then
- echo "Creating fonts directory: ${LOCAL_FONTS_DIR}"
- mkdir -p "${LOCAL_FONTS_DIR}" >/dev/null 2>&1 || die "Unable to create fonts directory: ${LOCAL_FONTS_DIR}"
- fi
- }
- # Build fonts cache
- function build_fonts_cache() {
- fc-cache -f || die "Unable to build fonts cache"
- }
- # Remove temporary file
- function cleanup() {
- unlink "${*}" || die "Unable to unlink: ${*}"
- }
- # Start point
- function main() {
- echo "Installing latest JetBrains Mono fonts..."
- check_requirements
- TEMP_LATEST_INFO=$(get_tempfile)
- echo "Downloading latest release info: ${LATEST_RELEASE_INFO}"
- download "${LATEST_RELEASE_INFO}" "${TEMP_LATEST_INFO}"
- TAG_NAME=$(get_item "tag_name" "${TEMP_LATEST_INFO}")
- echo "Latest fonts version: ${TAG_NAME}"
- BROWSER_URL=$(get_item "browser_download_url" "${TEMP_LATEST_INFO}")
- TEMP_FONTS_ARCHIVE=$(get_tempfile)
- echo "Downloading fonts archive: ${BROWSER_URL}"
- download "${BROWSER_URL}" "${TEMP_FONTS_ARCHIVE}"
- create_fonts_dir
- echo "Extracting fonts: ${LOCAL_FONTS_DIR}"
- extract "${TEMP_FONTS_ARCHIVE}" "${LOCAL_FONTS_DIR}"
- echo "Building fonts cache..."
- build_fonts_cache
- echo "Cleaning up..."
- cleanup "${TEMP_LATEST_INFO}"
- cleanup "${TEMP_FONTS_ARCHIVE}"
- echo "Fonts have been installed"
- }
- main
|