{ description = "C/C++ environment"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs"; treefmt-nix.url = "github:numtide/treefmt-nix"; utils.url = "github:numtide/flake-utils"; }; outputs = { self, nixpkgs, treefmt-nix, utils, ... }: utils.lib.eachDefaultSystem ( system: let pkgs = import nixpkgs {inherit system;}; stdenv = if pkgs.hostPlatform.isLinux then pkgs.stdenvAdapters.useMoldLinker pkgs.llvmPackages_18.libcxxStdenv else pkgs.llvmPackages_18.libcxxStdenv; sources = import ./_sources/generated.nix { inherit (pkgs) fetchFromGitHub fetchgit fetchurl dockerTools; }; mkPkg = name: pkgs.${name}.overrideAttrs { inherit (sources.${name}) pname version src; }; fmt = mkPkg "fmt"; deps = with pkgs; [ fmt glfw glm vulkan-extension-layer vulkan-memory-allocator vulkan-utility-libraries vulkan-loader vulkan-tools ]; in with pkgs; rec { packages = rec { graphics-test = stdenv.mkDerivation { name = "graphics-test"; version = "0.1.0"; src = self; nativeBuildInputs = [ meson ninja pkg-config ]; buildInputs = deps; configurePhase = '' meson setup build ''; buildPhase = '' meson compile -C build ''; installPhase = '' mkdir -p $out/bin mv build/graphics-test $out/bin/graphics-test ''; }; default = graphics-test; }; formatter = treefmt-nix.lib.mkWrapper pkgs { projectRootFile = "flake.nix"; programs = { alejandra.enable = true; deadnix.enable = true; clang-format = { enable = true; package = pkgs.llvmPackages_18.clang-tools; }; }; }; devShell = mkShell.override {inherit stdenv;} { packages = [ alejandra bear (llvmPackages_18.clang-tools.override {enableLibcxx = true;}) lldb meson ninja nvfetcher pkg-config unzip (writeScriptBin "build" "meson compile -C build") (writeScriptBin "clean" "meson setup build --wipe") (writeScriptBin "reconfigure" "meson setup build --reconfigure") (writeScriptBin "run" "meson compile -C build && build/${packages.default.name}") ] ++ deps; VULKAN_SDK = "${vulkan-headers}"; VK_LAYER_PATH = "${vulkan-validation-layers}/share/vulkan/explicit_layer.d"; shellHook = '' export PATH="${llvmPackages_18.clang-tools.override {enableLibcxx = true;}}/bin:$PATH" ''; name = "C++"; }; } ); }