1.) Download a Nerd Font
2.) Unzip and copy to ~/.fonts
3.) Run the command fc-cache -fv
to manually rebuild the font cache
1.) Download a Nerd Font
2.) Unzip and copy to ~/.fonts
3.) Run the command fc-cache -fv
to manually rebuild the font cache
I made a small, but useful to me, change to @donovan code. I added code to look up the latest version of nerd fonts and download those.
#!/bin/bash
declare -a fonts=(
BitstreamVeraSansMono
CascadiaCode
CodeNewRoman
DroidSansMono
FiraCode
FiraMono
Go-Mono
Hack
Hermit
JetBrainsMono
Meslo
Noto
Overpass
ProggyClean
RobotoMono
SourceCodePro
SpaceMono
Ubuntu
UbuntuMono
)
version=$(curl -s 'https://api.github.com/repos/ryanoasis/nerd-fonts/releases/latest' | jq -r '.name')
fonts_dir="${HOME}/.local/share/fonts"
if [[ ! -d "$fonts_dir" ]]; then
mkdir -p "$fonts_dir"
fi
for font in "${fonts[@]}"; do
zip_file="${font}.zip"
download_url="https://github.com/ryanoasis/nerd-fonts/releases/download/${version}/${zip_file}"
echo "Downloading $download_url"
wget "$download_url"
unzip "$zip_file" -d "$fonts_dir"
rm "$zip_file"
done
find "$fonts_dir" -name 'Windows Compatible' -delete
fc-cache -fv
had to move the font in /usr/share/fonts
Another variant, which installs fonts passed on args (allows to install new fonts without modifying the script) and download directly the latest version:
#!/bin/bash
set -euo pipefail
fonts_dir="$HOME/.local/share/fonts"
if [[ ! -d "$fonts_dir" ]]; then
mkdir -p "$fonts_dir"
fi
for font in "$@"; do
zip_file="$font.zip"
download_url="https://github.com/ryanoasis/nerd-fonts/releases/latest/download/$zip_file"
echo "Downloading $download_url"
wget -O "/tmp/$zip_file" "$download_url"
unzip "/tmp/$zip_file" -d "/tmp/$font/"
mv /tmp/$font/*.ttf $fonts_dir
rm "/tmp/$zip_file"
rm "/tmp/$font/" -rf
done
fc-cache -fv
Check out Nerd Font Downloader (nfdl): https://github.com/rubiin/nfdl
It requires node(js) to run.
It presents a (fuzzy searchable) list of Nerd Fonts which you can choose from to download.
It tries to put the font in the right place for user fonts (per operating system).
On Linux and macOS it will even try to run fc-cache for you, after downloading.
Check out Nerd Font Downloader (nfdl): https://github.com/rubiin/nfdl It requires node(js) to run. It presents a (fuzzy searchable) list of Nerd Fonts which you can choose from to download. It tries to put the font in the right place for user fonts (per operating system). On Linux and macOS it will even try to run fc-cache for you, after downloading.
this npm helped fix a missing icon issue on ubuntu 24.04
Thank you!
I made a small, but useful to me, change to @donovan code. I added code to look up the latest version of nerd fonts and download those.
#!/bin/bash
declare -a fonts=( BitstreamVeraSansMono CascadiaCode CodeNewRoman DroidSansMono FiraCode FiraMono Go-Mono Hack Hermit JetBrainsMono Meslo Noto Overpass ProggyClean RobotoMono SourceCodePro SpaceMono Ubuntu UbuntuMono )
version=$(curl -s 'api.github.com/repos/ryanoasis/nerd-fonts/releases/latest' | jq -r '.name') fonts_dir="${HOME}/.local/share/fonts"
if [[ ! -d "$fonts_dir" ]]; then mkdir -p "$fonts_dir" fi
for font in "${fonts[@]}"; do zip_file="${font}.zip" download_url="github.com/ryanoasis/nerd-fonts/releases/download/${version}/${zip_file}" echo "Downloading $download_url" wget "$download_url" unzip "$zip_file" -d "$fonts_dir" rm "$zip_file" done
find "$fonts_dir" -name 'Windows Compatible' -delete
fc-cache -fv
I made him better.
#!/bin/bash
declare -a fonts=(
BitstreamVeraSansMono
CascadiaCode
CodeNewRoman
DroidSansMono
FiraCode
FiraMono
Go-Mono
Hack
Hermit
JetBrainsMono
Meslo
Noto
Overpass
ProggyClean
RobotoMono
SourceCodePro
SpaceMono
Ubuntu
UbuntuMono
)
version=$(curl -s 'https://api.github.com/repos/ryanoasis/nerd-fonts/releases/latest' | jq -r '.name')
if [ -z "$version" ] || [ "$version" = "null" ]; then
version="v3.2.1"
fi
echo "latest version:$version"
fonts_dir="${HOME}/.local/share/fonts"
#fonts_dir="/usr/share/fonts"
if [[ ! -d "$fonts_dir" ]]; then
mkdir -p "$fonts_dir"
fi
for font in "${fonts[@]}"; do
ls ="${font}.zip"
download_url="https://github.com/ryanoasis/nerd-fonts/releases/download/${version}/${zip_file}"
echo "Downloading $download_url"
wget "$download_url"
unzip "$zip_file" -d "$fonts_dir"
rm "$zip_file"
done
find "$fonts_dir" -name 'Windows Compatible' -delete
fc-cache -fv
You've got a typo in your script that's causing an error. On the line where you have ls ="${font}.zip", you're mistakenly using the ls command instead of assigning the zip file name to a variable. This incorrect usage leads to the script failing to locate the font file, resulting in a "No such file or directory" error when it tries to download and unzip the font. By correcting that line to zip_file="${font}.zip", you'll properly assign the zip file name to the zip_file variable, allowing the download URL to be constructed correctly and the font installation to proceed without issues.
Script below with fixes and works on 24.04
#!/bin/bash
declare -a fonts=(
BitstreamVeraSansMono
CascadiaCode
CodeNewRoman
DroidSansMono
FiraCode
FiraMono
Go-Mono
Hack
Hermit
JetBrainsMono
Meslo
Noto
Overpass
ProggyClean
RobotoMono
SourceCodePro
SpaceMono
Ubuntu
UbuntuMono
)
version=$(curl -s 'https://api.github.com/repos/ryanoasis/nerd-fonts/releases/latest' | jq -r '.name')
if [ -z "$version" ] || [ "$version" = "null" ]; then
version="v3.2.1"
fi
echo "latest version: $version"
fonts_dir="${HOME}/.local/share/fonts"
#fonts_dir="/usr/share/fonts"
if [[ ! -d "$fonts_dir" ]]; then
mkdir -p "$fonts_dir"
fi
for font in "${fonts[@]}"; do
zip_file="${font}.zip"
download_url="https://github.com/ryanoasis/nerd-fonts/releases/download/${version}/${zip_file}"
echo "Downloading $download_url"
wget "$download_url"
unzip -o "$zip_file" -d "$fonts_dir" # Added the -o option here to allow replacing
rm "$zip_file"
done
find "$fonts_dir" -name 'Windows Compatible' -delete
fc-cache -fv
This is beautiful.