summaryrefslogtreecommitdiff
path: root/nvim/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nvim/default.nix')
-rw-r--r--nvim/default.nix94
1 files changed, 94 insertions, 0 deletions
diff --git a/nvim/default.nix b/nvim/default.nix
new file mode 100644
index 0000000..d6d4a94
--- /dev/null
+++ b/nvim/default.nix
@@ -0,0 +1,94 @@
+{
+
+ pkgs ? (import ../pkgs.nix) {},
+
+}: rec {
+
+ goimports = pkgs.buildGoModule rec {
+ pname = "goimports";
+ version = "v0.1.7";
+ src = builtins.fetchGit {
+ url = "https://go.googlesource.com/tools";
+ rev = "0df0ca0f43117120bd7cc900ebf765f9b799438a";
+ };
+ vendorSha256 = "1vs4vbl3kh8lbqrm4yqqn27ammlqj7jdbi0ca9s4fkja2sk45ibi";
+ subPackages = [ "cmd/goimports" ];
+ };
+
+ # the gocode-gomod which comes with nixpkgs places the binary at
+ # gocode-gomod, we gotta rename it
+ gocode = pkgs.stdenv.mkDerivation {
+ name = "gocode";
+ src = pkgs.gocode-gomod;
+ builder = builtins.toFile "builder.sh" ''
+ source $stdenv/setup
+ mkdir -p "$out"/bin/
+ cp "$src"/bin/gocode-gomod "$out"/bin/gocode
+ '';
+ };
+
+ env = pkgs.buildEnv {
+ name = "nvim-env";
+ paths = [
+ pkgs.vimPlugins.vim-plug
+ pkgs.vimPlugins.deoplete-nvim
+ pkgs.vimPlugins.deoplete-go
+ pkgs.vimPlugins.nerdtree
+ pkgs.vimPlugins.nerdtree-git-plugin
+ pkgs.vimPlugins.vim-gitgutter
+ pkgs.vimPlugins.neomake
+ pkgs.vimPlugins.papercolor-theme
+ pkgs.vimPlugins.vim-go
+ pkgs.vimPlugins.vim-nix
+
+ pkgs.golangci-lint
+ pkgs.gopls
+ gocode
+ goimports
+ ];
+ };
+
+ envPlugins = "${env}/share/vim-plugins";
+
+ init = pkgs.writeText "nvim-init" ''
+ source ${envPlugins}/vim-plug/plug.vim
+
+ call plug#begin('${envPlugins}')
+ Plug '${envPlugins}/deoplete-nvim'
+ Plug '${envPlugins}/deoplete-go', { 'for': 'go' }
+ Plug '${envPlugins}/nerdtree', { 'on': 'NERDTreeToggle' }
+ Plug '${envPlugins}/nerdtree-git-plugin'
+ Plug '${envPlugins}/vim-gitgutter'
+ Plug '${envPlugins}/neomake'
+ Plug '${envPlugins}/papercolor-theme'
+ Plug '${envPlugins}/vim-go', { 'for': 'go' }
+ Plug '${envPlugins}/vim-nix', { 'for': 'nix' }
+ call plug#end()
+
+ source ${./init.vim}
+ '';
+
+ nvimRaw = pkgs.writeScriptBin "nvim" ''
+ #!${pkgs.bash}/bin/bash
+ export PATH=${env}/bin:$PATH
+ exec ${pkgs.neovim}/bin/nvim -u ${init} "$@"
+ '';
+
+ rplugin = pkgs.stdenv.mkDerivation {
+ name = "nvim-rplugin";
+ buildInputs = [ pkgs.git nvimRaw ];
+ builder = builtins.toFile "builder.sh" ''
+ source $stdenv/setup
+ mkdir -p "$out"/
+ export NVIM_RPLUGIN_MANIFEST="$out"/rplugin.vim
+ nvim -c ':UpdateRemotePlugins' -c ':exit' >/dev/null
+ '';
+ };
+
+ nvim = pkgs.writeScriptBin "nvim" ''
+ #!${pkgs.bash}/bin/bash
+ export NVIM_RPLUGIN_MANIFEST=${rplugin}/rplugin.vim
+ exec ${nvimRaw}/bin/nvim "$@"
+ '';
+
+}