{ description = "Build Project Terminal"; inputs = { nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable"; imgui.url = "github:ocornut/imgui?ref=docking"; imgui.flake = false; }; outputs = { self, nixpkgs, imgui }@inputs: let system = "x86_64-linux"; pkgs = nixpkgs.legacyPackages.${system}; renderer = "vulkan"; window = "sdl2"; in { packages.${system}.default = pkgs.stdenv.mkDerivation { name = "Terminal"; inherit system; src = ./.; imgui = inputs.imgui; buildInputs = with pkgs; if renderer == "vulkan" && window == "sdl2" then [ tinyobjloader stb glm shaderc SDL2 vulkan-headers vulkan-loader ] else if renderer == "vulkan" && window == "glfw" then [ stb glm shaderc glfw vulkan-headers vulkan-loader ] else if renderer == "opengl3" && window == "sdl2" then [ stb glm SDL2 ] else if renderer == "opengl3" && window == "glfw" then [ stb glm glfw ] else []; buildPhase = if renderer == "vulkan" && window == "sdl2" then '' glslc shaders/*.vert -o vert.spv glslc shaders/*.frag -o frag.spv g++ src/*.cpp renderer/vulkanRenderer.cpp window/sdl2Window.cpp layers/*.cpp events/*.cpp \ -I src -I renderer -I window -I layers -I events \ -I $imgui -I $imgui/backends -I ${pkgs.stb}/include/stb $(sdl2-config --cflags) \ $imgui/*.cpp $imgui/backends/*sdl2.cpp $imgui/backends/*vulkan.cpp \ -lSDL2 -lvulkan -o $name -DIMGUI_ENABLE -DSHDR_PATH=$out/bin '' else if renderer == "vulkan" && window == "glfw" then '' glslc shaders/*.vert -o vert.spv glslc shaders/*.frag -o frag.spv g++ src/*.cpp renderer/vulkanRenderer.cpp window/sdl2Window.cpp layers/*.cpp events/*.cpp \ -I src -I renderer -I window -I layers -I events \ -I $imgui -I $imgui/backends -I ${pkgs.stb}/include/stb $(sdl2-config --cflags) \ $imgui/*.cpp $imgui/backends/*sdl2.cpp $imgui/backends/*vulkan.cpp \ -lSDL2 -lvulkan -o $name -DIMGUI_ENABLE -DSHDR_PATH=$out/bin '' else if renderer == "opengl3" && window == "sdl2" then '' glslc shaders/*.vert -o vert.spv glslc shaders/*.frag -o frag.spv g++ src/*.cpp renderer/vulkanRenderer.cpp window/sdl2Window.cpp layers/*.cpp events/*.cpp \ -I src -I renderer -I window -I layers -I events \ -I $imgui -I $imgui/backends -I ${pkgs.stb}/include/stb $(sdl2-config --cflags) \ $imgui/*.cpp $imgui/backends/*sdl2.cpp $imgui/backends/*vulkan.cpp \ -lSDL2 -lvulkan -o $name -DIMGUI_ENABLE -DSHDR_PATH=$out/bin '' else if renderer == "opengl3" && window == "glfw" then '' glslc shaders/*.vert -o vert.spv glslc shaders/*.frag -o frag.spv g++ src/*.cpp renderer/vulkanRenderer.cpp window/sdl2Window.cpp layers/*.cpp events/*.cpp \ -I src -I renderer -I window -I layers -I events \ -I $imgui -I $imgui/backends -I ${pkgs.stb}/include/stb $(sdl2-config --cflags) \ $imgui/*.cpp $imgui/backends/*sdl2.cpp $imgui/backends/*vulkan.cpp \ -lSDL2 -lvulkan -o $name -DIMGUI_ENABLE -DSHDR_PATH=$out/bin '' else ''''; installPhase = '' mkdir -p $out/bin cp *.spv $out/bin cp $name $out/bin ''; }; shaders = pkgs.stdenv.mkDerivation { name = "Terminal"; inherit system; src = ./.; buildInputs = with pkgs; [ shaderc ]; buildPhase = '' glslc shaders/*.vert -o vert.spv glslc shaders/*.frag -o frag.spv ''; installPhase = '' mkdir -p $out/bin cp *.spv $out/bin ''; }; }; }