{ lib, stdenv, fetchFromGitHub, janet, }: let platformFiles = { aarch64-darwin = "macos_config.janet"; aarch64-linux = "linux_config.janet"; x86_64-darwin = "macos_config.janet"; x86_64-linux = "linux_config.janet"; }; platformFile = platformFiles.${stdenv.hostPlatform.system}; in stdenv.mkDerivation rec { pname = "jpm"; version = "1.1.0"; src = fetchFromGitHub { owner = "janet-lang"; repo = "jpm"; rev = "v${version}"; sha256 = "sha256-lPB4jew6RkJlDp8xOQ4YA9MkgLBImaBHcvv4WF/sLRc="; }; # `auto-shebangs true` gives us a shebang line that points to janet inside the # jpm bin folder postPatch = '' substituteInPlace configs/${platformFile} \ --replace 'auto-shebang true' 'auto-shebang false' \ --replace /usr/local $out ''; dontConfigure = true; buildInputs = [ janet ]; dontBuild = true; installPhase = '' runHook preInstall mkdir -p $out/{lib/janet,share/man/man1} janet bootstrap.janet configs/${platformFile} # patch default config to use janet's path instead of jpm itself substituteInPlace $out/lib/janet/jpm/default-config.janet \ --replace-fail $out ${janet} runHook postInstall ''; doInstallCheck = true; installCheckPhase = '' $out/bin/jpm help $out/bin/jpm show-paths ''; meta = janet.meta // { description = "Janet Project Manager for the Janet programming language"; mainProgram = "jpm"; platforms = lib.attrNames platformFiles; }; }