Merge pull request #201951 from laalsaas/noto-fonts

This commit is contained in:
Sandro 2023-01-03 16:54:47 +01:00 committed by GitHub
commit 2bd27f69f7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 131 additions and 85 deletions

View file

@ -32,7 +32,7 @@ let
inherit (lib) inherit (lib)
getBin optionalString literalExpression getBin optionalString literalExpression
mkRemovedOptionModule mkRenamedOptionModule mkRemovedOptionModule mkRenamedOptionModule
mkDefault mkIf mkMerge mkOption types; mkDefault mkIf mkMerge mkOption mkPackageOption types;
ini = pkgs.formats.ini { }; ini = pkgs.formats.ini { };
@ -198,6 +198,11 @@ in
example = literalExpression "[ pkgs.plasma5Packages.oxygen ]"; example = literalExpression "[ pkgs.plasma5Packages.oxygen ]";
}; };
notoPackage = mkPackageOption pkgs "Noto fonts" {
default = [ "noto-fonts" ];
example = "noto-fonts-lgc-plus";
};
# Internally allows configuring kdeglobals globally # Internally allows configuring kdeglobals globally
kdeglobals = mkOption { kdeglobals = mkOption {
internal = true; internal = true;
@ -401,7 +406,7 @@ in
# Enable GTK applications to load SVG icons # Enable GTK applications to load SVG icons
services.xserver.gdk-pixbuf.modulePackages = [ pkgs.librsvg ]; services.xserver.gdk-pixbuf.modulePackages = [ pkgs.librsvg ];
fonts.fonts = with pkgs; [ noto-fonts hack-font ]; fonts.fonts = with pkgs; [ cfg.notoPackage hack-font ];
fonts.fontconfig.defaultFonts = { fonts.fontconfig.defaultFonts = {
monospace = [ "Hack" "Noto Sans Mono" ]; monospace = [ "Hack" "Noto Sans Mono" ];
sansSerif = [ "Noto Sans" ]; sansSerif = [ "Noto Sans" ];

View file

@ -11,21 +11,43 @@
, imagemagick , imagemagick
, zopfli , zopfli
, buildPackages , buildPackages
, variants ? [ ]
}: }:
let let
mkNoto = { pname, weights }: notoLongDescription = ''
stdenvNoCC.mkDerivation { When text is rendered by a computer, sometimes characters are
displayed as tofu. They are little boxes to indicate your device
doesnt have a font to display the text.
Google has been developing a font family called Noto, which aims to
support all languages with a harmonious look and feel. Noto is
Googles answer to tofu. The name noto is to convey the idea that
Googles goal is to see no more tofu. Noto has multiple styles and
weights, and freely available to all.
This package also includes the Arimo, Cousine, and Tinos fonts.
'';
in
rec {
mkNoto =
{ pname
, weights
, variants ? [ ]
, longDescription ? notoLongDescription
}:
stdenvNoCC.mkDerivation rec {
inherit pname; inherit pname;
version = "2020-01-23"; version = "20201206-phase3";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "googlefonts"; owner = "googlefonts";
repo = "noto-fonts"; repo = "noto-fonts";
rev = "f4726a2ec36169abd02a6d8abe67c8ff0236f6d8"; rev = "v${version}";
sha256 = "0zc1r7zph62qmvzxqfflsprazjf6x1qnwc2ma27kyzh6v36gaykw"; hash = "sha256-x60RvCRFLoGe0CNvswROnDkIsUFbWH+/laN8q2qkUPk=";
}; };
_variants = map (variant: builtins.replaceStrings [ " " ] [ "" ] variant) variants;
installPhase = '' installPhase = ''
# We copy in reverse preference order -- unhinted first, then # We copy in reverse preference order -- unhinted first, then
# hinted -- to get the "best" version of each font while # hinted -- to get the "best" version of each font while
@ -33,29 +55,24 @@ let
# #
# TODO: install OpenType, variable versions? # TODO: install OpenType, variable versions?
local out_ttf=$out/share/fonts/truetype/noto local out_ttf=$out/share/fonts/truetype/noto
install -m444 -Dt $out_ttf phaseIII_only/unhinted/ttf/*/*-${weights}.ttf '' + (if _variants == [ ] then ''
install -m444 -Dt $out_ttf phaseIII_only/hinted/ttf/*/*-${weights}.ttf install -m444 -Dt $out_ttf archive/unhinted/*/*-${weights}.ttf
install -m444 -Dt $out_ttf unhinted/*/*-${weights}.ttf install -m444 -Dt $out_ttf archive/hinted/*/*-${weights}.ttf
install -m444 -Dt $out_ttf hinted/*/*-${weights}.ttf install -m444 -Dt $out_ttf unhinted/*/*/*-${weights}.ttf
''; install -m444 -Dt $out_ttf hinted/*/*/*-${weights}.ttf
'' else ''
for variant in $_variants; do
install -m444 -Dt $out_ttf archive/unhinted/$variant/*-${weights}.ttf
install -m444 -Dt $out_ttf archive/hinted/$variant/*-${weights}.ttf
install -m444 -Dt $out_ttf unhinted/*/$variant/*-${weights}.ttf
install -m444 -Dt $out_ttf hinted/*/$variant/*-${weights}.ttf
done
'');
meta = with lib; { meta = with lib; {
description = "Beautiful and free fonts for many languages"; description = "Beautiful and free fonts for many languages";
homepage = "https://www.google.com/get/noto/"; homepage = "https://www.google.com/get/noto/";
longDescription = inherit longDescription;
''
When text is rendered by a computer, sometimes characters are
displayed as tofu. They are little boxes to indicate your device
doesnt have a font to display the text.
Google has been developing a font family called Noto, which aims to
support all languages with a harmonious look and feel. Noto is
Googles answer to tofu. The name noto is to convey the idea that
Googles goal is to see no more tofu. Noto has multiple styles and
weights, and freely available to all.
This package also includes the Arimo, Cousine, and Tinos fonts.
'';
license = licenses.ofl; license = licenses.ofl;
platforms = platforms.all; platforms = platforms.all;
maintainers = with maintainers; [ mathnerd314 emily ]; maintainers = with maintainers; [ mathnerd314 emily ];
@ -100,14 +117,34 @@ let
maintainers = with maintainers; [ mathnerd314 emily ]; maintainers = with maintainers; [ mathnerd314 emily ];
}; };
}; };
in
{
noto-fonts = mkNoto { noto-fonts = mkNoto {
pname = "noto-fonts"; pname = "noto-fonts";
weights = "{Regular,Bold,Light,Italic,BoldItalic,LightItalic}"; weights = "{Regular,Bold,Light,Italic,BoldItalic,LightItalic}";
}; };
noto-fonts-lgc-plus = mkNoto {
pname = "noto-fonts-lgc-plus";
weights = "{Regular,Bold,Light,Italic,BoldItalic,LightItalic}";
variants = [
"Noto Sans"
"Noto Serif"
"Noto Sans Display"
"Noto Serif Display"
"Noto Sans Mono"
"Noto Music"
"Noto Sans Symbols"
"Noto Sans Symbols 2"
"Noto Sans Math"
];
longDescription = ''
This package provides the Noto Fonts, but only for latin, greek
and cyrillic scripts, as well as some extra fonts. To create a
custom Noto package with custom variants, see the `mkNoto`
helper function.
'';
};
noto-fonts-extra = mkNoto { noto-fonts-extra = mkNoto {
pname = "noto-fonts-extra"; pname = "noto-fonts-extra";
weights = "{Black,Condensed,Extra,Medium,Semi,Thin}*"; weights = "{Black,Condensed,Extra,Medium,Semi,Thin}*";
@ -127,65 +164,67 @@ in
sha256 = "sha256-1w66Ge7DZjbONGhxSz69uFhfsjMsDiDkrGl6NsoB7dY="; sha256 = "sha256-1w66Ge7DZjbONGhxSz69uFhfsjMsDiDkrGl6NsoB7dY=";
}; };
noto-fonts-emoji = let noto-fonts-emoji =
version = "2.038"; let
emojiPythonEnv = version = "2.038";
buildPackages.python3.withPackages (p: with p; [ fonttools nototools ]); emojiPythonEnv =
in stdenvNoCC.mkDerivation { buildPackages.python3.withPackages (p: with p; [ fonttools nototools ]);
pname = "noto-fonts-emoji"; in
inherit version; stdenvNoCC.mkDerivation {
pname = "noto-fonts-emoji";
inherit version;
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "googlefonts"; owner = "googlefonts";
repo = "noto-emoji"; repo = "noto-emoji";
rev = "v${version}"; rev = "v${version}";
sha256 = "1rgmcc6nqq805iqr8kvxxlk5cf50q714xaxk3ld6rjrd69kb8ix9"; sha256 = "1rgmcc6nqq805iqr8kvxxlk5cf50q714xaxk3ld6rjrd69kb8ix9";
};
depsBuildBuild = [
buildPackages.stdenv.cc
pkg-config
cairo
];
nativeBuildInputs = [
imagemagick
zopfli
pngquant
which
emojiPythonEnv
];
postPatch = ''
patchShebangs *.py
patchShebangs third_party/color_emoji/*.py
# remove check for virtualenv, since we handle
# python requirements using python.withPackages
sed -i '/ifndef VIRTUAL_ENV/,+2d' Makefile
# Make the build verbose so it won't get culled by Hydra thinking that
# it somehow got stuck doing nothing.
sed -i 's;\t@;\t;' Makefile
'';
enableParallelBuilding = true;
installPhase = ''
runHook preInstall
mkdir -p $out/share/fonts/noto
cp NotoColorEmoji.ttf $out/share/fonts/noto
runHook postInstall
'';
meta = with lib; {
description = "Color and Black-and-White emoji fonts";
homepage = "https://github.com/googlefonts/noto-emoji";
license = with licenses; [ ofl asl20 ];
platforms = platforms.all;
maintainers = with maintainers; [ mathnerd314 sternenseemann ];
};
}; };
depsBuildBuild = [
buildPackages.stdenv.cc
pkg-config
cairo
];
nativeBuildInputs = [
imagemagick
zopfli
pngquant
which
emojiPythonEnv
];
postPatch = ''
patchShebangs *.py
patchShebangs third_party/color_emoji/*.py
# remove check for virtualenv, since we handle
# python requirements using python.withPackages
sed -i '/ifndef VIRTUAL_ENV/,+2d' Makefile
# Make the build verbose so it won't get culled by Hydra thinking that
# it somehow got stuck doing nothing.
sed -i 's;\t@;\t;' Makefile
'';
enableParallelBuilding = true;
installPhase = ''
runHook preInstall
mkdir -p $out/share/fonts/noto
cp NotoColorEmoji.ttf $out/share/fonts/noto
runHook postInstall
'';
meta = with lib; {
description = "Color and Black-and-White emoji fonts";
homepage = "https://github.com/googlefonts/noto-emoji";
license = with licenses; [ ofl asl20 ];
platforms = platforms.all;
maintainers = with maintainers; [ mathnerd314 sternenseemann ];
};
};
noto-fonts-emoji-blob-bin = noto-fonts-emoji-blob-bin =
let let
pname = "noto-fonts-emoji-blob-bin"; pname = "noto-fonts-emoji-blob-bin";

View file

@ -27038,7 +27038,9 @@ with pkgs;
nordzy-icon-theme = callPackage ../data/icons/nordzy-icon-theme { }; nordzy-icon-theme = callPackage ../data/icons/nordzy-icon-theme { };
inherit (callPackages ../data/fonts/noto-fonts {}) inherit (callPackages ../data/fonts/noto-fonts {})
mkNoto
noto-fonts noto-fonts
noto-fonts-lgc-plus
noto-fonts-cjk-sans noto-fonts-cjk-sans
noto-fonts-cjk-serif noto-fonts-cjk-serif
noto-fonts-emoji noto-fonts-emoji