Fonts: Difference between revisions

Instead of being flatpak-specific, also mention distrobox and appimage for the bindmounting fix
Move the Flatpak font fix stuff into a new page as it is also applicable for things outside of Flatpaks and the same fix is applicable to things outside of fonts
 
Line 296: Line 296:


<translate>
<translate>
=== Flatpak, Distrobox, Appimage and other non-Nix applications can't find system fonts/icons/themes ===
=== Flatpak applications can't find system fonts ===
Flatpak, Distrobox, Appimage and alot of other non-Nix applications sometimes have hardcoded FHS path assumptions for locating fonts, icons and themes. These applications usually expect fonts, icons and themes to be available under <code>/usr/share/fonts</code>, <code>/usr/share/icons</code> and <code>/usr/share/themes</code>, respectively.
See: [[Fixes for non-Nix applications#Flatpak, Distrobox, Appimage and other non-Nix applications can't find system fonts/icons/themes]]
 
For these applications, instead of using a complicated <code>fhsEnv</code> solution, users can choose to simply bindmount the directories from <code>/run/current-system/sw/share</code> to their respective locations inside <code>/usr/share</code>.
 
Note that the following fix uses <code>bindfs</code> instead of normal bindmounting or symlinking. This is because of edgecases like [https://github.com/ONLYOFFICE/DocumentServer/issues/1859 OnlyOffice] that will not follow symlinks while evaluating resources under <code>/usr/share</code>. Thus, the <code>[https://bindfs.org/docs/bindfs.1.html#sect10 resolve-symlink]</code> functionality of <code>bindfs</code> becomes crucial for covering even the most niche corner cases.<syntaxhighlight lang="nixos" line="1">
# misc-usr-fix.nix
{ pkgs, ... }:
 
let
  # Mount options for the bind mounts
  mountOptions = [
    "ro"
    "x-gvfs-hide"
    # Resolves symlinks as if they were real files
    # Needed for things like OnlyOffice
    "resolve-symlinks"
  ];
in
{
  # Bind mounts fonts, icons and themes from
  # The /run/current-system/sw/share/* paths
  # to their /usr/share/* equivalents
 
  # Expose all fonts
  # under /run/current-system/sw/share/X11/fonts
  fonts.fontDir.enable = true;
 
  # Flatpak: Bind mounts /usr/share/* directories
  system.fsPackages = [ pkgs.bindfs ];
 
  # Fonts
  fileSystems."/usr/share/fonts" = {
    device = "/run/current-system/sw/share/X11/fonts";
    fsType = "fuse.bindfs";
    options = mountOptions;
  };
 
  # Icons
  fileSystems."/usr/share/icons" = {
    device = "/run/current-system/sw/share/icons";
    fsType = "fuse.bindfs";
    options = mountOptions;
  };
 
  # Themes
  fileSystems."/usr/share/themes" = {
    device = "/run/current-system/sw/share/themes";
    fsType = "fuse.bindfs";
    options = mountOptions;
  };
}
 
</syntaxhighlight>


==== Alternative fixes for Flatpak apps ====
==== Alternative fixes for Flatpak apps ====