{ callPackage, stdenvNoCC, lib, fetchurl, fetchzip, namespace, # Repo metadata owner ? "CachyOS", repo ? "proton-cachyos", # Behavior withUpdateScript ? true, # Variant selection (null -> use defaultVariant from version.json) variant ? null, # Packaging/customization knobs toolTitle ? null, toolPattern ? "proton-.*", tarballPrefix ? "proton-", tarballSuffix ? "-x86_64_v4.tar.xz", releasePrefix ? "cachyos-", releaseSuffix ? "-slr", }: let inherit (lib.trivial) importJSON; inherit (lib.${namespace}) versioning; versionSpec = importJSON ./version.json; selected = versioning.selectVariant versionSpec variant null; vars = selected.variables or {}; base = vars.base; release = vars.release; # Derived values for the current variant releaseVersion = "${releasePrefix}${base}-${release}${releaseSuffix}"; homepage = "https://github.com/${owner}/${repo}"; url = "${homepage}/releases/download/${releaseVersion}/${tarballPrefix}${releaseVersion}${tarballSuffix}"; # Choose fetcher based on file type intake = if lib.strings.hasSuffix ".zip" url then { fetcher = fetchzip; input = "$src/*.tar.xz"; } else { fetcher = fetchurl; input = "$src"; }; in stdenvNoCC.mkDerivation { name = repo; version = "${base}.${release}"; src = intake.fetcher { inherit url; hash = selected.sources.proton.hash; }; buildCommand = '' mkdir -p $out/bin tar -C $out/bin --strip=1 -x -f ${intake.input} '' # Allow to keep the same name between updates + lib.strings.optionalString (toolTitle != null) '' sed -i -r 's|"${toolPattern}"|"${toolTitle}"|' $out/bin/compatibilitytool.vdf ''; passthru = if withUpdateScript then { updateScript = callPackage ./update.nix { inherit tarballPrefix tarballSuffix releasePrefix releaseSuffix owner repo ; # Prefer explicit variant, otherwise use defaultVariant from the spec variant = if variant != null then variant else (versionSpec.defaultVariant or "cachyos"); }; } else { }; meta = with lib; { inherit homepage; description = "Compatibility tool for Steam Play based on Wine and additional components (patched and built by ${owner})"; license = licenses.bsd3; platforms = [ "x86_64-linux" ]; maintainers = with maintainers; [ pedrohlc ]; }; }