{ description = "a dumb minecraft in c++ and opengl."; inputs = { nixpkgs.url = "nixpkgs/nixos-23.11"; }; outputs = { self, nixpkgs }: let allSystems = [ "x86_64-linux" "x86_64-darwin" ]; pkgsForSystem = system: nixpkgs.legacyPackages.${system}; forAllSystems = f: nixpkgs.lib.genAttrs allSystems (system: f { inherit system; pkgs = pkgsForSystem system; }); in { packages = forAllSystems ({ system, pkgs }: { default = pkgs.callPackage ./. { inherit (pkgs.darwin.apple_sdk.frameworks) Cocoa OpenGL; glfw = self.packages.${system}.glfw-static; glew = self.packages.${system}.glew-static; }; # NOTE: GLFW depends on OpenSSL and coreutils, which are very # large dependencies and have to be rebuilt from source to be able # to be linked statically. Maybe there is a way to avoid this? glfw-static = pkgs.glfw.overrideAttrs { pname = "glfw-static"; cmakeFlags = [ "-DBUILD_SHARED_LIBS=OFF" ]; }; glew-static = pkgs.glew.overrideAttrs { pname = "glew-static"; cmakeFlags = [ "-DBUILD_SHARED_LIBS=OFF" ]; }; }); devShells = forAllSystems ({ system, pkgs }: let inherit (pkgs) lib stdenv; darwinFrameworks = pkgs.darwin.apple_sdk.frameworks; in { default = pkgs.mkShell { buildInputs = (with pkgs; [ pkg-config ninja cmake meson lldb ]) ++ (with self.packages.${system}; [ glfw-static glew-static ]) ++ lib.optionals stdenv.isDarwin (with darwinFrameworks; [ Cocoa OpenGL ]) ++ lib.optionals stdenv.isLinux (with pkgs.xorg; [ libX11 libXau libXdmcp ]); }; }); }; }