Commit c9be94cc authored by Mikhail Tergoev's avatar Mikhail Tergoev

Scripts version 2252

parent fa0e61a8
<div align="center">
<img src="https://raw.githubusercontent.com/Castro-Fidel/PortProton_PKGBUILD/main/portproton.svg" width="64">
<img src="https://raw.githubusercontent.com/Castro-Fidel/PortWINE/data_from_portwine/img/gui/port_proton.svg" width="64">
<h1 align="center">PortProton</h1>
<p align="center">Проект, призванный сделать запуск Windows-игр в Linux простым и удобным как для начинающих, так и для опытных пользователей.
Проект стремится сделать запуск игр (и другого программного обеспечения) максимально простым, но в то же время предоставляет гибкие настройки для опытных пользователей.</p>
......@@ -55,8 +55,8 @@ epm play portproton
exit
```
* **Ubuntu 20.04** (Kubuntu, Xubuntu, Lubuntu, и т.д.), **Linux Mint 20.x** :
[portproton_1.0-2_amd64.deb](https://github.com/Castro-Fidel/PortProton_dpkg/releases/download/portproton_1.0-2_amd64/portproton_1.0-2_amd64.deb)
* **Ubuntu 24.04**, **Debian 12**, **Linux Mint 21.x** **Deepin** :
[portproton_1.4-1_amd64.deb](https://github.com/Castro-Fidel/PortProton_dpkg/releases/download/portproton_1.4-1_amd64/portproton_1.4-1_amd64.deb)
* **Arch Linux** и производные (Manjaro, Garuda, и т.д.) :
[AUR](https://aur.archlinux.org/packages/portproton)
......@@ -70,7 +70,7 @@ exit
sudo urpmi portproton
```
* **Fedora 37+** and **Nobara**:
* **Fedora 38+** and **Nobara**:
```sh
sudo dnf copr enable boria138/portproton
......@@ -82,22 +82,8 @@ sudo dnf install portproton
**ВНИМАНИЕ** : при универсальном способе установки PortProton зависимости должны быть установлены вручную!
Нормальная установка:
```sh
wget -c "https://github.com/Castro-Fidel/PortWINE/raw/master/portwine_install_script/PortProton_1.0" && sh PortProton_1.0
```
Тихая установка (ENG):
```sh
wget -c "https://github.com/Castro-Fidel/PortWINE/raw/master/portwine_install_script/PortProton_1.0" && sh PortProton_1.0 -eng
```
Тихая установка (RUS):
```sh
wget -c "https://github.com/Castro-Fidel/PortWINE/raw/master/portwine_install_script/PortProton_1.0" && sh PortProton_1.0 -rus
wget -c "https://github.com/Castro-Fidel/PortProton_ALT/raw/main/portproton" && sh PortProton_Installer
```
## Зависимости
......@@ -106,7 +92,7 @@ wget -c "https://github.com/Castro-Fidel/PortWINE/raw/master/portwine_install_sc
Если у вас видеокарта от NVIDIA и установлен проприетарный драйвер, то необходимо проверить, установлена ли lib32-nvidia-utils (без нее ни одна 32-битная игра не будет работать)
* **Ubuntu / Linux Mint / Pop!_OS**
* **Ubuntu / Linux Mint / Pop!_OS / Debian**
```sh
sudo dpkg --add-architecture i386
......@@ -117,7 +103,7 @@ sudo apt update
sudo apt upgrade
sudo apt install curl file libc6 libnss3 policykit-1 xz-utils zenity bubblewrap curl icoutils tar libvulkan1 libvulkan1:i386 wget zenity zstd cabextract xdg-utils openssl bc libgl1-mesa-glx libgl1-mesa-glx:i386
sudo apt install curl file libc6 libnss3 policykit-1 xz-utils bubblewrap curl icoutils tar libvulkan1 libvulkan1:i386 zstd cabextract xdg-utils openssl libgl1 libgl1:i386
```
* **Arch Linux / Manjaro**
......@@ -133,7 +119,7 @@ Include = /etc/pacman.d/mirrorlist
```
```sh
sudo pacman -Syu bash icoutils wget bubblewrap zstd cabextract bc tar openssl gamemode desktop-file-utils curl dbus freetype2 gdk-pixbuf2 ttf-font zenity gzip nss xorg-xrandr vulkan-driver vulkan-icd-loader lsof lib32-freetype2 lib32-libgl lib32-gcc-libs lib32-libx11 lib32-libxss lib32-alsa-plugins lib32-libgpg-error lib32-nss lib32-vulkan-driver lib32-vulkan-icd-loader lib32-gamemode lib32-openssl
sudo pacman -Syu bash bubblewrap zstd cabextract tar openssl desktop-file-utils curl dbus freetype2 gdk-pixbuf2 ttf-font gzip nss xorg-xrandr vulkan-driver vulkan-icd-loader lsof lib32-freetype2 lib32-libgl lib32-gcc-libs lib32-libx11 lib32-libxss lib32-alsa-plugins lib32-libgpg-error lib32-nss lib32-vulkan-driver lib32-vulkan-icd-loader lib32-lib32-openssl
```
Если у вас видеокарта от **NVIDIA**, обязательно проверьте, установлен ли пакет **lib32-nvidia-utils**.
......@@ -142,26 +128,10 @@ sudo pacman -Syu bash icoutils wget bubblewrap zstd cabextract bc tar openssl ga
sudo pacman -Syu lib32-nvidia-utils
```
* **Debian/Deepin**
```sh
sudo apt install software-properties-common -y
sudo apt-add-repository non-free
sudo dpkg --add-architecture i386
sudo apt update
sudo apt upgrade
sudo apt install bubblewrap curl gamemode icoutils tar wget zenity zstd libvulkan1 libvulkan1:i386 steam cabextract
```
* **openSUSE**
```sh
sudo zypper install curl icoutils wget zenity bubblewrap zstd cabextract tar steam zenity zenity-lang gamemoded libgamemode0 libgamemodeauto0
sudo zypper install curl bubblewrap zstd cabextract tar steam
```
* **Fedora**
......@@ -171,7 +141,7 @@ sudo dnf update
sudo dnf upgrade --refresh
sudo dnf install curl gamemode gamemode.i686 icoutils wget zenity bubblewrap zstd cabextract tar openssl mesa-dri-drivers.i686 mesa-vulkan-drivers mesa-vulkan-drivers.i686 vulkan-loader vulkan-loader.i686 nss.i686 alsa-lib.i686 mesa-libGL.i686 mesa-libEGL.i686 wmctrl ImageMagick
sudo dnf install curl bubblewrap zstd cabextract tar openssl mesa-dri-drivers.i686 mesa-vulkan-drivers mesa-vulkan-drivers.i686 vulkan-loader vulkan-loader.i686 nss.i686 alsa-lib.i686 mesa-libGL.i686 mesa-libEGL.i686 wmctrl ImageMagick
```
* **Alt Linux**
......@@ -181,7 +151,7 @@ sudo apt-get update
sudo apt-get dist-upgrade -y
sudo apt-get install bubblewrap cabextract curl gamemode icoutils i586-libvulkan1 libvulkan1 steam vulkan-tools wget zenity zstd
sudo apt-get install bubblewrap cabextract curl icoutils i586-libvulkan1 libvulkan1 vulkan-tools zstd
```
* **ROSA DESKTOP FRESH R12**
......@@ -191,19 +161,19 @@ sudo dnf update
sudo dnf upgrade --refresh
sudo dnf install sysvinit-tools curl libcurl4 icoutils wget zenity bubblewrap zstd cabextract tar libvulkan1 lib64vulkan1 vulkan.x86_64 vulkan.i686 vkd3d.x86_64 vkd3d.i686 coreutils file libc6 libnss3 xz bubblewrap xdg-utils openssl bc libgl1 lib64freetype2 libfreetype2 lib64txc-dxtn libtxc-dxtn lib64opencl1 libopencl1 libdrm2 libdrm2.i686 mesa.i686
sudo dnf install sysvinit-tools curl libcurl4 bubblewrap zstd cabextract tar libvulkan1 lib64vulkan1 vulkan.x86_64 vulkan.i686 vkd3d.x86_64 vkd3d.i686 coreutils file libc6 libnss3 xz bubblewrap xdg-utils openssl libgl1 lib64freetype2 libfreetype2 lib64txc-dxtn libtxc-dxtn lib64opencl1 libopencl1 libdrm2 libdrm2.i686 mesa.i686
```
* **RED OS**
```sh
sudo -E dnf install curl icoutils libcurl wget zenity bubblewrap zstd cabextract tar goverlay openssl steam
sudo -E dnf install curl icoutils libcurl bubblewrap zstd cabextract tar goverlay openssl steam
```
* **Solus 4.x**
```sh
sudo eopkg it curl file zenity bubblewrap curl icoutils tar wget zenity zstd cabextract xdg-utils openssl bc vulkan vulkan-32bit mesalib-32bit samba
sudo eopkg it curl file bubblewrap curl icoutils tar zstd cabextract xdg-utils openssl vulkan vulkan-32bit mesalib-32bit samba
```
## Контакты
......
<div align="center">
<img src="https://raw.githubusercontent.com/Castro-Fidel/PortProton_PKGBUILD/main/portproton.svg" width="64">
<img src="https://raw.githubusercontent.com/Castro-Fidel/PortWINE/data_from_portwine/img/gui/port_proton.svg" width="64">
<h1 align="center">PortProton</h1>
<p align="center">Project designed to make it easy and convenient to run Windows games on Linux for both beginners and advanced users.
The project strives to make launching games (and other software) as simple as possible, but at the same time provides flexible settings for advanced users.</p>
......@@ -60,8 +60,8 @@ exit
sudo urpmi portproton
```
* **Ubuntu 20.04** (Kubuntu, Xubuntu, Lubuntu, etc.), **Linux Mint 20.x** :
[portproton_1.0-2_amd64.deb](https://github.com/Castro-Fidel/PortProton_dpkg/releases/download/portproton_1.0-2_amd64/portproton_1.0-2_amd64.deb)
* **Ubuntu 24.04**, **Debian 12**, **Linux Mint 21.x** **Deepin** :
[portproton_1.4-1_amd64.deb](https://github.com/Castro-Fidel/PortProton_dpkg/releases/download/portproton_1.4-1_amd64/portproton_1.4-1_amd64.deb)
* **Arch Linux** and derivatives (Manjaro, Garuda, etc.) :
[AUR](https://aur.archlinux.org/packages/portproton)
......@@ -69,7 +69,7 @@ sudo urpmi portproton
* **OpenSuse**:
[OBS](https://software.opensuse.org/download/package?package=portproton&project=home%3ABoria138%3APortProton)
* **Fedora 37+** and **Nobara**:
* **Fedora 38+** and **Nobara**:
```sh
sudo dnf copr enable boria138/portproton
......@@ -82,22 +82,8 @@ sudo dnf install portproton
**ATTENTION** : with the universal method of installing PortProton, dependencies must be installed manually!
Normal installation:
```sh
wget -c "https://github.com/Castro-Fidel/PortWINE/raw/master/portwine_install_script/PortProton_1.0" && sh PortProton_1.0
```
Silent installation (ENG):
```sh
wget -c "https://github.com/Castro-Fidel/PortWINE/raw/master/portwine_install_script/PortProton_1.0" && sh PortProton_1.0 -eng
```
Silent installation (RUS):
```sh
wget -c "https://github.com/Castro-Fidel/PortWINE/raw/master/portwine_install_script/PortProton_1.0" && sh PortProton_1.0 -rus
wget -c "https://github.com/Castro-Fidel/PortProton_ALT/raw/main/portproton" && sh PortProton_Installer
```
## Dependencies
......@@ -117,7 +103,7 @@ sudo apt update
sudo apt upgrade
sudo apt install curl file libc6 libnss3 policykit-1 xz-utils zenity bubblewrap curl icoutils tar libvulkan1 libvulkan1:i386 wget zenity zstd cabextract xdg-utils openssl bc libgl1-mesa-glx libgl1-mesa-glx:i386
sudo apt install curl file libc6 libnss3 policykit-1 xz-utils bubblewrap curl icoutils tar libvulkan1 libvulkan1:i386 zstd cabextract xdg-utils openssl libgl libgl1:i386
```
* **Arch Linux / Manjaro**
......@@ -133,7 +119,7 @@ Include = /etc/pacman.d/mirrorlist
```
```sh
sudo pacman -Syu bash icoutils wget bubblewrap zstd cabextract bc tar openssl gamemode desktop-file-utils curl dbus freetype2 gdk-pixbuf2 ttf-font zenity gzip nss xorg-xrandr vulkan-driver vulkan-icd-loader lsof lib32-freetype2 lib32-libgl lib32-gcc-libs lib32-libx11 lib32-libxss lib32-alsa-plugins lib32-libgpg-error lib32-nss lib32-vulkan-driver lib32-vulkan-icd-loader lib32-gamemode lib32-openssl
sudo pacman -Syu bash bubblewrap zstd cabextract tar openssl desktop-file-utils curl dbus freetype2 gdk-pixbuf2 ttf-font gzip nss xorg-xrandr vulkan-driver vulkan-icd-loader lsof lib32-freetype2 lib32-libgl lib32-gcc-libs lib32-libx11 lib32-libxss lib32-alsa-plugins lib32-libgpg-error lib32-nss lib32-vulkan-driver lib32-vulkan-icd-loader lib32-openssl
```
If you have a video card from **NVIDIA** , be sure to check if the **lib32-nvidia-utils** package is installed
......@@ -142,26 +128,10 @@ If you have a video card from **NVIDIA** , be sure to check if the **lib32-nvidi
sudo pacman -Syu lib32-nvidia-utils
```
* **Debian/Deepin**
```sh
sudo apt install software-properties-common -y
sudo apt-add-repository non-free
sudo dpkg --add-architecture i386
sudo apt update
sudo apt upgrade
sudo apt install bubblewrap curl gamemode icoutils tar wget zenity zstd libvulkan1 libvulkan1:i386 steam cabextract
```
* **openSUSE**
```sh
sudo zypper install curl icoutils wget zenity bubblewrap zstd cabextract tar steam zenity zenity-lang gamemoded libgamemode0 libgamemodeauto0
sudo zypper install curl bubblewrap zstd cabextract tar steam
```
* **Fedora**
......@@ -171,7 +141,7 @@ sudo dnf update
sudo dnf upgrade --refresh
sudo dnf install curl gamemode gamemode.i686 icoutils wget zenity bubblewrap zstd cabextract tar openssl mesa-dri-drivers.i686 mesa-vulkan-drivers mesa-vulkan-drivers.i686 vulkan-loader vulkan-loader.i686 nss.i686 alsa-lib.i686 mesa-libGL.i686 mesa-libEGL.i686 wmctrl ImageMagick
sudo dnf install curl bubblewrap zstd cabextract tar openssl mesa-dri-drivers.i686 mesa-vulkan-drivers mesa-vulkan-drivers.i686 vulkan-loader vulkan-loader.i686 nss.i686 alsa-lib.i686 mesa-libGL.i686 mesa-libEGL.i686 wmctrl ImageMagick
```
* **Alt Linux**
......@@ -181,7 +151,7 @@ su -
apt-get update && apt-get dist-upgrade -y
apt-get install bubblewrap cabextract wget zstd gawk tar xz pciutils bc coreutils file curl icoutils wmctrl zenity xdg-utils desktop-file-utils libvulkan1 vulkan-tools libd3d libGL gamemode fontconfig xrdb libcurl libgio libnm libnsl1 libnss glibc-nss glibc-pthread i586-{libvulkan1,libd3d,libGL,libgio,libnm,libnsl1,libnss,glibc-nss,glibc-pthread,libunwind,xorg-dri-swrast}
apt-get install bubblewrap cabextract zstd gawk tar xz pciutils coreutils file curl icoutils wmctrl xdg-utils desktop-file-utils libvulkan1 vulkan-tools libd3d libGL fontconfig xrdb libcurl libgio libnm libnsl1 libnss glibc-nss glibc-pthread i586-{libvulkan1,libd3d,libGL,libgio,libnm,libnsl1,libnss,glibc-nss,glibc-pthread,libunwind,xorg-dri-swrast}
exit
```
......@@ -193,19 +163,19 @@ sudo dnf update
sudo dnf upgrade --refresh
sudo dnf install sysvinit-tools curl libcurl4 icoutils wget zenity bubblewrap zstd cabextract tar libvulkan1 lib64vulkan1 vulkan.x86_64 vulkan.i686 vkd3d.x86_64 vkd3d.i686 coreutils file libc6 libnss3 xz bubblewrap xdg-utils openssl bc libgl1 lib64freetype2 libfreetype2 lib64txc-dxtn libtxc-dxtn lib64opencl1 libopencl1 libdrm2 libdrm2.i686 mesa.i686
sudo dnf install sysvinit-tools curl libcurl4 bubblewrap zstd cabextract tar libvulkan1 lib64vulkan1 vulkan.x86_64 vulkan.i686 vkd3d.x86_64 vkd3d.i686 coreutils file libc6 libnss3 xz bubblewrap xdg-utils openssl libgl1 lib64freetype2 libfreetype2 lib64txc-dxtn libtxc-dxtn lib64opencl1 libopencl1 libdrm2 libdrm2.i686 mesa.i686
```
* **RED OS**
```sh
sudo -E dnf install curl icoutils libcurl wget zenity bubblewrap zstd cabextract tar goverlay openssl steam
sudo -E dnf install curl icoutils libcurl bubblewrap zstd cabextract tar goverlay openssl steam
```
* **Solus 4.x**
```sh
sudo eopkg it curl file zenity bubblewrap curl icoutils tar wget zenity zstd cabextract xdg-utils openssl bc vulkan vulkan-32bit mesalib-32bit samba
sudo eopkg it curl file bubblewrap curl icoutils tar zstd cabextract xdg-utils openssl bc vulkan vulkan-32bit mesalib-32bit samba
```
## Contacts
......
......@@ -2,6 +2,18 @@ You can help us in the development of the project on the website: https://linux-
----------------------------------------
Changelog:
###Scripts version 2252### Date: 09.02.2024 / Download update size: 33 megabytes
* GUI has been completely translated from zenity to yad
* download from wget has been switched to curl (improved download stability with some providers)
* improved graphics in games are enabled by default (turned off by pressing: "HOME")
* Cyrillic check in paths with a warning has been added
* fixed the work of zink in x11 in new versions of mesa (thanks Htylol)
* improved the work of FAKE_DLSS (CyberFSR project)
* added a setting for enabling FAKE_DLSS_3 (experimental dlssg-to-fsr3 project)
* updated the plugins package to version v13
* updated GALLIUM_NINE version to 0.9
* updated NVAPI version to 0.6.4-20
###Scripts version 2251### Date: 02.02.2024 / Download update size: 8 megabytes
* HOTFIX - fixed automatic closing of EAapp after its installation
......
......@@ -2,8 +2,17 @@
-----------------------------------------
История изменений:
###Scripts version 2252### Дата: 09.02.2024 / Размер скачиваемого обновления: 33 мегабайт
* интерфейс полностью переведен с zenity на yad
* скачивание с wget переведено на curl (для улучшения стабильности скачивания с некоторыми провайдерами)
* включено по умолчанию улучшение графики в играх (выключение по клавише: "HOME")
* добалена проверка на кирилицу в путях с предупреждением
* исправлена работа zink в x11 в новых версиях mesa (спасибо Htylol)
* улучшена работа FAKE_DLSS (проект CyberFSR)
* добавлена настройка включения FAKE_DLSS_3 (эксперементальный проект dlssg-to-fsr3)
* обновлен пакет plugins до версии v13
* обновлена версия GALLIUM_NINE до 0.9
* обновлена версия NVAPI до 0.6.4-20
###Scripts version 2251### Дата: 02.02.2024 / Размер скачиваемого обновления: 8 мегабайт
* HOTFIX - исправлено автоматическое закрытие EAapp после его установки на некоторых системах
......
......@@ -33,22 +33,17 @@ d3d9.maxFrameRate = 240
#
# Supported values: Any four-digit hex number.
dxgi.customDeviceId = 222F
dxgi.customVendorId = 10de
# d3d9.customDeviceId = 222F
# dxgi.customDeviceDesc = "NVIDIA GeForce RTX 4090"
# dxgi.customDeviceId = 2684
# dxgi.customVendorId = 10de
# dxgi.hideAmdGpu = True
# dxgi.hideNvidiaGpu = False
# d3d9.customDeviceDesc = "NVIDIA GeForce RTX 4090"
# d3d9.customDeviceId = 2684
# d3d9.customVendorId = 10de
# Override the reported device description
#
# Supported values: Any string.
# dxgi.customDeviceDesc = ""
# d3d9.customDeviceDesc = ""
# Override maximum amount of device memory and shared system memory
# reported to the application. This may fix texture streaming issues
# in games that do not support cards with large amounts of VRAM.
......
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 600 600"><defs><linearGradient id="a" x1="300" x2="300" y1="44" y2="556" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#46bac6"/><stop offset="1" stop-color="#1497a5"/></linearGradient></defs><circle cx="300" cy="300" r="256" style="fill:url(#a);stroke-width:0"/><image xlink:href="data:image/png;base64,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" width="404" height="360" style="opacity:.6" transform="translate(98 136)"/><path d="M174.4 365.86c-4.47-1.89-8.88-3.65-13.2-5.6-13.72-6.21-26.64-13.69-37.48-24.32-10.41-10.21-17.06-22.11-16.42-37.26.49-11.67 5.46-21.3 13.08-29.76 12.22-13.58 27.75-22.27 44.19-29.56 2.08-.92 4.19-1.77 6.29-2.66-1.23-6.43-2.79-12.64-3.51-18.95-.48-4.22-1.96-6.73-5.69-9.11-12.04-7.69-16.9-22.27-12.68-35.9 4.14-13.37 16.43-22.29 30.67-22.42 1.27-.01 2.81-.53 3.77-1.35 10.12-8.65 21.95-11.02 34.79-9.63 20.54 2.22 38.49 11.12 55.49 22.14 8.63 5.59 16.83 11.83 25.39 17.9 5.57-4.13 11.36-8.63 17.36-12.83 14.86-10.4 30.53-19.28 48.1-24.26 11.59-3.29 23.37-4.97 35.24-1.26 14.76 4.62 23.8 15.05 28.6 29.29 5.33 15.8 4.54 31.98 1.99 48.16-.89 5.64-2.04 11.23-3 16.49 9.17 4.58 18.47 8.76 27.31 13.75 12.67 7.14 24.03 15.99 31.55 28.82 8.79 15 8.58 30.15-.13 45.06-1.58 2.7-1.95 4.88-1.29 7.87 2.88 13.17-2.49 26.17-13.5 33.42-11.08 7.31-24.89 7.01-36.1-.64-.89-.6-2.43-.74-3.51-.47-2.02.51-3.88 1.59-5.89 2.21-1.85.57-2.24 1.35-1.71 3.31 3.07 11.34 5.41 22.84 6.08 34.6.76 13.44.39 26.78-5.21 39.35-8.66 19.43-26.22 29.06-47.48 26.5-21.02-2.53-39.25-11.77-56.63-23.04-6.87-4.46-13.35-9.53-19.93-14.43-1.44-1.07-2.35-1.26-3.92-.06-6.08 4.62-12.42 8.9-18.41 13.63-1.31 1.03-2.01 3.34-2.24 5.15-.83 6.52-3.1 12.35-7.24 17.47-11.21 13.84-32.26 15.64-45.47 3.73-1.88-1.7-3.67-2.32-6.12-2.16-7.71.51-15.35-.22-22.38-3.54-12.22-5.77-20.15-15.49-24.21-28.28-3.69-11.63-4.14-23.57-3.12-35.69.98-11.63 3.23-22.97 6.25-34.2.12-.44.2-.9.32-1.47Zm124.76-146.57c-10.98.57-22.03 1.08-33.07 1.78-1.42.09-3.16.86-4.1 1.9-17.77 19.7-33.15 41.15-46.75 63.91-1.02 1.7-1.08 3.06-.12 4.73 5 8.67 9.78 17.47 14.96 26.04 9.15 15.13 19.59 29.37 30.81 43.02.93 1.13 2.52 2.32 3.87 2.4 10.77.62 21.55 1.34 32.32 1.33 11.25 0 22.5-.75 33.75-1.27 2.54-.12 4.74-.65 6.65-3.02 17.35-21.43 32.5-44.28 45.34-68.68.88-1.67.82-2.92-.2-4.46-1.84-2.78-3.46-5.7-5.23-8.54-12.11-19.51-25.82-37.84-41.08-55-.93-1.05-2.36-2.25-3.63-2.33-11.14-.74-22.29-1.23-33.55-1.81Zm108.1 9.34c1.1-8.33 2.5-16.3 3.14-24.33.85-10.61.25-21.14-3.53-31.31-4.25-11.4-12.12-18.43-24.16-20.7-10.47-1.97-20.53-.02-30.39 3.3-16.09 5.42-30.36 14.21-43.92 24.23-1.58 1.17-3.11 2.4-5.05 3.91.98.77 1.69 1.25 2.29 1.83 9.5 9.25 19.07 18.43 28.41 27.84 2.04 2.05 4.09 3.19 6.86 3.37 2.66.17 5.34.31 7.96.73 12.4 1.96 24.83 3.85 37.18 6.11 6.81 1.24 13.49 3.17 21.21 5.02Zm9.41 139.76c-.8.21-1.24.31-1.68.45-21.94 7.08-44.41 11.63-67.29 14.28-.98.11-2.04.9-2.76 1.66-6 6.39-11.88 12.9-17.89 19.28-3.45 3.66-7.08 7.15-10.71 10.81.45.4.78.73 1.14 1.01 9.76 7.38 20.02 14 31.1 19.22 11.73 5.53 23.84 9.67 37.09 9.47 15.65-.23 27.28-8.98 31.71-24.04 5.09-17.33 2.9-34.54-.72-52.14ZM200.8 158.57c18.93 18.77 10.07 47.65-12.75 54.59 1.02 5.41 2.04 10.86 3.07 16.31.69-.04.98 0 1.25-.09 20.48-5.92 41.3-10.02 62.53-12.08 3.05-.3 5.88-.69 8.44-3.32 9.3-9.58 19-18.78 28.55-28.12.78-.76 1.58-1.5 2.48-2.34-12.61-9.79-25.57-18.32-39.91-24.55-11.03-4.79-22.44-8.19-34.67-7.34-6.86.48-13.3 2.37-18.98 6.93Zm-28.64 84.71c-12.77 4.9-30.13 15.8-39.01 27.75-4.75 6.39-8.19 13.37-8.11 21.55.08 8.28 3.52 15.38 8.59 21.68 12.4 15.43 29.5 23.71 47.33 31.08.35-.72.61-1.21.84-1.72 5.38-12.06 10.8-24.1 16.08-36.2.44-1 .22-2.59-.26-3.63-3.51-7.52-7.52-14.81-10.69-22.47-5.17-12.49-9.82-25.2-14.77-38.04Zm9.2 125.41c-.14.42-.55 1.2-.64 2.02-1.1 9.65-2.69 19.29-3.07 28.97-.44 11.29 1.72 22.21 8.04 31.97 5.15 7.95 17.99 14.05 27.05 12.58 1.91-12.91 8.56-22.4 21.01-26.93 12.6-4.59 23.81-1.34 33.83 7.59 4.67-3.27 9.33-6.53 14.07-9.85-.39-.58-.55-.93-.8-1.19-9.35-9.8-18.69-19.6-28.11-29.33-.77-.79-2.08-1.28-3.21-1.47-11.34-1.94-22.78-3.4-34.03-5.77-11.43-2.4-22.67-5.67-34.14-8.6Zm243.71-126c-6.29 21.69-14.98 42.08-25.26 61.84-.41.78-.13 2.18.29 3.08 3.46 7.54 7.1 14.99 10.52 22.55 2.11 4.65 3.93 9.44 5.87 14.13q5.56-1.5 5.5-6.69c-.25-22.29 21.87-37.89 42.76-30.18.68.25 1.41.37 2.08.54 5.22-8.9 6.57-17.94 2.57-27.51-2.39-5.71-5.83-10.71-10.12-15.14-9.65-9.97-21.43-16.73-34.21-22.62Zm-82.79-20.27c16.57 19.06 31.1 39.36 44.31 60.87 5.71-9.5 17.89-41.95 18.17-48.13-8.5-4.34-53.84-13.68-62.47-12.75Zm-131.45 60.95c7.34-10.83 14.09-21.35 21.42-31.46 7.31-10.07 15.2-19.72 23.16-29.97-5.66.83-10.91 1.61-16.16 2.35-14.92 2.11-29.54 5.54-43.95 9.95-2.36.72-2.56 1.75-1.89 3.71 2.76 8.02 5.25 16.14 8.28 24.05 2.74 7.18 6.04 14.15 9.15 21.36Zm20.81 75.52c-10.04-15.56-19.9-30.83-30.29-46.94-4.97 12.04-9.76 23.63-14.64 35.44 15.12 5.35 29.82 8.9 44.93 11.5Zm134.95-.51c3.72-.76 7.36-1.3 10.89-2.26 10.36-2.82 20.67-5.81 31.01-8.7 1.78-.5 1.88-1.46 1.27-2.99-1.11-2.73-1.98-5.56-3.12-8.28-3.37-8.05-6.82-16.07-10.25-24.1-9.99 15.53-19.75 30.72-29.79 46.33Zm-38.28-143.11c.21-.26.42-.51.64-.77-9.62-8.75-19.22-17.53-28.92-26.19-.46-.41-2.16-.15-2.74.39-9.04 8.34-17.98 16.77-26.93 25.2-.43.4-.67.99-.92 1.38h58.88Zm-45.37 170.37c5.05 4.83 9.56 9.04 13.95 13.37 1.52 1.5 2.56 1.38 4-.09 2.54-2.58 5.28-4.96 7.9-7.46 1.86-1.77 3.68-3.6 5.94-5.83h-31.79Z" style="fill:#fff;stroke-width:0"/><path d="M299.14 234.92c31.55.2 56.88 25.89 56.62 57.42-.25 31.33-25.96 56.55-57.43 56.35-31.37-.2-56.51-25.99-56.29-57.75.21-30.79 26.13-56.22 57.1-56.02Z" style="fill:#fff;stroke-width:0"/></svg>
\ No newline at end of file
data_from_portwine/img/w.png

