holochain_scaffolding_cli 0.3000.2

CLI to easily generate and modify holochain apps
{
  description = "Template for Holochain app development";

  inputs = {
    nixpkgs.follows = "holochain/nixpkgs";
    versions.url = "github:holochain/holochain?dir=versions/0_3_rc";

    holochain = {
      url = "github:holochain/holochain";
      inputs.versions.follows = "versions";
    };
  };

  outputs = inputs @ {...}:
    inputs.holochain.inputs.flake-parts.lib.mkFlake
    {
      inherit inputs;
    }
    rec {
      flake = {
        templates.default = {
          path = ./templates/custom-template;
          description  = "Custom template for the scaffolding tool";
        };
      
        lib.wrapCustomTemplate = { system, pkgs, customTemplatePath }: 
          let 
        	  scaffolding = inputs.holochain.packages.${system}.hc-scaffold;
        	in 
        		pkgs.runCommand "hc-scaffold" {
        	    buildInputs = [ pkgs.makeWrapper ];
        	    src = customTemplatePath;
        	  } ''
        	    mkdir $out
        	    mkdir $out/bin
        	    # We create the bin folder ourselves and link every binary in it
        	    ln -s ${scaffolding}/bin/* $out/bin
        	    # Except the hello binary
        	    rm $out/bin/hc-scaffold
        	    cp $src -R $out/template
        	    # Because we create this ourself, by creating a wrapper
        	    makeWrapper ${scaffolding}/bin/hc-scaffold $out/bin/hc-scaffold \
        	      --add-flags "--template $out/template"
        	  '';
      };
    
      systems = builtins.attrNames inputs.holochain.devShells;
      perSystem = {
        self',
        inputs',
        config,
        pkgs,
        system,
        ...
      }: {
        devShells.default = pkgs.mkShell {
          inputsFrom = [inputs'.holochain.devShells.rustDev];
          packages = [pkgs.nodejs_20];
        };

        devShells.ci = pkgs.mkShell {
          inputsFrom = [self'.devShells.default];
          packages = [
            inputs'.holochain.packages.hc-scaffold
          ];
        };

        # TODO: Expose the scaffolding tool CLI as the main package for this crate

        checks.custom-template = flake.lib.wrapCustomTemplate {
          inherit pkgs system;
          customTemplatePath = ./templates/custom-template/custom-template;
        };

      };
    };
}