Use cached nix packages from unstable channel

This commit is contained in:
Ivan Kovalev 2025-02-07 16:47:34 +01:00
parent fee783ce16
commit 4691b804bd

188
shell.nix
View File

@ -1,149 +1,67 @@
### Vulkan packages in official nix repo are still using version 1.3.296.0 while 1.4.305 or 1.4.304.0 is required for this package, so we have to use a custom vulkan packages to build shadPS4.
with import (fetchTarball "https://github.com/nixos/nixpkgs/archive/cfd19cdc54680956dc1816ac577abba6b58b901c.tar.gz") { };
with import (fetchTarball "https://github.com/NixOS/nixpkgs/archive/606996d74f6e2a12635d41c1bf58bfc7ea3bb5ec.tar.gz") { };
let
vulkanLoaderCustom = pkgs.stdenv.mkDerivation rec {
pname = "vulkan-loader";
version = "1.4.305";
src = fetchFromGitHub {
owner = "KhronosGroup";
repo = "Vulkan-Loader";
rev = "v${version}";
hash = "sha256-nAxb2WH4FUNyZ0daO1lEcuuIbqLTjNDsc95m3NIY8F8=";
};
nativeBuildInputs = [ cmake pkg-config ];
buildInputs = [ vulkanHeadersCustom ]
++ lib.optionals stdenv.hostPlatform.isLinux [ xorg.libX11 xorg.libxcb xorg.libXrandr wayland ];
cmakeFlags = [ "-DCMAKE_INSTALL_INCLUDEDIR=${vulkanHeadersCustom}/include" ]
++ lib.optional stdenv.hostPlatform.isDarwin "-DSYSCONFDIR=${moltenvk}/share"
++ lib.optional stdenv.hostPlatform.isLinux "-DSYSCONFDIR=${addDriverRunpath.driverLink}/share"
++ lib.optional (stdenv.buildPlatform != stdenv.hostPlatform) "-DUSE_GAS=OFF";
outputs = [ "out" "dev" ];
doInstallCheck = true;
installCheckPhase = ''
vulkan_path="${vulkanHeadersCustom}/include"
stripped_path="''${vulkan_path#/nix/store/}"
grep -q "$stripped_path" $dev/lib/pkgconfig/vulkan.pc || {
echo vulkanHeadersCustom include directory not found in pkg-config file
exit 1
}
'';
passthru = {
tests.pkg-config = testers.hasPkgConfigModules {
package = finalAttrs.finalPackage;
};
};
};
vulkanUtilsCustom = pkgs.stdenv.mkDerivation rec {
pname = "vulkan-utility-libraries";
version = "1.4.305";
src = fetchFromGitHub {
owner = "KhronosGroup";
repo = "Vulkan-Utility-Libraries";
rev = "vulkan-sdk-${version}";
hash = "sha256-YBket/4gsAkkr1eTQXz8lXGyQHtY5mm8jLPKAqSaawM=";
};
nativeBuildInputs = [
cmake
python3
];
buildInputs = [ vulkanHeadersCustom ];
};
vulkanHeadersCustom = pkgs.stdenv.mkDerivation rec {
pname = "vulkan-headers";
version = "1.4.305";
src = pkgs.fetchFromGitHub {
owner = "KhronosGroup";
repo = "Vulkan-Headers";
rev = "v${version}";
hash = "sha256-r5tgUxu+ZGzxBGAfLxX1bW4YshRdqCwxVQJsoQrtY/Y=";
};
cmakeFlags = lib.optionals stdenv.hostPlatform.isDarwin [ "-DVULKAN_HEADERS_ENABLE_MODULE=OFF" ];
nativeBuildInputs = [
pkgs.cmake
pkgs.ninja
];
};
llvmPackages = pkgs.llvmPackages_18;
overlay = self: super: {
vulkan-headers = vulkanHeadersCustom;
vulkan-utility-libraries = vulkanUtilsCustom;
vulkan-loader = vulkanLoaderCustom;
};
in
with import (fetchTarball "https://github.com/NixOS/nixpkgs/archive/606996d74f6e2a12635d41c1bf58bfc7ea3bb5ec.tar.gz") { overlays = [ overlay ]; };
llvmPackages.stdenv.mkDerivation {
pkgs.mkShell {
name = "shadps4-build-env";
nativeBuildInputs = [
clang
cmake
pkg-config
git
pkgs.llvmPackages_18.clang
pkgs.cmake
pkgs.pkg-config
pkgs.git
];
buildInputs = [
alsa-lib
libpulseaudio
openal
openssl
zlib
libedit
udev
libevdev
SDL2
jack2
sndio
qt6.qtbase
qt6.qttools
qt6.qtmultimedia
vulkanHeadersCustom
vulkanUtilsCustom
ffmpeg
fmt
glslang
libxkbcommon
wayland
xorg.libxcb
xorg.xcbutil
xorg.xcbutilkeysyms
xorg.xcbutilwm
sdl3
stb
qt6.qtwayland
wayland
wayland-protocols
libxkbcommon
pkgs.alsa-lib
pkgs.libpulseaudio
pkgs.openal
pkgs.openssl
pkgs.zlib
pkgs.libedit
pkgs.udev
pkgs.libevdev
pkgs.SDL2
pkgs.jack2
pkgs.sndio
pkgs.qt6.qtbase
pkgs.qt6.qttools
pkgs.qt6.qtmultimedia
pkgs.vulkan-headers
pkgs.vulkan-utility-libraries
pkgs.vulkan-tools
pkgs.ffmpeg
pkgs.fmt
pkgs.glslang
pkgs.libxkbcommon
pkgs.wayland
pkgs.xorg.libxcb
pkgs.xorg.xcbutil
pkgs.xorg.xcbutilkeysyms
pkgs.xorg.xcbutilwm
pkgs.sdl3
pkgs.stb
pkgs.qt6.qtwayland
pkgs.wayland-protocols
];
shellHook = ''
echo "Entering shadPS4 dev shell"
export QT_QPA_PLATFORM="wayland"
export QT_PLUGIN_PATH="${qt6.qtwayland}/lib/qt-6/plugins:${qt6.qtbase}/lib/qt-6/plugins"
export QML2_IMPORT_PATH="${qt6.qtbase}/lib/qt-6/qml"
export CMAKE_PREFIX_PATH="${vulkanHeadersCustom}:$CMAKE_PREFIX_PATH"
export QT_PLUGIN_PATH="${pkgs.qt6.qtwayland}/lib/qt-6/plugins:${pkgs.qt6.qtbase}/lib/qt-6/plugins"
export QML2_IMPORT_PATH="${pkgs.qt6.qtbase}/lib/qt-6/qml"
export CMAKE_PREFIX_PATH="${pkgs.vulkan-headers}:$CMAKE_PREFIX_PATH"
# NVIDIA/OpenGL
export LD_LIBRARY_PATH="${lib.makeLibraryPath [ libglvnd ]}:$LD_LIBRARY_PATH"
# OpenGL
export LD_LIBRARY_PATH="${
pkgs.lib.makeLibraryPath [
pkgs.libglvnd
pkgs.vulkan-tools
]
}:$LD_LIBRARY_PATH"
export QT_PLUGIN_PATH="${qt6.qtbase}/lib/qt-6/plugins"
export QT_QPA_PLATFORM="xcb"
export LDFLAGS="-L${llvmPackages.libcxx}/lib -lc++"
export LDFLAGS="-L${pkgs.llvmPackages_18.libcxx}/lib -lc++"
export LC_ALL="C.UTF-8"
export XAUTHORITY=${builtins.getEnv "XAUTHORITY"}
'';
}