diff --git a/pkgs/applications/graphics/rx/default.nix b/pkgs/applications/graphics/rx/default.nix new file mode 100644 index 000000000000..4e8519d17b67 --- /dev/null +++ b/pkgs/applications/graphics/rx/default.nix @@ -0,0 +1,58 @@ +{ stdenv, rustPlatform, fetchFromGitHub, makeWrapper +, cmake, pkgconfig +, xorg ? null +, vulkan-loader ? null }: + +assert stdenv.isLinux -> xorg != null; +assert stdenv.isLinux -> vulkan-loader != null; + +let + graphicsBackend = if stdenv.isDarwin then "metal" else "vulkan"; +in + with stdenv.lib; + rustPlatform.buildRustPackage rec { + pname = "rx"; + version = "0.2.0"; + + src = fetchFromGitHub { + owner = "cloudhead"; + repo = pname; + rev = "v${version}"; + sha256 = "0f6cw8zqr45bprj8ibhp89bb2a077g4zinfrdn943csdmh47qzcl"; + }; + + cargoSha256 = "05bqsw0nw24xysq86qa3hx9b5ncf50wfxsgpy388yrs2dfnphwlx"; + + nativeBuildInputs = [ cmake pkgconfig makeWrapper ]; + + buildInputs = optionals stdenv.isLinux + (with xorg; [ + # glfw-sys dependencies: + libX11 libXrandr libXinerama libXcursor libXi libXext + ]); + + cargoBuildFlags = [ "--features=${graphicsBackend}" ]; + + # TODO: better to factor that into the rust platform + checkPhase = '' + runHook preCheck + echo "Running cargo test" + cargo test --features=${graphicsBackend} + runHook postCheck + ''; + + postInstall = optional stdenv.isLinux '' + mkdir -p $out/share/applications + cp $src/rx.desktop $out/share/applications + wrapProgram $out/bin/rx --prefix LD_LIBRARY_PATH : ${vulkan-loader}/lib + ''; + + meta = { + description = "Modern and extensible pixel editor implemented in Rust"; + homepage = "https://cloudhead.io/rx/"; + license = licenses.gpl3; + maintainers = with maintainers; [ minijackson ]; + platforms = with platforms; (linux ++ darwin ++ windows); + inherit version; + }; + } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 6e394eb8b4e4..019750f67872 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -5812,6 +5812,8 @@ in recordmydesktop = callPackage ../applications/video/recordmydesktop { }; + rx = callPackage ../applications/graphics/rx { }; + gtk-recordmydesktop = callPackage ../applications/video/recordmydesktop/gtk.nix { jack2 = jack2Full; };