Compare commits

...
314 Commits
Author SHA1 Message Date
Boria138 d1018019d2 feat: added exe network block
Code check / Check code (pull_request) Successful in 1m44s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-08-01 10:07:13 +05:00
Boria138 d202b03025 feat: make game card geometry theme-aware
Code check / Check code (push) Successful in 2m2s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-31 11:16:11 +05:00
Boria138 4e9f1ee906 chore: separate system manager error types
Code check / Check code (push) Successful in 1m33s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-31 10:39:37 +05:00
Boria138 2590583e98 chore: unify card grid navigation and theme store sounds
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-31 10:35:21 +05:00
Boria138 a62c2b4ee6 fix: prevent duplicate theme preview downloads
Code check / Check code (push) Successful in 5m34s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-30 23:44:45 +05:00
Boria138 c3adf4c6de feat: add Dank Material Shell theme support
Code check / Check code (push) Successful in 2m48s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-30 14:46:42 +05:00
Boria138 eff8436aa0 feat: theme full detail page statistics container
Code check / Check code (push) Successful in 1m48s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-30 14:07:59 +05:00
Boria138 7707d348c2 chore: report missing 32-bit glibc
Code check / Check code (push) Successful in 3m4s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-30 11:18:57 +05:00
Boria138 6d624a59c9 fix: focus install button on detail page
Code check / Check code (push) Successful in 1m36s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-30 10:56:00 +05:00
Boria138 87f06913f2 fix: correct D-pad game card navigation order
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-30 10:53:46 +05:00
Codeberg TranslateandRubin13 b193d36d42 Translated using Weblate (German)
Currently translated at 99.8% (750 of 751 strings)

Translated using Weblate (German)

Currently translated at 99.8% (746 of 747 strings)

Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Rubin13 <rubin13@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/portprotonqt/portprotonqt/de/
Translation: PortProtonQt/PortProtonQt
2026-07-30 05:46:50 +00:00
Boria138 5e12b29c5f fix: add sherrydmn to GameMode conflicts
Code check / Check code (push) Successful in 1m38s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-30 10:46:31 +05:00
Boria138 cdfedd1503 fix: speed up and deduplicate compatibility reports
Code check / Check code (push) Successful in 2m56s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-29 19:18:21 +05:00
Boria138 11dbd249ab fix: prevent UI freeze after game exit
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-29 19:08:54 +05:00
Boria138 000220dd47 chore: todo moved to https://linux-gaming.ru/roadmap
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-29 18:41:23 +05:00
Boria138 8356659108 fix: recolor control hint icons through theme colors
Code check / Check code (push) Successful in 1m32s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-29 12:57:07 +05:00
Boria138 2afa185084 chore: use systemctl and loginctl for system actions
Code check / Check code (push) Successful in 3m2s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-28 16:29:55 +00:00
Boria138 a41da6b35b chore(localization): update
Code check / Check code (push) Successful in 4m19s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-28 11:59:33 +05:00
Boria138 bb84524b06 feat: add crash report toggle
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-28 11:57:59 +05:00
Boria138 2cf5369892 feat: report incompatible DXVK configurations
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-28 11:50:56 +05:00
Codeberg Translateandgallegonovato 67026aa040 Translated using Weblate (Spanish)
Currently translated at 46.3% (346 of 746 strings)

Co-authored-by: gallegonovato <gallegonovato@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/portprotonqt/portprotonqt/es/
Translation: PortProtonQt/PortProtonQt
2026-07-27 19:15:59 +05:00
Codeberg TranslateandRubin13 0e3e300eb5 Translated using Weblate (German)
Currently translated at 100.0% (746 of 746 strings)

Co-authored-by: Rubin13 <rubin13@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/portprotonqt/portprotonqt/de/
Translation: PortProtonQt/PortProtonQt
2026-07-27 19:15:44 +05:00
Boria138 b9991f89b3 feat: add Steam shortcut for all accounts
Code check / Check code (push) Successful in 1m56s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-27 10:51:16 +05:00
Boria138 d9a6e1cca4 feat: add crash compatibility analyzer
Code check / Check code (push) Successful in 2m59s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-27 10:30:47 +05:00
Boria138 c4a216422e feat: generalize sakura background as leaf animation
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-27 09:25:31 +05:00
Boria138 91f92a215c feat: add procedural detail page backgrounds
Code check / Check code (push) Successful in 5m8s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-27 00:38:07 +05:00
Boria138 13dd00c8d5 chore: refresh GOG library from library update button
Code check / Check code (push) Successful in 4m26s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-26 23:58:38 +05:00
Boria138 ef7b0bce16 feat: expand UI sound feedback
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-26 23:55:03 +05:00
Boria138 72546d2bd5 chore(locale): update
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-26 11:30:12 +05:00
Boria138 0e54c0451a feat: add Steam account selection
Code check / Check code (push) Successful in 2m22s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-26 11:26:23 +05:00
Boria138 2d26067f37 fix: restart UI sounds and silence card loading
Code check / Check code (push) Successful in 1m30s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-26 10:28:25 +05:00
Boria138 1c9cfea1eb chore(sounds): replace gamepad_connect sound
Code check / Check code (push) Successful in 1m39s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-26 10:23:19 +05:00
Boria138 7cc0873ee2 fix: avoid navigation sound when leaving game details
Code check / Check code (push) Successful in 2m58s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-24 20:33:45 +05:00
Boria138 bb8fc83259 chore(changelog): update
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-24 20:24:07 +05:00
Boria138 3f2c368946 chore(sounds): increse
Code check / Check code (push) Successful in 1m30s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-24 19:51:55 +05:00
Boria138 0ba671ed1a fix: clear GOG metadata cache and hide empty downloads tab
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-24 19:47:38 +05:00
Boria138 d96c78d3cb feat: improve AppImage desktop integration
Code check / Check code (push) Successful in 3m38s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-24 19:34:46 +05:00
Boria138 3ad8193701 fix: update desktop database after shortcut changes
Code check / Check code (push) Successful in 1m34s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-24 19:19:25 +05:00
Boria138 4fd947cab5 feat: update UI sound feedback
Code check / Check code (push) Successful in 2m47s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-24 19:11:13 +05:00
Boria138 a09ee2e804 fix: avoid audio deadlock
Code check / Check code (push) Successful in 1m33s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-24 18:58:44 +05:00
Boria138 4a37d901a2 feat: add AppImage desktop integration
Code check / Check code (push) Successful in 1m30s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-23 23:36:53 +05:00
Boria138 5cfea4d8fd fix: avoid startup hang when audio service is unavailable
Code check / Check code (push) Successful in 2m8s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-23 23:00:26 +05:00
Boria138 7ca9cb4cf5 feat: install GOG support redistributables
Code check / Check code (push) Failing after 1m26s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-23 19:45:08 +05:00
Boria138 e5021edbed feat: simplify GOG account login flow
Code check / Check code (push) Successful in 2m39s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-23 13:28:16 +05:00
Boria138 96f471336c fix: detect Steam user without MostRecent flag
Code check / Check code (push) Successful in 3m15s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-23 13:03:33 +05:00
Boria138 a1441669c1 fix: restore pre-commit checks after GOG changes
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-23 12:50:58 +05:00
Boria138 de794d1aeb chore: added ARM builds
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-23 12:38:40 +05:00
Codeberg Translateandrogerio-mattos d27ffbf407 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (708 of 708 strings)

Co-authored-by: rogerio-mattos <rogerio-mattos@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/portprotonqt/portprotonqt/zh_Hans/
Translation: PortProtonQt/PortProtonQt
2026-07-22 17:40:58 +00:00
Codeberg Translateandrogerio-mattos d2448b09b7 Translated using Weblate (Russian)
Currently translated at 100.0% (708 of 708 strings)

Co-authored-by: rogerio-mattos <rogerio-mattos@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/portprotonqt/portprotonqt/ru/
Translation: PortProtonQt/PortProtonQt
2026-07-22 17:40:58 +00:00
Codeberg Translateandrogerio-mattos 549123657d Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (708 of 708 strings)

Co-authored-by: rogerio-mattos <rogerio-mattos@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/portprotonqt/portprotonqt/pt_BR/
Translation: PortProtonQt/PortProtonQt
2026-07-22 17:40:58 +00:00
Codeberg Translateandgallegonovato 2f89479802 Translated using Weblate (Spanish)
Currently translated at 45.0% (319 of 708 strings)

Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: gallegonovato <gallegonovato@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/portprotonqt/portprotonqt/es/
Translation: PortProtonQt/PortProtonQt
2026-07-22 17:40:58 +00:00
Codeberg TranslateandRubin13 6325eee8c2 Translated using Weblate (German)
Currently translated at 100.0% (708 of 708 strings)

Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Rubin13 <rubin13@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/portprotonqt/portprotonqt/de/
Translation: PortProtonQt/PortProtonQt
2026-07-22 17:40:58 +00:00
Boria138 83c9c9ba64 fix: prevent GOG repair from hanging
Code check / Check code (push) Failing after 2m50s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-22 22:39:54 +05:00
Boria138 1542c5bd0c fix: load compatibility badges for GOG games
Code check / Check code (push) Failing after 1m8s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-22 20:50:24 +05:00
Boria138 681ba1ff89 fix: switch PPDB URLs to linux-gaming.ru
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-22 20:32:25 +05:00
Boria138 db099bce1f feat: added gog integration
Code check / Check code (pull_request) Failing after 2m20s
Code check / Check code (push) Failing after 2m19s
2026-07-22 17:50:58 +05:00
Boria138 5271596481 fix: use Qt Multimedia audio-only fallback
Code check / Check code (push) Successful in 1m32s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-22 17:05:15 +05:00
Boria138 c3d7cf4c62 chore: debloat appimage
Package Build - AppImage, Arch, Fedora, Debian / Build Fedora RPM (rawhide) (pull_request) Skipped
Package Build - AppImage, Arch, Fedora, Debian / Build Arch Package (pull_request) Skipped
Package Build - AppImage, Arch, Fedora, Debian / Build Debian Package (pull_request) Skipped
Code check / Check code (push) Successful in 2m47s
Code check / Check code (pull_request) Successful in 2m6s
Package Build - AppImage, Arch, Fedora, Debian / Build AppImage (pull_request) Failing after 1m4s
Package Build - AppImage, Arch, Fedora, Debian / changes (pull_request) Successful in 18s
Package Build - AppImage, Arch, Fedora, Debian / Build Fedora RPM (43) (pull_request) Skipped
Package Build - AppImage, Arch, Fedora, Debian / Build Fedora RPM (44) (pull_request) Skipped
Package Build - AppImage, Arch, Fedora, Debian / Build Fedora RPM (42) (pull_request) Skipped
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-21 21:48:28 +05:00
Boria138 7941258ba7 chore: update development scripts
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-21 14:08:18 +05:00
Boria138 1a105fcf0b chore(changelog): update
Code check / Check code (push) Successful in 3m6s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-21 13:36:36 +05:00
Boria138 95aeb4a62f chore: rework sounds theme, thx to @Vektor
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-21 13:18:53 +05:00
Boria138 55a0a158c8 fix: add Qt Multimedia runtime dependencies
Code check / Check code (push) Successful in 3m45s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-20 23:19:28 +05:00
Boria138 daa05187f5 fix: install auxiliary desktop files in Debian package
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-20 23:05:54 +05:00
Boria138 92bb49286b chore(locale): update
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-20 23:03:10 +05:00
Codeberg TranslateandRubin13 edba3c10bf Translated using Weblate (German)
Currently translated at 100.0% (707 of 707 strings)

Co-authored-by: Rubin13 <rubin13@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/portprotonqt/portprotonqt/de/
Translation: PortProtonQt/PortProtonQt
2026-07-20 15:18:21 +00:00
Boria138 fa133fff98 feat: add UI sound system with theme-integrated sound effects
Code check / Check code (push) Successful in 1m25s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-20 15:18:16 +00:00
Boria138 8e90e9cafc fix: show Edit or Add shortcut button exclusively for non-Steam games
Code check / Check code (push) Successful in 2m59s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-19 23:31:59 +05:00
Gitea Actions 6f8436eeb2 chore: update download stats mountly
Code check / Check code (push) Successful in 1m54s
Signed-off-by: Gitea Actions <gitea-actions@users.noreply.gitea.com>
2026-07-19 09:51:25 +05:00
Renovate Bot 69833e7295 chore(deps): update archlinux:base-devel docker digest to 212b1e5
Code check / Check code (push) Successful in 1m40s
2026-07-19 03:15:14 +00:00
Renovate Bot 7533769b15 chore(deps): update https://git.linux-gaming.ru/actions/setup-node digest to 2499707
Code check / Check code (push) Successful in 1m26s
2026-07-19 03:15:04 +00:00
Gitea Actions 174fae6dab chore: download stats 2026-07-19T03:01:01Z 2026-07-19 03:01:01 +00:00
Gitea Actions 497acf85e4 chore: exclude steam-compat from download stats
Signed-off-by: Gitea Actions <gitea-actions@users.noreply.gitea.com>
2026-07-18 23:19:54 +05:00
Gitea Actions 3b57f87770 chore: download stats 2026-07-18T18:07:48Z 2026-07-18 18:07:48 +00:00
Gitea Actions d8a9ee58bc chore: update download badge to green and add download stats top lists 2026-07-18 23:06:53 +05:00
Gitea Actions 66adeb619d chore: download stats 2026-07-18T17:54:31Z 2026-07-18 17:54:31 +00:00
Boria138 333cc09409 feat: add download stats to README
Code check / Check code (push) Successful in 3m47s
2026-07-18 22:50:25 +05:00
Boria138 229f1ee78f fix(ci): build hotfix packages from the selected branch
Code check / Check code (push) Successful in 1m46s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-18 17:59:21 +05:00
Boria138 20b64de731 bump to v1.3.1
Code check / Check code (push) Successful in 1m26s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-18 17:52:27 +05:00
Boria138 f0ab40a2da fix CVE-2026-59678
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-18 17:52:27 +05:00
Boria138 2fb580eb09 fix: support Cyrillic and prevent false search matches
Code check / Check code (push) Successful in 1m35s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-18 11:33:57 +05:00
Boria138 b45d26ea8c chore(locale): update
Code check / Check code (push) Successful in 1m26s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-17 08:46:43 +05:00
Boria138 32e4b28aac feat: add silent and logging launch modes
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-17 08:45:08 +05:00
Boria138 c853327cac Revert "fix: clear AppImage Vulkan overrides before runtime launch"
Code check / Check code (push) Successful in 1m26s
This reverts commit 3c793345ba.

Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-17 07:36:58 +05:00
Boria138 7d2c5e4662 Revert "fix: remove executable permissions from PortProton scripts"
Code check / Check code (push) Successful in 1m25s
This reverts commit a6564d350f.
2026-07-16 23:45:19 +05:00
Boria138 a6564d350f fix: remove executable permissions from PortProton scripts
Code check / Check code (push) Successful in 3m53s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-16 23:11:16 +05:00
Boria138 0909faf50c chore(changelog): update
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-16 16:45:42 +05:00
Boria138 e123bfa79f fix: restore native Steam games in library
Code check / Check code (push) Successful in 2m22s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-16 13:03:16 +05:00
Boria138 b45a0683c9 fix: correct SDL3 D-pad vertical directions
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-16 13:03:16 +05:00
Boria138 e567a16437 fix: preserve stop button state on compact layout
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-16 13:03:16 +05:00
Boria138 7e38d9a70f feat: support Steam shortcut metadata editing
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-16 13:03:15 +05:00
Boria138 3c793345ba fix: clear AppImage Vulkan overrides before runtime launch
Code check / Check code (push) Successful in 1m39s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-16 07:12:30 +00:00
Boria138 9e0946ae7e ci: support versioned hotfix AppImage builds
Code check / Check code (push) Successful in 1m27s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-16 11:51:12 +05:00
Boria138 2bc610940b chore(changelog): update
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-16 11:30:49 +05:00
Codeberg Translateandrogerio-mattos f9c790b568 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (704 of 704 strings)

Co-authored-by: rogerio-mattos <rogerio-mattos@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/portprotonqt/portprotonqt/zh_Hans/
Translation: PortProtonQt/PortProtonQt
2026-07-14 15:45:13 +00:00
Codeberg Translateandrogerio-mattos 035e560fd5 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (704 of 704 strings)

Co-authored-by: rogerio-mattos <rogerio-mattos@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/portprotonqt/portprotonqt/pt_BR/
Translation: PortProtonQt/PortProtonQt
2026-07-14 15:45:13 +00:00
Codeberg TranslateandRubin13 d185c7cfdc Translated using Weblate (German)
Currently translated at 100.0% (704 of 704 strings)

Co-authored-by: Rubin13 <rubin13@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/portprotonqt/portprotonqt/de/
Translation: PortProtonQt/PortProtonQt
2026-07-14 15:45:13 +00:00
Boria138 97d4ea26d5 fix: unset Vulkan driver override in AppImage runtime
Code check / Check code (push) Has been cancelled
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-14 20:45:02 +05:00
Boria138 a63c894cb9 Revert "fix: exclude AppImage graphics paths from pressure-vessel"
This reverts commit 032398a988.
2026-07-14 20:32:30 +05:00
Boria138 032398a988 fix: exclude AppImage graphics paths from pressure-vessel
Code check / Check code (push) Successful in 1m30s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-14 15:28:43 +05:00
Boria138 9a5265f335 Revert "fix: wrap AppImage executables with sharun"
This reverts commit b1155726e0.
2026-07-14 15:05:51 +05:00
Boria138 589c8657a6 fix: use Steam covers in compact details
Code check / Check code (push) Successful in 2m44s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-14 12:35:31 +05:00
Boria138 b1155726e0 fix: wrap AppImage executables with sharun
Code check / Check code (push) Has been cancelled
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-14 12:19:23 +05:00
Boria138 4fd11e09fe feat: show cached exe icons in compact details
Code check / Check code (push) Successful in 1m47s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-14 11:07:11 +05:00
Boria138 5dc66e0822 refactor: replace pygame gamepad input with SDL3
Code check / Check code (push) Successful in 1m29s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-13 17:50:33 +00:00
Boria138 0cd98c0996 fix(appimage): skip portwine_db strace
Code check / Check code (push) Successful in 1m34s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-13 22:24:45 +05:00
Boria138 d813ac1fac fix(appimage): added vk_gpu_info to /usr/bin thx to @Samueru-sama
Code check / Check code (push) Successful in 2m14s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-13 22:05:46 +05:00
Mikhail Tergoev 258b1ab6c5 bump v1.3.0
Build AppImage, Arch, Fedora and Debian Packages / Build Fedora RPM (43) (push) Successful in 1m11s
Build AppImage, Arch, Fedora and Debian Packages / Build Fedora RPM (44) (push) Successful in 2m49s
Code check / Check code (push) Successful in 1m27s
Build AppImage, Arch, Fedora and Debian Packages / Build AppImage (push) Successful in 5m58s
Build AppImage, Arch, Fedora and Debian Packages / Build Arch Package (push) Successful in 2m16s
Build AppImage, Arch, Fedora and Debian Packages / Build Fedora RPM (rawhide) (push) Successful in 1m15s
Build AppImage, Arch, Fedora and Debian Packages / Build Debian Package (push) Successful in 1m41s
Build AppImage, Arch, Fedora and Debian Packages / Create and Publish Release (push) Successful in 18s
Build AppImage, Arch, Fedora and Debian Packages / Build Fedora RPM (42) (push) Successful in 1m23s
2026-07-13 16:19:01 +03:00
Mikhail Tergoev 450d63963d fix timeout for downloading
Code check / Check code (push) Successful in 2m19s
2026-07-13 16:05:38 +03:00
Boria138 fe8bc1ef8e fix: show executable icon on detail page
Code check / Check code (push) Successful in 1m53s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-13 17:58:56 +05:00
Boria138 f0579307db fix: show executable icon while cover downloads
Code check / Check code (push) Successful in 1m24s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-13 17:42:28 +05:00
Boria138 a61d62071f fix: use executable icon when cover is unavailable
Code check / Check code (push) Successful in 2m58s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-13 17:34:57 +05:00
Boria138 316ba9d4a8 fix: check 32-bit dependencies before autoinstall
Code check / Check code (push) Successful in 1m28s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-13 17:21:27 +05:00
Boria138 c4cc79a432 fix: filter non-Windows Steam library entries
Code check / Check code (push) Successful in 2m43s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-13 12:09:56 +05:00
Boria138 805732a5c6 fix: ignore stale HLTB detail callbacks
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-13 11:54:50 +05:00
Boria138 8ecb26a3e6 chore(changelog): update
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-12 08:50:52 +05:00
Codeberg Translateandrogerio-mattos 6d800c04fd Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (702 of 702 strings)

Co-authored-by: rogerio-mattos <rogerio-mattos@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/portprotonqt/portprotonqt/pt_BR/
Translation: PortProtonQt/PortProtonQt
2026-07-12 03:24:48 +00:00
Codeberg Translateandgallegonovato 2addc70dc6 Translated using Weblate (Spanish)
Currently translated at 43.4% (305 of 702 strings)

Co-authored-by: gallegonovato <gallegonovato@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/portprotonqt/portprotonqt/es/
Translation: PortProtonQt/PortProtonQt
2026-07-12 03:24:48 +00:00
Codeberg TranslateandRubin13 7c662927b1 Translated using Weblate (German)
Currently translated at 100.0% (702 of 702 strings)

Co-authored-by: Rubin13 <rubin13@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/portprotonqt/portprotonqt/de/
Translation: PortProtonQt/PortProtonQt
2026-07-12 03:24:48 +00:00
Renovate Bot 3b76a7c8a1 chore(deps): update debian docker tag to trixie-20260623
Code check / Check code (push) Successful in 1m34s
2026-07-12 03:24:44 +00:00
Renovate Bot a94edea9a6 chore(deps): update archlinux:base-devel docker digest to b21289e
Code check / Check code (pull_request) Successful in 1m51s
Package Build - AppImage, Arch, Fedora, Debian / changes (pull_request) Successful in 16s
Package Build - AppImage, Arch, Fedora, Debian / Build AppImage (pull_request) Has been skipped
Package Build - AppImage, Arch, Fedora, Debian / Build Fedora RPM (42) (pull_request) Has been skipped
Package Build - AppImage, Arch, Fedora, Debian / Build Fedora RPM (43) (pull_request) Has been skipped
Package Build - AppImage, Arch, Fedora, Debian / Build Fedora RPM (44) (pull_request) Has been skipped
Package Build - AppImage, Arch, Fedora, Debian / Build Fedora RPM (rawhide) (pull_request) Has been skipped
Package Build - AppImage, Arch, Fedora, Debian / Build Debian Package (pull_request) Has been skipped
Code check / Check code (push) Successful in 1m30s
Package Build - AppImage, Arch, Fedora, Debian / Build Arch Package (pull_request) Has been skipped
2026-07-12 00:01:24 +00:00
Boria138 39ea73ae87 fix: limit ALT i586 dependency install to installed packages
Code check / Check code (push) Successful in 4m40s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-11 23:44:29 +05:00
Boria138 4b4ad33a54 fix: align classic-light source corner color
Code check / Check code (push) Successful in 1m44s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-11 12:05:51 +05:00
Boria138 b0d5771bcb chore(locale): update
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-11 11:55:46 +05:00
Boria138 e9ccd6c2b4 feat: add missing executable card cleanup button
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-11 11:53:30 +05:00
Boria138 8d10d90263 fix: unify autoinstall and library search
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-11 11:38:34 +05:00
Boria138 15e780d618 fix: keep wine prefix combo in focus order
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-11 11:29:33 +05:00
Boria138 9166cd9cd3 fix: align library control button styling
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-11 11:21:05 +05:00
Boria138 869666ece9 fix: avoid empty custom_data directories
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-11 11:04:04 +05:00
Boria138 269151c00a fix: use real AppImage update progress
Code check / Check code (push) Successful in 2m50s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-10 20:48:35 +05:00
Boria138 c7d689cde6 Revert "fix: use nvidia_new dxvk config always on RTX"
Code check / Check code (push) Successful in 2m37s
This reverts commit 9c1638daff.

Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-10 20:22:57 +05:00
Boria138 52d72b660e feat(appimage): DPAD scroll for changelog
Code check / Check code (push) Successful in 1m30s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-10 18:33:43 +05:00
Boria138 99a0e9ba1d chore(locale): update
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-10 14:56:30 +05:00
Boria138 b250b86032 feat: add AppImage auto-update UI
Code check / Check code (push) Successful in 2m17s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-10 14:30:02 +05:00
Boria138 0797c1a52e chore(appimage): add autoupdate from gitea
Code check / Check code (push) Successful in 1m45s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-10 00:22:15 +05:00
Boria138 9ad828ace5 fix: refresh Wine status after version removal
Code check / Check code (push) Successful in 1m22s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-08 23:27:43 +05:00
Boria138 a4e0928ff6 feat: add Flatpak PortProton directory auto-detection as portdatapath
Code check / Check code (push) Successful in 3m52s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-08 19:50:50 +05:00
Boria138 bcda562b6f chore(locale): update
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-08 19:41:56 +05:00
Boria138 15bc92ca7f fix: add ALT i586 dependency prompt before game launch
Code check / Check code (push) Successful in 1m23s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-08 19:18:51 +05:00
Boria138 9b3bd6b31e fix: handle DOSBox lnk from GOG
Code check / Check code (push) Successful in 3m42s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-08 14:00:12 +00:00
Boria138 9c1638daff fix: use nvidia_new dxvk config always on RTX
Code check / Check code (push) Successful in 3m26s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-08 13:59:59 +00:00
Boria138 a9b3dff064 refactor: replace jq usage with orjson helpers
Code check / Check code (push) Successful in 1m24s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-08 13:59:51 +00:00
Boria138 6c1bef2642 fix(scripts): quote printf messages
Code check / Check code (pull_request) Successful in 1m19s
Code check / Check code (push) Successful in 1m24s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-08 17:26:56 +05:00
Boria138 545ce073d7 chore: hide Steam menu action when Steam is unavailable
Code check / Check code (push) Successful in 1m22s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-08 17:23:09 +05:00
Boria138 5e7f81e206 chore: remove shortcuts when deleting PortProton games
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-08 17:15:55 +05:00
Dervart 41794c44a9 feat: support gradient type, direction, and cover color count for detail
Code check / Check code (pull_request) Successful in 1m22s
Code check / Check code (push) Successful in 1m20s
page
2026-07-07 22:40:57 +07:00
Boria138 d6517cb7c1 feat: add DETAIL_PAGE_GRADIENT for custom detail page gradient override
Code check / Check code (push) Successful in 6m7s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-07 12:07:12 +05:00
Boria138 808910c6fc feat: add detail page background modes (gradient, static_waves, waves)
Code check / Check code (push) Successful in 1m21s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-06 18:03:13 +05:00
Boria138 d17fbb713e chore: add gamepad tooltip for combo boxes in favorites tab
Code check / Check code (push) Successful in 1m30s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-06 17:22:16 +05:00
Codeberg Translateandrogerio-mattos 863cc4d336 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (689 of 689 strings)

Co-authored-by: rogerio-mattos <rogerio-mattos@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/portprotonqt/portprotonqt/pt_BR/
Translation: PortProtonQt/PortProtonQt
2026-07-05 18:12:59 +00:00
Codeberg Translateandrogerio-mattos df4dc4497d Translated using Weblate (Spanish)
Currently translated at 38.4% (265 of 689 strings)

