From 58f8bd1f707cf501373b5541c04a7991de882707 Mon Sep 17 00:00:00 2001 From: Patrizio Bekerle Date: Fri, 10 Jan 2025 11:00:59 +0100 Subject: [PATCH] cura-appimage: init at 5.9.0 Signed-off-by: Patrizio Bekerle --- pkgs/by-name/cu/cura-appimage/package.nix | 127 ++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 pkgs/by-name/cu/cura-appimage/package.nix diff --git a/pkgs/by-name/cu/cura-appimage/package.nix b/pkgs/by-name/cu/cura-appimage/package.nix new file mode 100644 index 00000000000000..171fb0179e5cbd --- /dev/null +++ b/pkgs/by-name/cu/cura-appimage/package.nix @@ -0,0 +1,127 @@ +{ + lib, + stdenv, + stdenvNoCC, + fetchurl, + writeScriptBin, + appimageTools, + copyDesktopItems, + makeDesktopItem, + nix-update-script, +}: + +stdenvNoCC.mkDerivation rec { + pname = "cura-appimage"; + version = "5.9.0"; + + # Give some good names so the intermediate packages are easy + # to recognise by name in the Nix store. + appimageBinName = "cura-appimage-tools-output"; + wrapperScriptName = "${pname}-wrapper-script"; + + src = fetchurl { + url = "https://github.com/Ultimaker/Cura/releases/download/${version}/Ultimaker-Cura-${version}-linux-X64.AppImage"; + hash = "sha256-STtVeM4Zs+PVSRO3cI0LxnjRDhOxSlttZF+2RIXnAp4="; + }; + + appimageContents = appimageTools.extract { + inherit pname version src; + }; + + curaAppimageToolsWrapped = appimageTools.wrapType2 { + inherit src; + # For `appimageTools.wrapType2`, `pname` determines the binary's name in `bin/`. + pname = appimageBinName; + inherit version; + extraPkgs = _: [ ]; + }; + + # The `QT_QPA_PLATFORM=xcb` fixes Wayland support, see https://github.com/NixOS/nixpkgs/issues/186570#issuecomment-2526277637 + # The `GTK_USE_PORTAL=1` fixes file dialog issues under Gnome, see https://github.com/NixOS/nixpkgs/pull/372614#issuecomment-2585663161 + script = writeScriptBin wrapperScriptName '' + #!${stdenv.shell} + # AppImage version of Cura loses current working directory and treats all paths relateive to $HOME. + # So we convert each of the files passed as argument to an absolute path. + # This fixes use cases like `cd /path/to/my/files; cura mymodel.stl anothermodel.stl`. + + args=() + for a in "$@"; do + if [ -e "$a" ]; then + a="$(realpath "$a")" + fi + args+=("$a") + done + QT_QPA_PLATFORM=xcb GTK_USE_PORTAL=1 exec "${curaAppimageToolsWrapped}/bin/${appimageBinName}" "''${args[@]}" + ''; + + dontUnpack = true; + + nativeBuildInputs = [ copyDesktopItems ]; + desktopItems = [ + # Based on upstream. + # https://github.com/Ultimaker/Cura/blob/382b98e8b0c910fdf8b1509557ae8afab38f1817/packaging/AppImage/cura.desktop.jinja + (makeDesktopItem { + name = "cura"; + desktopName = "UltiMaker Cura"; + genericName = "3D Printing Software"; + comment = meta.longDescription; + exec = "cura"; + icon = "cura-icon"; + terminal = false; + type = "Application"; + mimeTypes = [ + "model/stl" + "application/vnd.ms-3mfdocument" + "application/prs.wavefront-obj" + "image/bmp" + "image/gif" + "image/jpeg" + "image/png" + "text/x-gcode" + "application/x-amf" + "application/x-ply" + "application/x-ctm" + "model/vnd.collada+xml" + "model/gltf-binary" + "model/gltf+json" + "model/vnd.collada+xml+zip" + ]; + categories = [ "Graphics" ]; + keywords = [ + "3D" + "Printing" + ]; + }) + ]; + + installPhase = '' + runHook preInstall + + mkdir -p $out/bin + cp ${script}/bin/${wrapperScriptName} $out/bin/cura + + mkdir -p $out/share/applications $out/share/icons/hicolor/128x128/apps + install -Dm644 ${appimageContents}/usr/share/icons/hicolor/128x128/apps/cura-icon.png $out/share/icons/hicolor/128x128/apps/cura-icon.png + + runHook postInstall + ''; + + passthru.updateScript = nix-update-script { extraArgs = [ "--version-regex=([56789].+)" ]; }; + + meta = { + description = "3D printing software"; + homepage = "https://github.com/ultimaker/cura"; + changelog = "https://github.com/Ultimaker/Cura/releases/tag/${version}"; + longDescription = '' + Cura converts 3D models into paths for a 3D printer. It prepares your print for maximum accuracy, minimum printing time and good reliability with many extra features that make your print come out great. + ''; + license = lib.licenses.lgpl3Plus; + platforms = [ "x86_64-linux" ]; + mainProgram = "cura"; + maintainers = with lib.maintainers; [ + pbek + nh2 + fliegendewurst + ]; + }; +}