stockholm/tv/2configs/vim.nix

212 lines
5.5 KiB
Nix
Raw Normal View History

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
};
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-06-09 02:22:46 +00:00
((rtp: rtp // { inherit rtp; }) (pkgs.writeTextFile (let
name = "hack";
version = "1.0";
in {
name = "vim-color-${name}-${version}";
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
hi Tabstop ctermbg=16
hi TrailingSpace ctermbg=88
'';
})))
];
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>
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
au Syntax * syn match Tabstop containedin=ALL /\t\+/
\ | syn match TrailingSpace 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=+|]+
'';
nix.vim = pkgs.writeText "nix.vim" ''
setf nix
set isk=@,48-57,_,192-255,-,'
syn match NixCode /./
2016-06-08 22:53:41 +00:00
" Ref <nix/src/libexpr/lexer.l>
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
syn include @HaskellSyntax syntax/haskell.vim
syn region HaskellBlock
\ matchgroup=NixExit
\ start="/\* haskell \*/ '''"
\ skip="''''"
\ end="'''"
\ contains=@HaskellSyntax
unlet b:current_syntax
syn include @VimSyntax syntax/vim.vim
syn region VimBlock
\ matchgroup=NixExit
\ start="\(/\* vim \*/\|write[-0-9A-Za-z'_]* *\"\(\([^\"]*\.\)\?vimrc\|[^\"]*\.vim\)\"\) *'''"
\ skip="''''"
\ end="'''"
\ contains=@VimSyntax
unlet b:current_syntax
syn region NixBlock
\ matchgroup=NixEnter
\ start="[$]{"
\ end="}"
\ contains=ALL
\ containedin=HaskellBlock,@HaskellSyntax,VimBlock,@VimSyntax
2016-06-08 22:53:41 +00:00
let b:current_syntax = "nix"
'';
2015-11-01 09:50:03 +00:00
in
out