Skip to content

Commit

Permalink
nixos/fontconfig: stop generating fontconfig_210 config and cache
Browse files Browse the repository at this point in the history
This fontconfig version isn't used anywhere inside nixpkgs anymore.
  • Loading branch information
flokli committed Aug 12, 2020
1 parent e23ed2c commit f527651
Showing 1 changed file with 27 additions and 61 deletions.
88 changes: 27 additions & 61 deletions nixos/modules/config/fonts/fontconfig.nix
Original file line number Diff line number Diff line change
@@ -1,11 +1,6 @@
/*
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/
Configuration files are linked to /etc/fonts/${pkgs.fontconfig.configVersion}/conf.d/
This module generates a package containing configuration files and link it in /etc/fonts.
Expand All @@ -22,40 +17,21 @@ let
cfg = config.fonts.fontconfig;

fcBool = x: "<bool>" + (boolToString x) + "</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;
latestPkg = pkgs.fontconfig;

# supported version fonts.conf
supportFontsConf = pkgs.makeFontsConf { fontconfig = supportPkg; fontDirectories = config.fonts.fonts; };
pkg = pkgs.fontconfig;

# configuration file to read fontconfig cache
# version dependent
# priority 0
cacheConfSupport = makeCacheConf { version = supportVersion; };
cacheConfLatest = makeCacheConf {};
cacheConf = makeCacheConf {};

# generate the font cache setting file for a fontconfig version
# use latest when no version is passed
# generate the font cache setting file
# When cross-compiling, we can’t generate the cache, so we skip the
# <cachedir> part. fontconfig still works but is a little slower in
# looking things up.
makeCacheConf = { version ? null }:
makeCacheConf = { }:
let
fcPackage = if version == null
then "fontconfig"
else "fontconfig_${version}";
makeCache = fontconfig: pkgs.makeFontsCache { inherit fontconfig; fontDirectories = config.fonts.fonts; };
cache = makeCache pkgs.${fcPackage};
cache32 = makeCache pkgs.pkgsi686Linux.${fcPackage};
cache = makeCache pkgs.fontconfig;
cache32 = makeCache pkgs.pkgsi686Linux.fontconfig;
in
pkgs.writeText "fc-00-nixos-cache.conf" ''
<?xml version='1.0'?>
Expand Down Expand Up @@ -200,59 +176,49 @@ let
confPkg = pkgs.runCommand "fontconfig-conf" {
preferLocalBuild = true;
} ''
support_folder=$out/etc/fonts/conf.d
latest_folder=$out/etc/fonts/${latestVersion}/conf.d
mkdir -p $support_folder
mkdir -p $latest_folder
dst=$out/etc/fonts/${pkg.configVersion}/conf.d
mkdir -p $dst
# fonts.conf
ln -s ${supportFontsConf} $support_folder/../fonts.conf
ln -s ${latestPkg.out}/etc/fonts/fonts.conf \
$latest_folder/../fonts.conf
ln -s ${pkg.out}/etc/fonts/fonts.conf \
$dst/../fonts.conf
# fontconfig default config files
ln -s ${supportPkg.out}/etc/fonts/conf.d/*.conf \
$support_folder/
# Latest fontconfig is configured to look for the upstream defaults inside the package.
ln -s ${pkg.out}/etc/fonts/conf.d/*.conf \
$dst/
# update 51-local.conf path to look at local.conf
rm $dst/51-local.conf
substitute ${pkg.out}/etc/fonts/conf.d/51-local.conf \
$dst/51-local.conf \
--replace local.conf /etc/fonts/${pkg.configVersion}/local.conf
# 00-nixos-cache.conf
ln -s ${cacheConfSupport} \
$support_folder/00-nixos-cache.conf
ln -s ${cacheConfLatest} $latest_folder/00-nixos-cache.conf
ln -s ${cacheConf} $dst/00-nixos-cache.conf
# 10-nixos-rendering.conf
ln -s ${renderConf} $support_folder/10-nixos-rendering.conf
ln -s ${renderConf} $latest_folder/10-nixos-rendering.conf
ln -s ${renderConf} $dst/10-nixos-rendering.conf
# 50-user.conf
${optionalString (!cfg.includeUserConf) ''
rm $support_folder/50-user.conf
''}
# Since latest fontconfig looks for default files inside the package,
# we had to move this one elsewhere to be able to exclude it here.
${optionalString cfg.includeUserConf ''
ln -s ${latestPkg.out}/etc/fonts/conf.d.bak/50-user.conf $latest_folder/50-user.conf
rm $dst/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
ln -s ${localConf} $dst/../local.conf
''}
# 52-nixos-default-fonts.conf
ln -s ${defaultFontsConf} $support_folder/52-nixos-default-fonts.conf
ln -s ${defaultFontsConf} $latest_folder/52-nixos-default-fonts.conf
ln -s ${defaultFontsConf} $dst/52-nixos-default-fonts.conf
# 53-no-bitmaps.conf
ln -s ${rejectBitmaps} $support_folder/53-no-bitmaps.conf
ln -s ${rejectBitmaps} $latest_folder/53-no-bitmaps.conf
ln -s ${rejectBitmaps} $dst/53-no-bitmaps.conf
${optionalString (!cfg.allowType1) ''
# 53-nixos-reject-type1.conf
ln -s ${rejectType1} $support_folder/53-nixos-reject-type1.conf
ln -s ${rejectType1} $latest_folder/53-nixos-reject-type1.conf
ln -s ${rejectType1} $dst/53-nixos-reject-type1.conf
''}
'';

Expand Down

2 comments on commit f527651

@aszlig
Copy link
Member

@aszlig aszlig commented on f527651 Aug 13, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@flokli: Bisected and Chromium apparently still needs it:

[885:885:0813/133543.148096:FATAL:platform_font_skia.cc(97)] Check failed: InitDefaultFont(). Could not find the default font
#0 0x5635268e9e99 base::debug::CollectStackTrace()
#1 0x56352684ff13 base::debug::StackTrace::StackTrace()
#2 0x56352685da00 logging::LogMessage::~LogMessage()
#3 0x56352685e2ae logging::LogMessage::~LogMessage()
#4 0x5635271b0aff gfx::PlatformFontSkia::PlatformFontSkia()
#5 0x5635271b261b gfx::PlatformFont::CreateDefault()
#6 0x56352719bbae gfx::Font::Font()
#7 0x56352719c5d0 gfx::FontList::GetDefaultImpl()
#8 0x56352719c4be gfx::FontList::FontList()
#9 0x563526c44142 ui::ResourceBundle::GetFontListWithTypefaceAndDelta()
#10 0x563528f0ef0b ChromeTypographyProvider::GetFont()
#11 0x563528fab5dd StatusBubbleViews::Reposition()
#12 0x563528f1fe58 BrowserView::BrowserView()
#13 0x563528f299ef BrowserWindow::CreateBrowserWindow()
#14 0x563528e4519e Browser::Browser()
#15 0x563528e80ad1 StartupBrowserCreatorImpl::OpenTabsInBrowser()
#16 0x563528e81885 StartupBrowserCreatorImpl::RestoreOrCreateBrowser()
#17 0x563528e807ca StartupBrowserCreatorImpl::DetermineURLsAndLaunch()
#18 0x563528e7ff73 StartupBrowserCreatorImpl::Launch()
#19 0x563528e7ca32 StartupBrowserCreator::LaunchBrowser()
#20 0x563528e7c7a9 StartupBrowserCreator::ProcessCmdLineImpl()
#21 0x563528e7be9e StartupBrowserCreator::Start()
#22 0x5635267624b5 ChromeBrowserMainParts::PreMainMessageLoopRunImpl()
#23 0x563526761509 ChromeBrowserMainParts::PreMainMessageLoopRun()
#24 0x563524864194 content::BrowserMainLoop::PreMainMessageLoopRun()
#25 0x563524cfaa33 content::StartupTaskRunner::RunAllTasksNow()
#26 0x563524862eda content::BrowserMainLoop::CreateStartupTasks()
#27 0x5635248660c1 content::BrowserMainRunnerImpl::Initialize()
#28 0x56352486136d content::BrowserMain()
#29 0x563526399110 content::ContentMainRunnerImpl::RunServiceManager()
#30 0x563526398db7 content::ContentMainRunnerImpl::Run()
#31 0x5635264015bf service_manager::Main()
#32 0x563526397011 content::ContentMain()
#33 0x5635238d9d2e ChromeMain
#34 0x7ff9da8d8c7d __libc_start_main
#35 0x5635238d9b8a _start

@flokli
Copy link
Contributor Author

@flokli flokli commented on f527651 Aug 13, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

replied in #95319 (comment).

Please sign in to comment.