diff --git a/pkgs/development/python-modules/mdformat/default.nix b/pkgs/development/python-modules/mdformat/default.nix index ed6fdfa95f70..2891cd430803 100644 --- a/pkgs/development/python-modules/mdformat/default.nix +++ b/pkgs/development/python-modules/mdformat/default.nix @@ -1,63 +1,100 @@ { lib +, buildPythonApplication , buildPythonPackage , fetchFromGitHub , importlib-metadata +, makeWrapper , markdown-it-py , poetry-core , pytestCheckHook +, python3 , pythonOlder , setuptools , tomli , typing-extensions }: -buildPythonPackage rec { - pname = "mdformat"; - version = "0.7.16"; - format = "pyproject"; +let + withPlugins = plugins: buildPythonApplication { + pname = "${package.pname}"; + inherit (package) version; + format = "other"; - disabled = pythonOlder "3.7"; + disabled = pythonOlder "3.7"; - src = fetchFromGitHub { - owner = "executablebooks"; - repo = pname; - rev = version; - hash = "sha256-6MWUkvZp5CYUWsbMGXM2gudjn5075j5FIuaNnCrgRNs="; + dontUnpack = true; + dontBuild = true; + doCheck = false; + + nativeBuildInputs = [ + makeWrapper + ]; + + installPhase = '' + makeWrapper ${package}/bin/mdformat $out/bin/mdformat \ + --prefix PYTHONPATH : "${package}/${python3.sitePackages}:$PYTHONPATH" + ln -sfv ${package}/lib $out/lib + ''; + + propagatedBuildInputs = package.propagatedBuildInputs ++ plugins; + + passthru = package.passthru // { + withPlugins = morePlugins: withPlugins (morePlugins ++ plugins); + }; + + meta.mainProgram = "mdformat"; }; - nativeBuildInputs = [ - poetry-core - setuptools - ]; + package = buildPythonPackage rec { + pname = "mdformat"; + version = "0.7.16"; + format = "pyproject"; - propagatedBuildInputs = [ - markdown-it-py - tomli - ] ++ lib.optionals (pythonOlder "3.10") [ - importlib-metadata - ] ++ lib.optionals (pythonOlder "3.7") [ - typing-extensions - ]; + disabled = pythonOlder "3.7"; - nativeCheckInputs = [ - pytestCheckHook - ]; + src = fetchFromGitHub { + owner = "executablebooks"; + repo = pname; + rev = version; + hash = "sha256-6MWUkvZp5CYUWsbMGXM2gudjn5075j5FIuaNnCrgRNs="; + }; - disabledTests = [ - # AssertionError - "test_no_codeblock_trailing_newline" - # Issue with upper/lower case - "default_style.md-options0" - ]; + nativeBuildInputs = [ + poetry-core + setuptools + ]; - pythonImportsCheck = [ - "mdformat" - ]; + propagatedBuildInputs = [ + markdown-it-py + tomli + ] ++ lib.optionals (pythonOlder "3.10") [ + importlib-metadata + ] ++ lib.optionals (pythonOlder "3.7") [ + typing-extensions + ]; - meta = with lib; { - description = "CommonMark compliant Markdown formatter"; - homepage = "https://mdformat.rtfd.io/"; - license = with licenses; [ mit ]; - maintainers = with maintainers; [ fab ]; + nativeCheckInputs = [ + pytestCheckHook + ]; + + disabledTests = [ + # AssertionError + "test_no_codeblock_trailing_newline" + # Issue with upper/lower case + "default_style.md-options0" + ]; + + pythonImportsCheck = [ + "mdformat" + ]; + + passthru = {inherit withPlugins;}; + + meta = with lib; { + description = "CommonMark compliant Markdown formatter"; + homepage = "https://mdformat.rtfd.io/"; + license = with licenses; [ mit ]; + maintainers = with maintainers; [ fab aldoborrero ]; + }; }; -} +in package