config/.local/bin/getnf

104 lines
3.6 KiB
Bash
Executable File

#!/bin/bash
#defining variables
nerdfontsrepo='https://api.github.com/repos/ryanoasis/nerd-fonts'
aFontInstalled="False"
keepArchives="False"
distDir="$HOME/.local/share/fonts"
downDir="$HOME/Downloads/NerdFonts"
os=$(uname)
# help message
usage() {
echo "getNF: A Better way to install NerdFonts"
echo ""
echo "Usage:"
echo "-h print this help message and exit"
echo "-k Keep the downloaded archives"
echo ""
}
# setting flags
while getopts :hk option; do
case "${option}" in
h) usage && exit 0 ;;
k) keepArchives="True" ;;
*) usage && exit 0
esac
done
# For Macs, need to set a few different things
if [[ "$os" == 'Darwin' ]]; then
distDir="$HOME/Library/Fonts"
fi
# Check if the distDir and downDir exists, if it doesn't, create it
[ -d "$distDir" ] || mkdir -p "$distDir" && echo "Fonts Directory exists, good"
[ -d "$downDir" ] || mkdir -p "$downDir" && echo "Download Fonts Directory exists, good"
# get font names
nerdFonts=$(curl --silent "$nerdfontsrepo/contents/patched-fonts?ref=master" | \
grep "name" | \
awk -F":" '{print $2}' | \
sed 's/["",]//g;/install\.ps1/d')
#get the latest release number from NerdFonts github repo
release=$(curl --silent "$nerdfontsrepo/releases/latest" | \
grep -Po '"tag_name": "\K.*?(?=")')
# use fzf to select the fonts to be installed
listFonts=$(printf '%s\n' "${nerdFonts[@]}" | fzf -m)
#loop over the selected fonts in listFonts, download and install them
for i in $listFonts; do
checkFont=$(fc-list | grep -i "$i")
if [ -z "$checkFont" ]; then #If the font already is installed, skip it
echo "$i font download started" &&
pushd "$downDir" > /dev/null &&
#download the font
curl -LJO -\# "https://github.com/ryanoasis/nerd-fonts/releases/download/$release/$i.zip" \
-o "$i.zip" --create-dirs &&
echo "$i font download finished" &&
echo "$i font unziping started" &&
#Unzipe the downloaded archive
# unzip -qq "$downDir/$i.zip" -d "$distDir" &&
unzip -qq "$i.zip" -d "$distDir" &&
echo "$i font unzipping finished" &&
echo "Font $i Installed" &&
installedFontName=$(curl --silent "$nerdfontsrepo/contents/patched-fonts/$i/Regular/complete?ref=master" | \
grep ".ttf" | \
awk -F ":" 'FNR == 1 {print $2}' | \
awk '{print $1}' | \
sed 's/"//g') &&
#set this variable to true so that the font cache get's updated
aFontInstalled=True && # We do this before the Additional info, so even if it fails the font cache will be refreshed
#Additional info, only if we can get the real font name
if [ -n "$installedFontName" ]; then
echo "$i provides:" &&
fc-list | grep -i "$installedFontName" | \
awk -F "/" '{print $7}' | \
sed 's/style\=//' | \
awk -F ":" 'BEGIN {print "FONT NAME" " | " "FILE NAME" " | " "STYLE"} {print $2 " | " $1 " | " $3}' | \
column -s "|" -t
fi
popd > /dev/null
else
echo "Font $i already installed"
fi
done
# If a font was installed, Update the font cache and remove the archive
if [ "$aFontInstalled" = "True" ]; then
echo "Regenerating fc-cache"
fc-cache -f 2>&1 && echo "fc-cache: regeneration succeeded!"
#check if the user hasn't chooen to keep the updated, if not, remove them
if [ "$keepArchives" = "False" ]; then
echo "Removing zip font files in $downDir" &&
rm $downDir/*.zip
else
echo "The archive files are in $downDir"
fi
fi
echo "All is done!"