Change:
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. I also tried to use package but due to it requiring electron and it not being available for the M1 architecture I couldn't compile the application from source, so I think packaging for the M1 will have to be done through the .dmg that they have on the realeases page. I'll try packaging the application when I have time this weekend.
In the end I couldn't resist and worked something out for M1 in my free time, this works and creates a ./result directory with an application I can open, so I think it's pretty much done. The only thing missing is integrating with solution... I'll try doing it this weekend.
where did you get that info from?
When I searched for electron on Nix packages it never appeared a platform for darwin... I know it should be possible to have electron in M1 but at least on Nix it isn't packaged for it already. <img width="313" alt="image" src=""
Oh, nice! I thought the panel with platforms displayed all of them, clearly it doesn't. I'll first merge the linux build mentioned previously and then I'll try using that electron to build the app from scratch. Thank you!

Discussion:
github = "auchter"; githubId = 1190483; }; <ins> aucub = { name = "aucub"; email = "dr56ekgbb@mozmail.com"; github = "aucub"; githubId = 78630225; }; </ins> augustebaum = { email = "auguste.apple@gmail.com"; github = "augustebaum";

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