Fonts: Difference between revisions

From NixOS Wiki
imported>Artturin
Consistency and the override doesn't need to be multiline and it looks better
imported>Artturin
No edit summary
Line 88: Line 88:


<hr />
<hr />
[[Category:Configuration]]

Revision as of 05:18, 19 November 2020

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
];

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" ];
    };
  };
};

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]