{ config, pkgs, lib, ... }: with lib; let fcBool = x: if x then "true" else "false"; cfg = config.fonts.fontconfig.ultimate; latestVersion = pkgs.fontconfig.configVersion; # fontconfig ultimate main configuration file # priority 52 fontconfigUltimateConf = pkgs.writeText "fc-52-fontconfig-ultimate.conf" '' ${optionalString (!cfg.allowBitmaps) '' false ''} ${optionalString cfg.allowType1 '' Type 1 ''} ${fcBool cfg.useEmbeddedBitmaps} ${fcBool cfg.forceAutohint} ${fcBool cfg.renderMonoTTFAsBitmap} ''; # The configuration to be included in /etc/font/ confPkg = pkgs.runCommand "font-ultimate-conf" {} '' support_folder=$out/etc/fonts/conf.d latest_folder=$out/etc/fonts/${latestVersion}/conf.d mkdir -p $support_folder mkdir -p $latest_folder # 52-fontconfig-ultimate.conf ln -s ${fontconfigUltimateConf} \ $support_folder/52-fontconfig-ultimate.conf ln -s ${fontconfigUltimateConf} \ $latest_folder/52-fontconfig-ultimate.conf # fontconfig ultimate substitutions ${optionalString (cfg.substitutions != "none") '' ln -s ${pkgs.fontconfig-ultimate}/etc/fonts/presets/${cfg.substitutions}/*.conf \ $support_folder ln -s ${pkgs.fontconfig-ultimate}/etc/fonts/presets/${cfg.substitutions}/*.conf \ $latest_folder ''} # fontconfig ultimate various configuration files ln -s ${pkgs.fontconfig-ultimate}/etc/fonts/conf.d/*.conf \ $support_folder ln -s ${pkgs.fontconfig-ultimate}/etc/fonts/conf.d/*.conf \ $latest_folder ''; in { options = { fonts = { fontconfig = { ultimate = { enable = mkOption { type = types.bool; default = false; description = '' Enable fontconfig-ultimate settings (formerly known as Infinality). Besides the customizable settings in this NixOS module, fontconfig-ultimate also provides many font-specific rendering tweaks. ''; }; allowBitmaps = mkOption { type = types.bool; default = true; description = '' Allow bitmap fonts. Set to false to ban all bitmap fonts. ''; }; allowType1 = mkOption { type = types.bool; default = false; description = '' Allow Type-1 fonts. Default is false because of poor rendering. ''; }; useEmbeddedBitmaps = mkOption { type = types.bool; default = false; description = ''Use embedded bitmaps in fonts like Calibri.''; }; forceAutohint = mkOption { type = types.bool; default = false; description = '' Force use of the TrueType Autohinter. Useful for debugging or free-software purists. ''; }; renderMonoTTFAsBitmap = mkOption { type = types.bool; default = false; description = ''Render some monospace TTF fonts as bitmaps.''; }; substitutions = mkOption { type = types.nullOr (types.enum ["free" "combi" "ms"]); default = "free"; description = '' Font substitutions to replace common Type 1 fonts with nicer TrueType fonts. free uses free fonts, ms uses Microsoft fonts, combi uses a combination, and none disables the substitutions. ''; }; preset = mkOption { type = types.enum ["ultimate1" "ultimate2" "ultimate3" "ultimate4" "ultimate5" "osx" "windowsxp"]; default = "ultimate3"; description = '' FreeType rendering settings preset. Any of the presets may be customized by setting environment variables. ''; }; }; }; }; }; config = mkIf (config.fonts.fontconfig.enable && cfg.enable) { fonts.fontconfig.confPackages = [ confPkg ]; environment.variables."INFINALITY_FT" = cfg.preset; }; }