{ description = "Build Project Archimedes"; inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11"; imgui = { url = "github:ocornut/imgui?ref=docking"; flake = false; }; clay = { url = "github:nicbarker/clay"; flake = false; }; }; outputs = { self, nixpkgs, imgui, clay }: let system = "x86_64-linux"; pkgs = import nixpkgs { inherit system; }; in { Archimedes = { examples = { MinimalApp = pkgs.stdenvNoCC.mkDerivation { name = "Archimedes"; src = ./.; nativeBuildInputs = with pkgs; [ clang ]; /*buildInputs = with pkgs; [ ];*/ buildPhase = '' clang++ \ src/example_apps/MinimalApp/MinimalApp.cpp \ include/utils/App/App.cpp \ -I src -I include \ -Wall \ -o $name ''; installPhase = '' mkdir -p $out/bin cp $name $out/bin ''; }; ImguiEmbed = pkgs.stdenvNoCC.mkDerivation { name = "Archimedes"; src = ./.; inherit imgui; nativeBuildInputs = with pkgs; [ clang ]; buildInputs = with pkgs; [ glfw glew ]; buildPhase = '' clang++ \ src/example_apps/ImguiEmbed/*.cpp \ modules/GUImodules/TestImgui/src/*.cpp \ $imgui/backends/imgui_impl_glfw.cpp \ $imgui/backends/imgui_impl_opengl3.cpp \ $imgui/*.cpp \ include/utils/App/App.cpp \ include/utils/Renderer/*.cpp \ include/utils/Window/*.cpp \ -DRENDERER_OPENGL \ -DWINDOW_GLFW \ -DGUIMODULE \ -DTESTIMGUI_STATIC \ -I src -I include -I $imgui -I . \ -lGL -lglfw -lGLEW \ -Wall \ -o $name ''; installPhase = '' mkdir -p $out/bin cp $name $out/bin ''; }; }; }; TestMenu = pkgs.stdenvNoCC.mkDerivation { name = "TestMenu"; src = ./.; nativeBuildInputs = with pkgs; [ clang ]; buildPhase = '' clang++ \ modules/TestMenu/src/*.cpp src/App.cpp \ -fpic -shared \ -I src \ -Wall \ -o $name ''; installPhase = '' mkdir -p $out/bin cp $name $out/bin ''; }; Print = pkgs.stdenvNoCC.mkDerivation { name = "Print"; src = ./.; nativeBuildInputs = with pkgs; [ clang ]; buildPhase = '' clang++ \ modules/Print/src/*.cpp \ include/utils/App/App.cpp \ -fpic -shared \ -I src -I include \ -Wall \ -o $name ''; installPhase = '' mkdir -p $out/bin cp $name $out/bin ''; }; DependsOnPrint = pkgs.stdenvNoCC.mkDerivation { name = "DependsOnPrint"; src = ./.; nativeBuildInputs = with pkgs; [ clang ]; buildPhase = '' clang++ \ modules/DependsOnPrint/src/*.cpp src/App.cpp \ -fpic -shared \ -I src -I include \ -Wall \ -o $name ''; installPhase = '' mkdir -p $out/bin cp $name $out/bin ''; }; WindowModule = pkgs.stdenvNoCC.mkDerivation { name = "WindowModule"; src = ./.; nativeBuildInputs = with pkgs; [ clang ]; buildInputs = with pkgs; [ glfw glew ]; buildPhase = '' clang++ \ modules/Window/src/*.cpp src/App.cpp \ include/utils/Window/*.cpp \ include/utils/Renderer/*.cpp \ -fpic -shared \ -I src -I include \ -DRENDERER_OPENGL \ -DWINDOW_GLFW \ -lGL -lglfw -lGLEW \ -Wall \ -o $name ''; installPhase = '' mkdir -p $out/bin cp $name $out/bin ''; }; TestImgui = pkgs.stdenvNoCC.mkDerivation { name = "TestImgui"; src = ./.; inherit imgui; nativeBuildInputs = with pkgs; [ clang ]; buildInputs = with pkgs; [ glfw glew ]; buildPhase = '' clang++ \ modules/GUImodules/TestImgui/src/*.cpp \ $imgui/backends/imgui_impl_glfw.cpp \ $imgui/backends/imgui_impl_opengl3.cpp \ $imgui/*.cpp \ include/utils/App/App.cpp \ include/utils/Renderer/*.cpp \ include/utils/Window/*.cpp \ -DRENDERER_OPENGL \ -DWINDOW_GLFW \ -fpic -shared \ -I src -I include -I $imgui \ -lGL -lglfw -lGLEW \ -Wall \ -o $name ''; installPhase = '' mkdir -p $out/bin cp $name $out/bin ''; }; TestClay = pkgs.stdenvNoCC.mkDerivation { name = "TestClay"; src = ./.; inherit clay; nativeBuildInputs = with pkgs; [ clang ]; buildPhase = '' clang++ \ modules/TestClay/src/*.cpp src/App.cpp \ -fpic -shared \ -I src -I include \ -DRENDERER_OPENGL \ -DWINDOW_GLFW \ -Wall \ -o $name ''; installPhase = '' mkdir -p $out/bin cp $name $out/bin ''; }; MainGUI = pkgs.stdenvNoCC.mkDerivation { name = "MainGUI"; src = ./.; inherit imgui; nativeBuildInputs = with pkgs; [ clang ]; buildPhase = '' clang++ \ modules/MainGUI/src/*.cpp src/App.cpp \ -fpic -shared \ -I src -I include \ -Wall \ -o $name ''; installPhase = '' mkdir -p $out/bin cp $name $out/bin ''; }; packages.${system}.default = self.Archimedes; apps.${system}.default = { type = "app"; program = "${self.Archimedes.examples.minimal}/bin/Archimedes"; }; }; }