Fonts: Difference between revisions
imported>R-k-b add an example to fix bad font substition |
imported>Ngiger pkgs/font name may differ |
||
Line 22: | Line 22: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Be aware that sometimes font names and packages name differ and there is no universal convention in NixOS. See [https://discourse.nixos.org/t/guidelines-on-packaging-fonts/7683/2 Guidelines for font packaging] | |||
=== Installing specific fonts from nerdfonts === | === Installing specific fonts from nerdfonts === | ||
The <code>nerdfonts</code> package, which contains all fonts from the [https://www.nerdfonts.com/ nerdfonts] repository is quite large and conrains a large number of fonts which take some time to install. If you only need a selection of fonts from the package, you can overwrite the font selection on Stable 20.09 like so: | The <code>nerdfonts</code> package, which contains all fonts from the [https://www.nerdfonts.com/ nerdfonts] repository is quite large and conrains a large number of fonts which take some time to install. If you only need a selection of fonts from the package, you can overwrite the font selection on Stable 20.09 like so: |
Revision as of 09:03, 18 February 2021
Installing fonts on NixOS
NixOS has many font packages available, and you can easily search for your favourites on the NixOS packages site.
Despite looking like normal packages, simply adding these font packages to your environment.systemPackages
won't make the fonts accessible to applications. To achieve that, put these packages in the fonts.fonts
NixOS options list instead.
For example:
fonts.fonts = with pkgs; [
noto-fonts
noto-fonts-cjk
noto-fonts-emoji
liberation_ttf
fira-code
fira-code-symbols
mplus-outline-fonts
dina-font
proggyfonts
];
Be aware that sometimes font names and packages name differ and there is no universal convention in NixOS. See Guidelines for font packaging
Installing specific fonts from nerdfonts
The nerdfonts
package, which contains all fonts from the nerdfonts repository is quite large and conrains a large number of fonts which take some time to install. If you only need a selection of fonts from the package, you can overwrite the font selection on Stable 20.09 like so:
fonts.fonts = with pkgs; [
(nerdfonts.override { fonts = [ "FiraCode" "DroidSansMono" ]; })
];
This will cause NixOS to download only the Fira Code and Droid Sans Mono fonts from nerd-fonts instead of the whole package.
Imperative installation of user fonts
This is useful for quick font experiments.
Example: Install SourceCodePro-Regular
.
font=$(nix-build --no-out-link '<nixpkgs>' -A source-code-pro)/share/fonts/opentype/SourceCodePro-Regular.otf
cp $font ~/.local/share/fonts
fc-cache
# Verify that the font has been installed
fc-list -v | grep -i source
Set multiple fonts for different languages
If you want to use other languages alongside English, you may want to set appropriate fonts for each language in your whole OS. For example, a Persian speaker might want to use the Vazir font for Persian texts and the Ubuntu font for English texts. Just put these lines into your configuration.nix
:
#----=[ Fonts ]=----#
fonts = {
enableDefaultFonts = true;
fonts = with pkgs; [
pkgs.ubuntu_font_family
# Persian Fonts
pkgs.vazir-fonts
];
fontconfig = {
penultimate.enable = false;
defaultFonts = {
serif = [ "Vazir" "Ubuntu" ];
sansSerif = [ "Vazir" "Ubuntu" ];
monospace = [ "Ubuntu" ];
};
};
};
Use custom font substitutions
Sometimes, documents may appear to have bad kerning or hard-to-read letter spacing, due to a bad substitution.
For example, Okular may show in the Document Properties dialog that it has substituted DejaVu Sans Mono (a sans-serif font) in place of "NewCenturySchlbk". fc-match NewCenturySchlbk
would display similiar info.
Adding this to your /etc/nixos/configuration.nix
should prompt it to use the nicer serif *Schola* font instead:
fonts = {
fonts = with pkgs; [ gyre-fonts ];
fontconfig = {
localConf = ''
<!-- use a less horrible font substition for pdfs such as https://www.bkent.net/Doc/mdarchiv.pdf -->
<match target="pattern">
<test qual="any" name="family"><string>NewCenturySchlbk</string></test>
<edit name="family" mode="assign" binding="same"><string>TeX Gyre Schola</string></edit>
</match>
'';
};
};
For more information and examples on the xml configuration language:
- https://linux.die.net/man/5/fonts-conf
- https://wiki.archlinux.org/index.php/Font_configuration
- https://wiki.archlinux.org/index.php/Font_configuration/Examples
Troubleshooting
What font names can be used in fonts.fontconfig.defaultFonts.monospace
?
Those that fontconfig will understand. This can be queried from a font file using fc-query
.
$ cd /nix/var/nix/profiles/system/sw/share/X11-fonts
$ fc-query DejaVuSans.ttf | grep '^\s\+family:' | cut -d'"' -f2
Adding personal fonts to ~/.fonts
doesn't work
The ~/.fonts
directory is being deprecated upstream[1]. It already doesn't work in NixOS.
The new preferred location is in $XDG_DATA_HOME/fonts
, which for most users will resolve to ~/.local/share/fonts
[2]