Co-authored-by: rogerio-mattos <rogerio-mattos@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/portprotonqt/portprotonqt/es/
Translation: PortProtonQt/PortProtonQt
2026-07-05 18:12:59 +00:00
Boria138 33575fc27a fix: remove unconditional icon recoloring fallback in AutoSizeButton
Code check / Check code (push) Successful in 2m54s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-05 23:12:09 +05:00
Boria138 34920b8a5e chore: replace wine combo popup widening with gamepad tooltip
Code check / Check code (push) Successful in 1m24s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-05 23:01:57 +05:00
Boria138 c068129a46 fix: widen wine popup and refresh installed status
Code check / Check code (push) Successful in 1m39s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-05 18:42:53 +05:00
Renovate Bot 498497d3e2 chore(deps): update https://git.linux-gaming.ru/actions/setup-python digest to ece7cb0
Code check / Check code (push) Successful in 1m25s
2026-07-05 06:54:41 +00:00
Renovate Bot f193089ff3 chore(deps): update archlinux:base-devel docker digest to 5fb487a
Code check / Check code (pull_request) Successful in 1m39s
Package Build - AppImage, Arch, Fedora, Debian / changes (pull_request) Successful in 16s
Package Build - AppImage, Arch, Fedora, Debian / Build AppImage (pull_request) Has been skipped
Package Build - AppImage, Arch, Fedora, Debian / Build Fedora RPM (42) (pull_request) Has been skipped
Package Build - AppImage, Arch, Fedora, Debian / Build Fedora RPM (43) (pull_request) Has been skipped
Package Build - AppImage, Arch, Fedora, Debian / Build Fedora RPM (44) (pull_request) Has been skipped
Package Build - AppImage, Arch, Fedora, Debian / Build Debian Package (pull_request) Has been skipped
Package Build - AppImage, Arch, Fedora, Debian / Build Fedora RPM (rawhide) (pull_request) Has been skipped
Code check / Check code (push) Successful in 1m26s
Package Build - AppImage, Arch, Fedora, Debian / Build Arch Package (pull_request) Has been skipped
2026-07-05 00:01:23 +00:00
Dervart 952af795d5 fix: classic themes button text/icon state colors
Code check / Check code (pull_request) Successful in 3m3s
Code check / Check code (push) Failing after 6m49s
2026-07-04 13:17:22 +07:00
Boria138 6e3f70f0c6 fix: prevent icon color inheritance recursion
Code check / Check code (push) Successful in 1m41s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-04 11:08:50 +05:00
Boria138 a795bddbc3 fix: keep compact wine table rows in classic-light
Code check / Check code (push) Successful in 1m35s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-04 10:52:22 +05:00
Boria138 76a435d421 fix: prevent recursive theme loads for icon colors
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-04 10:48:29 +05:00
Boria138 9e13e5d7fa fix: keep AutoSizeButton text centered on hover
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-04 10:31:15 +05:00
Boria138 186d065f4a chore: improve themed combo boxes and icon recoloring
Code check / Check code (push) Failing after 1m11s
- Move CustomComboBox to custom_widgets
- Use CustomComboBox consistently for combo boxes
- Recolor context menu icons through ICON_COLORS
- Fix AutoSizeButton text color for iconless buttons

Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-03 23:56:23 +05:00
Dervart 270c96e1cd update theme guide readme
Code check / Check code (push) Failing after 3m56s
2026-07-03 16:50:00 +00:00
Dervart 608fc12c2b themes: update styles 2026-07-03 16:50:00 +00:00
Dervart 53862ec4e3 classic-light: add styles 2026-07-03 16:50:00 +00:00
Dervart 7744394f07 standart-light: add missed styles 2026-07-03 16:50:00 +00:00
Dervart acd8269b47 feat: add class CustomComboBox for editable combo context menu 2026-07-03 16:50:00 +00:00
Dervart c087b698ab update standart-light theme 2026-07-03 16:50:00 +00:00
Dervart ad9694df98 fix: AutoSizeButton text now recolors with icon on state change 2026-07-03 16:50:00 +00:00
Dervart cb5c39db53 fix: remove * svg color from AutoSizeButton 2026-07-03 16:50:00 +00:00
Dervart b19ce9fd17 feat: AutoSizeButton now recolors icons on state change (hover, pressed,
disabled)
2026-07-03 16:50:00 +00:00
Boria138 c36c52162c fix: keep search expanded with virtual keyboard
Code check / Check code (push) Failing after 2m48s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-03 17:59:51 +05:00
Boria138 c8e3bd40b2 fix: prevent recursive theme loading for icon colors
Code check / Check code (push) Failing after 1m44s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-03 17:20:22 +05:00
Boria138 d5fedd827d feat: add theme SVG icon recoloring
Code check / Check code (push) Failing after 1m31s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-07-02 23:41:24 +05:00
Gitea Actions 8d9a60dc28 chore: update steam apps list 2026-07-01T00:01:20Z 2026-07-01 00:01:20 +00:00
Boria138 3e51f06126 fix: close library filters on tab switch
Code check / Check code (push) Successful in 2m31s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-30 18:05:31 +05:00
Boria138 39ee989175 fix: decouple search animation duration from game card scale
Code check / Check code (push) Successful in 2m40s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-30 17:57:52 +05:00
Boria138 67bc16f3f6 test: update classic theme required styles
Code check / Check code (push) Successful in 1m31s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-30 17:43:02 +05:00
Dervart 9c46909973 refactor: styles for library controls popup and filter combobox
Code check / Check code (pull_request) Failing after 3m6s
2026-06-30 19:09:34 +07:00
Boria138 452ab7a157 fix: smooth library controls animation
Code check / Check code (push) Successful in 2m30s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-30 13:53:12 +05:00
Boria138 fc58f0cac9 chore: use ppai icon for autoinstall
Code check / Check code (push) Successful in 2m1s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-29 14:08:45 +05:00
Boria138 0040307b7f fix: remove redundant ppdb download after autoinstall
Code check / Check code (push) Successful in 3m36s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-29 10:18:40 +05:00
Boria138 0f5b33bce4 feat: add local PPAI autoinstall file support
Code check / Check code (push) Successful in 1m31s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-29 10:05:18 +05:00
Dervart bf9c76be9c fix: border-radius to constant
Code check / Check code (push) Successful in 1m29s
2026-06-28 12:34:04 +00:00
Dervart ee67e82320 fix: ThemeStore add bottom margin to detail header layout 2026-06-28 12:34:04 +00:00
Dervart c7990e6ac3 fix: scrollbar border style 2026-06-28 12:34:04 +00:00
Dervart 7ead4fb61f Update styles.py 2026-06-28 12:34:04 +00:00
Dervart 6a3ef0005c feat: AutoSizeButton: allow tuple padding (2 or 4 values) 2026-06-28 12:34:04 +00:00
Boria138 5068c11a3d fix: ignore commented autoinstall exe entries
Code check / Check code (push) Failing after 22s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-28 16:19:22 +05:00
Boria138 e40cabae2e docs(theme): fix TOC anchor links for Gitea rendering
Code check / Check code (push) Successful in 1m31s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-28 11:02:44 +05:00
Boria138 5975fa0ba0 docs(theme): rewrite theme guide with real examples and new sections
Code check / Check code (push) Successful in 1m32s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-28 10:59:52 +05:00
Renovate Bot ca2127e3ce chore(deps): update archlinux:base-devel docker digest to cf028ae
Code check / Check code (push) Successful in 1m31s
2026-06-28 05:36:59 +00:00
Renovate Bot dd7c5c934b chore(deps): update debian:13 docker digest to d07d1b5
Code check / Check code (push) Successful in 1m33s
2026-06-28 05:36:47 +00:00
Boria138 a2a5694a69 chore: switch to library when opening autoinstall card
Code check / Check code (push) Successful in 1m34s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-28 10:34:45 +05:00
Boria138 b0ce5aff7b fix: match autoinstall entries by target exe path
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-28 10:29:48 +05:00
Boria138 fb2162b260 feat(preloader): added bat, pulse, dots and wave type
Code check / Check code (push) Successful in 2m32s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-28 00:33:15 +05:00
Boria138 0f87c67774 feat(detail-page): add Open Folder button for PortProton games
Code check / Check code (push) Failing after 4m2s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-27 22:28:27 +05:00
Boria138 0bc6c5eee1 fix: show library download progress on launch button
Code check / Check code (push) Successful in 1m35s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-27 18:36:30 +05:00
Boria138 86ce0bb528 fix(theme): prevent clipped buttons in standart-light
Code check / Check code (push) Failing after 1m30s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-27 16:12:13 +05:00
Boria138 221ca1b5b5 fix: prevent autoinstall script download thread crash
Code check / Check code (push) Successful in 1m32s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-27 14:09:32 +05:00
Boria138 6bce55a116 fix: restore child theme inheritance in standart-light
Code check / Check code (push) Successful in 1m59s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-27 11:53:27 +05:00
Boria138 779156bfde fix: repair run-after exe launch output handling
Code check / Check code (push) Successful in 2m39s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-27 11:01:34 +05:00
Boria138 c08b3d2ff6 fix: restore lost styles and changed values since 519edd1
Code check / Check code (push) Successful in 2m33s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-27 10:44:26 +05:00
Boria138 c6e9e5ac22 fix: recompute inherited light theme styles
Code check / Check code (push) Successful in 2m22s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-26 22:36:47 +05:00
Boria138 4e4a4eaa0d refactor: move theme store into dedicated modules
Code check / Check code (push) Successful in 3m23s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-26 21:39:40 +05:00
Boria138 3e5da67ac5 chore(locale): update
Code check / Check code (push) Successful in 2m48s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-26 15:06:46 +05:00
Boria138 84a015d1fc chore(changelog): update
Code check / Check code (push) Successful in 1m35s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-25 21:25:21 +05:00
Boria138 a04e1069c4 fix: refresh theme store visibility after saving settings
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-25 21:21:59 +05:00
Boria138 a56528a61d debug: trace CLI detail page navigation
Code check / Check code (push) Successful in 1m45s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-25 18:47:11 +05:00
Boria138 a5bc4269b2 chore(changelog): move PR changes to main for avoid conflicts
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-25 18:02:33 +05:00
Codeberg TranslateandRubin13 473c824124 Translated using Weblate (German)
Currently translated at 100.0% (689 of 689 strings)

Translated using Weblate (German)

Currently translated at 100.0% (687 of 687 strings)

Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Rubin13 <rubin13@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/portprotonqt/portprotonqt/de/
Translation: PortProtonQt/PortProtonQt
2026-06-25 07:06:40 +00:00
Boria138 4b378f59f5 chore(locale): update
Code check / Check code (push) Successful in 1m30s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-25 00:12:54 +05:00
Boria138 1a62acbd9d feat: hide theme store behind settings checkbox (disabled by default)
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-25 00:10:12 +05:00
Boria138 ff03834ade fix: replace fuzz.ratio with fuzz.partial_ratio for stable first-letter search
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-24 23:51:40 +05:00
Boria138 460ed51fc4 feat(theme_security): rewrite security checker with allowlist approach
Code check / Check code (push) Successful in 1m31s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-24 11:26:45 +05:00
Codeberg Translateandgallegonovato 5c9318808a Translated using Weblate (Spanish)
Currently translated at 37.9% (261 of 687 strings)

Co-authored-by: gallegonovato <gallegonovato@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/portprotonqt/portprotonqt/es/
Translation: PortProtonQt/PortProtonQt
2026-06-23 17:18:57 +00:00
Codeberg TranslateandRubin13 730c04560d Translated using Weblate (German)
Currently translated at 63.4% (436 of 687 strings)

Translated using Weblate (German)

Currently translated at 44.9% (309 of 688 strings)

Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Rubin13 <rubin13@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/portprotonqt/portprotonqt/de/
Translation: PortProtonQt/PortProtonQt
2026-06-23 17:18:57 +00:00
Boria138 9e759f044d fix: refine magic numbers rule to avoid false positives in AGENTS.md
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-23 22:18:44 +05:00
Boria138 c45b81ea2b ci: add patchelf dependency and replace DEPLOY_SYS_PYTHON with DEPLOY_PYTHON for AppImage build
Code check / Check code (push) Successful in 7m32s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-23 21:50:42 +05:00
Boria138 b438cf900e feat: theme store grid with dynamic layout and gamepad support
Code check / Check code (push) Successful in 4m58s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-23 18:33:24 +05:00
Boria138 61205191ea fix(locale): remove untranslated {0} Wine… string from i18n
Code check / Check code (push) Successful in 1m25s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-23 17:50:59 +05:00
Boria138 cab84b3a8e chore(locale): fix weblate warnings
Code check / Check code (push) Successful in 1m27s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-23 17:40:42 +05:00
Boria138 e812c8e4da feat(theme-store): added more rows
Code check / Check code (push) Successful in 2m4s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-23 17:16:50 +05:00
Codeberg Translateandgallegonovato 6689c692f6 Translated using Weblate (Spanish)
Currently translated at 31.8% (219 of 688 strings)

Translated using Weblate (Spanish)

Currently translated at 23.4% (161 of 688 strings)

Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: gallegonovato <gallegonovato@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/portprotonqt/portprotonqt/es/
Translation: PortProtonQt/PortProtonQt
2026-06-23 13:59:12 +05:00
Codeberg TranslateandRubin13 7ecdcc0c96 Translated using Weblate (German)
Currently translated at 40.2% (277 of 688 strings)

Translated using Weblate (German)

Currently translated at 35.8% (246 of 686 strings)

Translated using Weblate (German)

Currently translated at 35.0% (237 of 676 strings)

Translated using Weblate (German)

Currently translated at 34.1% (231 of 676 strings)

Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Rubin13 <rubin13@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/portprotonqt/portprotonqt/de/
Translation: PortProtonQt/PortProtonQt
2026-06-23 13:59:11 +05:00
Boria138 397c4686d6 test: remove dependency on real themes from theme manager tests
Code check / Check code (push) Successful in 1m28s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-23 13:57:58 +05:00
Boria138 f95a475315 fix(theme): only generate styles from immediate parent's styles/ dir
Code check / Check code (push) Failing after 1m26s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-23 13:19:34 +05:00
Boria138 d3673c4aeb chore: speedup theme store
Code check / Check code (push) Failing after 1m24s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-23 12:31:40 +05:00
Boria138 31c8428255 fix(theme): recompute QSS styles with child palette
Code check / Check code (push) Failing after 1m35s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-23 10:12:47 +05:00
Boria138 b01fae652a fix(theme): walk full inheritance chain for constant injection
Code check / Check code (push) Successful in 1m28s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-23 09:51:47 +05:00
Boria138 c92855366e fix(theme): use AST-based constant injection instead of hardcoded paths
Code check / Check code (push) Successful in 2m36s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-22 21:55:44 +05:00
Boria138 13dc84c1ad fix: parent theme styles shadowed by generated standart styles
Code check / Check code (push) Successful in 2m17s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-22 20:32:27 +05:00
Boria138 d477acffd5 fix: add protondb cache cleanup on steam apps refresh
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-22 20:28:49 +05:00
Boria138 7147f6087a feat(locale): fix fuzzy and add missing translations for ru, zh_CN, pt_BR
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-22 18:56:51 +05:00
Boria138 b8fa8925ad feat(locale): update
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-22 18:52:31 +05:00
Boria138 e28a8b5321 chore(changelog): update
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-22 18:52:05 +05:00
Boria138 182ed098a3 feat: add theme store and URI install support
Code check / Check code (push) Successful in 1m48s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-22 18:49:29 +05:00
Boria138 a75d6a41d2 theme(security): allow safe theme API calls in custom themes
Code check / Check code (pull_request) Successful in 2m37s
Code check / Check code (push) Successful in 3m21s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-22 17:19:52 +05:00
Boria138 915a7077c6 chore(themes): clean
Code check / Check code (pull_request) Successful in 1m30s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-22 16:44:37 +05:00
Boria138 c183635778 fix(theme): merge standart constants as base in _build_generated_styles
Code check / Check code (pull_request) Successful in 2m57s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-22 14:49:28 +05:00
Boria138 519edd1efc chore(theme): rewrite it to const
Code check / Check code (pull_request) Successful in 1m31s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-22 12:30:16 +05:00
Boria138 201a96f73d fix: replace source badges with PPDB badge on detail page
Code check / Check code (push) Successful in 1m25s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-21 22:08:53 +05:00
Boria138 9593af224b feat: improve game source corner marker
Code check / Check code (push) Successful in 2m4s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-21 17:09:26 +05:00
Boria138 9d8ba97c2d fix: keep detail fade animation from sticking on resize
Code check / Check code (push) Failing after 1m43s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-21 15:53:41 +05:00
Boria138 843af631e3 feat(locale): add German translation via Weblate
Code check / Check code (push) Successful in 1m29s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-21 12:55:24 +05:00
Boria138 b36f263bb4 Merge weblate/main: resolve German translation conflicts 2026-06-21 12:52:40 +05:00
Codeberg TranslateandRubin13 7e15069f3b Added translation using Weblate (German)
Code check / Check code (push) Successful in 3m52s
Co-authored-by: Rubin13 <rubin13@noreply.codeberg.org>
2026-06-21 12:46:42 +05:00
Boria138 edcfe2c018 feat: add gjs-osk based virtual keyboard layouts
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-21 12:45:52 +05:00
Codeberg TranslateandRubin13 4ccd2d6640 Translated using Weblate (German)
Currently translated at 26.4% (179 of 676 strings)

Translated using Weblate (German)

Currently translated at 21.7% (147 of 676 strings)

Translated using Weblate (German)

Currently translated at 18.0% (122 of 676 strings)

Translated using Weblate (German)

Currently translated at 5.9% (40 of 676 strings)

Translated using Weblate (German)

Currently translated at 0.5% (4 of 681 strings)

Added translation using Weblate (German)

Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Rubin13 <rubin13@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/portprotonqt/portprotonqt/de/
Translation: PortProtonQt/PortProtonQt
2026-06-21 07:08:13 +00:00
Boria138 de0ed85599 fix: improve compact game card scaling
Code check / Check code (push) Successful in 1m26s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-21 12:07:55 +05:00
Boria138 f4ee6eef14 fix: skip hidden cards in grid navigation
Code check / Check code (push) Successful in 1m29s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-21 11:43:00 +05:00
Renovate Bot 30bbb591d3 chore(deps): update archlinux:base-devel docker digest to 0cf5eb7
Code check / Check code (push) Successful in 1m43s
2026-06-21 05:40:50 +00:00
Renovate Bot 208b6aea3b chore(deps): pin archlinux docker tag to 0cf5eb7
Code check / Check code (pull_request) Successful in 1m59s
Code check / Check code (push) Successful in 1m29s
2026-06-21 00:01:22 +00:00
Boria138 df402b58dd feat: redirect keyboard input to search from focused game cards
Code check / Check code (push) Successful in 1m31s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-21 01:16:26 +05:00
Boria138 baaef49dd9 feat: reduce minimum card size slider from 200 to 150 px
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-21 00:49:45 +05:00
Boria138 67553f1b57 drop unneded files
Code check / Check code (push) Successful in 1m30s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-20 23:04:12 +05:00
Boria138 a455a7d005 fix: adapt detail page layout on narrow screens
Code check / Check code (push) Successful in 1m29s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-20 22:26:46 +05:00
Boria138 65ab28db1f fix: use SVG favorite star overlays
Code check / Check code (push) Successful in 1m31s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-20 18:54:09 +05:00
Boria138 9688679ff8 fix: skip malformed po entries during l10n update
Code check / Check code (push) Successful in 2m0s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-20 18:16:46 +05:00
Boria138 311d74a629 changed: show only ProtonDB service name on badge
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-20 18:13:23 +05:00
Boria138 e807e2246a feat: make control hint icons clickable
Code check / Check code (push) Successful in 1m28s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-20 12:37:26 +05:00
Boria138 cc01552bfa chore(changelog): update
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-19 17:49:35 +05:00
Codeberg Translateandrogerio-mattos 6fb33bd9ac Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (681 of 681 strings)

Co-authored-by: rogerio-mattos <rogerio-mattos@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/portprotonqt/portprotonqt/zh_Hans/
Translation: PortProtonQt/PortProtonQt
2026-06-19 11:38:28 +00:00
Codeberg Translateandrogerio-mattos 0ed071f980 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (681 of 681 strings)

Co-authored-by: rogerio-mattos <rogerio-mattos@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/portprotonqt/portprotonqt/pt_BR/
Translation: PortProtonQt/PortProtonQt
2026-06-19 11:38:27 +00:00
Boria138 ccd60ff787 chore(locale): update zh_CN
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-18 23:59:01 +05:00
Boria138 23264203d8 ci: ignore locale changes in code check
Code check / Check code (push) Failing after 57s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-18 23:49:25 +05:00
Codeberg TranslateandBoria138 ad7461d7cc Translated using Weblate (Russian)
Code check / Check code (push) Successful in 2m0s
Currently translated at 100.0% (681 of 681 strings)

Co-authored-by: Boria138 <boria138@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/portprotonqt/portprotonqt/ru/
Translation: PortProtonQt/PortProtonQt
2026-06-18 18:46:32 +00:00
Boria138 27feb9cfdd chore(locale): update
Code check / Check code (push) Successful in 1m33s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-18 23:44:39 +05:00
Boria138 ffc1895295 fix: move PW_GPU_INFO to ppdb log variables
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-18 23:41:21 +05:00
Boria138 2edc3bf9aa feat: add optional PPDB auto-download
Code check / Check code (push) Successful in 1m30s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-18 23:30:41 +05:00
Boria138 ac827903b5 debug: log primary GPU from glxinfo as PW_GPU_INFO
Code check / Check code (push) Successful in 2m14s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-18 23:03:24 +05:00
Boria138 ef05259289 chore: remove translation spellcheck
Code check / Check code (push) Successful in 2m15s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-18 16:54:10 +05:00
Boria138 4b59fe0fb9 feat: add D7VK UI and debug log support
Code check / Check code (push) Successful in 2m31s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-18 16:26:03 +05:00
Boria138 12c344181e fix: download autoinstall scripts to temp directory
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-18 16:16:35 +05:00
Mikhail Tergoev 43b97acc27 Merge branch 'main' of git.linux-gaming.ru:Linux-Gaming/PortProtonQt
Code check / Check code (push) Successful in 1m28s
2026-06-18 13:36:13 +03:00
Mikhail Tergoev 6c6a5c7aae add support: d7vk 2026-06-18 13:35:54 +03:00
Boria138 5c43e22726 refactor: move main window tabs into modules
Code check / Check code (push) Successful in 1m57s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-18 11:45:27 +05:00
Boria138 4bf3f34fbe fix: refresh cached PPDB autoinstall images
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-18 11:26:00 +05:00
Boria138 687c4cfb9d ui: implement theme-aware PPDB rating badges
Code check / Check code (push) Successful in 2m10s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-18 11:16:06 +05:00
Boria138 45d210dd72 feat: use PPDB data for PortProton badges
Code check / Check code (push) Successful in 3m29s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-18 00:56:52 +05:00
Gitea Actions e840f07e60 chore: update steam apps list 2026-06-17T19:38:00Z 2026-06-17 19:38:01 +00:00
Boria138 69b949198d fix: handle wrapped PPDB ratings response
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-18 00:37:06 +05:00
Gitea Actions bcd6c73d37 chore: update steam apps list 2026-06-17T19:34:57Z 2026-06-17 19:34:57 +00:00
Codeberg Translateandrogerio-mattos 8caa7727c6 Translated using Weblate (Portuguese (Brazil))
Check Translations / check-translations (push) Failing after 18s
Code check / Check code (push) Successful in 1m30s
Currently translated at 81.0% (550 of 679 strings)

Co-authored-by: rogerio-mattos <rogerio-mattos@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/portprotonqt/portprotonqt/pt_BR/
Translation: PortProtonQt/PortProtonQt
2026-06-18 00:31:44 +05:00
Boria138 e905e2fb24 feat: add PPDB ratings data to get_id script
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-18 00:29:38 +05:00
Boria138 6ca70e86b4 feat: load autoinstalls from PPDB API
Code check / Check code (push) Successful in 3m18s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-17 12:13:22 +00:00
Boria138 1d42a8cd97 refactor: deduplicate animation helpers
Code check / Check code (push) Successful in 1m49s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-17 10:53:21 +05:00
Boria138 f0d5873342 chore(changelog): update
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-16 23:01:00 +05:00
Boria138 aeac40a003 fix: refresh playtime and last launch live
Code check / Check code (push) Successful in 3m29s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-16 22:57:47 +05:00
Boria138 0059162dff feat: add Steam-style playtime display
Code check / Check code (push) Successful in 2m47s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-16 22:41:11 +05:00
Boria138 d432e44ca6 feat: move playtime statistics from bash to Python
Code check / Check code (push) Successful in 1m54s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-16 11:48:33 +05:00
Boria138 f860513626 chore: drop unneded topic files
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-15 22:16:06 +05:00
Boria138 e6cdf92fc1 feat: move last_launch to XDG_DATA_HOME with auto-migration
Code check / Check code (push) Successful in 1m25s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-15 16:40:38 +05:00
Boria138 c3b54b43dd test: add desktop shortcut creation and path resolution tests
Code check / Check code (push) Successful in 2m10s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-14 15:17:59 +05:00
Boria138 f3a2c179a3 test: add dbus_tools tests (68 tests for notifications, idle inhibit, power profiles)
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-14 15:04:48 +05:00
Boria138 85032b3c1f refactor: remove proton_downloads debug code from WINE/Proton manager
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-14 14:53:33 +05:00
Boria138 fa8935b2aa chore(appimage): drop OPTDEPENDS_PACKAGES
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-14 14:49:16 +05:00
Boria138 0ff032885a chore(changelog): update
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-13 23:33:57 +05:00
Dervart dcaba9bf1f fix: remove commented styles for AutoHideScrollArea
Code check / Check code (pull_request) Successful in 1m23s
Code check / Check code (push) Failing after 1s
2026-06-13 23:06:48 +07:00
Dervart 930d253fd1 feat: new class AutoHideScrollArea for Library & Autoinstall tab
Code check / Check code (pull_request) Successful in 3m49s
2026-06-13 22:56:53 +07:00
Boria138 84dd5ad676 ci(code check): switch to Arch container
Code check / Check code (push) Successful in 3m12s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-13 13:57:26 +05:00
Boria138 a017399c7a test: add 367 autotests for regression-prone areas
Code check / Check code (push) Failing after 1m0s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-13 12:45:33 +05:00
Boria138 0d9a4b560c fix: force-push weblate branch in accept-weblate.sh
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-13 11:40:15 +05:00
Codeberg Translateandrogerio-mattos 73491d8259 Translated using Weblate (Chinese (Simplified Han script))
Check Translations / check-translations (push) Failing after 21s
Code check / Check code (push) Successful in 56s
Currently translated at 94.9% (645 of 679 strings)

Co-authored-by: rogerio-mattos <rogerio-mattos@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/portprotonqt/portprotonqt/zh_Hans/
Translation: PortProtonQt/PortProtonQt
2026-06-12 23:07:54 +00:00
Codeberg Translateandrogerio-mattos f492f0019b Translated using Weblate (Portuguese (Brazil))
Currently translated at 74.9% (509 of 679 strings)

Co-authored-by: rogerio-mattos <rogerio-mattos@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/portprotonqt/portprotonqt/pt_BR/
Translation: PortProtonQt/PortProtonQt
2026-06-12 23:07:54 +00:00
Boria138 a1c3f1cb8b docs: add bilingual README (English and Russian)
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-12 15:38:34 +05:00
Boria138 9d8d9edf51 build: automate Debian versioning in bump_ver.py
Code check / Check code (push) Successful in 59s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-12 12:49:26 +05:00
Boria138 b2d42a44be ci: filter out unwanted Debian build artifacts
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-12 12:37:40 +05:00
Codeberg Translateandrogerio-mattos 2ce141af90 Translated using Weblate (Portuguese (Brazil))
Check Translations / check-translations (push) Failing after 14s
Code check / Check code (push) Successful in 56s
Currently translated at 61.1% (415 of 679 strings)

Co-authored-by: rogerio-mattos <rogerio-mattos@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/portprotonqt/portprotonqt/pt_BR/
Translation: PortProtonQt/PortProtonQt
2026-06-11 21:46:17 +05:00
Boria138 dacc44d62c refactor(ui): unify GNOME dark theme check with Cinnamon logic
Code check / Check code (push) Successful in 58s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-11 21:45:22 +05:00
Boria138 a6edaa5f4d fix: dark theme detection for MATE
Code check / Check code (push) Successful in 59s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-11 21:34:15 +05:00
Boria138 7612491f2b fix: use startswith for XDG_SESSION_DESKTOP matching
Code check / Check code (push) Successful in 59s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-11 10:38:43 +05:00
Boria138 8f968133f0 fix: dark theme detection for Cinnamon and XFCE
Code check / Check code (push) Successful in 1m0s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-11 10:31:28 +05:00
Boria138 8a5eea305c fix scripts: drop flatpak fatal
Code check / Check code (push) Successful in 56s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-10 18:24:52 +05:00
Boria138 bb629e4063 feat: implement XDG Desktop Portal notification fallback
Code check / Check code (push) Successful in 59s
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
2026-06-10 17:30:23 +05:00
317 changed files with 63775 additions and 16028 deletions

No files matched your search

