aboutsummaryrefslogtreecommitdiff
path: root/home-manager/modules/misc/fontconfig.nix
diff options
context:
space:
mode:
authorKatharina Fey <kookie@spacekookie.de>2019-10-05 12:06:29 +0000
committerKatharina Fey <kookie@spacekookie.de>2019-10-05 12:42:50 +0000
commit1148b1d122bc03e9a3665856c9b7bb96bd4e3994 (patch)
tree1a9586de593790e236349d5caa0abdff7f3f6856 /home-manager/modules/misc/fontconfig.nix
parent919d4e75699aa4ba456fd2d3d416a0522c9c7294 (diff)
parent8bddc1adab0f7a51476f819fa2197353e8e1d136 (diff)
Add 'home-manager/' from commit '8bddc1adab0f7a51476f819fa2197353e8e1d136'
git-subtree-dir: home-manager git-subtree-mainline: 919d4e75699aa4ba456fd2d3d416a0522c9c7294 git-subtree-split: 8bddc1adab0f7a51476f819fa2197353e8e1d136
Diffstat (limited to 'home-manager/modules/misc/fontconfig.nix')
-rw-r--r--home-manager/modules/misc/fontconfig.nix105
1 files changed, 105 insertions, 0 deletions
diff --git a/home-manager/modules/misc/fontconfig.nix b/home-manager/modules/misc/fontconfig.nix
new file mode 100644
index 00000000000..8dbcce53c22
--- /dev/null
+++ b/home-manager/modules/misc/fontconfig.nix
@@ -0,0 +1,105 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+
+ cfg = config.fonts.fontconfig;
+
+ profileDirectory = config.home.profileDirectory;
+
+in
+
+{
+ meta.maintainers = [ maintainers.rycee ];
+
+ imports = [
+ (mkRenamedOptionModule
+ [ "fonts" "fontconfig" "enableProfileFonts" ]
+ [ "fonts" "fontconfig" "enable" ])
+ ];
+
+ options = {
+ fonts.fontconfig = {
+ enable = mkOption {
+ type = types.bool;
+ default = false;
+ description = ''
+ Whether to enable fontconfig configuration. This will, for
+ example, allow fontconfig to discover fonts and
+ configurations installed through
+ <varname>home.packages</varname> and
+ <command>nix-env</command>.
+ '';
+ };
+ };
+ };
+
+ config = mkIf cfg.enable {
+ # Create two dummy files in /lib/fontconfig to make sure that
+ # buildEnv creates a real directory path. These files are removed
+ # in home.extraProfileCommands below so the packages will not
+ # become "runtime" dependencies.
+ home.packages = [
+ (pkgs.writeTextFile {
+ name = "hm-dummy1";
+ destination = "/lib/fontconfig/hm-dummy1";
+ text = "dummy";
+ })
+
+ (pkgs.writeTextFile {
+ name = "hm-dummy2";
+ destination = "/lib/fontconfig/hm-dummy2";
+ text = "dummy";
+ })
+ ];
+
+ home.extraProfileCommands = ''
+ if [[ -d $out/lib/X11/fonts || -d $out/share/fonts ]]; then
+ export FONTCONFIG_FILE="$(pwd)/fonts.conf"
+
+ cat > $FONTCONFIG_FILE << EOF
+ <?xml version='1.0'?>
+ <!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
+ <fontconfig>
+ <dir>$out/lib/X11/fonts</dir>
+ <dir>$out/share/fonts</dir>
+ <cachedir>$out/lib/fontconfig/cache</cachedir>
+ </fontconfig>
+ EOF
+
+ ${getBin pkgs.fontconfig}/bin/fc-cache -f
+ rm -f $out/lib/fontconfig/cache/CACHEDIR.TAG
+ rmdir --ignore-fail-on-non-empty -p $out/lib/fontconfig/cache
+
+ rm "$FONTCONFIG_FILE"
+ unset FONTCONFIG_FILE
+ fi
+
+ # Remove hacky dummy files.
+ rm $out/lib/fontconfig/hm-dummy?
+ rmdir --ignore-fail-on-non-empty -p $out/lib/fontconfig
+ '';
+
+ xdg.configFile = {
+ "fontconfig/conf.d/10-hm-fonts.conf".text = ''
+ <?xml version='1.0'?>
+
+ <!-- Generated by Home Manager. -->
+
+ <!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
+ <fontconfig>
+ <include ignore_missing="yes">${config.home.path}/etc/fonts/conf.d</include>
+ <include ignore_missing="yes">${config.home.path}/etc/fonts/fonts.conf</include>
+
+ <dir>${config.home.path}/lib/X11/fonts</dir>
+ <dir>${config.home.path}/share/fonts</dir>
+ <dir>${profileDirectory}/lib/X11/fonts</dir>
+ <dir>${profileDirectory}/share/fonts</dir>
+
+ <cachedir>${config.home.path}/lib/fontconfig/cache</cachedir>
+ </fontconfig>
+ '';
+ };
+ };
+}