Skip to content
Snippets Groups Projects
flake.nix 3.1 KiB
Newer Older
chrg's avatar
chrg committed
{
  inputs = {
chrg's avatar
chrg committed
    nix-filter.url = "github:numtide/nix-filter";
chrg's avatar
chrg committed
    language-c = {
chrg's avatar
chrg committed
      url = "github:kalhauge/language-c";
chrg's avatar
chrg committed
      flake = false;
    };
chrg's avatar
chrg committed
    hspec-glitter.url = "github:kalhauge/hspec-glitter";
chrg's avatar
chrg committed
  };
chrg's avatar
chrg committed
  outputs = {
    self,
    nixpkgs,
    flake-utils,
chrg's avatar
chrg committed
    nix-filter,
chrg's avatar
chrg committed
    ...
  } @ inputs: let
chrg's avatar
chrg committed
    load = p: n:
      p.callCabal2nixWithOptions n (nix-filter.lib {root = "${self}/${n}";}) "" {};

chrg's avatar
chrg committed
    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;
chrg's avatar
chrg committed
    };
  in
chrg's avatar
chrg committed
    {
      overlays.default = overlay;
    }
    // flake-utils.lib.eachDefaultSystem
chrg's avatar
chrg committed
    (system: let
chrg's avatar
chrg committed
      pkgs = import nixpkgs {
        inherit system;
chrg's avatar
chrg committed
        overlays = [overlay];
chrg's avatar
chrg committed
      };
chrg's avatar
chrg committed
    in {
chrg's avatar
chrg committed
      packages = {
chrg's avatar
chrg committed
        default = pkgs.rtree-c;
        rtree = pkgs.rtree;
        rtree-c = pkgs.rtree-c;
chrg's avatar
chrg committed
      };
      devShells = let
chrg's avatar
chrg committed
        nativeBuildInputs = with pkgs.haskellPackages; [
chrg's avatar
chrg committed
          cabal-install
          ghcid
          haskell-language-server
          hpack
          fourmolu
        ];
        withHoogle = true;
chrg's avatar
chrg committed
        profiles = pkgs.haskellPackages.override (hpArgs: {
chrg's avatar
chrg committed
          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;
                    }
                  );
              };
            }
          );
        });
chrg's avatar
chrg committed
      in {
chrg's avatar
chrg committed
        rtree = pkgs.haskellPackages.rtree;
chrg's avatar
chrg committed
        default =
chrg's avatar
chrg committed
          profiles.shellFor
chrg's avatar
chrg committed
          {
chrg's avatar
chrg committed
            name = "rtree-shells";
            packages = p: [
chrg's avatar
chrg committed
              (pkgs.haskell.lib.doCheck p.rtree)
              (pkgs.haskell.lib.doCheck p.rtree-c)
chrg's avatar
chrg committed
            doBenchmark = true;
chrg's avatar
chrg committed
            genericBuilderArgsModifier = args:
              args
              // {
                doCheck = true;
                doBenchmark = true;
              };
chrg's avatar
chrg committed
            inherit nativeBuildInputs withHoogle;
chrg's avatar
chrg committed
          };
chrg's avatar
chrg committed
      };
    });
chrg's avatar
chrg committed
}