diff options
Diffstat (limited to 'pkgs/data/fonts/iosevka/default.nix')
-rw-r--r-- | pkgs/data/fonts/iosevka/default.nix | 123 |
1 files changed, 58 insertions, 65 deletions
diff --git a/pkgs/data/fonts/iosevka/default.nix b/pkgs/data/fonts/iosevka/default.nix index 4864edde71d..a1461032f1b 100644 --- a/pkgs/data/fonts/iosevka/default.nix +++ b/pkgs/data/fonts/iosevka/default.nix @@ -1,83 +1,70 @@ -{ - stdenv, lib, pkgs, - fetchFromGitHub, fetchurl, - nodejs, ttfautohint-nox, otfcc, +{ stdenv, lib, pkgs, fetchFromGitHub +, nodejs, nodePackages, remarshal, ttfautohint-nox, otfcc - # Custom font set options. - # See https://github.com/be5invis/Iosevka#build-your-own-style - design ? [], upright ? [], italic ? [], oblique ? [], - family ? null, weights ? [], - # Custom font set name. Required if any custom settings above. - set ? null, - # Extra parameters. Can be used for ligature mapping. - extraParameters ? null +# Custom font set options. +# See https://github.com/be5invis/Iosevka#build-your-own-style +# Ex: +# privateBuildPlan = { +# family = "Iosevka Expanded"; +# +# design = [ +# "sans" +# "expanded" +# ]; +# }; +, privateBuildPlan ? null +# Extra parameters. Can be used for ligature mapping. +, extraParameters ? null +# Custom font set name. Required if any custom settings above. +, set ? null }: -assert (design != []) -> set != null; -assert (upright != []) -> set != null; -assert (italic != []) -> set != null; -assert (oblique != []) -> set != null; -assert (family != null) -> set != null; -assert (weights != []) -> set != null; +assert (privateBuildPlan != null) -> set != null; -let - system = builtins.currentSystem; - nodePackages = import ./node-packages.nix { inherit pkgs system nodejs; }; -in +stdenv.mkDerivation rec { + pname = + if set != null + then "iosevka-${set}" + else "iosevka"; -let pname = if set != null then "iosevka-${set}" else "iosevka"; in - -let version = "2.3.0"; - name = "${pname}-${version}"; + src = fetchFromGitHub { owner = "be5invis"; - repo ="Iosevka"; + repo = "Iosevka"; rev = "v${version}"; sha256 = "1qnbxhx9wvij9zia226mc3sy8j7bfsw5v1cvxvsbbwjskwqdamvv"; }; -in - -with lib; -let quote = str: "\"" + str + "\""; in -let toTomlList = list: "[" + (concatMapStringsSep ", " quote list) +"]"; in -let unlines = concatStringsSep "\n"; in - -let - param = name: options: - if options != [] then "${name}=${toTomlList options}" else null; - config = unlines (lib.filter (x: x != null) [ - "[buildPlans.${pname}]" - (param "design" design) - (param "upright" upright) - (param "italic" italic) - (param "oblique" oblique) - (if family != null then "family=\"${family}\"" else null) - (param "weights" weights) - ]); - installNodeModules = unlines (lib.mapAttrsToList - (name: value: "mkdir -p node_modules/${name}\n cp -r ${value.outPath}/lib/node_modules/. node_modules") - nodePackages); -in - -stdenv.mkDerivation { - inherit name pname version src; - nativeBuildInputs = [ nodejs ttfautohint-nox otfcc ]; + nativeBuildInputs = [ + nodejs + nodePackages."iosevka-build-deps-../../data/fonts/iosevka" + remarshal + otfcc + ttfautohint-nox + ]; - passAsFile = [ "config" "extraParameters" ]; - config = config; - extraParameters = extraParameters; + privateBuildPlanJSON = builtins.toJSON { buildPlans.${pname} = privateBuildPlan; }; + extraParametersJSON = builtins.toJSON { ${pname} = extraParameters; }; + passAsFile = [ "privateBuildPlanJSON" "extraParametersJSON" ]; configurePhase = '' - mkdir -p node_modules/.bin - ${installNodeModules} - ${optionalString (set != null) ''mv "$configPath" private-build-plans.toml''} - ${optionalString (extraParameters != null) ''cat "$extraParametersPath" >> parameters.toml''} + runHook preConfigure + ${lib.optionalString (privateBuildPlan != null) '' + remarshal -i "$privateBuildPlanJSONPath" -o private-build-plans.toml -if json -of toml + ''} + ${lib.optionalString (extraParameters != null) '' + echo -e "\n" >> parameters.toml + remarshal -i "$extraParametersJSONPath" -if json -of toml >> parameters.toml + ''} + ln -s ${nodePackages."iosevka-build-deps-../../data/fonts/iosevka"}/lib/node_modules/iosevka-build-deps/node_modules . + runHook postConfigure ''; buildPhase = '' - npm run build -- ttf::${pname} + runHook preBuild + npm run build -- ttf::$pname + runHook postBuild ''; installPhase = '' @@ -89,14 +76,20 @@ stdenv.mkDerivation { enableParallelBuilding = true; meta = with stdenv.lib; { - homepage = https://be5invis.github.io/Iosevka/; - downloadPage = "https://github.com/be5invis/Iosevka/releases"; + homepage = https://be5invis.github.io/Iosevka; + downloadPage = https://github.com/be5invis/Iosevka/releases; description = '' Slender monospace sans-serif and slab-serif typeface inspired by Pragmata Pro, M+ and PF DIN Mono, designed to be the ideal font for programming. ''; license = licenses.ofl; platforms = platforms.all; - maintainers = with maintainers; [ cstrahan jfrankenau ttuegel babariviere ]; + maintainers = with maintainers; [ + cstrahan + jfrankenau + ttuegel + babariviere + rileyinman + ]; }; } |