{ description = "game engine"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; self.submodules = true; }; outputs = { nixpkgs, ... }: let system = "x86_64-linux"; pkgs = nixpkgs.legacyPackages.${system}; staticPkgs = pkgs.pkgsStatic; mruby = staticPkgs.stdenv.mkDerivation { pname = "mruby"; version = "0.0.1"; src = staticPkgs.lib.cleanSourceWith { src = ./libs; name = "mruby-src"; }; patches = [ ./libs/changes.patch ]; nativeBuildInputs = with pkgs; [ ruby gnumake clang ]; buildPhase = '' cd mruby rake ''; installPhase = '' mkdir -p $out cp -r build/host/lib $out/lib cp -r build/host/include $out/include mkdir -p $out/bin cp build/host/bin/mrbc $out/bin/mrbc ''; }; game-engine = staticPkgs.stdenv.mkDerivation { pname = "game-engine"; version = "0.1.0"; src = ./.; nativeBuildInputs = with pkgs; [ clang pkg-config gnumake bear ccache xxd ]; buildInputs = [ pkgs.sdl3 pkgs.sdl3-ttf pkgs.sdl3-image mruby ]; buildPhase = '' make \ MRBC=${mruby}/bin/mrbc \ MRUBY_INCLUDE=${mruby}/include \ MRUBY_LIB=${mruby}/lib/libmruby.a ''; installPhase = '' mkdir -p $out/bin cp game-engine $out/bin/game-engine ''; CC = "${pkgs.clang}/bin/clang"; CXX = "${pkgs.clang}/bin/clang++"; }; in { packages.${system} = { default = game-engine; game-engine = game-engine; mruby = mruby; }; devShells.${system}.default = pkgs.mkShell { inputsFrom = [ game-engine ]; packages = [ pkgs.clang-tools pkgs.clang pkgs.ccache pkgs.pkg-config pkgs.gnumake pkgs.bear pkgs.ruby pkgs.xxd pkgs.sdl3 pkgs.sdl3-ttf pkgs.sdl3-image ]; shellHook = '' export CC=clang export CXX=clang++ export LD=clang export MRBC=${mruby}/bin/mrbc export MRUBY_INCLUDE=${mruby}/include export MRUBY_LIB=${mruby}/lib/libmruby.a ''; }; }; }