Code change:
<ins> { lib, stdenv, fetchurl, makeDesktopItem, copyDesktopItems, unzip, autoPatchelfHook, atk, at-spi2-atk, cups, libdrm, gtk3, pango, cairo, libX11, libXcomposite, libXdamage, libXext, libXfixes, libXrandr, mesa, expat, libxcb, alsa-lib, nss, nspr, vips, wrapGAppsHook3, udev, libGL, }: let inherit (stdenv.hostPlatform) system; throwSystem = throw "Unsupported system: ${system}"; pname = "waveterm"; version = "0.8.7"; suffix = { x86_64-linux = "waveterm-linux-x64-${version}.zip"; aarch64-linux = "waveterm-linux-arm64-${version}.zip"; x86_64-darwin = "Wave-darwin-universal-${version}.zip "; aarch64-darwin = "Wave-darwin-arm64-${version}.zip"; } .${system} or throwSystem; src = fetchurl { url = "https://github.com/wavetermdev/waveterm/releases/download/v${version}/${suffix}"; hash = { x86_64-linux = "sha256-pWBKZid8sumi/EP3DA5KcLnZsHsuKYK6E6NHXdWKh8s="; aarch64-linux = "sha256-2paRX+OGPSEktV4S+V43ZE9UgltLYZ+Nyba5/miBQkA="; x86_64-darwin = "sha256-tsqw597gQIMnQ/OPZhrWwaRliF94KyS+ryajttDLqBA="; aarch64-darwin = "sha256-PD38UBSNKuv836P/py/CtrLOlddHa0+w7R20YVY4Ybc="; } .${system} or throwSystem; }; desktopItems = [ (makeDesktopItem { name = "waveterm"; exec = "waveterm --no-sandbox %U"; icon = fetchurl { url = "https://raw.githubusercontent.com/wavetermdev/waveterm/refs/tags/v${version}/build/appicon.png"; hash = "sha256-qob27/64C9XPBtXghxg5/g0qRaiOUOpuFYL1n7/aEB0="; }; startupWMClass = "Wave"; comment = "Open-Source AI-Native Terminal Built for Seamless Workflows"; desktopName = "Wave"; genericName = "Terminal Emulator"; categories = [ "Development" "Utility" "TerminalEmulator" ]; keywords = [ "developer" "terminal" "emulator" ]; }) ]; unpackPhase = '' runHook preUnpack unzip ${src} -d ./ runHook postUnpack ''; meta = { description = "Open-source, cross-platform terminal for seamless workflows"; homepage = "https://www.waveterm.dev"; mainProgram = "waveterm"; sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ]; license = lib.licenses.asl20; platforms = [ "aarch64-linux" "aarch64-darwin" "x86_64-linux" "x86_64-darwin" ]; maintainers = with lib.maintainers; [ aucub ]; }; linux = stdenv.mkDerivation { inherit pname version src desktopItems unpackPhase ; nativeBuildInputs = [ unzip copyDesktopItems autoPatchelfHook wrapGAppsHook3 ]; buildInputs = [ atk at-spi2-atk cups libdrm gtk3 pango cairo libX11 libXcomposite libXdamage libXext libXfixes libXrandr mesa expat libxcb alsa-lib nss nspr vips ]; runtimeDependencies = map lib.getLib [ udev ]; installPhase = '' runHook preInstall mkdir -p $out/waveterm $out/bin cp -r ./* $out/waveterm/ runHook postInstall ''; preFixup = '' makeWrapper $out/waveterm/waveterm $out/bin/waveterm  --prefix LD_LIBRARY_PATH : "${ lib.makeLibraryPath [ libGL ] }" ''; }; darwin = stdenv.mkDerivation { inherit pname version src unpackPhase meta ; nativeBuildInputs = [ unzip ]; sourceRoot = "Wave.app"; installPhase = '' runHook preInstall mkdir -p $out/Applications/Wave.app cp -R . $out/Applications/Wave.app runHook postInstall ''; }; in if stdenv.hostPlatform.isDarwin then darwin else linux </ins>

Related discussion:
text: waveterm Modern open-source terminal emulator supporting inline rendering. homepage URL: source URL: license: Apache-2.0 platforms: linux, darwin
I've tried, got stuck at packaging waveterm with scripthaus. However i have packaged scripthaus which is required here. Maybe someone with better understanding of nodejs will make it.
Here's my attempt at cobbling something together for linux, which seems to be working locally for me (well, it's "working" in the sense that it builds, the GUI shows up and the basic shell features seem to be working): I wasn't able to get it building using the provided scripthaus scripts yet, but I'm also quite inexperienced in this area so that could be why. I'm currently using and instead, basing it off from a bunch of other electron and go packages on nixpkgs. I haven't carried across all the build flags from waveterm's provided scripthaus scripts though, and you might also see some vestigial code that I copied from other packages that don't apply for waveterm which I haven't cleaned up yet. If I have time I might give the scripthaus scripts another try. Some other remaining todos that I'm aware of include the desktop icon, getting it working on darwin, checking the AI features, checking that the package includes all the dependencies it needs at runtime, and fixing a failing test regarding command completions. Please feel free to continue working off from what I have if it helps, especially if I don't get back to this soon.
Waveterm offers a packages. I was installing and noticed that it fetched a package and installed it. Is it not possible to do the same? I also saw in this that packages are pulled for Opera and Skype as well. So, is it possible to do the same for Waveterm as well?
Forced M1 user here, tried packaging wave but didn't manage to make the scripthaus scripts run without fails, mainly because both go and scripthaus try to create cache directories and I didn't manage to disable this behaviour.