From c9be94cc08f3ae71f96245c62eb948a13f126b9a Mon Sep 17 00:00:00 2001 From: Mikhail Tergoev Date: Fri, 9 Feb 2024 21:14:31 +0300 Subject: [PATCH] Scripts version 2252 --- README-RU.md | 58 +--- README.md | 56 +--- data_from_portwine/changelog_eng | 12 + data_from_portwine/changelog_rus | 9 + data_from_portwine/dxvk.conf | 19 +- data_from_portwine/img/gui/download.png | Bin 0 -> 6325 bytes data_from_portwine/img/gui/error.png | Bin 0 -> 6919 bytes data_from_portwine/img/gui/info.png | Bin 0 -> 5846 bytes data_from_portwine/img/gui/port_proton.png | Bin 12474 -> 16326 bytes data_from_portwine/img/gui/portproton.svg | 1 + .../img/gui/portproton_tray.png | Bin 0 -> 5883 bytes data_from_portwine/img/gui/question.png | Bin 0 -> 6565 bytes data_from_portwine/img/w.png | Bin 58472 -> 64180 bytes data_from_portwine/scripts/.Xresources | 85 ------ data_from_portwine/scripts/credits | 12 +- data_from_portwine/scripts/functions_helper | 202 +++++++++----- data_from_portwine/scripts/lang | 7 +- .../scripts/pw_autoinstall/PW_EPIC | 1 + .../scripts/pw_autoinstall/PW_GOG | 2 +- .../scripts/pw_autoinstall/PW_LOL | 4 +- .../scripts/pw_autoinstall/PW_PROJECT64 | 2 +- .../scripts/pw_autoinstall/PW_WOSB | 2 +- data_from_portwine/scripts/runlib | 140 +++++----- data_from_portwine/scripts/setup.sh | 56 ++-- data_from_portwine/scripts/start.sh | 45 +-- data_from_portwine/scripts/var | 9 +- .../scripts/{zen_yad_gui => yad_gui} | 124 +++++---- data_from_portwine/vkBasalt.conf | 4 +- portwine_install_script/PortProton_1.0 | 256 +++++++++--------- 29 files changed, 525 insertions(+), 581 deletions(-) create mode 100644 data_from_portwine/img/gui/download.png create mode 100644 data_from_portwine/img/gui/error.png create mode 100644 data_from_portwine/img/gui/info.png create mode 100644 data_from_portwine/img/gui/portproton.svg create mode 100644 data_from_portwine/img/gui/portproton_tray.png create mode 100644 data_from_portwine/img/gui/question.png delete mode 100755 data_from_portwine/scripts/.Xresources rename data_from_portwine/scripts/{zen_yad_gui => yad_gui} (89%) diff --git a/README-RU.md b/README-RU.md index ce67a09..8d2b53e 100755 --- a/README-RU.md +++ b/README-RU.md @@ -1,5 +1,5 @@
- +

PortProton

Проект, призванный сделать запуск Windows-игр в Linux простым и удобным как для начинающих, так и для опытных пользователей. Проект стремится сделать запуск игр (и другого программного обеспечения) максимально простым, но в то же время предоставляет гибкие настройки для опытных пользователей.

