{ lib, stdenv, fetchFromGitHub, pkg-config, mlton }:

stdenv.mkDerivation rec {
  pname = "smlfmt";
  version = "1.1.0";

  src = fetchFromGitHub {
    owner = "shwestrick";
    repo = pname;
    rev = "v${version}";
    hash = "sha256-qwhYOZrck028NliPDnqFZel3IxopQzouhHq6R7DkfPE=";
  };

  nativeBuildInputs = [ mlton ];

  installPhase = ''
    runHook preInstall
    install -Dm755 -t $out/bin smlfmt
    runHook postInstall
  '';

  meta = {
    description = "Custom parser/auto-formatter for Standard ML";
    mainProgram = "smlfmt";
    longDescription = ''
      A custom parser and code formatter for Standard ML, with helpful error messages.

      Supports SML source files (.sml, .sig, .fun, etc.) as well as MLBasis
      compilation files (.mlb) using MLton conventions, including MLBasis path
      maps.
    '';

    license = lib.licenses.mit;
    maintainers = with lib.maintainers; [ munksgaard ];
    platforms = mlton.meta.platforms;
    homepage = "https://github.com/shwestrick/smlfmt";
  };
}
