diff --git a/pkgs/tools/text/vale/default.nix b/pkgs/tools/text/vale/default.nix index 9fa3c12ccc88..5bb73a50f9e6 100644 --- a/pkgs/tools/text/vale/default.nix +++ b/pkgs/tools/text/vale/default.nix @@ -1,11 +1,18 @@ -{ lib, buildGoModule, fetchFromGitHub }: +{ lib +, buildGoModule +, fetchFromGitHub +, makeBinaryWrapper +, runCommand +, symlinkJoin +, vale +, valeStyles +}: buildGoModule rec { pname = "vale"; version = "3.4.1"; subPackages = [ "cmd/vale" ]; - outputs = [ "out" "data" ]; src = fetchFromGitHub { owner = "errata-ai"; @@ -16,18 +23,29 @@ buildGoModule rec { vendorHash = "sha256-HMzFLSmO6sBDNU89UoIvHcPPd3ubpti2ii4sFMKUDmI="; - postInstall = '' - mkdir -p $data/share/vale - cp -r testdata/styles $data/share/vale - ''; - ldflags = [ "-s" "-w" "-X main.version=${version}" ]; # Tests require network access doCheck = false; + passthru.withStyles = selector: symlinkJoin { + name = "vale-with-styles-${vale.version}"; + paths = [ vale ] ++ selector valeStyles; + nativeBuildInputs = [ makeBinaryWrapper ]; + postBuild = '' + wrapProgram "$out/bin/vale" \ + --set VALE_STYLES_PATH "$out/share/vale/styles/" + ''; + }; + meta = with lib; { description = "A syntax-aware linter for prose built with speed and extensibility in mind"; + longDescription = '' + Vale in Nixpkgs offers the helper `.withStyles` allow you to install it + predefined styles: + + vale.withStyles (s: [ s.alex s.google ]) + ''; homepage = "https://vale.sh/"; changelog = "https://github.com/errata-ai/vale/releases/tag/v${version}"; mainProgram = "vale"; diff --git a/pkgs/tools/text/vale/styles.nix b/pkgs/tools/text/vale/styles.nix new file mode 100644 index 000000000000..f2513289a548 --- /dev/null +++ b/pkgs/tools/text/vale/styles.nix @@ -0,0 +1,144 @@ +{ lib, stdenvNoCC, fetchFromGitHub, fetchzip, nix-update-script }: + +let + buildStyle = + { name + , stylePath ? name + , ... + }@args: + stdenvNoCC.mkDerivation ({ + pname = "vale-style-${lib.toLower name}"; + + dontConfigure = true; + dontBuild = true; + doCheck = false; + dontFixup = true; + + installPhase = '' + runHook preInstall + mkdir -p $out/share/vale/styles + cp -R ${stylePath} "$out/share/vale/styles/${name}" + runHook postInstall + ''; + + passthru.updateScript = nix-update-script { }; + + meta = { + platforms = lib.platforms.all; + maintainers = with lib.maintainers; [ katexochen ]; + } // (args.meta or { }); + } // removeAttrs args [ "meta" "name" ]); +in +{ + alex = buildStyle rec { + name = "alex"; + version = "0.2.1"; + src = fetchFromGitHub { + owner = "errata-ai"; + repo = "alex"; + rev = "v${version}"; + hash = "sha256-xNF7se2FwKgNe5KYx/zvGWpIwBsBADYGH4JV1lUww+Q="; + }; + meta = { + description = "A Vale-compatible implementation of the guidelines enforced by the alex linter"; + homepage = "https://github.com/errata-ai/alex"; + license = lib.licenses.mit; + }; + }; + + google = buildStyle rec { + name = "Google"; + version = "0.6.0"; + src = fetchFromGitHub { + owner = "errata-ai"; + repo = "Google"; + rev = "v${version}"; + hash = "sha256-TQS/hgS6tEWPSuZpEbX65MdYSE/+HJVcnzIuQbhIG2M="; + }; + meta = { + description = "A Vale-compatible implementation of the Google Developer Documentation Style Guide"; + homepage = "https://github.com/errata-ai/Google"; + license = lib.licenses.mit; + }; + }; + + joblint = buildStyle rec { + name = "Joblint"; + version = "0.4.1"; + src = fetchFromGitHub { + owner = "errata-ai"; + repo = "Joblint"; + rev = "v${version}"; + hash = "sha256-zRz5ThOg5RLTZj3dYPe0PDvOF5DjO31lduSpi2Us87U="; + }; + meta = { + description = "A Vale-compatible implementation of the Joblint linter"; + homepage = "https://github.com/errata-ai/Joblint"; + license = lib.licenses.mit; + }; + }; + + microsoft = buildStyle rec { + name = "Microsoft"; + version = "0.14.0"; + src = fetchFromGitHub { + owner = "errata-ai"; + repo = "Microsoft"; + rev = "v${version}"; + hash = "sha256-22rGNLZOsWYQ+H3CcM2b1zOXV3kNPcgYqDpaCg1iv9o="; + }; + meta = { + description = "A Vale-compatible implementation of the Microsoft Writing Style Guide"; + homepage = "https://github.com/errata-ai/Microsoft"; + license = lib.licenses.mit; + }; + }; + + proselint = buildStyle rec { + name = "proselint"; + version = "0.3.3"; + src = fetchFromGitHub { + owner = "errata-ai"; + repo = "proselint"; + rev = "v${version}"; + hash = "sha256-faeWr1bRhnKsycJY89WqnRv8qIowUmz3EQvDyjtl63w="; + }; + meta = { + description = "A Vale-compatible implementation of Python's proselint linter"; + homepage = "https://github.com/errata-ai/proselint"; + license = lib.licenses.bsd3; + }; + }; + + readability = buildStyle rec { + name = "Readability"; + version = "0.1.1"; + src = fetchFromGitHub { + owner = "errata-ai"; + repo = "readability"; + rev = "v${version}"; + hash = "sha256-5Y9v8QsZjC2w3/pGIcL5nBdhpogyJznO5IFa0s8VOOI="; + }; + meta = { + description = "Vale-compatible implementations of many popular \"readability\" metrics"; + homepage = "https://github.com/errata-ai/readability"; + license = lib.licenses.mit; + }; + }; + + write-good = buildStyle rec { + name = "write-good"; + version = "0.4.0"; + src = fetchFromGitHub { + owner = "errata-ai"; + repo = "write-good"; + rev = "v${version}"; + hash = "sha256-KQzY6MeHV/owPVmUAfzGUO0HmFPkD7wdQqOvBkipwP8="; + }; + meta = { + description = "A Vale-compatible implementation of the write-good linter"; + homepage = "https://github.com/errata-ai/write-good"; + license = lib.licenses.mit; + }; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 889d9b3cd0cf..040fa763bf61 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -24917,6 +24917,8 @@ with pkgs; vale = callPackage ../tools/text/vale { }; + valeStyles = recurseIntoAttrs (callPackages ../tools/text/vale/styles.nix { }); + valhalla = callPackage ../development/libraries/valhalla { boost = boost.override { enablePython = true; python = python3; }; protobuf = protobuf_21.override {