{ config, lib, pkgs, ... }: let cfg = config.soispha.fonts; in { options.soispha.fonts = { enable = lib.mkEnableOption "fonts"; fonts = lib.mkOption { type = lib.types.listOf lib.types.package; example = lib.literalExpression ''with pkgs.nerdfonts; [SourceCodePro Overpass FiraCode]''; default = with pkgs.nerd-fonts; [ sauce-code-pro overpass ]; description = "The nerd-fonts to install"; }; enableEmoji = lib.mkEnableOption "emoji font support"; }; config = lib.mkIf cfg.enable { fonts = { packages = cfg.fonts ++ (with pkgs; [liberation_ttf]) ++ lib.optional cfg.enableEmoji pkgs.noto-fonts-emoji; fontconfig = { # NOTE: This is responsible for color emoji support <2023-08-28> # WARNING: This could lead to broken font rendering, if the emoji font is used as # a fallback for normal characters <2024-05-16> localConf = lib.mkIf cfg.enableEmoji (builtins.readFile ./emoji_font.xml); defaultFonts = { serif = lib.mkForce (["Liberation Serif"] ++ lib.optional cfg.enableEmoji "Noto Color Emoji"); sansSerif = lib.mkForce (["Overpass Nerd Font Propo"] ++ lib.optional cfg.enableEmoji "Noto Color Emoji"); monospace = lib.mkForce (["SauceCodePro Nerd Font Mono"] ++ lib.optional cfg.enableEmoji "Noto Color Emoji"); emoji = lib.mkIf cfg.enableEmoji (lib.mkForce ["Noto Color Emoji"]); }; allowType1 = false; allowBitmaps = false; }; }; }; }