104 lines
3.6 KiB
Bash
Executable File
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!"
|