{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, autoPatchelfHook, makeWrapper, vulkan-loader, vulkan-headers, glslang, shaderc, cudaPackages ? { }, enableVulkan ? false, enableCuda ? false, }: let cudaCapabilities = [ "8.6" "8.9" "9.0" ]; in stdenv.mkDerivation (finalAttrs: { pname = "s2cpp"; version = "0-unstable-2025-04-05"; src = fetchFromGitHub { owner = "rodrigomatta"; repo = "s2.cpp"; rev = "36a5fb058b740d8826f67d027bf46b3273fe4e3d"; hash = "sha256-C8BSUWNRrZKdaKHniAbeObq9fChvFQZ5HXcvSzgNsIw="; fetchSubmodules = true; }; nativeBuildInputs = [ cmake autoPatchelfHook makeWrapper ] ++ lib.optionals enableVulkan [ pkg-config ] ++ lib.optionals enableCuda [ cudaPackages.cuda_nvcc ]; buildInputs = [ ] ++ lib.optionals enableVulkan [ vulkan-loader vulkan-headers glslang shaderc ] ++ lib.optionals enableCuda [ cudaPackages.cuda_cudart cudaPackages.cuda_cccl ]; cmakeFlags = [ "-DCMAKE_SKIP_BUILD_RPATH=ON" "-DCMAKE_BUILD_WITH_INSTALL_RPATH=ON" "-DCMAKE_INSTALL_RPATH=${placeholder "out"}/lib" ] ++ lib.optionals enableVulkan [ "-DS2_VULKAN=ON" ] ++ lib.optionals enableCuda [ "-DS2_CUDA=ON" "-DCMAKE_CUDA_ARCHITECTURES=${lib.concatStringsSep ";" cudaCapabilities}" ]; installPhase = '' runHook preInstall mkdir -p $out/bin $out/lib $out/share find . -name 's2' -type f -executable -exec install -Dm755 {} $out/bin/.s2-wrapped \; find . -name '*.so*' -exec install -Dm755 {} -t $out/lib/ \; install -Dm644 ${finalAttrs.src}/tokenizer.json $out/share/tokenizer.json makeWrapper $out/bin/.s2-wrapped $out/bin/s2 \ --add-flags "-t $out/share/tokenizer.json" runHook postInstall ''; meta = { description = "Fish Audio S2 Pro text-to-speech inference engine in native C++/GGML"; homepage = "https://github.com/rodrigomatta/s2.cpp"; license = { shortName = "fish-audio-research"; fullName = "Fish Audio Research License"; url = "https://github.com/rodrigomatta/s2.cpp/blob/main/LICENSE.md"; free = false; }; mainProgram = "s2"; platforms = lib.platforms.linux; }; })