Skip to content
Snippets Groups Projects
flake.nix 3.1 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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
    }