packages feed

shebanger-1.0.0.0: nix/overlay.nix

final: prev: {

  ###############################
  ## Haskell package overrides ##
  ###############################

  myhaskell =
    let
      myHaskellOverride = oldAttrs: {
        overrides =
          final.lib.composeExtensions
            (oldAttrs.overrides or (_: _: {}))
            (hfinal: hprev: {
              shebanger =
                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 = "shebanger-src";
                      path = ./..;
                      filter = path: type:
                        with final.lib;
                        ! elem (baseNameOf path) filesToIgnore &&
                        ! any (flip hasPrefix (baseNameOf path)) [ "dist" ".ghc" ];
                    };

                  extraCabal2nixOptions = "";
                in
                hfinal.callCabal2nixWithOptions "shebanger" src extraCabal2nixOptions {};
            });
      };
    in
    prev.haskell // {
      packages = prev.haskell.packages // {
        ${final.shebanger-ghc-version} =
          prev.haskell.packages.${final.shebanger-ghc-version}.override
            myHaskellOverride;

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

  shebanger-ghc-version-short = "948";

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

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

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

  shebanger-just-exe =
    final.lib.pipe
      final.shebanger
      [
        # TODO: No optparse-applicative yet
        # (final.shebanger-haskell-pkg-set.generateOptparseApplicativeCompletions ["shebanger"])
        final.haskell.lib.justStaticExecutables
      ];

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

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

  dev-shell = final.mkShell {
    nativeBuildInputs = [
      final.cabal-install
      final.my-haskell-language-server
    ];
    inputsFrom = [
      final.shebanger-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.shebanger-shell.NIX_GHC}"
      export NIX_GHC_LIBDIR="${final.shebanger-shell.NIX_GHC_LIBDIR}"
    '';
  };

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

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

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

  shebanger-static-just-exe =
    final.lib.pipe
      final.shebanger-static
      [
        (final.shebanger-static-haskell-pkg-set.generateOptparseApplicativeCompletions ["shebanger"])
        final.haskell.lib.justStaticExecutables
      ];
}