nix-dotfiles/flake.nix
2025-04-03 15:58:39 -06:00

190 lines
6.3 KiB
Nix

{
description = "NixOS configuration for Cobray";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.11";
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
nix-gaming = {
url = "github:fufexan/nix-gaming";
};
rpcs3-latest = {
url = "github:RPCS3/rpcs3";
flake = false;
};
};
outputs = {
self,
nixpkgs,
home-manager,
nix-gaming,
rpcs3-latest,
...
} @ inputs: let
system = "x86_64-linux";
customPkgsOverlay = final: prev: let
customPkgs = import ./pkgs {
pkgs = prev;
lib = prev.lib;
};
in
customPkgs
// {
pugixml = prev.pugixml.overrideAttrs (oldAttrs: rec {
version = "1.15";
src = prev.fetchurl {
url = "https://github.com/zeux/pugixml/releases/download/v${version}/pugixml-${version}.tar.gz";
sha256 = "sha256-ZVreV/pwP7QhwuuaARO1BkvdsUXUFd0fiMeTU9kNURo=";
};
});
SDL3 = prev.stdenv.mkDerivation rec {
pname = "SDL3";
version = "3.1.3";
src = prev.fetchFromGitHub {
owner = "libsdl-org";
repo = "SDL";
rev = "preview-${version}";
sha256 = "sha256-S7yRcLHMPgq6+gec8l+ESxp2dJ+6Po/UNsBUXptQzMQ=";
};
nativeBuildInputs = [prev.cmake];
buildInputs = [
prev.libGL
prev.xorg.libX11
prev.xorg.libXext
prev.alsa-lib
];
cmakeFlags = [
"-DSDL_STATIC=OFF"
"-DSDL_SHARED=ON"
"-DSDL_CMAKE_DEBUG_POSTFIX="
"-DSDL_INSTALL_CMAKEDIR=${placeholder "out"}/lib/cmake/SDL3"
];
postInstall = ''
echo "SDL3 contents:" >&2
ls -lR $out >&2
if [ -f "$out/lib/cmake/SDL3/SDL3Config.cmake" ]; then
echo "SDL3Config.cmake:" >&2
cat $out/lib/cmake/SDL3/SDL3Config.cmake >&2
else
echo "ERROR: SDL3Config.cmake not found" >&2
exit 1
fi
'';
};
rpcs3 = prev.rpcs3.overrideAttrs (oldAttrs: {
nativeBuildInputs =
(oldAttrs.nativeBuildInputs or [])
++ [
prev.llvmPackages_18.llvm.dev
prev.llvmPackages_18.clang
prev.pkg-config
prev.qt6.qmake
prev.qt6.full
prev.xxd
prev.wayland-scanner
];
buildInputs =
(oldAttrs.buildInputs or [])
++ [
prev.llvmPackages_18.llvm
prev.llvmPackages_18.libclang
final.SDL3
prev.qt6.full
prev.vulkan-loader
prev.vulkan-tools
prev.wayland
prev.wayland-protocols
prev.libxkbcommon
prev.libpulseaudio
prev.libevdev
prev.udev
prev.glew
prev.libpng
prev.zstd
];
cmakeFlags =
(oldAttrs.cmakeFlags or [])
++ [
"-DCMAKE_PREFIX_PATH=${final.SDL3};${prev.qt6.full};${prev.wayland}"
"-DSDL3_DIR=${final.SDL3}/lib/cmake/SDL3"
"-DSDL3_INCLUDE_DIR=${final.SDL3}/include/SDL3"
"-DSDL3_LIBRARY=${final.SDL3}/lib/libSDL3.so"
"-DQt6_DIR=${prev.qt6.full}/lib/cmake/Qt6"
"-DWAYLAND_SCANNER=${prev.wayland-scanner}/bin/wayland-scanner"
"-DUSE_SYSTEM_FFMPEG=ON"
"-DUSE_SYSTEM_CURL=ON"
"-DUSE_SYSTEM_WOLFSSL=ON"
"-DUSE_QT=ON"
"-DUSE_VULKAN=ON"
"-DUSE_WAYLAND=ON"
"-DUSE_PULSEAUDIO=ON"
"-DUSE_LIBEVDEV=ON"
"-DUSE_SYSTEM_ZSTD=ON"
"-DCMAKE_VERBOSE_MAKEFILE=ON"
"-DCMake_MESSAGE_LOG_LEVEL=TRACE"
];
preConfigure = ''
echo "Verifying submodule directories:" >&2
ls -l 3rdparty/hidapi/hidapi 3rdparty/glslang/glslang 3rdparty/yaml-cpp/yaml-cpp 3rdparty/zstd/zstd >&2
if [ ! -f 3rdparty/hidapi/hidapi/CMakeLists.txt ]; then
echo "ERROR: hidapi submodule not fetched correctly" >&2
exit 1
fi
echo "Original 3rdparty/CMakeLists.txt:" >&2
cat 3rdparty/CMakeLists.txt >&2
sed -i '/find_package(SDL3/ {
s/find_package(SDL3.*)/set(SDL3_FOUND TRUE)/
a set(SDL3_INCLUDE_DIRS "${final.SDL3}/include/SDL3")
a set(SDL3_LIBRARIES "${final.SDL3}/lib/libSDL3.so")
}' 3rdparty/CMakeLists.txt
sed -i 's/message(FATAL_ERROR "SDL3 is not available on this system")/# Patched: SDL3 assumed available/' 3rdparty/CMakeLists.txt
echo "Patched 3rdparty/CMakeLists.txt:" >&2
cat 3rdparty/CMakeLists.txt >&2
echo "Checking submodules:" >&2
ls -lR 3rdparty/hidapi 3rdparty/glslang 3rdparty/yaml-cpp 3rdparty/cubeb 3rdparty/zstd >&2
'';
});
};
pkgs = import nixpkgs {
inherit system;
config.allowUnfree = true;
overlays = [customPkgsOverlay];
};
lib = nixpkgs.lib;
rpcs3_latest = pkgs.rpcs3.overrideAttrs (oldAttrs: {
src = pkgs.fetchgit {
url = "https://github.com/RPCS3/rpcs3.git";
rev = inputs.rpcs3-latest.rev; # Should be 37dbd77628f44cdef3228bdfc03127365ec7383b per flake.lock
sha256 = "sha256-Yx0Qsc0r+5C0BqqsbJCv47QPeaNbaIut8s6Hcysy2mo="; # Confirmed for 37dbd77628f44cdef3228bdfc03127365ec7383b with submodules
fetchSubmodules = true;
};
preUnpack = ''
echo "Source rev: ${inputs.rpcs3-latest.rev}" >&2
echo "Expected rev: 37dbd77628f44cdef3228bdfc03127365ec7383b" >&2
'';
});
in {
nixosConfigurations = {
nixos = lib.nixosSystem {
inherit system;
specialArgs = {inherit inputs;};
modules = [
{nixpkgs.overlays = [customPkgsOverlay];}
./hosts/configuration.nix
];
};
};
homeConfigurations = {
"cobray" = home-manager.lib.homeManagerConfiguration {
inherit pkgs;
extraSpecialArgs = {inherit inputs rpcs3_latest;};
modules = [./home-manager/cobray.nix];
};
};
};
}