Refactoring: Split fonts.nix into smaller modules
This commit is contained in:
parent
85d5366c10
commit
0cbf0605d2
@ -1,179 +0,0 @@
|
||||
{ config, pkgs, ... }:
|
||||
|
||||
with pkgs.lib;
|
||||
|
||||
###### interface
|
||||
|
||||
let
|
||||
|
||||
options = {
|
||||
|
||||
fonts = {
|
||||
|
||||
enableFontConfig = mkOption { # !!! should be enableFontconfig
|
||||
default = true;
|
||||
description = "
|
||||
If enabled, a Fontconfig configuration file will be built
|
||||
pointing to a set of default fonts. If you don't care about
|
||||
running X11 applications or any other program that uses
|
||||
Fontconfig, you can turn this option off and prevent a
|
||||
dependency on all those fonts.
|
||||
";
|
||||
};
|
||||
|
||||
# Should be moved elsewhere.
|
||||
enableGhostscriptFonts = mkOption {
|
||||
default = false;
|
||||
description = "
|
||||
Whether to add the fonts provided by Ghostscript (such as
|
||||
various URW fonts and the ``Base-14'' Postscript fonts) to the
|
||||
list of system fonts, making them available to X11
|
||||
applications.
|
||||
";
|
||||
};
|
||||
|
||||
enableFontDir = mkOption {
|
||||
default = false;
|
||||
description = "
|
||||
Whether to create a directory with links to all fonts in share -
|
||||
so user can configure vncserver script one time (I mean per-user
|
||||
vncserver, so global service is not a good solution).
|
||||
";
|
||||
};
|
||||
|
||||
# TODO: find another name for it.
|
||||
fonts = mkOption {
|
||||
default = [
|
||||
# - the user's .fonts directory
|
||||
"~/.fonts"
|
||||
# - the user's current profile
|
||||
"~/.nix-profile/lib/X11/fonts"
|
||||
"~/.nix-profile/share/fonts"
|
||||
# - the default profile
|
||||
"/nix/var/nix/profiles/default/lib/X11/fonts"
|
||||
"/nix/var/nix/profiles/default/share/fonts"
|
||||
];
|
||||
description = "
|
||||
List of primary font paths.
|
||||
";
|
||||
apply = list: list ++ [
|
||||
# - a few statically built locations
|
||||
pkgs.xorg.fontbhttf
|
||||
pkgs.xorg.fontbhlucidatypewriter100dpi
|
||||
pkgs.xorg.fontbhlucidatypewriter75dpi
|
||||
pkgs.ttf_bitstream_vera
|
||||
pkgs.freefont_ttf
|
||||
pkgs.liberation_ttf
|
||||
pkgs.xorg.fontbh100dpi
|
||||
pkgs.xorg.fontmiscmisc
|
||||
pkgs.xorg.fontcursormisc
|
||||
]
|
||||
++ optional config.fonts.enableCoreFonts pkgs.corefonts
|
||||
++ optional config.fonts.enableGhostscriptFonts "${pkgs.ghostscript}/share/ghostscript/fonts"
|
||||
++ config.fonts.extraFonts;
|
||||
};
|
||||
|
||||
extraFonts = mkOption {
|
||||
default = [];
|
||||
example = [ pkgs.dejavu_fonts ];
|
||||
description = ''
|
||||
List of packages with additional fonts.
|
||||
'';
|
||||
};
|
||||
|
||||
enableCoreFonts = mkOption {
|
||||
default = false;
|
||||
description = ''
|
||||
Whether to include Microsoft's proprietary Core Fonts. These fonts
|
||||
are redistributable, but only verbatim, among other restrictions.
|
||||
See <link xlink:href="http://corefonts.sourceforge.net/eula.htm"/>
|
||||
for details.
|
||||
'';
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
};
|
||||
in
|
||||
|
||||
###### implementation
|
||||
let
|
||||
inherit (pkgs) builderDefs;
|
||||
inherit (pkgs.xorg) mkfontdir mkfontscale fontalias;
|
||||
|
||||
fontDirs = config.fonts.fonts;
|
||||
|
||||
|
||||
localDefs = with builderDefs; builderDefs.passthru.function rec {
|
||||
src = "";/* put a fetchurl here */
|
||||
|
||||
buildInputs = [mkfontdir mkfontscale];
|
||||
configureFlags = [];
|
||||
inherit fontDirs;
|
||||
installPhase = fullDepEntry ("
|
||||
list='';
|
||||
for i in ${toString fontDirs} ; do
|
||||
if [ -d \$i/ ]; then
|
||||
list=\"\$list \$i\";
|
||||
fi;
|
||||
done
|
||||
list=\$(find \$list -name fonts.dir -o -name '*.ttf' -o -name '*.otf');
|
||||
fontDirs='';
|
||||
for i in \$list ; do
|
||||
fontDirs=\"\$fontDirs \$(dirname \$i)\";
|
||||
done;
|
||||
mkdir -p \$out/share/X11-fonts/;
|
||||
find \$fontDirs -type f -o -type l | while read i; do
|
||||
j=\"\${i##*/}\"
|
||||
if ! test -e \"\$out/share/X11-fonts/\${j}\"; then
|
||||
ln -s \"\$i\" \"\$out/share/X11-fonts/\${j}\";
|
||||
fi;
|
||||
done;
|
||||
cd \$out/share/X11-fonts/
|
||||
rm fonts.dir
|
||||
rm fonts.scale
|
||||
rm fonts.alias
|
||||
mkfontdir
|
||||
mkfontscale
|
||||
cat \$( find ${fontalias}/ -name fonts.alias) >fonts.alias
|
||||
") ["minInit" "addInputs"];
|
||||
};
|
||||
|
||||
x11Fonts = with localDefs; stdenv.mkDerivation rec {
|
||||
name = "X11-fonts";
|
||||
builder = writeScript (name + "-builder")
|
||||
(textClosure localDefs
|
||||
[installPhase doForceShare doPropagate]);
|
||||
meta = {
|
||||
description = "
|
||||
Directory to contain all X11 fonts requested.
|
||||
";
|
||||
};
|
||||
};
|
||||
|
||||
in
|
||||
|
||||
{
|
||||
require = [options];
|
||||
|
||||
system.build.x11Fonts = x11Fonts;
|
||||
|
||||
environment.etc = mkIf config.fonts.enableFontConfig
|
||||
[ { # Configuration file for fontconfig used to locate
|
||||
# (X11) client-rendered fonts.
|
||||
source = pkgs.makeFontsConf {
|
||||
fontDirectories = config.fonts.fonts;
|
||||
};
|
||||
target = "fonts/fonts.conf";
|
||||
}
|
||||
];
|
||||
|
||||
environment.shellInit =
|
||||
''
|
||||
export FONTCONFIG_FILE=/etc/fonts/fonts.conf
|
||||
'';
|
||||
|
||||
environment.systemPackages =
|
||||
optional config.fonts.enableFontDir config.system.build.x11Fonts ++
|
||||
optional config.fonts.enableFontConfig pkgs.fontconfig;
|
||||
}
|
32
modules/config/fonts/corefonts.nix
Normal file
32
modules/config/fonts/corefonts.nix
Normal file
@ -0,0 +1,32 @@
|
||||
{ config, pkgs, ... }:
|
||||
|
||||
with pkgs.lib;
|
||||
|
||||
{
|
||||
|
||||
options = {
|
||||
|
||||
fonts = {
|
||||
|
||||
enableCoreFonts = mkOption {
|
||||
default = false;
|
||||
description = ''
|
||||
Whether to include Microsoft's proprietary Core Fonts. These fonts
|
||||
are redistributable, but only verbatim, among other restrictions.
|
||||
See <link xlink:href="http://corefonts.sourceforge.net/eula.htm"/>
|
||||
for details.
|
||||
'';
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
|
||||
config = mkIf config.fonts.enableCoreFonts {
|
||||
|
||||
fonts.extraFonts = [ pkgs.corefonts ];
|
||||
|
||||
};
|
||||
|
||||
}
|
45
modules/config/fonts/fontconfig.nix
Normal file
45
modules/config/fonts/fontconfig.nix
Normal file
@ -0,0 +1,45 @@
|
||||
{ config, pkgs, ... }:
|
||||
|
||||
with pkgs.lib;
|
||||
|
||||
{
|
||||
|
||||
options = {
|
||||
|
||||
fonts = {
|
||||
|
||||
enableFontConfig = mkOption { # !!! should be enableFontconfig
|
||||
default = true;
|
||||
description = ''
|
||||
If enabled, a Fontconfig configuration file will be built
|
||||
pointing to a set of default fonts. If you don't care about
|
||||
running X11 applications or any other program that uses
|
||||
Fontconfig, you can turn this option off and prevent a
|
||||
dependency on all those fonts.
|
||||
'';
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
|
||||
config = mkIf config.fonts.enableFontConfig {
|
||||
|
||||
# Bring in the default (upstream) fontconfig configuration.
|
||||
environment.etc."fonts/fonts.conf".source =
|
||||
pkgs.makeFontsConf { fontDirectories = config.fonts.fonts; };
|
||||
|
||||
environment.shellInit =
|
||||
''
|
||||
# FIXME: This variable is no longer needed, but we'll keep it
|
||||
# around for a while for applications linked against old
|
||||
# fontconfig builds.
|
||||
export FONTCONFIG_FILE=/etc/fonts/fonts.conf
|
||||
'';
|
||||
|
||||
environment.systemPackages = [ pkgs.fontconfig ];
|
||||
|
||||
};
|
||||
|
||||
}
|
75
modules/config/fonts/fontdir.nix
Normal file
75
modules/config/fonts/fontdir.nix
Normal file
@ -0,0 +1,75 @@
|
||||
{ config, pkgs, ... }:
|
||||
|
||||
with pkgs.lib;
|
||||
|
||||
let
|
||||
|
||||
fontDirs = config.fonts.fonts;
|
||||
|
||||
localDefs = with pkgs.builderDefs; pkgs.builderDefs.passthru.function rec {
|
||||
src = "";/* put a fetchurl here */
|
||||
buildInputs = [pkgs.xorg.mkfontdir pkgs.xorg.mkfontscale];
|
||||
inherit fontDirs;
|
||||
installPhase = fullDepEntry ("
|
||||
list='';
|
||||
for i in ${toString fontDirs} ; do
|
||||
if [ -d \$i/ ]; then
|
||||
list=\"\$list \$i\";
|
||||
fi;
|
||||
done
|
||||
list=\$(find \$list -name fonts.dir -o -name '*.ttf' -o -name '*.otf');
|
||||
fontDirs='';
|
||||
for i in \$list ; do
|
||||
fontDirs=\"\$fontDirs \$(dirname \$i)\";
|
||||
done;
|
||||
mkdir -p \$out/share/X11-fonts/;
|
||||
find \$fontDirs -type f -o -type l | while read i; do
|
||||
j=\"\${i##*/}\"
|
||||
if ! test -e \"\$out/share/X11-fonts/\${j}\"; then
|
||||
ln -s \"\$i\" \"\$out/share/X11-fonts/\${j}\";
|
||||
fi;
|
||||
done;
|
||||
cd \$out/share/X11-fonts/
|
||||
rm fonts.dir
|
||||
rm fonts.scale
|
||||
rm fonts.alias
|
||||
mkfontdir
|
||||
mkfontscale
|
||||
cat \$( find ${pkgs.xorg.fontalias}/ -name fonts.alias) >fonts.alias
|
||||
") ["minInit" "addInputs"];
|
||||
};
|
||||
|
||||
x11Fonts = with localDefs; stdenv.mkDerivation rec {
|
||||
name = "X11-fonts";
|
||||
builder = writeScript (name + "-builder")
|
||||
(textClosure localDefs
|
||||
[installPhase doForceShare doPropagate]);
|
||||
};
|
||||
|
||||
in
|
||||
|
||||
{
|
||||
|
||||
options = {
|
||||
|
||||
fonts = {
|
||||
|
||||
enableFontDir = mkOption {
|
||||
default = false;
|
||||
description = ''
|
||||
Whether to create a directory with links to all fonts in
|
||||
<filename>/run/current-system/sw/share/X11-fonts</filename>.
|
||||
'';
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
config = mkIf config.fonts.enableFontDir {
|
||||
|
||||
environment.systemPackages = [ x11Fonts ];
|
||||
|
||||
};
|
||||
|
||||
}
|
49
modules/config/fonts/fonts.nix
Normal file
49
modules/config/fonts/fonts.nix
Normal file
@ -0,0 +1,49 @@
|
||||
{ config, pkgs, ... }:
|
||||
|
||||
with pkgs.lib;
|
||||
|
||||
{
|
||||
|
||||
options = {
|
||||
|
||||
fonts = {
|
||||
|
||||
# TODO: find another name for it.
|
||||
fonts = mkOption {
|
||||
default = [
|
||||
# - the user's .fonts directory
|
||||
"~/.fonts"
|
||||
# - the user's current profile
|
||||
"~/.nix-profile/lib/X11/fonts"
|
||||
"~/.nix-profile/share/fonts"
|
||||
# - the default profile
|
||||
"/nix/var/nix/profiles/default/lib/X11/fonts"
|
||||
"/nix/var/nix/profiles/default/share/fonts"
|
||||
];
|
||||
description = "List of primary font paths.";
|
||||
apply = list: list ++ [
|
||||
# - a few statically built locations
|
||||
pkgs.xorg.fontbhttf
|
||||
pkgs.xorg.fontbhlucidatypewriter100dpi
|
||||
pkgs.xorg.fontbhlucidatypewriter75dpi
|
||||
pkgs.ttf_bitstream_vera
|
||||
pkgs.freefont_ttf
|
||||
pkgs.liberation_ttf
|
||||
pkgs.xorg.fontbh100dpi
|
||||
pkgs.xorg.fontmiscmisc
|
||||
pkgs.xorg.fontcursormisc
|
||||
]
|
||||
++ config.fonts.extraFonts;
|
||||
};
|
||||
|
||||
extraFonts = mkOption {
|
||||
default = [];
|
||||
example = [ pkgs.dejavu_fonts ];
|
||||
description = "List of packages with additional fonts.";
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
}
|
32
modules/config/fonts/ghostscript.nix
Normal file
32
modules/config/fonts/ghostscript.nix
Normal file
@ -0,0 +1,32 @@
|
||||
{ config, pkgs, ... }:
|
||||
|
||||
with pkgs.lib;
|
||||
|
||||
{
|
||||
|
||||
options = {
|
||||
|
||||
fonts = {
|
||||
|
||||
enableGhostscriptFonts = mkOption {
|
||||
default = false;
|
||||
description = ''
|
||||
Whether to add the fonts provided by Ghostscript (such as
|
||||
various URW fonts and the “Base-14” Postscript fonts) to the
|
||||
list of system fonts, making them available to X11
|
||||
applications.
|
||||
'';
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
|
||||
config = mkIf config.fonts.enableGhostscriptFonts {
|
||||
|
||||
fonts.extraFonts = [ "${pkgs.ghostscript}/share/ghostscript/fonts" ];
|
||||
|
||||
};
|
||||
|
||||
}
|
@ -1,4 +1,9 @@
|
||||
[ ./config/fonts.nix
|
||||
[
|
||||
./config/fonts/corefonts.nix
|
||||
./config/fonts/fontconfig.nix
|
||||
./config/fonts/fontdir.nix
|
||||
./config/fonts/fonts.nix
|
||||
./config/fonts/ghostscript.nix
|
||||
./config/gnu.nix
|
||||
./config/i18n.nix
|
||||
./config/krb5.nix
|
||||
|
Loading…
Reference in New Issue
Block a user