{ description = "Image Processor API"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; # Ghostty uses 'systems' to be cleaner, we can do similar or stick to a list }; # This mirrors the Ghostty 'nixConfig' to ensure settings stay local to the project nixConfig = { extra-substituters = ["https://cache.nixos.org"]; extra-trusted-public-keys = ["cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="]; }; outputs = { self, nixpkgs, }: let supportedSystems = ["aarch64-darwin" "x86_64-darwin" "aarch64-linux" "x86_64-linux"]; # A helper to generate outputs for all systems forAllSystems = f: nixpkgs.lib.genAttrs supportedSystems (system: f (import nixpkgs {inherit system;})); in { # 1. THE PACKAGE (What you 'pull' into other projects) packages = forAllSystems (pkgs: { default = pkgs.stdenv.mkDerivation { pname = "image_processor"; version = "0.1.0"; src = ./.; nativeBuildInputs = [pkgs.cmake pkgs.pkg-config]; buildInputs = [pkgs.libjpeg_turbo]; # Ensure headers are found in the dev environment propagatedBuildInputs = [pkgs.libjpeg_turbo]; }; }); # 2. THE DEV SHELL (What 'direnv' uses) devShells = forAllSystems (pkgs: { default = pkgs.mkShell { # Use 'inputsFrom' so the shell always matches the package inputsFrom = [self.packages.${pkgs.system}.default]; # Add extra dev tools you only want when coding, not building nativeBuildInputs = with pkgs; [ gdb pkg-config ]; shellHook = '' # These exports make sure your C compiler finds the Nix-provided libs export CPATH="${pkgs.libjpeg_turbo.dev}/include:$CPATH" export LIBRARY_PATH="${pkgs.libjpeg_turbo.out}/lib:$LIBRARY_PATH" export PKG_CONFIG_PATH="${pkgs.libjpeg_turbo.dev}/lib/pkgconfig:$PKG_CONFIG_PATH" echo "⚙️ Image Processor API Dev Shell Loaded" ''; }; }); }; }