summary refs log tree commit diff
path: root/pkgs/misc
diff options
context:
space:
mode:
authorMarc Weber <marco-oweber@gmx.de>2013-05-27 18:29:35 +0200
committerMarc Weber <marco-oweber@gmx.de>2013-05-27 22:26:29 +0200
commit71628d6e356636cef794c6f2fe680cb31f4cab64 (patch)
treeb2b353a13f94415a1783adca76f962d8ce7e7787 /pkgs/misc
parenta22f94b4f27ebfe5142eff7da60b1c5e2e557880 (diff)
downloadnixlib-71628d6e356636cef794c6f2fe680cb31f4cab64.tar
nixlib-71628d6e356636cef794c6f2fe680cb31f4cab64.tar.gz
nixlib-71628d6e356636cef794c6f2fe680cb31f4cab64.tar.bz2
nixlib-71628d6e356636cef794c6f2fe680cb31f4cab64.tar.lz
nixlib-71628d6e356636cef794c6f2fe680cb31f4cab64.tar.xz
nixlib-71628d6e356636cef794c6f2fe680cb31f4cab64.tar.zst
nixlib-71628d6e356636cef794c6f2fe680cb31f4cab64.zip
vim: supporting multiple sources:
- vim-nox: client-server implementation without X
- latest:  latest mercurial sources (still very stable)
- default: latest release

vim-plugins: Introduce an area to put vim plugins which are worth adding to nix
because they need more effort than just "unpacking". Document that
Diffstat (limited to 'pkgs/misc')
-rw-r--r--pkgs/misc/vim-plugins/default.nix129
1 files changed, 129 insertions, 0 deletions
diff --git a/pkgs/misc/vim-plugins/default.nix b/pkgs/misc/vim-plugins/default.nix
new file mode 100644
index 000000000000..b0c70d958217
--- /dev/null
+++ b/pkgs/misc/vim-plugins/default.nix
@@ -0,0 +1,129 @@
+{fetchurl, stdenv, python, cmake, vim}:
+
+/*
+About Vim and plugins
+=====================
+Let me tell you how Vim plugins work, so that you can decide on how to orginize
+your setup.
+
+typical plugin files:
+
+  plugin/P1.vim
+  autoload/P1.vim
+  ftplugin/xyz.vim
+  doc/plugin-documentation.txt
+  README(.md) (nowadays thanks to github)
+
+Traditionally plugins were installed into ~/.vim/* so it was your task to keep track
+of which files belong to what plugin. Now this problem is "fixed" by nix which
+assembles your profile for you.
+
+
+Vim offers the :h rtp setting which works for most plugins. Thus adding adding
+this to your .vimrc should make most plugins work:
+
+  set rtp+=~/.nix-profile/vim-plugins/YouCompleteMe
+  " or for p in ["YouCompleteMe"] | exec 'set rtp+=~/.nix-profile/vim-plugins/'.p | endfor
+
+Its what
+pathogen, vundle, vim-addon-manager (VAM) use.
+
+VAM's benefits:
+- works around after/* directories if they are used in non ~/.vim locations
+- allows activating plugins at runtime, eg when you need them. (works around
+  some au command hooks, eg required for TheNerdTree plugin)
+- VAM checkous out all sources (vim.sf.net, git, mercurial, ...)
+- runs :helptags on update/installation only. Obviously it cannot do that on
+  store paths.
+
+VAM is made up of
+- the code loading plugins
+- an optional pool (github.com/MarcWeber/vim-addon-manager-known-repositories)
+
+That pool probably is the best source to automatically derive plugin
+information from or to lookup about how to get data from www.vim.org.
+
+I'm not sure we should package them all. Most of them are not used much.
+You need your .vimrc anyway, and then VAM gets the job done ?
+
+How to install VAM? eg provide such a bash function:
+
+    vim-install-vam () {
+    mkdir -p ~/.vim/vim-addons && git clone --depth=1 git://github.com/MarcWeber/vim-addon-manager.git ~/.vim/vim-addons/vim-addon-manager && cat >> ~/.vimrc <<EOF
+    set nocompatible
+    set hidden
+    filetype indent plugin on | syn on
+    fun ActivateAddons()
+      let g:vim_addon_manager = {}
+      let g:vim_addon_manager.log_to_buf =1
+      set runtimepath+=~/.vim/vim-addons/vim-addon-manager
+      call vam#ActivateAddons([])
+    endf
+    call ActivateAddons()
+    EOF
+    }
+
+IMHO having no plugins listed might be better than having outdated ones.
+
+So which plugins to add here according to what Marc Weber thinks is best?
+complicated plugins requiring dependencies, such as YouCompleteMe.
+Then its best to symlink ~/.nix-profile/vim-plugins/YouCompleteMe to
+~/.vim/{vim-addons,bundle} or whatever plugin management solution you use.
+
+If you feel differently change the comments and proceed.
+*/
+
+let vimHelptags = path: ''
+  ${vim}/bin/vim -N -u NONE -i NONE -n -e -s -c "helptags ${path}" +quit!
+'';
+
+in
+
+{
+
+  #TODO :helptags should be run
+
+  vimAddonNix = {
+    # github.com/MarcWeber/vim-addon-nix provides some additional support for
+    # editing .nix files
+
+    # This is a placeholder, because I think you always should be using latest git version
+  };
+
+  YouCompleteMe = stdenv.mkDerivation {
+    # REGION AUTO UPDATE: { name="youcompleteme"; type="git"; url="git://github.com/Valloric/YouCompleteMe"; }
+    src = (fetchurl { url = "http://mawercer.de/~nix/repos/youcompleteme-git-97306.tar.bz2"; sha256 = "b9b892f5a723370c2034491dc72a4ca722c6cf1e5de4d60501141bba151bc719"; });
+    name = "youcompleteme-git-97306";
+    # END
+    buildInputs = [ python cmake ];
+
+    configurePhase = ":";
+
+    buildPhase = ''
+      set -x
+      target=$out/vim-plugins/YouCompleteMe
+      mkdir -p $target
+      cp -a ./ $target
+
+      mkdir $target/build
+      cd $target/build
+      cmake -G "Unix Makefiles" . $target/cpp -DPYTHON_LIBRARIES:PATH=${python}/lib/libpython2.7.so -DPYTHON_INCLUDE_DIR:PATH=${python}/include/python2.7
+      make -j -j''${NIX_BUILD_CORES} -l''${NIX_BUILD_CORES}}
+
+      ${vimHelptags "$out/vim-plugins/YouCompleteMe/doc"}
+    '';
+
+    # TODO: implement proper install phase rather than keeping everything in store
+    # TODO: support llvm based C completion, See README of git repository
+    installPhase = ":";
+
+    meta = {
+      description = "fastest non utf-8 aware word and C completion engine for Vim";
+      homepage = http://github.com/Valloric/YouCompleteMe;
+      license = stdenv.lib.licenses.gpl3;
+      maintainers = [stdenv.lib.maintainers.marcweber];
+      platforms = stdenv.lib.platforms.linux;
+    };
+  };
+
+}