{ 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.stdenv else pkgs.llvmPackages_18.stdenv; sources = import ./_sources/generated.nix { inherit (pkgs) fetchFromGitHub fetchgit fetchurl dockerTools; }; mkPkg = name: pkgs.pkgsStatic.${name}.overrideAttrs { inherit (sources.${name}) pname version src; }; fmt = mkPkg "fmt"; deps = with pkgs; [ fmt glfw glm ] ++ lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.AppKit darwin.apple_sdk.frameworks.Cocoa darwin.apple_sdk.frameworks.Metal darwin.apple_sdk.frameworks.QuartzCore ]; in with pkgs; { 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.clang-tools_18; }; }; }; devShell = mkShell.override {inherit stdenv;} { packages = [ alejandra bear llvmPackages_18.clang-tools 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/graphics-test") ] ++ deps; shellHook = lib.optionals stdenv.isDarwin '' export PATH="${llvmPackages_18.clang-tools}/bin:$PATH" export MOLTENVK_LIBRARY_PATH="${darwin.moltenvk}/lib"; export VULKAN_INCLUDE_DIRS="${darwin.moltenvk.dev}/include:${vulkan-headers}/include"; export VK_ICD_FILENAMES="${darwin.moltenvk}/share/vulkan/icd.d/MoltenVK_icd.json" export VK_LAYER_PATH="${./explicit_layer.d}"; ''; name = "C++"; }; } ); }