9f2865515d
With the new evaluation of arguments, pkgs is now defined by the configuration, which implies that option declaration with pkgs.lib will cause an infinite loop.
194 lines
6.2 KiB
Nix
194 lines
6.2 KiB
Nix
{ config, pkgs, lib, ... }:
|
|
|
|
with lib;
|
|
|
|
let fcBool = x: if x then "<bool>true</bool>" else "<bool>false</bool>";
|
|
in
|
|
{
|
|
|
|
options = {
|
|
|
|
fonts = {
|
|
|
|
fontconfig = {
|
|
|
|
ultimate = {
|
|
enable = mkOption {
|
|
type = types.bool;
|
|
default = true;
|
|
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 <literal>false</literal> to ban all
|
|
bitmap fonts.
|
|
'';
|
|
};
|
|
|
|
allowType1 = mkOption {
|
|
type = types.bool;
|
|
default = false;
|
|
description = ''
|
|
Allow Type-1 fonts. Default is <literal>false</literal> 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.str // {
|
|
check = flip elem ["none" "free" "combi" "ms"];
|
|
};
|
|
default = "free";
|
|
description = ''
|
|
Font substitutions to replace common Type 1 fonts with nicer
|
|
TrueType fonts. <literal>free</literal> uses free fonts,
|
|
<literal>ms</literal> uses Microsoft fonts,
|
|
<literal>combi</literal> uses a combination, and
|
|
<literal>none</literal> disables the substitutions.
|
|
'';
|
|
};
|
|
|
|
rendering = mkOption {
|
|
type = types.attrs;
|
|
default = pkgs.fontconfig-ultimate.rendering.ultimate;
|
|
description = ''
|
|
FreeType rendering settings presets. The default is
|
|
<literal>pkgs.fontconfig-ultimate.rendering.ultimate</literal>.
|
|
The other available styles are:
|
|
<literal>ultimate-lighter</literal>,
|
|
<literal>ultimate-darker</literal>,
|
|
<literal>ultimate-lightest</literal>,
|
|
<literal>ultimate-darkest</literal>,
|
|
<literal>default</literal> (the original Infinality default),
|
|
<literal>osx</literal>,
|
|
<literal>ipad</literal>,
|
|
<literal>ubuntu</literal>,
|
|
<literal>linux</literal>,
|
|
<literal>winxplight</literal>,
|
|
<literal>win7light</literal>,
|
|
<literal>winxp</literal>,
|
|
<literal>win7</literal>,
|
|
<literal>vanilla</literal>,
|
|
<literal>classic</literal>,
|
|
<literal>nudge</literal>,
|
|
<literal>push</literal>,
|
|
<literal>shove</literal>,
|
|
<literal>sharpened</literal>,
|
|
<literal>infinality</literal>. Any of the presets may be
|
|
customized by editing the attributes. To disable, set this option
|
|
to the empty attribute set <literal>{}</literal>.
|
|
'';
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
};
|
|
|
|
|
|
config =
|
|
let ultimate = config.fonts.fontconfig.ultimate;
|
|
fontconfigUltimateConf = ''
|
|
<?xml version="1.0"?>
|
|
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
|
|
<fontconfig>
|
|
|
|
${optionalString (!ultimate.allowBitmaps) ''
|
|
<!-- Reject bitmap fonts -->
|
|
<selectfont>
|
|
<rejectfont>
|
|
<pattern>
|
|
<patelt name="scalable"><bool>false</bool></patelt>
|
|
</pattern>
|
|
</rejectfont>
|
|
</selectfont>
|
|
''}
|
|
|
|
${optionalString ultimate.allowType1 ''
|
|
<!-- Reject Type 1 fonts -->
|
|
<selectfont>
|
|
<rejectfont>
|
|
<pattern>
|
|
<patelt name="fontformat">
|
|
<string>Type 1</string>
|
|
</patelt>
|
|
</pattern>
|
|
</rejectfont>
|
|
</selectfont>
|
|
''}
|
|
|
|
<!-- Use embedded bitmaps in fonts like Calibri? -->
|
|
<match target="font">
|
|
<edit name="embeddedbitmap" mode="assign">
|
|
${fcBool ultimate.useEmbeddedBitmaps}
|
|
</edit>
|
|
</match>
|
|
|
|
<!-- Force autohint always -->
|
|
<match target="font">
|
|
<edit name="force_autohint" mode="assign">
|
|
${fcBool ultimate.forceAutohint}
|
|
</edit>
|
|
</match>
|
|
|
|
<!-- Render some monospace TTF fonts as bitmaps -->
|
|
<match target="pattern">
|
|
<edit name="bitmap_monospace" mode="assign">
|
|
${fcBool ultimate.renderMonoTTFAsBitmap}
|
|
</edit>
|
|
</match>
|
|
|
|
${optionalString (ultimate.substitutions != "none") ''
|
|
<!-- Type 1 font substitutions -->
|
|
<include ignore_missing="yes">${pkgs.fontconfig-ultimate.confd}/etc/fonts/presets/${ultimate.substitutions}</include>
|
|
''}
|
|
|
|
<include ignore_missing="yes">${pkgs.fontconfig-ultimate.confd}/etc/fonts/conf.d</include>
|
|
|
|
</fontconfig>
|
|
'';
|
|
in mkIf (config.fonts.fontconfig.enable && ultimate.enable) {
|
|
|
|
environment.etc."fonts/conf.d/52-fontconfig-ultimate.conf" = {
|
|
text = fontconfigUltimateConf;
|
|
};
|
|
|
|
environment.etc."fonts/${pkgs.fontconfig.configVersion}/conf.d/52-fontconfig-ultimate.conf" = {
|
|
text = fontconfigUltimateConf;
|
|
};
|
|
|
|
environment.variables = ultimate.rendering;
|
|
|
|
};
|
|
|
|
}
|