summary refs log tree commit diff
path: root/pkgs/data/fonts/nerdfonts/default.nix
blob: 35f43c14df485ee5c5a6b9fa81a7b00cb8c19715 (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
{ stdenv
, fetchurl
, lib
, unzip
# To select only certain fonts, put a list of strings to `fonts`: every key in
# ./shas.nix is an optional font
, fonts ? []
}:

let
  # both of these files are generated via ./update.sh
  version = import ./version.nix;
  fontsShas = import ./shas.nix;
  knownFonts = builtins.attrNames fontsShas;
  selectedFonts = if (fonts == []) then
    knownFonts
  else
    let unknown = lib.subtractLists knownFonts fonts; in
    if (unknown != []) then
      throw "Unknown font(s): ${lib.concatStringsSep " " unknown}"
    else
      fonts
  ;
  selectedFontsShas = lib.attrsets.genAttrs selectedFonts (
    fName:
    fontsShas."${fName}"
  );
  srcs = lib.attrsets.mapAttrsToList (
    fName:
    fSha:
    (fetchurl {
      url = "https://github.com/ryanoasis/nerd-fonts/releases/download/v${version}/${fName}.zip";
      sha256 = fSha;
    })
  ) selectedFontsShas;
in

stdenv.mkDerivation rec {
  inherit version;
  inherit srcs;
  pname = "nerdfonts";
  nativeBuildInputs = [
    unzip
  ];
  sourceRoot = ".";
  buildPhase = ''
    echo "selected fonts are ${toString selectedFonts}"
    ls *.otf *.ttf
  '';
  installPhase = ''
    find -name \*.otf -exec mkdir -p $out/share/fonts/opentype/NerdFonts \; -exec mv {} $out/share/fonts/opentype/NerdFonts \;
    find -name \*.ttf -exec mkdir -p $out/share/fonts/truetype/NerdFonts \; -exec mv {} $out/share/fonts/truetype/NerdFonts \;
  '';

  meta = with stdenv.lib; {
    description = "Iconic font aggregator, collection, & patcher. 3,600+ icons, 50+ patched fonts";
    longDescription = ''
      Nerd Fonts is a project that attempts to patch as many developer targeted
      and/or used fonts as possible. The patch is to specifically add a high
      number of additional glyphs from popular 'iconic fonts' such as Font
      Awesome, Devicons, Octicons, and others.
    '';
    homepage = "https://nerdfonts.com/";
    license = licenses.mit;
    maintainers = with maintainers; [ doronbehar ];
    hydraPlatforms = []; # 'Output limit exceeded' on Hydra
  };
}