···
4
+
Prettier with plugins and Vim Home Manager configuration
7
+
pkgs.prettier.override {
8
+
plugins = with pkgs.nodePackages; [
···
30
+
exportRelativePathOf (builtins.fromJSON "./package.json")
32
+
lib/node_modules/prettier-plugin-toml/./lib/index.cjs
38
+
exportRelativePathOf :: AttrSet => String
44
+
: Attribute set with shape similar to `package.json` file
47
+
exportRelativePathOf =
49
+
nodeExportAttrAddresses = [
68
+
addresses: default: attrs:
69
+
if builtins.length addresses == 0 then
73
+
addressNext = builtins.head addresses;
74
+
addressesRemaning = lib.lists.drop 1 addresses;
76
+
lib.attrByPath addressNext (recAttrByPath addressesRemaning default attrs) attrs;
79
+
recAttrByPath nodeExportAttrAddresses (builtins.head (
80
+
lib.attrByPath [ "prettier" "plugins" ] [ "null" ] packageJsonAttrs
81
+
)) packageJsonAttrs;
87
+
nodeEntryPointOf pkgs.nodePackages.prettier-plugin-toml
89
+
/nix/store/<NAR_HASH>-prettier-plugin-toml-<VERSION>/lib/node_modules/prettier-plugin-toml/./lib/index.cjs
95
+
nodeEntryPointOf :: AttrSet => String
101
+
: Attribute set with `.packageName` and `.outPath` defined
106
+
pluginDir = "${plugin.outPath}/lib/node_modules/${plugin.packageName}";
108
+
packageJsonAttrs = builtins.fromJSON (builtins.readFile "${pluginDir}/package.json");
110
+
exportPath = exportRelativePathOf packageJsonAttrs;
112
+
pathAbsoluteNaive = "${pluginDir}/${exportPath}";
113
+
pathAbsoluteFallback = "${pluginDir}/${exportPath}.js";
115
+
if builtins.pathExists pathAbsoluteNaive then
117
+
else if builtins.pathExists pathAbsoluteFallback then
118
+
pathAbsoluteFallback
121
+
${plugin.packageName}: error context, tried finding entry point under;
122
+
pathAbsoluteNaive -> ${pathAbsoluteNaive}
123
+
pathAbsoluteFallback -> ${pathAbsoluteFallback}
124
+
'' throw ''${plugin.packageName}: does not provide parse-able entry point'';
stdenv.mkDerivation (finalAttrs: {
···
makeBinaryWrapper "${lib.getExe nodejs}" "$out/bin/prettier" \
--add-flags "$out/bin/prettier.cjs"
161
+
+ lib.optionalString (builtins.length plugins > 0) ''
162
+
wrapProgram $out/bin/prettier --add-flags "${
163
+
builtins.concatStringsSep " " (lib.map (plugin: "--plugin=${nodeEntryPointOf plugin}") plugins)
···
homepage = "https://prettier.io/";
license = lib.licenses.mit;
mainProgram = "prettier";
60
-
maintainers = with lib.maintainers; [ l0b0 ];
182
+
maintainers = with lib.maintainers; [