diff options
Diffstat (limited to 'pkgs/data/fonts/iosevka/default.nix')
-rw-r--r-- | pkgs/data/fonts/iosevka/default.nix | 109 |
1 files changed, 43 insertions, 66 deletions
diff --git a/pkgs/data/fonts/iosevka/default.nix b/pkgs/data/fonts/iosevka/default.nix index 4864edde71dc..10b0a0fd8f0c 100644 --- a/pkgs/data/fonts/iosevka/default.nix +++ b/pkgs/data/fonts/iosevka/default.nix @@ -1,83 +1,60 @@ -{ - stdenv, lib, pkgs, - fetchFromGitHub, fetchurl, - nodejs, ttfautohint-nox, otfcc, +{ stdenv, lib, pkgs +, nodejs, 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 +, 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 - -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"; - rev = "v${version}"; - sha256 = "1qnbxhx9wvij9zia226mc3sy8j7bfsw5v1cvxvsbbwjskwqdamvv"; + nodePackages = import ./node-packages.nix { + inherit pkgs nodejs; + inherit (stdenv.hostPlatform) system; }; in +stdenv.mkDerivation rec { + pname = + if set != null + then "iosevka-${set}" + else "iosevka"; -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 + inherit (src) version; -stdenv.mkDerivation { - inherit name pname version src; + src = nodePackages."iosevka-https://github.com/be5invis/Iosevka/archive/v2.3.0.tar.gz"; + sourceRoot = "${src.name}/lib/node_modules/iosevka"; - nativeBuildInputs = [ nodejs ttfautohint-nox otfcc ]; + nativeBuildInputs = [ + nodejs + 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) '' + remarshal -i "$extraParametersJSONPath" -o parameters.toml -if json -of toml + ''} + runHook postConfigure ''; buildPhase = '' - npm run build -- ttf::${pname} + runHook preBuild + npm run build -- ttf::$pname + runHook postBuild ''; installPhase = '' @@ -89,8 +66,8 @@ 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. |