2016-02-14 15:43:44 +00:00
|
|
|
{ config, lib, pkgs, ... }:
|
2015-11-01 09:50:03 +00:00
|
|
|
|
2016-02-14 15:43:44 +00:00
|
|
|
with config.krebs.lib;
|
2015-11-01 09:50:03 +00:00
|
|
|
let
|
|
|
|
out = {
|
|
|
|
environment.systemPackages = [
|
2015-12-27 18:33:12 +00:00
|
|
|
vim
|
2015-11-01 09:50:03 +00:00
|
|
|
];
|
|
|
|
|
2015-11-01 12:59:53 +00:00
|
|
|
environment.etc.vimrc.source = vimrc;
|
|
|
|
|
2015-11-01 09:50:03 +00:00
|
|
|
environment.variables.EDITOR = mkForce "vim";
|
2015-11-01 12:59:53 +00:00
|
|
|
environment.variables.VIMINIT = ":so /etc/vimrc";
|
2015-11-01 09:50:03 +00:00
|
|
|
};
|
|
|
|
|
2016-02-27 11:10:57 +00:00
|
|
|
extra-runtimepath = concatMapStringsSep "," (pkg: "${pkg.rtp}") [
|
|
|
|
pkgs.vimPlugins.undotree
|
|
|
|
(pkgs.vimUtils.buildVimPlugin {
|
2016-02-07 06:47:29 +00:00
|
|
|
name = "file-line-1.0";
|
|
|
|
src = pkgs.fetchgit {
|
|
|
|
url = git://github.com/bogado/file-line;
|
|
|
|
rev = "refs/tags/1.0";
|
|
|
|
sha256 = "0z47zq9rqh06ny0q8lpcdsraf3lyzn9xvb59nywnarf3nxrk6hx0";
|
|
|
|
};
|
2016-02-27 11:10:57 +00:00
|
|
|
})
|
2016-06-09 02:22:46 +00:00
|
|
|
((rtp: rtp // { inherit rtp; }) (pkgs.writeTextFile (let
|
|
|
|
name = "hack";
|
|
|
|
in {
|
2016-06-09 11:20:29 +00:00
|
|
|
name = "vim-color-${name}-1.0";
|
2016-06-09 02:22:46 +00:00
|
|
|
destination = "/colors/${name}.vim";
|
|
|
|
text = /* vim */ ''
|
|
|
|
set background=dark
|
|
|
|
hi clear
|
|
|
|
if exists("syntax_on")
|
|
|
|
syntax clear
|
|
|
|
endif
|
|
|
|
|
|
|
|
let colors_name = ${toJSON name}
|
|
|
|
|
|
|
|
hi Normal ctermbg=235
|
|
|
|
hi Comment ctermfg=240
|
|
|
|
|
2016-06-09 12:15:46 +00:00
|
|
|
hi Garbage ctermbg=088
|
|
|
|
hi TabStop ctermbg=016
|
2016-06-09 02:22:46 +00:00
|
|
|
'';
|
|
|
|
})))
|
2016-06-09 11:22:47 +00:00
|
|
|
((rtp: rtp // { inherit rtp; }) (pkgs.writeTextFile (let
|
|
|
|
name = "vim";
|
|
|
|
in {
|
|
|
|
name = "vim-syntax-${name}-1.0.0";
|
|
|
|
destination = "/syntax/${name}.vim";
|
|
|
|
text = /* vim */ ''
|
|
|
|
${concatMapStringsSep "\n" (s: /* vim */ ''
|
|
|
|
syn keyword vimColor${s} ${s}
|
|
|
|
\ containedin=ALLBUT,vimComment,vimLineComment
|
|
|
|
hi vimColor${s} ctermfg=${s}
|
|
|
|
'') (map (i: lpad 3 "0" (toString i)) (range 0 255))}
|
|
|
|
'';
|
|
|
|
})))
|
2016-02-27 11:10:57 +00:00
|
|
|
];
|
2015-11-01 09:50:03 +00:00
|
|
|
|
2015-12-27 18:33:12 +00:00
|
|
|
dirs = {
|
|
|
|
backupdir = "$HOME/.cache/vim/backup";
|
|
|
|
swapdir = "$HOME/.cache/vim/swap";
|
|
|
|
undodir = "$HOME/.cache/vim/undo";
|
|
|
|
};
|
|
|
|
files = {
|
|
|
|
viminfo = "$HOME/.cache/vim/info";
|
|
|
|
};
|
|
|
|
|
|
|
|
mkdirs = let
|
|
|
|
dirOf = s: let out = concatStringsSep "/" (init (splitString "/" s));
|
|
|
|
in assert out != ""; out;
|
|
|
|
alldirs = attrValues dirs ++ map dirOf (attrValues files);
|
|
|
|
in unique (sort lessThan alldirs);
|
|
|
|
|
2016-02-07 07:09:07 +00:00
|
|
|
vim = pkgs.writeDashBin "vim" ''
|
|
|
|
set -efu
|
|
|
|
(umask 0077; exec ${pkgs.coreutils}/bin/mkdir -p ${toString mkdirs})
|
2015-12-27 18:33:12 +00:00
|
|
|
exec ${pkgs.vim}/bin/vim "$@"
|
|
|
|
'';
|
|
|
|
|
2015-11-01 09:50:03 +00:00
|
|
|
vimrc = pkgs.writeText "vimrc" ''
|
|
|
|
set nocompatible
|
|
|
|
|
|
|
|
set autoindent
|
|
|
|
set backspace=indent,eol,start
|
|
|
|
set backup
|
2015-12-27 18:33:12 +00:00
|
|
|
set backupdir=${dirs.backupdir}/
|
|
|
|
set directory=${dirs.swapdir}//
|
2015-11-01 09:50:03 +00:00
|
|
|
set hlsearch
|
|
|
|
set incsearch
|
|
|
|
set mouse=a
|
2015-11-01 12:21:35 +00:00
|
|
|
set noruler
|
2015-11-01 09:50:03 +00:00
|
|
|
set pastetoggle=<INS>
|
2015-11-01 12:48:38 +00:00
|
|
|
set runtimepath=${extra-runtimepath},$VIMRUNTIME
|
2015-11-01 09:50:03 +00:00
|
|
|
set shortmess+=I
|
|
|
|
set showcmd
|
|
|
|
set showmatch
|
|
|
|
set ttimeoutlen=0
|
2015-12-27 18:33:12 +00:00
|
|
|
set undodir=${dirs.undodir}
|
2015-11-01 09:50:03 +00:00
|
|
|
set undofile
|
|
|
|
set undolevels=1000000
|
|
|
|
set undoreload=1000000
|
2015-12-27 18:33:12 +00:00
|
|
|
set viminfo='20,<1000,s100,h,n${files.viminfo}
|
2015-11-01 09:50:03 +00:00
|
|
|
set visualbell
|
|
|
|
set wildignore+=*.o,*.class,*.hi,*.dyn_hi,*.dyn_o
|
|
|
|
set wildmenu
|
|
|
|
set wildmode=longest,full
|
|
|
|
|
2015-11-04 23:31:14 +00:00
|
|
|
set et ts=2 sts=2 sw=2
|
|
|
|
|
2015-11-01 09:50:03 +00:00
|
|
|
filetype plugin indent on
|
|
|
|
|
2015-11-01 12:17:11 +00:00
|
|
|
set t_Co=256
|
2016-06-09 02:22:46 +00:00
|
|
|
colorscheme hack
|
2015-11-01 09:50:03 +00:00
|
|
|
syntax on
|
|
|
|
|
2016-06-09 12:15:46 +00:00
|
|
|
au Syntax * syn match TabStop containedin=ALL /\t\+/
|
|
|
|
\ | syn match Garbage containedin=ALL /\s\+$/
|
2015-11-01 09:50:03 +00:00
|
|
|
|
2016-06-08 22:53:41 +00:00
|
|
|
au BufRead,BufNewFile *.hs so ${hs.vim}
|
|
|
|
|
|
|
|
au BufRead,BufNewFile *.nix so ${nix.vim}
|
2015-11-01 12:13:07 +00:00
|
|
|
|
2015-11-01 12:22:43 +00:00
|
|
|
au BufRead,BufNewFile /dev/shm/* set nobackup nowritebackup noswapfile
|
|
|
|
|
2015-11-01 09:50:03 +00:00
|
|
|
nmap <esc>q :buffer
|
|
|
|
nmap <M-q> :buffer
|
|
|
|
|
|
|
|
cnoremap <C-A> <Home>
|
|
|
|
|
|
|
|
noremap <C-c> :q<cr>
|
|
|
|
|
|
|
|
nnoremap <esc>[5^ :tabp<cr>
|
|
|
|
nnoremap <esc>[6^ :tabn<cr>
|
|
|
|
nnoremap <esc>[5@ :tabm -1<cr>
|
|
|
|
nnoremap <esc>[6@ :tabm +1<cr>
|
|
|
|
|
|
|
|
nnoremap <f1> :tabp<cr>
|
|
|
|
nnoremap <f2> :tabn<cr>
|
|
|
|
inoremap <f1> <esc>:tabp<cr>
|
|
|
|
inoremap <f2> <esc>:tabn<cr>
|
|
|
|
|
|
|
|
" <C-{Up,Down,Right,Left>
|
|
|
|
noremap <esc>Oa <nop> | noremap! <esc>Oa <nop>
|
|
|
|
noremap <esc>Ob <nop> | noremap! <esc>Ob <nop>
|
|
|
|
noremap <esc>Oc <nop> | noremap! <esc>Oc <nop>
|
|
|
|
noremap <esc>Od <nop> | noremap! <esc>Od <nop>
|
|
|
|
" <[C]S-{Up,Down,Right,Left>
|
|
|
|
noremap <esc>[a <nop> | noremap! <esc>[a <nop>
|
|
|
|
noremap <esc>[b <nop> | noremap! <esc>[b <nop>
|
|
|
|
noremap <esc>[c <nop> | noremap! <esc>[c <nop>
|
|
|
|
noremap <esc>[d <nop> | noremap! <esc>[d <nop>
|
|
|
|
vnoremap u <nop>
|
|
|
|
'';
|
2016-06-08 22:53:41 +00:00
|
|
|
|
|
|
|
hs.vim = pkgs.writeText "hs.vim" ''
|
|
|
|
syn region String start=+\[[[:alnum:]]*|+ end=+|]+
|
2016-06-09 12:28:27 +00:00
|
|
|
|
|
|
|
hi link ConId Identifier
|
|
|
|
hi link VarId Identifier
|
|
|
|
hi link hsDelimiter Delimiter
|
2016-06-08 22:53:41 +00:00
|
|
|
'';
|
|
|
|
|
|
|
|
nix.vim = pkgs.writeText "nix.vim" ''
|
|
|
|
setf nix
|
|
|
|
set isk=@,48-57,_,192-255,-,'
|
|
|
|
|
2016-06-09 01:19:12 +00:00
|
|
|
syn match NixCode /./
|
|
|
|
|
2016-06-08 22:53:41 +00:00
|
|
|
" Ref <nix/src/libexpr/lexer.l>
|
2016-06-09 01:19:12 +00:00
|
|
|
syn match NixINT /\<[0-9]\+\>/
|
|
|
|
syn match NixPATH /[a-zA-Z0-9\.\_\-\+]*\(\/[a-zA-Z0-9\.\_\-\+]\+\)\+/
|
|
|
|
syn match NixHPATH /\~\(\/[a-zA-Z0-9\.\_\-\+]\+\)\+/
|
|
|
|
syn match NixSPATH /<[a-zA-Z0-9\.\_\-\+]\+\(\/[a-zA-Z0-9\.\_\-\+]\+\)*>/
|
|
|
|
syn match NixURI /[a-zA-Z][a-zA-Z0-9\+\-\.]*:[a-zA-Z0-9\%\/\?\:\@\&\=\+\$\,\-\_\.\!\~\*\']\+/
|
|
|
|
|
|
|
|
syn match NixString /"\([^\\"]\|\\.\)*"/
|
|
|
|
syn match NixCommentMatch /\(^\|\s\)#.*/
|
|
|
|
syn region NixCommentRegion start="/\*" end="\*/"
|
|
|
|
|
|
|
|
hi NixCode ctermfg=034
|
|
|
|
hi NixData ctermfg=040
|
|
|
|
|
|
|
|
hi link NixComment Comment
|
|
|
|
hi link NixCommentMatch NixComment
|
|
|
|
hi link NixCommentRegion NixComment
|
|
|
|
hi link NixINT NixData
|
|
|
|
hi link NixPATH NixData
|
|
|
|
hi link NixHPATH NixData
|
|
|
|
hi link NixSPATH NixData
|
|
|
|
hi link NixURI NixData
|
|
|
|
hi link NixString NixData
|
|
|
|
|
|
|
|
hi link NixEnter NixCode
|
|
|
|
hi link NixExit NixData
|
2016-06-09 03:44:26 +00:00
|
|
|
hi link NixQuote NixData
|
|
|
|
hi link NixQuote2 NixQuote
|
|
|
|
hi link NixQuote3 NixQuote
|
|
|
|
|
|
|
|
syn cluster NixSubLangs contains=NONE
|
|
|
|
|
|
|
|
${concatStringsSep "\n" (mapAttrsToList (name: { start ? null }: let
|
|
|
|
in /* vim */ ''
|
|
|
|
syn include @${name}Syntax syntax/${name}.vim
|
|
|
|
syn region ${name}Block
|
|
|
|
\ matchgroup=NixExit
|
|
|
|
\ start="\(/\* ${name} \*/${optionalString (start != null) ''\|${start}''}\) '''"
|
|
|
|
\ skip="'''\('\|[$]\|\\[nrt]\)"
|
|
|
|
\ end="'''"
|
|
|
|
\ contains=@${name}Syntax
|
|
|
|
syn cluster NixSubLangs add=${name}Block,@${name}Syntax
|
|
|
|
unlet b:current_syntax
|
|
|
|
'') {
|
|
|
|
haskell = {};
|
2016-06-09 03:45:13 +00:00
|
|
|
sh.start = ''write\(Ba\|Da\)sh[^ ]* *\"[^\"]*\"'';
|
2016-06-09 03:44:26 +00:00
|
|
|
vim.start = ''write[^ ]* *\"\(\([^\"]*\.\)\?vimrc\|[^\"]*\.vim\)\"'';
|
|
|
|
})}
|
2016-06-09 01:19:12 +00:00
|
|
|
|
|
|
|
syn region NixBlock
|
|
|
|
\ matchgroup=NixEnter
|
|
|
|
\ start="[$]{"
|
|
|
|
\ end="}"
|
2016-06-09 03:44:26 +00:00
|
|
|
\ contains=TOP
|
|
|
|
\ containedin=@NixSubLangs
|
|
|
|
|
|
|
|
syn region NixBlockHack
|
|
|
|
\ start="{"
|
|
|
|
\ end="}"
|
|
|
|
\ contains=TOP
|
|
|
|
|
|
|
|
syn match NixQuote "'''[$]"he=e-1 contained containedin=@NixSubLangs
|
|
|
|
syn match NixQuote2 "''''"he=s+1 contained containedin=@NixSubLangs
|
|
|
|
syn match NixQuote3 "'''\\[nrt]" contained containedin=@NixSubLangs
|
2016-06-08 22:53:41 +00:00
|
|
|
|
|
|
|
let b:current_syntax = "nix"
|
|
|
|
'';
|
2015-11-01 09:50:03 +00:00
|
|
|
in
|
|
|
|
out
|