{ inputs = { nixpkgs.url = "nixpkgs/nixpkgs-unstable"; }; outputs = {nixpkgs, ...}: let system = "x86_64-linux"; pkgs = nixpkgs.legacyPackages.${system}; debugGhcOptions = pkgs.lib.concatStringsSep " " (debugGhcFlags ++ commonGhcFlags); debugGhcFlags = [ "-O0" "-Wall" "-Widentities" "-Wincomplete-record-updates" "-Wincomplete-uni-patterns" # "-Wmissing-export-lists" "-Wmissing-home-modules" "-Wpartial-fields" "-Wredundant-constraints" "-threaded" "-rtsopts" "-with-rtsopts=-N" "-main-is Game" ]; haddockOptions = pkgs.lib.concatStringsSep " " haddockFlags; haddockFlags = [ "--html" "--odir docs" "--optghc=-i./src" "src/Game.hs" ]; releaseGhcOptions = pkgs.lib.concatStringsSep " " (releaseGhcFlags ++ commonGhcFlags); releaseGhcFlags = [ "-O2" "-threaded" "-rtsopts" "-with-rtsopts=-N" "-main-is Game" ]; noHaddockOptions = ""; commonGhcFlags = [ "-i./src" ]; ghcPackages = p: [ p.GLFW-b p.linear p.OpenGL ]; in { packages.${system} = { debug = pkgs.callPackage ./package.nix { ghcOptions = debugGhcOptions; haddockOptions = noHaddockOptions; inherit ghcPackages; }; release = pkgs.callPackage ./package.nix { ghcOptions = releaseGhcOptions; haddockOptions = noHaddockOptions; inherit ghcPackages; }; docs = pkgs.callPackage ./package.nix { ghcOptions = "--version"; inherit haddockOptions; inherit ghcPackages; }; default = pkgs.callPackage ./package.nix { ghcOptions = releaseGhcOptions; inherit haddockOptions; inherit ghcPackages; }; }; }; }