diff --git a/derivations/dev/rust.nix b/derivations/dev/rust.nix index 6732a61..acb6104 100644 --- a/derivations/dev/rust.nix +++ b/derivations/dev/rust.nix @@ -1,19 +1,32 @@ -{ -pkgs ? import /home/steveej/src/github/NixOS/nixpkgs {}, -name ? "generic", -version, -extraBuildInputs ? [] }: +{ gitpkgs ? import /home/steveej/src/github/NixOS/nixpkgs {} +, pkgs ? gitpkgs +, name ? "generic" +, version ? "Stable" +, extraBuildInputs ? [] +}: let rustPackages = builtins.getAttr "rust${version}" pkgs; - rustBuildInputs = { rustPackages }: [ - rustPackages.rustc - ]; - rustShellHook = { rustPackages, name }: '' - setPS1 rust${version} - unset name - ''; + rustc = rustPackages.rustc; + rustShellHook = { rustc, name }: '' + rustname=rust_${rustc.version}_${name} + setPS1 $rustname + unset name + ''; + commonVimRC = '' + ''; in pkgs.stdenv.mkDerivation { inherit name; - buildInputs = extraBuildInputs ++ (rustBuildInputs){ inherit rustPackages; }; - shellHook = (rustShellHook) { inherit name; inherit rustPackages; }; + buildInputs = with rustPackages;[ + ( import ./vim-rust.nix { pkgs=gitpkgs; commonRC=commonVimRC; + inherit rustc; + racerd=pkgs.rustracerd; + }) + rustc cargo + ] ++ [ + pkgs.rustfmt + ] ++ extraBuildInputs; + shellHook = (rustShellHook){ + inherit name; + inherit rustc; + }; } diff --git a/derivations/dev/vim-rust.nix b/derivations/dev/vim-rust.nix new file mode 100644 index 0000000..4b4ade9 --- /dev/null +++ b/derivations/dev/vim-rust.nix @@ -0,0 +1,46 @@ +{ commonRC +, rustc +, racerd, +... } @ args : + +import ../../pkg-configuration/vim-derivates/vim.nix (args // { + name = "vim-for-rust"; + additionalRC = commonRC + '' + set statusline+=%#warningmsg# + set statusline+=%{SyntasticStatuslineFlag()} + set statusline+=%* + + let g:syntastic_always_populate_loc_list = 1 + let g:syntastic_auto_loc_list = 1 + let g:syntastic_check_on_open = 1 + let g:syntastic_check_on_wq = 0 + + " tagbar + let g:tagbar_type_rust = { + \ 'ctagstype' : 'rust', + \ 'kinds' : [ + \'T:types,type definitions', + \'f:functions,function definitions', + \'g:enum,enumeration names', + \'s:structure names', + \'m:modules,module names', + \'c:consts,static constants', + \'t:traits,traits', + \'i:impls,trait implementations', + \] + \} + + let g:syntastic_rust_checkers = ["rustc"] + + "rustfmt + let g:rustfmt_autosave = 1 + + let g:ycm_auto_trigger = 1 + let g:ycm_rust_src_path = '${rustc.src}/src' + let g:ycm_racerd_binary_path = '${racerd.out}/bin/racerd' + + ''; + additionalPlugins = [ + "rust-vim" + ]; +}) diff --git a/pkg-configuration/vim-derivates/commonrc.nix b/pkg-configuration/vim-derivates/commonrc.nix index a0ebe27..8c40fd3 100644 --- a/pkg-configuration/vim-derivates/commonrc.nix +++ b/pkg-configuration/vim-derivates/commonrc.nix @@ -38,6 +38,8 @@ set softtabstop=4 set expandtab "set textwidth=80 +set backspace=indent,eol,start + set wildignore+=*/site/*,*.so,*.swp,*.zip let g:ctrlp_custom_ignore = { \ 'dir': '\v[\/]\.(git|hg|svn|)$$', @@ -102,4 +104,6 @@ augroup ft_yaml setlocal autoindent sw=2 et tabstop=2 shiftwidth=2 softtabstop=2 augroup END " }}} + '' +