diff --git a/user/fonts/apple-fonts.nix b/user/fonts/apple-fonts.nix index 0cc751b..feee130 100644 --- a/user/fonts/apple-fonts.nix +++ b/user/fonts/apple-fonts.nix @@ -1,30 +1,61 @@ # https://gist.githubusercontent.com/robbins/dccf1238e971973a6a963b04c486c099/raw/08b77ef234a7fc44c34470de06f6d6ce25020255/apple-fonts.nix -{ lib, stdenv, fetchurl, p7zip }: +{ lib, stdenvNoCC, fetchurl, p7zip, fonts ? [ ] }: -stdenv.mkDerivation rec { - pname = "apple-fonts"; - version = "1"; - - pro = fetchurl { - url = "https://devimages-cdn.apple.com/design/resources/download/SF-Pro.dmg"; - sha256 = "sha256-nkuHge3/Vy8lwYx9z+pvsQZfzrNIP4K0OutpPl4yXn0="; - }; - - compact = fetchurl { - url = "https://devimages-cdn.apple.com/design/resources/download/SF-Compact.dmg"; - sha256 = "sha256-+Q4HInJBl3FLb29/x9utf7A55uh5r79eh/7hdQDdbSI="; - }; - - mono = fetchurl { - url = "https://devimages-cdn.apple.com/design/resources/download/SF-Mono.dmg"; - sha256 = "sha256-pqkYgJZttKKHqTYobBUjud0fW79dS5tdzYJ23we9TW4="; +let + urlsAndShas = { + sf-pro = { + url = "https://devimages-cdn.apple.com/design/resources/download/SF-Pro.dmg"; + sha256 = "sha256-nkuHge3/Vy8lwYx9z+pvsQZfzrNIP4K0OutpPl4yXn0="; + }; + sf-compact = { + url = "https://devimages-cdn.apple.com/design/resources/download/SF-Compact.dmg"; + sha256 = "sha256-+Q4HInJBl3FLb29/x9utf7A55uh5r79eh/7hdQDdbSI="; + }; + sf-mono = { + url = "https://devimages-cdn.apple.com/design/resources/download/SF-Mono.dmg"; + sha256 = "sha256-pqkYgJZttKKHqTYobBUjud0fW79dS5tdzYJ23we9TW4="; + }; + ny = { + url = "https://devimages-cdn.apple.com/design/resources/download/NY.dmg"; + sha256 = "sha256-XOiWc4c7Yah+mM7axk8g1gY12vXamQF78Keqd3/0/cE="; + }; }; + knownFonts = builtins.attrNames srcs; + 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; + srcs = builtins.mapAttrs + ( + name: + value: + if builtins.elem name selectedFonts then + fetchurl value + else "" + ) + urlsAndShas; - ny = fetchurl { - url = "https://devimages-cdn.apple.com/design/resources/download/NY.dmg"; - sha256 = "sha256-XOiWc4c7Yah+mM7axk8g1gY12vXamQF78Keqd3/0/cE="; - }; + installFn = name: src: + let + folderName = builtins.replaceStrings [ " " ] [ "" ] name; + outName = type: "$out/share/fonts/${type}/AppleFonts/${name}"; + in + '' + 7z x ${src} -y + cd ${folderName} + 7z x '${name}.pkg' -y + 7z x 'Payload~' -y + mkdir -p "${outName "truetype"}" "${outName "opentype"}" + find Library/Fonts -name \*.ttf -exec install -Dm644 {} "${outName "truetype"}" \; + find Library/Fonts -name \*.otf -exec install -Dm644 {} "${outName "opentype"}" \; + cd .. + ''; +in +stdenvNoCC.mkDerivation rec { + pname = "apple-fonts"; + version = "1"; nativeBuildInputs = [ p7zip ]; @@ -32,41 +63,16 @@ stdenv.mkDerivation rec { dontUnpack = true; - installPhase = '' - 7z x ${pro} - cd SFProFonts - 7z x 'SF Pro Fonts.pkg' - 7z x 'Payload~' - mkdir -p $out/fontfiles - mv Library/Fonts/* $out/fontfiles - cd .. - - 7z x ${mono} - cd SFMonoFonts - 7z x 'SF Mono Fonts.pkg' - 7z x 'Payload~' - mv Library/Fonts/* $out/fontfiles - cd .. - - 7z x ${compact} - cd SFCompactFonts - 7z x 'SF Compact Fonts.pkg' - 7z x 'Payload~' - mv Library/Fonts/* $out/fontfiles - cd .. - - 7z x ${ny} - cd NYFonts - 7z x 'NY Fonts.pkg' - 7z x 'Payload~' - mv Library/Fonts/* $out/fontfiles - - mkdir -p $out/usr/share/fonts/OTF $out/usr/share/fonts/TTF - mv $out/fontfiles/*.otf $out/usr/share/fonts/OTF - mv $out/fontfiles/*.ttf $out/usr/share/fonts/TTF - rm -rf $out/fontfiles + buildPhase = '' + echo "Selected fonts are ${toString selectedFonts}" ''; + installPhase = + (if builtins.elem "sf-pro" selectedFonts then installFn "SF Pro Fonts" srcs.sf-pro else "") + + (if builtins.elem "sf-compact" selectedFonts then installFn "SF Compact Fonts" srcs.sf-compact else "") + + (if builtins.elem "sf-mono" selectedFonts then installFn "SF Mono Fonts" srcs.sf-mono else "") + + (if builtins.elem "ny" selectedFonts then installFn "NY Fonts" srcs.ny else ""); + meta = { description = "Apple San Francisco, New York fonts"; homepage = "https://developer.apple.com/fonts/"; diff --git a/user/fonts/sf-pro.nix b/user/fonts/sf-pro.nix deleted file mode 100644 index 941cda4..0000000 --- a/user/fonts/sf-pro.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ pkgs }: -pkgs.stdenv.mkDerivation rec { - pname = "sf-pro-font"; - version = "0.0.1"; - - src = pkgs.fetchFromGitHub { - owner = "sahibjotsaggu"; - repo = "San-Francisco-Pro-Fonts"; - rev = "8bfea09aa6f1139479f80358b2e1e5c6dc991a58"; - hash = "sha256-mAXExj8n8gFHq19HfGy4UOJYKVGPYgarGd/04kUIqX4="; - }; - - buildInputs = [ ]; - - dontUnpack = true; - - installPhase = '' - mkdir -p $out/share/fonts/OTF/SF-Pro - find -name \*.otf -exec mv {} $out/share/fonts/OTF/SF-Pro \; - ''; - - meta = with pkgs.lib; { - description = "Apple San Francisco fonts"; - homepage = "https://developer.apple.com/fonts/"; - # license = pkgs.lib.licenses.unfree; # TODO: fix this - }; -}