2018-09-30 11:22:24 +00:00
|
|
|
{ config, lib, pkgs, ... }:
|
|
|
|
|
|
|
|
with lib;
|
|
|
|
|
|
|
|
let
|
|
|
|
cfg = config.fonts;
|
2019-02-17 10:21:12 +00:00
|
|
|
in
|
|
|
|
|
|
|
|
{
|
2022-04-19 14:30:52 +00:00
|
|
|
imports = [
|
|
|
|
(mkRenamedOptionModule [ "fonts" "enableFontDir" ] [ "fonts" "fontDir" "enable" ])
|
|
|
|
];
|
|
|
|
|
2018-09-30 11:22:24 +00:00
|
|
|
options = {
|
2022-04-19 14:30:52 +00:00
|
|
|
fonts.fontDir.enable = mkOption {
|
2019-02-17 10:21:12 +00:00
|
|
|
default = false;
|
|
|
|
description = ''
|
|
|
|
Whether to enable font management and install configured fonts to
|
|
|
|
<filename>/Library/Fonts</filename>.
|
|
|
|
|
|
|
|
NOTE: removes any manually-added fonts.
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
|
|
|
fonts.fonts = mkOption {
|
|
|
|
type = types.listOf types.path;
|
2022-09-25 18:12:08 +00:00
|
|
|
default = [ ];
|
2021-10-23 13:05:52 +00:00
|
|
|
example = literalExpression "[ pkgs.dejavu_fonts ]";
|
2019-02-17 10:21:12 +00:00
|
|
|
description = "List of fonts to install.";
|
2018-09-30 11:22:24 +00:00
|
|
|
};
|
|
|
|
};
|
2019-02-17 10:21:12 +00:00
|
|
|
|
2018-09-30 12:37:31 +00:00
|
|
|
config = {
|
2019-02-17 10:21:12 +00:00
|
|
|
|
2022-09-25 18:12:08 +00:00
|
|
|
system.build.fonts = pkgs.runCommand "fonts"
|
2019-02-17 10:21:12 +00:00
|
|
|
{ paths = cfg.fonts; preferLocalBuild = true; }
|
|
|
|
''
|
|
|
|
mkdir -p $out/Library/Fonts
|
|
|
|
for path in $paths; do
|
|
|
|
find -L $path/share/fonts -type f -print0 | while IFS= read -rd "" f; do
|
|
|
|
ln -s "$f" $out/Library/Fonts
|
|
|
|
done
|
|
|
|
done
|
|
|
|
'';
|
|
|
|
|
2022-04-24 17:36:19 +00:00
|
|
|
system.activationScripts.fonts.text = optionalString cfg.fontDir.enable ''
|
2018-09-30 11:22:24 +00:00
|
|
|
# Set up fonts.
|
2019-02-17 10:21:12 +00:00
|
|
|
echo "configuring fonts..." >&2
|
|
|
|
find -L "$systemConfig/Library/Fonts" -type f -print0 | while IFS= read -rd "" l; do
|
|
|
|
font=''${l##*/}
|
|
|
|
f=$(readlink -f "$l")
|
2019-10-22 06:24:13 +00:00
|
|
|
if [ ! -e "/Library/Fonts/$font" ]; then
|
2019-02-17 10:21:12 +00:00
|
|
|
echo "updating font $font..." >&2
|
2019-10-22 06:24:13 +00:00
|
|
|
ln -fn -- "$f" /Library/Fonts 2>/dev/null || {
|
|
|
|
echo "Could not create hard link. Nix is probably on another filesystem. Copying the font instead..." >&2
|
2019-12-22 21:31:34 +00:00
|
|
|
rsync -az --inplace "$f" /Library/Fonts
|
2019-10-22 06:24:13 +00:00
|
|
|
}
|
2019-02-17 10:21:12 +00:00
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
fontrestore default -n 2>&1 | while read -r f; do
|
|
|
|
case $f in
|
|
|
|
/Library/Fonts/*)
|
|
|
|
font=''${f##*/}
|
|
|
|
if [ ! -e "$systemConfig/Library/Fonts/$font" ]; then
|
|
|
|
echo "removing font $font..." >&2
|
|
|
|
rm "/Library/Fonts/$font"
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
/*)
|
|
|
|
# ignoring unexpected fonts
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
done
|
2018-10-06 15:55:21 +00:00
|
|
|
'';
|
2019-02-17 10:21:12 +00:00
|
|
|
|
2018-09-30 11:22:24 +00:00
|
|
|
};
|
|
|
|
}
|