diff --git a/modules/nix.nix b/modules/nix.nix index db7b93e..194d1a3 100644 --- a/modules/nix.nix +++ b/modules/nix.nix @@ -10,6 +10,7 @@ nixpkgs.overlays = [ (self: super: { + bun-baseline = (super.callPackage ../overlays/bun-baseline.nix { }); mfcl3750cdwlpr = (super.callPackage ../overlays/mfcl3750cdw.nix { }).driver; mfcl3750cdwcupswrapper = (super.callPackage ../overlays/mfcl3750cdw.nix { }).cupswrapper; }) diff --git a/modules/packages.nix b/modules/packages.nix index f0bcd3f..514e75f 100644 --- a/modules/packages.nix +++ b/modules/packages.nix @@ -28,7 +28,7 @@ openjdk17 javaPackages.openjfx17 gradle_7 - bun + bun-baseline nodejs_21 nodenv ] ++ lib.optionals (gui.enable) [ diff --git a/overlays/bun-baseline.nix b/overlays/bun-baseline.nix new file mode 100644 index 0000000..add110f --- /dev/null +++ b/overlays/bun-baseline.nix @@ -0,0 +1,68 @@ +{ lib +, stdenvNoCC +, callPackage +, fetchurl +, autoPatchelfHook +, unzip +, openssl +, writeShellScript +, curl +, jq +, common-updater-scripts +}: + +stdenvNoCC.mkDerivation rec { + version = "1.0.24"; + pname = "bun"; + + src = passthru.sources.${stdenvNoCC.hostPlatform.system} or (throw "Unsupported system: ${stdenvNoCC.hostPlatform.system}"); + + strictDeps = true; + nativeBuildInputs = [ unzip ] ++ lib.optionals stdenvNoCC.isLinux [ autoPatchelfHook ]; + buildInputs = [ openssl ]; + + dontConfigure = true; + dontBuild = true; + + installPhase = '' + runHook preInstall + install -Dm 755 ./bun $out/bin/bun + runHook postInstall + ''; + passthru = { + sources = { + "x86_64-linux" = fetchurl { + url = "https://github.com/oven-sh/bun/releases/download/bun-v${version}/bun-linux-x64-baseline.zip"; + sha256 = "be6240720eaf37d761ee80264a5ce2dbfb81c7cea3fea7a4e522fe89cdf8c659"; + }; + }; + updateScript = writeShellScript "update-bun" '' + set -o errexit + export PATH="${lib.makeBinPath [ curl jq common-updater-scripts ]}" + NEW_VERSION=$(curl --silent https://api.github.com/repos/oven-sh/bun/releases/latest | jq '.tag_name | ltrimstr("bun-v")' --raw-output) + if [[ "${version}" = "$NEW_VERSION" ]]; then + echo "The new version same as the old version." + exit 0 + fi + for platform in ${lib.escapeShellArgs meta.platforms}; do + update-source-version "bun" "0" "${lib.fakeSha256}" --source-key="sources.$platform" + update-source-version "bun" "$NEW_VERSION" --source-key="sources.$platform" + done + ''; + }; + meta = with lib; { + homepage = "https://bun.sh"; + changelog = "https://github.com/Jarred-Sumner/bun/releases/tag/bun-v${version}"; + description = "Incredibly fast JavaScript runtime, bundler, transpiler and package manager – all in one"; + sourceProvenance = with sourceTypes; [ binaryNativeCode ]; + longDescription = '' + All in one fast & easy-to-use tool. Instead of 1,000 node_modules for development, you only need bun. + ''; + license = with licenses; [ + mit # bun core + lgpl21Only # javascriptcore and webkit + ]; + maintainers = [ maintainers.bchmnn ]; + platforms = builtins.attrNames passthru.sources; + }; +}