summary refs log tree commit diff
path: root/pkgs/misc
diff options
context:
space:
mode:
authorNick Novitski <github@nicknovitski.com>2017-02-22 13:06:34 +1300
committerJörg Thalheim <Mic92@users.noreply.github.com>2017-02-22 01:06:34 +0100
commit7bb0611e2e27b3e5b7db7c93a3635fab5f7d3306 (patch)
treee56282547c34b73163df09a240293f4f3bb52fe8 /pkgs/misc
parent4ecaed783b447e00db1d9ade96400cff707fd1b7 (diff)
downloadnixpkgs-7bb0611e2e27b3e5b7db7c93a3635fab5f7d3306.tar
nixpkgs-7bb0611e2e27b3e5b7db7c93a3635fab5f7d3306.tar.gz
nixpkgs-7bb0611e2e27b3e5b7db7c93a3635fab5f7d3306.tar.bz2
nixpkgs-7bb0611e2e27b3e5b7db7c93a3635fab5f7d3306.tar.lz
nixpkgs-7bb0611e2e27b3e5b7db7c93a3635fab5f7d3306.tar.xz
nixpkgs-7bb0611e2e27b3e5b7db7c93a3635fab5f7d3306.tar.zst
nixpkgs-7bb0611e2e27b3e5b7db7c93a3635fab5f7d3306.zip
vim_configurable: Add packPath option to vimrcConfig (#22776)
* vim_configurable: Add packages option to vimrcConfig

Version 8 of vim adds the concept of "vim packages": directories which
contain one or more vim plugins, in either "start" or "opt"
subdirectories. Those in "start" are to be loaded automatically, while
those in "opt" can be loaded manually. Vim detects any packages located
in one of its "packpaths".

The packages option takes a set of sets describing one or more vim
packages, and adds the derivation containing these packages to the
packpath.

* fix documentation.
Diffstat (limited to 'pkgs/misc')
-rw-r--r--pkgs/misc/vim-plugins/vim-utils.nix43
1 files changed, 43 insertions, 0 deletions
diff --git a/pkgs/misc/vim-plugins/vim-utils.nix b/pkgs/misc/vim-plugins/vim-utils.nix
index d714b290a90..4b754f15c0f 100644
--- a/pkgs/misc/vim-plugins/vim-utils.nix
+++ b/pkgs/misc/vim-plugins/vim-utils.nix
@@ -17,6 +17,17 @@ vim-with-plugins in PATH:
       set hidden
     '';
 
+    # store your plugins in Vim packages
+    vimrcConfig.packages.myVimPackage = with pkgs.vimPlugins; {
+      # loaded on launch
+      start = [ youcompleteme fugitive ];
+      # manually loadable by calling `:packadd $plugin-name`
+      opt = [ phpCompletion elm-vim ];
+      # To automatically load a plugin when opening a filetype, add vimrc lines like:
+      # autocmd FileType php :packadd phpCompletion
+    };
+
+    # plugins can also be managed by VAM
     vimrcConfig.vam.knownPlugins = pkgs.vimPlugins; # optional
     vimrcConfig.vam.pluginDictionaries = [
       # load always
@@ -154,6 +165,7 @@ let
     in lib.uniqList { inputList = recurseNames [] names; };
 
   vimrcFile = {
+    packages ? null,
     vam ? null,
     pathogen ? null,
     customRC ? ""
@@ -253,6 +265,31 @@ let
         call vam#Scripts(l, {})
       '');
 
+      nativeImpl = lib.optionalString (packages != null)
+      (let
+        link = (packageName: dir: pluginPath: "ln -sf ${pluginPath}/share/vim-plugins/* $out/pack/${packageName}/${dir}");
+        packageLinks = (packageName: {start ? [], opt ? []}:
+          ["mkdir -p $out/pack/${packageName}/start"]
+          ++ (builtins.map (link packageName "start") start)
+          ++ ["mkdir -p $out/pack/${packageName}/opt"]
+          ++ (builtins.map (link packageName "opt") opt)
+        );
+        packDir = (packages:
+          stdenv.mkDerivation rec {
+            name = "vim-pack-dir";
+            src = ./.;
+            installPhase = lib.concatStringsSep
+                             "\n"
+                             (lib.flatten (lib.mapAttrsToList packageLinks packages));
+          }
+        );
+      in
+      ''
+        set packpath-=~/.vim/after
+        set packpath+=${packDir packages}
+        set packpath+=~/.vim/after
+      '');
+
       # somebody else could provide these implementations
       vundleImpl = "";
 
@@ -267,6 +304,7 @@ let
   ${pathogenImpl}
   ${vundleImpl}
   ${neobundleImpl}
+  ${nativeImpl}
 
   filetype indent plugin on | syn on
 
@@ -385,4 +423,9 @@ rec {
     vimrcConfig.pathogen.pluginNames = [ "vim-addon-nix" ];
   };
 
+  test_vim_with_vim_addon_nix = vim_configurable.customize {
+    name = "vim-with-vim-addon-nix";
+    vimrcConfig.packages.myVimPackage.start = with vimPlugins; [ vim-addon-nix ];
+  };
+
 }