Fixes for non-Nix applications
Flatpak, Distrobox, Appimage and other non-Nix applications can't find system fonts/icons/themes
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 /usr/share/fonts, /usr/share/icons and /usr/share/themes, respectively.
For these applications, instead of using a complicated fhsEnv solution, users can choose to simply bindmount the directories from /run/current-system/sw/share to their respective locations inside /usr/share.
Note that the following fix uses bindfs instead of normal bindmounting or symlinking. This is because of edgecases like OnlyOffice that will not follow symlinks while evaluating resources under /usr/share. Thus, the resolve-symlink functionality of bindfs becomes crucial for covering even the most niche corner cases.
# 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;
};
}