{ lib, buildNpmPackage, fetchFromGitHub, nixosTests, python3, vaultwarden, }: let version = "2025.8.0"; bw_web_builds = fetchFromGitHub { owner = "dani-garcia"; repo = "bw_web_builds"; rev = "v${version}"; hash = "sha256-93acGKO3Fq81M1wKPvIynvkTFXPQXypcMb+c4aEtxJc="; }; in buildNpmPackage rec { pname = "vaultwarden-webvault"; inherit version; src = fetchFromGitHub { owner = "vaultwarden"; repo = "vw_web_builds"; rev = bw_web_builds.rev; hash = "sha256-u51EP4I+bUcTeMqfzx1gbZMxpjalt3bpK3QGp5QEpYU="; }; npmDepsHash = "sha256-wi7ZDgGKXrtueLob5OVNKCpnzC00UW9zo8KwuoyL1Bo="; postPatch = '' ln -s ${bw_web_builds}/{patches,resources} .. ''; nativeBuildInputs = [ python3 ]; makeCacheWritable = true; env = { ELECTRON_SKIP_BINARY_DOWNLOAD = "1"; npm_config_build_from_source = "true"; }; npmRebuildFlags = [ # FIXME one of the esbuild versions fails to download @esbuild/linux-x64 "--ignore-scripts" ]; npmBuildScript = "dist:oss:selfhost"; npmBuildFlags = [ "--workspace" "apps/web" ]; npmFlags = [ "--legacy-peer-deps" ]; installPhase = '' runHook preInstall mkdir -p $out/share/vaultwarden mv apps/web/build $out/share/vaultwarden/vault runHook postInstall ''; passthru = { inherit bw_web_builds; tests = nixosTests.vaultwarden; }; meta = with lib; { description = "Integrates the web vault into vaultwarden"; homepage = "https://github.com/dani-garcia/bw_web_builds"; changelog = "https://github.com/dani-garcia/bw_web_builds/releases/tag/v${version}"; platforms = platforms.all; license = licenses.gpl3Plus; inherit (vaultwarden.meta) maintainers; }; }