{ description = "VulkanEngine development environment"; inputs = { nixpkgs.url = "nixpkgs"; flake-utils.url = "github:numtide/flake-utils"; }; outputs = { self, nixpkgs, flake-utils }: flake-utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; config.allowUnfree = true; }; vulkanPackages = with pkgs; [ vulkan-headers vulkan-loader vulkan-validation-layers vulkan-tools vulkan-utility-libraries vulkan-memory-allocator vulkan-volk vk-bootstrap ]; developmentPackages = with pkgs; [ # Shaders shader-slang glslang # Vulkan vulkan-headers vulkan-loader vulkan-validation-layers vulkan-tools vulkan-utility-libraries vulkan-memory-allocator vulkan-volk vk-bootstrap # Windowing glfw3 wayland wayland-protocols wayland-scanner libxkbcommon # Audio libpulseaudio libpulseaudio.dev # Libraries fmt cli11 simdjson glm nlohmann_json tinyobjloader tinygltf stb # Build cmake ninja pkg-config # Debug gdb renderdoc ]; in { devShells.default = pkgs.mkShell { name = "vulkan-engine"; hardeningDisable = [ "fortify" ]; packages = developmentPackages; VK_LAYER_PATH = "${pkgs.vulkan-validation-layers}/share/vulkan/explicit_layer.d"; VULKAN_SDK = "${pkgs.vulkan-validation-layers}"; shellHook = '' export LD_LIBRARY_PATH="${pkgs.lib.makeLibraryPath [ pkgs.vulkan-loader pkgs.wayland pkgs.libxkbcommon ]}" echo "VulkanEngine development environment" echo "CMake: $(cmake --version | head -n1)" echo "Ninja: $(ninja --version)" echo "GCC: $(g++ --version | head -n1)" echo "GLSLang: $(glslangValidator --version | head -n1)" echo "Slang: $(slangc -v | head -n1)" unset SOURCE_DATE_EPOCH ''; }; packages.engine = pkgs.callPackage ./package.nix {}; packages.default = self.packages.${system}.engine; } ); }