@@ -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 ``` ## Контакты diff --git a/README.md b/README.md index 9d00f83..4467601 100755 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@
- +

PortProton

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.

@@ -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 diff --git a/data_from_portwine/changelog_eng b/data_from_portwine/changelog_eng index f114e6d..bb46ea1 100755 --- a/data_from_portwine/changelog_eng +++ b/data_from_portwine/changelog_eng @@ -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 diff --git a/data_from_portwine/changelog_rus b/data_from_portwine/changelog_rus index bd807d9..9f58e77 100755 --- a/data_from_portwine/changelog_rus +++ b/data_from_portwine/changelog_rus @@ -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 после его установки на некоторых системах diff --git a/data_from_portwine/dxvk.conf b/data_from_portwine/dxvk.conf index 8a6e232..3cc8d70 100755 --- a/data_from_portwine/dxvk.conf +++ b/data_from_portwine/dxvk.conf @@ -33,22 +33,17 @@ d3d9.maxFrameRate = 240 # # Supported values: Any four-digit hex number. -dxgi.customDeviceId = 222F -dxgi.customVendorId = 10de +# dxgi.customDeviceDesc = "NVIDIA GeForce RTX 4090" +# dxgi.customDeviceId = 2684 +# dxgi.customVendorId = 10de +# dxgi.hideAmdGpu = True +# dxgi.hideNvidiaGpu = False -# d3d9.customDeviceId = 222F +# 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. diff --git a/data_from_portwine/img/gui/download.png b/data_from_portwine/img/gui/download.png new file mode 100644 index 0000000000000000000000000000000000000000..c55fdef54954e0462f2a1a9301af357f8efbb6f2 GIT binary patch literal 6325 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 DUh&f? literal 0 HcmV?d00001 diff --git a/data_from_portwine/img/gui/error.png b/data_from_portwine/img/gui/error.png new file mode 100644 index 0000000000000000000000000000000000000000..3455a17f50b797f82edb6ac46431ceea82f91f56 GIT binary patch literal 6919 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 literal 0 HcmV?d00001 diff --git a/data_from_portwine/img/gui/info.png b/data_from_portwine/img/gui/info.png new file mode 100644 index 0000000000000000000000000000000000000000..ccfa4ed262472e6ad5a3ecb16fb39118da11bda9 GIT binary patch literal 5846 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 literal 0 HcmV?d00001 diff --git a/data_from_portwine/img/gui/port_proton.png b/data_from_portwine/img/gui/port_proton.png index 7d1a77930de0444c459461bc45149205533eb1a3..4e5f72e2b4ea0f50d1c01f67de4632eb7f4197b5 100644 GIT binary patch literal 16326 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 a@=A0e>q1av2lO^RjH0ZnOqG;r@c#m(PM|jc literal 12474 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 diff --git a/data_from_portwine/img/gui/portproton.svg b/data_from_portwine/img/gui/portproton.svg new file mode 100644 index 0000000..efcbe9e --- /dev/null +++ b/data_from_portwine/img/gui/portproton.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data_from_portwine/img/gui/portproton_tray.png b/data_from_portwine/img/gui/portproton_tray.png new file mode 100644 index 0000000000000000000000000000000000000000..0f94e6078e798d219d3641e83be44ee2844ab031 GIT binary patch literal 5883 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 b1TKT$sloU8>!(@T`Nxgxw^5Zk4$=Py_1fr{ literal 58472 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℞eiDQvC#wf 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 diff --git a/data_from_portwine/scripts/.Xresources b/data_from_portwine/scripts/.Xresources deleted file mode 100755 index 91daf72..0000000 --- a/data_from_portwine/scripts/.Xresources +++ /dev/null @@ -1,85 +0,0 @@ -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 - diff --git a/data_from_portwine/scripts/credits b/data_from_portwine/scripts/credits index 85db4b7..3f7425c 100755 --- a/data_from_portwine/scripts/credits +++ b/data_from_portwine/scripts/credits @@ -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" diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index 1e2fa22..0d1f015 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -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 diff --git a/data_from_portwine/scripts/lang b/data_from_portwine/scripts/lang index b2f9824..185059d 100755 --- a/data_from_portwine/scripts/lang +++ b/data_from_portwine/scripts/lang @@ -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} diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_EPIC b/data_from_portwine/scripts/pw_autoinstall/PW_EPIC index 82f119c..0c1f08a 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_EPIC +++ b/data_from_portwine/scripts/pw_autoinstall/PW_EPIC @@ -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" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_GOG b/data_from_portwine/scripts/pw_autoinstall/PW_GOG index ef275da..cdd249b 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_GOG +++ b/data_from_portwine/scripts/pw_autoinstall/PW_GOG @@ -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 diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_LOL b/data_from_portwine/scripts/pw_autoinstall/PW_LOL index 31eec29..5955f2e 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_LOL +++ b/data_from_portwine/scripts/pw_autoinstall/PW_LOL @@ -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}" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_PROJECT64 b/data_from_portwine/scripts/pw_autoinstall/PW_PROJECT64 index ca2ca77..34b4e11 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_PROJECT64 +++ b/data_from_portwine/scripts/pw_autoinstall/PW_PROJECT64 @@ -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" diff --git a/data_from_portwine/scripts/pw_autoinstall/PW_WOSB b/data_from_portwine/scripts/pw_autoinstall/PW_WOSB index 42e445b..149c853 100755 --- a/data_from_portwine/scripts/pw_autoinstall/PW_WOSB +++ b/data_from_portwine/scripts/pw_autoinstall/PW_WOSB @@ -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}" diff --git a/data_from_portwine/scripts/runlib b/data_from_portwine/scripts/runlib index 8785764..770a53b 100755 --- a/data_from_portwine/scripts/runlib +++ b/data_from_portwine/scripts/runlib @@ -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 diff --git a/data_from_portwine/scripts/setup.sh b/data_from_portwine/scripts/setup.sh index 9168953..3a78353 100755 --- a/data_from_portwine/scripts/setup.sh +++ b/data_from_portwine/scripts/setup.sh @@ -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 diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh index e9c9824..182fb60 100755 --- a/data_from_portwine/scripts/start.sh +++ b/data_from_portwine/scripts/start.sh @@ -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} \"${PW_PREFIX_NAME}\"" \ --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"!"" \ diff --git a/data_from_portwine/scripts/var b/data_from_portwine/scripts/var index 3ab0418..accc6d3 100755 --- a/data_from_portwine/scripts/var +++ b/data_from_portwine/scripts/var @@ -1,11 +1,12 @@ #!/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" diff --git a/data_from_portwine/scripts/zen_yad_gui b/data_from_portwine/scripts/yad_gui similarity index 89% rename from data_from_portwine/scripts/zen_yad_gui rename to data_from_portwine/scripts/yad_gui index 5f48ee1..9d914b9 100755 --- a/data_from_portwine/scripts/zen_yad_gui +++ b/data_from_portwine/scripts/yad_gui @@ -1,30 +1,50 @@ #!/usr/bin/env bash # Author: Castro-Fidel (linux-gaming.ru) ######################################################################## -zenity_info () { +yad_info () { print_info "$@" - zenity --info --no-wrap --text "$@" 2> /dev/null -} -export -f zenity_info - -zenity_error () { - print_error "$@" - zenity --error --no-wrap --text "$@" 2> /dev/null -} -export -f zenity_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 + 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 yad_info + +yad_error () { + print_error "$@" + 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 yad_error + +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} ${PORTWINE_DB}\n ${loc_gui_edit_db_help}" --separator=" " --borders=3 \ - --window-icon="$PW_GUI_ICON_PATH/port_proton.png" \ + --text "${loc_gui_edit_db} ${PORTWINE_DB}\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 \ diff --git a/data_from_portwine/vkBasalt.conf b/data_from_portwine/vkBasalt.conf index 833202c..8721c2d 100755 --- a/data_from_portwine/vkBasalt.conf +++ b/data_from_portwine/vkBasalt.conf @@ -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 diff --git a/portwine_install_script/PortProton_1.0 b/portwine_install_script/PortProton_1.0 index 4c301e6..7eed202 100755 --- a/portwine_install_script/PortProton_1.0 +++ b/portwine_install_script/PortProton_1.0 @@ -1,168 +1,162 @@ #!/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" "$@" +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 + fi +} +######################################################################## +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 +######################################################################## +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 - if [ ! -z "$(locale | grep "LANG=ru_RU.UTF-8")" ] ; then - PW_SET_LANG=$RUS_LANG - else - PW_SET_LANG=$ENG_LANG - fi - export PW_SILENT_INSTALL="1" - export PW_AUTOPLAY=1 - deflink="${XDG_DATA_HOME}/PortWINE/${portname}" + rm -f "${PP_CONFIG_FILE}" fi fi +if locale | grep "LANG=ru_RU.UTF-8" 2>/dev/null +then PW_SET_LANG="Russian" +else PW_SET_LANG="English" +fi ######################################################################## +export PW_SILENT_INSTALL=1 +export PW_AUTOPLAY=1 export INSTALLING_PORT=1 -export PROGS_INST="" -export vexit=0 ######################################################################## -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 - 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 +if [[ "${PW_USE_NS}" != "1" ]] ; then 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 -fi -######################################################################## -if [ "${PW_SILENT_INSTALL}" = "1" ] ; then - echo "${portname} is installed in ${deflink}" - D_PATH="${deflink}" -else - 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 -else - try_download_scripts | progress_bar +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 + 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