| 
          #!/bin/sh | 
        
        
           | 
          # shellcheck disable=SC2015,SC3043 | 
        
        
           | 
          # adapted from https://gist.github.com/matthewjberger/7dd7e079f282f8138a9dc3b045ebefa0 | 
        
        
           | 
          TEMP_D="" | 
        
        
           | 
          FONTS_D="${FONTS_D:-${HOME}/.local/share/fonts}" | 
        
        
           | 
          #FONTS_D="/usr/share/fonts" | 
        
        
           | 
          
 | 
        
        
           | 
          myfonts() { | 
        
        
           | 
          #  BitstreamVeraSansMono | 
        
        
           | 
          #  CascadiaCode | 
        
        
           | 
          #  CodeNewRoman | 
        
        
           | 
          #  DroidSansMono | 
        
        
           | 
          #  FiraCode | 
        
        
           | 
          #  FiraMono | 
        
        
           | 
          #  Go-Mono | 
        
        
           | 
          #  Hack | 
        
        
           | 
          #  Hermit | 
        
        
           | 
          #  JetBrainsMono | 
        
        
           | 
          #  Meslo | 
        
        
           | 
          #  Noto | 
        
        
           | 
          #  Overpass | 
        
        
           | 
          #  ProggyClean | 
        
        
           | 
          #  RobotoMono | 
        
        
           | 
          #  SourceCodePro | 
        
        
           | 
          #  SpaceMono | 
        
        
           | 
          #  Ubuntu | 
        
        
           | 
          #  UbuntuMono | 
        
        
           | 
          
 | 
        
        
           | 
          cat <<EOF | 
        
        
           | 
          CascadiaMono  | 
        
        
           | 
          FiraCode | 
        
        
           | 
          Hack | 
        
        
           | 
          JetBrainsMono | 
        
        
           | 
          UbuntuMono | 
        
        
           | 
          EOF | 
        
        
           | 
          } | 
        
        
           | 
          
 | 
        
        
           | 
          
 | 
        
        
           | 
          fail() { stderr "FATAL:" "$@"; exit 1; } | 
        
        
           | 
          stderr() { echo "$@" 1>&2; } | 
        
        
           | 
          
 | 
        
        
           | 
          Usage() { | 
        
        
           | 
              # shellcheck disable=SC2046 | 
        
        
           | 
              cat <<EOF | 
        
        
           | 
          ${0##*/} subcmd [options] | 
        
        
           | 
          
 | 
        
        
           | 
              dl font[@version] [output] | 
        
        
           | 
          
 | 
        
        
           | 
                 download the font to output.  | 
        
        
           | 
                 output defaults to <font>.zip | 
        
        
           | 
                 version defaults to 'latest' | 
        
        
           | 
          
 | 
        
        
           | 
              install font[@version] | 
        
        
           | 
          
 | 
        
        
           | 
                 download font and install it to ${FONTS_D} | 
        
        
           | 
                 if font is a local file named *.zip, then just install it. | 
        
        
           | 
              | 
        
        
           | 
              install-all | 
        
        
           | 
          
 | 
        
        
           | 
                 call install on all fonts listed in 'myfonts' function: | 
        
        
           | 
          
 | 
        
        
           | 
          $(printf "         %s\n" $(myfonts)) | 
        
        
           | 
          
 | 
        
        
           | 
          EOF | 
        
        
           | 
          } | 
        
        
           | 
          
 | 
        
        
           | 
          
 | 
        
        
           | 
          dlfont() { | 
        
        
           | 
              local font="$1" out="$2" version="latest" zip="" tmpf="" url="" | 
        
        
           | 
              case "$font" in | 
        
        
           | 
                  *@*) font="${1%@*}"; version="${1#*@}";; | 
        
        
           | 
              esac | 
        
        
           | 
              if [ "$version" = "latest" ]; then | 
        
        
           | 
                  url="https://github.com/ryanoasis/nerd-fonts/releases/$version/download/$font.zip" | 
        
        
           | 
              else | 
        
        
           | 
                  url="https://github.com/ryanoasis/nerd-fonts/releases/download/v${version#v}/$font.zip" | 
        
        
           | 
              fi | 
        
        
           | 
              zip="$font.zip" | 
        
        
           | 
              [ -z "$out" ] && out="$zip" | 
        
        
           | 
              tmpf="$out.tmp.$$" | 
        
        
           | 
              wget -O "$tmpf" "$url" && | 
        
        
           | 
                  mv "$tmpf" "$out" || { | 
        
        
           | 
                      rm -f "$tmpf" | 
        
        
           | 
                      stderr "failed to download $font@$version" | 
        
        
           | 
                      return 1 | 
        
        
           | 
                  } | 
        
        
           | 
              return 0 | 
        
        
           | 
          } | 
        
        
           | 
          
 | 
        
        
           | 
          cleanup() { | 
        
        
           | 
              [ -n "$TEMP_D" ] || return 0 | 
        
        
           | 
              rm -Rf "$TEMP_D" | 
        
        
           | 
          } | 
        
        
           | 
          
 | 
        
        
           | 
          install() { | 
        
        
           | 
              local font="" zip="" | 
        
        
           | 
              mkdir -p "$FONTS_D" || | 
        
        
           | 
                  { stderr "could not create font dir $FONTS_D"; return 1; } | 
        
        
           | 
          
 | 
        
        
           | 
              TEMP_D=$(mktemp -d "${TMPDIR:-/tmp}/${0##*/}.XXXXXX") || return 1 | 
        
        
           | 
              trap cleanup EXIT | 
        
        
           | 
          
 | 
        
        
           | 
              [ $# -ne 0 ] || { stderr "install got zero things to install"; return 1; } | 
        
        
           | 
              for font in "$@"; do | 
        
        
           | 
                  case "$font" in | 
        
        
           | 
                      *.zip)  | 
        
        
           | 
                          if [ ! -f "$font" ]; then | 
        
        
           | 
                              stderr "font '$font' is not a local file" | 
        
        
           | 
                              return 1 | 
        
        
           | 
                          fi | 
        
        
           | 
                          zip="$font" | 
        
        
           | 
                          ;; | 
        
        
           | 
                      *) dlfont "$font" "${TEMP_D}/${font##*/}.zip" || | 
        
        
           | 
                          { stderr "failed downloading $font"; return 1; } | 
        
        
           | 
                         zip="${TEMP_D}/${font##*/}.zip" | 
        
        
           | 
                         ;; | 
        
        
           | 
                  esac | 
        
        
           | 
                  unzip -o "$zip" -d "$FONTS_D" || | 
        
        
           | 
                      { stderr "unzip installation of $zip failed [$?] to $FONTS_D"; return 1; } | 
        
        
           | 
              done | 
        
        
           | 
          
 | 
        
        
           | 
              find "$FONTS_D" -name 'Windows Compatible' -delete || | 
        
        
           | 
                  { stderr "failed removing windows compatible files"; return 1; } | 
        
        
           | 
          
 | 
        
        
           | 
              fc-cache -fv || | 
        
        
           | 
                  { stderr "fc-cache -fv failed"; return 1; } | 
        
        
           | 
              return 0 | 
        
        
           | 
          } | 
        
        
           | 
          
 | 
        
        
           | 
          main() { | 
        
        
           | 
              local name="$1" | 
        
        
           | 
              [ $# -eq 0 ] && { Usage 1>&2; exit 1; } | 
        
        
           | 
              shift | 
        
        
           | 
              case "$name" in | 
        
        
           | 
                  -h|--help) Usage; exit 0;; | 
        
        
           | 
                  install-all|install) | 
        
        
           | 
                      if [ "$name" = "install" ]; then | 
        
        
           | 
                          [ $# -ge 1 ] || fail "install expects a font. got none" | 
        
        
           | 
                      elif [ $# -ne 0 ]; then | 
        
        
           | 
                          fail "install-all got a font. expects none" | 
        
        
           | 
                      else | 
        
        
           | 
                          # shellcheck disable=SC2046 | 
        
        
           | 
                          set -- $(myfonts) | 
        
        
           | 
                      fi | 
        
        
           | 
                      install "$@" || fail "$name failed" | 
        
        
           | 
                      ;; | 
        
        
           | 
                  dl) | 
        
        
           | 
                      if [ $# -ne 1 ] && [ $# -ne 2 ]; then | 
        
        
           | 
                          fail "dl got $# args, expect 1 or 2" | 
        
        
           | 
                      fi | 
        
        
           | 
                      dlfont "$@" || fail "download of $1 ${2:+to $2 }failed" | 
        
        
           | 
                      ;; | 
        
        
           | 
                  *) Usage 1>&2; exit 1;;  | 
        
        
           | 
              esac | 
        
        
           | 
          } | 
        
        
           | 
          
 | 
        
        
           | 
          main "$@" |