{ description = "Raylib + RmlUi dev shell"; inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; utils.url = "github:numtide/flake-utils"; }; outputs = { self, nixpkgs, utils }: utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; }; rmluiSrc = pkgs.fetchFromGitHub { owner = "mikke89"; repo = "RmlUi"; tag = "6.3"; hash = "sha256-ZoK6H3ldrgHjCoMgDg+6XAD+ZaCwLuUgPq0fK+GdlCs="; }; rmluiCmakeFlags = [ "-DRMLUI_LUA_BINDINGS=OFF" "-DRMLUI_SVG_PLUGIN=OFF" "-DBUILD_SAMPLES=OFF" "-DBUILD_TESTING=OFF" ]; rmlui = pkgs.stdenv.mkDerivation { pname = "rmlui"; version = "6.3"; src = rmluiSrc; nativeBuildInputs = [ pkgs.cmake pkgs.pkg-config ]; buildInputs = [ pkgs.freetype ]; cmakeFlags = rmluiCmakeFlags ++ [ "-DBUILD_SHARED_LIBS=ON" ]; }; raylibPatched = pkgs.raylib.overrideAttrs (old: { postPatch = (old.postPatch or "") + '' substituteInPlace src/platforms/rcore_desktop_glfw.c \ --replace-fail \ 'glfwSetJoystickCallback(NULL);' \ 'glfwWindowHint(GLFW_STENCIL_BITS, 8); glfwSetJoystickCallback(NULL);' ''; }); nativeBuildTools = with pkgs; [ cmake pkg-config clang-tools ]; nativeRuntimeDeps = with pkgs; [ raylibPatched libGL libX11 libXcursor libXrandr libXinerama libXi wayland libxkbcommon rmlui freetype ]; in { devShells.default = pkgs.mkShell { nativeBuildInputs = nativeBuildTools; buildInputs = nativeRuntimeDeps; shellHook = '' export C_INCLUDE_PATH="${rmlui}/include:${pkgs.raylib}/include" export CPLUS_INCLUDE_PATH="$C_INCLUDE_PATH" export LIBRARY_PATH="${pkgs.lib.makeLibraryPath nativeRuntimeDeps}" export LD_LIBRARY_PATH="$LIBRARY_PATH:$LD_LIBRARY_PATH" echo "dev shell ready (raylib + rmlui)" ''; }; packages.default = pkgs.stdenv.mkDerivation { pname = "rrmlui"; version = "0.1.0"; src = ./.; nativeBuildInputs = nativeBuildTools ++ [ pkgs.makeWrapper ]; buildInputs = nativeRuntimeDeps; cmakeFlags = [ "-DCMAKE_BUILD_TYPE=Release" ]; postInstall = '' wrapProgram $out/bin/rrmlui \ --prefix LD_LIBRARY_PATH : "${pkgs.lib.makeLibraryPath nativeRuntimeDeps}" ''; }; packages.raylibPatched = raylibPatched; } ); }