diff options
Diffstat (limited to 'home-manager/modules/misc/fontconfig.nix')
-rw-r--r-- | home-manager/modules/misc/fontconfig.nix | 105 |
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..795ab3a74f6 --- /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> + ''; + }; + }; +} |