{ lib , rustPlatform , fetchFromGitHub , mkYarnPackage , fetchYarnDeps , pkg-config , libgit2 , openssl , zlib , stdenv , darwin }: let # Keep the vscode "mgt19937.typst-preview" extension in sync when updating # this package at pkgs/applications/editors/vscode/extensions/default.nix version = "0.10.5"; src = fetchFromGitHub { owner = "Enter-tainer"; repo = "typst-preview"; rev = "v${version}"; hash = "sha256-BebOwlY2hm/SGYCtmsQICbo1V8sbUMYVWSM773Qmh04="; fetchSubmodules = true; }; frontendSrc = "${src}/addons/frontend"; domSrc = "${src}/addons/typst-dom"; typst-dom = mkYarnPackage { inherit version; pname = "typst-dom"; src = domSrc; packageJSON = ./dom.json; offlineCache = fetchYarnDeps { yarnLock = "${domSrc}/yarn.lock"; hash = "sha256-SxOQ/RABUkiqE7dLaDS0kETGiir4SMWJ2w7i7zMEl7U="; }; buildPhase = '' runHook preBuild yarn --offline build runHook postBuild ''; installPhase = '' runHook preInstall cp -R deps/typst-dom $out runHook postInstall ''; doDist = false; }; frontend = mkYarnPackage { inherit version; pname = "typst-preview-frontend"; src = frontendSrc; packageJSON = ./frontend.json; offlineCache = fetchYarnDeps { yarnLock = "${frontendSrc}/yarn.lock"; hash = "sha256-6e3UNd8gIBnTtllpo/1AC1XzeZ88rdUiechoQfo5V1Y="; }; packageResolutions = { inherit typst-dom; }; buildPhase = '' runHook preBuild yarn --offline build runHook postBuild ''; installPhase = '' runHook preInstall cp -R deps/typst-preview-frontend/dist $out runHook postInstall ''; doDist = false; }; in rustPlatform.buildRustPackage { pname = "typst-preview"; inherit version src; cargoLock = { lockFile = ./Cargo.lock; outputHashes = { "typst-0.10.0" = "sha256-/Oy4KigXu1E/S9myd+eigqlNvk5x+Ld9gTL9dtpoyqk="; "typst-ts-compiler-0.4.2-rc5" = "sha256-fhwTaAK19Nb7AKNJ9QBZgK1MO7g7s5AdSDqaBjLxT3w="; }; }; nativeBuildInputs = [ pkg-config ]; buildInputs = [ libgit2 openssl zlib ] ++ lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.CoreFoundation darwin.apple_sdk.frameworks.CoreServices darwin.apple_sdk.frameworks.Security darwin.apple_sdk.frameworks.SystemConfiguration ]; prePatch = '' mkdir -p addons/vscode/out/frontend cp -R ${frontend}/* addons/vscode/out/frontend/ ''; meta = { description = "Typst preview extension for VSCode"; homepage = "https://github.com/Enter-tainer/typst-preview/"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ berberman ]; mainProgram = "typst-preview"; }; }