summary refs log tree commit diff
path: root/pkgs/applications/editors/vim/plugins/build-vim-plugin.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/applications/editors/vim/plugins/build-vim-plugin.nix')
-rw-r--r--pkgs/applications/editors/vim/plugins/build-vim-plugin.nix52
1 files changed, 52 insertions, 0 deletions
diff --git a/pkgs/applications/editors/vim/plugins/build-vim-plugin.nix b/pkgs/applications/editors/vim/plugins/build-vim-plugin.nix
new file mode 100644
index 00000000000..3d36edb3232
--- /dev/null
+++ b/pkgs/applications/editors/vim/plugins/build-vim-plugin.nix
@@ -0,0 +1,52 @@
+{ lib, stdenv
+, rtpPath
+, vim
+, vimGenDocHook
+}:
+
+rec {
+  addRtp = path: attrs: derivation:
+    derivation // { rtp = "${derivation}"; } // {
+      overrideAttrs = f: buildVimPlugin (attrs // f attrs);
+    };
+
+  buildVimPlugin = attrs@{
+    name ? "${attrs.pname}-${attrs.version}",
+    namePrefix ? "vimplugin-",
+    src,
+    unpackPhase ? "",
+    configurePhase ? "",
+    buildPhase ? "",
+    preInstall ? "",
+    postInstall ? "",
+    path ? ".",
+    addonInfo ? null,
+    ...
+  }:
+    addRtp "${rtpPath}/${path}" attrs (stdenv.mkDerivation (attrs // {
+      name = namePrefix + name;
+
+      # dont move the doc folder since vim expects it
+      forceShare= [ "man" "info" ];
+
+      nativeBuildInputs = attrs.nativeBuildInputs or []
+      ++ lib.optional (stdenv.hostPlatform == stdenv.buildPlatform) vimGenDocHook;
+      inherit unpackPhase configurePhase buildPhase addonInfo preInstall postInstall;
+
+      installPhase = ''
+        runHook preInstall
+
+        target=$out/${rtpPath}/${path}
+        mkdir -p $out/${rtpPath}
+        cp -r . $target
+
+        runHook postInstall
+      '';
+    }));
+
+  buildVimPluginFrom2Nix = attrs: buildVimPlugin ({
+    # vim plugins may override this
+    buildPhase = ":";
+    configurePhase =":";
+  } // attrs);
+}