forked from Linux-Gaming/PortProtonQt
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c02a64f5bf
|
||
|
|
cd7bf7ba1e
|
||
|
|
8e964823f9
|
||
|
|
0e80f60ac7
|
||
|
|
f4cca57a1a | ||
|
|
bb64c6d2cd | ||
|
|
2774c67b7f | ||
|
|
2420c53c25 | ||
|
|
8e6a338575
|
||
|
|
2999eeeb97 | ||
|
|
8543698099 | ||
|
|
c4081f1933 | ||
|
|
d76f06d0b6
|
||
|
|
945b8ca24e
|
||
|
|
300c08626b
|
||
|
|
c573f45337
|
||
|
|
4321d215ea
|
||
|
|
662f0bf494
|
||
|
|
75f216ca6c
|
||
|
|
c462925477
|
||
|
|
2a34b08a0a
|
||
|
|
33fd22af23
|
||
|
|
a7d43068ed
|
||
|
|
d522ece132
|
||
|
|
dab39e2821 | ||
|
|
d7121db730 | ||
|
|
4a44d95055
|
||
|
|
ae084974dd
|
||
|
|
1cb7d08479 | ||
|
|
980fb964b7
|
||
|
|
7aa3b04ff4
|
||
|
|
68829bc00b
|
||
|
|
71a8ebd89a | ||
|
|
b17575dece
|
||
|
|
60135211e5
|
||
|
|
082be63f7d
|
||
|
|
fc5572a262
|
||
|
|
ab67e9bf4e
|
||
|
|
a7ae3b834f | ||
|
|
00b0c0fdfc
|
||
|
|
cf46e3b67f
|
||
|
|
044abe9543
|
||
|
|
07da5368b2
|
||
|
|
f40b93b6ed | ||
|
|
4db56869d1
|
||
|
|
0e782b3463
|
||
|
|
9bc1760107
|
||
|
|
ce6a28c2d9
|
||
|
|
a8dfc19b04
|
||
|
|
8e87c2183c
|
||
|
|
5070f1fdc7
|
||
|
|
5beec85ee8
|
||
|
|
a964b2882e
|
||
|
|
14c5b0406a
|
||
|
|
0adc218908
|
||
|
|
ccdf79f89f
|
||
|
|
650653399b
|
||
|
|
ad565ea3e5
|
||
|
|
771fc8990a
|
||
|
|
e8cc1f919e
|
||
|
|
9a6a83db23
|
||
|
|
4f823d4ebc
|
||
|
|
28d3333269
|
||
|
|
4bce23b83c
|
||
|
|
471a9c1099 | ||
|
|
a291c54e14
|
||
|
|
53bc799e4f
|
||
|
|
b48fbd3383
|
||
|
|
91b434a5d9
|
||
|
|
ac1ed68b86 | ||
|
|
50f1fbd1d6
|
||
|
|
fa93eacd3a
|
||
|
|
1f72d6edb6
|
||
|
|
605b80850f
|
||
|
|
78d04a7a5f
|
||
|
|
007713f1be
|
||
|
|
a28465fd7f
|
||
|
|
21696eea9b
|
||
|
|
4d732c8f22
|
||
|
|
8cee173ed2
|
||
|
|
02ab53c996
|
||
|
|
04ca284807
|
||
|
|
c12e1996cb
|
||
|
|
76e922a431
|
||
|
|
51e903e961 | ||
|
|
052a804c14 | ||
|
|
f2a2013ba7
|
||
|
|
0f394b8974 | ||
|
|
a1817abe65
|
||
|
|
1a48635582
|
||
|
|
183dbb8253 | ||
|
|
d2f21aa585
|
||
|
|
eb6e4dcb40
|
||
|
|
a1f2913e88
|
||
|
|
841da7eed0
|
||
|
|
bb1f3ba1ee
|
||
|
|
a3b9e8b5e1
|
||
|
|
c7f3ee79bb
|
||
|
|
2aab2b0286
|
||
|
|
ca3fd2947a
|
||
|
|
627d708e81
|
||
|
|
513c9872da
|
||
|
|
26aa44c0d4
|
||
|
|
53664b2ab7
|
||
|
|
6e07e56741 | ||
|
|
dd22838e25
|
||
|
|
fa721ad84c
|
||
|
|
8a1a1582a2
|
||
|
|
4a2649a33d
|
||
|
|
cd39183e47
|
||
|
|
de004667d4
|
||
|
|
8c0f8bb657
|
||
|
|
ae8c264da7
|
||
|
|
b1f5b001b2
|
||
|
|
cf80c92a5d
|
||
|
|
2c1cd96e43
|
||
|
|
ca0293474b
|
||
|
|
3408d71003
|
||
|
|
4a0378686d
|
||
|
|
30ddac4cab
|
||
|
|
cb2c3baf10
|
||
|
|
bf65f451d1
|
||
|
|
7a02b6b666
|
||
|
|
0b5013df2b
|
||
|
|
2e7a977fec
|
||
|
|
dc0a402113
|
||
|
|
d53a5f7ce9
|
||
|
|
b0b1bf2fcb
|
||
|
|
7de71798b9
|
||
|
|
39e92cf437 | ||
|
|
d7071c84e7 | ||
|
|
4dcd845978
|
||
|
|
4dcf257a38
|
||
|
|
9782de831b | ||
|
|
4d367abcc5
|
||
|
|
ced8e6a2b9
|
||
|
|
72821f1ac6
|
||
|
|
a46959f7db
|
||
|
|
31f28eba1e
|
||
|
|
33f26f9559
|
||
|
|
28884e56c1
|
||
|
|
9bdbbb6b30
|
||
|
|
24eb968371
|
||
|
|
89090409a4
|
||
|
|
813275a049
|
||
|
|
674bcec476
|
||
|
|
4210f43130
|
||
|
|
7518e948e7
|
||
|
|
1543b3b42b
|
||
|
|
5a9bd455e1
|
||
|
|
239ace42c9 | ||
|
|
6c43289c85 | ||
|
|
ca32ce4e25 | ||
|
|
3fbabc0267
|
||
|
|
ef5a302ff5
|
||
|
|
d05665be15
|
||
|
|
b51174c172
|
||
|
|
169ff005ce
|
||
|
|
6792abdac6
|
||
|
|
f2f11b608e
|
||
|
|
2fd91b9556
|
||
|
|
40b50de937
|
||
|
|
f39267e979
|
||
|
|
710c876374
|
||
|
|
d00d789246
|
||
|
|
edcdb7cef4
|
||
|
|
03cf25492f
|
||
|
|
9f84d2e9c3
|
||
|
|
38c162f38a
|
||
|
|
41046f3439
|
||
|
|
5428cd311b
|
||
|
|
21580d76ba
|
||
|
|
174e439509
|
||
|
|
b7f8e1edf2
|
||
|
|
b52785791a
|
||
|
|
b280dc1f54
|
||
|
|
1775911416
|
||
|
|
9f47dafb24
|
||
|
|
0996b90ba3
|
||
|
|
07e3850bce | ||
|
|
4536ce09bd | ||
|
|
4d61cb3316 | ||
|
|
c40caeae5c
|
||
|
|
74085a2d0b
|
||
|
|
3d55994962 | ||
|
|
769c84edbd | ||
|
|
4ec1174bcd | ||
|
|
6fe2fe08ba | ||
|
|
cda1340293 | ||
|
|
773569773e | ||
|
|
f9cd038aa1 | ||
|
|
c0bae645e4
|
||
|
|
6c63815ec3
|
||
|
|
5c006a5b7e | ||
|
|
c6a9031ee2
|
||
|
|
91a3cb4c26
|
||
|
|
c93f10c2a2
|
||
|
|
ab055f3708
|
||
|
|
823fff912e
|
||
|
|
100556e1d0
|
||
|
|
d639283db5 | ||
|
|
7f4d06f825 | ||
|
|
b4baf8e230 | ||
|
|
3f6a4f538d
|
||
|
|
0ac7959031
|
||
|
|
3397e633c6
|
||
|
|
9abeddfb51
|
||
|
|
754fc039f9
|
||
|
|
0b9b2f6e48
|
||
|
|
b8fd7aff1b
|
||
|
|
92f84d9c9c
|
||
|
|
228db2bbf1
|
||
|
|
5277f88b80
|
||
|
|
f0de078dcd
|
||
|
|
ff20458ffb
|
||
|
|
22956d7140 | ||
|
|
f31c8409cc | ||
|
|
dc2eaa71ba
|
||
|
|
e66dffeef0
|
||
|
|
eac9583252
|
||
|
|
39df4d7946
|
||
|
|
9ffb563280
|
||
|
|
c0c4eea813
|
||
|
|
27ea663f7d
|
||
|
|
ca851735e6
|
||
|
|
ac1270a7fd
|
||
|
|
8e76ee8789
|
||
|
|
f11f7d594b
|
||
|
|
2014a89c27
|
||
|
|
4ae38a1f55
|
||
|
|
a3853ef1a6
|
||
|
|
f3ac329e54
|
||
|
|
94f2c6df2e
|
||
|
|
7fccaa4b0d
|
||
|
|
9c1a80add5
|
||
|
|
6b859f6bdf
|
||
|
|
aacabd81d9
|
||
|
|
b1dc9d87dd | ||
|
|
63b8d26b1c | ||
|
|
858314a21c
|
||
|
|
622baaa31c
|
||
|
|
2e93af677c
|
||
|
|
f55701b963
|
||
|
|
188f2925ba
|
||
|
|
ce334fb232
|
||
|
|
f4eca46112
|
||
|
|
811083748c
|
||
|
|
6bd8593300
|
||
|
|
aa629e79a2
|
||
|
|
3508248e53 | ||
|
|
abe8ee0575 | ||
|
|
d0e9d721d1 | ||
|
|
343ed115a1 | ||
|
|
9f78196c8d
|
||
|
|
bc4748ca56 | ||
|
|
5718584809 | ||
|
|
1fb4ced62f | ||
|
|
98cfa3e50e
|
||
|
|
006b6a6dd1
|
||
|
|
8ab3b796f3
|
||
|
|
3730fa1183
|
||
|
|
d6d415d184
|
||
|
|
af90c5fdff
|
||
|
|
e8e3fefbf0
|
||
|
|
9c29a66314 | ||
|
|
c26dd358e5 | ||
|
|
ad469c6755 | ||
|
|
fad86df55f
|
||
|
|
20ebb51f9a
|
||
|
|
85b7f6a70c
|
||
|
|
7542be7bfd
|
||
|
|
9dce0bc2ef
|
||
|
|
d813be7e29
|
||
|
|
b460fd507e
|
||
|
|
b377759db4
|
||
|
|
ba3233dabf
|
||
|
|
aeaef9b6d7
|
||
|
|
08808cf975
|
||
|
|
b23a83c96d
|
||
|
|
69e38452bf
|
||
|
|
dd66585c52
|
||
|
|
b8e0359367
|
||
|
|
8d264ac743
|
||
|
|
732f5e5f60
|
||
|
|
2b735aadbd
|
||
|
|
0cef434c2e
|
||
|
|
757bd34885
|
||
|
|
da79f07780
|
||
|
|
55d5b097d9
|
||
|
|
650844c704
|
||
|
|
c4e3e30bf7
|
||
|
|
97d6d54c93
|
||
|
|
be09e152e4
|
||
|
|
54df09f94a | ||
|
|
eb39264578 | ||
|
|
f9ea5e992b | ||
|
|
81637c3729
|
||
|
|
80a79ed45b
|
||
|
|
c6b997366f
|
||
|
|
2bdcf107f2
|
||
|
|
25f3e526ae
|
||
|
|
d081ae68db
|
||
|
|
d1b8f0fa93
|
||
|
|
23e19a14d0
|
||
|
|
f9ef6751dd
|
||
|
|
6363c08781
|
||
|
|
7eb2934b44
|
||
|
|
2519ccd6d0
|
||
|
|
da204786c1
|
||
|
|
f6e871feaf
|
||
|
|
a9e0304437
|
||
|
|
994769d3cf
|
||
|
|
6fd2e9b34a
|
||
|
|
387133b87f
|
||
|
|
8bd6e30e0b
|
||
|
|
b168e32fc8
|
||
|
|
1812b8de5f
|
||
|
|
cfc4532edd
|
||
|
|
50d6d952dd
|
||
|
|
18f277e707
|
||
|
|
a769263aa1
|
||
|
|
159cd49a16
|
||
|
|
68c8ca07b9 | ||
|
|
ee22a5d8fb
|
||
|
|
48f156e433
|
||
|
|
85b199d5ea
|
||
|
|
8d0bab134e
|
||
|
|
5525a6988a
|
||
|
|
d6dc7db5e4
|
||
|
|
09313e30cf
|
||
|
|
8d539469a3
|
||
|
|
45f9b2950f
|
||
|
|
0d6df9ed6c
|
||
|
|
b92eb1fe9d
|
||
|
|
b200d73879
|
||
|
|
335f3223db
|
No files matched your search
@@ -2,14 +2,9 @@ name: Nightly Build - AppImage, Arch, Fedora
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
branch:
|
||||
description: 'Branch to build'
|
||||
required: false
|
||||
default: 'main'
|
||||
|
||||
env:
|
||||
BUILD_BRANCH: ${{ inputs.branch || 'main' }}
|
||||
BUILD_BRANCH: ${{ github.ref_name }}
|
||||
PKGDEST: "/tmp/portprotonqt"
|
||||
PACKAGE: "portprotonqt"
|
||||
|
||||
@@ -18,7 +13,7 @@ jobs:
|
||||
name: Build AppImage
|
||||
runs-on: ubuntu-22.04
|
||||
container:
|
||||
image: archlinux:base-devel@sha256:7c81df532d6307c5bccb3d2561c90bfc981e6c4384d2a61c9e49b7f2d8aa27c0
|
||||
image: archlinux:base-devel@sha256:b3c1ff749031ca2e06df1cd83fda74df13206a047b7b0f96b818825d9dc60785
|
||||
options: --privileged --device /dev/fuse
|
||||
steps:
|
||||
- name: Prepare container
|
||||
@@ -65,7 +60,7 @@ jobs:
|
||||
run: |
|
||||
dnf install -y git rpmdevtools meson ninja-build python3-devel \
|
||||
systemd-rpm-macros vulkan-loader-devel redhat-rpm-config nodejs npm \
|
||||
gcc
|
||||
gcc gettext
|
||||
|
||||
- name: Setup rpmbuild environment
|
||||
run: |
|
||||
@@ -99,7 +94,7 @@ jobs:
|
||||
name: Build Arch Package
|
||||
runs-on: ubuntu-22.04
|
||||
container:
|
||||
image: archlinux:base-devel@sha256:7c81df532d6307c5bccb3d2561c90bfc981e6c4384d2a61c9e49b7f2d8aa27c0
|
||||
image: archlinux:base-devel@sha256:b3c1ff749031ca2e06df1cd83fda74df13206a047b7b0f96b818825d9dc60785
|
||||
|
||||
steps:
|
||||
- name: Prepare container
|
||||
|
||||
@@ -8,7 +8,7 @@ on:
|
||||
|
||||
env:
|
||||
# Common version, will be used for tagging the release
|
||||
VERSION: 0.1.11
|
||||
VERSION: 0.1.12
|
||||
PKGDEST: "/tmp/portprotonqt"
|
||||
PACKAGE: "portprotonqt"
|
||||
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||
@@ -111,7 +111,7 @@ jobs:
|
||||
run: |
|
||||
dnf install -y git rpmdevtools meson ninja-build python3-devel \
|
||||
systemd-rpm-macros vulkan-loader-devel redhat-rpm-config nodejs npm \
|
||||
gcc
|
||||
gcc gettext
|
||||
|
||||
- name: Setup rpmbuild environment
|
||||
run: |
|
||||
|
||||
@@ -65,7 +65,7 @@ jobs:
|
||||
needs: changes
|
||||
if: needs.changes.outputs.appimage == 'true' || github.event_name == 'workflow_dispatch'
|
||||
container:
|
||||
image: archlinux:base-devel@sha256:7c81df532d6307c5bccb3d2561c90bfc981e6c4384d2a61c9e49b7f2d8aa27c0
|
||||
image: archlinux:base-devel@sha256:b3c1ff749031ca2e06df1cd83fda74df13206a047b7b0f96b818825d9dc60785
|
||||
options: --privileged --device /dev/fuse
|
||||
steps:
|
||||
- name: Prepare container
|
||||
@@ -146,7 +146,7 @@ jobs:
|
||||
needs: changes
|
||||
if: needs.changes.outputs.arch == 'true' || github.event_name == 'workflow_dispatch'
|
||||
container:
|
||||
image: archlinux:base-devel@sha256:7c81df532d6307c5bccb3d2561c90bfc981e6c4384d2a61c9e49b7f2d8aa27c0
|
||||
image: archlinux:base-devel@sha256:b3c1ff749031ca2e06df1cd83fda74df13206a047b7b0f96b818825d9dc60785
|
||||
|
||||
steps:
|
||||
- name: Prepare container
|
||||
|
||||
@@ -23,7 +23,7 @@ jobs:
|
||||
- uses: https://gitea.com/actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
||||
|
||||
- name: Set up Node.js
|
||||
uses: https://gitea.com/actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6
|
||||
uses: https://gitea.com/actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
|
||||
with:
|
||||
node-version: 20
|
||||
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
name: renovate
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '0 0 * * 0'
|
||||
|
||||
jobs:
|
||||
renovate:
|
||||
runs-on: ubuntu-latest
|
||||
container: ghcr.io/renovatebot/renovate:latest@sha256:eec497df1ca6ebe8bccf577c5dab8825ab5f3673a42a58f066e31dbf070664e6
|
||||
steps:
|
||||
- uses: https://gitea.com/actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
||||
|
||||
- name: Set up Node.js
|
||||
uses: https://gitea.com/actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6
|
||||
with:
|
||||
node-version: 20
|
||||
|
||||
- name: Install uv manually
|
||||
run: |
|
||||
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||
. $HOME/.local/bin/env
|
||||
uv --version
|
||||
|
||||
- name: Download external renovate config
|
||||
run: |
|
||||
mkdir -p /tmp/renovate-config
|
||||
curl -fsSL "https://git.linux-gaming.ru/Linux-Gaming/renovate-config/raw/branch/main/config.js" \
|
||||
-o /tmp/renovate-config/config.js
|
||||
|
||||
- name: Run Renovate
|
||||
run: renovate
|
||||
env:
|
||||
RENOVATE_CONFIG_FILE: "/tmp/renovate-config/config.js"
|
||||
LOG_LEVEL: "debug"
|
||||
RENOVATE_TOKEN: ${{ secrets.RENOVATE_TOKEN }}
|
||||
RENOVATE_GITHUB_COM_TOKEN: ${{ secrets.RENOVATE_GITHUB_COM_TOKEN }}
|
||||
+11
@@ -39,3 +39,14 @@ Thumbs.db
|
||||
|
||||
# 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
|
||||
+10
-1
@@ -28,7 +28,16 @@ repos:
|
||||
language: system
|
||||
types_or: [python, pyi]
|
||||
require_serial: true
|
||||
exclude: '^portprotonqt/themes/[^/]+/styles\.py$'
|
||||
exclude: 'themes/.*/styles\.py$'
|
||||
|
||||
- repo: local
|
||||
hooks:
|
||||
- id: bash-n
|
||||
name: bash -n
|
||||
entry: bash -c 'for file in "$@"; do bash -n "$file" || exit 1; done' --
|
||||
language: system
|
||||
files: ^build-aux/share/portproton/scripts/
|
||||
types: [shell]
|
||||
|
||||
- repo: local
|
||||
hooks:
|
||||
|
||||
@@ -0,0 +1,817 @@
|
||||
# PortProtonQt — AI Agent Guidelines
|
||||
|
||||
**Project:** PortProtonQt — GUI for PortProton, Steam, Epic Games Store
|
||||
**Language:** Python 3.10+
|
||||
**Platform:** Linux (POSIX)
|
||||
**License:** GPL-3.0
|
||||
**Build:** Meson + uv
|
||||
|
||||
---
|
||||
|
||||
**Summary:** AI agents MUST behave as conservative patching assistants, prioritizing minimal changes and existing patterns over architectural refactoring or code cleanup. AI MUST NOT perform architectural improvements unless explicitly requested.
|
||||
|
||||
**Scope:** These guidelines apply exclusively to AI-generated code. Documentation updates and human maintainers are exempt from line limits and these constraints.
|
||||
|
||||
## License and Attribution
|
||||
|
||||
- All code MUST be compatible with GPL-3.0.
|
||||
- Use appropriate SPDX license identifiers where applicable.
|
||||
- AI agents MUST NOT add `Signed-off-by` tags.
|
||||
|
||||
When AI contributes to the project, add an `Assisted-by` tag:
|
||||
|
||||
`Assisted-by: AGENT_NAME:MODEL_VERSION`
|
||||
|
||||
Where:
|
||||
- `AGENT_NAME` is the AI agent or framework name.
|
||||
- `MODEL_VERSION` is the specific model version.
|
||||
|
||||
Example:
|
||||
|
||||
`Assisted-by: Claude:claude-3-opus`
|
||||
|
||||
---
|
||||
|
||||
## Core Principles
|
||||
|
||||
| Principle | Required | Forbidden |
|
||||
|-----------|----------|-----------|
|
||||
| KISS | New/rewritten functions ≤50 lines | Deep nesting |
|
||||
| YAGNI | Concrete code | Future abstractions |
|
||||
| DRY | Extract methods (if directly related to task) | Copy-paste |
|
||||
| SRP | 1 task per method | God functions |
|
||||
| Linux | POSIX paths, shebangs | Windows-specific code |
|
||||
| Minimal changes | Modify relevant section only | Rewrite entire files |
|
||||
|
||||
**Priority order (highest to lowest):**
|
||||
|
||||
1. Minimal changes (overrides DRY, SRP)
|
||||
2. Security (no shell=True, no hardcoded credentials)
|
||||
3. Linux compatibility
|
||||
4. KISS / YAGNI
|
||||
5. DRY / SRP
|
||||
|
||||
**When principles conflict:**
|
||||
|
||||
- Prefer minimal diff over extracting methods
|
||||
- Prefer existing patterns over "correct" refactoring
|
||||
- Prefer small targeted fix over comprehensive cleanup
|
||||
- Never break security for code quality
|
||||
- Remove duplicates only if directly related to current task
|
||||
- Do not split untouched legacy functions only to satisfy line limits
|
||||
- Do not rewrite untouched legacy files or blocks only to satisfy metrics
|
||||
|
||||
---
|
||||
|
||||
## Code Metrics
|
||||
|
||||
| Check | Limit |
|
||||
|-------|-------|
|
||||
| Functions | ≤50 lines, ≤4 params (required for new/fully rewritten functions) |
|
||||
| Files | ≤800 lines (required for new/fully rewritten files) |
|
||||
| Nesting | ≤4 levels (required in new/modified code) |
|
||||
| Comments | English, 1-2 lines max |
|
||||
| Indentation | 4 spaces (no tabs) |
|
||||
| Whitespace | No trailing spaces |
|
||||
| Blank lines | No excessive blank lines |
|
||||
| EOF | Exactly one newline |
|
||||
| Commits | English, ≤72 chars |
|
||||
|
||||
---
|
||||
|
||||
## Forbidden Patterns
|
||||
|
||||
```python
|
||||
# NEVER: 6+ parameters
|
||||
def process_game(user, ctx, log, val, map, cache): ...
|
||||
|
||||
# NEVER: Deep nesting
|
||||
if c1:
|
||||
if c2:
|
||||
if c3:
|
||||
if c4: ...
|
||||
|
||||
# NEVER: print statements
|
||||
print(f"Game {name} started")
|
||||
|
||||
# NEVER: shell=True
|
||||
subprocess.run(cmd, shell=True)
|
||||
|
||||
# NEVER: Hardcoded credentials
|
||||
API_KEY = "sk-abc123"
|
||||
|
||||
# NEVER: Path traversal
|
||||
file_path = f"/data/{user_filename}"
|
||||
|
||||
# NEVER: Hardcoded styles or constants (colors, sizes, etc.)
|
||||
shadow.setBlurRadius(20)
|
||||
shadow.setColor(QColor(0, 0, 0, 150))
|
||||
label.setStyleSheet("color: #bbbbbb;")
|
||||
QColor(128, 128, 128)
|
||||
```
|
||||
|
||||
```python
|
||||
# ALWAYS: ≤4 parameters
|
||||
def process_game(game_id: str, config: dict) -> Game:
|
||||
"""Process game data."""
|
||||
...
|
||||
|
||||
# ALWAYS: Early returns
|
||||
if not condition1:
|
||||
return
|
||||
if not condition2:
|
||||
return
|
||||
|
||||
# ALWAYS: Logging
|
||||
from portprotonqt.logger import get_logger
|
||||
logger = get_logger(__name__)
|
||||
logger.info("Game %s started", name)
|
||||
|
||||
# ALWAYS: Explicit subprocess arguments
|
||||
subprocess.run(["cmd", "arg1", "arg2"])
|
||||
|
||||
# ALWAYS: Environment variables
|
||||
API_KEY = os.getenv("API_KEY")
|
||||
|
||||
# ALWAYS: Sanitize paths
|
||||
file_path = os.path.join(BASE_DIR, os.path.basename(user_filename))
|
||||
|
||||
# ALWAYS: Use theme constants for styles
|
||||
shadow.setBlurRadius(self.theme.shadow_blur_radius)
|
||||
shadow.setColor(QColor(self.theme.color_shadow_card))
|
||||
label.setStyleSheet(self.theme.CONTENT_STYLE)
|
||||
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
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Code Modification Rules
|
||||
|
||||
- NEVER rewrite entire file unless explicitly requested
|
||||
- Modify only the relevant section
|
||||
- Preserve existing architecture and naming
|
||||
- Do not auto-format unrelated code
|
||||
- Do not reorder imports unless necessary
|
||||
- Do not introduce abstractions without request
|
||||
- Do not change logging system
|
||||
- Do not change public APIs without reason
|
||||
- Do not add dependencies unless required
|
||||
- Do not refactor unrelated code
|
||||
- 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**
|
||||
- Never invent modules
|
||||
- Do not move files unless requested
|
||||
- Do not create new files for organization (unless task requires a new module)
|
||||
- No circular imports
|
||||
- Prefer dedicated functions for subprocess calls when practical within task scope
|
||||
- No shared mutable global state (except logger and explicit cache/session infrastructure)
|
||||
|
||||
**ALWAYS:**
|
||||
|
||||
- Minimal diff
|
||||
- Targeted changes only
|
||||
- Preserve existing patterns
|
||||
- Keep surrounding code unchanged
|
||||
|
||||
---
|
||||
|
||||
## LLM Prohibitions
|
||||
|
||||
**Specific prohibitions for AI-generated code:**
|
||||
|
||||
- Add type hints to existing code unless requested (new code MUST include type hints)
|
||||
- Replace existing patterns with "better" alternatives
|
||||
- Consolidate similar code blocks
|
||||
- Extract methods or functions without request
|
||||
- Add validation or error handling outside the modified block unless it fixes a security issue or directly supports the current change
|
||||
- Generate boilerplate or scaffolding
|
||||
- Add configuration options
|
||||
- Create new files for "organization" (unless explicitly requested for a new module)
|
||||
- Split or merge existing modules
|
||||
- Change function signatures
|
||||
- Modify docstrings unnecessarily
|
||||
- Add or remove blank lines for "style"
|
||||
- Normalize or standardize code patterns
|
||||
- Invent CLI arguments, config files, API endpoints, environment variables, theme structures, or localization keys
|
||||
|
||||
---
|
||||
|
||||
## AI Permissions
|
||||
|
||||
AI agents MAY:
|
||||
- Fix obvious bugs within the modified block
|
||||
- Improve variable naming inside the modified block
|
||||
- Add missing logging if required by policy
|
||||
- Add missing validation or error handling in new/modified code when required by this policy
|
||||
- Add missing type hints in new functions
|
||||
|
||||
---
|
||||
|
||||
## Performance Rules
|
||||
|
||||
- No blocking I/O in UI thread
|
||||
- No synchronous HTTP in UI thread
|
||||
- Cache API responses in `~/.cache/PortProtonQt`
|
||||
- Avoid repeated disk reads in loops
|
||||
- Avoid O(n²) in game lists
|
||||
- Lazy load images
|
||||
- Limit threads to CPU cores
|
||||
|
||||
### Clarification: "No Shared Mutable Global State" Does NOT Mean Removing Caches
|
||||
|
||||
Rule intent: avoid shared mutable globals that hold application state or cause hidden side effects.
|
||||
|
||||
This does not prohibit:
|
||||
- Module-level cache constants (e.g., cache TTL values)
|
||||
- Dedicated cache managers or classes with explicit lifecycle
|
||||
- Disk caches under `~/.cache/PortProtonQt`
|
||||
- `requests.Session()` objects if they are encapsulated and not mutated unpredictably
|
||||
|
||||
Do not delete or disable caching or downloaders to satisfy this rule. Caching is required by the Performance Rules ("Cache API responses in `~/.cache/PortProtonQt`" and "Avoid repeated disk reads in loops").
|
||||
|
||||
---
|
||||
|
||||
## PySide6 Rules
|
||||
|
||||
- No business logic in widgets
|
||||
- Use signals/slots (no direct coupling)
|
||||
- No heavy operations in paintEvent
|
||||
- Use methods instead of lambda for complex logic
|
||||
- Use QThread for long tasks
|
||||
|
||||
---
|
||||
|
||||
## Refactoring Constraints
|
||||
|
||||
- Max 1 business module per task (unless explicitly requested)
|
||||
- Related technical files are allowed in the same task (`meson.build`, tests, theme constants)
|
||||
- Preserve git blame
|
||||
- Avoid renaming unless necessary
|
||||
|
||||
---
|
||||
|
||||
## When Uncertain
|
||||
|
||||
Ask before proceeding if unsure about:
|
||||
- Architecture
|
||||
- Naming
|
||||
- Design decisions
|
||||
|
||||
Do not assume conventions. Never invent behavior.
|
||||
|
||||
---
|
||||
|
||||
## Development Workflow
|
||||
|
||||
```bash
|
||||
# Setup
|
||||
uv python install 3.10
|
||||
uv sync
|
||||
source .venv/bin/activate
|
||||
pre-commit install --install-hooks
|
||||
|
||||
# Run
|
||||
portprotonqt
|
||||
|
||||
# Manual checks
|
||||
pre-commit run --all-files
|
||||
|
||||
# Build
|
||||
meson setup builddir && meson compile -C builddir
|
||||
|
||||
# Localization
|
||||
python dev-scripts/l10n.py --update-all
|
||||
python dev-scripts/l10n.py
|
||||
|
||||
# Commit
|
||||
git commit -m "feat: description in English ≤72 chars"
|
||||
```
|
||||
|
||||
### Pre-commit Hooks
|
||||
|
||||
| Hook | Checks |
|
||||
|------|--------|
|
||||
| uv-lock | uv.lock up to date |
|
||||
| ruff-check | Linting (E, W, F, B, C4, UP) |
|
||||
| pyright | Type checking |
|
||||
| bash-n | Bash syntax check for `build-aux/share/portproton/scripts/` |
|
||||
| check-meson | meson.build syntax + files |
|
||||
| check-qss-properties | Theme QSS validation |
|
||||
| trailing-whitespace | Whitespace cleanup |
|
||||
| end-of-file-fixer | EOF newline |
|
||||
|
||||
### Linting and Type-Checking
|
||||
|
||||
AI agents MUST NOT run linting or type-checking tools directly.
|
||||
|
||||
#### Forbidden
|
||||
|
||||
- Running `ruff`
|
||||
- Running `pyright`
|
||||
- Running `uv run ruff`
|
||||
- Running `uv run pyright`
|
||||
- Running any linter/type checker binary directly
|
||||
- Installing dev tools automatically
|
||||
|
||||
These tools are executed ONLY via pre-commit hooks.
|
||||
|
||||
#### Allowed
|
||||
|
||||
- `pre-commit run --all-files`
|
||||
- `pre-commit run ruff-check`
|
||||
- `pre-commit run pyright`
|
||||
|
||||
#### Rationale
|
||||
|
||||
`ruff` and `pyright` are managed by pre-commit.
|
||||
Direct execution bypasses project configuration and is forbidden.
|
||||
|
||||
Do not attempt to execute binaries manually.
|
||||
|
||||
---
|
||||
|
||||
## AI Agent Checklist
|
||||
|
||||
### Writing Code
|
||||
|
||||
- [ ] New/rewritten functions ≤50 lines, ≤4 params
|
||||
- [ ] New/modified code nesting ≤4 levels
|
||||
- [ ] LF line endings, 4-space indent
|
||||
- [ ] No excessive blank lines, no trailing whitespace
|
||||
- [ ] Type hints (required for new code)
|
||||
- [ ] Logging via `portprotonqt.logger`
|
||||
- [ ] New/modified code handles expected/recoverable failures
|
||||
- [ ] New installable Python files added to `portprotonqt/meson.build`
|
||||
- [ ] Comments in English, concise
|
||||
- [ ] No circular imports introduced by the change
|
||||
- [ ] Prefer dedicated functions for subprocess calls when practical within task scope
|
||||
- [ ] No shared mutable global state (except logger and explicit cache/session infrastructure)
|
||||
- [ ] No blocking calls introduced in the UI thread
|
||||
- [ ] **No hardcoded styles or constants (use theme constants)**
|
||||
- [ ] **New constants added to theme files only**
|
||||
|
||||
### Refactoring
|
||||
|
||||
- [ ] No code duplicates (only if directly related to current task)
|
||||
- [ ] No unused imports
|
||||
- [ ] No commented-out code
|
||||
- [ ] No TODO without tickets
|
||||
- [ ] Clear variable names
|
||||
|
||||
### Dependencies
|
||||
|
||||
- [ ] Prefer standard library
|
||||
- [ ] No heavy frameworks
|
||||
- [ ] No async frameworks (use QThread instead)
|
||||
- [ ] No additional logging libraries
|
||||
- [ ] License GPL-3.0 compatible
|
||||
- [ ] If dependencies are added: added to `pyproject.toml`
|
||||
- [ ] If dependencies change: `uv lock` run
|
||||
|
||||
---
|
||||
|
||||
## Error Handling Policy
|
||||
|
||||
### When to Rethrow
|
||||
|
||||
| Condition | Action | Example |
|
||||
|-----------|--------|---------|
|
||||
| Cannot handle locally | Rethrow | API errors in business logic |
|
||||
| Need to add context | Wrap & rethrow | `raise ValueError(f"Invalid game ID: {game_id}") from e` |
|
||||
| Public API boundary | Rethrow | Let caller decide |
|
||||
| Expected & recoverable | Handle with fallback (log when useful) | Cache miss → fetch from source |
|
||||
|
||||
```python
|
||||
# Bad: Silent swallow
|
||||
try:
|
||||
data = load_config()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# Good: Rethrow with context
|
||||
try:
|
||||
data = load_config()
|
||||
except FileNotFoundError as e:
|
||||
raise ConfigError(f"Config not found: {path}") from e
|
||||
```
|
||||
|
||||
### When to Log and Continue
|
||||
|
||||
| Condition | Action | Example |
|
||||
|-----------|--------|---------|
|
||||
| Non-critical failure | Log, continue | Thumbnail download failed |
|
||||
| Fallback available | Log, use fallback | Cache miss → network request |
|
||||
| Best-effort operation | Log, skip | Optional metadata |
|
||||
| User notification only | Log, notify UI | Network timeout |
|
||||
|
||||
```python
|
||||
# Log and continue for non-critical
|
||||
try:
|
||||
cover = download_cover(url)
|
||||
except requests.RequestException as e:
|
||||
logger.warning("Cover download failed: %s", e)
|
||||
cover = QPixmap() # Use placeholder
|
||||
```
|
||||
|
||||
### When to Fail Fast
|
||||
|
||||
| Condition | Action | Example |
|
||||
|-----------|--------|---------|
|
||||
| Critical dependency | Raise immediately | Database connection lost |
|
||||
| Data corruption | Raise immediately | Invalid config format |
|
||||
| Security violation | Raise immediately | Path traversal attempt |
|
||||
| Unrecoverable state | Raise immediately | Missing required file |
|
||||
|
||||
```python
|
||||
# Fail fast for critical
|
||||
if not config_path.exists():
|
||||
raise ConfigError(f"Required config missing: {config_path}")
|
||||
```
|
||||
|
||||
### Exception Hierarchy
|
||||
|
||||
```python
|
||||
# Base exception for application errors
|
||||
class PortProtonError(Exception):
|
||||
"""Base exception for PortProtonQt."""
|
||||
|
||||
# Domain-specific exceptions
|
||||
class ConfigError(PortProtonError):
|
||||
"""Configuration-related errors."""
|
||||
|
||||
class APIError(PortProtonError):
|
||||
"""External API errors."""
|
||||
|
||||
class ValidationError(PortProtonError):
|
||||
"""Input validation errors."""
|
||||
|
||||
class ParseError(PortProtonError):
|
||||
"""Parsing-related errors."""
|
||||
```
|
||||
|
||||
### Error Handling Patterns
|
||||
|
||||
```python
|
||||
# Pattern 1: Guard clauses for validation
|
||||
def process_game(game_id: str) -> Game:
|
||||
if not game_id:
|
||||
raise ValidationError("Game ID required")
|
||||
...
|
||||
|
||||
# Pattern 2: Context manager for resources
|
||||
with open(path) as f:
|
||||
data = json.load(f)
|
||||
|
||||
# Pattern 3: Specific exception handling
|
||||
try:
|
||||
response = requests.get(url, timeout=5)
|
||||
except requests.Timeout:
|
||||
logger.warning("Request timeout for %s", url)
|
||||
return None
|
||||
except requests.ConnectionError:
|
||||
logger.error("Connection failed for %s", url)
|
||||
raise APIError("Network unavailable") from None
|
||||
|
||||
# Pattern 4: Exception chaining
|
||||
try:
|
||||
value = int(text)
|
||||
except ValueError as e:
|
||||
raise ParseError(f"Invalid integer: {text}") from e
|
||||
```
|
||||
|
||||
### UI Thread Rules
|
||||
|
||||
| Context | Strategy |
|
||||
|---------|----------|
|
||||
| UI thread | Never block, use signals for errors |
|
||||
| Worker thread | Catch, emit error signal |
|
||||
| Async operations | Return error in result tuple |
|
||||
|
||||
```python
|
||||
# Worker thread pattern
|
||||
def run_in_thread():
|
||||
try:
|
||||
result = long_operation()
|
||||
success_signal.emit(result)
|
||||
except Exception as e:
|
||||
logger.error("Operation failed: %s", e)
|
||||
error_signal.emit(str(e))
|
||||
```
|
||||
|
||||
### Logging Guidelines
|
||||
|
||||
| Level | When to Use |
|
||||
|-------|-------------|
|
||||
| DEBUG | Detailed diagnostic info |
|
||||
| INFO | Normal operation events |
|
||||
| WARNING | Recoverable issues |
|
||||
| ERROR | Failures requiring attention |
|
||||
| CRITICAL | System-wide failures |
|
||||
|
||||
```python
|
||||
# Log with context
|
||||
logger.error("Failed to load game %s: %s", game_id, e)
|
||||
|
||||
# Include stack trace for unexpected errors
|
||||
try:
|
||||
...
|
||||
except Exception as e:
|
||||
logger.exception("Unexpected error processing %s", game_id)
|
||||
```
|
||||
|
||||
### Forbidden Patterns
|
||||
|
||||
```python
|
||||
# NEVER: Bare except
|
||||
try:
|
||||
...
|
||||
except:
|
||||
pass
|
||||
|
||||
# NEVER: Catch Exception without logging
|
||||
try:
|
||||
...
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# NEVER: Silent failures in critical paths
|
||||
if not critical_file.exists():
|
||||
return None # Should raise
|
||||
|
||||
# NEVER: Multiple exceptions in one handler (unless re-throwing as a unified domain exception)
|
||||
try:
|
||||
...
|
||||
except (FileNotFoundError, ValueError, TypeError, KeyError):
|
||||
pass # Each needs separate handling
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Code Style
|
||||
|
||||
### Imports
|
||||
```python
|
||||
# Standard library
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
# Third-party
|
||||
from PySide6.QtWidgets import QApplication
|
||||
import requests
|
||||
|
||||
# Local
|
||||
from portprotonqt.steam_api import SteamAPI
|
||||
from portprotonqt.logger import get_logger
|
||||
```
|
||||
|
||||
### Type Hints
|
||||
```python
|
||||
def get_game(game_id: str, cache: dict | None = None) -> Game | None:
|
||||
...
|
||||
|
||||
class Game:
|
||||
name: str
|
||||
playtime: int
|
||||
cover_url: str | None
|
||||
```
|
||||
|
||||
### Theme Constants
|
||||
All style-related constants MUST be defined in theme files, not in application code.
|
||||
|
||||
**File structure for theme constants:**
|
||||
- `portprotonqt/themes/standart/styles/constants.py` — Color constants, sizes, shadow values
|
||||
- `portprotonqt/themes/standart/styles/base.py` — Global widget styles (MAIN_WINDOW_STYLE, etc.)
|
||||
- `portprotonqt/themes/standart/styles/game_card.py` — Game card specific styles
|
||||
- `portprotonqt/themes/standart/styles/detail_page.py` — Detail page styles
|
||||
- `portprotonqt/themes/standart/styles/settings.py` — Settings dialog styles
|
||||
- `portprotonqt/themes/standart/styles/get_wine.py` — Wine manager styles
|
||||
- `portprotonqt/themes/standart/styles/winetricks.py` — Winetricks styles
|
||||
- `portprotonqt/themes/standart/styles/theme_utils.py` — Utility styles (context menus, etc.)
|
||||
|
||||
**Adding new constants:**
|
||||
```python
|
||||
# In constants.py — add color constant
|
||||
color_new_feature = "#FF5733"
|
||||
|
||||
# In constants.py — add size constant
|
||||
new_widget_size = 42
|
||||
|
||||
# In base.py or submodule — add QSS style
|
||||
NEW_WIDGET_STYLE = f"""
|
||||
QWidget {{
|
||||
background: {color_new_feature};
|
||||
border-radius: {border_radius_a};
|
||||
}}
|
||||
"""
|
||||
```
|
||||
|
||||
**Usage in application code:**
|
||||
```python
|
||||
# Bad: Hardcoded in application code
|
||||
shadow.setBlurRadius(20)
|
||||
label.setStyleSheet("color: #bbbbbb;")
|
||||
|
||||
# Good: Use theme constants
|
||||
shadow.setBlurRadius(self.theme.shadow_blur_radius)
|
||||
label.setStyleSheet(self.theme.CONTENT_STYLE)
|
||||
```
|
||||
|
||||
### Comments
|
||||
```python
|
||||
# NEVER: Russian or verbose
|
||||
# Проверить существование файла
|
||||
|
||||
# ALWAYS: Concise English
|
||||
# Check if file exists
|
||||
if os.path.exists(path):
|
||||
...
|
||||
|
||||
# ALWAYS: Docstrings for public APIs
|
||||
def check_file_exists(path: str) -> bool:
|
||||
"""Check if file exists at given path."""
|
||||
...
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Code Review Guidelines
|
||||
|
||||
Review scope: prioritize new/modified code. Existing unrelated legacy issues should not block unless they are CRITICAL security issues. Development scripts under `dev-scripts/` follow their exemption rules unless explicitly requested.
|
||||
|
||||
### Security (CRITICAL)
|
||||
|
||||
- Hardcoded credentials
|
||||
- SQL injection risks
|
||||
- Missing input validation on external boundaries (user input, files, network, subprocess args)
|
||||
- Insecure dependencies
|
||||
- Path traversal risks
|
||||
- `shell=True` in subprocess
|
||||
|
||||
### Code Quality (HIGH)
|
||||
|
||||
- New/rewritten functions >50 lines
|
||||
- New/rewritten functions >4 params
|
||||
- New/rewritten files >800 lines
|
||||
- New/modified code nesting >4 levels
|
||||
- Missing error handling for expected/recoverable failures in new/modified code
|
||||
- Circular imports introduced by the change
|
||||
- Shared mutable global state introduced in new/modified code (except logger and explicit cache/session infrastructure)
|
||||
- Blocking calls introduced in the UI thread
|
||||
|
||||
### Performance (MEDIUM)
|
||||
|
||||
- O(n²) when O(n log n) possible
|
||||
- Missing caching
|
||||
- N+1 queries
|
||||
|
||||
### Best Practices (MEDIUM)
|
||||
|
||||
- Emoji usage
|
||||
- TODO without tickets
|
||||
- Poor variable naming (x, tmp, data)
|
||||
- Magic numbers
|
||||
- Non-English comments
|
||||
- **Hardcoded styles or constants (colors, sizes, shadow values, etc.)**
|
||||
|
||||
### Review Output
|
||||
|
||||
```
|
||||
[CRITICAL] Hardcoded API key
|
||||
File: portprotonqt/steam_api.py:42
|
||||
Issue: API key exposed in source code
|
||||
Fix: Use environment variable
|
||||
|
||||
API_KEY = "sk-abc123" # Bad
|
||||
API_KEY = os.getenv("API_KEY") # Good
|
||||
|
||||
[MEDIUM] Hardcoded style value
|
||||
File: portprotonqt/game_card.py:81
|
||||
Issue: Shadow color hardcoded instead of using theme
|
||||
Fix: Use theme constant
|
||||
|
||||
shadow.setColor(QColor(0, 0, 0, 150)) # Bad
|
||||
shadow.setColor(QColor(self.theme.color_shadow_card)) # Good
|
||||
```
|
||||
|
||||
### Approval
|
||||
|
||||
- **Approve:** No CRITICAL or HIGH issues
|
||||
- **Warning:** MEDIUM issues only
|
||||
- **Block:** CRITICAL or HIGH issues found
|
||||
|
||||
---
|
||||
|
||||
## Meson Build Guidelines
|
||||
|
||||
The `check-meson` hook validates `meson.build` on commit.
|
||||
|
||||
**Checks:**
|
||||
- Syntax: brackets, quotes, commas, control structures
|
||||
- All `.py` files in `install_data()`
|
||||
- No duplicates or missing files
|
||||
|
||||
### Adding Files
|
||||
|
||||
```meson
|
||||
# portprotonqt/meson.build
|
||||
install_data(
|
||||
['existing.py',
|
||||
'new_module.py',
|
||||
],
|
||||
install_dir: pythondir / meson.project_name(),
|
||||
)
|
||||
```
|
||||
|
||||
### Common Errors
|
||||
|
||||
```meson
|
||||
# Bad: Missing comma # Bad: Unclosed
|
||||
install_data( install_data(
|
||||
'file1.py' 'file1.py',
|
||||
'file2.py' 'file2.py'
|
||||
) # Missing )
|
||||
|
||||
# Good
|
||||
install_data(
|
||||
'file1.py',
|
||||
'file2.py',
|
||||
)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Project Structure
|
||||
|
||||
```
|
||||
PortProtonQt/
|
||||
├── portprotonqt/ # Python package
|
||||
│ ├── app.py # Entry point
|
||||
│ ├── main_window.py # Main window
|
||||
│ ├── game_card.py # Game card widget
|
||||
│ ├── steam_api.py # Steam integration
|
||||
│ ├── egs_api.py # Epic Games integration
|
||||
│ ├── theme_manager.py # Theme management
|
||||
│ ├── logger.py # Logging
|
||||
│ └── themes/ # Theme files
|
||||
├── build-aux/ # Build resources
|
||||
├── dev-scripts/ # Development scripts
|
||||
├── documentation/ # Documentation
|
||||
├── meson.build # Meson config
|
||||
├── pyproject.toml # Python config
|
||||
└── .pre-commit-config.yaml
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Development Scripts
|
||||
|
||||
**`dev-scripts/`** contains development utilities that are not part of the application codebase.
|
||||
|
||||
**Policy:**
|
||||
- Scripts in `dev-scripts/` are exempt from code quality guidelines
|
||||
- No type hints, linting, or code style requirements apply
|
||||
- These scripts are for developer convenience only
|
||||
- Do not refactor or improve dev-scripts unless explicitly requested
|
||||
|
||||
---
|
||||
|
||||
## Dependencies
|
||||
|
||||
### Core
|
||||
|
||||
| Package | Purpose | License |
|
||||
|---------|---------|---------|
|
||||
| PySide6 | GUI | LGPL |
|
||||
| Legendary | EGS integration | GPL-3.0 |
|
||||
| Icoextract | Icon extraction | MIT |
|
||||
| Requests | HTTP | Apache-2.0 |
|
||||
| Pillow | Image handling | MIT |
|
||||
|
||||
**License compatibility:**
|
||||
- MIT, Apache-2.0, BSD: Compatible
|
||||
- LGPL: Requires dynamic linking
|
||||
- Proprietary: Incompatible
|
||||
|
||||
---
|
||||
|
||||
## Resources
|
||||
|
||||
- [Theme documentation](documentation/theme_guide)
|
||||
- [Localization guide](documentation/localization_guide)
|
||||
- [Metadata override guide](documentation/metadata_override)
|
||||
- [TODO list](TODO.md)
|
||||
- [Changelog](CHANGELOG.md)
|
||||
|
||||
---
|
||||
|
||||
**Last updated:** 2026-03-10
|
||||
**Version:** 1.2
|
||||
**Status:** Release
|
||||
@@ -3,6 +3,89 @@
|
||||
Все заметные изменения в этом проекте фиксируются в этом файле.
|
||||
Формат основан на [Keep a Changelog](https://keepachangelog.com/) и придерживается принципов [Semantic Versioning](https://semver.org/).
|
||||
|
||||
## [0.1.12] - 2026-04-17
|
||||
|
||||
### Added
|
||||
- В настройки PortProton добавлена галочка добавления/удаления инструмента совместимости Steam
|
||||
- В настройки библиотеки добавлен скрытый тип отображения бейджей
|
||||
- Добавлена валидация конфига
|
||||
- Аргумент командной строки `--add-steam-compat-tool` для использования PortProtonQt как инструмента совместимости Steam
|
||||
- Аргумент командной строки `--reinstall-steam-compat-tool` для переустановки инструмента совместимости Steam в пользовательском каталоге
|
||||
- Аргумент командной строки `--remove-steam-compat-tool` для удаления инструмента совместимости Steam из пользовательского каталога
|
||||
- В репозиторий добавлен пакет `portprotonqt-steam-compat` для глобального добавления PortProtonQt как инструмента совместимости Steam
|
||||
- Добавлена кнопка настроек для игр из Steam, если PortProtonQt используется как инструмент совместимости
|
||||
- Добавлен прогресс-бар скачивания Wine на детальной странице игры
|
||||
- Возможность прямого запуска `.exe` через CLI
|
||||
- Ленивая загрузка данных автоустановок: обложки и метаданные не загружаются, если вкладка скрыта в настройках или пользователь на неё не заходит
|
||||
- Добавлена кнопка Cancel в диалог управления Wine/Proton для закрытия в WM без рамок окна
|
||||
- Аргумент командной строки `--resolution` для запуска приложения с определённым разрешением (например, 1920x1080)
|
||||
- В настройки `.exe` добавлены параметры MangoHud
|
||||
- В настройки `.exe` добавлены параметры Gamescope
|
||||
- В настройки `.exe` добавлен выбор второго `.exe` через встроенный файловый менеджер
|
||||
- В настройки библиотеки добавлен выбор типа бейджей: `Детальный` и `Компактный`
|
||||
- Создания нового префикса
|
||||
- Автодополнение fish и zsh для команды `portprotonqt`.
|
||||
- В диалог добавления/редактирования игры добавлены галочки добавления в Steam, меню и на рабочий стол
|
||||
- В настройки добавлены опции автозапуска и запуска приложения сразу в трей
|
||||
- Добавлена поддержка запуска `.iso` (CLI, drag-and-drop и диалог добавления игры)
|
||||
- На вкладке MangoHud добавлена кнопка записи системного `MangoHud.conf` из текущего env-конфига
|
||||
- Добавлена вкладка `System` с разделами WIFI, VPN, Bluetooth, Storage, Audio и Power (включается через `--ppqtos`)
|
||||
- Добавлен аргумент командной строки `--ppqtos` для открытия вкладки `System`
|
||||
|
||||
### Changed
|
||||
- Проверка подключения к интернету теперь использует Yandex как основной сервер с Google в качестве fallback
|
||||
- Переработан внешний вид вкладки «Настройки PortProton»
|
||||
- Детальная страница игры адаптирована под маленькие экраны
|
||||
- На детальной странице Steam-игр добавлена кнопка «Открыть папку с игрой»
|
||||
- При добавлении и удалении игры из Steam теперь не пишется о необходимости перезапуска, если используется CEF, а не VDF
|
||||
- Все комментарии в коде переведены на английский язык
|
||||
- Все комментарии в коде теперь используют модуль logger
|
||||
- При включении MangoHud в настройках exe также добавляется `MANGOHUD_CONFIG`, если его нет
|
||||
- Начат рефакторинг скриптов
|
||||
- Ускорен запуск программы на ~47%
|
||||
- Снижение потребления памяти на ~17%
|
||||
- pyproject теперь используется только как менеджер зависимостей для UV, сборка через него больше невозможна
|
||||
- Скриншоты в metainfo теперь размера 1000x700 для соответствия стандартам Flathub
|
||||
- Все подсказки при наведении теперь имеют общий вид
|
||||
- Все константы теперь вынесены в файлы тем
|
||||
- Все контекстные меню теперь имеют общий вид
|
||||
- Все таблицы теперь имеют общий вид
|
||||
- На вкладке «Темы» добавлена явная подсветка фокуса для списка тем, карусели скриншотов и кнопки применения
|
||||
- Удалены подписи скриншотов тем
|
||||
- Системный оверлей переработан и перенесён в отдельную вкладку `System`
|
||||
|
||||
### Fixed
|
||||
- Исправлены высокая нагрузка на CPU и утечка памяти при изменении размера карточек
|
||||
- Скачивание обложек со SteamGridDB теперь асинхронное и не вызывает зависание окна
|
||||
- Уменьшен таймаут запроса к SteamGridDB с 10 до 3 секунд, чтобы не тормозить запуск при медленном 404
|
||||
- Запуск игр из трея
|
||||
- Исправлено обновление сетки библиотеки при удалении карточки игры
|
||||
- Исправлено отображение пустых вложенных подменю в трее в Dank Material Shell и GNOME.
|
||||
- Получение статуса античита для игр из Steam
|
||||
- Кэш обложек со SteamCDN
|
||||
- Исправлена эмуляция прокрутки через Bluetooth-геймпад в режиме эмуляции мыши
|
||||
- Исправлен выбор статистики времени: теперь приоритет у совпадающего `sha256` `.exe`, затем у точного пути, а при удалении игры очищается её запись в `data/tmp/statistics`
|
||||
- Исправлены некорректные комментарии в CSS для combobox
|
||||
- Исправлена валидация синтаксиса комментариев CSS и опечатки в winetricks.py
|
||||
- Перевод кнопок «Yes»/«No» в QMessageBox
|
||||
- Виртуальная клавиатура теперь открывается сверху, если перекрывает поле ввода
|
||||
- Кнопка «Загрузить резервную копию префикса» больше не выходит за границы окна
|
||||
- Подсказки управления больше не накладываются друг на друга в маленьком окне
|
||||
- Исправлено некорректное попадание фокуса на метаинформацию темы при навигации геймпадом
|
||||
- Навигация геймпадом на вкладке «Темы» ограничена элементами: список тем, карусель скриншотов и кнопка «Применить тему»
|
||||
- При наличии `custom_data` отключены сетевые запросы обложек к SGDB и SteamCDN для карточек игр
|
||||
- Отключён автоскролл `QComboBox` колесом мыши, когда выпадающий список закрыт
|
||||
- Исправлен поиск `.desktop` при несовпадении имени карточки и файла (в том числе после редактирования): добавлено сопоставление через `custom_data/*/metadata.txt` (`name`) с fallback по данным `.desktop`
|
||||
- Виртуальная клавиатура теперь адаптирует ширину кнопок под размер окна
|
||||
- Усилена общая безопасность механизма пользовательских тем, включая валидацию, проверки загрузки и устойчивость к некорректным/потенциально опасным темам
|
||||
- Улучшено формирование ссылок WeAntiCheatYet
|
||||
|
||||
### Contributors
|
||||
- @Simple16
|
||||
- @Dervart
|
||||
|
||||
---
|
||||
|
||||
## [0.1.11] - 2026-02-18
|
||||
|
||||
### Added
|
||||
|
||||
@@ -9,7 +9,9 @@
|
||||
```sh
|
||||
uv python install 3.10
|
||||
uv sync
|
||||
source .venv/bin/activate
|
||||
source .venv/bin/activate # For bash/zsh
|
||||
# or
|
||||
source .venv/bin/activate.fish # For fish
|
||||
```
|
||||
|
||||
Запуск производится по команде portprotonqt
|
||||
@@ -27,7 +29,9 @@ source .venv/bin/activate
|
||||
```sh
|
||||
uv python install 3.10
|
||||
uv sync --all-extras --dev
|
||||
source .venv/bin/activate
|
||||
source .venv/bin/activate # For bash/zsh
|
||||
# or
|
||||
source .venv/bin/activate.fish # For fish
|
||||
pre-commit install
|
||||
```
|
||||
|
||||
|
||||
@@ -5,11 +5,10 @@
|
||||
- [X] Добавить систему тем [Документация](documentation/theme_guide)
|
||||
- [X] Вынести все константы, такие как уровень закругления карточек, в темы (частично выполнено)
|
||||
- [X] Добавить метаданные для тем (скриншоты, описание, домашняя страница и автор)
|
||||
- [ ] Продумать систему вкладок вместо текущей
|
||||
- [X] [Добавить сессию Gamescope, аналогичную той, что используется в SteamOS](https://git.linux-gaming.ru/Boria138/gamescope-session-portprotonqt)
|
||||
- [X] Разобраться почему теряется часть стилей в Gamescope
|
||||
- [ ] Разработать адаптивный дизайн (за эталон берётся Steam Deck с разрешением 1280×800)
|
||||
- [ ] Переделать скриншоты для соответствия [гайдлайнам Flathub](https://docs.flathub.org/docs/for-app-authors/metainfo-guidelines/quality-guidelines#screenshots)
|
||||
- [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 для ускорения времени запуска
|
||||
@@ -22,7 +21,7 @@
|
||||
- [X] Добавить сортировку карточек по различным критериям (доступны: по недавности, количеству наигранного времени, избранному или алфавиту)
|
||||
- [X] Добавить индикацию запуска приложения
|
||||
- [X] Достигнуть паритета функциональности с Ingame
|
||||
- [ ] Достигнуть паритета функциональности с PortProton (остались настройки игр и обновление скриптов)
|
||||
- [ ] Достигнуть паритета функциональности с PortProton (остались обновление скриптов)
|
||||
- [X] Добавить возможность изменения названия, описания и обложки через файлы `.local/share/PortProtonQT/custom_data/exe_name/{desc,name,cover}`
|
||||
- [X] Добавить встроенное переопределение названия, описания и обложки, например, по пути `portprotonqt/custom_data` [Документация](documentation/metadata_override/)
|
||||
- [X] Добавить переводы в переопределения
|
||||
|
||||
+35
-6
@@ -1,14 +1,14 @@
|
||||
pkgname=portprotonqt
|
||||
pkgver=0.1.11
|
||||
pkgname=('portprotonqt' 'portprotonqt-steam-compat')
|
||||
pkgver=0.1.12
|
||||
pkgrel=1
|
||||
pkgdesc="Modern GUI for managing and launching games from PortProton, Steam, and Epic Games Store"
|
||||
arch=('any')
|
||||
url="https://git.linux-gaming.ru/Boria138/PortProtonQt"
|
||||
license=('GPL-3.0')
|
||||
depends=('python-requests' 'python-babel' 'python-evdev' 'python-pyudev' 'python-orjson'
|
||||
'python-psutil' 'python-tqdm' 'python-vdf' 'python-libarchive-c' 'pyside6' 'python-rapidfuzz' 'icoextract' 'python-pillow' 'perl-image-exiftool' 'python-beautifulsoup4' 'python-websocket-client' 'cabextract' 'unzip' 'curl' 'unrar' 'qt6-svg' 'pciutils' 'mesa-utils' 'vulkan-icd-loader')
|
||||
'python-psutil' 'python-tqdm' 'python-vdf' 'python-libarchive-c' 'pyside6' 'python-rapidfuzz' 'icoextract' 'python-pillow' 'perl-image-exiftool' 'python-beautifulsoup4' 'python-websocket-client' 'cabextract' 'unzip' 'curl' 'unrar' 'qt6-svg' 'pciutils' 'mesa-utils' 'vulkan-icd-loader' '7zip')
|
||||
depends_aarch64=('muvm')
|
||||
makedepends=('meson' 'ninja' 'vulkan-headers')
|
||||
makedepends=('meson' 'ninja' 'vulkan-headers' 'gettext')
|
||||
source=("git+https://git.linux-gaming.ru/Boria138/PortProtonQt#tag=v$pkgver")
|
||||
sha256sums=('SKIP')
|
||||
|
||||
@@ -17,6 +17,35 @@ build() {
|
||||
meson compile -C build
|
||||
}
|
||||
|
||||
package() {
|
||||
meson install -C build --destdir "$pkgdir"
|
||||
package_portprotonqt() {
|
||||
pkgdesc="Modern GUI for managing and launching games from PortProton, Steam, and Epic Games Store"
|
||||
optdepends=(
|
||||
'networkmanager: System tab network management'
|
||||
'bluez: System tab bluetooth management'
|
||||
'upower: System tab bluetooth battery level'
|
||||
'libpulse: System tab audio volume/output management'
|
||||
'python-dbus-fast: System tab D-Bus integration'
|
||||
'python-qrcode: Wi-Fi QR code generation'
|
||||
)
|
||||
|
||||
DESTDIR="$pkgdir" meson install -C build --skip-subprojects
|
||||
|
||||
bash "$srcdir/PortProtonQt/dev-scripts/generate-completions.sh"
|
||||
install -Dpm 0644 "$srcdir/PortProtonQt/completions/portprotonqt" -t "$pkgdir/usr/share/bash-completion/completions"
|
||||
install -Dpm 0644 "$srcdir/PortProtonQt/completions/portprotonqt.fish" -t "$pkgdir/usr/share/fish/vendor_completions.d"
|
||||
install -Dpm 0644 "$srcdir/PortProtonQt/completions/_portprotonqt" -t "$pkgdir/usr/share/zsh/site-functions"
|
||||
|
||||
# Remove steam-compat files from main package
|
||||
rm -rf "$pkgdir/usr/share/steam"
|
||||
}
|
||||
|
||||
package_portprotonqt-steam-compat() {
|
||||
pkgdesc="Steam compatibility tool for PortProtonQt"
|
||||
depends=('portprotonqt')
|
||||
|
||||
DESTDIR="$pkgdir" meson install -C build --skip-subprojects
|
||||
|
||||
# Keep only steam-compat files
|
||||
find "$pkgdir/usr" -mindepth 1 -type f -not -path "${pkgdir}/usr/share/steam*" -print0 | xargs -0 rm -f
|
||||
find "$pkgdir/usr" -mindepth 1 -type d -not -path "${pkgdir}/usr/share/steam*" -empty -delete
|
||||
}
|
||||
+35
-6
@@ -1,14 +1,14 @@
|
||||
pkgname=portprotonqt-git
|
||||
pkgname=('portprotonqt-git' 'portprotonqt-git-steam-compat')
|
||||
pkgver=.
|
||||
pkgrel=1
|
||||
pkgdesc="Modern GUI for managing and launching games from PortProton, Steam, and Epic Games Store.(developerment build)"
|
||||
pkgdesc="Modern GUI for managing and launching games from PortProton, Steam, and Epic Games Store (development build)"
|
||||
arch=('any')
|
||||
url="https://git.linux-gaming.ru/Boria138/PortProtonQt"
|
||||
license=('GPL-3.0')
|
||||
depends=('python-requests' 'python-babel' 'python-evdev' 'python-pyudev' 'python-orjson'
|
||||
'python-psutil' 'python-tqdm' 'python-vdf' 'python-libarchive-c' 'pyside6' 'python-rapidfuzz' 'icoextract' 'python-pillow' 'perl-image-exiftool' 'python-beautifulsoup4' 'python-websocket-client' 'cabextract' 'unzip' 'curl' 'unrar' 'qt6-svg' 'pciutils' 'mesa-utils' 'vulkan-icd-loader')
|
||||
'python-psutil' 'python-tqdm' 'python-vdf' 'python-libarchive-c' 'pyside6' 'python-rapidfuzz' 'icoextract' 'python-pillow' 'perl-image-exiftool' 'python-beautifulsoup4' 'python-websocket-client' 'cabextract' 'unzip' 'curl' 'unrar' 'qt6-svg' 'pciutils' 'mesa-utils' 'vulkan-icd-loader' '7zip')
|
||||
depends_aarch64=('muvm')
|
||||
makedepends=('meson' 'ninja' 'vulkan-headers')
|
||||
makedepends=('meson' 'ninja' 'vulkan-headers' 'gettext')
|
||||
source=("git+https://git.linux-gaming.ru/Boria138/PortProtonQt.git")
|
||||
sha256sums=('SKIP')
|
||||
|
||||
@@ -22,6 +22,35 @@ build() {
|
||||
meson compile -C build
|
||||
}
|
||||
|
||||
package() {
|
||||
meson install -C build --destdir "$pkgdir"
|
||||
package_portprotonqt-git() {
|
||||
pkgdesc="Modern GUI for managing and launching games from PortProton, Steam, and Epic Games Store (development build)"
|
||||
optdepends=(
|
||||
'networkmanager: System tab network management'
|
||||
'bluez: System tab bluetooth management'
|
||||
'upower: System tab bluetooth battery level'
|
||||
'libpulse: System tab audio volume/output management'
|
||||
'python-dbus-fast: System tab D-Bus integration'
|
||||
'python-qrcode: Wi-Fi QR code generation'
|
||||
)
|
||||
|
||||
DESTDIR="$pkgdir" meson install -C build --skip-subprojects
|
||||
|
||||
bash "$srcdir/PortProtonQt/dev-scripts/generate-completions.sh"
|
||||
install -Dpm 0644 "$srcdir/PortProtonQt/completions/portprotonqt" -t "$pkgdir/usr/share/bash-completion/completions"
|
||||
install -Dpm 0644 "$srcdir/PortProtonQt/completions/portprotonqt.fish" -t "$pkgdir/usr/share/fish/vendor_completions.d"
|
||||
install -Dpm 0644 "$srcdir/PortProtonQt/completions/_portprotonqt" -t "$pkgdir/usr/share/zsh/site-functions"
|
||||
|
||||
# Remove steam-compat files from main package
|
||||
rm -rf "$pkgdir/usr/share/steam"
|
||||
}
|
||||
|
||||
package_portprotonqt-git-steam-compat() {
|
||||
pkgdesc="Steam compatibility tool for PortProtonQt (development build)"
|
||||
depends=('portprotonqt-git')
|
||||
|
||||
DESTDIR="$pkgdir" meson install -C build --skip-subprojects
|
||||
|
||||
# Keep only steam-compat files
|
||||
find "$pkgdir/usr" -mindepth 1 -type f -not -path "${pkgdir}/usr/share/steam*" -print0 | xargs -0 rm -f
|
||||
find "$pkgdir/usr" -mindepth 1 -type d -not -path "${pkgdir}/usr/share/steam*" -empty -delete
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
%global pypi_name portprotonqt
|
||||
%global pypi_version 0.1.11
|
||||
%global pypi_version 0.1.12
|
||||
%global oname PortProtonQt
|
||||
%global build_timestamp %(date +"%Y%m%d")
|
||||
%global _python_no_extras_requires 1
|
||||
@@ -19,7 +19,10 @@ BuildRequires: meson >= 0.61.2
|
||||
BuildRequires: ninja-build
|
||||
BuildRequires: python3-devel
|
||||
BuildRequires: git
|
||||
BuildRequires: gettext
|
||||
BuildRequires: systemd-rpm-macros
|
||||
BuildRequires: vulkan-loader-devel
|
||||
BuildRequires: gcc
|
||||
|
||||
Obsoletes: python3-%{pypi_name}-git < %{version}-%{release}
|
||||
Provides: python3-%{pypi_name}-git = %{version}-%{release}
|
||||
@@ -50,6 +53,15 @@ Requires: unrar
|
||||
Requires: glx-utils
|
||||
Requires: pciutils
|
||||
Requires: vulkan-loader
|
||||
Requires: 7zip
|
||||
|
||||
# System Tab
|
||||
Recommends: NetworkManager
|
||||
Recommends: bluez
|
||||
Recommends: upower
|
||||
Recommends: pulseaudio-utils
|
||||
Recommends: python3-dbus-fast
|
||||
Recommends: python3-qrcode
|
||||
|
||||
%ifarch aarch64
|
||||
Requires: muvm
|
||||
@@ -58,10 +70,16 @@ Requires: muvm
|
||||
%description
|
||||
This application provides a sleek, intuitive graphical interface for managing and launching games from PortProton, Steam, and Epic Games Store. It consolidates your game libraries into a single, user-friendly hub for seamless navigation and organization. Its lightweight structure and cross-platform support deliver a cohesive gaming experience, eliminating the need for multiple launchers. Unique PortProton integration enhances Linux gaming, enabling effortless play of Windows-based titles with minimal setup.
|
||||
|
||||
%{?python_disable_dependency_generator}
|
||||
%package -n %{pypi_name}-git-steam-compat
|
||||
Summary: Steam compatibility tool for PortProtonQt (development build)
|
||||
License: GPL-3.0
|
||||
Requires: %{pypi_name}-git = %{version}-%{release}
|
||||
|
||||
BuildRequires: vulkan-loader-devel
|
||||
BuildRequires: gcc
|
||||
%description -n %{pypi_name}-git-steam-compat
|
||||
Steam compatibility tool integration for PortProtonQt. This package installs
|
||||
the necessary files to use PortProtonQt as a Proton compatibility tool in Steam.
|
||||
|
||||
%{?python_disable_dependency_generator}
|
||||
|
||||
%prep
|
||||
git clone https://git.linux-gaming.ru/Boria138/PortProtonQt.git
|
||||
@@ -76,16 +94,26 @@ cd %{oname}
|
||||
%install
|
||||
cd %{oname}
|
||||
%meson_install
|
||||
bash ./dev-scripts/generate-completions.sh
|
||||
install -Dpm 0644 ./completions/portprotonqt -t %{buildroot}%{bash_completions_dir}
|
||||
install -Dpm 0644 ./completions/portprotonqt.fish -t %{buildroot}%{fish_completions_dir}
|
||||
install -Dpm 0644 ./completions/_portprotonqt -t %{buildroot}%{zsh_completions_dir}
|
||||
%find_lang %{pypi_name}
|
||||
|
||||
%files -f %{oname}/%{pypi_name}.lang
|
||||
%{_bindir}/%{pypi_name}
|
||||
%{_bindir}/vk_gpu_info
|
||||
%{python3_sitelib}/%{pypi_name}/
|
||||
%{_datadir}/icons/hicolor/scalable/apps/ru.linux_gaming.PortProtonQt.svg
|
||||
%{_metainfodir}/ru.linux_gaming.PortProtonQt.metainfo.xml
|
||||
%{_udevrulesdir}/60-portprotonqt.rules
|
||||
%{_datadir}/polkit-1/rules.d/ru.linux_gaming.PortProtonQt.rules
|
||||
%{_datadir}/applications/ru.linux_gaming.PortProtonQt.desktop
|
||||
%{bash_completions_dir}/portprotonqt
|
||||
%{_bindir}/vk_gpu_info
|
||||
%{fish_completions_dir}/portprotonqt.fish
|
||||
%{zsh_completions_dir}/_portprotonqt
|
||||
|
||||
%files -n %{pypi_name}-git-steam-compat
|
||||
%{_datadir}/steam/compatibilitytools.d/PortProtonQt/
|
||||
|
||||
%changelog
|
||||
+33
-5
@@ -1,5 +1,5 @@
|
||||
%global pypi_name portprotonqt
|
||||
%global pypi_version 0.1.11
|
||||
%global pypi_version 0.1.12
|
||||
%global oname PortProtonQt
|
||||
%global _python_no_extras_requires 1
|
||||
|
||||
@@ -16,7 +16,10 @@ BuildRequires: meson >= 0.61.2
|
||||
BuildRequires: ninja-build
|
||||
BuildRequires: python3-devel
|
||||
BuildRequires: git
|
||||
BuildRequires: gettext
|
||||
BuildRequires: systemd-rpm-macros
|
||||
BuildRequires: vulkan-loader-devel
|
||||
BuildRequires: gcc
|
||||
|
||||
Obsoletes: python3-%{pypi_name} < %{version}-%{release}
|
||||
Provides: python3-%{pypi_name} = %{version}-%{release}
|
||||
@@ -47,6 +50,15 @@ Requires: unrar
|
||||
Requires: glx-utils
|
||||
Requires: pciutils
|
||||
Requires: vulkan-loader
|
||||
Requires: 7zip
|
||||
|
||||
# System Tab
|
||||
Recommends: NetworkManager
|
||||
Recommends: bluez
|
||||
Recommends: upower
|
||||
Recommends: pulseaudio-utils
|
||||
Recommends: python3-dbus-fast
|
||||
Recommends: python3-qrcode
|
||||
|
||||
%ifarch aarch64
|
||||
Requires: muvm
|
||||
@@ -55,10 +67,16 @@ Requires: muvm
|
||||
%description
|
||||
This application provides a sleek, intuitive graphical interface for managing and launching games from PortProton, Steam, and Epic Games Store. It consolidates your game libraries into a single, user-friendly hub for seamless navigation and organization. Its lightweight structure and cross-platform support deliver a cohesive gaming experience, eliminating the need for multiple launchers. Unique PortProton integration enhances Linux gaming, enabling effortless play of Windows-based titles with minimal setup.
|
||||
|
||||
%{?python_disable_dependency_generator}
|
||||
%package -n %{pypi_name}-steam-compat
|
||||
Summary: Steam compatibility tool for PortProtonQt
|
||||
License: GPL-3.0
|
||||
Requires: %{pypi_name} = %{version}-%{release}
|
||||
|
||||
BuildRequires: vulkan-loader-devel
|
||||
BuildRequires: gcc
|
||||
%description -n %{pypi_name}-steam-compat
|
||||
Steam compatibility tool integration for PortProtonQt. This package installs
|
||||
the necessary files to use PortProtonQt as a Proton compatibility tool in Steam.
|
||||
|
||||
%{?python_disable_dependency_generator}
|
||||
|
||||
%prep
|
||||
git clone https://git.linux-gaming.ru/Boria138/PortProtonQt
|
||||
@@ -75,16 +93,26 @@ cd %{oname}
|
||||
%install
|
||||
cd %{oname}
|
||||
%meson_install
|
||||
bash ./dev-scripts/generate-completions.sh
|
||||
install -Dpm 0644 ./completions/portprotonqt -t %{buildroot}%{bash_completions_dir}
|
||||
install -Dpm 0644 ./completions/portprotonqt.fish -t %{buildroot}%{fish_completions_dir}
|
||||
install -Dpm 0644 ./completions/_portprotonqt -t %{buildroot}%{zsh_completions_dir}
|
||||
%find_lang %{pypi_name}
|
||||
|
||||
%files -f %{oname}/%{pypi_name}.lang
|
||||
%{_bindir}/%{pypi_name}
|
||||
%{_bindir}/vk_gpu_info
|
||||
%{python3_sitelib}/%{pypi_name}/
|
||||
%{_datadir}/icons/hicolor/scalable/apps/ru.linux_gaming.PortProtonQt.svg
|
||||
%{_metainfodir}/ru.linux_gaming.PortProtonQt.metainfo.xml
|
||||
%{_udevrulesdir}/60-portprotonqt.rules
|
||||
%{_datadir}/polkit-1/rules.d/ru.linux_gaming.PortProtonQt.rules
|
||||
%{_datadir}/applications/ru.linux_gaming.PortProtonQt.desktop
|
||||
%{bash_completions_dir}/portprotonqt
|
||||
%{_bindir}/vk_gpu_info
|
||||
%{fish_completions_dir}/portprotonqt.fish
|
||||
%{zsh_completions_dir}/_portprotonqt
|
||||
|
||||
%files -n %{pypi_name}-steam-compat
|
||||
%{_datadir}/steam/compatibilitytools.d/PortProtonQt/
|
||||
|
||||
%changelog
|
||||
@@ -0,0 +1,4 @@
|
||||
int main(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
@@ -3,8 +3,12 @@ Name=PortProtonQt
|
||||
Exec=portprotonqt %u
|
||||
Type=Application
|
||||
Comment=A modern GUI for PortProton project
|
||||
Comment[ru]=Современный графический интерфейс для проекта PortProton
|
||||
Comment[es]=Una interfaz gráfica moderna para el proyecto PortProton
|
||||
Comment[pt]=Uma interface gráfica moderna para o projeto PortProton
|
||||
Comment[de]=Eine moderne grafische Benutzeroberfläche für das PortProton-Projekt
|
||||
Terminal=false
|
||||
Icon=ru.linux_gaming.PortProtonQt
|
||||
StartupWMClass=ru.linux_gaming.PortProtonQt
|
||||
Categories=Game;Utility;
|
||||
MimeType=x-scheme-handler/portproton;
|
||||
MimeType=x-scheme-handler/portproton;application/x-ms-dos-exec;application/x-executable;application/x-dosexec;application/x-iso9660-image;application/x-cd-image;
|
||||
@@ -1,38 +0,0 @@
|
||||
_portprotonqt_completions() {
|
||||
local cur prev opts
|
||||
COMPREPLY=()
|
||||
cur="${COMP_WORDS[COMP_CWORD]}"
|
||||
prev="${COMP_WORDS[COMP_CWORD-1]}"
|
||||
|
||||
# Available options
|
||||
opts="--fullscreen --debug-level --force-muvm --help -h"
|
||||
|
||||
# Debug level choices
|
||||
debug_levels="ALL DEBUG INFO WARNING ERROR CRITICAL"
|
||||
|
||||
case "${prev}" in
|
||||
--debug-level)
|
||||
# Complete debug levels
|
||||
COMPREPLY=( $(compgen -W "${debug_levels}" -- ${cur}) )
|
||||
return 0
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
|
||||
# Complete options
|
||||
if [[ ${cur} == -* ]]; then
|
||||
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Complete positional arguments (URLs) if needed
|
||||
if [[ ${cur} != -* ]]; then
|
||||
# Allow URL completion for portproton:// URLs
|
||||
if [[ ${cur} == portproton://* ]]; then
|
||||
COMPREPLY=( $(compgen -W "${cur}" -- ${cur}) )
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
complete -F _portprotonqt_completions portprotonqt
|
||||
@@ -33,6 +33,7 @@
|
||||
</categories>
|
||||
<url type="homepage">https://git.linux-gaming.ru/Boria138/PortProtonQt</url>
|
||||
<url type="bugtracker">https://git.linux-gaming.ru/Boria138/PortProtonQt/issues</url>
|
||||
<url type="translate">https://translate.codeberg.org/engage/portprotonqt</url>
|
||||
<screenshots>
|
||||
<screenshot type="default">
|
||||
<image>https://git.linux-gaming.ru/Boria138/PortProtonQt/raw/branch/main/portprotonqt/themes/standart/images/screenshots/library.jpg</image>
|
||||
@@ -54,6 +55,11 @@
|
||||
<caption>Context Menu</caption>
|
||||
<caption xml:lang="ru">Контекстное меню</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<image>https://git.linux-gaming.ru/Boria138/PortProtonQt/raw/branch/main/portprotonqt/themes/standart/images/screenshots/exe_settings.jpg</image>
|
||||
<caption>Exe Settings</caption>
|
||||
<caption xml:lang="ru">Настройки exe</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<image>https://git.linux-gaming.ru/Boria138/PortProtonQt/raw/branch/main/portprotonqt/themes/standart/images/screenshots/wine_settings.jpg</image>
|
||||
<caption>Wine Settings</caption>
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
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]);
|
||||
}
|
||||
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;
|
||||
}
|
||||
});
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 38 KiB |
+5814
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: xuser
|
||||
#AC4BFSP.exe
|
||||
#Rating=1-5
|
||||
#####################examples###########################
|
||||
export PW_VULKAN_USE=1
|
||||
export PW_USE_FSYNC=0
|
||||
export PW_USE_ESYNC=0
|
||||
@@ -0,0 +1,27 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: xuser
|
||||
#ACIII.exe
|
||||
#ACLiberation.exe
|
||||
#Rating=1-5
|
||||
#####################examples###########################
|
||||
export PW_VULKAN_USE="2"
|
||||
export PW_WINE_USE="WINE_LG_9-12-2"
|
||||
export PW_USE_ESYNC="0"
|
||||
export PW_USE_FSYNC="1"
|
||||
export PW_WINE_FULLSCREEN_FSR="1"
|
||||
export PW_HIDE_NVIDIA_GPU="0"
|
||||
export PW_VIRTUAL_DESKTOP="0"
|
||||
export PW_USE_TERMINAL="0"
|
||||
export PW_USE_D3D_EXTRAS="1"
|
||||
export PW_FIX_VIDEO_IN_GAME="0"
|
||||
export PW_REDUCE_PULSE_LATENCY="0"
|
||||
export PW_USE_US_LAYOUT="0"
|
||||
export PW_USE_GSTREAMER="1"
|
||||
export PW_USE_SHADER_CACHE="1"
|
||||
export PW_USE_WINE_DXGI="0"
|
||||
export PW_DINPUT_PROTOCOL="0"
|
||||
export LAUNCH_PARAMETERS=""
|
||||
export PW_WINDOWS_VER="10"
|
||||
export PW_DLL_INSTALL=""
|
||||
export PW_WINE_CPU_TOPOLOGY="disabled"
|
||||
export PW_MESA_GL_VERSION_OVERRIDE="disabled"
|
||||
@@ -0,0 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: Alek V., Dervart
|
||||
#ACOdyssey.exe
|
||||
#Rating=4
|
||||
#####################examples###########################
|
||||
export PW_USE_ESYNC="1"
|
||||
export PW_USE_GSTREAMER="0"
|
||||
export PW_PREFIX_NAME="ACO"
|
||||
export PW_WINE_USE="WINE_LG"
|
||||
@@ -0,0 +1,11 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: Mels
|
||||
#ACOrigins.exe
|
||||
#Rating=1-5
|
||||
export PW_VULKAN_USE="2"
|
||||
export PW_WINE_USE="PROTON_LG"
|
||||
export PORTPROTON_NAME="ACOrigins"
|
||||
export PW_USE_ESYNC="1"
|
||||
export PW_USE_FSYNC="1"
|
||||
export PW_WINE_FULLSCREEN_FSR="1"
|
||||
export PW_USE_GSTREAMER="0"
|
||||
@@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: anonymous
|
||||
#ACValhalla.exe
|
||||
#Rating=1-5
|
||||
#####################examples###########################
|
||||
export PW_DLL_INSTALL="vcrun2019" # Install DLL in port prefix (used winetricks)
|
||||
export PW_VULKAN_USE=1
|
||||
export NOSTSTDIR="\"${PATH_TO_GAME}\""
|
||||
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: xuser
|
||||
#ALOTInstaller.exe
|
||||
#Rating=1-5
|
||||
#####################examples###########################
|
||||
export PW_VULKAN_USE=0
|
||||
@@ -0,0 +1,31 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: deck
|
||||
#APlagueTaleInnocence_x64.exe
|
||||
#Rating=1-5
|
||||
export PW_VULKAN_USE="2"
|
||||
export PW_WINE_USE="PROTON_LG"
|
||||
export PW_PREFIX_NAME="PLAGUE"
|
||||
export PORTPROTON_NAME="A Plague Tale: Innocence"
|
||||
export PW_USE_ESYNC="1"
|
||||
export PW_USE_FSYNC="0"
|
||||
export PW_WINE_FULLSCREEN_FSR="1"
|
||||
export PW_HIDE_NVIDIA_GPU="0"
|
||||
export PW_VIRTUAL_DESKTOP="0"
|
||||
export PW_USE_TERMINAL="0"
|
||||
export PW_USE_D3D_EXTRAS="1"
|
||||
export PW_FIX_VIDEO_IN_GAME="0"
|
||||
export PW_REDUCE_PULSE_LATENCY="0"
|
||||
export PW_USE_US_LAYOUT="0"
|
||||
export PW_USE_GSTREAMER="1"
|
||||
export PW_USE_SHADER_CACHE="1"
|
||||
export PW_USE_WINE_DXGI="0"
|
||||
export PW_DINPUT_PROTOCOL="0"
|
||||
export PW_USE_NATIVE_WAYLAND="0"
|
||||
export LAUNCH_PARAMETERS=""
|
||||
export PW_WINDOWS_VER="10"
|
||||
export PW_DLL_INSTALL="vcrun2017"
|
||||
export WINEDLLOVERRIDES=""
|
||||
export PW_WINE_CPU_TOPOLOGY="disabled"
|
||||
export PW_MESA_GL_VERSION_OVERRIDE="disabled"
|
||||
export PW_VKD3D_FEATURE_LEVEL="disabled"
|
||||
export PW_LOCALE_SELECT="disabled"
|
||||
@@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: deck
|
||||
#APlagueTaleRequiem_x64.exe
|
||||
#Rating=1-5
|
||||
export PW_VULKAN_USE="2"
|
||||
export PW_WINE_USE="WINE_LG"
|
||||
export PW_PREFIX_NAME="PLAGUE"
|
||||
export PORTPROTON_NAME="A Plague Tale: Requiem"
|
||||
@@ -0,0 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: Eljeyna
|
||||
#ActOfWar.exe
|
||||
#ActOfWar_HighTreason.exe
|
||||
#Rating=1-5
|
||||
export PW_WINE_USE="WINE-9.14-AMD64"
|
||||
export PW_PREFIX_NAME="ACT_OF_WAR"
|
||||
|
||||
gui_proton_downloader silent "$PW_WINE_USE"
|
||||
@@ -0,0 +1,10 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: vano
|
||||
#AliceMadnessReturns.exe
|
||||
#Rating=5
|
||||
#####################examples###########################
|
||||
export PW_WINDOWS_VER="10"
|
||||
export PW_USE_FSYNC="0"
|
||||
export PW_USE_ESYNC="0"
|
||||
export PW_USE_GSTREAMER="1"
|
||||
export PW_WINE_USE="PROTON_LG"
|
||||
@@ -0,0 +1,33 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: ducksomecode
|
||||
#AloneInTheDark-Win64-Shipping.exe
|
||||
#Rating=1-5
|
||||
#####################examples###########################
|
||||
export PW_WINDOWS_VER="10"
|
||||
export PW_DLL_INSTALL=""
|
||||
export WINEDLLOVERRIDES=""
|
||||
export LAUNCH_PARAMETERS=""
|
||||
export PW_VULKAN_USE="2"
|
||||
export PW_HIDE_NVIDIA_GPU="0"
|
||||
export PW_VIRTUAL_DESKTOP="0"
|
||||
export PW_USE_FSYNC="1"
|
||||
export PW_USE_ESYNC="0"
|
||||
export PW_USE_GSTREAMER="1"
|
||||
export PW_REDUCE_PULSE_LATENCY="0"
|
||||
export PW_USE_TERMINAL="0"
|
||||
export PW_WINE_USE="WINE_LG"
|
||||
export PW_PREFIX_NAME="ALONE_IN_THE_DARK"
|
||||
export PW_WINE_FULLSCREEN_FSR="0"
|
||||
export PW_USE_D3D_EXTRAS="1"
|
||||
export PW_FIX_VIDEO_IN_GAME="0"
|
||||
export PW_USE_SHADER_CACHE="1"
|
||||
export PW_USE_WINE_DXGI="0"
|
||||
export PW_USE_GALLIUM_ZINK="0"
|
||||
export PW_USE_RUNTIME="1"
|
||||
export PW_WINE_CPU_TOPOLOGY="disabled"
|
||||
export PORTPROTON_NAME="Alone in the Dark"
|
||||
export PW_DINPUT_PROTOCOL="1"
|
||||
export PW_USE_NATIVE_WAYLAND="0"
|
||||
export PW_MESA_GL_VERSION_OVERRIDE="disabled"
|
||||
export PW_VKD3D_FEATURE_LEVEL="disabled"
|
||||
export PW_LOCALE_SELECT="disabled"
|
||||
@@ -0,0 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: Eljeyna
|
||||
#Animal Well.exe
|
||||
#Rating=1-5
|
||||
export PW_WINE_USE="WINE_LG"
|
||||
@@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: fidel
|
||||
#Ankama Launcher.exe
|
||||
#Rating=1-5
|
||||
export PW_WINE_USE="WINE_LG"
|
||||
export PW_PREFIX_NAME="ANKAMA"
|
||||
export PORTPROTON_NAME="Ankama "
|
||||
export FILE_DESCRIPTION="Ankama Launcher"
|
||||
@@ -0,0 +1,18 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: xuser
|
||||
#Anno4.exe
|
||||
#Rating=1-5
|
||||
#####################examples###########################
|
||||
if [[ "$LANGUAGE" == "ru" ]] ; then
|
||||
export PW_COMMENT_DB="Если после первого запуска вы увидите черный экран, просто перезапустите игру."
|
||||
else
|
||||
export PW_COMMENT_DB="If after the first launch you see a black screen,\njust restart the game."
|
||||
fi
|
||||
|
||||
export PW_VULKAN_USE=1
|
||||
|
||||
add_in_start_portwine () {
|
||||
if [[ -d "${WINEPREFIX}/drive_c/users/steamuser/AppData/Roaming/Ubisoft/Anno1404/Config/" ]] ; then
|
||||
sed -i 's/<DirectXVersion>0<\/DirectXVersion>/<DirectXVersion>9<\/DirectXVersion>/' "${WINEPREFIX}/drive_c/users/steamuser/AppData/Roaming/Ubisoft/Anno1404/Config/Engine.ini"
|
||||
fi
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: stalker
|
||||
#AnomalyLauncher.exe
|
||||
#Rating=1-5
|
||||
#####################examples###########################
|
||||
export PW_DLL_INSTALL="d3dx10 d3dx11_42 d3dx11_43" # Install DLL in port prefix (used winetricks)
|
||||
export PW_VULKAN_USE=1
|
||||
export PW_USE_WINE_DXGI=1
|
||||
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: chal55rus
|
||||
#AnomalyZone.exe
|
||||
#Rating=1-5
|
||||
export PW_VULKAN_USE="2"
|
||||
export PW_WINE_USE="WINE_LG"
|
||||
export PW_PREFIX_NAME="DEFAULT"
|
||||
@@ -0,0 +1,10 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: rosakodu
|
||||
#GS456.exe
|
||||
#Rating=1-5
|
||||
export PW_VULKAN_USE="2"
|
||||
export PW_WINE_USE="PROTON_LG_7-54"
|
||||
export PW_PREFIX_NAME="APOLLO_JUSTICE"
|
||||
export WINEDLLOVERRIDES="winmm.dll=n,b"
|
||||
|
||||
gui_proton_downloader silent "$PW_WINE_USE"
|
||||
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: akai
|
||||
#Arthur.exe
|
||||
#Rating=1-5
|
||||
#####################examples###########################
|
||||
export PW_REDUCE_PULSE_LATENCY=1
|
||||
export PW_VULKAN_USE=2
|
||||
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: Сергей 33 (46)
|
||||
#BF2.exe
|
||||
#Rating=4
|
||||
################################################
|
||||
export PW_WINDOWS_VER="7"
|
||||
@@ -0,0 +1,23 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: dez
|
||||
#Battle.net Launcher.exe
|
||||
#Battle.net-Setup.exe
|
||||
#Battle.net.exe
|
||||
#Rating=5
|
||||
################################################
|
||||
export PW_VULKAN_USE="2"
|
||||
export LAUNCH_PARAMETERS=""
|
||||
export WINEDLLOVERRIDES="locationapi="
|
||||
export PW_DLL_INSTALL="vcrun2019 d3dx11_42 d3dx11_43"
|
||||
export PW_WINDOWS_VER="10"
|
||||
export PW_WINE_FULLSCREEN_FSR="0"
|
||||
export PW_WINE_USE="PROTON_LG"
|
||||
export WINE_SIMULATE_WRITECOPY="1"
|
||||
|
||||
add_in_start_portwine () {
|
||||
rm -fr "${PORT_DATA_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c/ProgramData/Agent/data"
|
||||
rm -fr "${PORT_DATA_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c/users/${USER}/Blizzard Entertainment/Battle.net/Cache"
|
||||
rm -fr "${PORT_DATA_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c/users/Public/Blizzard Entertainment/Battle.net/Cache"
|
||||
try_remove_file "${PORT_DATA_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c/windows/Fonts/sourcehansans.ttc"
|
||||
# sed -i 's/"GrabFullscreen"="Y"/"GrabFullscreen"="N"/' "${PORT_DATA_PATH}/data/prefixes/${PW_PREFIX_NAME}/user.reg"
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: Mels
|
||||
#BeyondTwoSouls.exe
|
||||
#Rating=1-5
|
||||
export PW_VULKAN_USE="2"
|
||||
export PW_WINE_USE="WINE_LG"
|
||||
export PORTPROTON_NAME="BeyondTwoSouls"
|
||||
export PW_USE_SHADER_CACHE="0"
|
||||
@@ -0,0 +1,20 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: Alek V., Eljeyna
|
||||
#div.exe
|
||||
#Rating=1-5
|
||||
#####################examples###########################
|
||||
export PW_WINE_USE="WINE_LG"
|
||||
export PW_DGVOODOO2="1"
|
||||
export PW_DGV2_DISABLE_D3D="1"
|
||||
export PW_DGV2_VRAM="1024"
|
||||
export PW_DGV2_RESOLUTION="1280x720"
|
||||
export PW_DGV2_VIDEOCARD="dgVoodoo2 Virtual 3D"
|
||||
|
||||
add_in_start_portwine () {
|
||||
if [[ -f "${PATH_TO_GAME}/fontlist.txt" ]] ; then
|
||||
if grep -q "charset russian" "${PATH_TO_GAME}/fontlist.txt" ; then
|
||||
sed -i 's/DEFINE $TTFONTNAME "BDFont"/DEFINE $TTFONTNAME "Arial"/g' "${PATH_TO_GAME}/fontlist.txt"
|
||||
sed -i 's/DEFINE $TTFONTANAME "BDFont"/DEFINE $TTFONTANAME "Arial"/g' "${PATH_TO_GAME}/fontlist.txt"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: kosta
|
||||
#Biomutant.exe
|
||||
#Rating=1-5
|
||||
#####################examples###########################
|
||||
export PW_VULKAN_USE=1
|
||||
export PW_DLL_INSTALL="vcrun2019" # Install DLL in port prefix (used winetricks)
|
||||
@@ -0,0 +1,17 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: deck
|
||||
#Bioshock2HD.exe
|
||||
#Rating=5
|
||||
export PW_VULKAN_USE="2"
|
||||
export PW_WINE_USE="WINE_LG"
|
||||
export PW_PREFIX_NAME="DEFAULT"
|
||||
export PW_VKBASALT="1"
|
||||
export PW_USE_ESYNC="0"
|
||||
export PW_USE_FSYNC="0"
|
||||
export PW_USE_D3D_EXTRAS="1"
|
||||
export PW_USE_GSTREAMER="1"
|
||||
export PW_USE_SHADER_CACHE="1"
|
||||
export PW_USE_WINE_DXGI="0"
|
||||
export PW_USE_EAC_AND_BE="0"
|
||||
export PW_VKBASALT_EFFECTS="FilmGrain2:Curves:cas"
|
||||
export PW_VKBASALT_FFX_CAS="1"
|
||||
@@ -0,0 +1,17 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: deck
|
||||
#BioshockHD.exe
|
||||
#Rating=5
|
||||
export PW_VULKAN_USE="2"
|
||||
export PW_WINE_USE="WINE_LG"
|
||||
export PW_PREFIX_NAME="DEFAULT"
|
||||
export PW_VKBASALT="1"
|
||||
export PW_USE_ESYNC="0"
|
||||
export PW_USE_FSYNC="0"
|
||||
export PW_USE_D3D_EXTRAS="1"
|
||||
export PW_USE_GSTREAMER="1"
|
||||
export PW_USE_SHADER_CACHE="1"
|
||||
export PW_USE_WINE_DXGI="0"
|
||||
export PW_USE_EAC_AND_BE="0"
|
||||
export PW_VKBASALT_EFFECTS="FilmGrain2:Curves:cas"
|
||||
export PW_VKBASALT_FFX_CAS="1"
|
||||
@@ -0,0 +1,12 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: fidel
|
||||
#BlackDesertLauncher.exe
|
||||
#Rating=1-5
|
||||
#####################examples###########################
|
||||
export PW_WINDOWS_VER="10"
|
||||
export PW_WINE_USE="PROTON_LG"
|
||||
export PW_PREFIX_NAME="DOTNET"
|
||||
export PORTPROTON_NAME="BlackDesertLauncher"
|
||||
export FILE_DESCRIPTION="BlackDesertLauncher"
|
||||
export WINE_DISABLE_KERNEL_WRITEWATCH="1"
|
||||
export DXVK_CONFIG="dxgi.syncInterval=0"
|
||||
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author:
|
||||
#Botanicula.exe
|
||||
#Rating=5
|
||||
################################################
|
||||
export PW_VULKAN_USE=0
|
||||
export LAUNCH_PARAMETERS=""
|
||||
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: Eljeyna
|
||||
#BrightMemoryInfinite-Win64-Shipping.exe
|
||||
#Rating=1-5
|
||||
export PW_VULKAN_USE="2"
|
||||
export PW_WINE_USE="WINE_LG"
|
||||
export PW_USE_SHADER_CACHE="0"
|
||||
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author:PortWINE
|
||||
#Brokgame.exe
|
||||
#Rating=5
|
||||
################################################
|
||||
export PW_VULKAN_USE=0
|
||||
export LAUNCH_PARAMETERS=""
|
||||
@@ -0,0 +1,16 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: fidel
|
||||
#BsgLauncher.exe
|
||||
#EscapeFromTarkov.exe
|
||||
#EscapeFromTarkov_BE.exe
|
||||
#Rating=1-5
|
||||
#####################examples###########################
|
||||
export PW_USE_FSYNC="0"
|
||||
export PW_USE_ESYNC="0"
|
||||
export PW_PREFIX_NAME="DOTNET"
|
||||
|
||||
# add_in_start_portwine () {
|
||||
# if [[ ! -f "${PATH_TO_GAME}/dxvk.conf" ]] ; then
|
||||
# echo "d3d9.shaderModel = 1" > "${PATH_TO_GAME}/dxvk.conf"
|
||||
# fi
|
||||
# }
|
||||
@@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: fidel
|
||||
#CWClientLauncher.exe
|
||||
#Rating=1-5
|
||||
export PW_WINE_USE="WINE_LG"
|
||||
export PW_PREFIX_NAME="CONTRACT_WARS"
|
||||
export PORTPROTON_NAME="CWClient"
|
||||
export FILE_DESCRIPTION="CWClientLauncher"
|
||||
@@ -0,0 +1,10 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: fidel
|
||||
#caliber_launcher_pp.exe
|
||||
#Rating=1-5
|
||||
#####################examples###########################
|
||||
export PW_VULKAN_USE="2"
|
||||
export PW_WINE_USE="PROTON_LG"
|
||||
export PW_PREFIX_NAME="CALIBER"
|
||||
# export DISABLE_CP_DEFPFX="1"
|
||||
export WINEDLLOVERRIDES="xaudio2_7=n,b"
|
||||
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author:
|
||||
#CoJBiBGame_x86.exe
|
||||
#Rating=5
|
||||
################################################
|
||||
export LAUNCH_PARAMETERS=""
|
||||
export PW_DLL_INSTALL="d3dx9" # Install DLL in port prefix (used winetricks)
|
||||
@@ -0,0 +1,10 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: fidel
|
||||
#CatsLauncher.exe
|
||||
#Rating=5
|
||||
#####################examples###########################
|
||||
export PW_WINDOWS_VER="10"
|
||||
export PW_VULKAN_USE="2"
|
||||
export PW_WINE_USE="WINE_LG"
|
||||
export PW_PREFIX_NAME="DOTNET"
|
||||
# export WINEDLLOVERRIDES="libglesv2="
|
||||
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: xuser
|
||||
#Cinebench.exe
|
||||
#Rating=1-5
|
||||
#####################examples###########################
|
||||
export PW_VULKAN_USE=1
|
||||
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: user
|
||||
#Control_DX12.exe
|
||||
#Rating=1-5
|
||||
#####################examples###########################
|
||||
export PW_COMMENT_DB="Control (DX12)"
|
||||
export WINEDLLOVERRIDES="d3d12,d3d_rmdwin10_f,renderer_rmdwin10_f,apw_rmdwin10_f,input_rmdwin10_f,renderer_rmdwin10_f,physics_rmdwin10_f,snd_rmdwin10_f,ui_rmdwin10_f=n"
|
||||
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: xuser
|
||||
#CyberShadow.exe
|
||||
#Rating=1-5
|
||||
################################################
|
||||
export PW_VULKAN_USE=0
|
||||
export LAUNCH_PARAMETERS=""
|
||||
@@ -0,0 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: xuser
|
||||
#Cyberpunk2077.exe
|
||||
#Rating=1-5
|
||||
#####################examples###########################
|
||||
export WINEDLLOVERRIDES="Crash*,REDEngineErrorReporter.exe="
|
||||
export PW_REDUCE_PULSE_LATENCY=1
|
||||
export LAUNCH_PARAMETERS="--launcher-skip"
|
||||
export VKD3D_CONFIG=force_bindless_texel_buffer,multi_queue
|
||||
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: xuser
|
||||
#DAOriginsLauncher.exe
|
||||
#Rating=1-5
|
||||
#####################examples###########################
|
||||
export PW_VULKAN_USE=1
|
||||
@@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: linux-gaming.ru
|
||||
#DOOMEternalx64vk.exe
|
||||
#Rating=?
|
||||
################################################
|
||||
export PW_VULKAN_USE=1
|
||||
export PW_REDUCE_PULSE_LATENCY=1
|
||||
export LAUNCH_PARAMETERS="+in_terminal 1 +com_skipIntroVideo 1 +com_skipSignInManager 1"
|
||||
@@ -0,0 +1,10 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: nix
|
||||
#DOOMx64.exe
|
||||
#DOOMx64vk.exe
|
||||
#Rating=1-5
|
||||
#####################examples###########################
|
||||
export PW_COMMENT_DB="DOOM 2016"
|
||||
export PW_DLL_INSTALL="xact xact_x64 vcrun2019"
|
||||
export WINEDLLOVERRIDES="xaudio2_8=n"
|
||||
export PW_VULKAN_USE=1
|
||||
@@ -0,0 +1,12 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: xuser
|
||||
#DXHRDC.exe
|
||||
#DXHumanRevolutionDC.exe
|
||||
#DXHumanRevolutionDC_s.exe
|
||||
#Rating=5
|
||||
#####################examples###########################
|
||||
export WINEDLLOVERRIDES="WINMM=n,b"
|
||||
export PW_VULKAN_USE=1
|
||||
export PW_USE_FSYNC=1 # Do not use futex-based in-process synchronization primitives. (Automatically disabled on systems with no FUTEX_WAIT_MULTIPLE support.
|
||||
export PW_USE_ESYNC=1 # Do not use eventfd-based in-process synchronization primitives
|
||||
export PW_USE_GSTREAMER=0 # 0 - disabled use winegstreamer
|
||||
@@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: xuser
|
||||
#DaysGone.exe
|
||||
#Rating=1-5
|
||||
#####################examples###########################
|
||||
export PW_DLL_INSTALL="vcrun2019" # Install DLL in port prefix (used winetricks)
|
||||
export PW_USE_FSYNC=1 # Do not use futex-based in-process synchronization primitives. (Automatically disabled on systems with no FUTEX_WAIT_MULTIPLE support.
|
||||
export PW_USE_ESYNC=1 # Do not use eventfd-based in-process synchronization primitives
|
||||
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author:
|
||||
#Dead Space.exe
|
||||
#Rating=1-5
|
||||
################################################
|
||||
export PW_VULKAN_USE=0
|
||||
export LAUNCH_PARAMETERS=""
|
||||
@@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author:
|
||||
#ds.exe
|
||||
#Rating=5
|
||||
################################################
|
||||
export PW_VULKAN_USE=1
|
||||
export LAUNCH_PARAMETERS=""
|
||||
export WINEDLLOVERRIDES="d3dcompiler_47,dxcompiler=n,b"
|
||||
@@ -0,0 +1,18 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: Eljeyna
|
||||
#Deathloop.exe
|
||||
#Rating=4
|
||||
#####################examples###########################
|
||||
if [[ "$LANGUAGE" == "ru" ]] ; then
|
||||
export PW_COMMENT_DB="При использовании DualSense следует оставить параметры нетронутыми\nЕсли проявляются проблемы с определением геймпада, выключите DINPUT PROTOCOL"
|
||||
else
|
||||
export PW_COMMENT_DB="If you use DualSense do not recommended change settings\nBut if you have problems with gamepad controls, turn off DINPUT PROTOCOL parameter"
|
||||
fi
|
||||
export PW_VULKAN_USE="1"
|
||||
export WINEDLLOVERRIDES="xaudio2_8,xaudio2_9="
|
||||
export PW_DINPUT_PROTOCOL="1"
|
||||
export PW_WINDOWS_VER="10"
|
||||
export PW_USE_ESYNC="0"
|
||||
export PW_USE_FSYNC="0"
|
||||
export PW_PREFIX_NAME="DEATHLOOP"
|
||||
export PW_WINE_USE="PROTON_LG"
|
||||
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: xuser
|
||||
#Deponia.exe
|
||||
#Rating=1-5
|
||||
#####################examples###########################
|
||||
export PW_VULKAN_USE=0
|
||||
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: spider
|
||||
#Diablo II.exe
|
||||
#Rating=1-5
|
||||
#####################examples###########################
|
||||
export PW_VULKAN_USE=0
|
||||
@@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: deck
|
||||
#Dishonored2.exe
|
||||
#Rating=1-5
|
||||
export PW_VULKAN_USE="2"
|
||||
export PW_WINE_USE="WINE_LG"
|
||||
export PW_PREFIX_NAME="DISHONORED"
|
||||
export PORTPROTON_NAME="VoidEngine"
|
||||
@@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: deck
|
||||
#DyingLightGame.exe
|
||||
#Rating=1-5
|
||||
export PW_VULKAN_USE="2"
|
||||
export PW_WINE_USE="WINE_LG"
|
||||
export PW_PREFIX_NAME="DL"
|
||||
export PORTPROTON_NAME="DyingLight"
|
||||
@@ -0,0 +1,10 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: PortWINE
|
||||
#EALauncher.exe
|
||||
#EADesktop.exe
|
||||
#Rating=5
|
||||
#####################examples###########################
|
||||
export PW_WINE_USE="PROTON_LG"
|
||||
export PW_PREFIX_NAME="EAAPP"
|
||||
export WINE_SIMULATE_WRITECOPY="1"
|
||||
add_in_start_portwine () { export LC_CTYPE=C ;}
|
||||
@@ -0,0 +1,15 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: PortWINE
|
||||
#EpicGamesLauncher.exe
|
||||
#Rating=5
|
||||
##############################################
|
||||
#export PW_COMMENT_DB="PortWINE database file for Epic Games Launcher"
|
||||
export LAUNCH_PARAMETERS="-SkipBuildPatchPrereq"
|
||||
export PW_DLL_INSTALL="vcrun2012 vcrun2013 vcrun2019"
|
||||
export PW_WINE_USE="PROTON_LG"
|
||||
export PW_USE_ESYNC="1"
|
||||
export PW_USE_FSYNC="1"
|
||||
export WINEDLLOVERRIDES="vulkan-1=n,b"
|
||||
# add_in_start_portwine () {
|
||||
# regdlloverrides "RDR2.exe:vulkan-1=n,b"
|
||||
# }
|
||||
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: fff555w
|
||||
#Esprit Games.exe
|
||||
#Rating=1-5
|
||||
#####################examples###########################
|
||||
export PW_WINDOWS_VER=7 # Set windows version 10, 7 or XP
|
||||
@@ -0,0 +1,10 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: xuser
|
||||
#FL.exe
|
||||
#FL64.exe
|
||||
#Rating=1-5
|
||||
#####################examples###########################
|
||||
export PW_VULKAN_USE=0
|
||||
export WINEDLLOVERRIDES="FLEngine,FLEngine_x64=n"
|
||||
export PW_USE_FSYNC=0 # Do not use futex-based in-process synchronization primitives. (Automatically disabled on systems with no FUTEX_WAIT_MULTIPLE support.
|
||||
export PW_USE_ESYNC=0 # Do not use eventfd-based in-process synchronization primitives
|
||||
@@ -0,0 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: linux-gaming.ru
|
||||
#FarCry.exe
|
||||
#Rating=5
|
||||
#################################
|
||||
export PW_VULKAN_USE=0
|
||||
export WINEDLLOVERRIDES="cgD3D9,cgD3D9d=n"
|
||||
export PW_USE_FSYNC=0 # Do not use futex-based in-process synchronization primitives. (Automatically disabled on systems with no FUTEX_WAIT_MULTIPLE support.
|
||||
export PW_USE_ESYNC=0 # Do not use eventfd-based in-process synchronization primitives
|
||||
@@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: deck
|
||||
#FarCry5.exe
|
||||
#Rating=1-5
|
||||
export PW_VULKAN_USE="2"
|
||||
export PW_WINE_USE="WINE_LG"
|
||||
export PW_PREFIX_NAME="FARCRY"
|
||||
export PORTPROTON_NAME="Far Cry 5"
|
||||
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: gamer
|
||||
#FarCry6.exe
|
||||
#Rating=1-5
|
||||
#####################examples###########################
|
||||
export VK_FORMAT_A8_UNORM=1
|
||||
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: xuser
|
||||
#FarLoneSails.exe
|
||||
#Rating=1-5
|
||||
#####################examples###########################
|
||||
export PW_VULKAN_USE=0
|
||||
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: nixon
|
||||
#farcry3_d3d11.exe
|
||||
#Rating=1-5
|
||||
#####################examples###########################
|
||||
export PW_DLL_INSTALL="d3dx11_42 d3dx11_43"
|
||||
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: nixon
|
||||
#farcry3.exe
|
||||
#Rating=1-5
|
||||
#####################examples###########################
|
||||
export PW_VULKAN_USE=0
|
||||
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: nixon
|
||||
#FarCry4.exe
|
||||
#Rating=1-5
|
||||
#####################examples###########################
|
||||
export PW_DLL_INSTALL="d3dcompiler_43 d3dcompiler_4 xact xact_x64"
|
||||
export PW_PREFIX_NAME="FARCRY_4"
|
||||
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: fidel
|
||||
#Farlight84Launcher.exe
|
||||
#Rating=1-5
|
||||
export PW_WINE_USE="WINE_LG"
|
||||
export PW_PREFIX_NAME="FARLIGHT_84"
|
||||
export PW_NO_AUTO_CREATE_SHORTCUT="1"
|
||||
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: garrett
|
||||
#ForzaHorizon4.exe
|
||||
#Rating=5
|
||||
################################################
|
||||
export PW_DLL_INSTALL="vcrun2019"
|
||||
@@ -0,0 +1,10 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author:
|
||||
#Frozen Throne.exe
|
||||
#Rating=4 - no video
|
||||
################################################
|
||||
export PW_VULKAN_USE=0
|
||||
export LAUNCH_PARAMETERS=""
|
||||
if [[ -d "${PATH_TO_GAME}"/Movies ]] ; then
|
||||
mv "${PATH_TO_GAME}"/Movies "${PATH_TO_GAME}"/Movies_bak
|
||||
fi
|
||||
@@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: lemonchic with help from Dezert1r
|
||||
#GTAIV.exe
|
||||
#Rating=1-5
|
||||
################################################
|
||||
export LAUNCH_PARAMETERS="-nomemrestrict -norestrictions -percentvidmem 100 -availablevidmem 2048 -noprecache -novblank -heapsize 2097152" # Additional launch options
|
||||
export PW_USE_ESYNC=1
|
||||
export PW_USE_FSYNC=0
|
||||
@@ -0,0 +1,19 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: Dezert1r, Fidel
|
||||
#GalaxyClient.exe
|
||||
#GOG_Galaxy_2.0.exe
|
||||
#Rating=5
|
||||
################################################
|
||||
# export PW_VULKAN_USE="2"
|
||||
export WINEDLLOVERRIDES="GalaxyCommunication.exe,GalaxyClientService.exe=n;libglesv2="
|
||||
export LAUNCH_PARAMETERS="/runWithoutUpdating /deelevated"
|
||||
export PW_PREFIX_NAME="GOG"
|
||||
export DISABLE_CP_DEFPFX="1"
|
||||
export PW_WINE_USE="PROTON_LG_9-12"
|
||||
|
||||
add_in_start_portwine ()
|
||||
{
|
||||
if [[ -e "${WINEPREFIX}/drive_c/users/${USER}/Local Settings/Application Data/GOG.com/Galaxy/Configuration/config.json" ]] ; then
|
||||
sed -i 's/"featureOverlay" : true,/"featureOverlay" : false,/' "${WINEPREFIX}/drive_c/${USER}/Local Settings/Application Data/GOG.com/Galaxy/Configuration/config.json"
|
||||
fi
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author:
|
||||
#Game-TS3.exe
|
||||
#Rating=5
|
||||
################################################
|
||||
export PW_VULKAN_USE=0
|
||||
export LAUNCH_PARAMETERS=""
|
||||
@@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: deck
|
||||
#Game_f_x64_EOS.exe
|
||||
#Rating=1-5
|
||||
export PW_VULKAN_USE="2"
|
||||
export PW_WINE_USE="WINE_LG"
|
||||
export PW_PREFIX_NAME="AW"
|
||||
export PORTPROTON_NAME="Game_f_x64_EOS"
|
||||
@@ -0,0 +1,12 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: fidel
|
||||
#Genshin Impact.exe
|
||||
#GenshinImpact.exe
|
||||
#hoyoplay_launcher_pp.exe
|
||||
#Rating=5
|
||||
#####################examples###########################
|
||||
export PW_WINDOWS_VER="10"
|
||||
export PW_VULKAN_USE="2"
|
||||
export PW_PREFIX_NAME="HO_YO_PLAY"
|
||||
export PW_WINE_USE="WINE_HYP_10-10"
|
||||
export LAUNCH_PARAMETERS="-platform_type CLOUD_THIRD_PARTY_PC"
|
||||
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: deck
|
||||
#GoWR.exe
|
||||
#Rating=1-5
|
||||
export PW_VULKAN_USE="2"
|
||||
export PW_WINE_USE="WINE_LG"
|
||||
export PORTPROTON_NAME="GoWR"
|
||||
@@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: fidel
|
||||
#Gw2.exe
|
||||
#Rating=1-5
|
||||
export PW_WINE_USE="WINE_LG"
|
||||
export PW_PREFIX_NAME="GUILD_WARS_2"
|
||||
export PORTPROTON_NAME="Guild Wars 2"
|
||||
export FILE_DESCRIPTION="Guild Wars 2 Game Client"
|
||||
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: fidel
|
||||
#HB_GV_Rus.exe
|
||||
#Rating=1-5
|
||||
#####################examples###########################
|
||||
export PW_PREFIX_NAME="DOTNET"
|
||||
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: linux-gaming.ru
|
||||
#Hades.exe
|
||||
#Rating=1-5
|
||||
################################################
|
||||
export PW_DLL_INSTALL="vcrun2019 d3dcompiler_47 d3dx9_43"
|
||||
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
#Author: xuser
|
||||
#Half-Life2.exe
|
||||
#Rating=1-5
|
||||
#####################examples###########################
|
||||
export PW_VULKAN_USE=1
|
||||
Loaded 100 of 445 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user