[UX] Add proton-cachyos to the wine manager (#5463)

* [UX] Add proton-cachyos to the wine manager

* Use "Proton-CachyOS" case everywhere user-facing
This commit is contained in:
Ariel Juodziukynas authored and GitHub committed 2026-06-23 19:25:06 +02:00
1 parent 95c9fc7e64
commit 5ffb4fc1ad
9 files changed
+63 -5

No files matched your search

+1
View File
@@ -323,6 +323,7 @@ Heroic would not be possible without the work done in many other projects:
- Nile: https://github.com/imLinguin/nile
- Comet: https://github.com/imLinguin/comet
- GE-Proton: https://github.com/GloriousEggroll/proton-ge-custom
- Proton-cachyos: https://github.com/CachyOS/proton-cachyos
- umu-launcher: https://github.com/Open-Wine-Components/umu-launcher
- DXVK: https://github.com/doitsujin/dxvk
- VKD3D: https://github.com/HansKristian-Work/vkd3d-proton
+1
View File
@@ -1199,6 +1199,7 @@
},
"wineExplanation": {
"gpt": "Game Porting Toolkit is developed by Apple and it is recommended for Apple Silicon Macs with the M1+ chips and works best for newer games that use DX12.",
"proton-cachyos": "Proton-CachyOS is a Proton variant maintaned by the CachyOS team. It includes extra tools like DXVK-Sarek and D7VK.",
"proton-ge": "GE-Proton is a Proton variant created by Glorious Eggroll. It is meant to be used along with the umu launcher (default in Heroic).",
"wine-crossover": "Wine-Crossover is based on the Crossover OpenSource Wine project and is recommended for Intel Macs and for DX11 or older games.",
"wine-ge": "Wine-GE-Proton is a Wine variant created by Glorious Eggroll. It has been deprecated in favor of GE-Proton with the umu launcher.",
+2 -2
View File
@@ -818,7 +818,7 @@ function getDxvkUrl(): string {
}
if (any_gpu_supports_version([1, 1, 0])) {
logInfo(
'The GPU(s) in this system only support Vulkan 1.1/1.2, falling back to DXVK 1.10.3',
'The GPU(s) in this system only support Vulkan 1.1/1.2, falling back to DXVK 1.10.3 for Wine, or use DXVK-Sarek with proton-cachyos',
LogPrefix.ToolInstaller
)
return 'https://api.github.com/repos/doitsujin/dxvk/releases/tags/v1.10.3'
@@ -854,7 +854,7 @@ function getVkd3dUrl(): string {
}
if (any_gpu_supports_version([1, 1, 0])) {
logInfo(
'The GPU(s) in this system only support Vulkan 1.1/1.2, falling back to VKD3D 2.6',
'The GPU(s) in this system only support Vulkan 1.1/1.2, falling back to VKD3D 2.6 for Wine, or use DXVK-Sarek with proton-cachyos',
LogPrefix.ToolInstaller
)
return 'https://api.github.com/repos/Heroic-Games-Launcher/vkd3d-proton/releases/tags/v2.6'
@@ -25,3 +25,7 @@ export const WINESTAGINGMACOS_URL =
/// Url to Game Porting Toolkit from Gcenx github release page
export const GPTK_URL =
'https://api.github.com/repos/Gcenx/game-porting-toolkit/releases'
/// Url to Proton-CachyOS from the CachyOS team github release page
export const PROTON_CACHYOS_URL =
'https://api.github.com/repos/CachyOS/proton-cachyos/releases'
+16 -1
View File
@@ -16,7 +16,8 @@ import {
WINELUTRIS_URL,
WINECROSSOVER_URL,
WINESTAGINGMACOS_URL,
GPTK_URL
GPTK_URL,
PROTON_CACHYOS_URL
} from './constants'
import { VersionInfo, Repositorys, WineVersionInfo } from 'common/types'
import {
@@ -150,6 +151,20 @@ async function getAvailableVersions({
})
break
}
case Repositorys.PROTONCACHYOS: {
await fetchReleases({
url: PROTON_CACHYOS_URL,
type: 'Proton-CachyOS',
count: count
})
.then((fetchedReleases: VersionInfo[]) => {
releases.push(...fetchedReleases)
})
.catch((error: Error) => {
logError(error, LogPrefix.WineDownloader)
})
break
}
default: {
logWarning(
`Unknown and not supported repository key passed! Skip fetch for ${repo}`,
@@ -68,6 +68,18 @@ async function fetchReleases({
release_data.download = stagingAsset.browser_download_url
release_data.downsize = stagingAsset.size
}
} else if (type === 'Proton-CachyOS') {
const shaAsset = release.assets.find((asset) =>
asset.browser_download_url.endsWith('x86_64.sha512sum')
)
if (shaAsset) release_data.checksum = shaAsset.browser_download_url
const tarAsset = release.assets.find((asset) =>
asset.browser_download_url.endsWith('x86_64.tar.xz')
)
if (tarAsset) {
release_data.download = tarAsset.browser_download_url
release_data.downsize = tarAsset.size
}
} else {
for (const asset of release.assets) {
if (asset.name.endsWith('sha512sum')) {
+12 -1
View File
@@ -42,6 +42,9 @@ function getLatestLocalVersions(): Record<string, string | undefined> {
?.date,
latestGEProton: localWines.find(
(wine) => wine.version === 'GE-Proton-latest'
)?.date,
latestProtonCachyos: localWines.find(
(wine) => wine.version === 'Proton-CachyOS-latest'
)?.date
}
}
@@ -104,6 +107,14 @@ export function updateWineListsIfOutdated(releasesData: ReleasesInfo) {
)
)
repositoriesToFetch.push(Repositorys.WINEGE)
if (
localVersionIsOlder(
latestLocalVersions.latestProtonCachyos,
releasesData['proton-cachyos']
)
)
repositoriesToFetch.push(Repositorys.PROTONCACHYOS)
}
if (isMac) {
@@ -155,7 +166,7 @@ async function updateWineVersionInfos(
Repositorys.WINESTAGINGMACOS,
Repositorys.GPTK
]
: [Repositorys.WINEGE, Repositorys.PROTONGE]
: [Repositorys.WINEGE, Repositorys.PROTONGE, Repositorys.PROTONCACHYOS]
}
await getAvailableVersions({
+4 -1
View File
@@ -759,6 +759,7 @@ export type Type =
| 'Wine-Crossover'
| 'Wine-Staging-macOS'
| 'Game-Porting-Toolkit'
| 'Proton-CachyOS'
/**
* Interface contains information about a version
@@ -790,7 +791,8 @@ export enum Repositorys {
WINELUTRIS,
WINECROSSOVER,
WINESTAGINGMACOS,
GPTK
GPTK,
PROTONCACHYOS
}
export type WineManagerStatus =
@@ -873,6 +875,7 @@ export type ReleasesInfo = Record<
| 'ge-proton'
| 'wine-ge'
| 'game-porting-toolkit'
| 'proton-cachyos'
| 'wine-staging'
| 'wine-crossover'
| 'dxvk'
@@ -50,6 +50,7 @@ export default function WineManager(): JSX.Element | null {
if (isLinux) {
return [
{ type: 'GE-Proton', value: 'protonge' },
{ type: 'Proton-CachyOS', value: 'proton-cachyos' },
{ type: 'Wine-GE', value: 'winege' }
]
}
@@ -162,6 +163,16 @@ export default function WineManager(): JSX.Element | null {
)}
</div>
)
case 'Proton-CachyOS':
return (
<div className="infoBox">
<FontAwesomeIcon icon={faCheck} color={'green'} />
{t(
'wineExplanation.proton-cachyos',
'Proton-CachyOS is a Proton variant maintaned by the CachyOS team. It includes extra tools like DXVK-Sarek and D7VK.'
)}
</div>
)
default:
return <></>
}