diff options
Diffstat (limited to 'modules/by-name/fo/fonts')
-rw-r--r-- | modules/by-name/fo/fonts/emoji_font.xml | 22 | ||||
-rw-r--r-- | modules/by-name/fo/fonts/module.nix | 55 |
2 files changed, 77 insertions, 0 deletions
diff --git a/modules/by-name/fo/fonts/emoji_font.xml b/modules/by-name/fo/fonts/emoji_font.xml new file mode 100644 index 00000000..f3f6bb3e --- /dev/null +++ b/modules/by-name/fo/fonts/emoji_font.xml @@ -0,0 +1,22 @@ +<?xml version="1.0"?> +<!DOCTYPE fontconfig SYSTEM "fonts.dtd"> +<fontconfig> + <alias binding="weak"> + <family>monospace</family> + <prefer> + <family>emoji</family> + </prefer> + </alias> + <alias binding="weak"> + <family>sans-serif</family> + <prefer> + <family>emoji</family> + </prefer> + </alias> + <alias binding="weak"> + <family>serif</family> + <prefer> + <family>emoji</family> + </prefer> + </alias> +</fontconfig> diff --git a/modules/by-name/fo/fonts/module.nix b/modules/by-name/fo/fonts/module.nix new file mode 100644 index 00000000..abd5664b --- /dev/null +++ b/modules/by-name/fo/fonts/module.nix @@ -0,0 +1,55 @@ +{ + config, + lib, + pkgs, + ... +}: let + cfg = config.soispha.fonts; +in { + options.soispha.fonts = { + enable = lib.mkEnableOption "fonts"; + + fonts = lib.mkOption { + type = lib.types.listOf lib.types.str; + example = lib.literalExpression ''["SourceCodePro" "Overpass" "FiraCode"]''; + default = [ + "SourceCodePro" + "Overpass" + ]; + description = "The nerd-fonts to install"; + }; + + enableEmoji = lib.mkEnableOption "emoji font support"; + }; + + config = lib.mkIf cfg.enable { + fonts = { + packages = let + nerdFont = pkgs.nerdfonts.override { + inherit (cfg) fonts; + }; + in + [ + nerdFont + ] + ++ (with pkgs; [liberation_ttf]) + ++ lib.optional cfg.enableEmoji pkgs.noto-fonts-emoji; + + fontconfig = { + # NOTE: This is responsible for color emoji support <2023-08-28> + # WARNING: This could lead to broken font rendering, if the emoji font is used as + # a fallback for normal characters <2024-05-16> + localConf = lib.mkIf cfg.enableEmoji (builtins.readFile ./emoji_font.xml); + + defaultFonts = { + serif = lib.mkForce (["Liberation Serif"] ++ lib.optional cfg.enableEmoji "Noto Color Emoji"); + sansSerif = lib.mkForce (["Overpass Nerd Font Propo"] ++ lib.optional cfg.enableEmoji "Noto Color Emoji"); + monospace = lib.mkForce (["SauceCodePro Nerd Font Mono"] ++ lib.optional cfg.enableEmoji "Noto Color Emoji"); + emoji = lib.mkIf cfg.enableEmoji (lib.mkForce ["Noto Color Emoji"]); + }; + allowType1 = false; + allowBitmaps = false; + }; + }; + }; +} |