{ buildNpmPackage, fetchFromGitHub, vips, lib, pkg-config, jq, makeWrapper, nix-update-script, }: buildNpmPackage rec { pname = "factoriolab"; version = "3.8.4"; src = fetchFromGitHub { owner = "factoriolab"; repo = "factoriolab"; rev = "refs/tags/v${version}"; hash = "sha256-zgRarlzTQr2HgiQdCvh6N2yM5FS66jFgQcOyaQUbAQY="; }; buildInputs = [ vips ]; nativeBuildInputs = [ pkg-config makeWrapper ]; npmDepsHash = "sha256-FX9zxq3kIQ5nxEPW57X53novtCFBPV5w9jg882EC2Lo="; # By default angular tries to optimize fonts by inlining them # which needs internet access during building to download said fonts. # Internet access during build would necessitate turning this into a fixed output derivation # which is difficult as said fonts are not actually stable. # This disables font inlining completely in which case the fonts will be loaded on demand by your browser postPatch = '' ${lib.getExe jq} '.projects.factoriolab.architect.build.options += { "optimization": {"fonts": false } }' ./angular.json > angular.json.new mv -f angular.json.new angular.json ''; installPhase = '' runHook preInstall mkdir -p $out/share cp -r dist/browser $out/share/factoriolab runHook postInstall ''; passthru.updateScript = nix-update-script { }; meta = { homepage = "https://github.com/factoriolab/factoriolab"; changelog = "https://github.com/factoriolab/factoriolab/releases/tag/${version}"; description = "Angular-based calculator for factory games like Factorio and Dyson Sphere Program"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ patrickdag ]; }; }