57.1 KB | W: | H:

data_from_portwine/img/w.png

62.7 KB | W: | H:

data_from_portwine/img/w.png
data_from_portwine/img/w.png
data_from_portwine/img/w.png
data_from_portwine/img/w.png
  • 2-up
  • Swipe
  • Onion skin
xterm*faceSize: 12
xterm*vt100*geometry: 120x20
xterm*saveLines: 16384
xterm*loginShell: true
xterm*charClass: 33:48,35:48,37:48,43:48,45-47:48,64:48,95:48,126:48
xterm*termName: xterm-color
xterm*eightBitInput: false
!BLK Cursor
#define _color0 #000d18
#define _color8 #000d18
!RED Tag
#define _color1 #e89393
#define _color9 #e89393
!GRN SpecialKey
#define _color2 #9ece13
#define _color10 #9ece13
!YEL Keyword
#define _color3 #f0dfaf
#define _color11 #f0dfaf
!BLU Number
#define _color4 #8cd0d3
#define _color12 #8cd0d3
!MAG Precondit
#define _color5 #c0bed1
#define _color13 #c0bed1
!CYN Float
#define _color6 #dfaf8f
#define _color14 #dfaf8f
!WHT Search
#define _color7 #efefef
#define _color15 #efefef
!FMT Include, StatusLine, ErrorMsg
#define _colorBD #ffcfaf
#define _colorUL #ccdc90
#define _colorIT #80d4aa
!TXT Normal, Normal, Cursor
#define _foreground #dcdccc
#define _background #1f1f1f
#define _cursorColor #8faf9f
URxvt*color0 : _color0
URxvt*color1 : _color1
URxvt*color2 : _color2
URxvt*color3 : _color3
URxvt*color4 : _color4
URxvt*color5 : _color5
URxvt*color6 : _color6
URxvt*color7 : _color7
URxvt*color8 : _color8
URxvt*color9 : _color9
URxvt*color10 : _color10
URxvt*color11 : _color11
URxvt*color12 : _color12
URxvt*color13 : _color13
URxvt*color14 : _color14
URxvt*color15 : _color15
URxvt*colorBD : _colorBD
URxvt*colorIT : _colorIT
URxvt*colorUL : _colorUL
URxvt*foreground : _foreground
URxvt*background : _background
URxvt*cursorColor : _cursorColor
XTerm*color0 : _color0
XTerm*color1 : _color1
XTerm*color2 : _color2
XTerm*color3 : _color3
XTerm*color4 : _color4
XTerm*color5 : _color5
XTerm*color6 : _color6
XTerm*color7 : _color7
XTerm*color8 : _color8
XTerm*color9 : _color9
XTerm*color10 : _color10
XTerm*color11 : _color11
XTerm*color12 : _color12
XTerm*color13 : _color13
XTerm*color14 : _color14
XTerm*color15 : _color15
XTerm*colorBD : _colorBD
XTerm*colorIT : _colorIT
XTerm*colorUL : _colorUL
XTerm*foreground : _foreground
XTerm*background : _background
XTerm*cursorColor : _cursorColor
......@@ -6,7 +6,7 @@ then
KEY_CREDITS=$RANDOM
"${pw_yad_v12_3}" --plug="${KEY_CREDITS}" --tabnum=1 --show-uri \
--image-path="$PW_GUI_ICON_PATH" --image="port_proton" \
--image-path="$PW_GUI_ICON_PATH" --image="port_proton" --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \
--text-align=center --scroll --text="PortProton v. ${install_ver}
scripts v. ${scripts_install_ver}
......@@ -357,10 +357,9 @@ Yandex кошелек: 410012267513818
WINE-PROTON: https://github.com/ValveSoftware/Proton
WINE-PROTON-GE: https://github.com/GloriousEggroll/proton-ge-custom/
Kron4ek/Wine: https://github.com/Kron4ek/Wine-Builds
YAD: https://github.com/v1cont/yad
ZENITY: https://github.com/GNOME/zenity" 2>/dev/null &
YAD: https://github.com/v1cont/yad" 2>/dev/null &
"${pw_yad_v12_3}" --title "О НАС" --key="${KEY_CREDITS}" --window-icon="$PW_GUI_ICON_PATH/port_proton.png" \
"${pw_yad_v12_3}" --title "О НАС" --key="${KEY_CREDITS}" --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \
--notebook --no-buttons --tab-pos=bottom \
--tab="О PORTPROTON" --tab="АВТОРЫ" --tab="ЛИЦЕНЗИЯ" --tab="СПОНСОРЫ" --tab="ПРИСОЕДИНИТЬСЯ" \
--tab="БИБЛИОТЕКИ"
......@@ -725,11 +724,10 @@ Yandex wallet: 410012267513818
WINE-PROTON: https://github.com/ValveSoftware/Proton
WINE-PROTON-GE: https://github.com/GloriousEggroll/proton-ge-custom/
Kron4ek/Wine: https://github.com/Kron4ek/Wine-Builds
YAD: https://github.com/v1cont/yad
ZENITY: https://github.com/GNOME/zenity" 2>/dev/null &
YAD: https://github.com/v1cont/yad" 2>/dev/null &
"${pw_yad_v12_3}" --title "ABOUT US" --key="${KEY_CREDITS}" --window-icon="$PW_GUI_ICON_PATH/port_proton.png" \
"${pw_yad_v12_3}" --title "ABOUT US" --key="${KEY_CREDITS}" ---window-icon="$PW_GUI_ICON_PATH/portproton.svg" \
--notebook --no-buttons --tab-pos=bottom \
--tab="ABOUT PORTPROTON" --tab="AUTORS" --tab="LICENSE" --tab="SPONSORS" --tab="JOIN" \
--tab="THIRD PARTY LIBRARIES"
......
......@@ -11,6 +11,11 @@ print_error () {
}
export -f print_error
fatal () {
print_error "$@"
exit 1
}
print_warning () {
printf "\E[33m%s Warning: $@ %s\e[0m\n"
}
......@@ -119,10 +124,10 @@ try_download_game () {
PW_DOWNLOAD_FILE_NAME="$(basename $1)"
set -o pipefail
curl -C - -# -A "Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)" -H 'Cache-Control: no-cache, no-store' -H 'Pragma: no-cache' -L "$1" -o "$2" 2>&1 | \
tr '\r' '\n' | sed -u -e 's/#//g' -e 's/ //g' -e 's/\.[[:digit:]]%//' | \
tr '\r' '\n' | sed -ur 's|[# ]+||g;s|.*=.*||g;s|.*|#Downloading at &\n&|g' | \
"${pw_yad_v12_3}" --progress --percentage=0 --text="Download ${PW_DOWNLOAD_FILE_NAME}" --auto-close --no-escape \
--auto-kill --center --text-align="center" --fixed --no-buttons --title "PortProton" --width=500 --height=90 \
--window-icon="$PW_GUI_ICON_PATH/port_proton.png"
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" --borders=15
if [ "${PIPESTATUS[0]}" != 0 ] ; then
print_error "Failed to download ${PW_DOWNLOAD_FILE_NAME}."
return 1
......@@ -136,18 +141,18 @@ try_download () {
[[ ! -f "${pw_yad_v12_3}" ]] && local pw_yad_v12_3="yad"
set -o pipefail
curl -# -A "Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)" -H 'Cache-Control: no-cache, no-store' -H 'Pragma: no-cache' -L "$1" -o "$2" 2>&1 | \
tr '\r' '\n' | sed -u -e 's/#//g' -e 's/ //g' -e 's/\.[[:digit:]]%//' | \
tr '\r' '\n' | sed -ur 's|[# ]+||g;s|.*=.*||g;s|.*|#Downloading at &\n&|g' | \
"${pw_yad_v12_3}" --progress --percentage=0 --text="Download ${PW_DOWNLOAD_FILE_NAME}" --auto-close --no-escape \
--auto-kill --center --text-align="center" --fixed --no-buttons --title "PortProton" --width=500 --height=90 \
--window-icon="$PW_GUI_ICON_PATH/port_proton.png"
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" --borders=15
if [ "${PIPESTATUS[0]}" != 0 ] ; then
print_error "Failed to download ${PW_DOWNLOAD_FILE_NAME} from GitHub."
print_info "Try download ${PW_DOWNLOAD_FILE_NAME} from FTP"
curl -# -A "Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)" -L "ftp://171.22.215.18/archives/${PW_DOWNLOAD_FILE_NAME}" -o "$2" 2>&1 | \
tr '\r' '\n' | sed -u -e 's/#//g' -e 's/ //g' -e 's/\.[[:digit:]]%//' | \
tr '\r' '\n' | sed -ur 's|[# ]+||g;s|.*=.*||g;s|.*|#Downloading at &\n&|g' | \
"${pw_yad_v12_3}" --progress --percentage=0 --text="Download ${PW_DOWNLOAD_FILE_NAME}" --auto-close --no-escape \
--auto-kill --center --text-align="center" --fixed --no-buttons --title "PortProton" --width=500 --height=90 \
--window-icon="$PW_GUI_ICON_PATH/port_proton.png"
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" --borders=15
if [ "${PIPESTATUS[0]}" != 0 ] ; then
print_error "Failed to download ${PW_DOWNLOAD_FILE_NAME} from FTP."
return 1
......@@ -161,10 +166,10 @@ try_download_to_path () {
PW_DOWNLOAD_FILE_NAME="$(basename $1)"
set -o pipefail
curl -# -A "Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)" -H 'Cache-Control: no-cache, no-store' -H 'Pragma: no-cache' -L "$1" -o "$2/$PW_DOWNLOAD_FILE_NAME" 2>&1 | \
tr '\r' '\n' | sed -u -e 's/#//g' -e 's/ //g' -e 's/\.[[:digit:]]%//' | \
tr '\r' '\n' | sed -ur 's|[# ]+||g;s|.*=.*||g;s|.*|#Downloading at &\n&|g' | \
"${pw_yad_v12_3}" --progress --percentage=0 --text="Download ${PW_DOWNLOAD_FILE_NAME}" --auto-close --no-escape \
--auto-kill --center --text-align="center" --fixed --no-buttons --title "PortProton" --width=500 --height=90 \
--window-icon="$PW_GUI_ICON_PATH/port_proton.png"
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" --borders=15
if [ "${PIPESTATUS[0]}" != 0 ] ; then
print_error "Failed to download $1."
return 1
......@@ -231,6 +236,15 @@ var_ld_library_path_update() {
return 0
}
pw_notify_send () {
if command -v notify-send &>/dev/null ; then
if [[ -f "$PW_GUI_ICON_PATH/portproton.svg" ]]
then notify-send -a PortProton -i "$PW_GUI_ICON_PATH/portproton.svg" $@ "${PW_NOTIFY_TEXT}"
else notify-send -a PortProton $@ "${PW_NOTIFY_TEXT}"
fi
fi
}
unpack_tar_zst () {
set -o pipefail
unset PW_ZSTD_PORT
......@@ -240,7 +254,7 @@ unpack_tar_zst () {
pw_stop_progress_bar_cover_block
[ "${PIPESTATUS[0]}" != 0 ] && print_error "File $1 unpacking error." && return 1 || return 0
else
env LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${PW_WINELIB}/portable/lib/lib64:${PW_WINELIB}/portable/lib/lib" tar -I "${PW_WINELIB}/portable/bin/zstd" -xhvf "$1" -C "$2"
env LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${PW_PLUGINS_PATH}/portable/lib/lib64:${PW_PLUGINS_PATH}/portable/lib/lib" tar -I "${PW_PLUGINS_PATH}/portable/bin/zstd" -xhvf "$1" -C "$2"
pw_stop_progress_bar_cover_block
[ "${PIPESTATUS[0]}" != 0 ] && print_error "File $1 unpacking error." && return 1 || return 0
fi
......@@ -445,6 +459,22 @@ init_wine_ver () {
return 0
}
pw_use_command () {
if command -v "$1" $>/dev/null ; then
$@
else
if [[ -f "${PW_PLUGINS_PATH}/portable/bin/${1}" ]] ; then
if [ ! -z "$LD_LIBRARY_PATH" ]
then env LD_LIBRARY_PATH="${PW_PLUGINS_PATH}/portable/lib/lib64:$LD_LIBRARY_PATH" "${PW_PLUGINS_PATH}/portable/bin/"$@
else env LD_LIBRARY_PATH="${PW_PLUGINS_PATH}/portable/lib/lib64" "${PW_PLUGINS_PATH}/portable/bin/"$@
fi
else
print_error "command $1 - not found"
exit 1
fi
fi
}
pw_init_runtime () {
if grep -q -E '(ROSA Fresh|RED OS)' "/etc/os-release" ; then
......@@ -454,15 +484,15 @@ pw_init_runtime () {
fi
PW_PV_OVERRIDES="/usr/lib/pressure-vessel/overrides/lib"
export PW_LD_LIBRARY_PATH="${WINEDIR}/lib64:${WINEDIR}/lib:${PW_WINELIB}/portable/lib/lib64:${PW_WINELIB}/portable/lib/lib32:${PW_PV_OVERRIDES}/x86_64-linux-gnu/aliases:${PW_PV_OVERRIDES}/i386-linux-gnu/aliases"
export PW_LD_LIBRARY_PATH="${WINEDIR}/lib64:${WINEDIR}/lib:${PW_PLUGINS_PATH}/portable/lib/lib64:${PW_PLUGINS_PATH}/portable/lib/lib32:${PW_PV_OVERRIDES}/x86_64-linux-gnu/aliases:${PW_PV_OVERRIDES}/i386-linux-gnu/aliases"
if [ ! -z ${PATH_TMP} ]
then export PATH="${PATH_TMP}"
else export PATH_TMP="${PATH}"
fi
if [ ! -z "${PATH}" ]
then export PATH="${WINEDIR}/bin:${PATH}:${PW_WINELIB}/portable/bin"
else export PATH="${WINEDIR}/bin:${PW_WINELIB}/portable/bin"
then export PATH="${WINEDIR}/bin:${PATH}:${PW_PLUGINS_PATH}/portable/bin"
else export PATH="${WINEDIR}/bin:${PW_PLUGINS_PATH}/portable/bin"
fi
if [ "${PW_USE_GSTREAMER}" = 1 ] ; then
......@@ -497,7 +527,7 @@ pw_init_runtime () {
unset PW_VK_LAYER_PATH
else
export PRESSURE_VESSEL_IMPORT_VULKAN_LAYERS=0
export PW_VK_LAYER_PATH="${PW_WINELIB}/portable/share/vulkan/implicit_layer.d"
export PW_VK_LAYER_PATH="${PW_PLUGINS_PATH}/portable/share/vulkan/implicit_layer.d"
fi
# export PRESSURE_VESSEL_GRAPHICS_PROVIDER="/"
......@@ -526,7 +556,7 @@ pw_init_runtime () {
done
# drop portable: libssl 32-bit
try_remove_file "${PW_WINELIB}/portable/lib/lib32/libssl.so.1.1"
try_remove_file "${PW_PLUGINS_PATH}/portable/lib/lib32/libssl.so.1.1"
print_info "RUNTIME is enabled"
}
......@@ -676,8 +706,8 @@ stop_portwine () {
export -f stop_portwine
pw_download_libs () {
if [[ ! -e "${PW_WINELIB}/portable/bin/yad" || ! -e "${PW_WINELIB}/portable/lib/p7zip/7z" \
|| ! -e "${PW_WINELIB}/runtime/files/bin/vkcube" || -e "${PORT_WINE_TMP_PATH}/libs${PW_LIBS_VER}.tar.xz" ]] ;
if [[ ! -e "${PW_WINELIB}/runtime/files/bin/vkcube" ]] \
|| [[ ! -f "${PW_WINELIB}/pressure-vessel/bin/pv-bwrap" ]]
then
print_info "Download and install libraries..."
if try_download "github.com/Castro-Fidel/PortWINE/releases/download/libs${PW_LIBS_VER}/libs${PW_LIBS_VER}.tar.xz" "${PORT_WINE_TMP_PATH}/libs${PW_LIBS_VER}.tar.xz" ; then
......@@ -687,12 +717,13 @@ pw_download_libs () {
for RM_LIBS in `ls ${PORT_WINE_TMP_PATH} | grep libs_v | grep -v libs${PW_LIBS_VER}`
do try_remove_dir "${PORT_WINE_TMP_PATH}/${RM_LIBS}"
done
# TODO: drop clear prefix, and add update prefix from new libs
pw_clear_pfx
fi
else
try_remove_dir "${PORT_WINE_TMP_PATH}/libs${PW_LIBS_VER}"
try_remove_file "${PORT_WINE_TMP_PATH}/libs${PW_LIBS_VER}.tar.xz"
if zenity_error_download
if yad_error_download
then pw_download_libs
else
export PW_LIBS_VER="$(echo _v$(($(echo $PW_LIBS_VER | sed 's/_v//') - 1)))"
......@@ -700,7 +731,7 @@ pw_download_libs () {
fi
fi
else
if zenity_error_download
if yad_error_download
then pw_download_libs
else
export PW_LIBS_VER="$(echo _v$(($(echo $PW_LIBS_VER | sed 's/_v//') - 1)))"
......@@ -708,11 +739,7 @@ pw_download_libs () {
fi
fi
fi
export pw_yad="${PW_WINELIB}/portable/bin/yad"
export pw_yad_v12_3="${PW_WINELIB}/portable/bin/yad_v12_3"
export pw_zstd="${PW_WINELIB}/portable/bin/zstd"
export pw_7z="${PW_WINELIB}/portable/lib/p7zip/7z"
export PW_XTERM="${PW_WINELIB}/portable/bin/xterm -geometry 159x37 -e"
try_remove_dir "${PW_WINELIB}/portable"
return 0
}
......@@ -738,10 +765,10 @@ pw_check_and_download_wine () {
try_remove_dir "${PORT_WINE_PATH}/data/tmp/${PW_WINE_USE}"
try_remove_dir "${PORT_WINE_PATH}/data/dist/${PW_WINE_USE}"
zenity_error_download && pw_check_and_download_wine || exit 1
yad_error_download && pw_check_and_download_wine || exit 1
fi
else
zenity_error_download && pw_check_and_download_wine || exit 1
yad_error_download && pw_check_and_download_wine || exit 1
fi
fi
return 0
......@@ -759,7 +786,7 @@ pw_check_and_download_dxvk_and_vkd3d () {
try_remove_file "${PW_VULKAN_DIR}/dxvk-${DXVK_VAR_VER}.tar.xz"
try_remove_dir dxvk-${DXVK_VAR_VER}
zenity_error_download && pw_check_and_download_dxvk_and_vkd3d || exit 1
yad_error_download && pw_check_and_download_dxvk_and_vkd3d || exit 1
fi
elif try_download "https://github.com/doitsujin/dxvk/releases/download/v${DXVK_VAR_VER}/dxvk-${DXVK_VAR_VER}.tar.gz" "${PW_VULKAN_DIR}/dxvk-${DXVK_VAR_VER}.tar.gz" ; then
if unpack_tar_gz "${PW_VULKAN_DIR}/dxvk-${DXVK_VAR_VER}.tar.gz" "${PW_VULKAN_DIR}" ; then
......@@ -768,10 +795,10 @@ pw_check_and_download_dxvk_and_vkd3d () {
try_remove_file "${PW_VULKAN_DIR}/dxvk-${DXVK_VAR_VER}.tar.gz"
try_remove_dir dxvk-${DXVK_VAR_VER}
zenity_error_download && pw_check_and_download_dxvk_and_vkd3d || exit 1
yad_error_download && pw_check_and_download_dxvk_and_vkd3d || exit 1
fi
else
zenity_error_download && pw_check_and_download_dxvk_and_vkd3d || exit 1
yad_error_download && pw_check_and_download_dxvk_and_vkd3d || exit 1
fi
fi
done
......@@ -787,7 +814,7 @@ pw_check_and_download_dxvk_and_vkd3d () {
try_remove_file "${PW_VULKAN_DIR}/vkd3d-proton-${VKD3D_VAR_VER}.tar.xz"
try_remove_dir vkd3d-proton-${VKD3D_VAR_VER}
zenity_error_download && pw_check_and_download_dxvk_and_vkd3d || exit 1
yad_error_download && pw_check_and_download_dxvk_and_vkd3d || exit 1
fi
elif try_download "https://github.com/HansKristian-Work/vkd3d-proton/releases/download/v${VKD3D_VAR_VER}/vkd3d-proton-${VKD3D_VAR_VER}.tar.zst" "${PW_VULKAN_DIR}/vkd3d-proton-${VKD3D_VAR_VER}.tar.zst" ; then
if unpack_tar_zst "${PW_VULKAN_DIR}/vkd3d-proton-${VKD3D_VAR_VER}.tar.zst" "${PW_VULKAN_DIR}" ; then
......@@ -796,10 +823,10 @@ pw_check_and_download_dxvk_and_vkd3d () {
try_remove_file "${PW_VULKAN_DIR}/vkd3d-proton-${VKD3D_VAR_VER}.tar.zst"
try_remove_dir vkd3d-proton-${VKD3D_VAR_VER}
zenity_error_download && pw_check_and_download_dxvk_and_vkd3d || exit 1
yad_error_download && pw_check_and_download_dxvk_and_vkd3d || exit 1
fi
else
zenity_error_download && pw_check_and_download_dxvk_and_vkd3d || exit 1
yad_error_download && pw_check_and_download_dxvk_and_vkd3d || exit 1
fi
fi
done
......@@ -814,10 +841,10 @@ pw_check_and_download_dxvk_and_vkd3d () {
try_remove_file "${PW_VULKAN_DIR}/d8vk-${D8VK_VER}.tar.xz"
try_remove_dir "d8vk-${D8VK_VER}"
zenity_error_download && pw_check_and_download_dxvk_and_vkd3d || exit 1
yad_error_download && pw_check_and_download_dxvk_and_vkd3d || exit 1
fi
else
zenity_error_download && pw_check_and_download_dxvk_and_vkd3d || exit 1
yad_error_download && pw_check_and_download_dxvk_and_vkd3d || exit 1
fi
fi
......@@ -825,20 +852,31 @@ pw_check_and_download_dxvk_and_vkd3d () {
}
pw_check_and_download_plugins () {
if [[ ! -d "${PW_PLUGINS_PATH}/fake_dlss" ]] || [[ ! -d "${PW_PLUGINS_PATH}/nvapi" ]] ; then
if [[ ! -f "${PW_PLUGINS_PATH}/portable/bin/yad_new" ]] \
|| [[ ! -f "${PW_PLUGINS_PATH}/portable/bin/yad_v12_3" ]]
then
print_info "Download and install plugins${PW_PLUGINS_VER}..."
if try_download "github.com/Castro-Fidel/wine_builds/releases/download/plugins${PW_PLUGINS_VER}/plugins${PW_PLUGINS_VER}.tar.xz" "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}.tar.xz" ; then
if unpack_tar_xz "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}.tar.xz" "${PORT_WINE_TMP_PATH}" ; then
try_remove_file "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}.tar.xz"
if [ ! -z "`ls ${PORT_WINE_TMP_PATH} | grep plugins_v | grep -v plugins${PW_PLUGINS_VER}`" ] ; then
for RM_PLUGINS in `ls ${PORT_WINE_TMP_PATH} | grep plugins_v | grep -v plugins${PW_PLUGINS_VER}`
do try_remove_dir "${PORT_WINE_TMP_PATH}/${RM_PLUGINS}"
done
if command -v yad &>/dev/null ; then
if try_download "github.com/Castro-Fidel/wine_builds/releases/download/plugins${PW_PLUGINS_VER}/plugins${PW_PLUGINS_VER}.tar.xz" "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}.tar.xz" ; then
if unpack_tar_xz "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}.tar.xz" "${PORT_WINE_TMP_PATH}" ; then
try_remove_file "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}.tar.xz"
if [ ! -z "`ls ${PORT_WINE_TMP_PATH} | grep plugins_v | grep -v plugins${PW_PLUGINS_VER}`" ] ; then
for RM_PLUGINS in `ls ${PORT_WINE_TMP_PATH} | grep plugins_v | grep -v plugins${PW_PLUGINS_VER}`
do try_remove_dir "${PORT_WINE_TMP_PATH}/${RM_PLUGINS}"
done
fi
else
try_remove_file "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}.tar.xz"
try_remove_dir "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}"
if yad_error_download
then pw_check_and_download_plugins
else
export PW_PLUGINS_VER="$(echo _v$(($(echo $PW_PLUGINS_VER | sed 's/_v//') - 1)))"
export PW_PLUGINS_PATH="${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}"
fi
fi
else
try_remove_file "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}.tar.xz"
try_remove_dir "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}"
if zenity_error_download
if yad_error_download
then pw_check_and_download_plugins
else
export PW_PLUGINS_VER="$(echo _v$(($(echo $PW_PLUGINS_VER | sed 's/_v//') - 1)))"
......@@ -846,14 +884,29 @@ pw_check_and_download_plugins () {
fi
fi
else
if zenity_error_download
then pw_check_and_download_plugins
else
export PW_PLUGINS_VER="$(echo _v$(($(echo $PW_PLUGINS_VER | sed 's/_v//') - 1)))"
export PW_PLUGINS_PATH="${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}"
PW_NOTIFY_TEXT="Please wait for update PortProton"
pw_notify_send -u normal
if try_download_silent "github.com/Castro-Fidel/wine_builds/releases/download/plugins${PW_PLUGINS_VER}/plugins${PW_PLUGINS_VER}.tar.xz" "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}.tar.xz" ; then
if unpack_tar_xz "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}.tar.xz" "${PORT_WINE_TMP_PATH}" ; then
try_remove_file "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}.tar.xz"
if [ ! -z "`ls ${PORT_WINE_TMP_PATH} | grep plugins_v | grep -v plugins${PW_PLUGINS_VER}`" ] ; then
for RM_PLUGINS in `ls ${PORT_WINE_TMP_PATH} | grep plugins_v | grep -v plugins${PW_PLUGINS_VER}`
do try_remove_dir "${PORT_WINE_TMP_PATH}/${RM_PLUGINS}"
done
fi
else
PW_NOTIFY_TEXT="Failed updating PortProton!"
pw_notify_send -u critical
print_error "Failed updating PortProton!"
fi
fi
fi
fi
export pw_yad="${PW_PLUGINS_PATH}/portable/bin/yad"
export pw_yad_v12_3="${PW_PLUGINS_PATH}/portable/bin/yad_v12_3"
export pw_zstd="${PW_PLUGINS_PATH}/portable/bin/zstd"
export pw_7z="${PW_PLUGINS_PATH}/portable/lib/p7zip/7z"
export PW_XTERM="${PW_PLUGINS_PATH}/portable/bin/xterm -geometry 159x37 -e"
return 0
}
......@@ -892,8 +945,9 @@ pw_init_db () {
export ADD_CB_DBFILE="`echo ${PW_CHECK_DB_FILE} | awk -F'/' '{print $NF}'`!${ADD_CB_DBFILE}"
fi
done
PORTWINE_DB_FILE="${PORT_SCRIPTS_PATH}/portwine_db"/`"${pw_yad_v12_3}" --text-align=center --text "${PW_SELECTION_DB_LOC}" --borders=15 --form \
--title "Database file selection..." --window-icon="$PW_GUI_ICON_PATH/port_proton.png" --form --separator="" \
PORTWINE_DB_FILE="${PORT_SCRIPTS_PATH}/portwine_db"/`"${pw_yad_v12_3}" --text-align=center \
--text "${PW_SELECTION_DB_LOC}" --borders="${YAD_BORDERS}" --form \
--title "Database file selection..." --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --form --separator="" \
--field="DB FILE: :CB" "${ADD_CB_DBFILE}" 2>/dev/null`
if [[ "$?" == "1" || "$?" == "252" ]] ; then exit 0 ; fi
elif [[ `echo "$PW_FIND_DB_FILE" | wc -l` -eq 1 ]] ; then
......@@ -937,9 +991,13 @@ pw_init_db () {
check_variables PW_USE_RAY_TRACING "1"
fi
if [[ -f "${PATH_TO_GAME}"/steam_emu.ini ]] && [[ "${update_loc}" == "RUS" ]] ; then
sed -i "s/Language=english/Language=russian/" "${PATH_TO_GAME}"/steam_emu.ini
sed -i "/UserName=/c\UserName=${USER}" "${PATH_TO_GAME}"/steam_emu.ini
if [[ "${update_loc}" == "RUS" ]] ; then
for chk_lang_and_uname in "steam_emu.ini" "steam_api.ini" "steam_api64.ini" ; do
if [[ -f "${PATH_TO_GAME}/${chk_lang_and_uname}" ]] ; then
sed -i "s/Language=english/Language=russian/" "${PATH_TO_GAME}/${chk_lang_and_uname}"
sed -i "/UserName=/c\UserName=${USER}" "${PATH_TO_GAME}/${chk_lang_and_uname}"
fi
done
fi
fi
[[ "${START_FROM_STEAM}" == 1 ]] && export PW_GUI_DISABLED_CS=1
......@@ -978,22 +1036,24 @@ pw_port_update () {
print_info "Scripts version in github = ${scripts_current_ver}"
print_info "Scripts version local = ${scripts_install_ver}"
if [[ ! -z "${scripts_current_ver}" ]] && [[ "${scripts_current_ver}" -gt "${scripts_install_ver}" ]] ; then
if [[ -f "${PW_WINELIB}/portable/bin/yad_v12_3" ]] ; then
export pw_yad_v12_3="${PW_WINELIB}/portable/bin/yad_v12_3"
if [[ -f "${PW_PLUGINS_PATH}/portable/bin/yad_v12_3" ]]
then export pw_yad_v12_3="${PW_PLUGINS_PATH}/portable/bin/yad_v12_3"
elif command -v yad &>/dev/null
then local pw_yad_v12_3="yad"
else local pw_yad_v12_3="not_found"
fi
if [[ "${pw_yad_v12_3}" == "not_found" ]] ; then
xcsd="${scripts_upd4}"
else
curl -s --list-only "${URL_FOR_CHANGELOG}/${PW_CHANGELOG_FILE}" | tee "${PORT_WINE_TMP_PATH}/curent_var_ver"
CHANGLOG_NEWS=`cat "${PORT_WINE_TMP_PATH}/curent_var_ver" | sed "/Scripts version ${scripts_install_ver}/,$ d" | sed '1,/---/ d' `
xcsd=`"${pw_yad_v12_3}" --title "${scripts_upd2} v.${scripts_current_ver}" --window-icon="$PW_GUI_ICON_PATH/port_proton.png" \
--borders=3 --form --separator='%%%' --width=1200 --height=600 \
xcsd=`"${pw_yad_v12_3}" --title "${scripts_upd2} v.${scripts_current_ver}" --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \
--borders=${YAD_BORDERS} --form --separator='%%%' --width=1200 --height=600 \
--field=":TXT" "${CHANGLOG_NEWS}" \
--field=" ${scripts_upd3} :CB" "${scripts_upd4}!${scripts_upd5}!${scripts_upd6}" 2>/dev/null`
YAD_STATUS="$?"
if [[ "$YAD_STATUS" == "1" || "$YAD_STATUS" == "252" ]] ; then exit 0 ; fi
xcsd=`echo "${xcsd}" | awk -F'%%%' '{print $2}'`
else
xcsd=`zenity --title "${scripts_upd1}" --text "${scripts_upd2}" --list --radiolist --height=240 --column="${inst_set}" --column "${scripts_upd3}" \
TRUE "${scripts_upd4}" \
FALSE "${scripts_upd5}" \
FALSE "${scripts_upd6}"`
fi
case $xcsd in
"${scripts_upd4}")
......@@ -1012,15 +1072,11 @@ pw_port_update () {
try_remove_file "${PORT_WINE_TMP_PATH}/PortWINE-master.tar.gz"
try_remove_dir "${PORT_WINE_TMP_PATH}/PortWINE-master/"
echo "${scripts_current_ver}" > "${PORT_WINE_TMP_PATH}/scripts_ver"
if [[ -z "${pw_yad_v12_3}" ]] ; then
zenity --title="Changelog" --text-info --width=1200 --height=550 \
--filename="${PORT_WINE_PATH}/data/${PW_CHANGELOG_FILE}"
fi
[ "$?" == 0 ] && echo "Restarting PP after update..." && /usr/bin/env bash -c ${pw_full_command_line[*]} &
exit 0
fi
else
zenity_error_download && pw_port_update || exit 1
yad_error_download && pw_port_update || exit 1
fi ;;
"${scripts_upd5}")
echo " " ;;
......@@ -1099,14 +1155,14 @@ pw_create_gui_png () {
try_remove_file "${PORT_WINE_PATH}/data/img/Setup.png"
try_remove_file "${PORT_WINE_PATH}/data/img/launcher.png"
try_remove_file "${PORT_WINE_PATH}/data/img/Launcher.png"
if [[ -x "`command -v wrestool 2>/dev/null`" ]] && [[ ! -f "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" ]] ; then
if [[ ! -f "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" ]] ; then
try_remove_dir "${PORT_WINE_TMP_PATH}/tmp_img"
create_new_dir "${PORT_WINE_TMP_PATH}/tmp_img"
wrestool -x --output="${PORT_WINE_TMP_PATH}/tmp_img/" -t14 "$(readlink -f "${portwine_exe}")"
pw_use_command wrestool -x --output="${PORT_WINE_TMP_PATH}/tmp_img/" -t14 "$(readlink -f "${portwine_exe}")"
cp "$(ls -S -1 "${PORT_WINE_TMP_PATH}/tmp_img/"*".ico" | head -n 1)" "${PORT_WINE_TMP_PATH}/tmp_img/${PORTPROTON_NAME}.ico"
icotool -x --width=${PW_RESIZE_TO} --height=${PW_RESIZE_TO} --output="${PORT_WINE_TMP_PATH}/tmp_img/" "${PORT_WINE_TMP_PATH}/tmp_img/${PORTPROTON_NAME}.ico"
pw_use_command icotool -x --width=${PW_RESIZE_TO} --height=${PW_RESIZE_TO} --output="${PORT_WINE_TMP_PATH}/tmp_img/" "${PORT_WINE_TMP_PATH}/tmp_img/${PORTPROTON_NAME}.ico"
if [[ ! -f "$(ls -S -1 "${PORT_WINE_TMP_PATH}/tmp_img/"*".png" | grep "${PW_RESIZE_TO}x${PW_RESIZE_TO}")" ]] ; then
icotool -x --output="${PORT_WINE_TMP_PATH}/tmp_img/" "${PORT_WINE_TMP_PATH}/tmp_img/${PORTPROTON_NAME}.ico"
pw_use_command icotool -x --output="${PORT_WINE_TMP_PATH}/tmp_img/" "${PORT_WINE_TMP_PATH}/tmp_img/${PORTPROTON_NAME}.ico"
cp "$(ls -S -1 "${PORT_WINE_TMP_PATH}/tmp_img/"*".png" | head -n 1)" "${PORT_WINE_TMP_PATH}/tmp_img/${PORTPROTON_NAME}.png"
else
cp "$(ls -S -1 "${PORT_WINE_TMP_PATH}/tmp_img/"*".png" | grep "${PW_RESIZE_TO}x${PW_RESIZE_TO}" | head -n 1)" "${PORT_WINE_TMP_PATH}/tmp_img/${PORTPROTON_NAME}.png"
......@@ -1147,7 +1203,7 @@ pw_find_exe () {
OrigIFS="$IFS" && IFS=%
PW_SET_FIND_EXE="$("${pw_yad_v12_3}" --height="300" --width="1000" --list \
--text-align=center --window-icon="$PW_GUI_ICON_PATH/port_proton.png" --title "Create shortcut for..." \
--text-align=center --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --title "Create shortcut for..." \
--text="\n${loc_gui_create_shortcut_for_exe}" --column="path to .exe file:" ${FIND_TO_GUI} 2>/dev/null)"
YAD_STATUS="$?"
print_var YAD_STATUS
......
......@@ -14,8 +14,11 @@ else
if [[ "${update_loc}" == "RUS" || "${update_loc}" == "ENG" ]] && [[ -f "${PORT_WINE_TMP_PATH}/${portname}_loc" ]] ; then
echo ""
else
SET_LANG=`zenity --title "LAUNGUAGE" --text "Select the language" --list --radiolist \
--column="Set:" --column "Choose language:" TRUE "RUS" FALSE "ENG" `
[[ ! -f "${pw_yad_v12_3}" ]] && pw_yad_v12_3="yad"
SET_LANG=$("$pw_yad_v12_3" --title "LAUNGUAGE" --text "Select the language:" --list --radiolist \
--column="Set:" --column "Choose language:" TRUE "RUS" FALSE "ENG" \
--window-icon "$PW_GUI_ICON_PATH/portproton.svg" --width=300 --height=150)
SET_LANG="$(echo $SET_LANG | awk -F'|' '{print $2}')"
echo "${SET_LANG}" > "${PORT_WINE_TMP_PATH}/${portname}_loc"
if [[ ! -z "${SET_LANG}" ]]
then export update_loc=${SET_LANG}
......
......@@ -4,6 +4,7 @@
export LAUNCH_PARAMETERS=("/q" )
export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/EpicGamesLauncherInstaller.msi"
export PW_USE_D3D_EXTRAS=1
export PORTWINE_CREATE_SHORTCUT_NAME="Epic Games Launcher"
# sed -i '/Epic Games/d' "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}"/*.reg >/dev/null
try_remove_file "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/.wine_ver"
......
......@@ -5,7 +5,7 @@ export LAUNCH_PARAMETERS=("/VERYSILENT")
GOG_VER="$(curl "https://remote-config.gog.com/components/webinstaller?component_version=2.0.0" \
| awk -F'galaxy_client_' '{print $2}' \
| awk -F'.pkg' '{print $1}')"
[[ "${GOG_VER}" != 2.* ]] && zenity_error "ERROR: Get the GOG version." && exit 1
[[ "${GOG_VER}" != 2.* ]] && yad_error "ERROR: Get the GOG version." && exit 1
export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/setup_galaxy_${GOG_VER}.exe"
export PW_PREFIX_NAME="GOG"
export DISABLE_CP_DEFPFX=1
......
......@@ -20,10 +20,10 @@ if try_download_game "https://lol.secure.dyn.riotcdn.net/channels/public/x/insta
then
pw_start_progress_bar_block "Installing League of Legends. ${loc_gui_please_wait} "
if [ "${update_loc}" = "RUS" ] ; then
zenity --info --width=500 --text "Вы должны нажать кнопку установки, не изменяя настроек!"
yad_info "Вы должны нажать кнопку установки, не изменяя настроек!"
fi
if [ "${update_loc}" = "ENG" ] ; then
zenity --info --width=500 --text "You must click the install button without changing the settings!"
yad_info "You must click the install button without changing the settings!"
fi
pw_kill_autostart RiotClientServices.exe &
pw_run "${PW_AUTOINSTALL_EXE}"
......
......@@ -4,7 +4,7 @@
PR64_VER="$(curl https://www.pj64-emu.com/public-releases | grep 'installer' | head -n 1 \
| awk -F'/project64' '{print $2}' \
| awk -F'installer"' '{print $1}')"
[[ "${PR64_VER}" != *-3-* ]] && zenity_error "ERROR: Get the Project64 version." && exit 1
[[ "${PR64_VER}" != *-3-* ]] && yad_error "ERROR: Get the Project64 version." && exit 1
export LAUNCH_PARAMETERS=("/VERYSILENT")
export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/Project64${PR64_VER}setup.exe"
......
......@@ -8,7 +8,7 @@ export PW_DLL_INSTALL="faudio dotnet48"
export PW_VULKAN_USE=1
WOSB_VERSION="$(curl -s --list-only --connect-timeout 3 https://www.worldofseabattle.com/download2 2>/dev/null | grep 'installer.exe' | awk -F'xsolla-launcher-update/' '{print $2}' | awk -F'/' '{print $1}')"
[[ ! -z "$WOSB_VERSION" ]] && print_info "Found version: $WOSB_VERSION" || zenity_error "Error while get version of WOSB INSTALLER."
[[ ! -z "$WOSB_VERSION" ]] && print_info "Found version: $WOSB_VERSION" || yad_error "Error while get version of WOSB INSTALLER."
start_portwine
if try_download_game "https://installer.launcher.xsolla.com/xlauncher-builds/xsolla-launcher-update/${WOSB_VERSION}/bin/installer.exe" "${PW_AUTOINSTALL_EXE}"
......
......@@ -16,20 +16,16 @@ echo '
'
if [[ $(id -u) = 0 ]] ; then
echo "Do not run this script as root!"
zenity --error --text "Do not run this script as root!"
exit 1
fi
if [[ "${s_install}" != "1" && ! -x "`command -v "zenity" 2>/dev/null`" ]] ; then
echo "You will need to install: zenity, and restart the port."
xdg-open "https://linux-gaming.ru/portproton/" > /dev/null 2>&1 & exit 0
fi
. "$(dirname $(readlink -f "$0"))/functions_helper"
start_portwine () {
var_winedlloverride_update "${PW_MUST_WINEDLLOVERRIDES}"
export WINEPREFIX="$(readlink -f "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}")"
if [[ "$WINEPREFIX" != "${PORT_WINE_PATH}/data/prefixes/"* ]] && [[ ! -d "$WINEPREFIX" ]] ; then
zenity_error "Path to PREFIX not found:\n$WINEPREFIX"
yad_error "Path to PREFIX not found:\n$WINEPREFIX"
exit 1
fi
create_new_dir "${WINEPREFIX}/drive_c/windows/system32/"
......@@ -64,11 +60,6 @@ start_portwine () {
unset WARN_CYRILLIC_IN_PATH
fi
if [ ! -f "${HOME}/.Xresources" ]; then
cp -f "${PORT_SCRIPTS_PATH}/.Xresources" "${HOME}"
xrdb -merge "${HOME}/.Xresources"
fi
if [[ "$PW_USE_OBS_VKCAPTURE" == "1" ]] ; then
export OBS_VKCAPTURE="1"
export PW_USE_SYSTEM_VK_LAYERS="1"
......@@ -147,11 +138,23 @@ start_portwine () {
enabled_fake_nvidia_videocard ()
{
if [[ "${1}" == 1 ]] ; then
sed -i /'dxgi.customDeviceId =/c dxgi.customDeviceId = 222F' "${DXVK_CONFIG_FILE}"
sed -i /'dxgi.customDeviceDesc =/c dxgi.customDeviceDesc = "NVIDIA GeForce RTX 4090"' "${DXVK_CONFIG_FILE}"
sed -i /'dxgi.customDeviceId =/c dxgi.customDeviceId = 2684' "${DXVK_CONFIG_FILE}"
sed -i /'dxgi.customVendorId =/c dxgi.customVendorId = 10de' "${DXVK_CONFIG_FILE}"
sed -i /'dxgi.hideAmdGpu =/c dxgi.hideAmdGpu = True' "${DXVK_CONFIG_FILE}"
sed -i /'dxgi.hideNvidiaGpu =/c dxgi.hideNvidiaGpu = False' "${DXVK_CONFIG_FILE}"
export WINE_HIDE_NVIDIA_GPU=0
export WINE_HIDE_AMD_GPU=1
export DXVK_NVAPI_DRIVER_VERSION=53713
export DXVK_NVAPI_ALLOW_OTHER_DRIVERS=1
elif [[ "${1}" == 0 ]] ; then
sed -i /'dxgi.customDeviceId =/c # dxgi.customDeviceId = 222F' "${DXVK_CONFIG_FILE}"
sed -i /'dxgi.customDeviceDesc =/c # dxgi.customDeviceDesc = "NVIDIA GeForce RTX 4090"' "${DXVK_CONFIG_FILE}"
sed -i /'dxgi.customDeviceId =/c # dxgi.customDeviceId = 2684' "${DXVK_CONFIG_FILE}"
sed -i /'dxgi.customVendorId =/c # dxgi.customVendorId = 10de' "${DXVK_CONFIG_FILE}"
sed -i /'dxgi.hideAmdGpu =/c # dxgi.hideAmdGpu = True' "${DXVK_CONFIG_FILE}"
sed -i /'dxgi.hideNvidiaGpu =/c # dxgi.hideNvidiaGpu = False' "${DXVK_CONFIG_FILE}"
unset WINE_HIDE_NVIDIA_GPU WINE_HIDE_AMD_GPU
unset DXVK_NVAPI_DRIVER_VERSION DXVK_NVAPI_ALLOW_OTHER_DRIVERS
fi
}
......@@ -160,27 +163,38 @@ start_portwine () {
try_remove_file "${WINEPREFIX}/drive_c/windows/system32/$rm_dll"
done
if [[ "${PW_USE_FAKE_DLSS}" == 1 ]] && [[ -d "${PW_PLUGINS_PATH}/fake_dlss/${PW_FAKE_DLSS_VER}/" ]] ; then
# TODO: LFX (wait new LFX v2)
# if [[ "${PW_USE_LFX}" == 1 ]] ; then
# try_force_link_file "${PW_PLUGINS_PATH}/lfx/${PW_LFX_VER}/latencyflex_layer.so" "${WINEDIR}/lib64/wine/x86_64-unix/"
# try_force_link_file "${PW_PLUGINS_PATH}/lfx/${PW_LFX_VER}/latencyflex_layer.dll" "${WINEPREFIX}/drive_c/windows/system32/"
# try_force_link_file "${PW_PLUGINS_PATH}/lfx/${PW_LFX_VER}/latencyflex_wine.dll" "${WINEPREFIX}/drive_c/windows/system32/"
# enabled_fake_nvidia_videocard 1
# export LFX2=1
# fi
export DXVK_ENABLE_NVAPI=1
if [[ "${PW_USE_FAKE_DLSS_3}" == 1 ]] ; then
try_force_link_file "${PW_PLUGINS_PATH}/fake_dlss_3/${PW_FAKE_DLSS_3_VER}/nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/"
try_force_link_file "${PW_PLUGINS_PATH}/fake_dlss/${PW_FAKE_DLSS_3_VER}/dlssg_to_fsr3_amd_is_better.dll" "${WINEPREFIX}/drive_c/windows/system32/"
try_force_link_file "${PW_PLUGINS_PATH}/nvngx/_nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/"
var_winedlloverride_update "nvapi,nvapi64,nvngx,_nvngx,dlssg_to_fsr3_amd_is_better=n;nvcuda=b"
enabled_fake_nvidia_videocard 1
export WINEHAGS=1
elif [[ "${PW_USE_FAKE_DLSS}" == 1 ]] && [[ -d "${PW_PLUGINS_PATH}/fake_dlss/${PW_FAKE_DLSS_VER}/" ]] ; then
try_force_link_file "${PW_PLUGINS_PATH}/fake_dlss/${PW_FAKE_DLSS_VER}/nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/"
try_force_link_file "${PW_PLUGINS_PATH}/fake_dlss/${PW_FAKE_DLSS_VER}/nvngx.ini" "${WINEPREFIX}/drive_c/windows/system32/"
enabled_fake_nvidia_videocard 1
var_winedlloverride_update "nvapi,nvapi64,nvngx=n;_nvngx=;nvcuda=b"
export DXVK_ENABLE_NVAPI=1
export WINE_HIDE_NVIDIA_GPU=0
export WINE_HIDE_AMD_GPU=1
export DXVK_NVAPI_DRIVER_VERSION=99999
elif [[ "${PW_USE_NVAPI_AND_DLSS}" == 1 ]] ; then
FIND_NVNGX="$(dirname $(find /usr/* -type f -name "nvngx.dll" 2>/dev/null | head -n 1 | awk '{print $1}'))"
if [[ ! -z "$FIND_NVNGX" ]] ; then
try_copy_file "${FIND_NVNGX}/nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/"
try_copy_file "${FIND_NVNGX}/_nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/"
else
try_copy_file "${PW_PLUGINS_PATH}/nvngx/nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/"
try_copy_file "${PW_PLUGINS_PATH}/nvngx/_nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/"
try_force_link_file "${PW_PLUGINS_PATH}/nvngx/nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/"
try_force_link_file "${PW_PLUGINS_PATH}/nvngx/_nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/"
fi
enabled_fake_nvidia_videocard 0
export DXVK_ENABLE_NVAPI=1
export WINE_HIDE_NVIDIA_GPU=0
var_winedlloverride_update "nvngx,_nvngx,nvapi,nvapi64=n;nvcuda=b"
else
enabled_fake_nvidia_videocard 0
......@@ -210,8 +224,11 @@ start_portwine () {
[[ "${PW_MANGOHUD_USER_CONF}" == 1 ]] && unset MANGOHUD_CONFIG
[[ "${PW_VKBASALT_USER_CONF}" == 1 ]] && unset PW_VKBASALT_EFFECTS PW_VKBASALT_FFX_CAS
if [[ "${PW_USE_DXR11}" == 1 ]] || [[ "${PW_USE_DXR10}" == 1 ]] || [[ "${PW_USE_RAY_TRACING}" == 1 ]]; then
var_vkd3d_config_update dxr,dxr11
if [[ "${PW_USE_DXR11}" == 1 ]] \
|| [[ "${PW_USE_DXR10}" == 1 ]] \
|| [[ "${PW_USE_RAY_TRACING}" == 1 ]]
then
var_vkd3d_config_update dxr
var_radv_perftest_config_update rt
else
var_vkd3d_config_update nodxr
......@@ -286,8 +303,8 @@ start_portwine () {
else export PW_LD_PRELOAD="${GAMEMODEAUTO_NAME}"
fi
env LD_LIBRARY_PATH="${PW_WINELIB}/portable/lib/lib64:${PW_WINELIB}/portable/lib/lib32" \
"${PW_WINELIB}/portable/bin/gamemoded" &>/dev/null &
env LD_LIBRARY_PATH="${PW_PLUGINS_PATH}/portable/lib/lib64:${PW_PLUGINS_PATH}/portable/lib/lib32" \
"${PW_PLUGINS_PATH}/portable/bin/gamemoded" &>/dev/null &
print_info "Gamemod will be launched."
else
......@@ -313,7 +330,7 @@ start_portwine () {
LN_FONTS="arialbd.ttf courbd.ttf georgia.ttf micross.ttf msyh.ttf simsun.ttc arial.ttf cour.ttf malgun.ttf msgothic.ttc nirmala.ttf times.ttf"
for link_font in $LN_FONTS ; do
if [[ ! -f "${WINEPREFIX}/drive_c/windows/Fonts/${link_font}" ]] ; then
try_force_link_file "${WINEDIR}/share/fonts/${link_font}" "${WINEPREFIX}/drive_c/windows/Fonts/${link_font}"
try_force_link_file "${WINEDIR}/share/fonts/${link_font}" "${WINEPREFIX}/drive_c/windows/Fonts/"
fi
done
......@@ -348,7 +365,7 @@ start_portwine () {
try_remove_file "${PORT_WINE_PATH}/data/tmp/progpfx.tar.xz"
else
try_remove_file "${PORT_WINE_PATH}/data/tmp/progpfx.tar.xz"
zenity_error_download && exit 1
yad_error_download && exit 1
fi
fi
......@@ -360,7 +377,7 @@ start_portwine () {
try_remove_file "${PORT_WINE_PATH}/data/tmp/dotpfx.tar.xz"
else
try_remove_file "${PORT_WINE_PATH}/data/tmp/dotpfx.tar.xz"
zenity_error_download && exit 1
yad_error_download && exit 1
fi
fi
......@@ -421,23 +438,20 @@ start_portwine () {
export PW_USE_US_LAYOUT="0"
fi
D3D_EXTRAS_LIBS="d3dcompiler_33 d3dcompiler_34 d3dcompiler_35 d3dcompiler_36 d3dcompiler_37
d3dcompiler_38 d3dcompiler_39 d3dcompiler_40 d3dcompiler_41 d3dcompiler_42 d3dcompiler_43 d3dcompiler_46
d3dcompiler_47 d3dx10_33 d3dx10_34 d3dx10_35 d3dx10_36 d3dx10_37 d3dx10_38 d3dx10_39 d3dx10_40 d3dx10_41
d3dx10_42 d3dx10_43 d3dx10 d3dx11_42 d3dx11_43 d3dx9_24 d3dx9_25 d3dx9_26 d3dx9_27 d3dx9_28 d3dx9_29 d3dx9_30
d3dx9_31 d3dx9_32 d3dx9_33 d3dx9_34 d3dx9_35 d3dx9_36 d3dx9_37 d3dx9_38 d3dx9_39 d3dx9_40 d3dx9_41 d3dx9_42 d3dx9_43"
if [[ "${PW_USE_D3D_EXTRAS}" == 1 ]] ; then
if [[ ! -f "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/winetricks.log" ]] \
|| [[ -z "`grep d3dx9 "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/winetricks.log"`" ]]
then
echo "d3dx9" >> "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/winetricks.log"
fi
if [[ -d "${PW_PLUGINS_PATH}/d3d_extras" ]]
then PATH_TO_D3DEXTRAS="${PW_PLUGINS_PATH}/d3d_extras"
else PATH_TO_D3DEXTRAS="${PW_WINELIB}/d3d_extras"
fi
#try link d3d extras libs
for d3d_extras_from_plugins in d3dcompiler_33 d3dcompiler_34 d3dcompiler_35 d3dcompiler_36 d3dcompiler_37 \
d3dcompiler_38 d3dcompiler_39 d3dcompiler_40 d3dcompiler_41 d3dcompiler_42 d3dcompiler_43 d3dcompiler_46 \
d3dcompiler_47 d3dx10_33 d3dx10_34 d3dx10_35 d3dx10_36 d3dx10_37 d3dx10_38 d3dx10_39 d3dx10_40 d3dx10_41 \
d3dx10_42 d3dx10_43 d3dx10 d3dx11_42 d3dx11_43 d3dx9_24 d3dx9_25 d3dx9_26 d3dx9_27 d3dx9_28 d3dx9_29 d3dx9_30 \
d3dx9_31 d3dx9_32 d3dx9_33 d3dx9_34 d3dx9_35 d3dx9_36 d3dx9_37 d3dx9_38 d3dx9_39 d3dx9_40 d3dx9_41 d3dx9_42 d3dx9_43
do
PATH_TO_D3DEXTRAS="${PW_WINELIB}/d3d_extras"
for d3d_extras_from_plugins in $D3D_EXTRAS_LIBS ; do
try_force_link_file "${PATH_TO_D3DEXTRAS}/x64/${d3d_extras_from_plugins}.dll" "${WINEPREFIX}/drive_c/windows/system32/"
try_force_link_file "${PATH_TO_D3DEXTRAS}/x32/${d3d_extras_from_plugins}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/"
var_winedlloverride_update "${d3d_extras_from_plugins}=n"
......@@ -445,6 +459,11 @@ start_portwine () {
echo "${d3d_extras_from_plugins}" >> "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/winetricks.log"
fi
done
else
for d3d_extras_from_plugins in $D3D_EXTRAS_LIBS ; do
try_force_link_file "${WINEDIR}/lib/wine/i386-windows/${d3d_extras_from_plugins}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/"
try_force_link_file "${WINEDIR}/lib64/wine/x86_64-windows/${d3d_extras_from_plugins}.dll" "${WINEPREFIX}/drive_c/windows/system32/"
done
fi
print_info "Try link wine d3d files by default..."
for rm_vulkan_dll in libvkd3d-1 libvkd3d-shader-1 dxvk_config nvapi nvapi64 d3d12core d3d12 d3d11 d3d10 d3d10core d3d10_1 d3d9 d3d8 dxgi wined3d ; do
......@@ -452,8 +471,8 @@ start_portwine () {
try_remove_file "${WINEPREFIX}/drive_c/windows/syswow64/${rm_vulkan_dll}.dll"
done
for wine_build_dll in d3d12core d3d12 d3d11 d3d10 d3d10core d3d10_1 d3d9 d3d8 dxgi wined3d ; do
try_force_link_file "${WINEDIR}/lib/wine/i386-windows/${wine_build_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/${wine_build_dll}.dll"
try_force_link_file "${WINEDIR}/lib64/wine/x86_64-windows/${wine_build_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32/${wine_build_dll}.dll"
try_force_link_file "${WINEDIR}/lib/wine/i386-windows/${wine_build_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/"
try_force_link_file "${WINEDIR}/lib64/wine/x86_64-windows/${wine_build_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32/"
done
create_new_dir "${PW_VULKAN_DIR}/opengl"
......@@ -478,7 +497,6 @@ start_portwine () {
fi
elif [[ "${PW_VULKAN_USE}" == "3" ]] ; then
print_info "Use GALLIUM-NINE (Native DX9 on MESA drivers)"
export PW_GALLIUM_NINE_VER="0.8"
export PW_GALLIUM_NINE_PATH="${PW_PLUGINS_PATH}/gallium_nine_v.${PW_GALLIUM_NINE_VER}"
try_force_link_file "${PW_GALLIUM_NINE_PATH}/lib32/d3d9-nine.dll.so" "${WINEPREFIX}/drive_c/windows/syswow64/d3d9.dll"
try_force_link_file "${PW_GALLIUM_NINE_PATH}/lib64/d3d9-nine.dll.so" "${WINEPREFIX}/drive_c/windows/system32/d3d9.dll"
......@@ -498,7 +516,7 @@ start_portwine () {
print_info "D3D_MODULE_PATH=${D3D_MODULE_PATH}"
else
pw_stop_progress_bar
zenity_error "d3dadapter9.so.1.0.0 - ${loc_find_d3dadapter9_error}"
yad_error "d3dadapter9.so.1.0.0 - ${loc_find_d3dadapter9_error}"
stop_portwine
fi
export mesa_glthread=true
......@@ -536,42 +554,38 @@ start_portwine () {
print_info "Try link native DXVK files..."
for wine_dxvk_dll in ${CP_DXVK_FILES} ; do
if [[ -f "${PATH_TO_DXVK_FILES}/x64/${wine_dxvk_dll}.dll" ]] ; then
try_force_link_file "${PATH_TO_DXVK_FILES}/x32/${wine_dxvk_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/${wine_dxvk_dll}.dll"
try_force_link_file "${PATH_TO_DXVK_FILES}/x64/${wine_dxvk_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32/${wine_dxvk_dll}.dll"
try_force_link_file "${PATH_TO_DXVK_FILES}/x32/${wine_dxvk_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/"
try_force_link_file "${PATH_TO_DXVK_FILES}/x64/${wine_dxvk_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32/"
var_winedlloverride_update "${wine_dxvk_dll}=n"
fi
done
try_force_link_file "${PATH_TO_DXVK_FILES}/x32/nvapi.dll" "${WINEPREFIX}/drive_c/windows/syswow64/" || \
try_force_link_file "${WINEDIR}/lib/wine/nvapi/nvapi.dll" "${WINEPREFIX}/drive_c/windows/syswow64/" || \
try_force_link_file "${PATH_TO_DXVK_FILES}/x32/nvapi.dll" "${WINEPREFIX}/drive_c/windows/syswow64/" || \
try_force_link_file "${PW_PLUGINS_PATH}/nvapi/x32/nvapi.dll" "${WINEPREFIX}/drive_c/windows/syswow64/"
try_force_link_file "${PATH_TO_DXVK_FILES}/x64/nvapi64.dll" "${WINEPREFIX}/drive_c/windows/system32/" || \
try_force_link_file "${WINEDIR}/lib64/wine/nvapi/nvapi64.dll" "${WINEPREFIX}/drive_c/windows/system32/" || \
try_force_link_file "${PATH_TO_DXVK_FILES}/x64/nvapi64.dll" "${WINEPREFIX}/drive_c/windows/system32/" || \
try_force_link_file "${PW_PLUGINS_PATH}/nvapi/x64/nvapi64.dll" "${WINEPREFIX}/drive_c/windows/system32/"
print_info "Try link native VKD3D files..."
for wine_vkd3d_dll in d3d12 d3d12core libvkd3d-1 libvkd3d-shader-1; do
if [[ -f "${PATH_TO_VKD3D_FILES}/x64/${wine_vkd3d_dll}.dll" ]] ; then
try_force_link_file "${PATH_TO_VKD3D_FILES}/x86/${wine_vkd3d_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/${wine_vkd3d_dll}.dll"
try_force_link_file "${PATH_TO_VKD3D_FILES}/x64/${wine_vkd3d_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32/${wine_vkd3d_dll}.dll"
try_force_link_file "${PATH_TO_VKD3D_FILES}/x86/${wine_vkd3d_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/"
try_force_link_file "${PATH_TO_VKD3D_FILES}/x64/${wine_vkd3d_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32/"
var_winedlloverride_update "${wine_vkd3d_dll}=n"
fi
done
print_info "Try link native D8VK file..."
try_force_link_file "${PATH_TO_D8VK_FILES}/x32/d3d8.dll" "${WINEPREFIX}/drive_c/windows/syswow64/d3d8.dll"
try_force_link_file "${PATH_TO_D8VK_FILES}/x32/d3d8.dll" "${WINEPREFIX}/drive_c/windows/syswow64/"
var_winedlloverride_update d3d8=n
fi
if [[ ! -d "${WINEPREFIX}/drive_c/vrclient/bin" ]] ; then
create_new_dir "${WINEPREFIX}/drive_c/vrclient/bin"
if ! try_force_link_file "${WINEDIR}"/lib/wine/fakedlls/vrclient.dll "${WINEPREFIX}/drive_c/vrclient/bin/vrclient.dll"
then try_force_link_file "${WINEDIR}"/lib/wine/i386-windows/vrclient.dll "${WINEPREFIX}/drive_c/vrclient/bin/vrclient.dll"
fi
if ! try_force_link_file "${WINEDIR}"/lib64/wine/fakedlls/vrclient_x64.dll "${WINEPREFIX}/drive_c/vrclient/bin/vrclient_x64.dll"
then try_force_link_file "${WINEDIR}"/lib64/wine/x86_64-windows/vrclient_x64.dll "${WINEPREFIX}/drive_c/vrclient/bin/vrclient_x64.dll"
fi
try_force_link_file "${WINEDIR}"/lib/wine/i386-windows/vrclient.dll "${WINEPREFIX}/drive_c/vrclient/bin/"
try_force_link_file "${WINEDIR}"/lib64/wine/x86_64-windows/vrclient_x64.dll "${WINEPREFIX}/drive_c/vrclient/bin/"
fi
if [[ "${PW_USE_SHADER_CACHE}" == 1 ]] ; then
......@@ -608,15 +622,13 @@ start_portwine () {
fi
for try_cp_dll_from_wine in "ntdll.dll" "vulkan-1.dll" "winevulkan.dll" "amd_ags_x64.dll" "ir50_32.dll" ; do
try_remove_file "${WINEPREFIX}/drive_c/windows/syswow64/${try_cp_dll_from_wine}"
if try_copy_file "${WINEDIR}/lib/wine/i386-windows/${try_cp_dll_from_wine}" "${WINEPREFIX}/drive_c/windows/syswow64/${try_cp_dll_from_wine}"
then print_info "Try copy $try_cp_dll_from_wine to syswow64... OK."
elif ! try_copy_file "${WINEDIR}/lib/wine/fakedlls/${try_cp_dll_from_wine}" "${WINEPREFIX}/drive_c/windows/syswow64/${try_cp_dll_from_wine}"
then try_remove_file "${WINEPREFIX}/drive_c/windows/syswow64/${try_cp_dll_from_wine}"
fi
try_remove_file "${WINEPREFIX}/drive_c/windows/system32/${try_cp_dll_from_wine}"
if try_copy_file "${WINEDIR}/lib64/wine/x86_64-windows/${try_cp_dll_from_wine}" "${WINEPREFIX}/drive_c/windows/system32/${try_cp_dll_from_wine}"
then print_info "Try copy $try_cp_dll_from_wine to system32... OK."
elif ! try_copy_file "${WINEDIR}/lib64/wine/fakedlls/${try_cp_dll_from_wine}" "${WINEPREFIX}/drive_c/windows/system32/${try_cp_dll_from_wine}"
then try_remove_file "${WINEPREFIX}/drive_c/windows/system32/${try_cp_dll_from_wine}"
fi
done
......@@ -744,7 +756,7 @@ export -f pw_run
###MAIN###
if [[ $(id -u) -eq 0 ]] ; then
zenity_error "Do not run the script from the superuser!"
yad_error "Do not run the script from the superuser!"
exit 1
fi
......@@ -832,14 +844,14 @@ cd "${PORT_SCRIPTS_PATH}"
export STEAM_SCRIPTS="${PORT_WINE_PATH}/steam_scripts"
export PW_PLUGINS_PATH="${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}"
export PW_GUI_ICON_PATH="${PORT_WINE_PATH}/data/img/gui"
. "${PORT_SCRIPTS_PATH}"/lang
. "${PORT_SCRIPTS_PATH}"/zen_yad_gui
. "${PORT_SCRIPTS_PATH}"/yad_gui
export urlg="https://linux-gaming.ru/portproton/"
export PW_WINELIB="${PORT_WINE_TMP_PATH}/libs${PW_LIBS_VER}"
try_remove_dir "${PW_WINELIB}/var"
export PW_GUI_ICON_PATH="${PORT_WINE_PATH}/data/img/gui"
export install_ver=`cat "${PORT_WINE_TMP_PATH}/${portname}_ver" | head -n 1`
export WINETRICKS_DOWNLOADER="curl"
export USER_CONF="${PORT_WINE_PATH}/data/user.conf"
......@@ -848,11 +860,11 @@ check_user_conf
if [[ -z "${INSTALLING_PORT}" ]] ; then
. "${USER_CONF}"
pw_port_update
pw_check_and_download_plugins
pw_download_libs
export PW_VULKANINFO_PORTABLE="$PW_WINELIB/pressure-vessel/libexec/steam-runtime-tools-0/x86_64-linux-gnu-vulkaninfo"
export VULKAN_API_DRIVER_VERSION="$("$PW_VULKANINFO_PORTABLE" 2>/dev/null | grep "api" | head -n 1 | awk '{print $3}')"
export VULKAN_DRIVER_NAME="$("$PW_VULKANINFO_PORTABLE" 2>/dev/null | grep driverName | awk '{print$3}' | head -1)"
pw_check_and_download_plugins
pw_init_db
. "${PORT_SCRIPTS_PATH}"/lang
pw_check_and_download_dxvk_and_vkd3d
......
......@@ -6,6 +6,7 @@ if grep -i "flatpak" /etc/os-release &>/dev/null ; then
name_desktop="PortProton"
echo "[Desktop Entry]" > "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Name=${name_desktop}" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Version=${install_ver}" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Exec=flatpak run com.castrofidel.portproton" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Type=Application" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Terminal=False" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
......@@ -17,20 +18,21 @@ if grep -i "flatpak" /etc/os-release &>/dev/null ; then
chmod u+x "${PORT_WINE_PATH}/${name_desktop}.desktop"
else
name_desktop="PortProton"
echo "[Desktop Entry]" > "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Name=${name_desktop}" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "[Desktop Entry]" > "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Name=${name_desktop}" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Version=${install_ver}" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Exec=env "${PORT_SCRIPTS_PATH}/start.sh %F"" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Type=Application" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Terminal=False" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Categories=Game" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "StartupNotify=true" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Type=Application" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Terminal=False" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Categories=Game" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "StartupNotify=true" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "MimeType=application/x-ms-dos-executable;application/x-wine-extension-msp;application/x-msi;application/x-msdos-program" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Path="${PORT_SCRIPTS_PATH}/"" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Path="${PORT_SCRIPTS_PATH}/"" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Icon="${PORT_WINE_PATH}/data/img/w.png"" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
chmod u+x "${PORT_WINE_PATH}/${name_desktop}.desktop"
fi
if [ -z "${PW_AUTOPLAY}" ] ; then
if [[ ! -f /usr/bin/portproton ]]; then
cp -f "${PORT_WINE_PATH}/${name_desktop}.desktop" ${HOME}/.local/share/applications/
fi
......@@ -41,49 +43,25 @@ if ! grep -i "flatpak" /etc/os-release &>/dev/null ; then
fi
name_desktop="readme"
echo "[Desktop Entry]" > "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Name=${name_desktop}" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Version=1.3" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Type=Link" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Icon="${PORT_WINE_PATH}/data/img/readme.png"" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "URL=${urlg}" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "[Desktop Entry]" > "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Name=${name_desktop}" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Version=${install_ver}" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Type=Link" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Icon="${PORT_WINE_PATH}/data/img/readme.png"" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "URL=${urlg}" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
chmod u+x "${PORT_WINE_PATH}/${name_desktop}.desktop"
if [ "${PW_SILENT_INSTALL}" = "1" ] ; then
if [ "${PW_AUTOPLAY}" = "1" ] ; then
unset INSTALLING_PORT
if [[ -f "${HOME}/.local/share/applications/PortProton.desktop" ]] ; then
export PW_OLD_PATH=`cat "${HOME}/.local/share/applications/PortProton.desktop" | grep -w 'Path=' | sed -E 's/Path=//' | sed -E 's%\/PortProton\/data\/scripts\/%%g' `
echo "PW_OLD_PATH=${PW_OLD_PATH}"
if [[ -f "${HOME}/.local/share/applications/PortProton.desktop" ]] && [[ -f /usr/bin/portproton ]] ; then
try_remove_file "${HOME}/.local/share/applications/PortProton.desktop"
fi
if [[ ! -z "${PW_OLD_PATH}" ]] ; then
if [[ "${PW_OLD_PATH}"* == "${HOME}/PortWINE"* ]] & [[ -d "${HOME}/PortWINE" ]] ; then
echo "Old path = ${HOME}/PortWINE"
try_remove_dir "${XDG_DATA_HOME}/PortWINE"
mv -f "${HOME}/PortWINE" "${XDG_DATA_HOME}"
elif [[ "${PW_OLD_PATH}"* == "${PW_OLD_PATH}/PortWINE"* ]] & [[ -d "${PW_OLD_PATH}/PortWINE" ]] ; then
try_remove_dir "${XDG_DATA_HOME}/PortWINE"
ln -s "${PW_OLD_PATH}/PortWINE" "${XDG_DATA_HOME}/"
elif [[ "${PW_OLD_PATH}"* == "${PW_OLD_PATH}/PortProton"* ]] & [[ -d "${PW_OLD_PATH}/PortProton" ]] ; then
try_remove_dir "${XDG_DATA_HOME}/PortWINE"
create_new_dir "${XDG_DATA_HOME}/PortWINE"
ln -s "${PW_OLD_PATH}/PortProton" "${XDG_DATA_HOME}/PortWINE"
fi
fi
if [ ! -L "${HOME}/PortWINE" ] && [ -d "${XDG_DATA_HOME}/PortWINE" ] ; then
ln -s "${XDG_DATA_HOME}/PortWINE" "${HOME}/"
else
echo "Symbolic link already exists."
fi
echo "Restarting PP after installing..."
/usr/bin/env bash -c "${PORT_WINE_PATH}/data/scripts/start.sh" $@ &
exit 0
else
echo "Installation completed successfully."
fi
else
`zenity --info --title "${inst_set_top}" --text "${inst_succ}" --no-wrap ` > /dev/null 2>&1
xdg-open "https://linux-gaming.ru/portproton/" > /dev/null 2>&1 & exit 0
fi
unset INSTALLING_PORT
......@@ -3,6 +3,7 @@
export NO_AT_BRIDGE=1
export pw_full_command_line=("$0" $*)
export YAD_BORDERS=5
MISSING_DESKTOP_FILE=0
if [[ -f "$1" ]] ; then
......@@ -36,7 +37,7 @@ if [[ -f "$portwine_exe" ]] \
&& [[ "${WARN_CYRILLIC_IN_PATH}" != 1 ]] \
&& echo "${portwine_exe}" | grep -e $'[\u0430-\u044F\u0410-\u042F]' &>/dev/null
then
zenity_info "$loc_warn_cyrillic_in_path"
yad_info "$loc_warn_cyrillic_in_path"
export WARN_CYRILLIC_IN_PATH="1"
fi
......@@ -99,7 +100,7 @@ portwine_start_debug () {
export PW_LOG=1
export PW_WINEDBG_DISABLE=0
if [[ -z "$VULKAN_DRIVER_NAME" ]] || [[ "$VULKAN_DRIVER_NAME" == "llvmpipe" ]] ; then
zenity_info "Attention working version of vulkan not detected!\nIt is recommended to run games in OpenGL (low performance possible)!"
yad_info "Attention working version of vulkan not detected!\nIt is recommended to run games in OpenGL (low performance possible)!"
fi
echo "${port_deb1}" > "${PORT_WINE_PATH}/${portname}.log"
echo "${port_deb2}" >> "${PORT_WINE_PATH}/${portname}.log"
......@@ -182,7 +183,7 @@ portwine_start_debug () {
[[ `command -v glxinfo` ]] && glxinfo -B >> "${PORT_WINE_PATH}/${portname}.log"
echo "-----" >> "${PORT_WINE_PATH}/${portname}.log"
echo "inxi -G:" >> "${PORT_WINE_PATH}/${portname}.log"
"${PW_WINELIB}/portable/bin/inxi" -Gc0 >> "${PORT_WINE_PATH}/${portname}.log"
"${PW_PLUGINS_PATH}/portable/bin/inxi" -Gc0 >> "${PORT_WINE_PATH}/${portname}.log"
if echo "$LSPCI_VGA" | grep -i nvidia &>/dev/null ; then
if command -v ldconfig &>/dev/null ; then
echo "------" >> "${PORT_WINE_PATH}/${portname}.log"
......@@ -193,7 +194,7 @@ portwine_start_debug () {
echo "----------------------------------------------" >> "${PORT_WINE_PATH}/${portname}.log"
echo "Vulkan info device name:" >> "${PORT_WINE_PATH}/${portname}.log"
"$PW_VULKANINFO_PORTABLE" 2>/dev/null | grep -E '^GPU|deviceName|driverName' >> "${PORT_WINE_PATH}/${portname}.log"
"${PW_WINELIB}/portable/bin/vkcube" --c 50
"${PW_PLUGINS_PATH}/portable/bin/vkcube" --c 50
if [ $? -eq 0 ]; then
echo "Vulkan cube test passed successfully" >> "${PORT_WINE_PATH}/${portname}.log"
else
......@@ -255,7 +256,7 @@ portwine_start_debug () {
sed -i '/wine: RLIMIT_NICE is <= 20/d' "${PORT_WINE_PATH}/${portname}.log"
deb_text=$(cat "${PORT_WINE_PATH}/${portname}.log" | awk '! a[$0]++')
echo "$deb_text" > "${PORT_WINE_PATH}/${portname}.log"
"$pw_yad" --title="${portname}.log" --borders=3 --no-buttons --text-align=center \
"$pw_yad" --title="${portname}.log" --borders=${YAD_BORDERS} --no-buttons --text-align=center \
--text-info --show-uri --wrap --width=1200 --height=550 --uri-color=red \
--filename="${PORT_WINE_PATH}/${portname}.log"
stop_portwine
......@@ -349,8 +350,8 @@ pw_prefix_manager () {
--text="${loc_prefix_manager_conf} <b>\"${PW_PREFIX_NAME}\"</b>" \
--column=set --column=dll --column=info < "${PORT_WINE_TMP_PATH}/settings_list_tmp" 1>> "${PORT_WINE_TMP_PATH}/to_winetricks" 2>/dev/null &
"${pw_yad_v12_3}" --key=$KEY_EDIT_MANAGER_GUI --notebook --borders=3 --width=900 --height=800 \
--window-icon="$PW_GUI_ICON_PATH/port_proton.png" --title "$loc_pm" --tab-pos=bottom --tab="$loc_pm_dlls" --tab="$loc_pm_fonts" --tab="$loc_pm_settings" 2>/dev/null
"${pw_yad_v12_3}" --key=$KEY_EDIT_MANAGER_GUI --notebook --borders=${YAD_BORDERS} --width=900 --height=800 \
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" --title "$loc_pm" --tab-pos=bottom --tab="$loc_pm_dlls" --tab="$loc_pm_fonts" --tab="$loc_pm_settings" 2>/dev/null
YAD_STATUS="$?"
if [[ "$YAD_STATUS" == "1" || "$YAD_STATUS" == "252" ]] ; then
stop_portwine
......@@ -430,8 +431,8 @@ pw_start_cont_xterm () {
pw_create_prefix_backup () {
cd "$HOME"
PW_PREFIX_TO_BACKUP=$("${pw_yad_v12_3}" --file --directory --borders=3 --width=650 --height=500 --auto-close \
--window-icon="$PW_GUI_ICON_PATH/port_proton.png" --title "$loc_create_pfx_backup_path" 2>/dev/null )
PW_PREFIX_TO_BACKUP=$("${pw_yad_v12_3}" --file --directory --borders=${YAD_BORDERS} --width=650 --height=500 --auto-close \
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" --title "$loc_create_pfx_backup_path" 2>/dev/null )
YAD_STATUS="$?"
if [[ "$YAD_STATUS" == "1" || "$YAD_STATUS" == "252" ]] ; then exit 0 ; fi
if [[ ! -z "$(grep "/${PW_PREFIX_NAME}/" "${PORT_WINE_PATH}"/*.desktop )" ]] ; then
......@@ -459,13 +460,13 @@ pw_create_prefix_backup () {
done
if [[ -f "${PW_PREFIX_TO_BACKUP}/${PW_PREFIX_NAME}.ppack.part" ]] ; then
mv -f "${PW_PREFIX_TO_BACKUP}/${PW_PREFIX_NAME}.ppack.part" "${PW_PREFIX_TO_BACKUP}/${PW_PREFIX_NAME}.ppack"
zenity_info "$PW_PFX_BACKUP_SUCCESS"
yad_info "$PW_PFX_BACKUP_SUCCESS"
if [[ ! -f "${PORT_WINE_TMP_PATH}/pfx_backup_info" ]] ; then
zenity_info "$PW_PFX_BACKUP_INFO"
yad_info "$PW_PFX_BACKUP_INFO"
echo "1" > "${PORT_WINE_TMP_PATH}/pfx_backup_info"
fi
else
zenity_error "$PW_PFX_BACKUP_ERROR"
yad_error "$PW_PFX_BACKUP_ERROR"
fi
return 0
......@@ -475,14 +476,14 @@ pw_edit_db () {
if [[ "${XDG_SESSION_TYPE}" == "wayland" ]] ; then
pw_gui_for_edit_db \
PW_MANGOHUD PW_MANGOHUD_USER_CONF ENABLE_VKBASALT PW_VKBASALT_USER_CONF PW_NO_ESYNC PW_NO_FSYNC PW_USE_RAY_TRACING \
PW_USE_NVAPI_AND_DLSS PW_USE_FAKE_DLSS PW_WINE_FULLSCREEN_FSR PW_HIDE_NVIDIA_GPU PW_VIRTUAL_DESKTOP PW_USE_TERMINAL \
PW_USE_NVAPI_AND_DLSS PW_USE_FAKE_DLSS PW_USE_FAKE_DLSS_3 PW_WINE_FULLSCREEN_FSR PW_HIDE_NVIDIA_GPU PW_VIRTUAL_DESKTOP PW_USE_TERMINAL \
PW_GUI_DISABLED_CS PW_USE_GAMEMODE PW_USE_D3D_EXTRAS PW_FIX_VIDEO_IN_GAME PW_REDUCE_PULSE_LATENCY \
PW_USE_GSTREAMER PW_FORCE_LARGE_ADDRESS_AWARE PW_USE_SHADER_CACHE \
PW_USE_WINE_DXGI PW_USE_EAC_AND_BE PW_USE_SYSTEM_VK_LAYERS PW_USE_OBS_VKCAPTURE PW_USE_GALLIUM_ZINK PW_USE_GAMESCOPE
else
pw_gui_for_edit_db \
PW_MANGOHUD PW_MANGOHUD_USER_CONF ENABLE_VKBASALT PW_VKBASALT_USER_CONF PW_NO_ESYNC PW_NO_FSYNC PW_USE_RAY_TRACING \
PW_USE_NVAPI_AND_DLSS PW_USE_FAKE_DLSS PW_WINE_FULLSCREEN_FSR PW_HIDE_NVIDIA_GPU PW_VIRTUAL_DESKTOP PW_USE_TERMINAL \
PW_USE_NVAPI_AND_DLSS PW_USE_FAKE_DLSS PW_USE_FAKE_DLSS_3 PW_WINE_FULLSCREEN_FSR PW_HIDE_NVIDIA_GPU PW_VIRTUAL_DESKTOP PW_USE_TERMINAL \
PW_GUI_DISABLED_CS PW_USE_GAMEMODE PW_USE_D3D_EXTRAS PW_FIX_VIDEO_IN_GAME \
PW_REDUCE_PULSE_LATENCY PW_USE_US_LAYOUT PW_USE_GSTREAMER PW_FORCE_LARGE_ADDRESS_AWARE PW_USE_SHADER_CACHE \
PW_USE_WINE_DXGI PW_USE_EAC_AND_BE PW_USE_SYSTEM_VK_LAYERS PW_USE_OBS_VKCAPTURE PW_USE_GALLIUM_ZINK PW_USE_GAMESCOPE
......@@ -626,9 +627,9 @@ if [[ -f "${portwine_exe}" ]] ; then
else
PW_SHORTCUT="${loc_gui_delete_shortcut}!$PW_GUI_ICON_PATH/separator.png!${loc_delete_shortcut}:98"
fi
OUTPUT_START=$("${pw_yad}" --text-align=center --text "$PW_COMMENT_DB" --borders=3 --form \
OUTPUT_START=$("${pw_yad}" --text-align=center --text "$PW_COMMENT_DB" --borders=${YAD_BORDERS} --form \
--title "${portname}-${install_ver} (${scripts_install_ver})" --image "${PW_ICON_FOR_YAD}" --separator=";" --keep-icon-size \
--window-icon="$PW_GUI_ICON_PATH/port_proton.png" \
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" \
--field="3D API : :CB" "${PW_DEFAULT_VULKAN_USE}" \
--field=" WINE : :CB" "${PW_DEFAULT_WINE_USE}" \
--field="PREFIX : :CBE" "${PW_ADD_PREFIXES_TO_GUI}" \
......@@ -728,8 +729,8 @@ else
gui_open_scripts_from_backup () {
cd "${PORT_WINE_TMP_PATH}/scripts_backup/"
PW_SCRIPT_FROM_BACKUP=$("${pw_yad_v12_3}" --file --borders=3 --width=650 --height=500 --auto-close \
--window-icon="$PW_GUI_ICON_PATH/port_proton.png" --title "SCRIPTS FROM BACKUP" --file-filter="backup_scripts|scripts_v*.tar.gz" 2>/dev/null )
PW_SCRIPT_FROM_BACKUP=$("${pw_yad_v12_3}" --file --borders=${YAD_BORDERS} --width=650 --height=500 --auto-close \
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" --title "SCRIPTS FROM BACKUP" --file-filter="backup_scripts|scripts_v*.tar.gz" 2>/dev/null )
YAD_STATUS="$?"
if [[ "$YAD_STATUS" == "1" || "$YAD_STATUS" == "252" ]] ; then exit 0 ; fi
unpack_tar_gz "$PW_SCRIPT_FROM_BACKUP" "${PORT_WINE_PATH}/data/"
......@@ -861,8 +862,8 @@ else
export START_FROM_PP_GUI=1
if [[ -z "${PW_ALL_DF}" ]] ; then
"${pw_yad_v12_3}" --key=$KEY --notebook --borders=3 --width="${PW_MAIN_SIZE_W}" --height="${PW_MAIN_SIZE_H}" --no-buttons --auto-close \
--window-icon="$PW_GUI_ICON_PATH/port_proton.png" --title "${portname}-${install_ver} (${scripts_install_ver})" \
"${pw_yad_v12_3}" --key=$KEY --notebook --borders=${YAD_BORDERS} --width="${PW_MAIN_SIZE_W}" --height="${PW_MAIN_SIZE_H}" --no-buttons --auto-close \
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" --title "${portname}-${install_ver} (${scripts_install_ver})" \
--tab-pos=bottom --keep-icon-size \
--tab="$loc_mg_autoinstall"!"$PW_GUI_ICON_PATH/separator.png"!"" \
--tab="$loc_mg_emulators"!"$PW_GUI_ICON_PATH/separator.png"!"" \
......@@ -871,8 +872,8 @@ else
--tab="$loc_mg_installed"!"$PW_GUI_ICON_PATH/separator.png"!"" 2>/dev/null
YAD_STATUS="$?"
else
"${pw_yad_v12_3}" --key=$KEY --notebook --borders=3 --width="${PW_MAIN_SIZE_W}" --height="${PW_MAIN_SIZE_H}" --no-buttons --auto-close \
--window-icon="$PW_GUI_ICON_PATH/port_proton.png" --title "${portname}-${install_ver} (${scripts_install_ver})" \
"${pw_yad_v12_3}" --key=$KEY --notebook --borders=${YAD_BORDERS} --width="${PW_MAIN_SIZE_W}" --height="${PW_MAIN_SIZE_H}" --no-buttons --auto-close \
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" --title "${portname}-${install_ver} (${scripts_install_ver})" \
--tab-pos=bottom --keep-icon-size \
--tab="$loc_mg_installed"!"$PW_GUI_ICON_PATH/separator.png"!"" \
--tab="$loc_mg_autoinstall"!"$PW_GUI_ICON_PATH/separator.png"!"" \
......
#!/usr/bin/env bash
#Author: Castro-Fidel (linux-gaming.ru)
#SCRIPTS_NEXT_VERSION=2251
#SCRIPTS_NEXT_VERSION=2252
########################################################################
export PW_MANGOHUD="0"
export DEFAULT_MANGOHUD_CONFIG="cpu_stats,cpu_temp,cpu_mhz,gpu_stats,gpu_temp,gpu_core_clock,gpu_mem_clock,vulkan_driver,gpu_name,vram,ram,frame_timing=1,time,arch,wine,toggle_hud=Shift_R+F12,resolution,vkbasalt,gamemode"
export PW_VKBASALT_EFFECTS="Curves:cas"
export PW_VKBASALT_FFX_CAS="0.75"
export PW_VKBASALT_FFX_CAS="0.66"
export ENABLE_VKBASALT=1
export GAMESCOPE_ARGS="-F fsr"
export PW_RT_MOUNT_RO=("")
export PW_RT_MOUNT_RW=("/media" "/mnt" "/run/media/${USER}" "${PORT_WINE_PATH}")
......@@ -38,8 +39,10 @@ export PW_USE_GAMESCOPE="0"
# export GTK_THEME="Adwaita:dark"
###DEFAULT_WINE###
export PW_WINE_USE="PROTON_LG"
export PW_PLUGINS_VER="_v12"
export PW_PLUGINS_VER="_v13"
export PW_FAKE_DLSS_VER="230506"
export PW_FAKE_DLSS_3_VER="090"
export PW_GALLIUM_NINE_VER="0.9"
###WINE_AND_PROTON_LG###
export PW_PROTON_LG_VER="PROTON_LG_8-25-2"
export PW_WINE_LG_VER="WINE_LG_9-0"
......
#!/usr/bin/env bash
# Author: Castro-Fidel (linux-gaming.ru)
########################################################################
zenity_info () {
yad_info () {
print_info "$@"
zenity --info --no-wrap --text "$@" 2> /dev/null
if [[ ! -f "${pw_yad_v12_3}" ]] ; then
local pw_yad_v12_3="yad"
command -v "${pw_yad_v12_3}" &>/dev/null || fatal "yad not found"
fi
"${pw_yad_v12_3}" --no-wrap --text "$@" --width=400 --height=50 --borders=15 --title "INFO" \
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" --image="$PW_GUI_ICON_PATH/info.png" \
--center --text-align=center --button=OK 2>/dev/null
}
export -f zenity_info
export -f yad_info
zenity_error () {
yad_error () {
print_error "$@"
zenity --error --no-wrap --text "$@" 2> /dev/null
if [[ ! -f "${pw_yad_v12_3}" ]] ; then
local pw_yad_v12_3="yad"
command -v "${pw_yad_v12_3}" &>/dev/null || fatal "yad not found"
fi
"${pw_yad_v12_3}" --no-wrap --text "$@" --width=400 --borders=15 --title "ERROR" \
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" --image="$PW_GUI_ICON_PATH/error.png" \
--center --text-align=center --button=EXIT 2>/dev/null
}
export -f zenity_error
export -f yad_error
zenity_error_download () {
zenity --question --title "$loc_gui_error" --text "$loc_gui_error_download\n" --no-wrap --ok-label="Repeat" --cancel-label="Skip"
if [[ "$?" != 0 ]] ; then
return 1
else
return 0
yad_error_download () {
if [[ ! -f "${pw_yad_v12_3}" ]] ; then
local pw_yad_v12_3="yad"
command -v "${pw_yad_v12_3}" &>/dev/null || fatal "yad not found"
fi
"${pw_yad_v12_3}" --text "$loc_gui_error_download" --width=400 --borders=15 --title "$loc_gui_error" \
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" --image="$PW_GUI_ICON_PATH/download.png" \
--no-wrap --center --text-align=center --button=SKIP:1 --button=REPEAT:0 2>/dev/null
[[ "$?" != 0 ]] && return 1 || return 0
}
gui_question () {
zenity --question --title "${inst_set}." --text "$1" --no-wrap &>/dev/null
[ $? -eq "0" ] && return 0 || return 1
if [[ ! -f "${pw_yad_v12_3}" ]] ; then
local pw_yad_v12_3="yad"
command -v "${pw_yad_v12_3}" &>/dev/null || fatal "yad not found"
fi
"${pw_yad_v12_3}" --text "${1}" --width=400 --borders=15 --title "${inst_set}." \
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" --image="$PW_GUI_ICON_PATH/question.png" \
--no-wrap --center --text-align=center --button=NO:1 --button=YES:0 2>/dev/null
[[ "$?" != 0 ]] && return 1 || return 0
}
pw_start_progress_bar_cover () {
......@@ -32,7 +52,7 @@ pw_start_progress_bar_cover () {
PW_GIF_SIZE_X=`file "${PW_GIF_FILE}" | awk '{print $7 + 20}'`
PW_GIF_SIZE_Y=`file "${PW_GIF_FILE}" | awk '{print $9 + 20}'`
"${pw_yad}" --picture --filename="${PW_GIF_FILE}" --close-on-unfocus --no-buttons --undecorated --center \
--skip-taskbar --width=$PW_GIF_SIZE_X --height=$PW_GIF_SIZE_Y --window-icon="$PW_GUI_ICON_PATH/port_proton.png" > /dev/null 2>&1 &
--skip-taskbar --width=$PW_GIF_SIZE_X --height=$PW_GIF_SIZE_Y --window-icon="$PW_GUI_ICON_PATH/portproton.svg" > /dev/null 2>&1 &
export PW_YAD_PID_PROGRESS_BAR_COVER="$!"
return 0
}
......@@ -43,7 +63,7 @@ pw_start_progress_bar_cover_block () {
PW_GIF_SIZE_X=`file "${PW_GIF_FILE}" | awk '{print $7 + 20}'`
PW_GIF_SIZE_Y=`file "${PW_GIF_FILE}" | awk '{print $9 + 20}'`
"${pw_yad}" --picture --filename="${PW_GIF_FILE}" --close-on-unfocus --no-buttons --undecorated --center \
--skip-taskbar --width=$PW_GIF_SIZE_X --height=$PW_GIF_SIZE_Y --window-icon="$PW_GUI_ICON_PATH/port_proton.png" > /dev/null 2>&1 &
--skip-taskbar --width=$PW_GIF_SIZE_X --height=$PW_GIF_SIZE_Y --window-icon="$PW_GUI_ICON_PATH/portproton.svg" > /dev/null 2>&1 &
export PW_YAD_PID_PROGRESS_BAR_COVER_BLOCK="$!"
return 0
}
......@@ -113,7 +133,7 @@ pw_stop_progress_bar_cover_block () {
export -f pw_stop_progress_bar_cover_block
open_changelog () {
"${pw_yad}" --title="$loc_gui_changelog" --borders=3 --no-buttons --text-align=center \
"${pw_yad}" --title="$loc_gui_changelog" --borders=${YAD_BORDERS} --no-buttons --text-align=center \
--text-info --show-uri --wrap --width=1200 --height=700 --uri-color=red \
--filename="${PORT_WINE_PATH}/data/${PW_CHANGELOG_FILE}"
}
......@@ -145,9 +165,9 @@ pw_tray_icon () {
}
export -f tray_icon_click_exit
# --window-icon="$PW_GUI_ICON_PATH/portproton_tray.png" \
"${pw_yad_v12_3}" --notification --no-middle \
--window-icon="$PW_GUI_ICON_PATH/port_proton.png" \
--image="$PW_GUI_ICON_PATH/port_proton.png" \
--image="$PW_GUI_ICON_PATH/portproton_tray.png" \
--command="bash -c tray_icon_click" \
--tooltip="PortProton" \
--menu="| \
......@@ -227,8 +247,8 @@ pw_gui_for_edit_db () {
--field="${loc_gui_arg_gamescope}!${loc_gui_arg_gamescope_help} :CBE" "\\${GAMESCOPE_ARGS}!-r 60 -F fsr!" 2>/dev/null 1> "${PORT_WINE_TMP_PATH}/tmp_output_yad_fps_limit" 2>/dev/null &
"${pw_yad_v12_3}" --paned --key="$KEY_EDIT_DB_GUI" --title "EDIT_DB" --text-align=center --height="800" \
--text "${loc_gui_edit_db} <b>${PORTWINE_DB}</b>\n ${loc_gui_edit_db_help}" --separator=" " --borders=3 \
--window-icon="$PW_GUI_ICON_PATH/port_proton.png" \
--text "${loc_gui_edit_db} <b>${PORTWINE_DB}</b>\n ${loc_gui_edit_db_help}" --separator=" " --borders=${YAD_BORDERS} \
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" \
--button="${loc_gui_cancel}"!!"${loc_gui_cancel_help}":1 \
--button="${loc_gui_reset_db}"!!"${loc_gui_reset_db_help}":2 \
--button="${loc_gui_open_db}"!!"${loc_gui_open_db_help}":150 \
......@@ -325,7 +345,7 @@ gui_proton_downloader () {
fi
pw_stop_progress_bar
if [[ -z "${PROTON_GE_GIT}" ]] || [[ -z "${PROTON_PW_GIT}" ]] ; then
zenity_error "$loc_gui_check_new_wine_error"
yad_error "$loc_gui_check_new_wine_error"
/usr/bin/env bash -c ${pw_full_command_line[*]} &
exit 0
fi
......@@ -357,7 +377,7 @@ gui_proton_downloader () {
`"${pw_yad}" --plug=$KEY_WINE --tabnum=5 --list --separator="" --listen \
--column "$loc_gui_del_wine" < "${PORT_WINE_TMP_PATH}/tmp_installed_wine" 1> "${PORT_WINE_TMP_PATH}/tmp_installed_wine_set" 2>/dev/null` &
`"${pw_yad}" --key=$KEY_WINE --notebook --width=500 --height=600 --text-align=center \
--window-icon="$PW_GUI_ICON_PATH/port_proton.png" --title "WINE MANAGER" --separator="" \
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" --title "WINE MANAGER" --separator="" \
--tab-pos=top --tab="PROTON-LG" --tab="WINE-KRON4EK" --tab="PROTON-GE" --tab="WINE-GE-CUSTOM" --tab="$loc_gui_installed_wine" 2>/dev/null`
YAD_WINE_STATUS="$?"
if [[ "$YAD_WINE_STATUS" == "1" || "$YAD_WINE_STATUS" == "252" ]] ; then
......@@ -419,12 +439,12 @@ gui_proton_downloader () {
else
try_remove_file "${PORT_WINE_PATH}/data/tmp/${PW_WINE_ARCHIVE}.tar.${archive_type}"
try_remove_dir "${PORT_WINE_PATH}/data/dist/${PW_WINE_ARCHIVE}"
zenity_error_download && gui_proton_downloader || exit 1
yad_error_download && gui_proton_downloader || exit 1
fi
fi
done
else
zenity_error_download && gui_proton_downloader || exit 1
yad_error_download && gui_proton_downloader || exit 1
fi
if [[ "$1" != "silent" ]] ; then
......@@ -451,9 +471,16 @@ gui_vkBasalt () {
fi
done
if [[ ! -z "${PW_VKBASALT_FFX_CAS}" ]] ; then
VKBASALT_FFX_CAS_GUI=`bc -s <<< "${PW_VKBASALT_FFX_CAS}*100" | sed 's/\..*//'`
if [[ "$PW_VKBASALT_FFX_CAS" == "0" ]]
then export VKBASALT_FFX_CAS_GUI="0"
elif [[ "$PW_VKBASALT_FFX_CAS" == "1" ]]
then export VKBASALT_FFX_CAS_GUI="100"
elif [[ "$PW_VKBASALT_FFX_CAS" == 0.0* ]]
then export VKBASALT_FFX_CAS_GUI="$(echo "$PW_VKBASALT_FFX_CAS" | awk -F'0.0' '{print $2}')"
else export VKBASALT_FFX_CAS_GUI="$(echo "$PW_VKBASALT_FFX_CAS" | awk -F'0.' '{print $2}')"
fi
else
VKBASALT_FFX_CAS_GUI=75
VKBASALT_FFX_CAS_GUI=66
fi
export old_IFS=$IFS
export IFS="%"
......@@ -466,8 +493,8 @@ gui_vkBasalt () {
--field="AMD FidelityFX - Contrast Adaptive Sharpening"!"$loc_gui_ffx_cas":SCL "${VKBASALT_FFX_CAS_GUI}" \
1> "${PORT_WINE_TMP_PATH}/tmp_yad_cas_set" 2>/dev/null &
"${pw_yad_v12_3}" --paned --key="$KEY_FX_GUI" --height="650" --title="vkBasalt" --center --borders=3 \
--separator=" " --window-icon="$PW_GUI_ICON_PATH/port_proton.png" \
"${pw_yad_v12_3}" --paned --key="$KEY_FX_GUI" --height="650" --title="vkBasalt" --center --borders=${YAD_BORDERS} \
--separator=" " --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \
--button="$loc_gui_cancel"!!"$loc_gui_cancel_help":1 \
--button="$loc_gui_disabled_vkbas"!!"$loc_gui_disabled_vkbas_help":180 \
--button="$loc_gui_save_changes"!!"$loc_gui_save_changes_help":182 2>/dev/null
......@@ -494,12 +521,13 @@ gui_vkBasalt () {
GUI_FX_RESULT="${GUI_FX_RESULT}cas"
export PW_VKBASALT_EFFECTS="${GUI_FX_RESULT}"
if [[ "$YAD_CAS_SET" == "0" ]] ; then
export PW_VKBASALT_FFX_CAS="0"
elif [[ "$YAD_CAS_SET" == "100" ]] ; then
export PW_VKBASALT_FFX_CAS="1"
else
export PW_VKBASALT_FFX_CAS="0`bc -s <<< "scale=2; $YAD_CAS_SET/100"`"
if [[ "$YAD_CAS_SET" == "0" ]]
then export PW_VKBASALT_FFX_CAS="0"
elif [[ "$YAD_CAS_SET" == "100" ]]
then export PW_VKBASALT_FFX_CAS="1"
elif [[ "$YAD_CAS_SET" -lt 10 ]]
then export PW_VKBASALT_FFX_CAS="0.0$YAD_CAS_SET"
else export PW_VKBASALT_FFX_CAS="0.$YAD_CAS_SET"
fi
edit_db_from_gui PW_VKBASALT_EFFECTS PW_VKBASALT_FFX_CAS ENABLE_VKBASALT
/usr/bin/env bash -c ${pw_full_command_line[*]} &
......@@ -557,8 +585,8 @@ gui_MangoHud () {
--field="${loc_gui_mango_fps}!${loc_gui_mango_fps_help} :CB" "${FPS_LIMIT_VAR}!disabled!${GET_REFRESH_RATE}" \
1> "${PORT_WINE_TMP_PATH}/tmp_yad_mh_fps_limit" 2>/dev/null &
"${pw_yad_v12_3}" --paned --key="$KEY_MH_GUI" --height="650" --title="MangoHud" --center --borders=3 \
--separator=" " --window-icon="$PW_GUI_ICON_PATH/port_proton.png" \
"${pw_yad_v12_3}" --paned --key="$KEY_MH_GUI" --height="650" --title="MangoHud" --center --borders=${YAD_BORDERS} \
--separator=" " --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \
--button="$loc_gui_cancel"!!"$loc_gui_cancel_help":1 \
--button="$loc_gui_disabled_mh"!!"$loc_gui_disabled_mh_help":182 \
--button="$loc_gui_save_changes"!!"$loc_gui_save_changes_help":184 2>/dev/null
......@@ -627,8 +655,8 @@ portwine_create_shortcut () {
if [[ "$1" == "block_name" ]] ; then
export name_desktop="${PORTPROTON_NAME}"
OUTPUT=$("${pw_yad}" --title="${inst_set}." --form --borders=3 \
--window-icon "$PW_GUI_ICON_PATH/port_proton.png" \
OUTPUT=$("${pw_yad}" --title="${inst_set}." --form --borders=${YAD_BORDERS} \
--window-icon "$PW_GUI_ICON_PATH/portproton.svg" \
--image "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" \
--field="${sc_info}":LBL "" \
--field=" ${name_desktop}":LBL "" \
......@@ -639,8 +667,8 @@ portwine_create_shortcut () {
PW_YAD_OUT=$?
else
export name_desktop="${PORTPROTON_NAME}"
OUTPUT=$("${pw_yad}" --title="${inst_set}." --form --borders=3 \
--window-icon "$PW_GUI_ICON_PATH/port_proton.png" \
OUTPUT=$("${pw_yad}" --title="${inst_set}." --form --borders=${YAD_BORDERS} \
--window-icon "$PW_GUI_ICON_PATH/portproton.svg" \
--image "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" \
--field="${sc_info}":LBL "" \
--field="${sc_name}:" "${name_desktop}" \
......@@ -743,8 +771,8 @@ portwine_delete_shortcut () {
}
portwine_missing_shortcut () {
"${pw_yad}" --title="${loc_gui_error}." --form --borders=3 \
--window-icon "$PW_GUI_ICON_PATH/port_proton.png" \
"${pw_yad}" --title="${loc_gui_error}." --form --borders=${YAD_BORDERS} \
--window-icon "$PW_GUI_ICON_PATH/portproton.svg" \
--image "$PW_GUI_ICON_PATH/error_file.png" \
--text "$loc_gui_missing_shortcut" \
--button="$loc_gui_delete_shortcut":0 \
......
......@@ -4,6 +4,7 @@ reshadeIncludePath = /run/pressure-vessel/pv-from-host/reshade
FilmGrain2 = /run/pressure-vessel/pv-from-host/reshade/shaders/FilmGrain2.fx
Curves = /run/pressure-vessel/pv-from-host/reshade/shaders/Curves.fx
FakeHDR = /run/pressure-vessel/pv-from-host/reshade/shaders/FakeHDR.fx
LevelsPlus = /run/pressure-vessel/pv-from-host/reshade/shaders/LevelsPlus.fx
Colourfulness = /run/pressure-vessel/pv-from-host/reshade/shaders/Colourfulness.fx
Bloom = /run/pressure-vessel/pv-from-host/reshade/shaders/Bloom.fx
SMAA = /run/pressure-vessel/pv-from-host/reshade/shaders/SMAA.fx
......@@ -20,10 +21,7 @@ HighPassSharpen = /run/pressure-vessel/pv-from-host/reshade/shaders/HighPassShar
HQ4X = /run/pressure-vessel/pv-from-host/reshade/shaders/HQ4X.fx
HSLShift = /run/pressure-vessel/pv-from-host/reshade/shaders/HSLShift.fx
Layer = /run/pressure-vessel/pv-from-host/reshade/shaders/Layer.fx
Levels = /run/pressure-vessel/pv-from-host/reshade/shaders/Levels.fx
LevelsPlus = /run/pressure-vessel/pv-from-host/reshade/shaders/LevelsPlus.fx
LiftGammaGain = /run/pressure-vessel/pv-from-host/reshade/shaders/LiftGammaGain.fx
LightDoF = /run/pressure-vessel/pv-from-host/reshade/shaders/LightDoF.fx
LumaSharpen = /run/pressure-vessel/pv-from-host/reshade/shaders/LumaSharpen.fx
LUT = /run/pressure-vessel/pv-from-host/reshade/shaders/LUT.fx
MagicBloom = /run/pressure-vessel/pv-from-host/reshade/shaders/MagicBloom.fx
......
#!/usr/bin/env bash
# Author: Castro-Fidel (linux-gaming.ru)
# Author: Mikhail Tergoev (linux-gaming.ru)
# License MIT
########################################################################
unset PW_AUTOPLAY PW_SET_LANG PW_SILENT_INSTALL
export portname="PortProton"
export port_ver=1.0
export port_ver=1.4
########################################################################
export NO_AT_BRIDGE=1
ENG_LANG="English"
RUS_LANG="Russian"
[ -z "${LANG}" ] && export LANG=C
deflink="${HOME}/PortWINE/${portname}"
[ "$(id -u)" -eq 0 ] && echo "This script should NOT be run by root!" && zenity --error --text "This script should NOT be run by root!" 2> /dev/null && exit 1
my_dir=$(dirname "$(readlink -f "$0")")
if [ "$my_dir" == "/usr/bin" ] ; then
[ -z "${XDG_DATA_HOME}" ] && export XDG_DATA_HOME="$HOME/.local/share"
if [ -f "${XDG_DATA_HOME}/PortWINE/PortProton/data/scripts/start.sh" ] ; then
/usr/bin/env bash "${XDG_DATA_HOME}/PortWINE/PortProton/data/scripts/start.sh" "$@"
exit 0
else
if [ ! -z "$(locale | grep "LANG=ru_RU.UTF-8")" ] ; then
PW_SET_LANG=$RUS_LANG
else
PW_SET_LANG=$ENG_LANG
cd "$(dirname "$(readlink -f "$0")")"
script_path="$(pwd)"
def_path="${HOME}/${portname}"
########################################################################
fatal () {
echo -e "\n${1}\n"
exit 1
}
pw_notify_send () {
if command -v notify-send &>/dev/null ; then
if [[ -f "/usr/share/icons/hicolor/scalable/apps/portproton.svg" ]]
then notify-send -u normal -a PortProton -i "/usr/share/icons/hicolor/scalable/apps/portproton.svg" $@ "${PW_NOTIFY_TEXT}"
else notify-send -u normal -a PortProton $@ "${PW_NOTIFY_TEXT}"
fi
export PW_SILENT_INSTALL="1"
export PW_AUTOPLAY=1
deflink="${XDG_DATA_HOME}/PortWINE/${portname}"
fi
fi
}
########################################################################
export INSTALLING_PORT=1
export PROGS_INST=""
export vexit=0
if [ "$(id -u)" == "0" ] ; then
$yad_gui --error --text "\nDo not run ${portname} from the superuser!" 2>/dev/null
fatal "Do not run the script from the superuser!"
fi
########################################################################
for PROGS in "wget" "curl" "tar" "awk" "zenity" "cabextract" "pidof" ; do
if [ ! -x "$(command -v "${PROGS}" 2>/dev/null)" ] ; then
PROGS_INST="${PROGS_INST} ${PROGS}" && vexit=1
unset PW_USE_NS
if command -v yad &>/dev/null
then yad_gui="yad --window-icon=portproton.svg --borders=10 --center --text-align=center"
else PW_USE_NS=1
fi
[ -z "${XDG_DATA_HOME}" ] && export XDG_DATA_HOME="$HOME/.local/share"
PP_CONFIG_FILE="${HOME}/.config/${portname}.conf"
if [ -f "${XDG_DATA_HOME}/PortWINE/PortProton/data/scripts/start.sh" ] ; then
echo "${XDG_DATA_HOME}/PortWINE/PortProton" > "${PP_CONFIG_FILE}"
elif [ -f "${HOME}/PortWINE/PortProton/data/scripts/start.sh" ] ; then
echo "${XDG_DATA_HOME}/PortWINE/PortProton" > "${PP_CONFIG_FILE}"
fi
if [ "$script_path" == "/usr/bin" ] && [ -f "${PP_CONFIG_FILE}" ] ; then
export PORT_WINE_PATH="$(cat "${PP_CONFIG_FILE}" | head -n 1)"
if [ -f "${PORT_WINE_PATH}/data/scripts/start.sh" ] ; then
echo "${port_ver}" > "${PORT_WINE_PATH}/data/tmp/${portname}_ver"
/usr/bin/env bash "${PORT_WINE_PATH}/data/scripts/start.sh" "$@"
exit 0
else
rm -f "${PP_CONFIG_FILE}"
fi
done
if [ "${vexit}" -eq "1" ] ; then
echo "You will need to install: ${PROGS_INST}, and restart the script"
exit 1
fi
########################################################################
cd "$my_dir"
export links
links="$(pwd)"
########################################################################
if [ "$1" = "-rus" ] ; then
PW_SET_LANG=$RUS_LANG
export PW_SILENT_INSTALL="1"
elif [ "$1" = "-eng" ] ; then
PW_SET_LANG=$ENG_LANG
export PW_SILENT_INSTALL="1"
elif [ -z "${PW_SET_LANG}" ] ; then
PW_SET_LANG=$(zenity --title "Install $portname" --text "Select installation language:" --list --radiolist \
--column="" --column "Language" \
TRUE "$RUS_LANG" \
FALSE "$ENG_LANG" ) 2> /dev/null
if [ $? -eq 1 ] ; then echo "Installation language not set!" && exit 1 ; fi
case $PW_SET_LANG in
"$RUS_LANG")
INFO_TEXT="Вы запустили установщик ${portname} версии ${port_ver}. \n\nЭто некоммерческий продукт и развивается исключительно за идею и Ваши пожертвования. \nВсе права стороннего программного обеспечения принадлежат их владельцам! \nПродолжая установку, Вы автоматически соглашаетесь с данными условиями." > /dev/null 2>&1 ;;
"$ENG_LANG")
INFO_TEXT="You’ve started ${portname} installer v.${port_ver}. \n\nIt is a non-commercial product and is developed only for the idea and with the help of your donations. \nAll third-party software rights belong to their respective owners! \nIf you continue installation, you agree to these terms." > /dev/null 2>&1 ;;
esac
zenity --info --title "INFO" --text "$INFO_TEXT" --no-wrap 2> /dev/null
if [ $? -eq 1 ] ; then echo "INFO message not displayed!" && exit 1 ; fi
if locale | grep "LANG=ru_RU.UTF-8" 2>/dev/null
then PW_SET_LANG="Russian"
else PW_SET_LANG="English"
fi
########################################################################
if [ "${PW_SILENT_INSTALL}" = "1" ] ; then
echo "${portname} is installed in ${deflink}"
D_PATH="${deflink}"
else
export PW_SILENT_INSTALL=1
export PW_AUTOPLAY=1
export INSTALLING_PORT=1
########################################################################
if [[ "${PW_USE_NS}" != "1" ]] ; then
case $PW_SET_LANG in
"$RUS_LANG")
inst1=$(zenity --title "Установка ${portname}" --text "Выберите путь для установки (обновления) ${portname} \nили оставьте его по умолчанию." --list --radiolist --width=350 --height=220 \
--column="" --column "Путь:" \
TRUE "${deflink}" \
FALSE "Другой путь..." ) 2> /dev/null
if [ $? -eq 1 ] ; then echo "Installation path not set!" && exit 1 ; fi
"Russian")
inst1=$($yad_gui --title "Install ${portname}" --text "Выберите путь для установки (обновления) ${portname},\nили оставьте его по умолчанию.\n\nВнимание:\nУстанавливать необходимо на файловую систему Linux (ext4, btrfs и прочие)." --list --radiolist --width=600 --height=200 \
--column="Выбор" --column "Путь:" \
TRUE "${def_path}" \
FALSE "Другой путь...")
[ "$?" != "0" ] && exit 1
inst1="$(echo $inst1 | awk -F'|' '{print $2}')"
case $inst1 in
"${deflink}")
D_PATH="${deflink}" ;;
"${def_path}")
D_PATH="${def_path}" ;;
"Другой путь...")
D_PATH=$(zenity --file-selection --directory --title="Выберите путь..." )
D_PATH="${D_PATH}/${portname}" ;;
echo 111
D_PATH="$($yad_gui --file --directory --title="Выберите путь..." --width=800 --height=800)" ;;
esac ;;
"$ENG_LANG")
inst1=$(zenity --title "Install ${portname}" --text "Choose path to install (update) ${portname} \nor leave it as default." --list --radiolist --width=350 --height=220 \
--column="" --column "Path:" \
TRUE "${deflink}" \
FALSE "Other path..." ) 2> /dev/null
if [ $? -eq 1 ] ; then echo "Installation path not set!" && exit 1; fi
"English")
inst1=$($yad_gui --title "Install ${portname}" --text "Select the installation path (update) port,\nor leave it in default." --list --radiolist --width=600 --height=200 \
--column="Set..." --column "Path:" \
TRUE "${def_path}" \
FALSE "Other path...")
inst1="$(echo $inst1 | awk -F'|' '{print $2}')"
[ "$?" != "0" ] && exit 1
case $inst1 in
"${deflink}")
D_PATH="${deflink}" ;;
"${def_path}")
D_PATH="${def_path}" ;;
"Other path...")
D_PATH=$(zenity --file-selection --directory --title="Choose your path..." )
D_PATH="${D_PATH}/${portname}" ;;
D_PATH="$($yad_gui --file --directory --title="Select the path...")" ;;
esac ;;
esac
if [ $? -eq 1 ] ; then echo "error" && exit 1 ; fi
[[ -z "${D_PATH}" ]] && fatal
echo "${D_PATH}" | grep -i "${portname}" 2>/dev/null || D_PATH="${D_PATH}/${portname}"
case $PW_SET_LANG in
"Russian")
progress_bar() {
$yad_gui --progress --title="Установка..." --text="Настройка ${portname}" --pulsate --auto-close --auto-kill --width=500
} ;;
"English")
progress_bar() {
$yad_gui --progress --title="Install..." --text="Install ${portname}" --pulsate --auto-close --auto-kill --width=500
} ;;
esac
else
D_PATH="${def_path}"
PW_NOTIFY_TEXT="Installing PortProton..."
pw_notify_send
fi
########################################################################
case $PW_SET_LANG in
"$RUS_LANG")
progress_bar() {
zenity --progress --title="Установка..." --text="Установка ${portname}" --pulsate --auto-close --auto-kill --width=450 > /dev/null 2>&1
} ;;
"$ENG_LANG")
progress_bar() {
zenity --progress --title="Install..." --text="Install ${portname}" --pulsate --auto-close --auto-kill --width=450 > /dev/null 2>&1
} ;;
esac
########################################################################
export PORT_WINE_PATH="${D_PATH}"
scripts_dir="${PORT_WINE_PATH}/data/scripts"
echo "${PORT_WINE_PATH}" > "${PP_CONFIG_FILE}"
if [ ! -d "${PORT_WINE_PATH}" ] ; then
mkdir -p "$PORT_WINE_PATH"
mkdir -p "$PORT_WINE_PATH" || fatal "Cannot create a directory: $PORT_WINE_PATH"
else
rm -fr "${PORT_WINE_PATH}/data/tmp"
rm -f "${scripts_dir}/"* > /dev/null 2>&1
rm -f "${PORT_WINE_PATH}/data/scripts/"* 2>/dev/null
fi
########################################################################
mkdir -p "${PORT_WINE_PATH}/data/tmp"
echo "${port_ver}" > "${PORT_WINE_PATH}/data/tmp/${portname}_ver"
case $PW_SET_LANG in
"$RUS_LANG") echo "RUS" > "${PORT_WINE_PATH}/data/tmp/${portname}_loc" ;;
"$ENG_LANG") echo "ENG" > "${PORT_WINE_PATH}/data/tmp/${portname}_loc" ;;
case "${PW_SET_LANG}" in
"Russian") echo "RUS" > "${PORT_WINE_PATH}/data/tmp/${portname}_loc" ;;
"English") echo "ENG" > "${PORT_WINE_PATH}/data/tmp/${portname}_loc" ;;
esac
########################################################################
if [[ "${PW_USE_NS}" != "1" ]] ; then
PW_NOTIFY_TEXT="Installing PortProton..."
pw_notify_send
fi
export PORT_WINE_TMP_PATH="${PORT_WINE_PATH}/data/tmp"
cd "${PORT_WINE_PATH}"
try_download_scripts () {
wget -O "${PORT_WINE_TMP_PATH}/PortWINE-master.tar.gz" -nd -c --read-timeout 300 \
--retry-connrefused --timeout 15 --tries 3 \
--user-agent="Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)" \
"https://github.com/Castro-Fidel/PortWINE/archive/refs/heads/master.tar.gz"
if [ "$?" = "0" ] ; then
tar -xvzf "${PORT_WINE_TMP_PATH}/PortWINE-master.tar.gz" -C "${PORT_WINE_TMP_PATH}"
if [ "$?" = "0" ] ; then
[ ! -d "${PORT_WINE_PATH}/data/" ] && mkdir "${PORT_WINE_PATH}/data/"
cp -fr "${PORT_WINE_TMP_PATH}/PortWINE-master/data_from_portwine/"* "${PORT_WINE_PATH}/data/"
rm -f "${PORT_WINE_TMP_PATH}/PortWINE-master.tar.gz"
rm -fr "${PORT_WINE_TMP_PATH}/PortWINE-master/"
export scripts_current_ver
scripts_current_ver=$(cat "${scripts_dir}/var" | grep SCRIPTS_NEXT_VERSION | awk -F "=" '{print $2}')
echo "${scripts_current_ver}" > "${PORT_WINE_TMP_PATH}/scripts_ver"
else
rm -f "${PORT_WINE_TMP_PATH}/PortWINE-master.tar.gz"
try_download_scripts
fi
else
try_download_scripts
fi
}
if [ "${PW_SILENT_INSTALL}" = "1" ] && [ ! -f "/usr/bin/portproton" ] ; then
try_download_scripts
echo -e "\nTry download scripts from gitlab.eterfund.ru..."
if ! curl -# -A "Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)" -H 'Cache-Control: no-cache, no-store' -H 'Pragma: no-cache' \
-L "https://gitlab.eterfund.ru/Castro-Fidel/PortWINE/-/archive/master/PortWINE-master.tar.gz" \
-o "${PORT_WINE_TMP_PATH}/PortWINE-master.tar.gz"
then
echo -e "\nError.\nTry download scripts from github.com..."
curl -# -A "Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)" -H 'Cache-Control: no-cache, no-store' -H 'Pragma: no-cache' \
-L "https://github.com/Castro-Fidel/PortWINE/archive/refs/heads/master.tar.gz" \
-o "${PORT_WINE_TMP_PATH}/PortWINE-master.tar.gz"
[ "$?" != "0" ] && fatal "Critical error during file download!"
fi
echo "Try unpacking scripts..."
tar -xvzf "${PORT_WINE_TMP_PATH}/PortWINE-master.tar.gz" -C "${PORT_WINE_TMP_PATH}"
if [ "$?" = "0" ] ; then
[ ! -d "${PORT_WINE_PATH}/data/" ] && mkdir "${PORT_WINE_PATH}/data/"
cp -fr "${PORT_WINE_TMP_PATH}/PortWINE-master/data_from_portwine/"* "${PORT_WINE_PATH}/data/"
rm -f "${PORT_WINE_TMP_PATH}/PortWINE-master.tar.gz"
rm -fr "${PORT_WINE_TMP_PATH}/PortWINE-master/"
export scripts_current_ver=$(cat "${PORT_WINE_PATH}/data/scripts/var" | grep SCRIPTS_NEXT_VERSION | awk -F "=" '{print $2}')
echo "${scripts_current_ver}" > "${PORT_WINE_TMP_PATH}/scripts_ver"
else
try_download_scripts | progress_bar
rm -f "${PORT_WINE_TMP_PATH}/PortWINE-master.tar.gz"
[ "$?" != "0" ] && fatal "Critical error during file unpacking!"
fi
chmod 755 -R "${PORT_WINE_PATH}"
########################################################################
cd "${scripts_dir}"
/usr/bin/env bash "${scripts_dir}/setup.sh" && exit 0
cd "${PORT_WINE_PATH}/data/scripts"
/usr/bin/env bash "${PORT_WINE_PATH}/data/scripts/setup.sh" && exit 0
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment