{ inputs = { utils.url = "github:numtide/flake-utils"; }; outputs = { self, nixpkgs, utils, ... }: utils.lib.eachDefaultSystem (system: let pkgs = nixpkgs.legacyPackages."${system}"; nativeBuildInputs = with pkgs; [ flex bison ]; buildScript = pkgs.writeScriptBin "build-script" '' set -e prog_name="$1" outdir="outputs/$prog_name" mkdir -p "$outdir" ${pkgs.flex}/bin/flex -o "$outdir"/lex.yy.cc "$prog_name"/main.l ${pkgs.gcc}/bin/gcc "$outdir"/lex.yy.cc -o "$outdir"/exec ./"$outdir"/exec < "$prog_name"/input rm -r "outputs"/* ''; in rec { devShell = pkgs.mkShell { nativeBuildInputs = nativeBuildInputs ++ (with pkgs; [ gcc ]); }; defaultApp = { type = "app"; program = "${buildScript}/bin/build-script"; }; }); }