diff --git a/fetchfont.nix b/fetchfont.nix index 3aa32d1..5401e0c 100644 --- a/fetchfont.nix +++ b/fetchfont.nix @@ -1,91 +1,96 @@ # vim: set noet sw=2 ts=2 sts=2: {lib, pkgs, ...}: ({src ? null , srcs ? null, name ? "", pname ? "", version ? ""}: -with pkgs; -let - name_ = - if "" != name - then name - else "${pname}-v${version}"; -in stdenv.mkDerivation ({ - name = name_; - nativeBuildInputs = [ sfnt2woff-zopfli unzip coreutils fontconfig woff2 ]; - unpackPhase = '' - source_dir="$TMPDIR/src" - mkdir "$source_dir" - cd "$source_dir" - for s in $src $srcs - do - case "$s" in - *.zip|*.tar|*.tar.gz|*.tgz|*.tar.xz|*.txz|*.tar.bz2|*.tbz2) - unpackFile "$s" - ;; - *) - cp -pr --reflink=auto -- "$s" "$(stripHash "$s")" - ;; - esac - done - ''; - buildPhase = '' - set -e - build_dir="$TMPDIR/build" - mkdir "$build_dir" - find "$source_dir" \( -name \*.otf -or -name \*.ttf -or -name \*.woff -or -name \*.woff2 \) -exec cp \{\} "$build_dir" \; - cd "$build_dir" + with pkgs; + let + name_ = + if "" != name + then name + else "${pname}-v${version}"; + in stdenv.mkDerivation ({ + name = name_; + nativeBuildInputs = [ sfnt2woff-zopfli unzip coreutils fontconfig woff2 ]; + unpackPhase = '' + source_dir="$TMPDIR/src" + mkdir "$source_dir" + cd "$source_dir" + for s in $src $srcs + do + case "$s" in + *.zip|*.tar|*.tar.gz|*.tgz|*.tar.xz|*.txz|*.tar.bz2|*.tbz2) + unpackFile "$s" + ;; + *) + cp -pr --reflink=auto -- "$s" "$(stripHash "$s")" + ;; + esac + done + ''; + buildPhase = '' + set -e + build_dir="$TMPDIR/build" + mkdir "$build_dir" + find "$source_dir" \( -name \*.otf -or -name \*.ttf -or -name \*.woff -or -name \*.woff2 \) -exec cp \{\} "$build_dir" \; + cd "$build_dir" - for s in *.otf *.ttf - do - bn="''${s%.otf}" - bn="''${bn%.ttf}" - if ! [ -e "$bn.woff" ] - then - echo "sfnt2woff-zopfli $s => $bn.woff" - sfnt2woff-zopfli "$s" - fi - if ! [ -e "$bn.woff2" ] - then - echo "woff2_compress $s => $bn.woff2" - woff2_compress "$s" - fi - done + for s in *.otf *.ttf + do + bn="''${s%.otf}" + bn="''${bn%.ttf}" + if ! [ -e "$bn.woff" ] + then + echo "sfnt2woff-zopfli $s => $bn.woff" + sfnt2woff-zopfli "$s" + fi + if ! [ -e "$bn.woff2" ] + then + echo "woff2_compress $s => $bn.woff2" + woff2_compress "$s" + fi + done - for s in *.otf *.ttf *.woff - do - fc="`dirname "$s"`/`basename "$s"`.fc" - echo "fc-scan $s" - LANG=C LC_NUMERIC=C fc-scan --format 'family=%{family} - fullname=%{fullname} - postscriptname=%{postscriptname} - variable=%{variable} - slant=%{slant} - style=%{style} - weight=%{weight} - width=%{width} + for s in *.otf *.ttf *.woff + do + fc="`dirname "$s"`/`basename "$s"`.fc" + echo "fc-scan $s" + LANG=C LC_NUMERIC=C fc-scan --format 'family=%{family} +fullname=%{fullname} +postscriptname=%{postscriptname} +variable=%{variable} +slant=%{slant} +style=%{style} +weight=%{weight} +width=%{width} - ' "$s" > "$fc" - done - for s in *.woff2 - do - o="`dirname "$s"`/`basename "$s" .woff2`.woff.fc" - fc="`dirname "$s"`/`basename "$s"`.fc" - cp "$o" "$fc" - done - ''; - installPhase = '' - cd "$TMPDIR" - mkdir -p $out/share/{doc/${name_},fonts/{opentype,truetype,WOFF,WOFF2}{,/.fc}} - find "$build_dir" -name \*.otf -exec cp \{\} $out/share/fonts/opentype \; - find "$build_dir" -name \*.ttf -exec cp \{\} $out/share/fonts/truetype \; - find "$build_dir" -name \*.woff -exec cp \{\} $out/share/fonts/WOFF \; - find "$build_dir" -name \*.woff2 -exec cp \{\} $out/share/fonts/WOFF2 \; - find "$build_dir" -name \*.otf.fc -exec cp \{\} $out/share/fonts/opentype/.fc \; - find "$build_dir" -name \*.ttf.fc -exec cp \{\} $out/share/fonts/truetype/.fc \; - find "$build_dir" -name \*.woff.fc -exec cp \{\} $out/share/fonts/WOFF/.fc \; - find "$build_dir" -name \*.woff2.fc -exec cp \{\} $out/share/fonts/WOFF2/.fc \; - find "$source_dir" -name \*.txt -exec cp \{\} $out/share/doc/${name_} \; - find "$source_dir" -name \*.md -exec cp \{\} $out/share/doc/${name_} \; - find "$source_dir" -name \*.adoc -exec cp \{\} $out/share/doc/${name_} \; - find "$source_dir" -name \*.html -exec cp \{\} $out/share/doc/${name_} \; - find "$source_dir" -name \*.css -exec cp \{\} $out/share/doc/${name_} \; - ''; -} // (if null != src then { src = src; } else { srcs = srcs; }))) +' "$s" > "$fc" + done + for s in *.woff2 + do + o="`dirname "$s"`/`basename "$s" .woff2`.woff.fc" + fc="`dirname "$s"`/`basename "$s"`.fc" + cp "$o" "$fc" + done + ''; + installPhase = '' + cd "$TMPDIR" + mkdir -p $out/share/{doc/${name_},fonts/{opentype,truetype,WOFF,WOFF2}{,/.fc}} + find "$build_dir" -name \*.otf -exec cp \{\} $out/share/fonts/opentype \; + find "$build_dir" -name \*.ttf -exec cp \{\} $out/share/fonts/truetype \; + find "$build_dir" -name \*.woff -exec cp \{\} $out/share/fonts/WOFF \; + find "$build_dir" -name \*.woff2 -exec cp \{\} $out/share/fonts/WOFF2 \; + find "$build_dir" -name \*.otf.fc -exec cp \{\} $out/share/fonts/opentype/.fc \; + find "$build_dir" -name \*.ttf.fc -exec cp \{\} $out/share/fonts/truetype/.fc \; + find "$build_dir" -name \*.woff.fc -exec cp \{\} $out/share/fonts/WOFF/.fc \; + find "$build_dir" -name \*.woff2.fc -exec cp \{\} $out/share/fonts/WOFF2/.fc \; + find "$source_dir" -name \*.txt -exec cp \{\} $out/share/doc/${name_} \; + find "$source_dir" -name \*.md -exec cp \{\} $out/share/doc/${name_} \; + find "$source_dir" -name \*.adoc -exec cp \{\} $out/share/doc/${name_} \; + find "$source_dir" -name \*.html -exec cp \{\} $out/share/doc/${name_} \; + find "$source_dir" -name \*.css -exec cp \{\} $out/share/doc/${name_} \; + ''; + } // ( + if null != src + then { src = src; } + else { srcs = srcs; } + )) +)