diff --git a/nixos/doc/manual/release-notes/rl-1609.xml b/nixos/doc/manual/release-notes/rl-1609.xml index 8dd4e1a9f64..1245411be17 100644 --- a/nixos/doc/manual/release-notes/rl-1609.xml +++ b/nixos/doc/manual/release-notes/rl-1609.xml @@ -58,6 +58,14 @@ following incompatible changes: official documentation. + + fonts.fontconfig.ultimate.rendering was removed + because our presets were obsolete for some time. New presets are hardcoded + into freetype; one selects a preset via fonts.fontconfig.ultimate.preset. + You can customize those presets via ordinary environment variables, using + environment.variables. + + diff --git a/nixos/modules/config/fonts/fontconfig-ultimate.nix b/nixos/modules/config/fonts/fontconfig-ultimate.nix index 02568f9de51..a3f52fbd919 100644 --- a/nixos/modules/config/fonts/fontconfig-ultimate.nix +++ b/nixos/modules/config/fonts/fontconfig-ultimate.nix @@ -3,6 +3,95 @@ 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 { @@ -64,9 +153,7 @@ in }; substitutions = mkOption { - type = types.str // { - check = flip elem ["none" "free" "combi" "ms"]; - }; + type = types.nullOr (types.enum ["free" "combi" "ms"]); default = "free"; description = '' Font substitutions to replace common Type 1 fonts with nicer @@ -77,35 +164,12 @@ in ''; }; - rendering = mkOption { - type = types.attrs; - default = pkgs.fontconfig-ultimate.rendering.ultimate; + preset = mkOption { + type = types.enum ["ultimate1" "ultimate2" "ultimate3" "ultimate4" "ultimate5" "osx" "windowsxp"]; + default = "ultimate3"; description = '' - FreeType rendering settings presets. The default is - pkgs.fontconfig-ultimate.rendering.ultimate. - The other available styles are: - ultimate-lighter, - ultimate-darker, - ultimate-lightest, - ultimate-darkest, - default (the original Infinality default), - osx, - ipad, - ubuntu, - linux, - winxplight, - win7light, - winxp, - win7, - vanilla, - classic, - nudge, - push, - shove, - sharpened, - infinality. Any of the presets may be - customized by editing the attributes. To disable, set this option - to the empty attribute set {}. + FreeType rendering settings preset. Any of the presets may be + customized by setting environment variables. ''; }; }; @@ -114,80 +178,11 @@ in }; + config = mkIf (config.fonts.fontconfig.enable && cfg.enable) { - config = - let ultimate = config.fonts.fontconfig.ultimate; - fontconfigUltimateConf = '' - - - + fonts.fontconfig.confPackages = [ confPkg ]; + environment.variables."INFINALITY_FT" = cfg.preset; - ${optionalString (!ultimate.allowBitmaps) '' - - - - - false - - - - ''} - - ${optionalString ultimate.allowType1 '' - - - - - - Type 1 - - - - - ''} - - - - - ${fcBool ultimate.useEmbeddedBitmaps} - - - - - - - ${fcBool ultimate.forceAutohint} - - - - - - - ${fcBool ultimate.renderMonoTTFAsBitmap} - - - - ${optionalString (ultimate.substitutions != "none") '' - - ${pkgs.fontconfig-ultimate.confd}/etc/fonts/presets/${ultimate.substitutions} - ''} - - ${pkgs.fontconfig-ultimate.confd}/etc/fonts/conf.d - - - ''; - 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; - - }; + }; } diff --git a/nixos/modules/config/fonts/fontconfig.nix b/nixos/modules/config/fonts/fontconfig.nix index 1eaebe4b2bb..770c3a03f9d 100644 --- a/nixos/modules/config/fonts/fontconfig.nix +++ b/nixos/modules/config/fonts/fontconfig.nix @@ -1,7 +1,207 @@ +/* + +NixOS support 2 fontconfig versions, "support" and "latest". + +- "latest" refers to default fontconfig package (pkgs.fontconfig). + configuration files are linked to /etc/fonts/VERSION/conf.d/ +- "support" refers to supportPkg (pkgs."fontconfig_${supportVersion}"). + configuration files are linked to /etc/fonts/conf.d/ + +This module generates a package containing configuration files and link it in /etc/fonts. + +Fontconfig reads files in folder name / file name order, so the number prepended to the configuration file name decide the order of parsing. +Low number means high priority. + +*/ + { config, lib, pkgs, ... }: with lib; +let cfg = config.fonts.fontconfig; + + fcBool = x: "" + (if x then "true" else "false") + ""; + + # 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; + 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" '' + + + + + ${concatStringsSep "\n" (map (font: "${font}") config.fonts.fonts)} + + ${cache} + ${optionalString (pkgs.stdenv.isx86_64 && cfg.cache32Bit) '' + ${cache32} + ''} + + ''; + + # rendering settings configuration file + # priority 10 + renderConf = pkgs.writeText "fc-10-nixos-rendering.conf" '' + + + + + + + + ${fcBool cfg.hinting.enable} + + + ${fcBool cfg.hinting.autohint} + + + hint${cfg.hinting.style} + + + ${fcBool cfg.antialias} + + + ${cfg.subpixel.rgba} + + + lcd${cfg.subpixel.lcdfilter} + + + + ${optionalString (cfg.dpi != 0) '' + + + ${toString cfg.dpi} + + + ''} + + + ''; + + # local configuration file + # priority 51 + localConf = pkgs.writeText "fc-local.conf" cfg.localConf; + + # default fonts configuration file + # priority 52 + defaultFontsConf = + let genDefault = fonts: name: + optionalString (fonts != []) '' + + ${name} + + ${concatStringsSep "" + (map (font: '' + ${font} + '') fonts)} + + + ''; + in + pkgs.writeText "fc-52-nixos-default-fonts.conf" '' + + + + + + ${genDefault cfg.defaultFonts.sansSerif "sans-serif"} + + ${genDefault cfg.defaultFonts.serif "serif"} + + ${genDefault cfg.defaultFonts.monospace "monospace"} + + + ''; + + # fontconfig configuration package + confPkg = pkgs.runCommand "fontconfig-conf" {} '' + support_folder=$out/etc/fonts + latest_folder=$out/etc/fonts/${latestVersion} + + mkdir -p $support_folder/conf.d + mkdir -p $latest_folder/conf.d + + # fonts.conf + ln -s ${supportFontsConf} $support_folder/fonts.conf + ln -s ${latestPkg.out}/etc/fonts/fonts.conf \ + $latest_folder/fonts.conf + + # fontconfig default config files + ln -s ${supportPkg.out}/etc/fonts/conf.d/*.conf \ + $support_folder/conf.d/ + ln -s ${latestPkg.out}/etc/fonts/conf.d/*.conf \ + $latest_folder/conf.d/ + + # update latest 51-local.conf path to look at the latest local.conf + rm $latest_folder/conf.d/51-local.conf + + substitute ${latestPkg.out}/etc/fonts/conf.d/51-local.conf \ + $latest_folder/conf.d/51-local.conf \ + --replace local.conf /etc/fonts/${latestVersion}/local.conf + + # 00-nixos-cache.conf + ln -s ${cacheConfSupport} \ + $support_folder/conf.d/00-nixos-cache.conf + ln -s ${cacheConfLatest} $latest_folder/conf.d/00-nixos-cache.conf + + # 10-nixos-rendering.conf + ln -s ${renderConf} $support_folder/conf.d/10-nixos-rendering.conf + ln -s ${renderConf} $latest_folder/conf.d/10-nixos-rendering.conf + + # 50-user.conf + ${optionalString (! cfg.includeUserConf) '' + rm $support_folder/conf.d/50-user.conf + rm $latest_folder/conf.d/50-user.conf + ''} + + # local.conf (indirect priority 51) + ${optionalString (cfg.localConf != "") '' + ln -s ${localConf} $support_folder/local.conf + ln -s ${localConf} $latest_folder/local.conf + ''} + + # 52-nixos-default-fonts.conf + ln -s ${defaultFontsConf} $support_folder/conf.d/52-nixos-default-fonts.conf + ln -s ${defaultFontsConf} $latest_folder/conf.d/52-nixos-default-fonts.conf + ''; + + # Package with configuration files + # this merge all the packages in the fonts.fontconfig.confPackages list + fontconfigEtc = pkgs.buildEnv { + name = "fontconfig-etc"; + paths = cfg.confPackages; + ignoreCollisions = true; + }; +in { options = { @@ -21,6 +221,15 @@ with lib; ''; }; + confPackages = mkOption { + internal = true; + type = with types; listOf path; + default = [ ]; + description = '' + Fontconfig configuration packages. + ''; + }; + antialias = mkOption { type = types.bool; default = true; @@ -36,6 +245,15 @@ with lib; ''; }; + localConf = mkOption { + type = types.lines; + default = ""; + description = '' + System-wide customization file contents, has higher priority than + defaultFonts settings. + ''; + }; + defaultFonts = { monospace = mkOption { type = types.listOf types.str; @@ -142,136 +360,11 @@ with lib; }; }; + config = mkIf cfg.enable { + fonts.fontconfig.confPackages = [ confPkg ]; - config = - let fontconfig = config.fonts.fontconfig; - fcBool = x: "" + (if x then "true" else "false") + ""; - renderConf = '' - - - - - - - - ${fcBool fontconfig.hinting.enable} - - - ${fcBool fontconfig.hinting.autohint} - - - hint${fontconfig.hinting.style} - - - ${fcBool fontconfig.antialias} - - - ${fontconfig.subpixel.rgba} - - - lcd${fontconfig.subpixel.lcdfilter} - - - - ${optionalString (fontconfig.dpi != 0) '' - - - ${toString fontconfig.dpi} - - - ''} - - - ''; - genericAliasConf = '' - - - - - - ${optionalString (fontconfig.defaultFonts.sansSerif != []) '' - - sans-serif - - ${concatStringsSep "\n" - (map (font: "${font}") - fontconfig.defaultFonts.sansSerif)} - - - ''} - ${optionalString (fontconfig.defaultFonts.serif != []) '' - - serif - - ${concatStringsSep "\n" - (map (font: "${font}") - fontconfig.defaultFonts.serif)} - - - ''} - ${optionalString (fontconfig.defaultFonts.monospace != []) '' - - monospace - - ${concatStringsSep "\n" - (map (font: "${font}") - fontconfig.defaultFonts.monospace)} - - - ''} - - - ''; - in mkIf fontconfig.enable { - - # Fontconfig 2.10 backward compatibility - - # Bring in the default (upstream) fontconfig configuration, only for fontconfig 2.10 - environment.etc."fonts/fonts.conf".source = - pkgs.makeFontsConf { fontconfig = pkgs.fontconfig_210; fontDirectories = config.fonts.fonts; }; - - environment.etc."fonts/conf.d/10-nixos-rendering.conf".text = renderConf; - environment.etc."fonts/conf.d/60-nixos-generic-alias.conf".text = genericAliasConf; - - # Versioned fontconfig > 2.10. Take shared fonts.conf from fontconfig. - # Otherwise specify only font directories. - environment.etc."fonts/${pkgs.fontconfig.configVersion}/fonts.conf".source = - "${pkgs.fontconfig.out}/etc/fonts/fonts.conf"; - - environment.etc."fonts/${pkgs.fontconfig.configVersion}/conf.d/00-nixos.conf".text = - let - cache = fontconfig: pkgs.makeFontsCache { inherit fontconfig; fontDirectories = config.fonts.fonts; }; - in '' - - - - - ${concatStringsSep "\n" (map (font: "${font}") config.fonts.fonts)} - - ${cache pkgs.fontconfig} - ${optionalString (pkgs.stdenv.isx86_64 && config.fonts.fontconfig.cache32Bit) '' - ${cache pkgs.pkgsi686Linux.fontconfig} - ''} - - ''; - - environment.etc."fonts/${pkgs.fontconfig.configVersion}/conf.d/10-nixos-rendering.conf".text = renderConf; - environment.etc."fonts/${pkgs.fontconfig.configVersion}/conf.d/60-nixos-generic-alias.conf".text = genericAliasConf; - - environment.etc."fonts/${pkgs.fontconfig.configVersion}/conf.d/99-user.conf" = { - enable = fontconfig.includeUserConf; - text = '' - - - - fontconfig/conf.d - fontconfig/fonts.conf - - ''; - }; - - environment.systemPackages = [ pkgs.fontconfig ]; - - }; + environment.systemPackages = [ pkgs.fontconfig ]; + environment.etc.fonts.source = "${fontconfigEtc}/etc/fonts/"; + }; } diff --git a/nixos/modules/rename.nix b/nixos/modules/rename.nix index 3f8a770cbce..3caac6c4ee6 100644 --- a/nixos/modules/rename.nix +++ b/nixos/modules/rename.nix @@ -137,6 +137,9 @@ with lib; # Unity3D (mkRenamedOptionModule [ "programs" "unity3d" "enable" ] [ "security" "chromiumSuidSandbox" "enable" ]) + # fontconfig-ultimate + (mkRenamedOptionModule [ "fonts" "fontconfig" "ultimate" "rendering" ] [ "fonts" "fontconfig" "ultimate" "preset" ]) + # Options that are obsolete and have no replacement. (mkRemovedOptionModule [ "boot" "initrd" "luks" "enable" ]) (mkRemovedOptionModule [ "programs" "bash" "enable" ]) diff --git a/pkgs/build-support/fetchurl/mirrors.nix b/pkgs/build-support/fetchurl/mirrors.nix index fec8918cb44..5ae5eb105e7 100644 --- a/pkgs/build-support/fetchurl/mirrors.nix +++ b/pkgs/build-support/fetchurl/mirrors.nix @@ -87,16 +87,44 @@ rec { ]; savannah = [ - ftp://mirror.csclub.uwaterloo.ca/nongnu/ - ftp://mirror.publicns.net/pub/nongnu/ - ftp://savannah.c3sl.ufpr.br/ - http://download.savannah.gnu.org/releases/ - http://ftp.cc.uoc.gr/mirrors/nongnu.org/ - http://ftp.twaren.net/Unix/NonGNU/ - http://mirror.csclub.uwaterloo.ca/nongnu/ - http://nongnu.askapache.com/ + # Mirrors from https://download-mirror.savannah.gnu.org/releases/00_MIRRORS.html + http://mirror.easyname.at/nongnu/ + http://mirror2.klaus-uwe.me/nongnu/ http://savannah.c3sl.ufpr.br/ - http://www.centervenus.com/mirrors/nongnu/ + http://mirror.csclub.uwaterloo.ca/nongnu/ + http://mirror.cedia.org.ec/nongnu/ + http://ftp.igh.cnrs.fr/pub/nongnu/ + http://mirror6.layerjet.com/nongnu + http://mirror.netcologne.de/savannah/ + http://ftp.cc.uoc.gr/mirrors/nongnu.org/ + http://nongnu.uib.no/ + http://mirrors.fe.up.pt/pub/nongnu/ + http://mirror.lihnidos.org/GNU/savannah/ + http://savannah.mirror.si/ + http://ftp.acc.umu.se/mirror/gnu.org/savannah/ + http://ftp.twaren.net/Unix/NonGNU/ + http://ftp.yzu.edu.tw/pub/nongnu/ + http://mirror.rackdc.com/savannah/ + http://savannah-nongnu-org.ip-connect.vn.ua/ + http://www.mirrorservice.org/sites/download.savannah.gnu.org/releases/ + http://savannah.spinellicreations.com/ + http://gnu.mirrors.pair.com/savannah/savannah/ + ftp://mirror.easyname.at/nongnu/ + ftp://mirror2.klaus-uwe.me/nongnu/ + ftp://savannah.c3sl.ufpr.br/savannah-nongnu/ + ftp://mirror.csclub.uwaterloo.ca/nongnu/ + ftp://mirror.cedia.org.ec/nongnu + ftp://ftp.igh.cnrs.fr/pub/nongnu/ + ftp://mirror6.layerjet.com/nongnu/ + ftp://mirror.netcologne.de/savannah/ + ftp://nongnu.uib.no/pub/nongnu/ + ftp://mirrors.fe.up.pt/pub/nongnu/ + ftp://savannah.mirror.si/savannah/ + ftp://ftp.twaren.net/Unix/NonGNU/ + ftp://ftp.yzu.edu.tw/pub/nongnu/ + ftp://savannah-nongnu-org.ip-connect.vn.ua/mirror/savannah.nongnu.org/ + ftp://ftp.mirrorservice.org/sites/download.savannah.gnu.org/releases/ + ftp://spinellicreations.com/gnu_dot_org_savannah_mirror/ ]; samba = [ diff --git a/pkgs/development/libraries/cairo/default.nix b/pkgs/development/libraries/cairo/default.nix index f6f0a0d3af7..1f38f69eb0c 100644 --- a/pkgs/development/libraries/cairo/default.nix +++ b/pkgs/development/libraries/cairo/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, fetchpatch, pkgconfig, libiconv, libintlOrEmpty +{ stdenv, fetchurl, fetchFromGitHub, pkgconfig, libiconv, libintlOrEmpty , expat, zlib, libpng, pixman, fontconfig, freetype, xorg , gobjectSupport ? true, glib , xcbSupport ? true # no longer experimental since 1.12 @@ -19,6 +19,17 @@ stdenv.mkDerivation rec { sha256 = "0lmjlzmghmr27y615px9hkm552x7ap6pmq9mfbzr6smp8y2b6g31"; }; + infinality = fetchFromGitHub { + owner = "bohoomil"; + repo = "fontconfig-ultimate"; + rev = "730f5e77580677e86522c1f2119aa78803741759"; + sha256 = "1hbrdpm6xcczs2c2iid7by8h7dsd0jcf7an88s150njyqnjzxjg7"; + }; + + prePatch = '' + patches="$patches $(echo $infinality/*_cairo-iu/*.patch)" + ''; + outputs = [ "dev" "out" "docdev" ]; outputBin = "dev"; # very small diff --git a/pkgs/development/libraries/fontconfig-ultimate/confd.nix b/pkgs/development/libraries/fontconfig-ultimate/confd.nix deleted file mode 100644 index 160fef5f07e..00000000000 --- a/pkgs/development/libraries/fontconfig-ultimate/confd.nix +++ /dev/null @@ -1,40 +0,0 @@ -{ stdenv, fetchFromGitHub }: - -let version = "2015-12-06"; in -stdenv.mkDerivation { - name = "fontconfig-ultimate-${version}"; - - src = fetchFromGitHub { - sha256 = "02a811szxkq4q088nxfpdzp6rv0brvgkdhwigk09qffygxd776g6"; - rev = version; - repo = "fontconfig-ultimate"; - owner = "bohoomil"; - }; - - phases = "$prePhases unpackPhase installPhase $postPhases"; - - installPhase = '' - mkdir -p $out/etc/fonts/conf.d - cp conf.d.infinality/*.conf $out/etc/fonts/conf.d - - # Base rendering settings will be determined by NixOS module - rm $out/etc/fonts/conf.d/10-base-rendering.conf - - # Options controlled by NixOS module - rm $out/etc/fonts/conf.d/35-repl-custom.conf - rm $out/etc/fonts/conf.d/38-repl-*.conf - rm $out/etc/fonts/conf.d/82-*.conf - rm $out/etc/fonts/conf.d/83-*.conf - - # Inclusion of local and user configs handled by global configuration - rm $out/etc/fonts/conf.d/29-local.conf - rm $out/etc/fonts/conf.d/28-user.conf - - cp fontconfig_patches/fonts-settings/*.conf $out/etc/fonts/conf.d - - mkdir -p $out/etc/fonts/presets/{combi,free,ms} - cp fontconfig_patches/combi/*.conf $out/etc/fonts/presets/combi - cp fontconfig_patches/free/*.conf $out/etc/fonts/presets/free - cp fontconfig_patches/ms/*.conf $out/etc/fonts/presets/ms - ''; -} diff --git a/pkgs/development/libraries/fontconfig-ultimate/default.nix b/pkgs/development/libraries/fontconfig-ultimate/default.nix index aa799d850d7..efef59cad3b 100644 --- a/pkgs/development/libraries/fontconfig-ultimate/default.nix +++ b/pkgs/development/libraries/fontconfig-ultimate/default.nix @@ -1,6 +1,43 @@ -{ callPackage }: +{ stdenv, fetchFromGitHub }: -{ - confd = callPackage ./confd.nix {}; - rendering = callPackage ./rendering.nix {}; +let version = "2016-04-23"; in +stdenv.mkDerivation { + name = "fontconfig-ultimate-${version}"; + + src = fetchFromGitHub { + sha256 = "1rd2n60l8bamx84q3l91pd9a0wz9h7p6ajvx1dw22qn8rah4h498"; + rev = version; + repo = "fontconfig-ultimate"; + owner = "bohoomil"; + }; + + phases = "$prePhases unpackPhase installPhase $postPhases"; + + installPhase = '' + mkdir -p $out/etc/fonts/conf.d + cp conf.d.infinality/*.conf $out/etc/fonts/conf.d + + # Base rendering settings will be determined by NixOS module + rm $out/etc/fonts/conf.d/10-base-rendering.conf + + # Options controlled by NixOS module + rm $out/etc/fonts/conf.d/35-repl-custom.conf + rm $out/etc/fonts/conf.d/38-repl-*.conf + rm $out/etc/fonts/conf.d/82-*.conf + rm $out/etc/fonts/conf.d/83-*.conf + + # Inclusion of local and user configs handled by global configuration + rm $out/etc/fonts/conf.d/29-local.conf + rm $out/etc/fonts/conf.d/28-user.conf + + cp fontconfig_patches/fonts-settings/*.conf $out/etc/fonts/conf.d + + # fix font priority issue https://github.com/bohoomil/fontconfig-ultimate/issues/173 + mv $out/etc/fonts/conf.d/{43,60}-wqy-zenhei-sharp.conf + + mkdir -p $out/etc/fonts/presets/{combi,free,ms} + cp fontconfig_patches/combi/*.conf $out/etc/fonts/presets/combi + cp fontconfig_patches/free/*.conf $out/etc/fonts/presets/free + cp fontconfig_patches/ms/*.conf $out/etc/fonts/presets/ms + ''; } diff --git a/pkgs/development/libraries/fontconfig-ultimate/rendering.nix b/pkgs/development/libraries/fontconfig-ultimate/rendering.nix deleted file mode 100644 index b1de43b49b2..00000000000 --- a/pkgs/development/libraries/fontconfig-ultimate/rendering.nix +++ /dev/null @@ -1,212 +0,0 @@ -{}: - -rec { - default = { - INFINALITY_FT_FILTER_PARAMS="11 22 38 22 11"; - INFINALITY_FT_GRAYSCALE_FILTER_STRENGTH="0"; - INFINALITY_FT_FRINGE_FILTER_STRENGTH="0"; - INFINALITY_FT_AUTOHINT_HORIZONTAL_STEM_DARKEN_STRENGTH="10"; - INFINALITY_FT_AUTOHINT_VERTICAL_STEM_DARKEN_STRENGTH="25"; - INFINALITY_FT_WINDOWS_STYLE_SHARPENING_STRENGTH="10"; - INFINALITY_FT_CHROMEOS_STYLE_SHARPENING_STRENGTH="0"; - INFINALITY_FT_STEM_ALIGNMENT_STRENGTH="25"; - INFINALITY_FT_STEM_FITTING_STRENGTH="25"; - INFINALITY_FT_GAMMA_CORRECTION="0 100"; - INFINALITY_FT_BRIGHTNESS="0"; - INFINALITY_FT_CONTRAST="0"; - INFINALITY_FT_USE_VARIOUS_TWEAKS="true"; - INFINALITY_FT_AUTOHINT_INCREASE_GLYPH_HEIGHTS="true"; - INFINALITY_FT_AUTOHINT_SNAP_STEM_HEIGHT="100"; - INFINALITY_FT_STEM_SNAPPING_SLIDING_SCALE="40"; - INFINALITY_FT_USE_KNOWN_SETTINGS_ON_SELECTED_FONTS="true"; - INFINALITY_FT_GLOBAL_EMBOLDEN_X_VALUE="0"; - INFINALITY_FT_GLOBAL_EMBOLDEN_Y_VALUE="0"; - INFINALITY_FT_BOLD_EMBOLDEN_X_VALUE="0"; - INFINALITY_FT_BOLD_EMBOLDEN_Y_VALUE="0"; - }; - - osx = default // { - INFINALITY_FT_FILTER_PARAMS="03 32 38 32 03"; - INFINALITY_FT_GRAYSCALE_FILTER_STRENGTH="25"; - INFINALITY_FT_WINDOWS_STYLE_SHARPENING_STRENGTH="0"; - INFINALITY_FT_STEM_ALIGNMENT_STRENGTH="0"; - INFINALITY_FT_STEM_FITTING_STRENGTH="0"; - INFINALITY_FT_GAMMA_CORRECTION="1000 80"; - INFINALITY_FT_BRIGHTNESS="10"; - INFINALITY_FT_CONTRAST="20"; - INFINALITY_FT_USE_VARIOUS_TWEAKS="false"; - INFINALITY_FT_AUTOHINT_INCREASE_GLYPH_HEIGHTS="false"; - INFINALITY_FT_AUTOHINT_SNAP_STEM_HEIGHT="0"; - INFINALITY_FT_STEM_SNAPPING_SLIDING_SCALE="0"; - INFINALITY_FT_USE_KNOWN_SETTINGS_ON_SELECTED_FONTS="false"; - INFINALITY_FT_GLOBAL_EMBOLDEN_Y_VALUE="8"; - INFINALITY_FT_BOLD_EMBOLDEN_X_VALUE="16"; - }; - - ipad = default // { - INFINALITY_FT_FILTER_PARAMS="00 00 100 00 00"; - INFINALITY_FT_GRAYSCALE_FILTER_STRENGTH="100"; - INFINALITY_FT_AUTOHINT_HORIZONTAL_STEM_DARKEN_STRENGTH="0"; - INFINALITY_FT_AUTOHINT_VERTICAL_STEM_DARKEN_STRENGTH="0"; - INFINALITY_FT_WINDOWS_STYLE_SHARPENING_STRENGTH="0"; - INFINALITY_FT_STEM_ALIGNMENT_STRENGTH="0"; - INFINALITY_FT_STEM_FITTING_STRENGTH="0"; - INFINALITY_FT_GAMMA_CORRECTION="1000 80"; - INFINALITY_FT_USE_VARIOUS_TWEAKS="false"; - INFINALITY_FT_AUTOHINT_INCREASE_GLYPH_HEIGHTS="false"; - INFINALITY_FT_AUTOHINT_SNAP_STEM_HEIGHT="0"; - INFINALITY_FT_STEM_SNAPPING_SLIDING_SCALE="0"; - INFINALITY_FT_USE_KNOWN_SETTINGS_ON_SELECTED_FONTS="false"; - }; - - ubuntu = default // { - INFINALITY_FT_WINDOWS_STYLE_SHARPENING_STRENGTH="0"; - INFINALITY_FT_STEM_ALIGNMENT_STRENGTH="0"; - INFINALITY_FT_STEM_FITTING_STRENGTH="0"; - INFINALITY_FT_GAMMA_CORRECTION="1000 80"; - INFINALITY_FT_BRIGHTNESS="-10"; - INFINALITY_FT_CONTRAST="15"; - INFINALITY_FT_USE_VARIOUS_TWEAKS="false"; - INFINALITY_FT_AUTOHINT_INCREASE_GLYPH_HEIGHTS="false"; - INFINALITY_FT_AUTOHINT_SNAP_STEM_HEIGHT="0"; - INFINALITY_FT_STEM_SNAPPING_SLIDING_SCALE="0"; - INFINALITY_FT_USE_KNOWN_SETTINGS_ON_SELECTED_FONTS="false"; - }; - - linux = default // { - INFINALITY_FT_FILTER_PARAMS="06 25 44 25 06"; - INFINALITY_FT_WINDOWS_STYLE_SHARPENING_STRENGTH="0"; - INFINALITY_FT_STEM_ALIGNMENT_STRENGTH="0"; - INFINALITY_FT_STEM_FITTING_STRENGTH="0"; - INFINALITY_FT_AUTOHINT_INCREASE_GLYPH_HEIGHTS="false"; - INFINALITY_FT_AUTOHINT_SNAP_STEM_HEIGHT="100"; - INFINALITY_FT_USE_KNOWN_SETTINGS_ON_SELECTED_FONTS="false"; - }; - - winxplight = default // { - INFINALITY_FT_FILTER_PARAMS="06 25 44 25 06"; - INFINALITY_FT_FRINGE_FILTER_STRENGTH="100"; - INFINALITY_FT_WINDOWS_STYLE_SHARPENING_STRENGTH="65"; - INFINALITY_FT_STEM_ALIGNMENT_STRENGTH="15"; - INFINALITY_FT_STEM_FITTING_STRENGTH="15"; - INFINALITY_FT_GAMMA_CORRECTION="1000 120"; - INFINALITY_FT_BRIGHTNESS="20"; - INFINALITY_FT_CONTRAST="30"; - INFINALITY_FT_AUTOHINT_INCREASE_GLYPH_HEIGHTS="false"; - INFINALITY_FT_STEM_SNAPPING_SLIDING_SCALE="30"; - }; - - win7light = default // { - INFINALITY_FT_FILTER_PARAMS="20 25 38 25 05"; - INFINALITY_FT_FRINGE_FILTER_STRENGTH="100"; - INFINALITY_FT_WINDOWS_STYLE_SHARPENING_STRENGTH="100"; - INFINALITY_FT_STEM_ALIGNMENT_STRENGTH="0"; - INFINALITY_FT_STEM_FITTING_STRENGTH="0"; - INFINALITY_FT_GAMMA_CORRECTION="1000 160"; - INFINALITY_FT_CONTRAST="20"; - INFINALITY_FT_AUTOHINT_INCREASE_GLYPH_HEIGHTS="false"; - INFINALITY_FT_STEM_SNAPPING_SLIDING_SCALE="30"; - }; - - winxp = default // { - INFINALITY_FT_FILTER_PARAMS="06 25 44 25 06"; - INFINALITY_FT_FRINGE_FILTER_STRENGTH="100"; - INFINALITY_FT_WINDOWS_STYLE_SHARPENING_STRENGTH="65"; - INFINALITY_FT_STEM_ALIGNMENT_STRENGTH="15"; - INFINALITY_FT_STEM_FITTING_STRENGTH="15"; - INFINALITY_FT_GAMMA_CORRECTION="1000 120"; - INFINALITY_FT_BRIGHTNESS="10"; - INFINALITY_FT_CONTRAST="20"; - INFINALITY_FT_AUTOHINT_INCREASE_GLYPH_HEIGHTS="false"; - INFINALITY_FT_STEM_SNAPPING_SLIDING_SCALE="30"; - }; - - win7 = default // { - INFINALITY_FT_FILTER_PARAMS="20 25 42 25 06"; - INFINALITY_FT_FRINGE_FILTER_STRENGTH="100"; - INFINALITY_FT_WINDOWS_STYLE_SHARPENING_STRENGTH="65"; - INFINALITY_FT_STEM_ALIGNMENT_STRENGTH="0"; - INFINALITY_FT_STEM_FITTING_STRENGTH="0"; - INFINALITY_FT_GAMMA_CORRECTION="1000 120"; - INFINALITY_FT_BRIGHTNESS="10"; - INFINALITY_FT_CONTRAST="20"; - INFINALITY_FT_AUTOHINT_INCREASE_GLYPH_HEIGHTS="false"; - INFINALITY_FT_STEM_SNAPPING_SLIDING_SCALE="0"; - }; - - vanilla = default // { - INFINALITY_FT_FILTER_PARAMS="06 25 38 25 06"; - INFINALITY_FT_AUTOHINT_HORIZONTAL_STEM_DARKEN_STRENGTH="0"; - INFINALITY_FT_AUTOHINT_VERTICAL_STEM_DARKEN_STRENGTH="0"; - INFINALITY_FT_WINDOWS_STYLE_SHARPENING_STRENGTH="0"; - INFINALITY_FT_STEM_ALIGNMENT_STRENGTH="0"; - INFINALITY_FT_STEM_FITTING_STRENGTH="0"; - INFINALITY_FT_USE_VARIOUS_TWEAKS="false"; - INFINALITY_FT_AUTOHINT_INCREASE_GLYPH_HEIGHTS="false"; - INFINALITY_FT_AUTOHINT_SNAP_STEM_HEIGHT="0"; - INFINALITY_FT_STEM_SNAPPING_SLIDING_SCALE="0"; - INFINALITY_FT_USE_KNOWN_SETTINGS_ON_SELECTED_FONTS="false"; - }; - - classic = default // { - INFINALITY_FT_FILTER_PARAMS="06 25 38 25 06"; - INFINALITY_FT_AUTOHINT_HORIZONTAL_STEM_DARKEN_STRENGTH="0"; - INFINALITY_FT_AUTOHINT_VERTICAL_STEM_DARKEN_STRENGTH="0"; - INFINALITY_FT_WINDOWS_STYLE_SHARPENING_STRENGTH="0"; - INFINALITY_FT_STEM_ALIGNMENT_STRENGTH="0"; - INFINALITY_FT_STEM_FITTING_STRENGTH="0"; - INFINALITY_FT_STEM_SNAPPING_SLIDING_SCALE="0"; - INFINALITY_FT_USE_KNOWN_SETTINGS_ON_SELECTED_FONTS="false"; - }; - - nudge = default // { - INFINALITY_FT_WINDOWS_STYLE_SHARPENING_STRENGTH="0"; - INFINALITY_FT_STEM_SNAPPING_SLIDING_SCALE="30"; - INFINALITY_FT_USE_KNOWN_SETTINGS_ON_SELECTED_FONTS="false"; - }; - - push = default // { - INFINALITY_FT_WINDOWS_STYLE_SHARPENING_STRENGTH="0"; - INFINALITY_FT_STEM_ALIGNMENT_STRENGTH="75"; - INFINALITY_FT_STEM_FITTING_STRENGTH="50"; - INFINALITY_FT_STEM_SNAPPING_SLIDING_SCALE="30"; - }; - - infinality = default // { - INFINALITY_FT_WINDOWS_STYLE_SHARPENING_STRENGTH="5"; - }; - - shove = default // { - INFINALITY_FT_WINDOWS_STYLE_SHARPENING_STRENGTH="0"; - INFINALITY_FT_STEM_ALIGNMENT_STRENGTH="100"; - INFINALITY_FT_STEM_FITTING_STRENGTH="100"; - INFINALITY_FT_STEM_SNAPPING_SLIDING_SCALE="0"; - }; - - sharpened = default // { - INFINALITY_FT_WINDOWS_STYLE_SHARPENING_STRENGTH="65"; - }; - - ultimate = { - INFINALITY_FT_FILTER_PARAMS="08 24 36 24 08"; - INFINALITY_FT_FRINGE_FILTER_STRENGTH="50"; - INFINALITY_FT_USE_VARIOUS_TWEAKS="true"; - INFINALITY_FT_CHROMEOS_STYLE_SHARPENING_STRENGTH="20"; - }; - - ultimate-lighter = ultimate // { - INFINALITY_FT_FILTER_PARAMS="06 22 36 22 06"; - }; - - ultimate-lightest = ultimate // { - INFINALITY_FT_FILTER_PARAMS="04 22 38 22 04"; - }; - - ultimate-darker = ultimate // { - INFINALITY_FT_FILTER_PARAMS="10 25 37 25 10"; - }; - - ultimate-darkest = ultimate // { - INFINALITY_FT_FILTER_PARAMS="12 28 42 28 12"; - }; -} diff --git a/pkgs/development/libraries/fontconfig/default.nix b/pkgs/development/libraries/fontconfig/default.nix index 6acf1ebce29..74048afe731 100644 --- a/pkgs/development/libraries/fontconfig/default.nix +++ b/pkgs/development/libraries/fontconfig/default.nix @@ -66,9 +66,7 @@ stdenv.mkDerivation rec { postInstall = '' cd "$out/etc/fonts" - rm conf.d/{50-user,51-local}.conf "${libxslt.bin}/bin/xsltproc" --stringparam fontDirectories "${fontbhttf}" \ - --stringparam fontconfig "$out" \ --stringparam fontconfigConfigVersion "${configVersion}" \ --path $out/share/xml/fontconfig \ ${./make-fonts-conf.xsl} $out/etc/fonts/fonts.conf \ diff --git a/pkgs/development/libraries/fontconfig/make-fonts-conf.xsl b/pkgs/development/libraries/fontconfig/make-fonts-conf.xsl index b59fcd0187b..dddbbe9e516 100644 --- a/pkgs/development/libraries/fontconfig/make-fonts-conf.xsl +++ b/pkgs/development/libraries/fontconfig/make-fonts-conf.xsl @@ -28,8 +28,6 @@ /var/cache/fontconfig - - /etc/fonts/conf.d /etc/fonts//conf.d diff --git a/pkgs/development/libraries/freetype/default.nix b/pkgs/development/libraries/freetype/default.nix index 0548d1433b7..8ef51172f94 100644 --- a/pkgs/development/libraries/freetype/default.nix +++ b/pkgs/development/libraries/freetype/default.nix @@ -1,40 +1,55 @@ -{ stdenv, fetchurl, fetchpatch, pkgconfig, which, zlib, bzip2, libpng, gnumake +{ stdenv, fetchurl, fetchFromGitHub, pkgconfig, which, zlib, bzip2, libpng, gnumake , glib /* passthru only */ # FreeType supports sub-pixel rendering. This is patented by # Microsoft, so it is disabled by default. This option allows it to # be enabled. See http://www.freetype.org/patents.html. , useEncumberedCode ? true +, useInfinality ? true }: -let - version = "2.6.2"; +assert useInfinality -> useEncumberedCode; - # Don't use fetchpatch. It mangles them. That's an hour I'll never get back. - fetchbohoomil = name: sha256: fetchurl { - url = https://raw.githubusercontent.com/bohoomil/fontconfig-ultimate/254b688f96d4a37f78fb594303a43160fc15c7cd/freetype/ + name; - inherit sha256; +let + version = "2.6.5"; + + infinality = fetchFromGitHub { + owner = "archfan"; + repo = "infinality_bundle"; + rev = "5c0949a477bf43d2ac4e57b4fc39bcc3331002ee"; + sha256 = "17389aqm6rlxl4b5mv1fx4b22x2v2n60hfhixfxqxpd8ialsdi6l"; }; + in with { inherit (stdenv.lib) optional optionals optionalString; }; stdenv.mkDerivation rec { name = "freetype-${version}"; src = fetchurl { - url = "mirror://sourceforge/freetype/${name}.tar.bz2"; - sha256 = "14mqrfgl18q2by1yzv6vcxi97zjy4kppcgsqf312mhfwgkpvvxms"; + url = "mirror://savannah/freetype/${name}.tar.bz2"; + sha256 = "1w5c87s4rpx9af5b3mk5cjd1yny3c4dq5p9iv3ixb3vr00a6w2p2"; }; - patches = [] - # mingw: these patches use `strcasestr` which isn't available on windows - ++ optionals (useEncumberedCode && stdenv.cross.libc or null != "msvcrt" ) [ - (fetchbohoomil "01-freetype-2.6.2-enable-valid.patch" - "1szq0zha7n41f4pq179wgfkam034mp2xn0xc36sdl5sjp9s9hv08") - (fetchbohoomil "02-upstream-2015.12.05.patch" - "0781r9n35kpn8db8nma0l47cpkzh0hbp84ziii5sald90dnrqdj4") - (fetchbohoomil "03-infinality-2.6.2-2015.12.05.patch" - "0wcjf9hiymplgqm3szla633i417pb57vpzzs2dyl1dnmcxgqa2y8") - ]; + patches = [ + # Patch for validation of OpenType and GX/AAT tables. + (fetchurl { + name = "freetype-2.2.1-enable-valid.patch"; + url = "http://pkgs.fedoraproject.org/cgit/rpms/freetype.git/plain/freetype-2.2.1-enable-valid.patch?id=9a81147af83b1166a5f301e379f85927cc610990"; + sha256 = "0zkgqhws2s0j8ywksclf391iijhidb1a406zszd7xbdjn28kmj2l"; + }) + ] ++ optionals (!useInfinality && useEncumberedCode) [ + # Patch to enable subpixel rendering. + # See https://www.freetype.org/freetype2/docs/reference/ft2-lcd_filtering.html. + (fetchurl { + name = "freetype-2.3.0-enable-spr.patch"; + url = http://pkgs.fedoraproject.org/cgit/rpms/freetype.git/plain/freetype-2.3.0-enable-spr.patch?id=9a81147af83b1166a5f301e379f85927cc610990; + sha256 = "13ni9n5q3nla38wjmxd4f8cy29gp62kjx2l6y6nqhdyiqp8fz8nd"; + }) + ]; + + prePatch = optionalString useInfinality '' + patches="$patches $(ls ${infinality}/*_freetype2-iu/*-infinality-*.patch)" + ''; outputs = [ "dev" "out" ]; @@ -44,10 +59,8 @@ stdenv.mkDerivation rec { # FreeType requires GNU Make, which is not part of stdenv on FreeBSD. ++ optional (!stdenv.isLinux) gnumake; - configureFlags = "--disable-static --bindir=$(dev)/bin"; + configureFlags = [ "--disable-static" "--bindir=$(dev)/bin" ]; - # from Gentoo, see https://bugzilla.redhat.com/show_bug.cgi?id=506840 - NIX_CFLAGS_COMPILE = "-fno-strict-aliasing"; # The asm for armel is written with the 'asm' keyword. CFLAGS = optionalString stdenv.isArm "-std=gnu99"; @@ -66,7 +79,14 @@ stdenv.mkDerivation rec { meta = with stdenv.lib; { description = "A font rendering engine"; - homepage = http://www.freetype.org/; + longDescription = '' + FreeType is a portable and efficient library for rendering fonts. It + supports TrueType, Type 1, CFF fonts, and WOFF, PCF, FNT, BDF and PFR + fonts. It has a bytecode interpreter and has an automatic hinter called + autofit which can be used instead of hinting instructions included in + fonts. + ''; + homepage = https://www.freetype.org/; license = licenses.gpl2Plus; # or the FreeType License (BSD + advertising clause) #ToDo: encumbered = useEncumberedCode; platforms = platforms.all;