shadps4-qtlauncher: init at 224

This commit is contained in:
Ryan Omasta
2026-05-15 18:18:05 -06:00
parent 9e945edf7f
commit 8de3589aa7
5 changed files with 201 additions and 0 deletions
@@ -0,0 +1,104 @@
{
lib,
stdenv,
fetchFromGitHub,
cmake,
pkg-config,
qt6,
fmt,
sdl3,
toml11,
shadps4,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "shadps4-qtlauncher";
version = "224";
src = fetchFromGitHub {
owner = "shadps4-emu";
repo = "shadps4-qtlauncher";
tag = "v${finalAttrs.version}";
hash = "sha256-lRZH9fokUKN/n3m/ZkTsRHwkwZZ04buvqBMXYLrqqLE=";
postCheckout = ''
cd "$out"
git rev-parse --short=8 HEAD > $out/COMMIT
date -u -d "@$(git log -1 --pretty=%ct)" "+%Y-%m-%dT%H:%M:%SZ" > $out/SOURCE_DATE_EPOCH
git -C externals submodule update --init --recursive \
volk \
json
'';
};
strictDeps = true;
__structuredAttrs = true;
patches = [
./qt-paths.patch
# https://github.com/shadps4-emu/shadps4-qtlauncher/pull/335
./version-directory.patch
];
postPatch = ''
substituteInPlace src/common/scm_rev.cpp.in \
--replace-fail @APP_VERSION@ ${finalAttrs.version} \
--replace-fail @GIT_REV@ $(cat COMMIT) \
--replace-fail @GIT_BRANCH@ ${finalAttrs.version} \
--replace-fail @GIT_DESC@ nixpkgs \
--replace-fail @BUILD_DATE@ $(cat SOURCE_DATE_EPOCH)
substituteInPlace src/common/versions.cpp \
--replace-fail "@shadps4-qt@" "$out"
substituteInPlace src/qt_gui/gui_settings.cpp \
--replace-fail "@shadps4-qt@" "$out"
substituteInPlace src/qt_gui/version_dialog.cpp \
--replace-fail "@shadps4-qt@" "$out"
'';
nativeBuildInputs = [
cmake
pkg-config
qt6.wrapQtAppsHook
];
buildInputs = [
fmt
sdl3
toml11
qt6.qtbase
qt6.qttools
qt6.qtmultimedia
];
cmakeFlags = [
(lib.cmakeBool "ENABLE_UPDATER" false)
(lib.cmakeBool "HIDE_VERSION_MANAGER" true)
];
postInstall = ''
substitute ${./versions.json} $out/share/versions.json \
--replace-fail @shadps4@ ${lib.getExe shadps4}
substitute ${./qt_ui.ini} $out/share/qt_ui.ini \
--replace-fail @shadps4@ ${lib.getExe shadps4}
'';
meta = {
inherit (shadps4.meta)
platforms
license
maintainers
;
description = shadps4.meta.description + " (Qt UI)";
homepage = "https://github.com/shadps4-emu/shadps4-qtlauncher";
mainProgram = "shadPS4QtLauncher";
};
})
@@ -0,0 +1,50 @@
diff --git a/src/common/versions.cpp b/src/common/versions.cpp
index b935bb6..8625989 100644
--- a/src/common/versions.cpp
+++ b/src/common/versions.cpp
@@ -18,7 +18,7 @@ namespace VersionManager {
std::vector<Version> GetVersionList(std::filesystem::path const& path) {
std::filesystem::path cfg_path =
- path.empty() ? Common::FS::GetUserPath(Common::FS::PathType::LauncherDir) / "versions.json"
+ path.empty() ? "@shadps4-qt@/share/versions.json"
: path;
std::ifstream ifs{cfg_path};
@@ -76,7 +76,7 @@ std::vector<Version> GetVersionList(std::filesystem::path const& path) {
void SaveVersionList(std::vector<Version> const& versions, std::filesystem::path const& path) {
std::filesystem::path out_path =
- path.empty() ? Common::FS::GetUserPath(Common::FS::PathType::LauncherDir) / "versions.json"
+ path.empty() ? "@shadps4-qt@/share/versions.json"
: path;
json root = json::array();
diff --git a/src/qt_gui/gui_settings.cpp b/src/qt_gui/gui_settings.cpp
index 707131c..40e3f14 100644
--- a/src/qt_gui/gui_settings.cpp
+++ b/src/qt_gui/gui_settings.cpp
@@ -5,7 +5,9 @@
#include "gui_settings.h"
gui_settings::gui_settings(QObject* parent) : settings(parent) {
- m_settings = std::make_unique<QSettings>(ComputeSettingsDir() + "qt_ui.ini",
+ QString currentPath;
+ Common::FS::PathToQString(currentPath, "@shadps4-qt@/share/qt_ui.ini");
+ m_settings = std::make_unique<QSettings>(currentPath,
QSettings::Format::IniFormat, parent);
}
diff --git a/src/qt_gui/version_dialog.cpp b/src/qt_gui/version_dialog.cpp
index 2ed0418..13c6788 100644
--- a/src/qt_gui/version_dialog.cpp
+++ b/src/qt_gui/version_dialog.cpp
@@ -638,7 +638,7 @@ tr("First you need to choose a location to save the versions in\n'Path to save v
}
void VersionDialog::LoadInstalledList() {
- const auto path = Common::FS::GetUserPath(Common::FS::PathType::LauncherDir) / "versions.json";
+ const auto path = "@shadps4-qt@/share/versions.json";
auto versions = VersionManager::GetVersionList(path);
const auto& selected_version =
m_gui_settings->GetValue(gui::vm_versionSelected).toString().toStdString();
@@ -0,0 +1,2 @@
[version_manager]
versionSelected=@shadps4@
@@ -0,0 +1,37 @@
diff --git a/src/qt_gui/game_install_dialog.cpp b/src/qt_gui/game_install_dialog.cpp
index 8a9b94d..919d4a5 100644
--- a/src/qt_gui/game_install_dialog.cpp
+++ b/src/qt_gui/game_install_dialog.cpp
@@ -144,7 +144,9 @@ void GameInstallDialog::Save() {
// Check games directory.
auto gamesDirectory = m_gamesDirectory->text();
auto addonsDirectory = m_addonsDirectory->text();
+#ifndef HIDE_VERSION_MANAGER
auto versionDirectory = m_versionDirectory->text();
+#endif
if (gamesDirectory.isEmpty() || !QDir(gamesDirectory).exists() ||
!QDir::isAbsolutePath(gamesDirectory)) {
@@ -167,6 +169,7 @@ void GameInstallDialog::Save() {
}
}
+#ifndef HIDE_VERSION_MANAGER
if (versionDirectory.isEmpty() || !QDir::isAbsolutePath(versionDirectory)) {
QMessageBox::critical(this, tr("Error"),
"The value for location to install emulator versions is not valid.");
@@ -181,11 +184,14 @@ void GameInstallDialog::Save() {
return;
}
}
+#endif
// Save the directories
Config::addGameInstallDir(Common::FS::PathFromQString(gamesDirectory));
Config::setAddonInstallDir(Common::FS::PathFromQString(addonsDirectory));
+#ifndef HIDE_VERSION_MANAGER
m_gui_settings->SetValue(gui::vm_versionPath, versionDirectory);
+#endif
const auto config_dir = Common::FS::GetUserPath(Common::FS::PathType::UserDir);
Config::save(config_dir / "config.toml");
@@ -0,0 +1,8 @@
[
{
"codename": "built-in",
"name": "built-in",
"path": "@shadps4@",
"type": 0
}
]