{ lib , self ? null , buildType ? "release" , platform ? "linux" , enableWayland ? true , enableXorg ? true , enableOpenGL ? true , enableVulkan ? true , rustPlatform , makeDesktopItem , pkg-config , libxkbcommon , alsa-lib , libGL , vulkan-loader , wayland , libXrandr , libXcursor , libX11 , libXi , ... }: assert (platform == "linux" ) -> (enableWayland || enableXorg); assert (platform == "linux" ) -> (enableVulkan || enableOpenGL); rustPlatform.buildRustPackage rec { name = "outfly"; inherit buildType; src = ./.; version = if (self ? rev) then self.rev else "dirty"; buildNoDefaultFeatures = true; buildFeatures = [ "embed_assets" ] ++ lib.optionals enableXorg [ "x11" ] ++ lib.optionals enableWayland [ "wayland" ]; runtimeInputs = [ libxkbcommon ] ++ lib.optionals enableOpenGL [ libGL ] ++ lib.optionals enableXorg [ libXrandr libX11 ] ++ lib.optionals enableVulkan [ vulkan-loader ]; buildInputs = [ alsa-lib.dev libXcursor libXi ] ++ lib.optionals enableWayland [ wayland ]; nativeBuildInputs = [ pkg-config ]; doCheck = false; postFixup = '' patchelf $out/bin/outfly \ --add-rpath ${lib.makeLibraryPath runtimeInputs} ''; cargoLock = { lockFile = ./Cargo.lock; }; desktopItems = [ (makeDesktopItem { name = "outfly"; exec = "outfly"; desktopName = "OutFly"; categories = [ "Game" ]; }) ]; }