main
 1{
 2  lib,
 3  stdenv,
 4  steel,
 5  cargo,
 6  rustc,
 7  rustPlatform,
 8}: {
 9  pname,
10  version,
11  src,
12  name ? "helixplugin-${pname}-${version}",
13  ...
14} @ attrs:
15stdenv.mkDerivation (finalAttrs:
16    attrs
17    // {
18      inherit name;
19
20      nativeBuildInputs =
21        [steel]
22        ++ (lib.optionals (lib.hasAttr "cargoDeps" attrs) [
23          cargo
24          rustc
25          rustPlatform.cargoSetupHook
26        ]);
27
28      buildPhase = ''
29        runHook preBuild
30
31        export STEEL_HOME=$TMPDIR/target_steel
32        mkdir -p $STEEL_HOME
33        forge install
34
35        mv $STEEL_HOME ./
36
37        runHook postBuild
38      '';
39
40      installPhase = ''
41        runHook preInstall
42
43        mkdir -p $out/cogs
44
45        if [ -z "$(find ./target_steel/native -maxdepth 0 -empty)" ]; then
46          cp -r ./target_steel/native $out/
47        fi
48
49        plugin_name=$(cd ./target_steel/cogs && ls -1 | head -n1)
50        ln -s "${finalAttrs.src}" "$out/cogs/$plugin_name"
51
52        runHook postInstall
53      '';
54    })