Fonts: Difference between revisions

From NixOS Wiki
imported>LinArcX
Set multiple fonts for different languages
imported>Mic92
fix indentation
Line 8: Line 8:


<syntaxhighlight lang="nix">
<syntaxhighlight lang="nix">
fonts.fonts = with pkgs; [
fonts.fonts = with pkgs; [
    noto-fonts
  noto-fonts
    noto-fonts-cjk
  noto-fonts-cjk
    noto-fonts-emoji
  noto-fonts-emoji
    liberation_ttf
  liberation_ttf
    fira-code
  fira-code
    fira-code-symbols
  fira-code-symbols
    mplus-outline-fonts
  mplus-outline-fonts
    dina-font
  dina-font
    proggyfonts
  proggyfonts
];
];
</syntaxhighlight>
</syntaxhighlight>


Line 40: Line 38:
<syntaxhighlight lang="nix">
<syntaxhighlight lang="nix">
  #----=[ Fonts ]=----#
  #----=[ Fonts ]=----#
  fonts = {
fonts = {
enableDefaultFonts = true;
  enableDefaultFonts = true;
    fonts = [  
  fonts = [  
          pkgs.ubuntu_font_family
    pkgs.ubuntu_font_family


          # Persian Fonts
    # Persian Fonts
          pkgs.vazir-fonts
    pkgs.vazir-fonts
];
  ];


fontconfig = {
  fontconfig = {
    penultimate.enable = false;
    penultimate.enable = false;
    defaultFonts = {
    defaultFonts = {
serif = [ "Vazir" "Ubuntu" ];
      serif = [ "Vazir" "Ubuntu" ];
  sansSerif = [ "Vazir" "Ubuntu" ];
      sansSerif = [ "Vazir" "Ubuntu" ];
  monospace = [ "Ubuntu" ];
      monospace = [ "Ubuntu" ];
    };
    };
};
   };
   };
};
</syntaxhighlight>
</syntaxhighlight>



Revision as of 09:06, 17 July 2019

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

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 are not an english native user and want to use another languages alongside english, you may want to set appropriate fonts for each language in your whole os. In nixos, it's so easy. Imagine i'm a persian user and i want to set "Vazir" font to persian texts and "Ubuntu" font for english texts. Just put these lines into your configuration.nix:

 #----=[ Fonts ]=----#
fonts = {
  enableDefaultFonts = true;
  fonts = [ 
    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 is being deprecated upstream[1]. It already is not working with NixOS.

The new preferred location is in $XDG_DATA_HOME/fonts, which for most users will resolve to ~/.local/share/fonts[2]