{ inputs = { nix-filter.url = "github:numtide/nix-filter"; language-c = { url = "github:kalhauge/language-c"; flake = false; }; hspec-glitter.url = "github:kalhauge/hspec-glitter"; }; outputs = { self, nixpkgs, flake-utils, nix-filter, ... } @ inputs: let load = p: n: p.callCabal2nixWithOptions n (nix-filter.lib {root = "${self}/${n}";}) "" {}; packages = lib: final: prev: { "language-c" = lib.dontCheck (final.callCabal2nixWithOptions "language-c" inputs.language-c "" {}); "hspec-glitter" = final.callCabal2nixWithOptions "hspec-glitter" inputs.hspec-glitter "" {}; "rtree" = lib.dontCheck (load final "rtree"); "rtree-c" = lib.dontCheck (load final "rtree-c"); }; overlay = final: prev: let lib = final.haskell.lib; hpkgs = prev.haskellPackages.override (hpArgs: { overrides = final.lib.composeExtensions (hpArgs.overrides or (_: _: {})) (packages lib); }); in { haskellPackages = hpkgs; rtree-c = lib.justStaticExecutables (hpkgs.rtree-c); rtree = hpkgs.rtree; }; in { overlays.default = overlay; } // flake-utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; overlays = [overlay]; }; in { packages = { default = pkgs.rtree-c; rtree = pkgs.rtree; rtree-c = pkgs.rtree-c; }; devShells = let nativeBuildInputs = with pkgs.haskellPackages; [ cabal-install ghcid haskell-language-server hpack fourmolu ]; withHoogle = true; profiles = pkgs.haskellPackages.override (hpArgs: { overrides = pkgs.lib.composeExtensions (hpArgs.overrides or (_: _: {})) ( _hfinal: hprev: { mkDerivation = args: hprev.mkDerivation ({ doCheck = false; doBenchmark = false; doHoogle = true; doHaddock = true; enableLibraryProfiling = true; enableExecutableProfiling = true; } // args); aeson = hprev.aeson.override { mkDerivation = args: hprev.mkDerivation ( args // { doCheck = false; enableExecutableProfiling = false; } ); }; } ); }); in { rtree = pkgs.haskellPackages.rtree; default = profiles.shellFor { name = "rtree-shells"; packages = p: [ (pkgs.haskell.lib.doCheck p.rtree) (pkgs.haskell.lib.doCheck p.rtree-c) ]; doBenchmark = true; genericBuilderArgsModifier = args: args // { doCheck = true; doBenchmark = true; }; inherit nativeBuildInputs withHoogle; }; }; }); }