+29 -6
View File
@@ -2,16 +2,26 @@ name: Build AppImage, Arch, Fedora and Debian Packages
on:
workflow_dispatch:
inputs:
mode:
description: "Run mode"
required: true
default: "hotfix"
type: choice
options:
- hotfix
- release
push:
tags:
- 'v[0-9]*.[0-9]*'
env:
# Common version, will be used for tagging the release
VERSION: 1.2.0
VERSION: 1.3.1
PKGDEST: "/tmp/portprotonqt"
PACKAGE: "portprotonqt"
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
RUN_MODE: ${{ github.event_name == 'workflow_dispatch' && inputs.mode || 'release' }}
jobs:
build-appimage:
@@ -25,7 +35,7 @@ jobs:
run: |
pacman-key --init
pacman -Sy --noconfirm archlinux-keyring
pacman -Syu --noconfirm --disable-download-timeout --needed git wget gnupg nodejs npm xorg-server-xvfb zsync
pacman -Syu --noconfirm --disable-download-timeout --needed git wget gnupg nodejs npm xorg-server-xvfb zsync patchelf
- uses: https://git.linux-gaming.ru/actions/checkout@v4
@@ -33,7 +43,13 @@ jobs:
run: |
cd build-aux/AppImage
chmod +x get-dependencies.sh portprotonqt-appimage.sh
./get-dependencies.sh
if [ "${{ env.RUN_MODE }}" = "hotfix" ]; then
./get-dependencies.sh --branch "${{ github.ref_name }}"
elif [ "${{ github.event_name }}" = "push" ]; then
./get-dependencies.sh --tag "${{ github.ref_name }}"
else
./get-dependencies.sh
fi
- name: Build AppImage
run: |
@@ -44,7 +60,7 @@ jobs:
uses: https://git.linux-gaming.ru/actions/gitea-upload-artifact@v4
with:
name: PortProtonQt-AppImage
path: build-aux/AppImage/dist/*.AppImage
path: build-aux/AppImage/dist/*.AppImage*
build-arch:
name: Build Arch Package
@@ -85,6 +101,9 @@ jobs:
cd /__w/portproton-repo
cp -r "$GITHUB_WORKSPACE" PortProtonQt
cd /__w/portproton-repo/PortProtonQt/build-aux
if [ "${{ env.RUN_MODE }}" = "hotfix" ]; then
sed -i "s|^source=.*|source=(\"git+https://git.linux-gaming.ru/Linux-Gaming/PortProtonQt.git#branch=${{ github.ref_name }}\")|" PKGBUILD
fi
chown user -R ..
su user -c "yes '' | makepkg --noconfirm -s"
@@ -126,6 +145,9 @@ jobs:
- name: Copy fedora.spec
run: |
cp build-aux/fedora.spec /home/rpmbuild/SPECS/${{ env.PACKAGE }}.spec
if [ "${{ env.RUN_MODE }}" = "hotfix" ]; then
sed -i "s|git checkout v%{pypi_version}|git checkout ${{ github.ref_name }}|" /home/rpmbuild/SPECS/${{ env.PACKAGE }}.spec
fi
chown -R rpmbuild:users /home/rpmbuild
- name: Build RPM
@@ -158,9 +180,9 @@ jobs:
- name: Build Debian package
run: |
dpkg-buildpackage -us -uc -b
DEB_BUILD_OPTIONS=noautodbgsym dpkg-buildpackage -us -uc -b
mkdir -p dist/deb
mv ../*.deb ../*.buildinfo ../*.changes dist/deb/
mv ../*.deb dist/deb/
- name: Upload Debian package
uses: https://git.linux-gaming.ru/actions/gitea-upload-artifact@v4
@@ -170,6 +192,7 @@ jobs:
release:
name: Create and Publish Release
if: github.event_name != 'workflow_dispatch' || inputs.mode == 'release'
runs-on: ubuntu-latest
steps:
- uses: https://git.linux-gaming.ru/actions/checkout@v4
-42
View File
@@ -1,42 +0,0 @@
name: Check Translations
run-name: Check spelling in translation files
on:
push:
branches: [main, scripts]
paths:
- 'portprotonqt/locales/**'
pull_request:
paths:
- 'portprotonqt/locales/**'
workflow_dispatch:
jobs:
check-translations:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: https://git.linux-gaming.ru/actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
with:
fetch-depth: 0
- name: Set up Python
uses: https://git.linux-gaming.ru/actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
with:
python-version-file: "pyproject.toml"
- name: Install Python dependencies
run: pip install pyaspeller babel
- name: Run spell check
run: |
if [ "${{ gitea.event_name }}" = "pull_request" ]; then
base="${{ gitea.event.pull_request.base.sha }}"
else
base="${{ gitea.event.before }}"
fi
if [ -z "$base" ] || [ "$base" = "0000000000000000000000000000000000000000" ]; then
python dev-scripts/l10n.py --spellcheck
else
python dev-scripts/l10n.py --spellcheck --changed-since "$base" --changed-to "${{ gitea.sha }}"
fi
+10 -11
View File
@@ -7,31 +7,30 @@ on:
- "data/**"
- "*.md"
- "dev-scripts/**"
- "portprotonqt/locales/**"
push:
branches: [main, scripts]
paths-ignore:
- "data/**"
- "*.md"
- "dev-scripts/**"
- "portprotonqt/locales/**"
workflow_dispatch:
jobs:
pre-commit:
name: Check code
runs-on: ubuntu-latest
container:
image: archlinux:base-devel@sha256:212b1e518e94ee9c52be55e8a32da75fcf11e7b5610b80b49479e67880102406
steps:
- uses: https://git.linux-gaming.ru/actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
- name: Set up Node.js
uses: https://git.linux-gaming.ru/actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6
with:
node-version: 20
- name: Install uv manually
- name: Install system dependencies
run: |
curl -LsSf https://astral.sh/uv/install.sh | sh
source $HOME/.local/bin/env
uv --version
pacman -Syuu --noconfirm --disable-download-timeout
pacman -S --noconfirm --needed git nodejs npm mesa libarchive sdl3 pyside6 qt6-svg qt6-imageformats uv
pacman -Scc --noconfirm
- uses: https://git.linux-gaming.ru/actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
- name: Sync dependencies into venv
run: uv sync --all-extras --dev
+22
View File
@@ -0,0 +1,22 @@
name: Download stats
on:
schedule:
- cron: '0 0 1 * *'
workflow_dispatch: {}
jobs:
stats:
runs-on: ubuntu-latest
steps:
- uses: https://git.linux-gaming.ru/actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
with:
fetch-depth: 0
- name: Update download stats
env:
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
GITEA_ACTOR: ${{ gitea.actor }}
GITEA_SERVER: "git.linux-gaming.ru"
GITEA_REPOSITORY: ${{ gitea.repository }}
run: bash dev-scripts/get_download_stats.sh
+1 -1
View File
@@ -14,7 +14,7 @@ jobs:
uses: https://git.linux-gaming.ru/actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
- name: Set up Python
uses: https://git.linux-gaming.ru/actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
uses: https://git.linux-gaming.ru/actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
with:
python-version-file: "pyproject.toml"
+7 -7
View File
@@ -80,14 +80,14 @@ jobs:
needs: changes
if: needs.changes.outputs.appimage == 'true' || github.event_name == 'workflow_dispatch'
container:
image: archlinux:base-devel@sha256:c84ad63503efc5d386e30a5f44945fa8eee10fcb21b3d5fceda260783de394ff
image: archlinux:base-devel@sha256:212b1e518e94ee9c52be55e8a32da75fcf11e7b5610b80b49479e67880102406
options: --privileged --device /dev/fuse
steps:
- name: Prepare container
run: |
pacman-key --init
pacman -Sy --noconfirm archlinux-keyring
pacman -Syu --noconfirm --disable-download-timeout --needed git wget gnupg nodejs npm xorg-server-xvfb zsync
pacman -Syu --noconfirm --disable-download-timeout --needed git wget gnupg nodejs npm xorg-server-xvfb zsync patchelf
- uses: https://git.linux-gaming.ru/actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
if: github.event_name == 'pull_request'
@@ -116,7 +116,7 @@ jobs:
uses: https://git.linux-gaming.ru/actions/gitea-upload-artifact@v4
with:
name: PortProtonQt-AppImage
path: build-aux/AppImage/dist/*.AppImage
path: build-aux/AppImage/dist/*.AppImage*
build-fedora:
name: Build Fedora RPM
@@ -183,7 +183,7 @@ jobs:
needs: changes
if: needs.changes.outputs.arch == 'true' || github.event_name == 'workflow_dispatch'
container:
image: archlinux:base-devel@sha256:c84ad63503efc5d386e30a5f44945fa8eee10fcb21b3d5fceda260783de394ff
image: archlinux:base-devel@sha256:212b1e518e94ee9c52be55e8a32da75fcf11e7b5610b80b49479e67880102406
steps:
- name: Prepare container
@@ -249,7 +249,7 @@ jobs:
needs: changes
if: needs.changes.outputs.debian == 'true' || github.event_name == 'workflow_dispatch'
container:
image: debian:13@sha256:4ae67669760b807c19f23902a3fd7c121a6a70cf2ae709035674b23e712e4d62
image: debian:trixie-20260623@sha256:d07d1b51c39f51188e60be9b64e6bf769fa94e187f092bc32b91305cfa34ba5a
options: --privileged
steps:
@@ -272,9 +272,9 @@ jobs:
- name: Build Debian package
run: |
dpkg-buildpackage -us -uc -b
DEB_BUILD_OPTIONS=noautodbgsym dpkg-buildpackage -us -uc -b
mkdir -p dist/deb
mv ../*.deb ../*.buildinfo ../*.changes dist/deb/
mv ../*.deb dist/deb/
- name: Upload Debian package
uses: https://git.linux-gaming.ru/actions/gitea-upload-artifact@v4
+1 -1
View File
@@ -13,7 +13,7 @@ jobs:
- uses: https://git.linux-gaming.ru/actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
- name: Set up Node.js
uses: https://git.linux-gaming.ru/actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6
uses: https://git.linux-gaming.ru/actions/setup-node@249970729cb0ef3589644e2896645e5dc5ba9c38 # v6
with:
node-version: 20
-8
View File
@@ -38,16 +38,8 @@ Thumbs.db
.ropeproject
.zed
# get_wine debug folder
proton_downloads
# Need for refactoring
REFRACTORING_PLAN.md
AUDIT_CHECKLIST.md
# Compiled gettext catalogs
portprotonqt/locales/*/LC_MESSAGES/*.mo
# AI
.codex
+11 -1
View File
@@ -24,7 +24,7 @@ repos:
hooks:
- id: pyright
name: pyright
entry: pyright
entry: uv run pyright
language: system
types_or: [python, pyi]
require_serial: true
@@ -57,3 +57,13 @@ repos:
language: system
files: (^portprotonqt/.*\.py$|^build-aux/share/portproton/|meson\.build$)
pass_filenames: false
- repo: local
hooks:
- id: pytest
name: pytest
entry: uv run pytest tests/ -x -q --tb=line
language: system
types: [python]
files: ^(tests/|portprotonqt/)
pass_filenames: false
+118 -3
View File
@@ -107,6 +107,19 @@ shadow.setBlurRadius(20)
shadow.setColor(QColor(0, 0, 0, 150))
label.setStyleSheet("color: #bbbbbb;")
QColor(128, 128, 128)
# NEVER: Unexplained magic numbers in business logic
# Status codes, flags, timeouts, limits, protocol values — use named constants or enums
if status == 3: ... # BAD
if key_value >= 0x01000000: ... # BAD
# NEVER: Visual constants in application code (game_card.py, detail_pages/, etc.)
# ALL visual/layout constants MUST live in themes/standart/styles/constants.py
# Application code reads them via self.theme.CONSTANT_NAME
COMPACT_CARD_WIDTH_THRESHOLD = 150 # BAD: in game_card.py
RIBBON_SIZE_RATIO = 0.28 # BAD: in game_card.py
BADGE_ICON_SIZE = 16 # BAD: in detail_pages/widgets.py
SOURCE_CORNER_RATIO = 0.28 # BAD: in detail_pages/widgets.py
```
```python
@@ -144,7 +157,16 @@ QColor(self.theme.color_disabled_text)
# ALWAYS: Add new constants to theme files
# New colors → portprotonqt/themes/standart/styles/constants.py
# New QSS styles → portprotonqt/themes/standart/styles/base.py or submodule
# Never add style constants to application code
# ALWAYS: Use descriptive named constants, enums, or built-in Qt values instead of magic numbers
STATUS_COMPLETED = 3
if status == STATUS_COMPLETED:
...
# ALWAYS: Use named Qt.Key constants with comments for keyboard system key checks
# Skip system/modifier keys (Shift, Enter, Arrow keys, etc.)
if key_value >= Qt.Key.Key_Escape.value: ...
```
---
@@ -164,11 +186,16 @@ QColor(self.theme.color_disabled_text)
- Do not refactor unrelated code
- Do not modify localization files (`portprotonqt/locales/`) unless explicitly requested
- Do not extract single-use logic into a helper function without a clear need
- **Before adding any helper, wrapper, class, or infrastructure, search for an existing method that already performs the operation and call it directly**
- **NEVER add a task-local helper that only wraps an existing method or a single call; keep the call in the modified block unless extraction is required by the function limits**
- If the user identifies overengineering, remove the unnecessary abstraction before continuing; do not layer another fix on top of it
- Do not add comments for obvious code
- **NEVER leave outdated comments after refactoring** (e.g., "without numpy" after numpy removal, "legacy" after rewrite)
- **ALWAYS update or remove comments that reference removed dependencies, patterns, or context**
- **NEVER leave stub/no-op functions** (e.g., `def func(): pass` with comment "removed")
- **When removing a feature, delete the function entirely, not stub it**
- When removing async/download code, preserve callback completion paths in callers
- Add or update regression tests for callback-driven UI loading paths touched by the change
- Never invent modules
- Do not move files unless requested
- Do not create new files for organization (unless task requires a new module)
@@ -183,6 +210,7 @@ QColor(self.theme.color_disabled_text)
- Preserve existing patterns
- Keep surrounding code unchanged
- Keep formatting changes limited to touched logic or required hook fixes
- **NEVER delete existing style constants from theme files (QSS strings like `*_STYLE`). All styles must be preserved during rewrites. Deleted styles break child theme inheritance.**
---
@@ -305,6 +333,7 @@ git commit -m "feat: description in English ≤72 chars"
| uv-lock | uv.lock up to date |
| ruff-check | Linting (E, W, F, B, C4, UP) |
| pyright | Type checking |
| pytest | Unit tests |
| bash-n | Bash syntax check and shebang `CRLF` check for `build-aux/share/portproton/scripts/` |
| check-meson | meson.build syntax + files |
| check-qss-properties | Theme QSS validation |
@@ -331,6 +360,7 @@ These tools are executed ONLY via pre-commit hooks.
- `pre-commit run --all-files`
- `pre-commit run ruff-check`
- `pre-commit run pyright`
- `pre-commit run pytest`
#### Rationale
@@ -341,6 +371,80 @@ Do not attempt to execute binaries manually.
---
## Testing
### Structure
```
tests/
├── conftest.py # Shared fixtures (tmp_config_dir, sample_steam_apps)
├── test_utils.py # Steam API utils (normalize_name, search, VDF, Steam utils)
├── test_validators.py # Config validators (string, int, bool, path, url)
├── test_cache_manager.py # CacheManager (save/load/TTL/atomic writes)
├── test_appimage_updater.py # AppImage auto-update worker, mirrors, changelog parsing
├── test_dark_theme.py # Dark theme detection (XFCE/MATE/Cinnamon/GNOME)
├── test_steam_cache.py # exiftool skip, cache eviction, delete_cached_app_files
├── test_base_config.py # BaseConfig read/write, caching, versioning
├── test_cli.py # normalize_launch_path, URL/resolution parsing
├── test_debug_env_utils.py # Debug environment helpers, runtime variables
├── test_input_manager.py # Gamepad input navigation and focus regressions
├── test_sound_manager.py # UI sound playback, widget events, gamepad connection, theme sound files
├── test_main_window.py # Main window data processing and callback regressions
├── test_portproton_config.py # exec_line parsing, launcher tail, extensions
├── test_portproton_api.py # PPDB API helpers, autoinstall localization fallback
├── test_autoinstall_status.py # Autoinstall installed-status matching regressions
├── test_migration.py # Desktop shortcut migration, prefix backup, squashfs
├── test_icon_extractor.py # NE/PE icon extraction, DIB decoding, thumbnails
├── test_dbus_tools.py # D-Bus tools (notifications, idle inhibit, power profiles)
├── test_time_utils.py # Playtime parsing, last launch cache, formatting
├── test_shortcuts.py # Desktop shortcut creation, paths with spaces, .desktop entry
├── test_theme_store.py # Theme store UI worker lifecycle and race regressions
├── test_theme_manager.py # Theme AST injection, parent resolution, ThemeWrapper, style integrity
├── test_theme_security.py # Theme security checker (allowlist AST, forbidden modules/methods, SVG/font/image safety)
└── test_detail_pages.py # Detail page gradient stops, wave background modes, palette handling
```
### Running Tests
```bash
# Run all tests
uv run pytest tests/ -v
# Run specific test file
uv run pytest tests/test_utils.py -v
# Run specific test class
uv run pytest tests/test_utils.py::TestNormalizeName -v
# Run with pre-commit
pre-commit run pytest
```
### Writing Tests
- Tests MUST use `pytest` with `tmp_path` fixture for file isolation
- Tests MUST mock external resources (network, system paths, env vars)
- Tests MUST NOT depend on system state (installed apps, real Steam dirs)
- Use `monkeypatch` for environment variables and function patching
- Keep tests locale-independent (assert numbers, not translated strings)
- Test regression scenarios from git fix commits
### Key Regression Areas
| Module | Regression | Commit |
|--------|-----------|--------|
| `time_utils` | Spaced exe names in cache | 764bb3c |
| `time_utils` | SHA256 hash + L5- index | 7a02b6b |
| `time_utils` | Malformed playtime data | dd65021 |
| `theme_manager` | AST injection lost dict constants, leaked CONTAINER_STYLE | 519edd1 |
| `theme_manager` | Recursive load_theme when styles.py calls get_icon during exec_module | d5fedd8 |
| `classic/styles.py` | Missing styles after theme rewrite (NAV, COMBOBOX, TAB, etc.) | 519edd1 |
| `classic-light/styles.py` | NameError: border_none not defined (no styles/constants.py) | 519edd1 |
| `detail_pages` | DETAIL_PAGE_GRADIENT stops override, wave background modes | — |
| `detail_pages` | Edit/Add shortcut buttons shown together for non-Steam games | 7e38d9a |
---
## AI Agent Checklist
### Writing Code
@@ -686,7 +790,7 @@ Review scope: prioritize new/modified code. Existing unrelated legacy issues sho
- Emoji usage
- TODO without tickets
- Poor variable naming (x, tmp, data)
- Magic numbers
- Unexplained magic numbers in business logic (status codes, flags, timeouts, limits, protocol values)
- Non-English comments
- **Hardcoded styles or constants (colors, sizes, shadow values, etc.)**
@@ -708,6 +812,15 @@ Fix: Use theme constant
shadow.setColor(QColor(0, 0, 0, 150)) # Bad
shadow.setColor(QColor(self.theme.color_shadow_card)) # Good
[MEDIUM] Hardcoded style constant in application code
File: portprotonqt/game_card.py:52
Issue: Visual constant defined in application code instead of theme
Fix: Add to themes/standart/styles/constants.py and read via self.theme
COMPACT_CARD_WIDTH_THRESHOLD = 150 # Bad: in game_card.py
# In constants.py: COMPACT_CARD = {"width_threshold": 150, ...}
# In game_card.py: self.theme.COMPACT_CARD["width_threshold"] # Good
```
### Approval
@@ -770,6 +883,7 @@ PortProtonQt/
│ ├── theme_manager.py # Theme management
│ ├── logger.py # Logging
│ └── themes/ # Theme files
├── tests/ # Unit tests
├── build-aux/ # Build resources
├── dev-scripts/ # Development scripts
├── documentation/ # Documentation
@@ -794,6 +908,7 @@ PortProtonQt/
- In `build-aux/share/portproton/scripts/`, run `portprotonqt.scripts_utils` modules through the existing `python_module` function
- Do not add direct `python3 -m portprotonqt.scripts_utils.*` calls where `python_module` is available
- When adding new PortProton component variables (for example `D7VK_*`), update matching env filters in scripts, runtime `var.log`, and Qt debug/UI helpers
---
@@ -831,6 +946,6 @@ PortProtonQt/
---
**Last updated:** 2026-03-10
**Last updated:** 2026-07-20
**Version:** 1.2
**Status:** Release
+136
View File
@@ -3,6 +3,142 @@
Все заметные изменения в этом проекте фиксируются в этом файле.
Формат основан на [Keep a Changelog](https://keepachangelog.com/) и придерживается принципов [Semantic Versioning](https://semver.org/).
## [Unreleased]
### Added
- Добавлен анализатор проблем в случае вылета Windows-программы
- Добавлены анимированные и статические фоны детальной страницы `aurora`, `diagnostics`, `metaballs`, `leaf` и `veins`, вдохновлённые проектом omikuji
- Добавлена интеграция GOG с авторизацией, библиотекой, установкой, импортом, восстановлением и удалением игр
- Добавлено отображение иконок `.exe` вместо обложек на компактной детальной странице
- Добавлено редактирование ярлыков Steam по AppID
- Добавлены тихий и логируемый режимы запуска `.exe` через меню «Открыть с помощью»
- Добавлена пользовательская интеграция AppImage
- В игровые ярлыки добавлены действия для запуска в тихом режиме и с записью лога
- Добавлен аргумент командной строки `--log` для запуска игры в режиме логирования
- Добавлены звуки интерфейса
- Добавлен выбор аккаунта Steam в настройках с автоматическим режимом по умолчанию и режимом `All` для добавления ярлыков всем пользователям
- Добавлено безопасное чтение вариантов dark/light палитры matugen из Dank Material Shell
### Changed
- API и ссылки PPDB переведены с `ppdb.linux-gaming.ru` на `linux-gaming.ru`
- Блок игровой статистики на полной детальной странице помещён в тематизируемый контейнер, как в компактном режиме
- Кэш EXE-иконок унифицирован для карточек и детальных страниц
- Папки `custom_data` теперь используют имя exe и MD5 полного пути для предотвращения конфликтов одинаковых имён
- Управление геймпадом переведено с `pygame` на SDL3, зависимость `pygame` удалена
- Обновлён перевод на Немецкий `https://translate.codeberg.org/projects/portprotonqt/portprotonqt/de/`
- Обновлён перевод на Португальский (Бразилия) `https://translate.codeberg.org/projects/portprotonqt/portprotonqt/pt_BR/`
- Обновлён перевод на Китайский (упрощённый) `https://translate.codeberg.org/projects/portprotonqt/portprotonqt/zh_Hans/`
- Возвращено отображение нативных Linux-игр в библиотеке Steam без отображения саундтреков
- После создания или удаления ярлыков меню обновляется база desktop-файлов
- `sherrydmn` добавлен в список конфликтующих с GameMode процессов
### Fixed
- Исправлено игнорирование параметров темы для размеров, отступов, скруглений и тени карточек в сеточном и списочном режимах
- Исправлены медленная загрузка превью и повторные сетевые запросы при прокрутке магазина тем
- Исправлен непоследовательный порядок навигации по карточкам игр с помощью D-pad
- Системные действия в режиме `--ppqtos` переведены на `systemctl` и `loginctl`
- Исправлена перекраска SVG-иконок подсказок управления через `ICON_COLORS`
- Исправлен ввод кириллицы при поиске игр
- Поиск игр ограничен названиями без совпадений по описаниям
- Исправлено состояние кнопки остановки при переключении детальной страницы на компактный вид
- Исправлено зависание интерфейса после завершения игры
- Исправлено определение основного аккаунта Steam по самому новому `Timestamp` в `loginusers.vdf` с резервным поиском по `AutoLogin` или единственному профилю `userdata` и поддержкой `MostRecent` для совместимости со старыми версиями Steam
### Contributors
- @Rubin13
- @rogerio-mattos
- @Vekt0R_null
---
## [1.3.1] - 2026-07-18
### Fixed
- Исправлено CVE-2026-59678: уязвимость повышения привилегий в Polkit-правилах udisks и NetworkManager, где проверка командной строки через `ps` позволяла локальным пользователям обойти авторизацию
### Changed
- `--ppqtos` теперь требует что бы пользователь был в группе `portprotonqt`
---
## [1.3.0] - 2026-07-13
### Added
- Добавлена проверка 32-битных зависимостей ALT Linux перед запуском игр с предложением установить их через `pkexec`
- Добавлены 3 режима фона детальной страницы через тему: `gradient` (градиент по умолчанию), `static_waves` (статические волны), `waves` (анимированные волны)
- Добавлена поддержка открытия локальных `.ppai` автоустановок через ассоциацию файлов, CLI и перетаскивание в окно приложения
- Добавлена возможность печати для поиска напрямую с карточки игры в библиотеке и автоинсталлах
- Добавлен `AutoHideScrollArea` — QScrollArea с автоматически скрывающейся полосой прокрутки с анимацией fade-in/out
- Добавлен тип отображения времени `Steam` с часами, десятичными минутами
- Добавлено обновление отображения последнего запуска и проведённого времени без перезапуска приложения
- Добавлена поддержка D7VK
- Добавлена настройка автоматического скачивания PPDB с `ppdb.linux-gaming.ru`
- Добавлены раскладки и варианты виртуальной клавиатуры на основе keymap-данных `gjs-osk`
- Добавлен перевод на Немецкий `https://translate.codeberg.org/projects/portprotonqt/portprotonqt/de/`
- Добавлен магазин тем с загрузкой и применением тем из `ppdb.linux-gaming.ru` (скрыт за настройкой по умолчанию, так как сторонние темы могут быть небезопасны)
- Добавлена поддержка установки тем по URI `portprotonqt://theme/<id>` с `ppdb.linux-gaming.ru`
- Добавлено автообновление AppImage через интерфейс с резервным GitHub-зеркалом
- Добавлена запись параметров запуска из `.lnk` в `.ppdb`
- Добавлен автовыбор директории Flatpak-версии PortProton (`~/.var/app/ru.linux_gaming.PortProton`) как `portdatapath`, если директория существует
- Добавлена кнопка «Открыть папку» на детальной странице для игр PortProton
- Добавлена перекраска SVG-иконок через константу темы `ICON_COLORS`
- Добавлена константа темы `DETAIL_PAGE_GRADIENT` для полного переопределения стопов градиента фона детальной страницы
- Добавлена кнопка удаления карточек PortProton без существующего exe в библиотеке
### Changed
- Минимальный масштаб слайдера размера карточек снижен с 200 до 100 px
- Улучшено компактное отображение бейджей и названий карточек при малом масштабе
- Убран дебаг-код `proton_downloads` из менеджера WINE/Proton
- Проверка безопасности тем теперь включает SVG, изображения и шрифты — небезопасные файлы блокируют загрузку темы целиком
- Файл `last_launch` перемещён из `~/.cache/PortProtonQt/` в `~/.local/share/PortProtonQt/` согласно XDG спецификации
- Файл `statistics` перемещён из `portdatapath/tmp` в `~/.local/share/PortProtonQt/` согласно XDG спецификации и очищен от устаревших полей
- Из-за проблем с кешем fontconfig весь кеш Appimage перенесён в `~/.cache/AppImage-Cache/PortProtonQt/`
- Автоустановки теперь загружаются с сайта `ppdb.linux-gaming.ru`
- Бейдж PortProton теперь использует данные `ppdb.linux-gaming.ru`, ведёт на страницу отчёта по id и скрывается, если отчёта нет
- Бейдж ProtonDB теперь отображает название сервиса вместо текстового рейтинга
- Бейдж источника игры заменён на загнутый угол карточки для Steam и PortProton
- Иконки подсказок управления теперь можно нажимать мышью для выполнения соответствующего действия
- Звезда избранного переведена со шрифтового символа на SVG-иконку
- Улучшено адаптивное отображение детальной страниц
- Обновлён перевод на Португальский (Бразилия) `https://translate.codeberg.org/projects/portprotonqt/portprotonqt/pt_BR/`
- Обновлён перевод на Китайский (упрощённый) `https://translate.codeberg.org/projects/portprotonqt/portprotonqt/zh_Hans/`
- Обновлён перевод на Испанский `https://translate.codeberg.org/projects/portprotonqt/portprotonqt/es/`
- Кеш ProtonDB теперь очищается при обновлении списка приложений Steam
- Убрана поддержка `.lnк` файлов из `start.sh`
- Устаревший `Proton-Sarek` заменён на `dwproton`
- Улучшена читаемость списка версий Wine/Proton и префиксов в настройках exe
- Удаление игры из PortProton теперь также удаляет ярлыки из меню приложений и с рабочего стола
- Пункт «Добавить в Steam» скрывается в контекстном меню, если Steam не установлен
- Поиск во вкладке автоустановок унифицирован с поиском в библиотеке
### Fixed
- Исправлено попадание саундтреков и нативных Linux-игр в библиотеку Steam
- Исправлено определение тёмной темы для `Cinnamon`, `XFCE` и `MATE`
- Исправлена навигация по сетке карточек после перехода к результатам поиска
- Исправлен нестабильный поиск по первым буквам
- Исправлен поиск исполняемых файлов из `.lnk` с неверным регистром имени
- Исправлена обработка путей с пробелами в `portwine_create_shortcut`
- Исправлен запуск второго `.exe` через `PW_RUN_AFTER_EXE`
- Исправлено падение фонового чтения вывода запуска при невалидных UTF-8 байтах
- Исправлено отображение процентов скачивания библиотек на кнопке запуска
- Исправлено определение установленных автоустановок с одинаковыми именами лаунчеров и закомментированными `PW_EXE_FILE` в `.ppai`
- Исправлены рывки при раскрытии панели настроек библиотеки
- Исправлено закрытие панели фильтров библиотеки при переключении вкладок
- Исправлено сворачивание поиска при открытии виртуальной клавиатуры
- Исправлено обновление статуса установленных Wine/Proton после скачивания без переоткрытия менеджера версий
- Исправлено обновление статуса установленных Wine/Proton после удаления без переоткрытия менеджера версий
- Исправлено создание пустых папок `custom_data` и добавлена очистка пустых директорий пользовательских данных
### Contributors
- @CastroFidel
- @Dervart
- @rogerio-mattos
- @Simple16
- @Rubin13
- @gallegonovato
---
## [1.2.0] - 2026-06-10
### Added
+17
View File
@@ -434,3 +434,20 @@ proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.
=====================================================================
===========================
= Kenney Interface Sounds =
===========================
Interface Sounds (1.0)
Created/distributed by Kenney (www.kenney.nl)
License: Creative Commons Zero, CC0
http://creativecommons.org/publicdomain/zero/1.0/
This content is free to use in personal, educational and commercial projects.
Support us by crediting Kenney or www.kenney.nl (this is not mandatory)
+36 -27
View File
@@ -1,10 +1,15 @@
📘 Эта документация также доступна на [русском](README.ru.md)
---
<div align="center">
<img src="build-aux/share/icons/hicolor/scalable/apps/ru.linux_gaming.PortProtonQt.svg" width="64">
<h1 align="center">PortProtonQt</h1>
<p align="center">Современный и удобный интерфейс для управления и запуска игр из PortProton и Steam. Объединяет библиотеки в одном месте и упрощает запуск Windows-игр на Linux.</p>
<a href="https://git.linux-gaming.ru/Linux-Gaming/PortProtonQt/releases"><img src="https://img.shields.io/badge/Downloads-5471-green?style=flat-square" alt="Total Downloads"></a>
<p align="center">A modern and convenient interface for managing and launching games from PortProton and Steam. It brings libraries together in one place and simplifies launching Windows games on Linux.</p>
</div>
### Установка (devel)
### Installation (devel)
```sh
uv python install 3.10
@@ -14,55 +19,59 @@ source .venv/bin/activate # For bash/zsh
source .venv/bin/activate.fish # For fish
```
Запуск производится по команде portprotonqt
Launch the application using the `portprotonqt` command.
### Установка (release)
### Installation (release)
Выберите подходящий пакет для вашей системы или AppImage.
Choose the appropriate package for your system or the AppImage.
Запуск производится по команде portprotonqt или по ярлыку в меню
Launch using the `portprotonqt` command or via the shortcut in your application menu.
### Разработка
### Development
Для автоматической подготовки окружения (установка Python 3.10, зависимостей, pre-commit хуков и генерация переводов) выполните скрипт:
To automatically prepare the environment (install Python 3.10, dependencies, pre-commit hooks, and generate translations), run the following script:
```sh
./dev-scripts/prepare_env.sh
```
Затем активируйте виртуальное окружение. Команда активации для вашей оболочки будет выведена в конце работы скрипта. Обычно это:
Then activate the virtual environment. The activation command for your shell will be displayed at the end of the script execution. Usually, it is:
```sh
source .venv/bin/activate # Для bash/zsh
# или
source .venv/bin/activate.fish # Для fish
source .venv/bin/activate # For bash/zsh
# or
source .venv/bin/activate.fish # For fish
```
pre-commit сам запустится при коммите, если вы хотите запустить его вручную введите команду:
`pre-commit` will automatically run on every commit. If you want to run it manually, use:
```sh
pre-commit run --all-files
```
## Авторы
## Authors
* [Boria138](https://git.linux-gaming.ru/Boria138) - Основной разработчик
* [BlackSnaker](https://git.linux-gaming.ru/BlackSnaker) - Автор идеи, а так же начальной реализации проекта
* [Mikhail Tergoev (Castro-Fidel)](https://git.linux-gaming.ru/CastroFidel) - Автор оригинального проекта PortProton
* [Boria138](https://git.linux-gaming.ru/Boria138) - Lead Developer
* [BlackSnaker](https://git.linux-gaming.ru/BlackSnaker) - Author of the idea and initial implementation
* [Mikhail Tergoev (Castro-Fidel)](https://git.linux-gaming.ru/CastroFidel) - Author of the original PortProton project
### Контрибьюторы
### Contributors
Мы благодарим всех, кто внёс вклад в развитие PortProtonQt, включая тех, кто участвует через коммиты, а также тех, кто помогает другими способами (тестирование, идеи, переводы, документация и т.д.). Полный список участников, можно найти в [списке активности репозитория](https://git.linux-gaming.ru/Linux-Gaming/PortProtonQt/activity/contributors). Дополнительные участники также перечислены в файле [CHANGELOG.md](CHANGELOG.md). Если вы внесли вклад, но не указаны, свяжитесь с основными разработчиками, чтобы мы могли вас отметить!
We thank everyone who has contributed to the development of PortProtonQt, including those who participate through commits as well as those who help in other ways (testing, ideas, translations, documentation, etc.). A full list of participants can be found in the [repository activity list](https://git.linux-gaming.ru/Linux-Gaming/PortProtonQt/activity/contributors). Additional participants are also listed in the [CHANGELOG.md](CHANGELOG.md) file. If you have contributed but are not listed, please contact the lead developers so we can acknowledge you!
## Зависимости и лицензии
## Dependencies and Licenses
PortProtonQt использует код и зависимости от следующих проектов:
PortProtonQt uses code and dependencies from the following projects:
- [Icoextract](https://github.com/jlu5/icoextract) — библиотека для извлечения иконок, лицензия [MIT](https://github.com/jlu5/icoextract/blob/master/LICENSE).
- [HowLongToBeat Python API](https://github.com/ScrappyCocco/HowLongToBeat-PythonAPI) — библиотека для взаимодействия с HowLongToBeat, лицензия [MIT](https://github.com/ScrappyCocco/HowLongToBeat-PythonAPI/blob/master/LICENSE.md).
- [iat](https://sourceforge.net/projects/iat.berlios) — библиотека для конвертации mdf и nrg в iso, лицензия GPLv3
- [pyte](https://github.com/selectel/pyte) — разбор ANSI escape-кодов, лицензия [LGPLv3](https://github.com/selectel/pyte?tab=LGPL-3.0-1-ov-file)
Полный текст лицензий см. в файле [LICENSE](LICENSE).
- [Icoextract](https://github.com/jlu5/icoextract) — icon extraction library, [MIT](https://github.com/jlu5/icoextract/blob/master/LICENSE) license.
- [HowLongToBeat Python API](https://github.com/ScrappyCocco/HowLongToBeat-PythonAPI) — library for interacting with HowLongToBeat, [MIT](https://github.com/ScrappyCocco/HowLongToBeat-PythonAPI/blob/master/LICENSE.md) license.
- [iat](https://sourceforge.net/projects/iat.berlios) — library for converting mdf and nrg to iso, GPLv3 license.
- [pyte](https://github.com/selectel/pyte) — ANSI escape code parser, [LGPLv3](https://github.com/selectel/pyte?tab=LGPL-3.0-1-ov-file) license.
- [gjs-osk](https://github.com/Vishram1123/gjs-osk) — base for virtual keyboard layout data, GPLv3 license.
- [omikuji](https://github.com/omikuji-launcher/omikuji) — inspiration and source material for the procedural detail page backgrounds, [GPLv3](https://github.com/omikuji-launcher/omikuji/blob/master/LICENSE) license.
- [Bottles](https://github.com/bottlesdevs/Bottles) — source of the compatibility analysis rules, GPL-3.0-only license.
See the [LICENSE](LICENSE) file for the full text of the licenses.
> [!WARNING]
> **Будьте осторожны!** Если вы берёте тему не из официального репозитория или надёжного источника, убедитесь, что в её файле `styles.py` нет вредоносного или нежелательного кода. Поскольку `styles.py` — это обычный Python-файл, он может содержать любые инструкции. Всегда проверяйте содержимое чужих тем перед использованием.
> **Be careful!** If you are using a theme not from the official repository or a trusted source, make sure its `styles.py` file does not contain malicious or unwanted code. Since `styles.py` is a regular Python file, it can contain any instructions. Always check the contents of third-party themes before use.
+77
View File
@@ -0,0 +1,77 @@
📖 This documentation is also available in [English](README.md)
---
<div align="center">
<img src="build-aux/share/icons/hicolor/scalable/apps/ru.linux_gaming.PortProtonQt.svg" width="64">
<h1 align="center">PortProtonQt</h1>
<a href="https://git.linux-gaming.ru/Linux-Gaming/PortProtonQt/releases"><img src="https://img.shields.io/badge/%D0%97%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8-5471-green?style=flat-square" alt="Всего загрузок"></a>
<p align="center">Современный и удобный интерфейс для управления и запуска игр из PortProton и Steam. Объединяет библиотеки в одном месте и упрощает запуск Windows-игр на Linux.</p>
</div>
### Установка (devel)
```sh
uv python install 3.10
uv sync
source .venv/bin/activate # For bash/zsh
# or
source .venv/bin/activate.fish # For fish
```
Запуск производится по команде portprotonqt
### Установка (release)
Выберите подходящий пакет для вашей системы или AppImage.
Запуск производится по команде portprotonqt или по ярлыку в меню
### Разработка
Для автоматической подготовки окружения (установка Python 3.10, зависимостей, pre-commit хуков и генерация переводов) выполните скрипт:
```sh
./dev-scripts/prepare_env.sh
```
Затем активируйте виртуальное окружение. Команда активации для вашей оболочки будет выведена в конце работы скрипта. Обычно это:
```sh
source .venv/bin/activate # Для bash/zsh
# или
source .venv/bin/activate.fish # Для fish
```
pre-commit сам запустится при коммите, если вы хотите запустить его вручную введите команду:
```sh
pre-commit run --all-files
```
## Авторы
* [Boria138](https://git.linux-gaming.ru/Boria138) - Основной разработчик
* [BlackSnaker](https://git.linux-gaming.ru/BlackSnaker) - Автор идеи, а так же начальной реализации проекта
* [Mikhail Tergoev (Castro-Fidel)](https://git.linux-gaming.ru/CastroFidel) - Автор оригинального проекта PortProton
### Контрибьюторы
Мы благодарим всех, кто внёс вклад в развитие PortProtonQt, включая тех, кто участвует через коммиты, а также тех, кто помогает другими способами (тестирование, идеи, переводы, документация и т.д.). Полный список участников, можно найти в [списке активности репозитория](https://git.linux-gaming.ru/Linux-Gaming/PortProtonQt/activity/contributors). Дополнительные участники также перечислены в файле [CHANGELOG.md](CHANGELOG.md). Если вы внесли вклад, но не указаны, свяжитесь с основными разработчиками, чтобы мы могли вас отметить!
## Зависимости и лицензии
PortProtonQt использует код и зависимости от следующих проектов:
- [Icoextract](https://github.com/jlu5/icoextract) — библиотека для извлечения иконок, лицензия [MIT](https://github.com/jlu5/icoextract/blob/master/LICENSE).
- [HowLongToBeat Python API](https://github.com/ScrappyCocco/HowLongToBeat-PythonAPI) — библиотека для взаимодействия с HowLongToBeat, лицензия [MIT](https://github.com/ScrappyCocco/HowLongToBeat-PythonAPI/blob/master/LICENSE.md).
- [iat](https://sourceforge.net/projects/iat.berlios) — библиотека для конвертации mdf и nrg в iso, лицензия GPLv3
- [pyte](https://github.com/selectel/pyte) — разбор ANSI escape-кодов, лицензия [LGPLv3](https://github.com/selectel/pyte?tab=LGPL-3.0-1-ov-file)
- [gjs-osk](https://github.com/Vishram1123/gjs-osk) — основа данных раскладок виртуальной клавиатуры, лицензия GPLv3.
- [omikuji](https://github.com/omikuji-launcher/omikuji) — источник вдохновения и материалов для процедурных фонов детальной страницы, лицензия [GPLv3](https://github.com/omikuji-launcher/omikuji/blob/master/LICENSE).
- [Bottles](https://github.com/bottlesdevs/Bottles) — источник правил анализа совместимости, лицензия GPL-3.0-only.
Полный текст лицензий см. в файле [LICENSE](LICENSE).
> [!WARNING]
> **Будьте осторожны!** Если вы берёте тему не из официального репозитория или надёжного источника, убедитесь, что в её файле `styles.py` нет вредоносного или нежелательного кода. Поскольку `styles.py` — это обычный Python-файл, он может содержать любые инструкции. Всегда проверяйте содержимое чужих тем перед использованием.
-58
View File
@@ -1,58 +0,0 @@
- [X] Адаптировать структуру проекта для поддержки инструментов сборки
- [X] Добавить возможность управления с геймпада
- [X] Добавить возможность управления с тачскрина (Формально и так есть)
- [X] Добавить возможность управления с мыши и клавиатуры
- [X] Добавить систему тем [Документация](documentation/theme_guide)
- [X] Вынести все константы, такие как уровень закругления карточек, в темы (частично выполнено)
- [X] Добавить метаданные для тем (скриншоты, описание, домашняя страница и автор)
- [X] [Добавить сессию Gamescope, аналогичную той, что используется в SteamOS](https://git.linux-gaming.ru/Boria138/gamescope-session-portprotonqt)
- [X] Разобраться почему теряется часть стилей в Gamescope
- [x] Разработать адаптивный дизайн (за эталон берётся 1000x700 из гайдлайнов Flathub)
- [x] Переделать скриншоты для соответствия [гайдлайнам Flathub](https://docs.flathub.org/docs/for-app-authors/metainfo-guidelines/quality-guidelines#screenshots)
- [X] Получать описания и названия игр из базы данных Steam
- [X] Получать обложки для игр из CDN Steam
- [X] Оптимизировать работу со Steam API для ускорения времени запуска
- [X] Улучшить функцию поиска в Steam API для исправления некорректного определения ID (например, Graven определялся как ENGRAVEN или GRAVENFALL, Spore — как SporeBound или Spore Valley)
- [X] Убрать логи Steam API в релизной версии, так как они замедляют выполнение кода
- [X] Решить проблему с ограничением Steam API в 50 тысяч игр за один запрос (иногда нужные игры не попадают в выборку и остаются без обложки)
- [X] Избавиться от вызовов yad
- [X] Реализовать собственный системный трей вместо использования трея PortProton
- [X] Добавить экранную клавиатуру в поиск
- [X] Добавить сортировку карточек по различным критериям (доступны: по недавности, количеству наигранного времени, избранному или алфавиту)
- [X] Добавить индикацию запуска приложения
- [X] Достигнуть паритета функциональности с Ingame
- [X] Достигнуть паритета функциональности с PortProton
- [X] Добавить возможность изменения названия, описания и обложки через файлы `.local/share/PortProtonQT/custom_data/exe_name/{desc,name,cover}`
- [X] Добавить встроенное переопределение названия, описания и обложки, например, по пути `portprotonqt/custom_data` [Документация](documentation/metadata_override/)
- [X] Добавить переводы в переопределения
- [X] Добавить в карточку игры сведения о поддержке геймпада
- [X] Добавить в карточки данные с ProtonDB
- [X] Добавить в карточки данные с AreWeAntiCheatYet
- [X] Продублировать бейджи с карточки на страницу с деталями игры
- [X] Добавить парсинг ярлыков из Steam
- [X] Добавить на карточку бейдж, указывающий, что игра из Steam
- [X] Добавить поддержку версий Steam для Flatpak и Snap
- [X] Реализовать добавление игры как сторонней в Steam без перезапуска
- [X] Отображать данные о самом последнем пользователе Steam, а не первом попавшемся
- [X] Исправить склонения в детальном выводе времени, например, не «3 часов назад», а «3 часа назад»
- [X] Добавить перевод через gettext [Документация](documentation/localization_guide)
- [X] Отображать описания игр и другие данные на языке системы
- [X] Добавить недокументированные параметры конфигурации в GUI (time_detail_level, games_sort_method, games_display_filter)
- [X] Добавить систему избранного для карточек
- [X] Заменить все `print` на `logging`
- [X] Привести все логи к единому языку
- [X] Уменьшить количество подстановок в переводах
- [X] Стилизовать все элементы без стилей (QMessageBox, QSlider, QDialog)
- [X] Убрать жёсткую привязку путей к стрелочкам QComboBox в `styles.py`
- [X] Исправить частичное применение тем на лету
- [X] Исправить наложение подписей скриншотов при первом перелистывании в полноэкранном режиме
- [ ] Добавить поддержку GOG (?)
- [X] Определиться с названием (PortProtonQt или PortProtonQT или вообще третий вариант)
- [X] Добавить данные с HowLongToBeat на страницу с деталями игры
- [X] Добавить виброотдачу на геймпаде при запуске игры
- [X] Исправить некорректную работу слайдера увеличения размера карточек([Последствия регрессии после этого коммита](https://github.com/Boria138/PortProtonQt/commit/aebdd60b5537280f06a922ff80469cd4ab27bc63)
- [X] Исправить баг с наложением карточек друг на друга при изменении фильтра отображения ([Последствия регрессии после этого коммита](https://github.com/Boria138/PortProtonQt/commit/aebdd60b5537280f06a922ff80469cd4ab27bc63))
- [X] Скопировать логику управления с D-pad на стрелки с клавиатуры
- [X] Добавить подсказки к управлению с геймпада
- [X] Добавить миниатюры к выбору файлов в диалоге добавления игры
- [X] Добавить быстрый доступ к смонтированным дискам к выбору файлов в диалоге добавления игры
+22 -34
View File
@@ -5,6 +5,8 @@ set -eu
# Initialize variables
LOCAL_MODE=false
BRANCH="main"
USE_BRANCH=false
TAG=""
REPO_URL="https://git.linux-gaming.ru/Linux-Gaming/PortProtonQt.git"
# Parse arguments
@@ -16,12 +18,22 @@ while [ $# -gt 0 ]; do
--branch)
if [ -n "${2:-}" ] && [ "${2#-}" = "$2" ]; then
BRANCH="$2"
USE_BRANCH=true
shift
else
echo "Error: --branch requires an argument"
exit 1
fi
;;
--tag)
if [ -n "${2:-}" ] && [ "${2#-}" = "$2" ]; then
TAG="$2"
shift
else
echo "Error: --tag requires an argument"
exit 1
fi
;;
--repo)
if [ -n "${2:-}" ] && [ "${2#-}" = "$2" ]; then
REPO_URL="$2"
@@ -45,9 +57,12 @@ EXTRA_PACKAGES="https://raw.githubusercontent.com/pkgforge-dev/Anylinux-AppImage
if [ "$LOCAL_MODE" = true ]; then
echo "Using local PKGBUILD-git from repository..."
PPQT_PKGBUILD=""
elif [ -n "$TAG" ]; then
echo "Using stable version of PortProtonQt from $TAG tag..."
PPQT_PKGBUILD="https://git.linux-gaming.ru/Linux-Gaming/PortProtonQt/raw/tag/$TAG/build-aux/PKGBUILD"
else
echo "Using stable version of PortProtonQt from main branch..."
PPQT_PKGBUILD="https://git.linux-gaming.ru/Linux-Gaming/PortProtonQt/raw/branch/main/build-aux/PKGBUILD"
echo "Using stable version of PortProtonQt from $BRANCH branch..."
PPQT_PKGBUILD="https://git.linux-gaming.ru/Linux-Gaming/PortProtonQt/raw/branch/$BRANCH/build-aux/PKGBUILD"
fi
echo "Tweak makepkg..."
@@ -68,23 +83,6 @@ echo "---------------------------------------------------------------"
pacman-key --init
pacman -S --noconfirm archlinux-keyring
# Chaotic-AUR keys
pacman-key --recv-key 3056513887B78AEB --keyserver keyserver.ubuntu.com
pacman-key --lsign-key 3056513887B78AEB
pacman -U --noconfirm 'https://cdn-mirror.chaotic.cx/chaotic-aur/chaotic-keyring.pkg.tar.zst'
pacman -U --noconfirm 'https://cdn-mirror.chaotic.cx/chaotic-aur/chaotic-mirrorlist.pkg.tar.zst'
# Enable the multilib repository
cat << EOM >> /etc/pacman.conf
[multilib]
Include = /etc/pacman.d/mirrorlist
[chaotic-aur]
Include = /etc/pacman.d/chaotic-mirrorlist
SigLevel = Never
EOM
# Disable locale noextract
sed -i -E 's@[[:space:]]*usr/share/locale/\*@@g; s@[[:space:]]+@ @g; s@[[:space:]]+$@@' /etc/pacman.conf
@@ -97,22 +95,12 @@ if [ "$LOCAL_MODE" = true ]; then
else
wget --retry-connrefused --tries=30 "$PPQT_PKGBUILD" -O ./PKGBUILD
fi
sed -i "s|source=(\"git+https://git.linux-gaming.ru/Linux-Gaming/PortProtonQt.git\")|source=(\"git+${REPO_URL}#branch=$BRANCH\")|" PKGBUILD
makepkg -si --noconfirm
echo "Installing optional runtime dependencies from PKGBUILD..."
echo "---------------------------------------------------------------"
OPTDEPENDS_PACKAGES="$(sed -n '/optdepends=(/,/)/p' PKGBUILD \
| grep -o "'[^']*'" \
| sed "s/'//g" \
| awk -F: '{print $1}' \
| tr '\n' ' ' \
| xargs)"
if [ -n "${OPTDEPENDS_PACKAGES// /}" ]; then
# Install all optional dependencies used by system integrations.
pacman -S --needed --noconfirm $OPTDEPENDS_PACKAGES
if [ "$USE_BRANCH" = true ]; then
sed -i "s|^source=.*|source=(\"git+${REPO_URL}#branch=$BRANCH\")|" PKGBUILD
elif [ -n "$TAG" ]; then
sed -i "s|^source=.*|source=(\"git+${REPO_URL}#tag=$TAG\")|" PKGBUILD
fi
makepkg -si --noconfirm
echo "Installing debloated packages..."
echo "---------------------------------------------------------------"
+52 -6
View File
@@ -10,9 +10,11 @@ export OUTPATH=./dist
export DESKTOP=/usr/share/applications/ru.linux_gaming.PortProtonQt.desktop
export ICON=/usr/share/icons/hicolor/scalable/apps/ru.linux_gaming.PortProtonQt.svg
export OUTNAME=PortProtonQt-"$VERSION"-anylinux-"$ARCH".AppImage
export UPINFO="gitea-releases-zsync|git.linux-gaming.ru|Linux-Gaming|PortProtonQt|latest|*$ARCH.AppImage.zsync"
export DEPLOY_OPENGL=1
export DEPLOY_SDL=1
export DEPLOY_SYS_PYTHON=1
export DEPLOY_PYTHON=1
export MAIN_BIN=portprotonqt
export OPTIMIZE_LAUNCH=1
# Adjust comp settings to bypass oom-killer
@@ -27,21 +29,65 @@ mkdir -p ./AppDir/etc/udev/rules.d
cp /usr/lib/udev/rules.d/60-portprotonqt.rules ./AppDir/etc/udev/rules.d
# Add PortProton scripts
# Copy manual because im to lazzy for wait ./quick-sharun strace 208 .ppdb
mkdir -p ./AppDir/share
if [ -d /usr/local/share/portproton ]; then
cp -r /usr/local/share/portproton ./AppDir/share
elif [ -d /usr/share/portproton ]; then
cp -r /usr/share/portproton ./AppDir/share
fi
cp -r /usr/share/portproton ./AppDir/share
# QSoundEffect only needs PCM WAV and PulseAudio. Remove the optional native
# PipeWire path and FFmpeg media backend before quick-sharun scans Qt plugins.
pacman -Rdd --noconfirm libpipewire qt6-multimedia-ffmpeg
# Deploy dependencies
# Qt libs have to be passed manually due to the app being a python script
./quick-sharun \
/usr/bin/portprotonqt* \
/usr/bin/update-desktop-database \
/usr/bin/vk_gpu_info \
/usr/lib/libQt6Core.so* \
/usr/lib/libQt6Gui.so* \
/usr/lib/libQt6Multimedia.so* \
/usr/lib/libQt6Network.so* \
/usr/lib/qt6/plugins/imageformats/libqwebp.so
# DEPLOY_PYTHON copies the distro's complete Python installation. Remove
# build/development content and PySide bindings not imported by PortProtonQt.
PYTHON_DIR=$(find ./AppDir/lib -maxdepth 1 -type d -name 'python3.*' -print -quit)
PYTHON_SITE=$PYTHON_DIR/site-packages
PYSIDE_DIR=$PYTHON_SITE/PySide6
rm -rf \
"$PYTHON_DIR"/ensurepip \
"$PYTHON_DIR"/idlelib \
"$PYTHON_DIR"/pydoc_data \
"$PYTHON_DIR"/tkinter \
"$PYTHON_DIR"/turtledemo \
"$PYTHON_DIR"/venv \
"$PYTHON_SITE"/Cython \
"$PYTHON_SITE"/cython.py \
"$PYTHON_SITE"/mesonbuild \
"$PYTHON_SITE"/pygments \
"$PYTHON_SITE"/pyximport \
"$PYTHON_SITE"/setuptools \
"$PYTHON_SITE"/vapoursynth \
"$PYTHON_SITE"/wheel \
"$PYTHON_SITE"/cython-*.dist-info \
"$PYTHON_SITE"/meson-*.dist-info \
"$PYTHON_SITE"/pygments-*.dist-info \
"$PYTHON_SITE"/setuptools-*.dist-info \
"$PYTHON_SITE"/vapoursynth-*.dist-info \
"$PYTHON_SITE"/wheel-*.dist-info
find "$PYTHON_DIR" -depth -type d \( -name test -o -name tests \) \
-exec rm -rf {} +
find "$PYTHON_SITE" -type f -name '*.pyi' -delete
for module in "$PYSIDE_DIR"/Qt*.so; do
case "${module##*/}" in
QtCore.*|QtGui.*|QtMultimedia.*|QtNetwork.*|QtSvg.*|QtWidgets.*) continue ;;
esac
rm -f "$module"
done
rm -rf "$PYSIDE_DIR"/QtAsyncio
# Turn AppDir into AppImage
./quick-sharun --make-appimage
+3 -3
View File
@@ -1,12 +1,12 @@
pkgname=('portprotonqt')
pkgver=1.2.0
pkgver=1.3.1
pkgrel=1
pkgdesc="Modern GUI for managing and launching games from PortProton and Steam"
arch=('any')
url="https://git.linux-gaming.ru/Linux-Gaming/PortProtonQt"
license=('GPL-3.0')
depends=('python-requests' 'python-babel' 'python-evdev' 'python-pygame' 'python-orjson'
'python-psutil' 'python-tqdm' 'python-vdf' 'python-libarchive-c' 'pyside6' 'python-rapidfuzz' 'python-pefile' 'python-pillow' 'perl-image-exiftool' 'python-websocket-client' 'cabextract' 'unzip' 'curl' 'jq' 'file' 'findutils' 'gawk' 'grep' 'tar' 'xz' 'zstd' 'gzip' 'unrar' 'qt6-svg' 'qt6-imageformats' 'pciutils' 'mesa-utils' 'vulkan-icd-loader' 'procps-ng' 'psmisc' '7zip' 'python-dbus-fast' 'sdl3')
depends=('python-requests' 'python-babel' 'python-evdev' 'python-orjson'
'python-psutil' 'python-tqdm' 'python-vdf' 'python-libarchive-c' 'pyside6' 'python-rapidfuzz' 'python-pefile' 'python-pillow' 'perl-image-exiftool' 'python-websocket-client' 'cabextract' 'unzip' 'curl' 'file' 'findutils' 'gawk' 'grep' 'tar' 'xz' 'zstd' 'gzip' 'unrar' 'qt6-svg' 'qt6-imageformats' 'qt6-multimedia' 'pciutils' 'mesa-utils' 'vulkan-icd-loader' 'procps-ng' 'psmisc' '7zip' 'python-dbus-fast' 'sdl3' 'desktop-file-utils')
makedepends=('meson' 'ninja' 'vulkan-headers' 'gettext')
conflicts=("portprotonqt-steam-compat")
provides=('portprotonqt-steam-compat')
+2 -2
View File
@@ -5,8 +5,8 @@ pkgdesc="Modern GUI for managing and launching games from PortProton and Steam (
arch=('any')
url="https://git.linux-gaming.ru/Linux-Gaming/PortProtonQt"
license=('GPL-3.0')
depends=('python-requests' 'python-babel' 'python-evdev' 'python-pygame' 'python-orjson'
'python-psutil' 'python-tqdm' 'python-vdf' 'python-libarchive-c' 'pyside6' 'python-rapidfuzz' 'python-pefile' 'python-pillow' 'perl-image-exiftool' 'python-websocket-client' 'cabextract' 'unzip' 'curl' 'jq' 'file' 'findutils' 'gawk' 'grep' 'tar' 'xz' 'zstd' 'gzip' 'unrar' 'qt6-svg' 'qt6-imageformats' 'pciutils' 'mesa-utils' 'vulkan-icd-loader' 'procps-ng' 'psmisc' '7zip' 'python-dbus-fast' 'sdl3')
depends=('python-requests' 'python-babel' 'python-evdev' 'python-orjson'
'python-psutil' 'python-tqdm' 'python-vdf' 'python-libarchive-c' 'pyside6' 'python-rapidfuzz' 'python-pefile' 'python-pillow' 'perl-image-exiftool' 'python-websocket-client' 'cabextract' 'unzip' 'curl' 'file' 'findutils' 'gawk' 'grep' 'tar' 'xz' 'zstd' 'gzip' 'unrar' 'qt6-svg' 'qt6-imageformats' 'qt6-multimedia' 'pciutils' 'mesa-utils' 'vulkan-icd-loader' 'procps-ng' 'psmisc' '7zip' 'python-dbus-fast' 'sdl3' 'desktop-file-utils')
makedepends=('meson' 'ninja' 'vulkan-headers' 'gettext')
conflicts=("portprotonqt-steam-compat")
provides=('portprotonqt-steam-compat')
+6 -3
View File
@@ -1,5 +1,5 @@
%global pypi_name portprotonqt
%global pypi_version 1.2.0
%global pypi_version 1.3.1
%global oname PortProtonQt
%global build_timestamp %(date +"%Y%m%d")
%global _python_no_extras_requires 1
@@ -33,7 +33,6 @@ Requires: python3-websocket-client
Requires: python3-orjson
Requires: python3-psutil
Requires: python3-pyside6
Requires: python3-pygame
Requires: python3-requests
Requires: python3-tqdm
Requires: python3-vdf
@@ -46,11 +45,11 @@ Requires: perl-Image-ExifTool
Requires: SDL3
Requires: qt6-qtsvg
Requires: qt6-qtimageformats
Requires: qt6-qtmultimedia
Requires: cabextract
Requires: gzip
Requires: unzip
Requires: curl
Requires: jq
Requires: file
Requires: findutils
Requires: gawk
@@ -66,6 +65,7 @@ Requires: procps-ng
Requires: psmisc
Requires: 7zip
Requires: python3-dbus-fast
Requires: desktop-file-utils
# System Tab
Recommends: NetworkManager
@@ -112,8 +112,11 @@ install -Dpm 0644 ./completions/_portprotonqt -t %{buildroot}%{zsh_completions_d
%{_datadir}/icons/hicolor/scalable/apps/ru.linux_gaming.PortProtonQt.svg
%{_metainfodir}/ru.linux_gaming.PortProtonQt.metainfo.xml
%{_udevrulesdir}/60-portprotonqt.rules
%{_sysusersdir}/portprotonqt.conf
%{_datadir}/polkit-1/rules.d/ru.linux_gaming.PortProtonQt.rules
%{_datadir}/applications/ru.linux_gaming.PortProtonQt.desktop
%{_datadir}/applications/ru.linux_gaming.PortProtonQt.log.desktop
%{_datadir}/applications/ru.linux_gaming.PortProtonQt.silent.desktop
%{_datadir}/mime/packages/ru.linux_gaming.PortProtonQt.xml
%{_datadir}/portproton/scripts/
%{_datadir}/portproton/conf/
+6 -3
View File
@@ -1,5 +1,5 @@
%global pypi_name portprotonqt
%global pypi_version 1.2.0
%global pypi_version 1.3.1
%global oname PortProtonQt
%global _python_no_extras_requires 1
@@ -30,7 +30,6 @@ Requires: python3-websocket-client
Requires: python3-orjson
Requires: python3-psutil
Requires: python3-pyside6
Requires: python3-pygame
Requires: python3-requests
Requires: python3-tqdm
Requires: python3-vdf
@@ -43,11 +42,11 @@ Requires: perl-Image-ExifTool
Requires: SDL3
Requires: qt6-qtsvg
Requires: qt6-qtimageformats
Requires: qt6-qtmultimedia
Requires: cabextract
Requires: gzip
Requires: unzip
Requires: curl
Requires: jq
Requires: file
Requires: findutils
Requires: gawk
@@ -63,6 +62,7 @@ Requires: procps-ng
Requires: psmisc
Requires: 7zip
Requires: python3-dbus-fast
Requires: desktop-file-utils
# System Tab
Recommends: NetworkManager
@@ -110,8 +110,11 @@ install -Dpm 0644 ./completions/_portprotonqt -t %{buildroot}%{zsh_completions_d
%{_datadir}/icons/hicolor/scalable/apps/ru.linux_gaming.PortProtonQt.svg
%{_metainfodir}/ru.linux_gaming.PortProtonQt.metainfo.xml
%{_udevrulesdir}/60-portprotonqt.rules
%{_sysusersdir}/portprotonqt.conf
%{_datadir}/polkit-1/rules.d/ru.linux_gaming.PortProtonQt.rules
%{_datadir}/applications/ru.linux_gaming.PortProtonQt.desktop
%{_datadir}/applications/ru.linux_gaming.PortProtonQt.log.desktop
%{_datadir}/applications/ru.linux_gaming.PortProtonQt.silent.desktop
%{_datadir}/mime/packages/ru.linux_gaming.PortProtonQt.xml
%{_datadir}/portproton/scripts/
%{_datadir}/portproton/conf/
@@ -0,0 +1 @@
g portprotonqt - -
@@ -11,4 +11,4 @@ Terminal=false
Icon=ru.linux_gaming.PortProtonQt
StartupWMClass=ru.linux_gaming.PortProtonQt
Categories=Game;Utility;
MimeType=x-scheme-handler/portproton;application/x-portproton-prefix-backup;application/x-ms-dos-exec;application/x-ms-dos-batch;application/x-bat;application/x-msi;text/x-ms-regedit;application/x-executable;application/x-dosexec;application/x-iso9660-image;application/x-cd-image;application/x-raw-disk-image;application/x-mdf;application/x-mds-disk;application/x-nrg;
MimeType=x-scheme-handler/portproton;x-scheme-handler/portprotonqt;application/x-portproton-prefix-backup;application/x-portproton-autoinstall;application/x-ms-dos-exec;application/x-ms-dos-executable;application/x-msdos-program;application/vnd.microsoft.portable-executable;application/x-ms-dos-batch;application/x-bat;application/x-msi;text/x-ms-regedit;application/x-executable;application/x-dosexec;application/x-iso9660-image;application/x-cd-image;application/x-raw-disk-image;application/x-mdf;application/x-mds-disk;application/x-nrg;
@@ -0,0 +1,20 @@
[Desktop Entry]
Name=PortProtonQt (log)
Name[ru]=PortProtonQt (режим лога)
Name[es]=PortProtonQt (modo de registro)
Name[pt]=PortProtonQt (modo de registro)
Name[de]=PortProtonQt (Protokollmodus)
Exec=portprotonqt --log %u
Type=Application
Comment=Launch Windows applications with logging through PortProtonQt
Comment[ru]=Запуск Windows-приложений с записью лога через PortProtonQt
Comment[es]=Ejecuta aplicaciones de Windows con registro mediante PortProtonQt
Comment[pt]=Executa aplicativos do Windows com registro pelo PortProtonQt
Comment[de]=Startet Windows-Anwendungen mit Protokollierung über PortProtonQt
Terminal=false
Icon=ru.linux_gaming.PortProtonQt
StartupWMClass=ru.linux_gaming.PortProtonQt
Categories=Game;
NoDisplay=true
MimeType=application/x-ms-dos-executable;application/x-msdos-program;application/x-ms-dos-exec;application/x-executable;application/x-dosexec;application/vnd.microsoft.portable-executable;
StartupNotify=true
@@ -0,0 +1,20 @@
[Desktop Entry]
Name=PortProtonQt (silent)
Name[ru]=PortProtonQt (тихий режим)
Name[es]=PortProtonQt (modo silencioso)
Name[pt]=PortProtonQt (modo silencioso)
Name[de]=PortProtonQt (stiller Modus)
Exec=portprotonqt --silent %u
Type=Application
Comment=Launch Windows applications silently through PortProtonQt
Comment[ru]=Тихий запуск Windows-приложений через PortProtonQt
Comment[es]=Ejecuta aplicaciones de Windows silenciosamente mediante PortProtonQt
Comment[pt]=Executa aplicativos do Windows silenciosamente pelo PortProtonQt
Comment[de]=Startet Windows-Anwendungen lautlos über PortProtonQt
Terminal=false
Icon=ru.linux_gaming.PortProtonQt
StartupWMClass=ru.linux_gaming.PortProtonQt
Categories=Game;
NoDisplay=true
MimeType=application/x-ms-dos-executable;application/x-msdos-program;application/x-ms-dos-exec;application/x-executable;application/x-dosexec;application/vnd.microsoft.portable-executable;
StartupNotify=true
@@ -24,9 +24,15 @@
</developer>
<releases>
<release version="1.2.0" date="2026-06-10">
<release version="1.3.1" date="2026-07-17">
<description></description>
</release>
<release version="1.3.0" date="2026-07-13">
<description/>
</release>
<release version="1.2.0" date="2026-06-10">
<description/>
</release>
<release version="1.1.0" date="2026-05-26">
<description/>
</release>
@@ -5,4 +5,9 @@
<comment xml:lang="ru">Резервная копия префикса PortProton</comment>
<glob pattern="*.ppack"/>
</mime-type>
<mime-type type="application/x-portproton-autoinstall">
<comment>PortProton auto install script</comment>
<comment xml:lang="ru">Скрипт автоустановки PortProton</comment>
<glob pattern="*.ppai"/>
</mime-type>
</mime-info>
@@ -1,21 +1,15 @@
polkit.addRule(function(action, subject) {
var cmd_line = polkit.spawn(["ps", "-o", "args=", "-p", String(subject.pid)]);
var ppid = polkit.spawn(["ps", "-o", "ppid=", "-p", String(subject.pid)]).trim();
var parent_cmd_line = "";
if (ppid) {
parent_cmd_line = polkit.spawn(["ps", "-o", "args=", "-p", ppid]);
if (!subject.local || !subject.active ||
!subject.isInGroup("portprotonqt")) {
return polkit.Result.NOT_HANDLED;
}
var is_ppqt_call =
cmd_line.includes("ppqtos") ||
parent_cmd_line.includes("ppqtos");
if ( (
action.id === "org.freedesktop.NetworkManager.settings.modify.system" ||
action.id == "org.freedesktop.udisks2.filesystem-mount-system" ||
action.id == "org.freedesktop.udisks2.filesystem-mount-other-seat" ||
action.id == "org.freedesktop.udisks2.filesystem-unmount-others" ) &&
is_ppqt_call)
{
return polkit.Result.YES;
if (action.id === "org.freedesktop.NetworkManager.settings.modify.system" ||
action.id === "org.freedesktop.udisks2.filesystem-mount-system" ||
action.id === "org.freedesktop.udisks2.filesystem-mount-other-seat" ||
action.id === "org.freedesktop.udisks2.filesystem-unmount-others") {
return polkit.Result.YES;
}
return polkit.Result.NOT_HANDLED;
});
@@ -4,16 +4,16 @@
########################################################################
$PW_DEBUG
print_error () { printf "\E[31m%s Error: $@ %s\e[0m\n" ;}
print_error () { printf "\E[31m%s Error: %s %s\e[0m\n" "" "$*" "" ;}
export -f print_error
print_warning () { printf "\E[33m%s Warning: $@ %s\e[0m\n" ;}
print_warning () { printf "\E[33m%s Warning: %s %s\e[0m\n" "" "$*" "" ;}
export -f print_warning
print_info () { printf "\E[36m%s Info: $@ %s\e[0m\n" ;}
print_info () { printf "\E[36m%s Info: %s %s\e[0m\n" "" "$*" "" ;}
export -f print_info
print_ok () { printf "\E[35m%s OK: $@ %s\e[0m\n" ;}
print_ok () { printf "\E[35m%s OK: %s %s\e[0m\n" "" "$*" "" ;}
export -f print_ok
python_module () {
@@ -546,7 +546,7 @@ var_ld_library_path_update () {
# GUI NOTIFY SEND
pw_notify_send () {
local icon title body app timeout OPTIND
app="PortProtonQt"
app="ru.linux_gaming.PortProtonQt"
timeout="5000"
OPTIND="1"
while getopts a:i:t: opt ; do
@@ -819,146 +819,7 @@ search_desktop_file () {
fi
fi
done
while read -r -a line2 ; do
if [[ -z ${line2[0]} ]] \
|| [[ ! ${line2[0],,} =~ .(bat|cmd|exe|msi|reg)$ ]] ; then
BROKEN_LINE=1
break
fi
if [[ ${line2[1]} == "$FILE_SHA256SUM" ]] ; then
FILE_SHA256SUM_FOUND=1
break
fi
if [[ ${line2[1]} != "$FILE_SHA256SUM" ]] \
&& [[ ${line2[0]} == "${PW_EXE_FILE// /#@_@#}" ]] ; then
FILE_SHA256SUM_NOT_FOUND=1
break
fi
done < "$PORT_WINE_TMP_PATH/statistics"
local line3 line4 count_line i TIME_TOTAL SKIP_REPAIR
## Ремонты:
# Ремонт, проверяет чтобы длинна хеш суммы была равна 64 символам, в ином случае удалит битые
if [[ $FILE_SHA256SUM_NOT_FOUND == 1 ]] && [[ ${#line2[1]} != "64" ]] ; then
while read -r -a line3 ; do
if [[ ${#line3[1]} == "64" ]]
then echo "${line3[*]}"
fi
done < "$PORT_WINE_TMP_PATH/statistics" > "$PORT_WINE_TMP_PATH/statistics_repair"
try_remove_file "$PORT_WINE_TMP_PATH/statistics"
mv -f "$PORT_WINE_TMP_PATH/statistics_repair" "$PORT_WINE_TMP_PATH/statistics"
return 1
fi
# Ремонт, если есть пустые строки и непонятные строки без .exe, .bat, .cmd, .msi, .reg
if [[ $BROKEN_LINE == 1 ]] ; then
while read -r -a line4 ; do
if [[ -n ${line4[0]} ]] && [[ ${line4[0],,} =~ .(bat|cmd|exe|msi|reg)$ ]]
then echo "${line4[*]}"
fi
done < "$PORT_WINE_TMP_PATH/statistics" > "$PORT_WINE_TMP_PATH/statistics_repair"
try_remove_file "$PORT_WINE_TMP_PATH/statistics"
mv -f "$PORT_WINE_TMP_PATH/statistics_repair" "$PORT_WINE_TMP_PATH/statistics"
return 1
fi
# Ремонтирует путь на новый, если вдруг путь до .exe файла битый или изменился, но .exe файл он опознал
if [[ $FILE_SHA256SUM_FOUND == 1 ]] && [[ ${line2[0]} != "${PW_EXE_FILE// /#@_@#}" ]] ; then
sed -i "s|${line2[0]} ${line2[1]}|${PW_EXE_FILE// /#@_@#} ${line2[1]}|" "$PORT_WINE_TMP_PATH/statistics"
line2[0]=${PW_EXE_FILE// /#@_@#}
fi
# Ремонт, если sha256sum изменилась, но путь до .exe тот же
if [[ $FILE_SHA256SUM_NOT_FOUND == 1 ]] ; then
sed -i "s|${line2[0]} ${line2[1]}|${line2[0]} $FILE_SHA256SUM|" "$PORT_WINE_TMP_PATH/statistics"
line2[1]=$FILE_SHA256SUM
fi
# Когда приложения ещё нет в статистике
[[ -z ${line2[2]} ]] && line2[2]=0
# Ремонт, если сломалось время
if (( line2[2] >= 999999999 )) ; then
sed -i "s|${line2[1]} ${line2[2]}|${line2[1]} 0|" "$PORT_WINE_TMP_PATH/statistics"
line2[2]=0
fi
# Ремонт, если кто-то сломал время
if [[ ! ${line2[2]} =~ ^[0-9]+$ ]] ; then
sed -i "/${line2[1]}/d" "$PORT_WINE_TMP_PATH/statistics"
return 1
fi
###############################
# Общее проведённое время в секундах
export TIME_CURRENT=${line2[2]}
# количество запусков приложения
export COUNT_STARTS=${line2[4]//L4-/}
###############################
# Проверка новых десктоп файлов, чтобы их можно было сортировать первыми при первом создании в главном меню + ремонт
if [[ $PW_NEW_DESKTOP == 1 ]] && [[ ${line2[3]} != NEW_DESKTOP ]] ; then
if [[ $FILE_SHA256SUM_FOUND == 1 ]] ; then
sed -i "s|${line2[1]} \(.*\) ${line2[3]}|${line2[1]} \1 NEW_DESKTOP|" "$PORT_WINE_TMP_PATH/statistics"
else
echo "${PW_EXE_FILE// /#@_@#} $FILE_SHA256SUM $TIME_CURRENT NEW_DESKTOP" >> "$PORT_WINE_TMP_PATH/statistics"
fi
fi
unset PW_NEW_DESKTOP
# Когда приложение было запущено и завершено
if [[ -n $PW_TIME_IN_GAME ]] ; then
TIME_TOTAL=$(( TIME_CURRENT + PW_TIME_IN_GAME ))
if [[ $FILE_SHA256SUM_FOUND == 1 ]] ; then
# Когда есть предыдущее время
sed -i "s|$FILE_SHA256SUM $TIME_CURRENT|$FILE_SHA256SUM $TIME_TOTAL|" "$PORT_WINE_TMP_PATH/statistics"
else
# Когда только запустили приложение первый раз
echo "${PW_EXE_FILE// /#@_@#} $FILE_SHA256SUM $TIME_TOTAL OLD_DESKTOP" >> "$PORT_WINE_TMP_PATH/statistics"
fi
# Для ремонта если вдруг в линии ещё что-то есть
count_line=6
# Здесь добавляются новые линии для статистики (L4-) важен
if [[ -z ${line2[4]} ]] ; then
SKIP_REPAIR=1
sed -i "s|$FILE_SHA256SUM \(.*\)|$FILE_SHA256SUM \1 L4-1|" "$PORT_WINE_TMP_PATH/statistics"
else
# ремонт, если L4 по каким-то причинам сломался
if [[ ${line2[4]} =~ ^L4 ]] ; then
local NUMBER_OF_STARTS=$(( ${line2[4]//L4-/} + 1 ))
else
SKIP_REPAIR=1
sed -i "s|$FILE_SHA256SUM \(.*\) ${line2[4]}|$FILE_SHA256SUM \1 L4-1|" "$PORT_WINE_TMP_PATH/statistics"
fi
fi
if [[ $SKIP_REPAIR != 1 ]] ; then
# Ремонт, если количество элементов массива по каким-то причина больше, чем должно быть
if [[ -n ${line2["$count_line"]} ]] ; then
for i in $(seq $count_line ${#line2[@]}) ; do
unset 'line2[$i]'
done
sed -i "s|${PW_EXE_FILE// /#@_@#} $FILE_SHA256SUM \(.*\)|${line2[*]}|" "$PORT_WINE_TMP_PATH/statistics"
fi
# Для правильной работы L4
sed -i "s|$FILE_SHA256SUM \(.*\) ${line2[4]}|$FILE_SHA256SUM \1 L4-$NUMBER_OF_STARTS|" "$PORT_WINE_TMP_PATH/statistics"
fi
# Для правильной работы статистики по последнему запуску
if [[ $SORT_WITH_TIME == "lastlaunch" ]] ; then
LAST_LAUNCH=$(grep -o 'L5-[0-9]\+' "$PORT_WINE_TMP_PATH/statistics" | sed 's/L5-//' | sort -nr | head -1)
[[ -z $LAST_LAUNCH ]] && LAST_LAUNCH=0
LAST_LAUNCH=$(( LAST_LAUNCH + 1 ))
if [[ -z ${line2[5]} ]] ; then
sed -i "s|$FILE_SHA256SUM \(.*\)|$FILE_SHA256SUM \1 L5-$LAST_LAUNCH|" "$PORT_WINE_TMP_PATH/statistics"
else
sed -i "s|$FILE_SHA256SUM \(.*\) ${line2[5]}|$FILE_SHA256SUM \1 L5-$LAST_LAUNCH|" "$PORT_WINE_TMP_PATH/statistics"
fi
fi
fi
if [[ -n $PW_TIME_IN_GAME ]]
then return 2
else return 0
fi
return 0
}
create_name_desktop () {
@@ -1775,7 +1636,7 @@ pw_check_and_download_runtime () {
}
pw_check_and_download_dxvk_and_vkd3d () {
# Download DXVK versions
# Download DXVK
for DXVK_VAR_VER in "${DXVK_SAREK_VER}" "${DXVK_OLD_VER}" "${DXVK_NEW_VER}" ; do
if [[ ! -d "${PW_VULKAN_DIR}/dxvk-${DXVK_VAR_VER}" ]] ; then
print_info "Download and install DXVK v.${DXVK_VAR_VER}"
@@ -1805,7 +1666,7 @@ pw_check_and_download_dxvk_and_vkd3d () {
fi
done
# Download VKD3D versions
# Download VKD3D
for VKD3D_VAR_VER in "${VKD3D_SAREK_VER}" "${VKD3D_OLD_VER}" "${VKD3D_NEW_VER}" ; do
if [[ ! -d "${PW_VULKAN_DIR}/vkd3d-proton-${VKD3D_VAR_VER}" ]] ; then
print_info "Download and install VKD3D-PROTON v.${VKD3D_VAR_VER}"
@@ -1833,6 +1694,32 @@ pw_check_and_download_dxvk_and_vkd3d () {
fi
done
# Download D7VK
if [[ ! -d "${PW_VULKAN_DIR}/d7vk-${D7VK_VAR_VER}" ]] ; then
print_info "Download and install D7VK v.${D7VK_VAR_VER}"
if try_download "https://github.com/Castro-Fidel/vulkan/releases/download/d7vk-${D7VK_VAR_VER}/d7vk-${D7VK_VAR_VER}.tar.xz" \
"${PW_VULKAN_DIR}/d7vk-${D7VK_VAR_VER}.tar.xz" ; then
if unpack "${PW_VULKAN_DIR}/d7vk-${D7VK_VAR_VER}.tar.xz" "${PW_VULKAN_DIR}" ; then
try_remove_file "${PW_VULKAN_DIR}/d7vk-${D7VK_VAR_VER}.tar.xz"
else
try_remove_file "${PW_VULKAN_DIR}/d7vk-${D7VK_VAR_VER}.tar.xz"
try_remove_dir "${PW_VULKAN_DIR}/d7vk-${D7VK_VAR_VER}"
fatal "Failed to download and unpack D7VK"
fi
elif try_download "https://github.com/WinterSnowfall/d7vk/releases/download/${D7VK_VAR_VER}/D7VK-${D7VK_VAR_VER}.tar.zst" \
"${PW_VULKAN_DIR}/d7vk-${D7VK_VAR_VER}.tar.zst" no_mirror ; then
if unpack "${PW_VULKAN_DIR}/d7vk-${D7VK_VAR_VER}.tar.zst" "${PW_VULKAN_DIR}" ; then
try_remove_file "${PW_VULKAN_DIR}/d7vk-${D7VK_VAR_VER}.tar.zst"
else
try_remove_file "${PW_VULKAN_DIR}/d7vk-${D7VK_VAR_VER}.tar.zst"
try_remove_dir "${PW_VULKAN_DIR}/d7vk-${D7VK_VAR_VER}"
fatal "Failed to download and unpack D7VK"
fi
else
fatal "Failed to download and unpack D7VK"
fi
fi
return 0
}
@@ -3127,7 +3014,7 @@ start_portproton () {
elif [[ "$PW_USE_GAMEMODE" = "1" ]] \
&& [[ -n "$DBUS_SESSION_BUS_ADDRESS" ]]
then
if pw_is_process_active ananicy ananicy-cpp scx scx_loader falcond ; then
if pw_is_process_active ananicy ananicy-cpp scx scx_loader falcond sherrydmn ; then
export GAMEMODERUN=0
export PW_GAMEMODERUN_SLR=""
local current_power_profile
@@ -3217,7 +3104,6 @@ start_portproton () {
try_force_link_file "${PHYSX_PATH}/cudart64_65.dll" "${WINEPREFIX}/drive_c/windows/system32/cudart64_65.dll"
# 3D API
unset CP_VKD3D_FILES CP_DXVK_FILES CP_DGV2_FILES CP_WINE_FILES PATH_TO_DXVK_FILES PATH_TO_VKD3D_FILES CP_GALLIUM_NINE_FILES
case "${PW_VULKAN_USE}" in
0)
# WINED3D OPENGL
@@ -3338,7 +3224,10 @@ start_portproton () {
fi
# DGVOODOO2 enable:
if [[ "${PW_DGVOODOO2}" == "1" ]] && [[ "${PW_USE_SPECIALK}" != "1" ]] ; then
if [[ "${PW_DGVOODOO2}" == "1" ]] \
&& [[ "${PW_USE_SPECIALK}" != "1" ]] \
&& [[ "${PW_USE_D7VK}" != "1" ]] \
then
if [[ ! -f "${PW_VULKAN_DIR}/dgvoodoo2-${DGV2_VER}/dgVoodoo.conf" ]] ; then
print_info "Download and install DGVOODOO2 v.${DGV2_VER}"
if try_download "https://github.com/Castro-Fidel/vulkan/releases/download/dgvoodoo2-${DGV2_VER}/dgvoodoo2-${DGV2_VER}.tar.xz" \
@@ -3396,6 +3285,7 @@ start_portproton () {
try_force_link_file "${PATH_TO_DGV2_FILES}/x32/${wine_dgv2_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/${wine_dgv2_dll}.dll"
var_winedlloverride_update "${wine_dgv2_dll}=n"
done
# DGVOODOO2 settings:
if [[ "${PW_DGV2_USE_DX12}" == "1" ]] ; then
if [[ "${PW_VULKAN_USE}" =~ ^(1|2|6)$ ]]
@@ -3556,7 +3446,6 @@ start_portproton () {
for rm_dgv2_dll in d3dimm glide glide2x glide3x ; do
try_remove_file "${WINEPREFIX}/drive_c/windows/syswow64/${rm_dgv2_dll}.dll"
done
add_to_var CP_WINE_FILES "ddraw"
fi
# force use dxgi.dll from wine
@@ -3571,6 +3460,18 @@ start_portproton () {
try_force_link_file "${WINEDIR}/lib/wine/i386-windows/${copy_wine_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/${copy_wine_dll}.dll"
done
if [[ "${PW_USE_D7VK}" == "1" ]] ; then
PATH_TO_D7VK_FILES="${PW_VULKAN_DIR}/d7vk-${D7VK_VAR_VER}"
print_info "D7VK ${D7VK_VAR_VER} in use"
print_info "Try create symlink D7VK files..."
try_force_link_file "${WINEDIR}/lib/wine/i386-windows/ddraw.dll" "${WINEPREFIX}/drive_c/windows/syswow64/ddraw_.dll"
try_force_link_file "${PATH_TO_D7VK_FILES}/x32/ddraw.dll" "${WINEPREFIX}/drive_c/windows/syswow64/ddraw.dll"
var_winedlloverride_update "ddraw=n,b"
else
try_force_link_file "${WINEDIR}/lib/wine/i386-windows/ddraw.dll" "${WINEPREFIX}/drive_c/windows/syswow64/ddraw.dll"
try_remove_file "${WINEPREFIX}/drive_c/windows/syswow64/ddraw_.dll"
fi
if [[ -n "$CP_DXVK_FILES" ]] ; then
print_info "Try create symlink DXVK files..."
for wine_dxvk_dll in $CP_DXVK_FILES ; do
@@ -3641,8 +3542,7 @@ start_portproton () {
check_variables VKD3D_SHADER_CACHE_PATH "${PATH_TO_VKD3D_FILES}/vkd3d_cache"
fi
# некоторым играм для любых 3D api для правильной работы wined3d необходимо чтобы эти библиотеки всегда были
PATH_TO_VKD3D_FILES="${PW_VULKAN_DIR}/vkd3d-proton-${VKD3D_NEW_VER}" # используется git версия
PATH_TO_VKD3D_FILES="${PW_VULKAN_DIR}/vkd3d-proton-${VKD3D_NEW_VER}"
try_force_link_file "${PATH_TO_VKD3D_FILES}/x86/libvkd3d-1.dll" "${WINEPREFIX}/drive_c/windows/syswow64/libvkd3d-1.dll"
try_force_link_file "${PATH_TO_VKD3D_FILES}/x86/libvkd3d-shader-1.dll" "${WINEPREFIX}/drive_c/windows/syswow64/libvkd3d-shader-1.dll"
try_force_link_file "${PATH_TO_VKD3D_FILES}/x64/libvkd3d-1.dll" "${WINEPREFIX}/drive_c/windows/system32/libvkd3d-1.dll"
@@ -3854,6 +3754,10 @@ start_portproton () {
*) get_and_set_reg_file --delete 'Software\Wine\Drivers' 'Audio' ;;
esac
if [[ -n "${PW_NETWORK_BLOCKLIST:-}" ]] ; then
export PW_LD_PRELOAD="${PW_LD_PRELOAD:+${PW_LD_PRELOAD}:}libppqt-network-filter.so"
fi
add_in_start_portproton
if [[ "$FULL_LN" == russian ]] ; then
@@ -3929,7 +3833,7 @@ pw_run () {
PW_LD_LIBRARY_PATH="${PW_LD_LIBRARY_PATH}:${WINE_LIBRARY_PATH}"
echo "##### Current variables #####" > "$PW_TMPFS_PATH/var.log"
env | grep -E '^(DXVK_|VKD3D_|WINE|PATH|PW_)' \
env | grep -E '^(DXVK_|VKD3D_|D7VK_|WINE|PATH|PW_)' \
| grep -vE '^PW_GENERATE_' \
| tee -a "$PW_TMPFS_PATH/var.log"
@@ -4238,20 +4142,37 @@ portwine_launch () {
&& [[ "${PW_EXE_FILE,,}" =~ \.exe$ ]]
then
local wait_delay wait_delay_int run_after_bat
local run_after_dir run_after_name
local pw_exe_file_win
local wine_drive_c
wait_delay="${PW_RUN_AFTER_DELAY:-3}"
wait_delay_int="${wait_delay%%.*}"
[[ "${wait_delay_int}" =~ ^[0-9]+$ ]] || wait_delay_int="3"
run_after_bat="${PW_TMPFS_PATH}/pw_run_after_exe_${PW_PREFIX_NAME:-DEFAULT}_$$.bat"
wine_drive_c="${WINEPREFIX}/drive_c"
run_after_dir="$(dirname "${PW_EXE_FILE}")"
run_after_name="pw_run_after_exe_${PW_PREFIX_NAME:-DEFAULT}_$$.bat"
run_after_bat="${run_after_dir}/${run_after_name}"
pw_exe_file_win="$("${WINELOADER}" winepath -w "${PW_EXE_FILE}" 2>/dev/null | tr -d '\r')"
if [[ -n "${pw_exe_file_win}" ]] ; then
:
elif [[ "${run_after_bat}" == "${wine_drive_c}/"* ]] ; then
pw_exe_file_win="c:\\${PW_EXE_FILE#"${wine_drive_c}/"}"
else
pw_exe_file_win="z:${PW_EXE_FILE//\//\\}"
fi
pw_exe_file_win="${pw_exe_file_win//\//\\}"
cat > "${run_after_bat}" <<EOF
@echo off
start "" "z:${PW_EXE_FILE}"
chcp 65001 >nul
start "" "${pw_exe_file_win}" ${LAUNCH_PARAMETERS}
timeout /t ${wait_delay_int} /nobreak
start "" "z:${PW_RUN_AFTER_EXE}"
start "" /unix "${PW_RUN_AFTER_EXE}"
EOF
pw_run "${PW_VD_TMP[@]}" cmd /c "z:${run_after_bat}"
LAUNCH_PARAMETERS="" proxy_launch_parameters="" \
pw_run "${PW_VD_TMP[@]}" "${run_after_bat}"
try_remove_file "${run_after_bat}"
else
case "${PW_EXE_FILE,,}" in
@@ -4296,7 +4217,7 @@ gui_proton_downloader () {
return 0
fi
METADATA_URL="https://git.linux-gaming.ru/Boria138/PortProton-Wine-Metadata/raw/branch/main/wine_metadata.json"
METADATA_URL="https://git.linux-gaming.ru/Boria138/PortProton-Wine-Metadata/raw/branch/main/wine_metadata_all.json"
METADATA=$(curl -A 'PortProton' -s "$METADATA_URL")
if [[ -z "$METADATA" ]] ; then
fatal "failed to fetch metadata"
@@ -4305,11 +4226,8 @@ gui_proton_downloader () {
pw_download_get_wine () {
local URL_VERSION_PROTON_GIT
local VERSION="$1"
local ALL_CATEGORIES=$(echo "$METADATA" | jq -r 'keys[]' 2>/dev/null)
print_info "Download and install ${VERSION}..."
URL_VERSION_PROTON_GIT=$(echo "$METADATA" | jq -r --arg version "$VERSION" '
to_entries[] | .value[]? | select((.name | ascii_downcase) == ($version | ascii_downcase)) | .url
' 2>/dev/null | head -n 1)
URL_VERSION_PROTON_GIT=$(python_module json_tools wine-url "$VERSION" <<< "$METADATA" 2>/dev/null)
if [[ -z "$URL_VERSION_PROTON_GIT" ]]; then
fatal "no URL found for version ${VERSION}"
fi
@@ -4733,66 +4651,92 @@ resize_png () {
try_remove_file "${PORT_DATA_PATH}/data/img/launcher.png"
try_remove_file "${PORT_DATA_PATH}/data/img/Launcher.png"
python3 -m portprotonqt.scripts_utils.shortcut_tools thumbnail \
python_module shortcut_tools thumbnail \
"$(readlink -f "${RESIZE_FILE}")" \
"${PORT_DATA_PATH}/data/img/${RESIZE_NAME_PNG}.png"
}
portwine_create_shortcut () {
if [[ ! -e $PW_EXE_FILE ]]
then return 1
elif [[ $(basename "$PW_EXE_FILE") =~ (unins0|uninstall|remove) ]]
if [[ ! -e "$PW_EXE_FILE" ]]; then
lnk_dir="$(dirname "$PW_EXE_FILE")"
lnk_name_part="$(basename "$PW_EXE_FILE")"
if [[ -d "$lnk_dir" ]]; then
actual_file="$(ls -1 "$lnk_dir/" 2>/dev/null | grep -F -i -x -- "$lnk_name_part" | head -1)"
if [[ -n "$actual_file" ]]; then
PW_EXE_FILE="$(realpath "$lnk_dir/$actual_file" 2>/dev/null)"
export PW_EXE_FILE
fi
fi
if [[ ! -e "$PW_EXE_FILE" ]]; then
return 1
fi
fi
if [[ $(basename "$PW_EXE_FILE") =~ (unins0|uninstall|remove) ]]
then return 0
fi
pw_create_gui_png
check_variables PW_SHORTCUT_MENU "FALSE"
check_variables PW_SHORTCUT_DESKTOP "FALSE"
unset name_desktop
create_name_desktop
export name_desktop="$PW_NAME_DESKTOP_PROXY"
portwine_output_yad_shortcut
}
pw_download_autoinstall_ppdb () {
[[ -z "${PW_PPDB_FILE:-}" ]] && return 0
[[ -z "${PW_EXE_FILE:-}" ]] && return 0
[[ ! -e "${PW_EXE_FILE}" ]] && return 0
local ppdb_path="${PW_EXE_FILE}.ppdb"
local tmp_ppdb_path="${ppdb_path}.tmp"
print_info "Download PPDB file for $(basename "${PW_EXE_FILE}")..."
if try_download "${PW_PPDB_FILE}" "${tmp_ppdb_path}" no_mirror ; then
mv -f "${tmp_ppdb_path}" "${ppdb_path}"
return 0
fi
try_remove_file "${tmp_ppdb_path}"
print_warning "Failed to download PPDB file for $(basename "${PW_EXE_FILE}")"
return 0
}
portwine_output_yad_shortcut () {
[[ ! -e "${PW_EXE_FILE}" ]] && return 1
if [[ ! -e "${PW_EXE_FILE}" ]]; then
lnk_dir="$(dirname "${PW_EXE_FILE}")"
lnk_name_part="$(basename "${PW_EXE_FILE}")"
if [[ -d "${lnk_dir}" ]]; then
actual_file="$(ls -1 "${lnk_dir}/" 2>/dev/null | grep -F -i -x -- "${lnk_name_part}" | head -1)"
if [[ -n "${actual_file}" ]]; then
PW_EXE_FILE="$(realpath "${lnk_dir}/${actual_file}" 2>/dev/null)"
export PW_EXE_FILE
fi
fi
[[ ! -e "${PW_EXE_FILE}" ]] && return 1
fi
pw_download_autoinstall_ppdb
if [[ "${PW_FIND_PPDB:-}" == "1" ]] \
&& [[ -z "${PW_PPDB_FILE:-}" ]]
then
python_module shortcut_tools find-ppdb "${PW_EXE_FILE}"
fi
pw_create_gui_png
unset name_desktop
check_variables PW_SHORTCUT_MENU "FALSE"
check_variables PW_SHORTCUT_DESKTOP "FALSE"
if [[ -z $name_desktop ]] ; then
create_name_desktop
export name_desktop="$PW_NAME_DESKTOP_PROXY"
fi
if ! python3 -m portprotonqt.scripts_utils.shortcut_tools shortcut \
if ! python_module shortcut_tools shortcut \
"${PW_EXE_FILE}" \
"${name_desktop}"
then
return 1
fi
if [[ "${PW_SHORTCUT_MENU}" == "TRUE" ]] ; then
try_remove_file "${HOME}/.local/share/applications/${name_desktop}.desktop"
cp -f "${PORT_DATA_PATH}/${name_desktop}.desktop" "${HOME}/.local/share/applications/"
fi
if [[ "${PW_SHORTCUT_DESKTOP}" == "TRUE" ]] ; then
if [[ -d "${HOME}/Desktop" ]] ; then
cp -f "${PORT_DATA_PATH}/${name_desktop}.desktop" "${HOME}/Desktop/"
elif [[ -d "${HOME}/Рабочий стол" ]] ; then
cp -f "${PORT_DATA_PATH}/${name_desktop}.desktop" "${HOME}/Рабочий стол/"
elif [[ $(xdg-user-dir DESKTOP) ]] ; then
cp -f "${PORT_DATA_PATH}/${name_desktop}.desktop" "$(xdg-user-dir DESKTOP)"
fi
fi
export PW_NEW_DESKTOP="1"
if [[ "$PW_NO_RESTART_PPDB" != "1" ]] \
|| [[ -z ${LINKS[0]} ]]
then
@@ -4830,14 +4774,18 @@ pw_auto_create_shortcut () {
if [[ "${PW_EXE_FILE}" =~ EpicGamesLauncher.exe$ ]]; then
for item_file in "${PORT_DATA_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c/ProgramData/Epic/EpicGamesLauncher/Data/Manifests/"*".item"; do
if [[ -f "${item_file}" ]]; then
exe_path=$(jq -r '.InstallLocation + "\\" + .LaunchExecutable' "${item_file}")
IFS=$'\t' read -r exe_path PORTWINE_CREATE_SHORTCUT_NAME item_id < <(
python_module json_tools epic-manifest "${item_file}" 2>/dev/null
)
if [[ -z "${exe_path}" ]]; then
print_warning "Failed to parse Epic manifest: ${item_file}"
continue
fi
get_lnk_path "${exe_path}"
PORTWINE_CREATE_SHORTCUT_NAME=$(jq -r '.DisplayName' "${item_file}")
if ! exe_path="$(realpath "${link_path}" 2>/dev/null)" || [[ ! -f "${exe_path}" ]]; then
print_warning "Link broken for: ${PORTWINE_CREATE_SHORTCUT_NAME}"
elif [[ ! -f "${exe_path}.ppdb" ]]; then
unset FILE_SHA256SUM DESKTOP_NAME_FILE DESKTOP_CORRECT_FILE
item_id=$(jq -r '.AppName' "${item_file}")
PW_EXE_FILE="${exe_path}"
PORTWINE_DB_FILE="${PW_EXE_FILE}.ppdb"
LAUNCH_URI="com.epicgames.launcher://apps/${item_id}?action=launch&silent=true"
@@ -4876,15 +4824,54 @@ pw_auto_create_shortcut () {
elif exe_path="$(realpath "${link_path//\/Games\//\/GAMES\//}" 2>/dev/null)" ; then
export PW_EXE_FILE="$exe_path"
else
print_warning "Link broken for: $link_name"
continue
lnk_dir="$(dirname "${link_path}")"
lnk_name_part="$(basename "${link_path}")"
actual_file="$(ls -1 "${lnk_dir}/" 2>/dev/null | grep -F -i -x -- "${lnk_name_part}" | head -1)"
if [[ -n "${actual_file}" ]] && exe_path="$(realpath "${lnk_dir}/${actual_file}" 2>/dev/null)" ; then
export PW_EXE_FILE="$exe_path"
else
print_warning "Link broken for: $link_name"
continue
fi
fi
print_info "Created link for: $link_name"
PORTPROTON_NAME="$link_name"
PORTWINE_CREATE_SHORTCUT_NAME="$link_name"
resize_png "$PW_EXE_FILE" "${PORTPROTON_NAME}"
export PW_NO_RESTART_PPDB=1
unset name_desktop_png
portwine_create_shortcut
if [[ -n "${link_cmd:-}" ]] && [[ -n "${PW_EXE_FILE:-}" ]]; then
local ppdb_path ppdb_dir ppdb_name actual_ppdb lnk_launch_parameters old_launch_parameters portwine_db_name
ppdb_path="${PW_EXE_FILE}.ppdb"
ppdb_dir="$(dirname "${ppdb_path}")"
ppdb_name="$(basename "${ppdb_path}")"
if [[ ! -f "${ppdb_path}" ]] && [[ -d "${ppdb_dir}" ]]; then
actual_ppdb="$(ls -1 "${ppdb_dir}/" 2>/dev/null | grep -F -i -x -- "${ppdb_name}" | head -1)"
[[ -n "${actual_ppdb}" ]] && ppdb_path="${ppdb_dir}/${actual_ppdb}"
fi
if [[ ! -f "${ppdb_path}" ]]; then
portwine_db_name="$(basename "${PW_EXE_FILE%.[Ee][Xx][Ee]}")"
{
echo "#!/usr/bin/env bash"
echo "#Author: ${USER}"
echo "#${portwine_db_name}.exe"
echo "#Rating=1-5"
} > "${ppdb_path}" 2>/dev/null
fi
if [[ -w "${ppdb_path}" ]]; then
lnk_launch_parameters="${link_cmd}"
lnk_launch_parameters="${lnk_launch_parameters//\"/}"
lnk_launch_parameters="${lnk_launch_parameters//\\/\/}"
old_launch_parameters="$(sed -n 's/^export LAUNCH_PARAMETERS="\([^"]*\)".*/\1/p' "${ppdb_path}" | head -1)"
if [[ -n "${old_launch_parameters}" ]]; then
lnk_launch_parameters="${old_launch_parameters} ${lnk_launch_parameters}"
fi
sed -i '/^export LAUNCH_PARAMETERS=/d' "${ppdb_path}"
printf '%s\n' "export LAUNCH_PARAMETERS=\"${lnk_launch_parameters}\"" >> "${ppdb_path}"
fi
fi
unset PORTWINE_CREATE_SHORTCUT_NAME
done
}
export -f pw_auto_create_shortcut
@@ -1,24 +0,0 @@
#!/usr/bin/env bash
# Author: chal55rus
# type: games
# name: Age of Empires Online
# image: celeste
# info_en: A multiplayer real-time strategy game where players build their civilizations, gather resources, and battle against opponents. The game features a unique economic system and the ability to develop cities through various missions and quests.
# info_ru: Многопользовательская стратегия в реальном времени, где игроки строят свои цивилизации, собирают ресурсы и сражаются с противниками. Игра предлагает уникальную экономическую систему и возможность развивать свои города с помощью различных миссий и задач.
########################################################################
export PW_PREFIX_NAME="AGE_OF_EMPIRES_ONLINE"
export LAUNCH_PARAMETERS="/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/Celeste.Installer.exe"
export PORTWINE_CREATE_SHORTCUT_NAME="Age of Empires Online"
start_portproton
if try_download "https://github.com/ProjectCeleste/Celeste.Launcher/releases/latest/download/Celeste.Installer.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
then
pw_run "${PW_AUTOINSTALL_EXE}"
PW_EXE_FILE="$WINEPREFIX/drive_c/users/steamuser/AppData/Roaming/ProjectCeleste/Celeste Launcher.exe"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
portwine_create_shortcut
fi
stop_portproton
@@ -1,24 +0,0 @@
#!/usr/bin/env bash
# Author: chal55rus
# type: games
# name: Albion Online
# image: albiononline
# info_en: A multiplayer sandbox MMORPG where players can explore an open world, engage in crafting, gather resources, and battle against other players. The game features a unique class system that allows players to change their roles based on the gear they equip.
# info_ru: Многопользовательская песочница в жанре MMORPG, где игроки могут исследовать открытый мир, заниматься ремеслом, добычей ресурсов и сражаться с другими игроками. Игра предлагает уникальную систему классов, позволяющую игрокам изменять свои роли в зависимости от выбранного снаряжения.
########################################################################
export PW_PREFIX_NAME="ALBION_ONLINE"
export LAUNCH_PARAMETERS="/S"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/albion-online-setup.exe"
export PORTWINE_CREATE_SHORTCUT_NAME="Albion Online"
start_portproton
if try_download "https://live.albiononline.com/clients/20260311101310/albion-online-setup.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
then
pw_run "${PW_AUTOINSTALL_EXE}"
PW_EXE_FILE="$WINEPREFIX/drive_c/Program Files (x86)/AlbionOnline/launcher/AlbionLauncher.exe"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
portwine_create_shortcut
fi
stop_portproton
@@ -1,26 +0,0 @@
#!/usr/bin/env bash
# author: chal55rus (Sergey P.)
# type: games
# name: Ankama Launcher
# image: ankama
# info_en: Launcher for Ankama studio games.
# info_ru: Лаунчер для игр Ankama.
########################################################################
export LAUNCH_PARAMETERS="/S"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/Ankama-Setup.exe"
export PW_WINE_USE="WINE_LG"
export PW_PREFIX_NAME="ANKAMA"
start_portproton
if try_download "https://download.ankama.com/launcher/full/win/" "${PW_AUTOINSTALL_EXE}" no_mirror
then
get_and_set_reg_file --add 'Software\Wine\X11 Driver' 'Decorated' 'REG_SZ' "N" "user"
pw_run "${PW_AUTOINSTALL_EXE}"
PW_EXE_FILE="$WINEPREFIX/drive_c/users/steamuser/AppData/Local/Programs/Ankama Launcher/Ankama Launcher.exe"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
export PORTWINE_CREATE_SHORTCUT_NAME="Ankama Launcher"
portwine_create_shortcut
fi
stop_portproton
@@ -1,26 +0,0 @@
#!/usr/bin/env bash
# Author: chal55rus
# type: games
# name: Anomaly Zone
# image: anomalyzone
# info_en: An action game about stalkers, where players explore mysterious worlds and fight against a variety of opponents. The game offers an exciting storyline and the opportunity to improve the character by unlocking new abilities and equipment.
# info_ru: Экшен-игра про сталкеров, где игроки исследуют таинственные миры и сражаются с разнообразными противниками. Игра предлагает захватывающий сюжет и возможность улучшать персонажа, открывая новые способности и снаряжение.
########################################################################
export PW_PREFIX_NAME="ANOMALY_ZONE"
export LAUNCH_PARAMETERS="/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/az_webinst.exe"
export PORTWINE_CREATE_SHORTCUT_NAME="Anomaly Zone"
start_portproton
if try_download "https://anomaly-zone.ru/file/az_webinst.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
then
pw_kill_autostart Launcher.exe &
pw_run "${PW_AUTOINSTALL_EXE}"
PW_EXE_FILE="$WINEPREFIX/drive_c/Program Files/New Story Games/Anomaly-Zone/Launcher.exe"
pw_create_unique_exe
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
portwine_create_shortcut
fi
stop_portproton
@@ -1,26 +0,0 @@
#!/usr/bin/env bash
# Author: chal55rus
# type: games
# name: Arizona Games Launcher
# image: arizonagameslauncher
# info_en: Launcher for the Arizona Role Play game.
# info_ru: Лаунчер для игры Arizona Role Play.
########################################################################
export PW_PREFIX_NAME="ARIZONA_GAMES_LAUNCHER"
export LAUNCH_PARAMETERS="/S"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/Arizona Installer.exe"
export PORTWINE_CREATE_SHORTCUT_NAME="Arizona Games Launcher"
export PW_VULKAN_USE="0"
start_portproton
if try_download "https://pc.az-ins.com/Arizona%20Launcher.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
then
pw_kill_autostart "Arizona Games" &
pw_run "${PW_AUTOINSTALL_EXE}"
PW_EXE_FILE="$WINEPREFIX/drive_c/users/steamuser/AppData/Local/Programs/Arizona Games Launcher/Arizona Games Launcher.exe"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
portwine_create_shortcut
fi
stop_portproton
@@ -1,26 +0,0 @@
#!/usr/bin/env bash
# Author: Castro-Fidel (linux-gaming.ru)
# type: games
# name: Battle.net Launcher
# image: battle_net
# info_en: Launcher for Activision and Blizzard studio games.
# info_ru: Лаунчер для игр Activision и Blizzard.
########################################################################
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/Battle.net-Setup.exe"
export PW_WINE_USE="PROTON_LG"
export WINEDLLOVERRIDES="locationapi="
export PW_PREFIX_NAME="BATTLE_NET"
export WINE_SIMULATE_WRITECOPY="1"
start_portproton
if try_download "https://battle.net/download/getInstallerForGame?os=win&version=LIVE&gameProgram=BATTLENET_APP" "${PW_AUTOINSTALL_EXE}" no_mirror
then
try_remove_dir "$WINEPREFIX/drive_c/ProgramData/Battle.net"
pw_kill_autostart Battle.net.exe &
pw_run "${PW_AUTOINSTALL_EXE}"
PW_EXE_FILE="$(find "$WINEPREFIX/drive_c/" -type f -name "Battle.net.exe" | grep "Battle.net/Battle.net.exe")"
portwine_create_shortcut
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
fi
stop_portproton
@@ -1,29 +0,0 @@
#!/usr/bin/env bash
# Author: Castro-Fidel (linux-gaming.ru)
# type: games
# name: Black Desert Online (RU)
# image: bdo
# info_en: A massively multiplayer online role-playing game set in an open world, renowned for its stunning graphics and deep character customization system. Players can explore vast lands, complete quests, engage in PvP battles, and participate in various crafting activities.
# info_ru: Многопользовательская ролевая игра с открытым миром, известная своей потрясающей графикой и глубокой системой кастомизации персонажей. Игроки могут исследовать обширные земли, выполнять задания, участвовать в PvP-сражениях и заниматься различными ремеслами.
########################################################################
export PW_PREFIX_NAME="DOTNET"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/BlackDesert_Installer_RU.exe"
export LAUNCH_PARAMETERS="/silent"
export PW_USE_D3D_EXTRAS="1"
export PW_WINE_USE="PROTON_LG"
pw_clear_pfx
start_portproton
wait_wineserver
if try_download "https://nez-o-dn.playblackdesert.com/UploadData/installer/BlackDesert_Installer_RU.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
then
pw_run "${PW_AUTOINSTALL_EXE}"
PW_EXE_FILE="$WINEPREFIX/drive_c/Pearlabyss/BlackDesert/BlackDesertLauncher.exe"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
export PORTWINE_CREATE_SHORTCUT_NAME="Black Desert Online"
portwine_create_shortcut
fi
stop_portproton
@@ -1,26 +0,0 @@
#!/usr/bin/env bash
# Author: chal55rus (Sergey P.)
# type: games
# name: Blood and Soul
# image: bloodandsoul
# info_en: A multiplayer role-playing game featuring a rich combat system and vibrant graphics, inspired by Eastern mythology. Players can choose from various classes, explore unique locations, and battle powerful foes.
# info_ru: Многопользовательская ролевая игра с богатой системой боя и яркой графикой, вдохновленная восточной мифологией. Игроки могут выбирать из различных классов, исследовать уникальные локации и сражаться с могущественными врагами.
########################################################################
export PW_PREFIX_NAME="BLOOD_AND_SOUL"
export LAUNCH_PARAMETERS="/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/bs-install.exe"
export PORTWINE_CREATE_SHORTCUT_NAME="Blood and Soul"
start_portproton
if try_download "https://bsclassic.com/files/bs-install.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
then
pw_run "${PW_AUTOINSTALL_EXE}"
PW_EXE_FILE="$WINEPREFIX/drive_c/Program Files (x86)/Blood and Soul Classic/launcher.exe"
pw_create_unique_exe
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
portwine_create_shortcut
fi
stop_portproton
@@ -1,25 +0,0 @@
#!/usr/bin/env bash
# Author: chal55rus
# type: games
# name: Broken Ranks (ENG)
# image: brokenranks
# info_en: An MMORPG game offering deep sleep and a unique combat system that focuses on the strategy and activities of the person. Players explore a dark world full of intrigue and danger, developing their characters and making key decisions that affect the course of history.
# info_ru: MMORPG игра, предлагающая глубокий сон и уникальную боевую систему, которая ориентирует внимание на стратегию и деятельность персоны. Игроки исследуют мрачный мир, полный интриг и опасностей, развивая своих героев и принимая ключевые решения, влияющие на ход истории.
########################################################################
export PW_PREFIX_NAME="BROKEN_RANKS"
export LAUNCH_PARAMETERS="/q"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/BrokenRanksInstaller.exe"
export PORTWINE_CREATE_SHORTCUT_NAME="Broken Ranks"
start_portproton
if try_download "https://eu.brokenranks.com/BrokenRanksInstaller.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
then
pw_kill_autostart ConsoleLauncher.exe &
pw_run "${PW_AUTOINSTALL_EXE}"
PW_EXE_FILE="$WINEPREFIX/drive_c/Whitemoon/BrokenRanks/ConsoleLauncher.exe"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
portwine_create_shortcut
fi
stop_portproton
@@ -1,28 +0,0 @@
#!/usr/bin/env bash
# Author: chal55rus
# type: games
# name: CALIBER
# image: caliber
# info_en: A tactical third-person shooter where players can choose from various characters with unique abilities and engage in team-based modes. The game features realistic graphics and dynamic combat, providing an engaging gameplay experience.
# info_ru: Тактический шутер от третьего лица, где игроки могут выбирать из различных персонажей с уникальными способностями и сражаться в командных режимах. Игра предлагает реалистичную графику и динамичные бои, обеспечивая увлекательный игровой процесс.
########################################################################
export PW_PREFIX_NAME="CALIBER"
export LAUNCH_PARAMETERS="/VERYSILENT /CLOSEAPPLICATIONS"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/CaliberSetup.exe"
export PW_WINE_USE="PROTON_LG"
# export DISABLE_CP_DEFPFX="1"
export PORTWINE_CREATE_SHORTCUT_NAME="CALIBER"
start_portproton
if try_download "https://cdn.playcaliber.com/caliber-s3/p1/a88c3b70f76a0e56b1e08b62c9895cfe/launcher/setup/CaliberSetup.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
then
pw_kill_autostart VC_redist.x64.exe 3 &
pw_run "${PW_AUTOINSTALL_EXE}"
PW_EXE_FILE="$WINEPREFIX/drive_c/Program Files (x86)/1C Game Studios/Caliber/Launcher.exe"
pw_create_unique_exe "caliber_launcher_pp"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
portwine_create_shortcut
fi
stop_portproton
@@ -1,24 +0,0 @@
#!/usr/bin/env bash
# Author: chal55rus
# type: games
# name: Chicken Invaders Universe
# image: chickeninvadersuniverse
# info_en: An exciting arcade game where players battle aggressive space chickens to defend their planet. The game features multiple levels, a cooperative mode, and the ability to upgrade their spaceship.
# info_ru: Захватывающая аркадная игра, в которой игроки сражаются с агрессивными курицами из космоса, защищая свою планету. Игра предлагает множество уровней, кооперативный режим и возможность улучшения космического корабля.
########################################################################
export PW_PREFIX_NAME="CHICKEN_INVADERS_UNIVERSE"
export LAUNCH_PARAMETERS="/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/ChickenInvadersUniverseInstaller.exe"
export PORTWINE_CREATE_SHORTCUT_NAME="Chicken Invaders Universe"
start_portproton
if try_download "https://universe.chickeninvaders.com/files/ChickenInvadersUniverseInstaller.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
then
pw_run "${PW_AUTOINSTALL_EXE}"
PW_EXE_FILE="$WINEPREFIX/drive_c/Program Files (x86)/ChickenInvadersUniverse/CIU.exe"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
portwine_create_shortcut
fi
stop_portproton
@@ -1,25 +0,0 @@
#!/usr/bin/env bash
# Author: chal55rus
# type: games
# name: CONTRACT WARS
# image: cwc
# info_en: A multiplayer first-person shooter where players engage in battles between two teams on various maps. The game offers a wide selection of weapons and character customization options, making each match unique.
# info_ru: Многопользовательский шутер от первого лица, где игроки участвуют в противостоянии между двумя командами на разнообразных картах. Игра предлагает широкий выбор оружия и возможностей для настройки персонажей, что делает каждый матч уникальным.
########################################################################
export LAUNCH_PARAMETERS="/VERYSILENT"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/CWClient_Install.exe"
export PW_PREFIX_NAME="CONTRACT_WARS"
export PW_WINE_USE="WINE_LG"
start_portproton
if try_download "https://cdn-01.contractwarsgame.com/standalone/CWClient_Install.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
then
pw_run "${PW_AUTOINSTALL_EXE}"
PW_EXE_FILE="$WINEPREFIX/drive_c/Games/CWClient/CWClientLauncher.exe"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
export PORTWINE_CREATE_SHORTCUT_NAME="CONTRACT WARS"
portwine_create_shortcut
fi
stop_portproton
@@ -1,28 +0,0 @@
#!/usr/bin/env bash
# Author: Castro Fidel
# type: games
# name: Crossout
# image: crossout
# info_en: A multiplayer game featuring post-apocalyptic vehicle combat, where players build unique battle machines and fight against each other on open arenas. The game offers various battle modes and a rich customization system, allowing each player to express their individuality on the battlefield.
# info_ru: Многопользовательская игра с элементами постапокалиптического десанта, где игроки создают уникальные боевые машины и сражаются друг с другом на открытых аренах. Игра предлагает разнообразные режимы боя и богатую систему кастомизации, позволяя каждому выражать свою индивидуальность на поле боя.
########################################################################
export LAUNCH_PARAMETERS="/VERYSILENT"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/crossout.exe"
export PORTWINE_CREATE_SHORTCUT_NAME="Crossout"
export PW_PREFIX_NAME="CROSSOUT"
export PW_WINE_USE="WINE_LG"
start_portproton
if try_download "https://yupmaster.gaijinent.com/launcher/current.php?id=CrossoutLauncher" "${PW_AUTOINSTALL_EXE}" no_mirror
then
get_and_set_reg_file --add 'Software\Wine\X11 Driver' 'Decorated' 'REG_SZ' "N" "user"
pw_kill_autostart launcher.exe 3 &
pw_run "${PW_AUTOINSTALL_EXE}"
PW_EXE_FILE="${WINEPREFIX}/drive_c/users/$USER/AppData/Local/Crossout Launcher/launcher.exe"
pw_create_unique_exe "crossout_launcher_pp"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
portwine_create_shortcut
fi
stop_portproton
@@ -1,23 +0,0 @@
#!/usr/bin/env bash
# Author: chal55rus
# type: games
# name: DC Universe Online (ENG)
# image: dcuniverseonline
# info_en: An MMORPG where players create their own superheroes or supervillains in the DC Comics universe and engage in epic battles alongside iconic characters like Superman and Batman. The game features extensive quests, exciting PvP modes, and the ability to team up with other players.
# info_ru: MMORPG, в которой игроки создают собственных супергероев или суперзлодеев во вселенной DC Comics и участвуют в эпических битвах с известными персонажами, такими как Супермен и Бэтмен. Игра предлагает обширные квесты, захватывающие PvP-режимы и возможность совместной игры с другими игроками.
########################################################################
export PW_PREFIX_NAME="DC_UNIVERSE_ONLINE"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/DCUO_setup.exe"
export PORTWINE_CREATE_SHORTCUT_NAME="DC Universe Online"
start_portproton
if try_download "https://launch.daybreakgames.com/installer/DCUO_setup.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
then
unpack "${PW_AUTOINSTALL_EXE}" "$WINEPREFIX/drive_c/Program Files (x86)/Daybreak Game Company"
PW_EXE_FILE="$WINEPREFIX/drive_c/Program Files (x86)/Daybreak Game Company/LaunchPad.exe"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
portwine_create_shortcut
fi
stop_portproton
@@ -1,28 +0,0 @@
#!/usr/bin/env bash
# Author: chal55rus
# type: games
# name: Doomsday
# image: doomsday
# info_en: A real-time strategy game where players manage a group of survivors in a post-apocalyptic world, aiming to rebuild civilization and defend against various threats. The game features base-building elements, tactical combat, and a deep narrative experience.
# info_ru: Стратегическая игра в реальном времени, где игроки управляют отрядом выживших в постапокалиптическом мире, стремясь восстановить цивилизацию и защититься от различных угроз. Игра предлагает элементы строительства базы, тактические сражения и глубокую проработку сюжета.
########################################################################
export PW_PREFIX_NAME="DOOMSDAY"
export LAUNCH_PARAMETERS="/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/dls_installer.exe"
export PORTWINE_CREATE_SHORTCUT_NAME="Doomsday"
bad_url="$(curl https://dls.igg.com/download/pc/h/ | grep downloadUrl | awk -F'downloadUrl":"' '{print $2}' | awk -F'"' '{print $1}')"
good_url="${bad_url//\\/}"
start_portproton
if try_download "$good_url" "${PW_AUTOINSTALL_EXE}" no_mirror
then
pw_kill_autostart Launcher.exe &
pw_run "${PW_AUTOINSTALL_EXE}"
PW_EXE_FILE="$WINEPREFIX/drive_c/Program Files (x86)/Doomsday/DoomsdayLastSurvivors.exe"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
portwine_create_shortcut
fi
stop_portproton
@@ -1,24 +0,0 @@
#!/usr/bin/env bash
# Author: chal55rus
# type: games
# name: Eldevin (ENG)
# image: eldevin
# info_en: An MMORPG with vibrant graphics where players explore a vast fantasy world, complete quests, and battle enemies to develop their characters. The game features diverse classes and skills, as well as crafting and group interaction systems.
# info_ru: MMORPG с красочной графикой, где игроки исследуют обширный фэнтезийный мир, выполняют квесты и сражаются с врагами, чтобы развивать свои персонажи. Игра предлагает разнообразные классы и навыки, а также системы крафта и группового взаимодействия.
########################################################################
export PW_PREFIX_NAME="ELDEVIN"
export LAUNCH_PARAMETERS="/S"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/eldevin_win64.exe"
export PORTWINE_CREATE_SHORTCUT_NAME="Eldevin"
start_portproton
if try_download "https://www.eldevin.com/cdn/files/eldevin_win64.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
then
pw_run "${PW_AUTOINSTALL_EXE}"
PW_EXE_FILE="$WINEPREFIX/drive_c/Program Files/Eldevin/Eldevin.exe"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
portwine_create_shortcut
fi
stop_portproton
@@ -1,25 +0,0 @@
#!/usr/bin/env bash
# Author: chal55rus
# type: games
# name: Elsword (ENG)
# image: elsword
# info_en: An anime-style MMORPG that combines elements of a platformer and a real-time combat system, allowing players to fight in exciting dungeons and PvP arenas. The game offers a variety of characters with unique skills, as well as opportunities for customization and playing together with friends.
# info_ru: MMORPG c аниме-стилем, которая сочетает в себе элементы платформера и боевой системы в реальном времени, позволяя игрокам сражаться в захватывающих подземельях и PvP-аренах. Игра предлагает множество персонажей с уникальными навыками, а также возможности для кастомизации и совместной игры с друзьями.
########################################################################
export PW_WINE_USE="WINE_LG"
export PW_PREFIX_NAME="ELSWORD"
export LAUNCH_PARAMETERS="/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/ElswordInstaller_NA(64bit).exe"
export PORTWINE_CREATE_SHORTCUT_NAME="Elsword"
start_portproton
if try_download "https://elsword-us.dn.playkog.com/Download/Downloader/ElswordInstaller_NA(64bit).exe" "${PW_AUTOINSTALL_EXE}" no_mirror
then
pw_run "${PW_AUTOINSTALL_EXE}"
PW_EXE_FILE="$WINEPREFIX/drive_c/KOGGames/Elsword64/elsword.exe"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
portwine_create_shortcut
fi
stop_portproton
@@ -1,36 +0,0 @@
#!/usr/bin/env bash
# Author: Castro-Fidel (linux-gaming.ru)
# type: games
# name: Epic Games Launcher
# image: epicgames
# info_en: Launcher for the Epic Games game library.
# info_ru: Лаунчер для библиотеки игр Epic Games.
########################################################################
export LAUNCH_PARAMETERS="/q"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/EpicGamesLauncherInstaller.msi"
export PW_USE_D3D_EXTRAS="1"
export PORTWINE_CREATE_SHORTCUT_NAME="Epic Games Launcher"
export PW_WINE_USE="PROTON_LG"
export PW_USE_ESYNC="1"
export PW_USE_FSYNC="1"
export PW_PREFIX_NAME="DEFAULT"
pw_clear_pfx
start_portproton
if try_download "https://launcher-public-service-prod06.ol.epicgames.com/launcher/api/installer/download/EpicGamesLauncherInstaller.msi" "${PW_AUTOINSTALL_EXE}" no_mirror
then
try_remove_file "${WINEPREFIX}/drive_c/ProgramData/Epic/EpicGamesLauncher/EpicOnlineServicesInstaller.exe"
try_remove_dir "${WINEPREFIX}/drive_c/ProgramData/Epic/EpicOnlineServices"
try_remove_dir "${WINEPREFIX}/drive_c/Program Files (x86)/Epic Games/Epic Online Services/"
try_remove_dir "${WINEPREFIX}/drive_c/Program Files (x86)/Epic Games/Launcher/"
# try_remove_dir "${WINEPREFIX}/drive_c/ProgramData/Epic"
pw_run msiexec /i "${PW_AUTOINSTALL_EXE}"
PW_EXE_FILE="${WINEPREFIX}/drive_c/Program Files/Epic Games/Launcher/Portal/Binaries/Win64/EpicGamesLauncher.exe"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
portwine_create_shortcut
fi
stop_portproton
@@ -1,54 +0,0 @@
#!/usr/bin/env bash
# Author: cefeiko
# type: games
# name: EVE Online Launcher
# image: eve
# info_en: Launcher for the EVE Online game. A vast multiplayer online game where players explore an endless cosmos, engage in trading, manufacturing, and combat with other players in a unique sandbox environment. The game is known for its complex economy, political intrigue, and the ability to form alliances among players to conquer galactic territories.
# info_ru: Лаунчер для игры EVE Online. Масштабная многопользовательская онлайн-игра, в которой игроки исследуют бескрайний космос, занимаются торговлей, производством и ведением космических боев с другими игроками в уникальной песочнице. Игра известна своей сложной экономикой, политическими интригами и возможностью создания альянсов между игроками для завоевания галактических территорий.
########################################################################
export PW_WINDOWS_VER="10"
export PW_WINE_USE="WINE_LG"
export PW_USE_WINE_DXGI="0"
export PW_VULKAN_USE="2"
export PW_USE_GSTREAMER="0"
export PW_PREFIX_NAME="EVE_ONLINE"
export PW_WINE_FULLSCREEN_FSR="0"
export PW_USE_GAMEMODE="0"
export PW_USE_D3D_EXTRAS="1"
export PW_USE_SHADER_CACHE="0"
export PW_USE_EAC_AND_BE="1"
export PW_DLL_INSTALL="vcrun2022 d3dcompiler_47 arial tahoma" # msdelta
export WINEDLLOVERRIDES="msvcp140,msvcp140_1=n"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/eve-online-latest+Setup.exe"
start_portproton
if try_download "https://launcher.ccpgames.com/eve-online/release/win32/x64/eve-online-latest+Setup.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
then
EVE_LAUNCHER_DIR="${WINEPREFIX}/drive_c/users/steamuser/AppData/Local/eve-online"
unpack "${PORT_WINE_TMP_PATH}/eve-online-latest+Setup.exe" "${EVE_LAUNCHER_DIR}"
EVE_VERSION="$(cat "${EVE_LAUNCHER_DIR}/RELEASES" | awk '{print $2}' | awk -F"-" '{print $3}')"
unpack "${EVE_LAUNCHER_DIR}/eve-online-${EVE_VERSION}-full.nupkg" "${EVE_LAUNCHER_DIR}/tmp"
create_new_dir "${EVE_LAUNCHER_DIR}/app-$EVE_VERSION"
create_new_dir "${EVE_LAUNCHER_DIR}/packages/SquirrelTemp"
cp -r "${EVE_LAUNCHER_DIR}/tmp/lib/net45/." "${EVE_LAUNCHER_DIR}/app-$EVE_VERSION"
cp "${EVE_LAUNCHER_DIR}/eve-online-${EVE_VERSION}-full.nupkg" "${EVE_LAUNCHER_DIR}/packages"
mv "${EVE_LAUNCHER_DIR}/app-${EVE_VERSION}/eve-online_ExecutionStub.exe" "${EVE_LAUNCHER_DIR}/eve-online.exe"
cp "${EVE_LAUNCHER_DIR}/RELEASES" "${EVE_LAUNCHER_DIR}/packages"
mv "${EVE_LAUNCHER_DIR}/setupIcon.ico" "${EVE_LAUNCHER_DIR}/app.ico"
rm -rf "${EVE_LAUNCHER_DIR}/background.gif" "${EVE_LAUNCHER_DIR}/eve-online-${EVE_VERSION}-full.nupkg" "${EVE_LAUNCHER_DIR}/RELEASES" "${EVE_LAUNCHER_DIR}/tmp"
PW_EXE_FILE="${EVE_LAUNCHER_DIR}/eve-online.exe"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
export PORTWINE_CREATE_SHORTCUT_NAME="EVE Online Launcher"
portwine_create_shortcut
fi
stop_portproton
@@ -1,26 +0,0 @@
#!/usr/bin/env bash
# author: chal55rus
# type: games
# name: ExoTanks
# image: exotanks
# info_en: A multiplayer battle game where players control exoskeletons and fight in various arenas using powerful weapons and strategic gameplay. The game offers both team and solo modes, along with the ability to customize their exoskeleton for a unique playing style.
# info_ru: Многопользовательская боевая игра, в которой игроки управляют экзоскелетами и сражаются в различных аренах, используя мощное вооружение и стратегический подход. Игра предлагает как командные, так и одиночные режимы, а также возможность кастомизации своего экзоскелета для уникального стиля игры.
########################################################################
export PW_PREFIX_NAME="EXOTANKS"
export LAUNCH_PARAMETERS="/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/ExoTanksMOBA_Setup.exe"
export PORTWINE_CREATE_SHORTCUT_NAME="ExoTanks"
start_portproton
if try_download "https://www.exotanks.com/ExoTanksMOBA_Setup.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
then
pw_kill_autostart ExoTanksMOBA_Launcher.exe &
pw_run "${PW_AUTOINSTALL_EXE}"
PW_EXE_FILE="$WINEPREFIX/drive_c/Games/ExoTanksMOBA/ExoTanksMOBA_LauncherUpdater/Engine/Binaries/Win64/ExoTanksMOBA_LauncherUpdater.exe"
# PW_EXE_FILE="$WINEPREFIX/drive_c/Games/ExoTanksMOBA/ExoTanksMOBA_Launcher/Engine/Binaries/Win64/ExoTanksMOBA_Launcher.exe"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
portwine_create_shortcut
fi
stop_portproton
@@ -1,26 +0,0 @@
#!/usr/bin/env bash
# Author: chal55rus
# type: games
# name: Farlight 84
# image: farlight84
# info_en: A multiplayer battle royale game set in a colorful and futuristic world where players fight against each other using unique skills and weapons. The game features exciting gameplay with building elements, as well as the ability to utilize various vehicles to navigate the map.
# info_ru: Многопользовательская игра в жанре королевская битва, которая проходит в красочном и футуристическом мире, где игроки сражаются друг с другом с использованием уникальных навыков и оружия. Игра предлагает захватывающий геймплей с элементами строительства, а также возможность использовать различные транспортные средства для перемещения по карте.
########################################################################
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/Farlight84_setup_1.3.0.1_238.exe"
export PORTWINE_CREATE_SHORTCUT_NAME="Farlight 84"
export PW_PREFIX_NAME="FARLIGHT_84"
export PW_WINE_USE="WINE_LG"
start_portproton
if try_download "https://static-gl.lilithgame.com/p/pcsdk/launcher/10060/prodef4621e968ad6b383b8754148b63/0/launcher/res/release/Farlight84_setup_1.3.0.1_238.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
then
create_new_dir "$WINEPREFIX/drive_c/Program Files (x86)/Farlight84"
unpack "${PW_AUTOINSTALL_EXE}" "$WINEPREFIX/drive_c/Program Files (x86)/Farlight84"
unpack "$WINEPREFIX/drive_c/Program Files (x86)/Farlight84/launcher.7z" "$WINEPREFIX/drive_c/Program Files (x86)/Farlight84"
PW_EXE_FILE="$WINEPREFIX/drive_c/Program Files (x86)/Farlight84/Farlight84Launcher.exe"
try_remove_file "$WINEPREFIX/drive_c/Program Files (x86)/Farlight84/launcher.7z"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
portwine_create_shortcut
fi
stop_portproton
@@ -1,40 +0,0 @@
#!/usr/bin/env bash
# Author: chal55rus (Sergey P.), cefeiko, Castro-Fidel (linux-gaming.ru)
# type: games
# name: Gameforge Client
# image: gameforge
# info_en: Launcher for Gameforge studio games.
# info_ru: Лаунчер для игр Gameforge.
##########################################################################
pw_shutdown_please () {
if [[ "$PW_USE_RUNTIME" != 1 ]]
then echo "PW_USE_RUNTIME: `echo $PW_USE_RUNTIME`"
else
sleep 10
while true ; do
if [[ -z "`ps aux | grep -v grep | grep -wm 1 "$1" | awk '{print $2}'`" ]] && [[ -n "`pgrep wrap | head -n 1`" ]] ; then
echo -e "PID "$1" not found"
sleep 1
else
killall -s TERM gfclient.exe
killall -s TERM GameforgeInstaller.exe
break
fi
done
fi
}
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/GameforgeInstaller.exe"
start_portproton
if try_download "https://raw.githubusercontent.com/WarfaceZ/lutris-clients/master/GameforgeInstaller.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
then
pw_shutdown_please SparkWebHelper.exe &
pw_run "${PW_AUTOINSTALL_EXE}"
PW_EXE_FILE="$WINEPREFIX/drive_c/Program Files (x86)/GameforgeClient/gfclient.exe"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
export PORTWINE_CREATE_SHORTCUT_NAME="GameforgeClient"
portwine_create_shortcut
fi
stop_portproton
@@ -1,25 +0,0 @@
#!/usr/bin/env bash
# Author: chal55rus
# type: games
# name: GameXP
# image: gamexp
# info_en: Launcher for GameXP studio games.
# info_ru: Лаунчер для игр GameXP.
########################################################################
export PW_PREFIX_NAME="GAMEXP"
export LAUNCH_PARAMETERS="/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/InstallGameXPlauncher.exe"
export PORTWINE_CREATE_SHORTCUT_NAME="GameXP"
start_portproton
if try_download "https://clotho-install.gamexp.com/launcher/InstallGameXPlauncher-0-pr.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
then
pw_kill_autostart gamexp-launcher.exe &
pw_run "${PW_AUTOINSTALL_EXE}"
PW_EXE_FILE="$WINEPREFIX/drive_c/users/steamuser/AppData/Local/Programs/GameXP/Launcher/gamexp-launcher.exe"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
portwine_create_shortcut
fi
stop_portproton
@@ -1,28 +0,0 @@
#!/usr/bin/env bash
# Author: Castro-Fidel (linux-gaming.ru)
# type: games
# name: GOG Galaxy Launcher
# image: gog
# info_en: Launcher for the GOG game library.
# info_ru: Лаунчер для библиотеки игр GOG.
########################################################################
GOG_VER=2.0
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/setup_galaxy_${GOG_VER}.exe"
export LAUNCH_PARAMETERS="/VERYSILENT"
export PW_PREFIX_NAME="GOG"
export DISABLE_CP_DEFPFX="1"
export PW_WINE_USE="PROTON_LG_9-12"
export PORTWINE_CREATE_SHORTCUT_NAME="GOG GALAXY"
start_portproton
if try_download "https://webinstallers.gog-statics.com/download/GOG_Galaxy_${GOG_VER}.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
then
pw_run "${PW_AUTOINSTALL_EXE}"
PW_EXE_FILE="$WINEPREFIX/drive_c/Program Files (x86)/GOG Galaxy/GalaxyClient.exe"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
portwine_create_shortcut
fi
stop_portproton
@@ -1,32 +0,0 @@
#!/usr/bin/env bash
# Author: Castro Fidel
# type: games
# name: Guild Wars 2
# image: gw2
# info_en: An MMORPG with a vibrant world and a unique system of dynamic events, where players can freely explore the realms of Tyria and engage in large-scale battles. The game offers a variety of races and classes, with an emphasis on cooperative play and player interaction.
# info_ru: MMORPG с ярким миром и уникальной системой динамических событий, где игроки могут свободно исследовать просторы Тираи и участвовать в масштабных сражениях. Игра предлагает разнообразие рас и классов, а также акцент на совместной игре и взаимодействии между игроками.
########################################################################
export LAUNCH_PARAMETERS="/VERYSILENT"
export PW_PREFIX_NAME="GW2"
export WINEDLLOVERRIDES="mscoree,mshtml="
export PW_MUST_HAVE_DLL=""
export PW_WINE_USE="WINE_LG"
export PW_PREFIX_NAME="GUILD_WARS_2"
start_portproton
create_new_dir "${WINEPREFIX}/drive_c/Program Files/Guild Wars 2/"
export PW_AUTOINSTALL_EXE="${WINEPREFIX}/drive_c/Program Files/Guild Wars 2/Gw2Setup-64.exe"
if try_download "https://s3.amazonaws.com/gw2cdn/client/branches/Gw2Setup-64.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
then
pw_kill_autostart Gw2.exe 3 &
pw_run "${PW_AUTOINSTALL_EXE}"
PW_EXE_FILE="${WINEPREFIX}/drive_c/Program Files/Guild Wars 2/Gw2.exe"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
mv -f "${WINEPREFIX}/drive_c/users/steamuser/Temp/"* "${WINEPREFIX}/drive_c/Program Files/Guild Wars 2/"
export PORTWINE_CREATE_SHORTCUT_NAME="Guild Wars 2"
portwine_create_shortcut
fi
stop_portproton
@@ -1,30 +0,0 @@
#!/usr/bin/env bash
# Author: Castro-Fidel (linux-gaming.ru)
# type: games
# name: HoYoPlay
# image: hoyoplay
# info_en: Launcher for HoYoverse studio games.
# info_ru: Лаунчер для игр HoYoverse.
########################################################################
export PW_VULKAN_USE=2
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/Hoyolauncher_installer.exe"
export PW_PREFIX_NAME="HO_YO_PLAY"
export PORTWINE_CREATE_SHORTCUT_NAME="HoYoPlay"
export PW_WINE_USE="WINE_HYP_10-10"
start_portproton
if try_download "https://sg-public-api.hoyoverse.com/event/download_porter/trace/hyp_global/hyphoyoverse/default?url=https%3A%2F%2Fhoyoplay.hoyoverse.com%2F" "${PW_AUTOINSTALL_EXE}" no_mirror
then
get_and_set_reg_file --add 'Software\Wine\X11 Driver' 'Decorated' 'REG_SZ' "N" "user"
pw_kill_autostart HYP.exe &
export PATH_TO_GAME="${PORT_WINE_TMP_PATH}"
pw_run "${PW_AUTOINSTALL_EXE}"
export PW_EXE_FILE="$WINEPREFIX/drive_c/Program Files/HoYoPlay/launcher.exe"
pw_create_unique_exe "hoyoplay_launcher_pp"
try_remove_file "${PW_AUTOINSTALL_EXE}"
kill_portwine
portwine_create_shortcut
fi
stop_portproton
@@ -1,25 +0,0 @@
#!/usr/bin/env bash
# Author: Castro Fidel
# type: games
# name: Indiegala Client
# image: igclient
# info_en: Launcher for the Indiegala game library.
# info_ru: Лаунчер для библиотеки игр Indiegala.
########################################################################
export LAUNCH_PARAMETERS="/S"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/igclient_setup.exe"
export PW_DLL_INSTALL="vcrun2019"
start_portproton
if try_download "https://content.indiegalacdn.com/common/IGClientSetup.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
then
pw_kill_autostart IGClient.exe 3 &
pw_run "${PW_AUTOINSTALL_EXE}"
PW_EXE_FILE="${WINEPREFIX}/drive_c/Program Files/IGClient/IGClient.exe"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
export PORTWINE_CREATE_SHORTCUT_NAME="IGClient"
portwine_create_shortcut
fi
stop_portproton
@@ -1,24 +0,0 @@
#!/usr/bin/env bash
# Author: chal55rus (Sergey P.)
# type: games
# name: ITCH.IO
# image: itch
# info_en: Launcher for the library of indie games.
# info_ru: Лаунчер для библиотеки инди-игр.
##########################################################################
export LAUNCH_PARAMETERS="--silent"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/itch-setup.exe"
start_portproton
if try_download "https://itch.io/app/download?platform=windows" "${PW_AUTOINSTALL_EXE}" no_mirror
then
pw_kill_autostart itch.exe &
pw_run "${PW_AUTOINSTALL_EXE}"
PW_EXE_FILE=$(find "$WINEPREFIX/drive_c/users" -type f -name "itch.exe")
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
export PORTWINE_CREATE_SHORTCUT_NAME="Itch"
portwine_create_shortcut
fi
stop_portproton
@@ -1,23 +0,0 @@
#!/usr/bin/env bash
# Author: chal55rus
# type: games
# name: Last Chaos
# image: lastchaos
# info_en: Last Chaos is a classic MMORPG with six classes, castle sieges, a Korean grind and kilometers of dungeons. The confrontation between Apollo and Eres is gaining momentum, so hurry up to take one of the sides.
# info_ru: Last Chaos – классическая MMORPG с шестью классами, осадами замков, корейским гриндом и километрами подземелий. Противостояние Апполона и Эреса набирает обороты, так что спешите принять одну из сторон.
########################################################################
export PW_PREFIX_NAME="LAST_CHAOS"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/Last Chaos.zip"
export PORTWINE_CREATE_SHORTCUT_NAME="Last Chaos"
start_portproton
if try_download "https://last-chaos.ru/download/Last%20Chaos.zip" "${PW_AUTOINSTALL_EXE}" no_mirror
then
unpack "${PW_AUTOINSTALL_EXE}" "${WINEPREFIX}/drive_c/Program Files/"
PW_EXE_FILE="${WINEPREFIX}/drive_c/Program Files/Last Chaos/LC.exe"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
portwine_create_shortcut
fi
stop_portproton
@@ -1,30 +0,0 @@
#!/usr/bin/env bash
# Author: chal55rus
# type: games
# name: Lesta Game Center
# image: lgc
# info_en: Launcher for Lesta Games studio games.
# info_ru: Лаунчер для игр Lesta Games.
########################################################################
export LAUNCH_PARAMETERS="/VERYSILENT"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/Lesta_Game_Center_Install_RU.exe"
export PW_PREFIX_NAME="LGC"
export PW_USE_ESYNC="1"
export PW_USE_FSYNC="1"
export PW_USE_NTSYNC="0"
start_portproton
if try_download "https://redirect.lesta.ru/LGC/Lesta_Game_Center_Install_RU.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
then
pw_kill_autostart lgc.exe &
pw_run "${PW_AUTOINSTALL_EXE}"
PW_EXE_FILE="$WINEPREFIX/drive_c/ProgramData/Lesta/GameCenter/api/lgc_api.exe"
export PORTWINE_CREATE_SHORTCUT_NAME="Lesta Game Center"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
portwine_create_shortcut
fi
stop_portproton
@@ -1,26 +0,0 @@
#!/usr/bin/env bash
# Author: chal55rus
# type: games
# name: Lost Light
# image: lostlight
# info_en: A multiplayer first-person shooter with survival elements, where players explore a post-apocalyptic world and fight for resources. Players must team up to overcome dangers and complete missions, while constantly feeling the tension from potential encounters with other groups.
# info_ru: Многопользовательская игра в жанре шутера от первого лица с элементами выживания, где игроки исследуют постапокалиптический мир и сражаются за ресурсы. Игроки должны объединяться в команды, чтобы преодолевать опасности и выполнять миссии, при этом постоянно испытывая напряжение от возможных столкновений с другими группами.
########################################################################
export PW_PREFIX_NAME="LOST_LIGHT"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/LostLight_installer.exe"
export PORTWINE_CREATE_SHORTCUT_NAME="Lost Light"
URL_LOST_LIGHT="$(curl -s --list-only "https://adl.easebar.com/d/g/yhtj/c/lostlightcspc" | grep 'var pc_link =' | awk -F\" '{print $2}')"
start_portproton
if try_download "${URL_LOST_LIGHT}" "${PW_AUTOINSTALL_EXE}" no_mirror
then
unpack "${PW_AUTOINSTALL_EXE}" "$WINEPREFIX/drive_c/Program Files (x86)/LostLight"
export PW_EXE_FILE="$WINEPREFIX/drive_c/Program Files (x86)/LostLight/launcher.exe"
pw_create_unique_exe "lostlight_launcher_pp"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
portwine_create_shortcut
fi
stop_portproton
@@ -1,26 +0,0 @@
#!/usr/bin/env bash
# Author: chal55rus
# type: games
# name: Metal War Online
# image: mwo
# info_en: A multiplayer online action game with strategic elements, where players control combat robots and battle on various arenas. The game offers extensive customization options for the machines and a variety of game modes, allowing each player to create a unique fighting style.
# info_ru: Многопользовательская онлайн-игра в жанре экшен с элементами стратегии, где игроки управляют боевыми роботами и сражаются на различных аренах. Игра предлагает богатую кастомизацию техники и разнообразные игровые режимы, позволяя каждому игроку создавать уникальный стиль боя.
########################################################################
export LAUNCH_PARAMETERS="/s /nr /l=Russian"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/MWO_Launcher_Setup.exe"
start_portproton
if try_download "http://mwogame.com/download.php" "${PW_AUTOINSTALL_EXE}" no_mirror
then
pw_run "${PW_AUTOINSTALL_EXE}"
if [[ -d "$WINEPREFIX/drive_c/games/" ]] ; then
PW_EXE_FILE="$WINEPREFIX/drive_c/games/MetalWarOnline/MWOLauncher.exe"
else
PW_EXE_FILE="$WINEPREFIX/drive_c/Games/MetalWarOnline/MWOLauncher.exe"
fi
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
export PORTWINE_CREATE_SHORTCUT_NAME="Metal War Online"
portwine_create_shortcut
fi
stop_portproton
@@ -1,25 +0,0 @@
#!/usr/bin/env bash
# Author: chal55rus
# type: games
# name: Mini World
# image: miniworld
# info_en: A sandbox game where players can explore, build, and create their unique worlds in a 3D environment. The game offers various modes, including survival and creative, as well as the ability to interact with other players in a multiplayer format.
# info_ru: Песочница, в которой игроки могут исследовать, строить и создавать свои уникальные миры в 3D-окружении. Игра предлагает разнообразные режимы, включая выживание и творчество, а также возможность взаимодействовать с другими игроками в многопользовательском формате.
########################################################################
URL_VER=$(curl https://www.miniworldgame.com/ | awk -F"/app_install/" '{print $2}' | awk -F"universal" '{print $1}')
export PW_PREFIX_NAME="MINI_WORLD"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/miniworld_universal.exe"
export PORTWINE_CREATE_SHORTCUT_NAME="Mini World"
start_portproton
if try_download "https://mwu-api.miniworldgame.com/app_install/${URL_VER//[[:space:]]/}universal" "${PW_AUTOINSTALL_EXE}" no_mirror
then
unpack "${PW_AUTOINSTALL_EXE}" "$WINEPREFIX/drive_c/users/steamuser/AppData/Roaming/miniworldOverseasgame"
PW_EXE_FILE="$WINEPREFIX/drive_c/users/steamuser/AppData/Roaming/miniworldOverseasgame/MicroMiniNew.exe"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
portwine_create_shortcut
fi
stop_portproton
@@ -1,28 +0,0 @@
#!/usr/bin/env bash
# Author: ValoKarDin
# type: games
# name: Modern Warships
# image: mw
# info_en: A multiplayer military game where players control modern battle ships and fight on naval arenas. The game offers a wide selection of vessels, realistic graphics, and thrilling multiplayer battles.
# info_ru: Многопользовательская военная игра, где игроки управляют современными боевыми кораблями и сражаются на морских аренах. Игра предлагает широкий выбор судов, реалистичную графику и захватывающие многопользовательские сражения.
########################################################################
export LAUNCH_PARAMETERS="/VERYSILENT"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/modern_warships.exe"
export PW_PREFIX_NAME="MODERN_WARSHIPS"
export PORTWINE_CREATE_SHORTCUT_NAME="Modern Warships"
start_portproton
if try_download "https://gdn.gaijin.net/launcher/current.php?id=ModernWarshipsLauncher" "${PW_AUTOINSTALL_EXE}" no_mirror
then
pw_kill_autostart launcher.exe &
pw_run "${PW_AUTOINSTALL_EXE}"
PW_EXE_FILE="$WINEPREFIX/drive_c/users/$USER/AppData/Local/ModernWarships/launcher.exe"
pw_create_unique_exe "modern_warships_pp"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
portwine_create_shortcut
fi
stop_portproton
@@ -1,30 +0,0 @@
#!/usr/bin/env bash
# Author: cefeiko
# type: games
# name: OSU
# image: osu
# info_en: A rhythm game where players click circles in time with music and rhythm. The game features various modes and a community where users can create and share their own maps.
# info_ru: Ритм-игра, в которой игроки нажимают кружки, следуя музыке и ритму. Игра предлагает различные режимы и комьюнити, где пользователи могут создавать и делиться собственными картами.
########################################################################
export PW_PREFIX_NAME="OSU"
export PORTWINE_CREATE_SHORTCUT_NAME="OSU"
export PW_WINE_USE="WINE_LG"
start_portproton
create_new_dir "${WINEPREFIX}/drive_c/Program Files (x86)/OSU/"
export PW_AUTOINSTALL_EXE="${WINEPREFIX}/drive_c/Program Files (x86)/OSU/osu!.exe"
if try_download "https://m1.ppy.sh/r/osu!install.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
then
if [[ -f "${PORT_DATA_PATH}/data/pfx_dotnet/drive_c/Program Files (x86)/OSU/osu!install.exe" ]] ; then
mv -f "${PORT_DATA_PATH}/data/pfx_dotnet/drive_c/Program Files (x86)/OSU/osu!install.exe" "${PORT_DATA_PATH}/data/pfx_dotnet/drive_c/Program Files (x86)/OSU/osu!.exe"
fi
export PW_EXE_FILE="$WINEPREFIX/drive_c/Program Files (x86)/OSU/osu!.exe"
pw_create_unique_exe
try_remove_file "${PW_EXE_FILE}.ppdb"
portwine_create_shortcut
kill_portwine
fi
stop_portproton
@@ -1,27 +0,0 @@
#!/usr/bin/env bash
# Author: chal55rus
# type: games
# name: Panzar
# image: panzar
# info_en: A multiplayer online action game where players battle in teams using various character classes and unique abilities. The game features tactical battles on large maps with destructible environments.
# info_ru: Многопользовательская онлайн-игра в жанре экшен, где игроки сражаются в командах, используя различные классы персонажей и уникальные способности. Игра предлагает тактические сражения на больших картах с разрушительным взаимодействием окружения.
########################################################################
export LAUNCH_PARAMETERS="/VERYSILENT"
export PW_WINDOWS_VER="7"
export PW_PREFIX_NAME="PANZAR"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/Panzar.exe"
export PORTWINE_CREATE_SHORTCUT_NAME="Panzar"
start_portproton
if try_download "https://www.panzar.ru/ru/download/installer/" "${PW_AUTOINSTALL_EXE}" no_mirror
then
pw_kill_autostart start.exe 3 &
pw_run "${PW_AUTOINSTALL_EXE}"
export PW_EXE_FILE="${WINEPREFIX}/drive_c/Games/Panzar/start.exe"
pw_create_unique_exe
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
portwine_create_shortcut
fi
stop_portproton
@@ -1,23 +0,0 @@
#!/usr/bin/env bash
# Author: Castro Fidel (linux-gaming.ru)
# type: games
# name: Path of Exile
# image: poe
# info_en: A free online action RPG where players explore a dark world, fight monsters, and develop their characters through a deep skill and item system. The game is known for its challenging gameplay and constantly updated content, including seasonal leagues and unique mechanics.
# info_ru: Бесплатная онлайн-игра в жанре action RPG, в которой игроки исследуют мрачный мир, сражаются с монстрами и развивают свои персонажи через глубокую систему навыков и предметов. Игра известна своим сложным геймплеем и постоянно обновляемым контентом, включая сезонные лиги и уникальные механики.
########################################################################
export LAUNCH_PARAMETERS="/S"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/PathOfExileInstaller.exe"
start_portproton
if try_download "https://web.poecdn.com/protected/downloads/PathOfExileInstaller.exe?key=lpKVe-ZJOqVrur8612s8gg" "${PW_AUTOINSTALL_EXE}" no_mirror
then
pw_run "${PW_AUTOINSTALL_EXE}"
PW_EXE_FILE="$WINEPREFIX/drive_c/Program Files (x86)/Grinding Gear Games/Path of Exile/PathOfExile.exe"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
export PORTWINE_CREATE_SHORTCUT_NAME="Path of Exile"
portwine_create_shortcut
fi
stop_portproton
@@ -1,26 +0,0 @@
#!/usr/bin/env bash
# Author: chal55rus (Sergey P.)
# type: games
# name: Plarium Play
# image: plariumplay
# info_en: Launcher for Plarium studio games.
# info_ru: Лаунчер для игр Plarium.
########################################################################
export LAUNCH_PARAMETERS="/s"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/plarium_play_setup.exe"
export PW_WINDOWS_VER="10"
export PW_PREFIX_NAME="DOTNET"
export PORTWINE_CREATE_SHORTCUT_NAME="Plarium Play"
start_portproton
if try_download "https://installer.plarium.com/desktop?lid=2&arc=64&os=windows" "${PW_AUTOINSTALL_EXE}" no_mirror
then
pw_kill_autostart PlariumPlay.exe &
pw_run "${PW_AUTOINSTALL_EXE}"
PW_EXE_FILE="$WINEPREFIX/drive_c/users/steamuser/AppData/Local/PlariumPlay/PlariumPlay.exe"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
portwine_create_shortcut
fi
stop_portproton
@@ -1,26 +0,0 @@
#!/usr/bin/env bash
# Author: chal55rus
# type: games
# name: Rise of Flight
# image: riseofflight
# info_en: A flight combat simulator set during World War I, providing players with a realistic experience of piloting historical fighters. The game features various missions, a multiplayer mode, and detailed graphics, allowing players to immerse themselves in the atmosphere of aerial battles of that era.
# info_ru: Симулятор авиационных боев, действие которого происходит во время Первой мировой войны, предлагающий игрокам реалистичный опыт управления историческими истребителями. Игра включает в себя различные миссии, многопользовательский режим и детализированную графику, что позволяет ощутить атмосферу воздушных сражений того времени.
########################################################################
export PW_PREFIX_NAME="RISE_OF_FLIGHT"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/ROF_UE.zip"
export LAUNCH_PARAMETERS="/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-"
export PORTWINE_CREATE_SHORTCUT_NAME="Rise of Flight"
start_portproton
if try_download "https://il2bosrd1.cdnvideo.ru/ROF/ROF_UE.zip" "${PW_AUTOINSTALL_EXE}" no_mirror
then
unpack "${PW_AUTOINSTALL_EXE}" "$WINEPREFIX/drive_c/Program Files (x86)/1C-777/Rise of Flight"
pw_kill_autostart "3rd_party" &
pw_run "$WINEPREFIX/drive_c/Program Files (x86)/1C-777/Rise of Flight/ROF_UE/setup.exe"
PW_EXE_FILE="$WINEPREFIX/drive_c/Program Files (x86)/1C-777/Rise of Flight/bin_game/release/rof_updater.exe"
try_remove_dir "$WINEPREFIX/drive_c/Program Files (x86)/1C-777/Rise of Flight/ROF_UE"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
portwine_create_shortcut
fi
stop_portproton
@@ -1,27 +0,0 @@
#!/usr/bin/env bash
# Author: chal55rus (Sergey P.)
# type: games
# name: Rockstar Games Launcher
# image: Rockstar
# info_en: Launcher for Rockstar studio games.
# info_ru: Лаунчер для игр Rockstar.
########################################################################
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/Rockstar-Games-Launcher.exe"
export PORTWINE_CREATE_SHORTCUT_NAME="Rockstar"
export PW_WINE_USE="WINE_LG"
export PW_PREFIX_NAME="ROCKSTAR"
start_portproton
if try_download "https://gamedownloads.rockstargames.com/public/installer/Rockstar-Games-Launcher.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
then
try_remove_dir "$WINEPREFIX/drive_c/Program Files/Rockstar Games/Launcher"
pw_kill_autostart RockstarService.exe &
pw_run "${PW_AUTOINSTALL_EXE}"
PW_EXE_FILE="$(find "$WINEPREFIX/drive_c/" -type f -name "Launcher.exe" | grep "Rockstar Games/Launcher/Launcher.exe")"
pw_create_unique_exe "rockstar_launcher_pp"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
portwine_create_shortcut
fi
stop_portproton
@@ -1,23 +0,0 @@
#!/usr/bin/env bash
# Author: Boria138
# type: games
# name: Russian Fishing 4
# image: rf4launcher
# info_en: A realistic fishing simulator that immerses players in the enjoyable process of catching fish in various beautiful bodies of water across Russia. The game features a wide selection of tackle, fish species, and opportunities for competition with other anglers.
# info_ru: Реалистичный симулятор рыбалки, который предлагает игрокам погрузиться в увлекательный процесс ловли рыбы в различных красивых водоемах России. Игра включает в себя широкий выбор снастей, видов рыб и возможностей для соревнований с другими рыбаками.
########################################################################
export LAUNCH_PARAMETERS="/q"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/RF4SetupRU.exe"
export PORTWINE_CREATE_SHORTCUT_NAME="Russian Fishing 4"
export PW_PREFIX_NAME="RUSSIAN_FISHING"
start_portproton
if try_download "https://cdn6.rf4game.ru/rf4/RF4SetupRU.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
then
create_new_dir "${WINEPREFIX}/drive_c/games/Russian Fishing 4"
mv "${PORT_WINE_TMP_PATH}/RF4SetupRU.exe" "${WINEPREFIX}/drive_c/games/Russian Fishing 4/RF4.exe"
PW_EXE_FILE="${WINEPREFIX}/drive_c/games/Russian Fishing 4/RF4.exe"
kill_portwine
portwine_create_shortcut
fi
stop_portproton
@@ -1,23 +0,0 @@
#!/usr/bin/env bash
# Author: Dervart
# type: games
# name: Saturn
# image: saturn
# info_en: A multiplayer online game that combines elements of strategy and role-playing, where players can explore space, build colonies, and battle opponents. The game features a deep crafting system and character development, allowing each player to create a unique strategy.
# info_ru: Многопользовательская онлайн-игра, сочетающая элементы стратегии и ролевого развлечения, где игроки могут исследовать космос, строить колонии и сражаться с противниками. Игра предлагает глубокую систему крафта и развития персонажей, позволяя каждому игроку строить уникальную стратегию.
########################################################################
export PW_PREFIX_NAME="NINSAR"
export PW_WINE_USE="WINE_LG"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/saturn.zip"
start_portproton
if try_download "https://cdn-s3.quadrosim.ru/saturn/saturn.zip" "${PW_AUTOINSTALL_EXE}" no_mirror
then
unpack "${PW_AUTOINSTALL_EXE}" "$WINEPREFIX/drive_c/Program Files (x86)/saturn"
PW_EXE_FILE="$WINEPREFIX/drive_c/Program Files (x86)/saturn/Saturn.exe"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
export PORTWINE_CREATE_SHORTCUT_NAME="Saturn"
portwine_create_shortcut
fi
stop_portproton
@@ -1,28 +0,0 @@
#!/usr/bin/env bash
# Author: chal55rus
# type: games
# name: Secret World Legends (ENG)
# image: swl
# info_en: An MMORPG with a unique story and setting based on myths, legends, and secret societies, allowing players to explore a modern world filled with supernatural beings and mysteries. The game offers freedom in skill selection and character building, along with engaging quests and a rich narrative.
# info_ru: MMORPG с уникальной историей и сеттингом, основанная на мифах, легендах и тайных обществах, позволяющая игрокам исследовать современный мир, полный сверхъестественных существ и загадок. Игра предлагает свободу в выборе навыков и построении персонажей, а также захватывающие квесты и глубокий сюжет.
########################################################################
export WINEDLLOVERRIDES="d3d9=b"
export LAUNCH_PARAMETERS="/VERYSILENT"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/SecretWorldLegendsMin.exe"
export PW_PREFIX_NAME="SECRET_WORLD_LEGENDS"
start_portproton
if try_download "https://web-cdn.funcom.com/downloads/swl/SecretWorldLegendsMin.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
then
pw_kill_autostart ClientPatcher.exe &
# pw_kill_autostart PatcherSetup.exe &
pw_run "${PW_AUTOINSTALL_EXE}"
# PW_EXE_FILE="${WINEPREFIX}/drive_c/Program Files (x86)/Funcom/Secret World Legends/SecretWorldLegendsDX11.exe"
PW_EXE_FILE="${WINEPREFIX}/drive_c/Program Files (x86)/Funcom/Secret World Legends/ClientPatcher.exe"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
export PORTWINE_CREATE_SHORTCUT_NAME="Secret World Legends"
portwine_create_shortcut
fi
stop_portproton
@@ -1,24 +0,0 @@
#!/usr/bin/env bash
# Author: Castro-Fidel (linux-gaming.ru)
# type: games
# name: STALCRAFT
# image: stalcraft
# info_en: A multiplayer open-world game inspired by the S.T.A.L.K.E.R. universe, where players explore abandoned zones, battle mutants and other stalkers, and complete various quests. The game combines elements of survival, RPG, and first-person shooter, offering a unique experience in a post-apocalyptic world.
# info_ru: Многопользовательская игра с открытым миром, вдохновленная вселенной S.T.A.L.K.E.R., где игроки исследуют заброшенные зоны, сражаются с мутантами и другими сталкерами, а также выполняют различные квесты. Игра сочетает элементы выживания, RPG и шутера от первого лица, предлагая уникальный опыт в постапокалиптическом мире.
########################################################################
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/EXBO_Setup_ru.exe"
export PW_PREFIX_NAME="DOTNET"
start_portproton
if try_download "https://exbo2.b-cdn.net/EXBO_Setup_ru.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
then
pw_kill_autostart ExboLauncher &
pw_run "${PW_AUTOINSTALL_EXE}"
PW_EXE_FILE="$WINEPREFIX/drive_c/users/steamuser/AppData/Roaming/EXBO/java/bin/ExboLauncher.exe"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
export PORTWINE_CREATE_SHORTCUT_NAME="STALCRAFT"
portwine_create_shortcut
fi
stop_portproton
@@ -1,26 +0,0 @@
#!/usr/bin/env bash
# Author: chal55rus
# type: games
# name: Star Conflict
# image: starconflict
# info_en: A multiplayer online game in the space simulator genre, where players control various fighting ships and engage in large-scale space battles. The game features a unique customization system and character progression, along with diverse combat modes and strategic elements.
# info_ru: Многопользовательская онлайн-игра в жанре космического симулятора, где игроки управляют различными боевыми кораблями и сражаются в масштабных космических сражениях. Игра предлагает уникальную систему кастомизации и развитие персонажей, а также разнообразные режимы боя и стратегические элементы.
########################################################################
export PW_PREFIX_NAME="STAR_CONFLICT"
export LAUNCH_PARAMETERS="/VERYSILENT"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/starconf_installer.exe"
export PORTWINE_CREATE_SHORTCUT_NAME="Star Conflict"
start_portproton
if try_download "https://yupmaster.gaijinent.com/launcher/current.php?id=StarConflictLauncher" "${PW_AUTOINSTALL_EXE}" no_mirror
then
pw_kill_autostart launcher.exe &
pw_run "${PW_AUTOINSTALL_EXE}"
PW_EXE_FILE="${WINEPREFIX}/drive_c/users/steamuser/AppData/Local/StarConflict/launcher.exe"
pw_create_unique_exe
try_remove_file "${PW_AUTOINSTALL_EXE}"
kill_portwine
portwine_create_shortcut
fi
stop_portproton
@@ -1,28 +0,0 @@
#!/usr/bin/env bash
# Author: Castro-Fidel (linux-gaming.ru)
# type: games
# name: Steam (UNSTABLE)
# image: steam
# info_en: Launcher for the Steam game library.
# info_ru: Лаунчер для библиотеки игр Steam.
########################################################################
export PW_WINE_USE="WINE_LG"
export LAUNCH_PARAMETERS="/S /D=c:\Program Files (x86)\Steam"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/SteamSetup.exe"
start_portproton
if try_download "https://cdn.akamai.steamstatic.com/client/installer/SteamSetup.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
then
pw_kill_autostart steam.exe &
pw_run "${PW_AUTOINSTALL_EXE}"
if [[ -f "$WINEPREFIX/drive_c/Program Files (x86)/Steam/Steam.exe" ]]
then mv -f "$WINEPREFIX/drive_c/Program Files (x86)/Steam/Steam.exe" "$WINEPREFIX/drive_c/Program Files (x86)/Steam/steam.exe"
fi
PW_EXE_FILE="$WINEPREFIX/drive_c/Program Files (x86)/Steam/steam.exe"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
export PORTWINE_CREATE_SHORTCUT_NAME="STEAM_PP"
portwine_create_shortcut
fi
stop_portproton
@@ -1,24 +0,0 @@
#!/usr/bin/env bash
# Author: chal55rus
# type: games
# name: Tanki Online
# image: tankionline
# info_en: A multiplayer browser game where players control tanks and engage in dynamic team battles across various maps. The game offers a wide selection of weapons and modifications, allowing players to create unique tanks and develop strategies for victory.
# info_ru: Многопользовательская браузерная игра, в которой игроки управляют танками и участвуют в динамичных командных сражениях на различных картах. Игра предлагает широкий выбор оружия и модификаций, позволяя создавать уникальные танки и разрабатывать тактики для победы.
########################################################################
export PW_PREFIX_NAME="TANKI_ONLINE"
export LAUNCH_PARAMETERS="/S"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/TankiOnlineSetup.exe"
export PORTWINE_CREATE_SHORTCUT_NAME="Tanki Online"
start_portproton
if try_download "https://tankionline.com/desktop/TankiOnlineSetup.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
then
pw_run "${PW_AUTOINSTALL_EXE}"
PW_EXE_FILE="$WINEPREFIX/drive_c/users/steamuser/AppData/Local/Programs/Tanki Online/Tanki Online.exe"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
portwine_create_shortcut
fi
stop_portproton
@@ -1,24 +0,0 @@
#!/usr/bin/env bash
# Author: chal55rus
# type: games
# name: The Lord of the Rings Online (ENG)
# image: lordofringsonline
# info_en: An MMORPG based on the works of J. R. R. Tolkien, allowing players to explore Middle-earth, take part in epic quests and battles with famous characters and creatures from the Lord of the Rings universe. The game offers deep customization of characters, a rich plot and many opportunities to play alone or in a group.
# info_ru: MMORPG, основанная на произведениях Дж. Р. Р. Толкиена, позволяющая игрокам исследовать Средиземье, принимать участие в эпических квестах и сражениях с известными персонажами и созданиями из вселенной Властелина колец. Игра предлагает глубокую кастомизацию персонажей, богатый сюжет и множество возможностей для игры в одиночку или в группе.
########################################################################
export PW_PREFIX_NAME="THE_LORD_OF_THE_RINGS_ONLINE"
export LAUNCH_PARAMETERS="/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP- /LANG=en"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/lotrolive.exe"
export PORTWINE_CREATE_SHORTCUT_NAME="The Lord of the Rings Online"
start_portproton
if try_download "https://files.lotro.com/lotro/installers/lotrolive.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
then
pw_run "${PW_AUTOINSTALL_EXE}"
PW_EXE_FILE="$WINEPREFIX/drive_c/Program Files (x86)/StandingStoneGames/The Lord of the Rings Online/LotroLauncher.exe"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
portwine_create_shortcut
fi
stop_portproton
@@ -1,25 +0,0 @@
#!/usr/bin/env bash
# Author: chal55rus
# type: games
# name: The World of Nifty Craft (ENG)
# image: theworldofniftycraft
# info_en: A multiplayer online sandbox game where players can build, explore, and progress in a vibrant and diverse world filled with adventures. The game features a crafting system, unique opportunities for creativity, and interaction with other players.
# info_ru: Многопользовательская онлайн-игра в жанре песочницы, где игроки могут строить, исследовать и развиваться в ярком и разнообразном мире, наполненном приключениями. Игра предлагает систему крафта, уникальные возможности для творчества и взаимодействия с другими игроками.
########################################################################
export PW_PREFIX_NAME="THE_WORLD_NIFTY_CRAFT"
export LAUNCH_PARAMETERS="/S"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/web_installer.exe"
export PORTWINE_CREATE_SHORTCUT_NAME="The World of Nifty Craft"
start_portproton
if try_download "https://installer.launcher.xsolla.com/xlauncher-builds/xsolla-launcher-update/9969/bin/web_installer.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
then
pw_run "${PW_AUTOINSTALL_EXE}"
PW_EXE_FILE="$WINEPREFIX/drive_c/users/steamuser/AppData/Local/The World of Nifty Craft/launcher.exe"
pw_create_unique_exe "Nifty_Craft_launcher"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
portwine_create_shortcut
fi
stop_portproton
@@ -1,30 +0,0 @@
#!/usr/bin/env bash
# Author: chal55rus
# type: games
# name: Toontown Rewritten (ENG)
# image: toontownrewritten
# info_en: A multiplayer online game, where players take on the roles of cartoon characters battling foes in humorous and adventurous locations. The game offers cooperative gameplay, quests, mini-games, and opportunities for interaction with other players in a colorful world.
# info_ru: Многопользовательская онлайн-игра, где игроки берут на себя роли мультяшных персонажей, сражаясь с противниками в локациях, наполненных юмором и приключениями. Игра предлагает кооперативный геймплей, квесты, мини-игры и возможность взаимодействия с другими игроками в красочном мире.
########################################################################
URL_VER=$(curl https://www.toontownrewritten.com/play \
| awk -F"https://cdn.toontownrewritten.com/launcher/windows/TTRInstaller-" '{print $2}' \
| awk -F".exe" '{print $1}' | grep "v1" | head -n1)
export PW_PREFIX_NAME="TOONTOWN_REWRITTEN"
export LAUNCH_PARAMETERS="/S"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/TTRInstaller-$URL_VER.exe"
export PORTWINE_CREATE_SHORTCUT_NAME="Toontown Rewritten"
start_portproton
if try_download "https://cdn.toontownrewritten.com/launcher/windows/TTRInstaller-$URL_VER.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
then
pw_kill_autostart Launcher.exe &
pw_run "${PW_AUTOINSTALL_EXE}"
PW_EXE_FILE="$WINEPREFIX/drive_c/Program Files (x86)/Toontown Rewritten/Launcher.exe"
pw_create_unique_exe "Toontown_Launcher"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
portwine_create_shortcut
fi
stop_portproton
@@ -1,28 +0,0 @@
#!/usr/bin/env bash
# Author: chal55rus
# type: games
# name: Toribash
# image: toribash
# info_en: A fighting game where players control the joints of a character, creating their own movements and combos in real time. The game offers a deep level of strategy and creative expression, allowing users to develop their own techniques and engage in battles with other players.
# info_ru: Файтинг, где игроки управляют суставами персонажа, создавая собственные движения и комбо в реальном времени. Игра предлагает глубокий уровень стратегии и творческого самовыражения, позволяя пользователям разрабатывать свои собственные приемы и участвовать в боях с другими игроками.
########################################################################
URL_VER=$(curl https://www.toribash.com/downloads.php \
| awk -F"https://cache.toribash.com/Toribash-" '{print $2}' \
| awk -F"-Setup.exe" '{print $1}' | grep "5" | head -n1)
export PW_PREFIX_NAME="TORIBASH"
export LAUNCH_PARAMETERS="/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/Toribash-${URL_VER}-Setup.exe"
export PORTWINE_CREATE_SHORTCUT_NAME="Toribash"
start_portproton
if try_download "https://cache.toribash.com/Toribash-${URL_VER}-Setup.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
then
pw_run "${PW_AUTOINSTALL_EXE}"
PW_EXE_FILE="$WINEPREFIX/drive_c/Games/Toribash/toribash.exe"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
portwine_create_shortcut
fi
stop_portproton
@@ -1,25 +0,0 @@
#!/usr/bin/env bash
# Author: Castro-Fidel (linux-gaming.ru)
# type: games
# name: Ubisoft Game Launcher
# image: ubc
# info_en: Launcher for Ubisoft studio games.
# info_ru: Лаунчер для игр Ubisoft.
########################################################################
export LAUNCH_PARAMETERS="/S /D=c:\Program Files (x86)\Ubisoft Game Launcher"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/UbisoftConnectInstaller.exe"
export PORTWINE_CREATE_SHORTCUT_NAME="Ubisoft Connect"
export WINE_SIMULATE_WRITECOPY="1"
start_portproton
if try_download "https://static3.cdn.ubi.com/orbit/launcher_installer/UbisoftConnectInstaller.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
then
pw_kill_autostart UbisoftConnect.exe &
pw_run "${PW_AUTOINSTALL_EXE}"
PW_EXE_FILE="$WINEPREFIX/drive_c/Program Files (x86)/Ubisoft Game Launcher/UbisoftConnect.exe"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
portwine_create_shortcut
fi
stop_portproton
@@ -1,25 +0,0 @@
#!/usr/bin/env bash
# Author: chal55rus (Sergey P.)
# type: games
# name: VK Play Games Center
# image: mygames
# info_en: Launcher for the VK Play game library.
# info_ru: Лаунчер для библиотеки игр VK Play.
########################################################################
export PW_PREFIX_NAME="VK_PLAY"
# export LAUNCH_PARAMETERS=""
export PW_AUTOINSTALL_EXE="${PORT_DATA_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c/users/steamuser/AppData/Local/VKPlayLoader.exe"
export PORTWINE_CREATE_SHORTCUT_NAME="VK Play"
export WINEDLLOVERRIDES="mscoree,mshtml="
export PW_MUST_HAVE_DLL=""
export PW_WINE_USE="WINE_LG"
start_portproton
if try_download "https://static.gc.vkplay.ru/VKPlayLoader.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
then
PW_EXE_FILE="$WINEPREFIX/drive_c/users/steamuser/AppData/Local/VKPlayLoader.exe"
try_remove_file "${PW_EXE_FILE}.ppdb"
portwine_create_shortcut
fi
stop_portproton
@@ -1,25 +0,0 @@
#!/usr/bin/env bash
# Author: Castro Fidel
# type: games
# name: Warframe
# image: warframe
# info_en: A free-to-play multiplayer online action RPG where players control ancient warriors known as Tenno and battle against various factions in diverse missions across the galaxy. The game offers extensive character customization options, cooperative gameplay, and continuously updated content.
# info_ru: Бесплатная многопользовательская онлайн-игра в жанре экшен-RPG, в которой игроки управляют древними воинами, известными как Тенно, и сражаются против различных фракций в разнообразных миссиях по всей галактике. Игра предлагает множество возможностей для кастомизации персонажей, кооперативный геймплей и постоянно обновляющийся контент.
########################################################################
export LAUNCH_PARAMETERS="/q"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/Warframe.msi"
export PORTWINE_CREATE_SHORTCUT_NAME="Warframe"
start_portproton
if try_download "http://content.warframe.com/dl/Warframe.msi" "${PW_AUTOINSTALL_EXE}" no_mirror
then
pw_kill_autostart Launcher.exe 3 &
pw_run msiexec /i "${PW_AUTOINSTALL_EXE}"
export PW_EXE_FILE="${WINEPREFIX}/drive_c/users/$USER/AppData/Local/Warframe/Downloaded/Public/Tools/Launcher.exe"
pw_create_unique_exe "warframe_launcher_pp"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
portwine_create_shortcut
fi
stop_portproton
@@ -1,25 +0,0 @@
#!/usr/bin/env bash
# Author: cefeiko
# type: games
# name: Wargaming Game Center
# image: wgc
# info_en: Launcher for Wargaming studio games.
# info_ru: Лаунчер для игр Wargaming.
########################################################################
export LAUNCH_PARAMETERS="/VERYSILENT"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/Wargaming_Game_Center_Install_WoT_EU.exe"
export PW_PREFIX_NAME="WGC"
start_portproton
if try_download "https://redirect.wargaming.net/WGC/Wargaming_Game_Center_Install_WoT_EU.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
then
pw_kill_autostart wgc.exe &
pw_run "${PW_AUTOINSTALL_EXE}"
PW_EXE_FILE="$WINEPREFIX/drive_c/ProgramData/Wargaming.net/GameCenter/api/wgc_api.exe"
export PORTWINE_CREATE_SHORTCUT_NAME="Wargaming Game Center"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_EXE_FILE}.ppdb"
kill_portwine
portwine_create_shortcut
fi
stop_portproton
@@ -1,31 +0,0 @@
#!/usr/bin/env bash
# Author: Cefeiko
# type: games
# name: World of Sea Battle
# image: wosb
# info_en: A multiplayer game where players control ships and participate in naval battles, aiming to defeat their opponents. The game offers various gameplay modes, ship customization options, and tactical planning for team actions.
# info_ru: Многопользовательская игра, в которой игроки управляют кораблями и участвуют в морских сражениях, стремясь одержать победу над противниками. Игра предлагает различные игровые режимы, возможность кастомизации судов и тактическое планирование командных действий.
########################################################################
export LAUNCH_PARAMETERS="/S"
export PW_PREFIX_NAME="WORLD_OF_SEA_BATTLE"
export PW_VULKAN_USE="2"
export PW_AUTOINSTALL_EXE="${PORT_WINE_TMP_PATH}/installer.exe"
export PORTWINE_CREATE_SHORTCUT_NAME="World of Sea Battle"
WOSB_VERSION="$(curl -s --list-only --connect-timeout 3 https://www.worldofseabattle.com/download2 2>/dev/null | grep 'installer.exe' | awk -F'xsolla-launcher-update/' '{print $2}' | awk -F'/' '{print $1}')"
[[ -n "$WOSB_VERSION" ]] && print_info "Found version: $WOSB_VERSION" || fatal "Error while get version of WOSB INSTALLER."
start_portproton
if try_download "https://installer.launcher.xsolla.com/xlauncher-builds/xsolla-launcher-update/${WOSB_VERSION}/bin/installer.exe" "${PW_AUTOINSTALL_EXE}" no_mirror
then
pw_run "${PW_AUTOINSTALL_EXE}"
try_remove_file "${PW_AUTOINSTALL_EXE}"
if [[ -f "$WINEPREFIX/drive_c/Games/Wosb Launcher/launcher.exe" ]]
then export PW_EXE_FILE="$WINEPREFIX/drive_c/Games/Wosb Launcher/launcher.exe"
else export PW_EXE_FILE="$WINEPREFIX/drive_c/users/steamuser/AppData/Local/Wosb Launcher/launcher.exe"
fi
pw_create_unique_exe "wosb_launcher_pp"
kill_portwine
portwine_create_shortcut
fi
stop_portproton
+24 -14
View File
@@ -44,6 +44,17 @@ elif [[ -f "$HOME/.config/PortProtonQt.conf" ]] \
export PW_DISABLE_RUNTIME_DOWNLOAD=1
fi
if [[ -n "${XDG_CONFIG_HOME:-}" ]] \
&& [[ -f "$XDG_CONFIG_HOME/PortProtonQt.conf" ]] \
&& grep -q "auto_download_ppdb = False" "$XDG_CONFIG_HOME/PortProtonQt.conf" ; then
export PW_FIND_PPDB=0
elif [[ -f "$HOME/.config/PortProtonQt.conf" ]] \
&& grep -q "auto_download_ppdb = False" "$HOME/.config/PortProtonQt.conf" ; then
export PW_FIND_PPDB=0
else
export PW_FIND_PPDB=1
fi
export PORT_SCRIPTS_PATH PORT_IMG_PATH PORT_DATA_PATH PORT_CONF_PATH
export PW_LOG_FILE="${PORT_DATA_PATH}/PortProton.log"
@@ -94,7 +105,7 @@ if [[ "${1,,}" =~ \.ppack$ ]] ; then
export PW_NO_RESTART_PPDB="1"
export PW_DISABLED_CREATE_DB="1"
PW_EXE_FILE="$1"
elif [[ "${1,,}" =~ \.(exe|bat|cmd|msi|reg|lnk)$ ]] ; then
elif [[ "${1,,}" =~ \.(exe|bat|cmd|msi|reg)$ ]] ; then
if [[ -f "$1" ]] ; then
PW_EXE_FILE="$(realpath -s "$1")"
elif [[ -f "$OLDPWD/$1" ]] ; then
@@ -103,10 +114,6 @@ elif [[ "${1,,}" =~ \.(exe|bat|cmd|msi|reg|lnk)$ ]] ; then
PW_EXE_FILE="$1"
MISSING_DESKTOP_FILE="1"
fi
if [[ -n "${PW_EXE_FILE}" && "${1,,}" =~ \.lnk$ ]] ; then
get_lnk "${PW_EXE_FILE}"
PW_EXE_FILE="$(realpath "${link_path}" 2>/dev/null)"
fi
elif [[ "$1" =~ ^--(debug|launch|edit-db)$ && "${2,,}" =~ \.(exe|bat|cmd|msi|reg)$ ]] ; then
if [[ -f "$2" ]] ; then
PW_EXE_FILE="$(realpath -s "$2")"
@@ -250,7 +257,6 @@ get_wine_and_pfx () {
case "$1" in
--help)
help_info () {
files_from_autoinstall=$(ls "${PORT_SCRIPTS_PATH}/pw_autoinstall")
echo -e "Usage: [--repair] [--reinstall] [--autoinstall]
--repair Forces all scripts to be updated to a working state
@@ -278,9 +284,7 @@ case "$1" in
--clear_pfx Clear specified prefix, requires WINE version and prefix name
--mangohud-preview Starts MangoHud preview in vkcube (optional argument: inline MangoHud config)
--initial Initial setup command
--autoinstall --autoinstall and the name of what needs to be installed is given in the list below:
$(echo $files_from_autoinstall | awk '{for (i = 1; i <= NF; i++) {if (i % 10 == 0) {print ""} printf "%s ", $i}}')
--autoinstall Runs the specified .ppai autoinstall script
Usage examples:
portproton cli --launch /path/to/game.exe
@@ -294,7 +298,7 @@ Usage examples:
portproton cli --winetricks-list-all WINE_LG DEFAULT
portproton cli --winetricks-install WINE_LG DEFAULT --no-force corefonts
portproton cli --mangohud-preview \"fps,frametime,cpu_temp,gpu_temp\"
portproton cli --autoinstall [script_name_from_pw_autoinstall]
portproton cli --autoinstall /path/to/script.ppai
"
}
help_info
@@ -333,12 +337,18 @@ Usage examples:
export PW_USE_D3D_EXTRAS=1
export WINE_LARGE_ADDRESS_AWARE=0
trap "stop_portproton" SIGTERM SIGINT
if [[ "$2" =~ "/" ]] && [[ -f "$2" ]] ; then
if [[ "$2" =~ ^https?://.*\.ppai($|\?) ]] ; then
autoinstall_script="${PORT_WINE_TMP_PATH}/$(basename "${2%%\?*}")"
if try_download "$2" "${autoinstall_script}" no_mirror ; then
# shellcheck source=/dev/null
. "${autoinstall_script}"
try_remove_file "${autoinstall_script}"
else
fatal "Not found autoinstal script: $2"
fi
elif [[ -f "$2" ]] ; then
# shellcheck source=/dev/null
. "${2}"
elif [[ -f "${PORT_SCRIPTS_PATH}/pw_autoinstall/${2}" ]] ; then
# shellcheck source=/dev/null
. "${PORT_SCRIPTS_PATH}/pw_autoinstall/${2}"
else
fatal "Not found autoinstal script: $2"
fi
+2
View File
@@ -6,6 +6,7 @@ export PW_PROTON_LG_VER="PROTON_LG_10-30"
export PW_WINE_LG_VER="WINE_LG_11-10"
export PW_LIBS_VER="_v3.0.20260218"
export PW_PLUGINS_VER="_v20"
export D7VK_VAR_VER="v1.10"
export DXVK_NEW_VER="2.7.1-509"
export DXVK_OLD_VER="2.6.2"
export DXVK_SAREK_VER="sarek-1.11.0"
@@ -30,6 +31,7 @@ export PW_RT_MOUNT_RW=("/media" "/mnt" "/run/media/${USER}" "${PORT_DATA_PATH}")
check_variables PW_WINE_USE "PROTON_LG"
check_variables PROTON_USE_XALIA "0"
check_variables PW_USE_RUNTIME "1"
check_variables PW_USE_D7VK "0"
check_variables PW_USE_SPECIALK "0"
check_variables PW_USE_ESYNC "0"
check_variables PW_USE_FSYNC "0"
Binary file not shown.
+18102 -1054
View File
File diff suppressed because it is too large. Load diff
Binary file not shown.
File diff suppressed because it is too large. Load diff
Binary file not shown.
+5327
View File
File diff suppressed because it is too large. Load diff
Binary file not shown.
+13 -1
View File
@@ -1,4 +1,16 @@
portprotonqt (1.0) unstable; urgency=medium
portprotonqt (1.3.1) unstable; urgency=medium
* New upstream release.
-- Ivan Mazhukin <vanyamajukin@outlook.com> Fri, 17 Jul 2026 19:46:59 +0500
portprotonqt (1.3.0) unstable; urgency=medium
* New upstream release.
-- Ivan Mazhukin <vanyamajukin@outlook.com> Mon, 13 Jul 2026 16:18:05 +0300
portprotonqt (1.2.0) unstable; urgency=medium
* Add Debian packaging.
+2 -2
View File
@@ -20,9 +20,9 @@ Depends:
7zip,
cabextract,
curl,
desktop-file-utils,
file,
gawk,
jq,
libimage-exiftool-perl,
libsdl3-0,
mesa-utils,
@@ -38,9 +38,9 @@ Depends:
python3-pefile,
python3-pil,
python3-psutil,
python3-pygame,
python3-pyside6.qtcore,
python3-pyside6.qtgui,
python3-pyside6.qtmultimedia,
python3-pyside6.qtnetwork,
python3-pyside6.qtsvg,
python3-pyside6.qtwidgets,
+3
View File
@@ -1,8 +1,11 @@
usr/bin/portprotonqt
usr/bin/vk_gpu_info
usr/lib/python3/dist-packages/portprotonqt/
usr/lib/sysusers.d/portprotonqt.conf
usr/lib/udev/rules.d/60-portprotonqt.rules
usr/share/applications/ru.linux_gaming.PortProtonQt.desktop
usr/share/applications/ru.linux_gaming.PortProtonQt.log.desktop
usr/share/applications/ru.linux_gaming.PortProtonQt.silent.desktop
usr/share/bash-completion/completions/portprotonqt
usr/share/fish/vendor_completions.d/portprotonqt.fish
usr/share/icons/hicolor/scalable/apps/ru.linux_gaming.PortProtonQt.svg
+3
View File
@@ -19,3 +19,6 @@ execute_after_dh_auto_install:
debian/tmp/usr/share/zsh/site-functions/_portprotonqt
install -Dpm 0644 completions/portprotonqt.fish \
debian/tmp/usr/share/fish/vendor_completions.d/portprotonqt.fish
execute_after_dh_install:
dh_installsysusers
-81
View File
@@ -1,81 +0,0 @@
PortProton
\n
flatpak
Auto Install
Project-Id-Version:
Report-Msgid-Bugs-To:
POT-Creation-Date:
PO-Revision-Date:
Last-Translator:
Language:
Language-Team:
Plural-Forms:
MIME-Version:
Content-Type:
Content-Transfer-Encoding:
Generated-By:
start.sh
EGS
Stop Game
Fullscreen
Fulscreen
\t
Горячая
vkbasalt
dgVoodoo2
Zink
Vulkan
VKD3D
DirectX12
Prev Dir
Forced
GOverlay
Glide
all
futex
DLSS
fullscreen
ProtonGE
window
compositing
Zink
Use
bundled
dxvk
older games
versions
DLL Overrides
COMP
VKD3D
Select needed
CPUs
cores
PPDB
WINE
Proton
MangoHud
vkBasalt
logs
RAM
Process
GPU
frametime
temperature
Horizontal stretch
HDR10
sync
XWayland
servers
HDR
SDR
most
args
нт
initting
Signal
State
HLTB
Delete Folder
PPQT
SpecialK
Reshade
-33
View File
@@ -1,33 +0,0 @@
#!/usr/bin/env bash
set -euo pipefail
remote="${1:-origin}"
main_branch="${2:-main}"
weblate_branch="${3:-weblate}"
if ! git diff --quiet || ! git diff --cached --quiet; then
echo "Working tree is not clean."
exit 1
fi
git fetch "$remote" "$main_branch" "$weblate_branch"
git switch "$main_branch"
git merge --ff-only "$remote/$main_branch"
if git merge-base --is-ancestor "$remote/$weblate_branch" HEAD; then
echo "No new Weblate changes to merge."
elif git merge-base --is-ancestor HEAD "$remote/$weblate_branch"; then
git merge --ff-only "$remote/$weblate_branch"
else
git switch -C "$weblate_branch" "$remote/$weblate_branch"
git rebase "$main_branch"
git switch "$main_branch"
git merge --ff-only "$weblate_branch"
fi
python dev-scripts/l10n.py
git push "$remote" "$main_branch"
git push "$remote" "$main_branch:$weblate_branch"
echo "Weblate translations accepted and $weblate_branch synced to $main_branch."
Loaded 100 of 317 files, more files were not shown because too many files have changed in this diff. Show more