{
  lib,
  config,
  pkgs,
  ...
}:

with lib;
let
  cfg = config.modules.fontconfig;

  aliasConfig = font: ''
    <alias>
      <family>${font.name}</family>

      <prefer>
        <family>${font.name}</family>
    ${concatStrings (map (font: "    <family>${font}</family>\n") font.fallbackFonts)}
      </prefer>
    </alias>
  '';

  configContent = concatStrings (
    map (font: aliasConfig config.theming.fonts.pkgs.${font}) config.theming.fonts.installed
  );
in
{
  options.modules.fontconfig = {
    enable = mkEnableOption "fontconfig";
  };

  config = mkIf cfg.enable {
    fonts.fontconfig = {
      enable = true;

      defaultFonts = {
        serif = [ config.theming.fonts.serif.name ];
        sansSerif = [ config.theming.fonts.sansSerif.name ];
        monospace = [ config.theming.fonts.monospace.name ];
        emoji = [ config.theming.fonts.emoji.name ];
      };
    };

    home.file.".config/fontconfig/conf.d/20-family-fallbacks.conf" = {
      enable = true;

      # text = ''
      #   <?xml version="1.0"?>
      #   <fontconfig>

      #   ${configContent}
      #   </fontconfig>
      # '';
      text = ''
        <?xml version='1.0'?>
        <!DOCTYPE fontconfig SYSTEM 'urn:fontconfig:fonts.dtd'>
        <fontconfig>

        ${configContent}
        </fontconfig>
      '';
    };
  };
}