From 7a10373030ff64f4e1bfc39f2cb82b9e3fc0dc0b Mon Sep 17 00:00:00 2001 From: Evie Litherland-Smith Date: Sat, 2 Mar 2024 15:04:35 +0000 Subject: [PATCH] Add nerd-font patched version of custom Iosevka to fonts Move all of the logic for configuring and building the custom fonts to iosevka.nix, to keep everything relevant in one place. --- system/iosevka.nix | 153 ++++++++++++++++++++++++++++++--------------- system/stylix.nix | 43 ++----------- 2 files changed, 109 insertions(+), 87 deletions(-) diff --git a/system/iosevka.nix b/system/iosevka.nix index d76b0027..75d14163 100644 --- a/system/iosevka.nix +++ b/system/iosevka.nix @@ -1,56 +1,109 @@ { - noCvSs = true; - exportGlyphNames = false; - ligations.inherits = "dlig"; - weights = { - Regular = { - shape = 400; - menu = 400; - css = 400; + stdenv, + iosevka, + nerd-font-patcher, +}: let + customBuildPlan = { + noCvSs = true; + exportGlyphNames = false; + ligations.inherits = "dlig"; + weights = { + Regular = { + shape = 400; + menu = 400; + css = 400; + }; + Bold = { + shape = 700; + menu = 700; + css = 700; + }; }; - Bold = { - shape = 700; - menu = 700; - css = 700; + variants.design = { + capital-g = "toothless-corner-serifless-hooked"; + capital-j = "serifed-both-sides"; + capital-q = "crossing"; + capital-r = "curly-serifless"; + e = "rounded"; + f = "tailed"; + g = "double-storey-open"; + i = "tailed-serifed"; + j = "serifed"; + k = "cursive-serifless"; + l = "tailed-serifed"; + q = "diagonal-tailed-serifless"; + y = "cursive-serifless"; + z = "straight-serifless-with-horizontal-crossbar"; + lower-delta = "flat-top"; + lower-lambda = "tailed-turn"; + lower-xi = "flat-top"; + lower-chi = "semi-chancery-straight"; + zero = "tall-slashed"; + one = "no-base"; + two = "straight-neck"; + three = "flat-top"; + four = "semi-open"; + five = "oblique-arched"; + six = "open-contour"; + seven = "bend-serifless-crossbar"; + eight = "two-circles"; + nine = "open-contour"; + ampersand = "closed"; + at = "fourfold"; + percent = "dots"; + lig-ltgteq = "flat"; + lig-neq = "more-slanted"; + lig-equal-chain = "without-notch"; + lig-hyphen-chain = "without-notch"; + lig-double-arrow-bar = "without-notch"; + lig-single-arrow-bar = "without-notch"; }; }; - variants.design = { - capital-g = "toothless-corner-serifless-hooked"; - capital-j = "serifed-both-sides"; - capital-q = "crossing"; - capital-r = "curly-serifless"; - e = "rounded"; - f = "tailed"; - g = "double-storey-open"; - i = "tailed-serifed"; - j = "serifed"; - k = "cursive-serifless"; - l = "tailed-serifed"; - q = "diagonal-tailed-serifless"; - y = "cursive-serifless"; - z = "straight-serifless-with-horizontal-crossbar"; - lower-delta = "flat-top"; - lower-lambda = "tailed-turn"; - lower-xi = "flat-top"; - lower-chi = "semi-chancery-straight"; - zero = "tall-slashed"; - one = "no-base"; - two = "straight-neck"; - three = "flat-top"; - four = "semi-open"; - five = "oblique-arched"; - six = "open-contour"; - seven = "bend-serifless-crossbar"; - eight = "two-circles"; - nine = "open-contour"; - ampersand = "closed"; - at = "fourfold"; - percent = "dots"; - lig-ltgteq = "flat"; - lig-neq = "more-slanted"; - lig-equal-chain = "without-notch"; - lig-hyphen-chain = "without-notch"; - lig-double-arrow-bar = "without-notch"; - lig-single-arrow-bar = "without-notch"; +in { + etoile = rec { + name = "Iosevka Custom Etoile"; + package = iosevka.override { + set = "etoile"; + privateBuildPlan = { + inherit (customBuildPlan) noCvSs exportGlyphNames variants weights; + family = name; + spacing = "quasi-proportional"; + serifs = "slab"; + }; + }; + }; + aile = rec { + name = "Iosevka Custom Aile"; + package = iosevka.override { + set = "aile"; + privateBuildPlan = { + inherit (customBuildPlan) noCvSs exportGlyphNames variants weights; + family = name; + spacing = "quasi-proportional"; + serifs = "sans"; + }; + }; + }; + nerdfont = let + font = iosevka.override { + set = "custom"; + privateBuildPlan = { + inherit (customBuildPlan) noCvSs exportGlyphNames variants weights; + family = "Iosevka Custom"; + spacing = "normal"; + serifs = "sans"; + }; + }; + in { + name = "IosevkaCustomNerdFont"; + package = stdenv.mkDerivation { + name = "${font.name}-nerd-font-patched"; + src = font; + nativeBuildInputs = [nerd-font-patcher]; + buildPhase = '' + find \( -name \*.ttf -o -name \*.otf \) -execdir nerd-font-patcher -c {} \; + ''; + installPhase = "cp -a . $out"; + }; }; } diff --git a/system/stylix.nix b/system/stylix.nix index 6608a5b9..25921bd2 100644 --- a/system/stylix.nix +++ b/system/stylix.nix @@ -26,7 +26,9 @@ name = "Catppuccin-${catppuccinVariant}-Dark-Cursors"; }; fonts = let - iosevkaCustomBuildPlan = import ./iosevka.nix; + iosevkaCustom = import ./iosevka.nix { + inherit (pkgs) stdenv iosevka nerd-font-patcher; + }; in { sizes = { applications = 16; @@ -34,42 +36,9 @@ popups = 20; terminal = 16; }; - serif = rec { - name = "Iosevka Custom Etoile"; - package = pkgs.iosevka.override { - set = "etoile"; - privateBuildPlan = { - inherit (iosevkaCustomBuildPlan) noCvSs exportGlyphNames variants weights; - family = name; - spacing = "quasi-proportional"; - serifs = "slab"; - }; - }; - }; - sansSerif = rec { - name = "Iosevka Custom Aile"; - package = pkgs.iosevka.override { - set = "aile"; - privateBuildPlan = { - inherit (iosevkaCustomBuildPlan) noCvSs exportGlyphNames variants weights; - family = name; - spacing = "quasi-proportional"; - serifs = "sans"; - }; - }; - }; - monospace = rec { - name = "Iosevka Custom"; - package = pkgs.iosevka.override { - set = "custom"; - privateBuildPlan = { - inherit (iosevkaCustomBuildPlan) noCvSs exportGlyphNames variants weights; - family = name; - spacing = "normal"; - serifs = "sans"; - }; - }; - }; + serif = {inherit (iosevkaCustom.etoile) name package;}; + sansSerif = {inherit (iosevkaCustom.aile) name package;}; + monospace = {inherit (iosevkaCustom.nerdfont) name package;}; emoji = { name = "Noto Color Emoji"; package = pkgs.noto-fonts-emoji;