{ gitpkgs ? import /home/steveej/src/github/NixOS/nixpkgs {} , pkgs ? gitpkgs , name ? "generic" , version , extraBuildInputs ? [] , extraShellHook ? "" }: let go = builtins.getAttr "go_${version}" pkgs; commonVimRC = '' let g:tagbar_type_go = { \ 'ctagstype' : 'go', \ 'kinds' : [ \ 'p:package', \ 'i:imports:1', \ 'c:constants', \ 'v:variables', \ 't:types', \ 'n:interfaces', \ 'w:fields', \ 'e:embedded', \ 'm:methods', \ 'r:constructor', \ 'f:functions' \ ], \ 'sro' : '.', \ 'kind2scope' : { \ 't' : 'ctype', \ 'n' : 'ntype' \ }, \ 'scope2kind' : { \ 'ctype' : 't', \ 'ntype' : 'n' \ }, \ 'ctagsbin' : 'gotags', \ 'ctagsargs' : '-sort -silent' \ } " vim-go { let g:go_highlight_functions = 1 let g:go_highlight_methods = 1 let g:go_highlight_structs = 1 let g:go_highlight_interfaces = 1 let g:go_highlight_operators = 1 let g:go_highlight_build_constraints = 1 let g:go_fmt_command = 'gofmt' let g:go_fmt_options= '-s' let g:go_def_mode = 'godef' let g:go_def_reuse_buffer = 0 au FileType go nmap gds (go-def-split) au FileType go nmap gdv (go-def-vertical) au FileType go nmap gdt (go-def-tab) au FileType go nmap gi (go-imports) " } ''; buildInputs = with pkgs; [ glibc.out glibc.static go gotools #gotools.bin #gocode.bin #godef godef.bin godep #godep.bin gox.bin #ginkgo ginkgo.bin #gomega ( import ./vim-go.nix { pkgs=gitpkgs; commonRC=commonVimRC; } ) # ( import ./neovim-go.nix { pkgs=gitpkgs; commonRC=commonVimRC; } ) ]; in pkgs.stdenv.mkDerivation { inherit name; buildInputs = extraBuildInputs ++ buildInputs; shellHook = '' goname=${go.version}_$name setPS1 $goname export GOROOT=${go}/share/go export GOPATH="$HOME/.gopath_$goname" export PATH="$HOME/.gopath_$goname/bin:$PATH" unset name unset SSL_CERT_FILE go get -u github.com/Masterminds/glide go get -u github.com/sgotti/glide-vc go get -u github.com/alecthomas/gometalinter go get -u github.com/golang/lint/golint go get -u github.com/rogpeppe/godef go get -u github.com/kisielk/errcheck go get -u github.com/jstemmer/gotags go get -u github.com/klauspost/asmfmt/cmd/asmfmt go get -u github.com/nsf/gocode ${extraShellHook} ''; }