{ inputs = { nixpkgs.url = github:nixos/nixpkgs/nixpkgs-unstable; flake-utils.url = github:numtide/flake-utils; nix-filter.url = github:numtide/nix-filter; language-c = { url = github:kalhauge/language-c; flake = false; }; }; outputs = { self, nixpkgs, flake-utils, nix-filter, ... } @ inputs: let load = p: n: { "${n}" = p.callCabal2nixWithOptions n (nix-filter.lib {root = "${self}/${n}";}) "" {}; }; packages = final: p: { "language-c" = final.haskell.lib.overrideCabal (p.callCabal2nixWithOptions "language-c" inputs.language-c "" {}) { doCheck = false; }; # "hspec" = p.hspec_2_11_7; # "hspec-discover" = p.hspec-discover_2_11_7; # "hspec-core" = p.hspec-core_2_11_7; # "hspec-api" = final.haskell.lib.overrideCabal (p.hspec-api) {doCheck = false;}; # "tasty-hspec" = p.tasty-hspec_1_2_0_4; } // load p "rtree" // load p "rtree-c"; overlays = final: prev: { haskellPackages = prev.haskellPackages.extend (p: _: packages final p); }; in { overlays.default = overlays; } // flake-utils.lib.eachDefaultSystem (system: let hpkgs = (import nixpkgs { inherit system; overlays = [overlays]; }) .haskellPackages; in rec { packages = { default = hpkgs.rtree-c; rtree = hpkgs.rtree; rtree-c = hpkgs.rtree-c; }; devShells = let nativeBuildInputs = with hpkgs; [ cabal-install ghcid haskell-language-server hpack fourmolu hspec-golden ]; withHoogle = true; in { default = hpkgs.shellFor { name = "rtree-shells"; packages = p: [p.rtree p.rtree-c]; doBenchmark = true; inherit nativeBuildInputs withHoogle; }; }; }); }