Merge branch 'fontconfig-penultimate'
This commit is contained in:
commit
bd0163fc34
@ -3,23 +3,236 @@
|
|||||||
with lib;
|
with lib;
|
||||||
|
|
||||||
let
|
let
|
||||||
cfg = config.fonts.fontconfig.penultimate;
|
cfg = config.fonts.fontconfig;
|
||||||
|
|
||||||
|
fcBool = x: "<bool>" + (if x then "true" else "false") + "</bool>";
|
||||||
|
|
||||||
|
# back-supported fontconfig version and package
|
||||||
|
# version is used for font cache generation
|
||||||
|
supportVersion = "210";
|
||||||
|
supportPkg = pkgs."fontconfig_${supportVersion}";
|
||||||
|
|
||||||
|
# latest fontconfig version and package
|
||||||
|
# version is used for configuration folder name, /etc/fonts/VERSION/
|
||||||
|
# note: format differs from supportVersion and can not be used with makeCacheConf
|
||||||
latestVersion = pkgs.fontconfig.configVersion;
|
latestVersion = pkgs.fontconfig.configVersion;
|
||||||
|
latestPkg = pkgs.fontconfig;
|
||||||
|
|
||||||
|
# supported version fonts.conf
|
||||||
|
supportFontsConf = pkgs.makeFontsConf { fontconfig = supportPkg; fontDirectories = config.fonts.fonts; };
|
||||||
|
|
||||||
|
# configuration file to read fontconfig cache
|
||||||
|
# version dependent
|
||||||
|
# priority 0
|
||||||
|
cacheConfSupport = makeCacheConf { version = supportVersion; };
|
||||||
|
cacheConfLatest = makeCacheConf {};
|
||||||
|
|
||||||
|
# generate the font cache setting file for a fontconfig version
|
||||||
|
# use latest when no version is passed
|
||||||
|
makeCacheConf = { version ? null }:
|
||||||
|
let
|
||||||
|
fcPackage = if builtins.isNull version
|
||||||
|
then "fontconfig"
|
||||||
|
else "fontconfig_${version}";
|
||||||
|
makeCache = fontconfig: pkgs.makeFontsCache { inherit fontconfig; fontDirectories = config.fonts.fonts; };
|
||||||
|
cache = makeCache pkgs."${fcPackage}";
|
||||||
|
cache32 = makeCache pkgs.pkgsi686Linux."${fcPackage}";
|
||||||
|
in
|
||||||
|
pkgs.writeText "fc-00-nixos-cache.conf" ''
|
||||||
|
<?xml version='1.0'?>
|
||||||
|
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
|
||||||
|
<fontconfig>
|
||||||
|
<!-- Font directories -->
|
||||||
|
${concatStringsSep "\n" (map (font: "<dir>${font}</dir>") config.fonts.fonts)}
|
||||||
|
<!-- Pre-generated font caches -->
|
||||||
|
<cachedir>${cache}</cachedir>
|
||||||
|
${optionalString (pkgs.stdenv.isx86_64 && cfg.cache32Bit) ''
|
||||||
|
<cachedir>${cache32}</cachedir>
|
||||||
|
''}
|
||||||
|
</fontconfig>
|
||||||
|
'';
|
||||||
|
|
||||||
# The configuration to be included in /etc/font/
|
# The configuration to be included in /etc/font/
|
||||||
confPkg = pkgs.runCommand "font-penultimate-conf" {} ''
|
penultimateConf = pkgs.runCommand "font-penultimate-conf" {} ''
|
||||||
support_folder=$out/etc/fonts/conf.d
|
support_folder=$out/etc/fonts/conf.d
|
||||||
latest_folder=$out/etc/fonts/${latestVersion}/conf.d
|
latest_folder=$out/etc/fonts/${latestVersion}/conf.d
|
||||||
|
|
||||||
mkdir -p $support_folder
|
mkdir -p $support_folder
|
||||||
mkdir -p $latest_folder
|
mkdir -p $latest_folder
|
||||||
|
|
||||||
# fontconfig ultimate various configuration files
|
ln -s ${supportFontsConf} $support_folder/../fonts.conf
|
||||||
|
ln -s ${latestPkg.out}/etc/fonts/fonts.conf \
|
||||||
|
$latest_folder/../fonts.conf
|
||||||
|
|
||||||
|
# fontconfig-penultimate various configuration files
|
||||||
ln -s ${pkgs.fontconfig-penultimate}/etc/fonts/conf.d/*.conf \
|
ln -s ${pkgs.fontconfig-penultimate}/etc/fonts/conf.d/*.conf \
|
||||||
$support_folder
|
$support_folder
|
||||||
ln -s ${pkgs.fontconfig-penultimate}/etc/fonts/conf.d/*.conf \
|
ln -s ${pkgs.fontconfig-penultimate}/etc/fonts/conf.d/*.conf \
|
||||||
$latest_folder
|
$latest_folder
|
||||||
|
|
||||||
|
ln -s ${cacheConfSupport} $support_folder/00-nixos-cache.conf
|
||||||
|
ln -s ${cacheConfLatest} $latest_folder/00-nixos-cache.conf
|
||||||
|
|
||||||
|
rm $support_folder/10-antialias.conf $latest_folder/10-antialias.conf
|
||||||
|
ln -s ${antialiasConf} $support_folder/10-antialias.conf
|
||||||
|
ln -s ${antialiasConf} $latest_folder/10-antialias.conf
|
||||||
|
|
||||||
|
rm $support_folder/10-hinting.conf $latest_folder/10-hinting.conf
|
||||||
|
ln -s ${hintingConf} $support_folder/10-hinting.conf
|
||||||
|
ln -s ${hintingConf} $latest_folder/10-hinting.conf
|
||||||
|
|
||||||
|
${optionalString cfg.useEmbeddedBitmaps ''
|
||||||
|
rm $support_folder/10-no-embedded-bitmaps.conf
|
||||||
|
rm $latest_folder/10-no-embedded-bitmaps.conf
|
||||||
|
''}
|
||||||
|
|
||||||
|
rm $support_folder/10-subpixel.conf $latest_folder/10-subpixel.conf
|
||||||
|
ln -s ${subpixelConf} $support_folder/10-subpixel.conf
|
||||||
|
ln -s ${subpixelConf} $latest_folder/10-subpixel.conf
|
||||||
|
|
||||||
|
${optionalString (cfg.dpi != 0) ''
|
||||||
|
ln -s ${dpiConf} $support_folder/11-dpi.conf
|
||||||
|
ln -s ${dpiConf} $latest_folder/11-dpi.conf
|
||||||
|
''}
|
||||||
|
|
||||||
|
${optionalString (!cfg.includeUserConf) ''
|
||||||
|
rm $support_folder/50-user.conf
|
||||||
|
rm $latest_folder/50-user.conf
|
||||||
|
''}
|
||||||
|
|
||||||
|
# 51-local.conf
|
||||||
|
rm $latest_folder/51-local.conf
|
||||||
|
substitute \
|
||||||
|
${pkgs.fontconfig-penultimate}/etc/fonts/conf.d/51-local.conf \
|
||||||
|
$latest_folder/51-local.conf \
|
||||||
|
--replace local.conf /etc/fonts/${latestVersion}/local.conf
|
||||||
|
|
||||||
|
ln -s ${defaultFontsConf} $support_folder/52-default-fonts.conf
|
||||||
|
ln -s ${defaultFontsConf} $latest_folder/52-default-fonts.conf
|
||||||
|
|
||||||
|
${optionalString cfg.allowBitmaps ''
|
||||||
|
rm $support_folder/53-no-bitmaps.conf
|
||||||
|
rm $latest_folder/53-no-bitmaps.conf
|
||||||
|
''}
|
||||||
|
|
||||||
|
${optionalString (!cfg.allowType1) ''
|
||||||
|
ln -s ${rejectType1} $support_folder/53-no-type1.conf
|
||||||
|
ln -s ${rejectType1} $latest_folder/53-no-type1.conf
|
||||||
|
''}
|
||||||
|
'';
|
||||||
|
|
||||||
|
hintingConf = pkgs.writeText "fc-10-hinting.conf" ''
|
||||||
|
<?xml version='1.0'?>
|
||||||
|
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
|
||||||
|
<fontconfig>
|
||||||
|
|
||||||
|
<!-- Default rendering settings -->
|
||||||
|
<match target="pattern">
|
||||||
|
<edit mode="append" name="hinting">
|
||||||
|
${fcBool cfg.hinting.enable}
|
||||||
|
</edit>
|
||||||
|
<edit mode="append" name="autohint">
|
||||||
|
${fcBool cfg.hinting.autohint}
|
||||||
|
</edit>
|
||||||
|
<edit mode="append" name="hintstyle">
|
||||||
|
<const>hintslight</const>
|
||||||
|
</edit>
|
||||||
|
</match>
|
||||||
|
|
||||||
|
</fontconfig>
|
||||||
|
'';
|
||||||
|
|
||||||
|
antialiasConf = pkgs.writeText "fc-10-antialias.conf" ''
|
||||||
|
<?xml version='1.0'?>
|
||||||
|
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
|
||||||
|
<fontconfig>
|
||||||
|
|
||||||
|
<!-- Default rendering settings -->
|
||||||
|
<match target="pattern">
|
||||||
|
<edit mode="append" name="antialias">
|
||||||
|
${fcBool cfg.antialias}
|
||||||
|
</edit>
|
||||||
|
</match>
|
||||||
|
|
||||||
|
</fontconfig>
|
||||||
|
'';
|
||||||
|
|
||||||
|
subpixelConf = pkgs.writeText "fc-10-subpixel.conf" ''
|
||||||
|
<?xml version='1.0'?>
|
||||||
|
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
|
||||||
|
<fontconfig>
|
||||||
|
|
||||||
|
<!-- Default rendering settings -->
|
||||||
|
<match target="pattern">
|
||||||
|
<edit mode="append" name="rgba">
|
||||||
|
<const>${cfg.subpixel.rgba}</const>
|
||||||
|
</edit>
|
||||||
|
<edit mode="append" name="lcdfilter">
|
||||||
|
<const>lcd${cfg.subpixel.lcdfilter}</const>
|
||||||
|
</edit>
|
||||||
|
</match>
|
||||||
|
|
||||||
|
</fontconfig>
|
||||||
|
'';
|
||||||
|
|
||||||
|
dpiConf = pkgs.writeText "fc-11-dpi.conf" ''
|
||||||
|
<?xml version='1.0'?>
|
||||||
|
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
|
||||||
|
<fontconfig>
|
||||||
|
|
||||||
|
<match target="pattern">
|
||||||
|
<edit name="dpi" mode="assign">
|
||||||
|
<double>${toString cfg.dpi}</double>
|
||||||
|
</edit>
|
||||||
|
</match>
|
||||||
|
|
||||||
|
</fontconfig>
|
||||||
|
'';
|
||||||
|
|
||||||
|
defaultFontsConf =
|
||||||
|
let genDefault = fonts: name:
|
||||||
|
optionalString (fonts != []) ''
|
||||||
|
<alias>
|
||||||
|
<family>${name}</family>
|
||||||
|
<prefer>
|
||||||
|
${concatStringsSep ""
|
||||||
|
(map (font: ''
|
||||||
|
<family>${font}</family>
|
||||||
|
'') fonts)}
|
||||||
|
</prefer>
|
||||||
|
</alias>
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
pkgs.writeText "fc-52-nixos-default-fonts.conf" ''
|
||||||
|
<?xml version='1.0'?>
|
||||||
|
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
|
||||||
|
<fontconfig>
|
||||||
|
|
||||||
|
<!-- Default fonts -->
|
||||||
|
${genDefault cfg.defaultFonts.sansSerif "sans-serif"}
|
||||||
|
|
||||||
|
${genDefault cfg.defaultFonts.serif "serif"}
|
||||||
|
|
||||||
|
${genDefault cfg.defaultFonts.monospace "monospace"}
|
||||||
|
|
||||||
|
</fontconfig>
|
||||||
|
'';
|
||||||
|
|
||||||
|
rejectType1 = pkgs.writeText "fc-53-no-type1.conf" ''
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
|
||||||
|
<fontconfig>
|
||||||
|
|
||||||
|
<!-- Reject Type 1 fonts -->
|
||||||
|
<selectfont>
|
||||||
|
<rejectfont>
|
||||||
|
<pattern>
|
||||||
|
<patelt name="fontformat"><string>Type 1</string></patelt>
|
||||||
|
</pattern>
|
||||||
|
</rejectfont>
|
||||||
|
</selectfont>
|
||||||
|
|
||||||
|
</fontconfig>
|
||||||
'';
|
'';
|
||||||
|
|
||||||
in
|
in
|
||||||
@ -50,7 +263,7 @@ in
|
|||||||
|
|
||||||
config = mkIf (config.fonts.fontconfig.enable && cfg.enable) {
|
config = mkIf (config.fonts.fontconfig.enable && cfg.enable) {
|
||||||
|
|
||||||
fonts.fontconfig.confPackages = [ confPkg ];
|
fonts.fontconfig.confPackages = [ penultimateConf ];
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -104,13 +104,6 @@ let cfg = config.fonts.fontconfig;
|
|||||||
</match>
|
</match>
|
||||||
''}
|
''}
|
||||||
|
|
||||||
<!-- Force autohint always -->
|
|
||||||
<match target="font">
|
|
||||||
<edit name="force_autohint" mode="assign">
|
|
||||||
${fcBool cfg.forceAutohint}
|
|
||||||
</edit>
|
|
||||||
</match>
|
|
||||||
|
|
||||||
</fontconfig>
|
</fontconfig>
|
||||||
'';
|
'';
|
||||||
|
|
||||||
@ -174,13 +167,6 @@ let cfg = config.fonts.fontconfig;
|
|||||||
</edit>
|
</edit>
|
||||||
</match>
|
</match>
|
||||||
|
|
||||||
<!-- Render some monospace TTF fonts as bitmaps -->
|
|
||||||
<match target="pattern">
|
|
||||||
<edit name="bitmap_monospace" mode="assign">
|
|
||||||
${fcBool cfg.renderMonoTTFAsBitmap}
|
|
||||||
</edit>
|
|
||||||
</match>
|
|
||||||
|
|
||||||
</fontconfig>
|
</fontconfig>
|
||||||
'';
|
'';
|
||||||
|
|
||||||
@ -372,11 +358,11 @@ in
|
|||||||
|
|
||||||
autohint = mkOption {
|
autohint = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = true;
|
default = false;
|
||||||
description = ''
|
description = ''
|
||||||
Enable the autohinter, which provides hinting for otherwise
|
Enable the autohinter in place of the default interpreter.
|
||||||
un-hinted fonts. The results are usually lower quality than
|
The results are usually lower quality than correctly-hinted
|
||||||
correctly-hinted fonts.
|
fonts, but better than unhinted fonts.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@ -453,31 +439,19 @@ in
|
|||||||
description = ''Use embedded bitmaps in fonts like Calibri.'';
|
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.'';
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
config = mkIf cfg.enable {
|
config = mkMerge [
|
||||||
fonts.fontconfig.confPackages = [ confPkg ];
|
(mkIf cfg.enable {
|
||||||
|
environment.systemPackages = [ pkgs.fontconfig ];
|
||||||
environment.systemPackages = [ pkgs.fontconfig ];
|
environment.etc.fonts.source = "${fontconfigEtc}/etc/fonts/";
|
||||||
environment.etc.fonts.source = "${fontconfigEtc}/etc/fonts/";
|
})
|
||||||
};
|
(mkIf (cfg.enable && !cfg.penultimate.enable) {
|
||||||
|
fonts.fontconfig.confPackages = [ confPkg ];
|
||||||
|
})
|
||||||
|
];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -202,5 +202,7 @@ with lib;
|
|||||||
(mkRemovedOptionModule [ "fonts" "fontconfig" "hinting" "style" ] "")
|
(mkRemovedOptionModule [ "fonts" "fontconfig" "hinting" "style" ] "")
|
||||||
(mkRemovedOptionModule [ "services" "xserver" "displayManager" "sddm" "themes" ]
|
(mkRemovedOptionModule [ "services" "xserver" "displayManager" "sddm" "themes" ]
|
||||||
"Set the option `services.xserver.displayManager.sddm.package' instead.")
|
"Set the option `services.xserver.displayManager.sddm.package' instead.")
|
||||||
|
(mkRemovedOptionModule [ "fonts" "fontconfig" "forceAutohint" ] "")
|
||||||
|
(mkRemovedOptionModule [ "fonts" "fontconfig" "renderMonoTTFAsBitmap" ] "")
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{ stdenv, fetchFromGitHub }:
|
{ stdenv, fetchFromGitHub }:
|
||||||
|
|
||||||
let version = "0.2.1"; in
|
let version = "0.3.2"; in
|
||||||
stdenv.mkDerivation {
|
stdenv.mkDerivation {
|
||||||
name = "fontconfig-penultimate-${version}";
|
name = "fontconfig-penultimate-${version}";
|
||||||
|
|
||||||
@ -8,7 +8,7 @@ stdenv.mkDerivation {
|
|||||||
owner = "ttuegel";
|
owner = "ttuegel";
|
||||||
repo = "fontconfig-penultimate";
|
repo = "fontconfig-penultimate";
|
||||||
rev = version;
|
rev = version;
|
||||||
sha256 = "14arpalmpn7ig2myxslk4jdg6lm0cnmwsxy7zl0j7yr417k1kprf";
|
sha256 = "01cgqdmgpqahkg71lnvr3yzsmka9q1kgkbiz6w5ds1fhrpcswj7p";
|
||||||
};
|
};
|
||||||
|
|
||||||
installPhase = ''
|
installPhase = ''
|
||||||
|
Loading…
x
Reference in New Issue
Block a user