packages feed

cloudy-0.1.0.0: nix/overlay.nix

final: prev:

let
  mkCloudy = final: hfinal:
    let
      filesToIgnore = [
        ".git"
        ".github"
        ".stack-work"
        ".travis.yml"
        "cabal.project"
        "default.nix"
        "flake.lock"
        "flake.nix"
        "nix"
        "result"
        "shell.nix"
        "stack-nightly.yaml"
        "stack.yaml"
      ];

      src =
        builtins.path {
          name = "cloudy-src";
          path = ./..;
          filter = path: type:
            with final.lib;
            ! elem (baseNameOf path) filesToIgnore &&
            ! any (flip hasPrefix (baseNameOf path)) [ "dist" ".ghc" ];
        };

      extraCabal2nixOptions = "";
    in
    hfinal.callCabal2nixWithOptions "cloudy" src extraCabal2nixOptions {};
in
{
  ###############################
  ## Haskell package overrides ##
  ###############################

  cloudy-haskell =
    let
      myHaskellOverride = oldAttrs: {
        overrides =
          final.lib.composeExtensions
            (oldAttrs.overrides or (_: _: {}))
            (hfinal: hprev: {
              cloudy = mkCloudy final hfinal;
            });
      };
    in
    prev.haskell // {
      packages = prev.haskell.packages // {
        ${final.cloudy-ghc-version} =
          prev.haskell.packages.${final.cloudy-ghc-version}.override
            myHaskellOverride;

        native-bignum = prev.haskell.packages.native-bignum // {
          ${final.cloudy-static-ghc-version} =
            prev.haskell.packages.native-bignum.${final.cloudy-static-ghc-version}.override
              myHaskellOverride;
        };
      };
    };

  cloudy-ghc-version-short = "966";

  cloudy-ghc-version = "ghc" + final.cloudy-ghc-version-short;

  cloudy-haskell-pkg-set = final.cloudy-haskell.packages.${final.cloudy-ghc-version};

  cloudy = final.cloudy-haskell-pkg-set.cloudy;

  cloudy-just-exe =
    final.lib.pipe
      final.cloudy
      [
        ( final.haskell.lib.compose.overrideCabal (oldAttrs: {
            postInstall = ''
                export HOME=$TMPDIR
              '' + (oldAttrs.postInstall or "");
          })
        )
        (final.cloudy-haskell-pkg-set.generateOptparseApplicativeCompletions ["cloudy"])
        final.haskell.lib.justStaticExecutables
      ];

  cloudy-shell = final.cloudy-haskell-pkg-set.shellFor {
    packages = hpkgs: [ hpkgs.cloudy ];
  };

  my-haskell-language-server =
    final.haskell-language-server.override {
      supportedGhcVersions = [ final.cloudy-ghc-version-short ];
    };

  dev-shell = final.mkShell {
    nativeBuildInputs = [
      final.cabal-install
      final.my-haskell-language-server
      final.sqlite-interactive
    ];
    inputsFrom = [
      final.cloudy-shell
    ];
    # These environment variables are important. Without these,
    # doctest doesn't pick up nix's version of ghc, and will fail
    # claiming it can't find your dependencies
    shellHook = ''
      export NIX_GHC="${final.cloudy-shell.NIX_GHC}"
      export NIX_GHC_LIBDIR="${final.cloudy-shell.NIX_GHC_LIBDIR}"
    '';
  };

  ##############################
  ## Statically-linked builds ##
  ##############################

  # Static builds only work on ghc94, not ghc96+ :-(
  cloudy-static-ghc-version-short = "948";

  cloudy-static-ghc-version = "ghc" + final.cloudy-static-ghc-version-short;

  cloudy-static-haskell-pkg-set = final.pkgsStatic.cloudy-haskell.packages.native-bignum.${final.cloudy-static-ghc-version};

  cloudy-static = final.cloudy-static-haskell-pkg-set.cloudy;

  cloudy-static-just-exe =
    final.lib.pipe
      final.cloudy-static
      [
        ( final.haskell.lib.compose.overrideCabal (oldAttrs: {
            postInstall = ''
                export HOME=$TMPDIR
              '' + (oldAttrs.postInstall or "");
          })
        )
        (final.cloudy-static-haskell-pkg-set.generateOptparseApplicativeCompletions ["cloudy"])
        final.haskell.lib.justStaticExecutables
      ];
}