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 })