{ naersk, fenix , stdenv, fetchFromGitHub, buildEnv , pkg-config, gettext, wasm-pack, wasm-bindgen-cli, binaryen , openssl, postgresql }: let rust = fenix.complete.withComponents [ "cargo" "rustc" ]; naersk' = naersk.override { cargo = rust; rustc = rust; }; rust-wasm = with fenix; combine [ minimal.rustc minimal.cargo targets.wasm32-unknown-unknown.latest.rust-std ]; naersk-wasm = naersk.override { cargo = rust-wasm; rustc = rust-wasm; }; conv = fetchFromGitHub { owner = "DanielKeep"; repo = "rust-conv"; rev = "90a1e85edcc6d63616436a6049b08ba87c76d703"; sha256 = "029xq9cabz3scbmd84b8qkrg0q7x6fm27ijq869lkpq8bwjxvcb6"; }; version = "0.7.1"; src = stdenv.mkDerivation { pname = "plume-src"; inherit version; src = fetchFromGitHub { owner = "Plume-org"; repo = "Plume"; rev = version; sha256 = "01mgg9ngpjinlwbgm2s287namilm3ddlwpn0hjs6267608vjgi04"; }; phases = [ "unpackPhase" "patchPhase" "installPhase" ]; patches = [ ./0001-cargo-update.patch ]; postPatch = '' ln -s ${conv} rust-conv ''; installPhase = "cp -ar . $out"; }; plume = naersk'.buildPackage { pname = "plume"; inherit src version; nativeBuildInputs = [ pkg-config gettext ]; buildInputs = [ openssl postgresql ]; overrideMain = oa: { installPhase = '' ${oa.installPhase} mkdir -p $out/share/plume cp -ar static $out/share/plume/ ''; }; }; plm = naersk'.buildPackage { pname = "plm"; root = src; nativeBuildInputs = [ pkg-config ]; buildInputs = [ openssl postgresql ]; cargoBuildOptions = x: x ++ [ "--package=plume-cli" ]; }; plume-front = naersk-wasm.buildPackage { pname = "plume-front"; root = src; nativeBuildInputs = [ gettext wasm-pack wasm-bindgen-cli binaryen ]; CARGO_BUILD_TARGET = "wasm32-unknown-unknown"; cargoBuildOptions = x: x ++ [ "--package=plume-front" ]; copyLibs = true; overrideMain = oa: { buildPhase = '' wasm-pack build --mode no-install --target web --release plume-front ''; installPhase = '' mkdir -p $out/share/plume/static cp -a plume-front/pkg/*.{js,ts,wasm} $out/share/plume/static/ ''; }; }; in buildEnv { name = "plume-env"; paths = [ plume plume-front plm ]; passthru = { inherit plume plm; }; }