summary refs log tree commit diff
path: root/pkgs/data/fonts/iosevka/default.nix
blob: e21110658261116e00f066198759cd123849e992 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
{ stdenv, lib, pkgs, fetchFromGitHub, nodejs, nodePackages, remarshal
, ttfautohint-nox, otfcc

# 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.
  # It must be a raw toml string.
  #
  # Ex:
  # [[iosevka.compLig]]
  # unicode = 57808 # 0xe1d0
  # featureTag = 'XHS0'
  # sequence = "+>"
, extraParameters ? null
  # Custom font set name. Required if any custom settings above.
, set ? null }:

assert (privateBuildPlan != null) -> set != null;

stdenv.mkDerivation rec {
  pname = if set != null then "iosevka-${set}" else "iosevka";

  version = "2.3.3";

  src = fetchFromGitHub {
    owner = "be5invis";
    repo = "Iosevka";
    rev = "v${version}";
    sha256 = "0k7xij473g5g0lwhb6qpn70v3n2d025dww3nlb7jwbpnp03zliz0";
  };

  nativeBuildInputs = [
    nodejs
    nodePackages."iosevka-build-deps-../../data/fonts/iosevka"
    remarshal
    otfcc
    ttfautohint-nox
  ];

  privateBuildPlanJSON =
    builtins.toJSON { buildPlans.${pname} = privateBuildPlan; };
  inherit extraParameters;
  passAsFile = [ "privateBuildPlanJSON" "extraParameters" ];

  configurePhase = ''
    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
      cat "$extraParametersPath" >> parameters.toml
    ''}
    ln -s ${
      nodePackages."iosevka-build-deps-../../data/fonts/iosevka"
    }/lib/node_modules/iosevka-build-deps/node_modules .
    runHook postConfigure
  '';

  buildPhase = ''
    runHook preBuild
    npm run build -- ttf::$pname
    runHook postBuild
  '';

  installPhase = ''
    fontdir="$out/share/fonts/$pname"
    install -d "$fontdir"
    install "dist/$pname/ttf"/* "$fontdir"
  '';

  enableParallelBuilding = true;

  meta = with stdenv.lib; {
    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
      rileyinman
    ];
  };
}