diff --git a/pkgs/applications/misc/pagefind/default.nix b/pkgs/applications/misc/pagefind/default.nix new file mode 100644 index 000000000000..1b7505dc3651 --- /dev/null +++ b/pkgs/applications/misc/pagefind/default.nix @@ -0,0 +1,110 @@ +{ lib +, callPackage +, rustPlatform +, fetchFromGitHub +, fetchNpmDeps +, npmHooks +, binaryen +, gzip +, nodejs +, rustc-wasm32 +, wasm-bindgen-cli +, wasm-pack +}: + +let + + wasm-bindgen-84 = wasm-bindgen-cli.override { + version = "0.2.84"; + hash = "sha256-0rK+Yx4/Jy44Fw5VwJ3tG243ZsyOIBBehYU54XP/JGk="; + cargoHash = "sha256-vcpxcRlW1OKoD64owFF6mkxSqmNrvY+y3Ckn5UwEQ50="; + }; + +in + +rustPlatform.buildRustPackage rec { + pname = "pagefind"; + version = "1.0.3"; + + src = fetchFromGitHub { + owner = "cloudcannon"; + repo = "pagefind"; + rev = "refs/tags/v${version}"; + hash = "sha256-vQbLaZug3gySMIbMdNqU7XcL4GZ7XqZ3ZkwdDBC5T9o="; + }; + + cargoHash = "sha256-ubuzO/67HguWPqd3y/IapO07L2pg2Q4vo1yTpEthdoU="; + + env.npmDeps_web_js = fetchNpmDeps { + name = "npm-deps-web-js"; + src = "${src}/pagefind_web_js"; + hash = "sha256-pGE4lUFZ4dA++8kBklcMBoaN/1Z92dfOzQKhukbuEyc="; + }; + env.npmDeps_ui_default = fetchNpmDeps { + name = "npm-deps-ui-default"; + src = "${src}/pagefind_ui/default"; + hash = "sha256-voCs49JneWYE1W9U7aB6G13ypH6JqathVDeF58V57U8="; + }; + env.npmDeps_ui_modular = fetchNpmDeps { + name = "npm-deps-ui-modular"; + src = "${src}/pagefind_ui/modular"; + hash = "sha256-O0RqZUsRFtByxMQdwNGNcN38Rh+sDqqNo9YlBcrnsF4="; + }; + + postPatch = '' + # Tricky way to run npmConfigHook multiple times + ( + local postPatchHooks=() # written to by npmConfigHook + source ${npmHooks.npmConfigHook}/nix-support/setup-hook + npmRoot=pagefind_web_js npmDeps=$npmDeps_web_js npmConfigHook + npmRoot=pagefind_ui/default npmDeps=$npmDeps_ui_default npmConfigHook + npmRoot=pagefind_ui/modular npmDeps=$npmDeps_ui_modular npmConfigHook + ) + ''; + + nativeBuildInputs = [ + binaryen + gzip + nodejs + rustc-wasm32 + rustc-wasm32.llvmPackages.lld + wasm-bindgen-84 + wasm-pack + ]; + + # build wasm and js assets + # based on "test-and-build" in https://github.com/CloudCannon/pagefind/blob/main/.github/workflows/release.yml + preBuild = '' + export HOME=$(mktemp -d) + ( + cd pagefind_web_js + npm run build-coupled + ) + + ( + cd pagefind_web + export RUSTFLAGS="-C linker=lld" + bash ./local_build.sh + ) + + ( + cd pagefind_ui/default + npm run build + ) + + ( + cd pagefind_ui/modular + npm run build + ) + ''; + + buildFeatures = [ "extended" ]; + + meta = with lib; { + description = "Generate low-bandwidth search index for your static website"; + homepage = "https://pagefind.app/"; + license = licenses.mit; + maintainers = with maintainers; [ pbsds ]; + platforms = platforms.unix; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 7dc94d9a8634..0d9a4542348b 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -11780,6 +11780,8 @@ with pkgs; PageEdit = libsForQt5.callPackage ../applications/office/PageEdit { }; + pagefind = libsForQt5.callPackage ../applications/misc/pagefind { }; + paging-calculator = callPackage ../development/tools/paging-calculator { }; pagmo2 = callPackage ../development/libraries/pagmo2 { };