summaryrefslogtreecommitdiffstats
path: root/tv/2configs/vim.nix
diff options
context:
space:
mode:
Diffstat (limited to 'tv/2configs/vim.nix')
-rw-r--r--tv/2configs/vim.nix250
1 files changed, 211 insertions, 39 deletions
diff --git a/tv/2configs/vim.nix b/tv/2configs/vim.nix
index 10e5aab52..0d87d97af 100644
--- a/tv/2configs/vim.nix
+++ b/tv/2configs/vim.nix
@@ -23,6 +23,84 @@ let
sha256 = "0z47zq9rqh06ny0q8lpcdsraf3lyzn9xvb59nywnarf3nxrk6hx0";
};
})
+ ((rtp: rtp // { inherit rtp; }) (pkgs.writeTextFile (let
+ name = "hack";
+ in {
+ name = "vim-color-${name}-1.0.2";
+ 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=242
+ hi Constant ctermfg=255
+ hi Identifier ctermfg=253
+ hi Function ctermfg=253
+ hi Statement ctermfg=253
+ hi PreProc ctermfg=251
+ hi Type ctermfg=251
+ hi Delimiter ctermfg=251
+ hi Special ctermfg=255
+
+ hi Garbage ctermbg=088
+ hi TabStop ctermbg=016
+ hi Todo ctermfg=174 ctermbg=NONE
+
+ hi NixCode ctermfg=040
+ hi NixData ctermfg=046
+ hi NixQuote ctermfg=071
+
+ hi diffNewFile ctermfg=207
+ hi diffFile ctermfg=207
+ hi diffLine ctermfg=207
+ hi diffSubname ctermfg=207
+ hi diffAdded ctermfg=010
+ hi diffRemoved ctermfg=009
+ '';
+ })))
+ ((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))}
+ '';
+ })))
+ ((rtp: rtp // { inherit rtp; }) (pkgs.writeTextFile (let
+ name = "showsyntax";
+ in {
+ name = "vim-plugin-${name}-1.0.0";
+ destination = "/plugin/${name}.vim";
+ text = /* vim */ ''
+ if exists('g:loaded_showsyntax')
+ finish
+ endif
+ let g:loaded_showsyntax = 0
+
+ fu! ShowSyntax()
+ let id = synID(line("."), col("."), 1)
+ let name = synIDattr(id, "name")
+ let transName = synIDattr(synIDtrans(id),"name")
+ if name != transName
+ let name .= " (" . transName . ")"
+ endif
+ echo "Syntax: " . name
+ endfu
+
+ command! -n=0 -bar ShowSyntax :call ShowSyntax()
+ '';
+ })))
];
dirs = {
@@ -79,47 +157,16 @@ let
filetype plugin indent on
set t_Co=256
- colorscheme industry
+ colorscheme hack
syntax on
- au Syntax * syn match Tabstop containedin=ALL /\t\+/
- \ | hi Tabstop ctermbg=16
- \ | syn match TrailingSpace containedin=ALL /\s\+$/
- \ | hi TrailingSpace ctermbg=88
- \ | hi Normal ctermfg=White
-
- au BufRead,BufNewFile *.hs so ${pkgs.writeText "hs.vim" ''
- syn region String start=+\[[[:alnum:]]*|+ end=+|]+
- ''}
-
- au BufRead,BufNewFile *.nix so ${pkgs.writeText "nix.vim" ''
- setf nix
- set isk=@,48-57,_,192-255,-,'
-
- " Ref <nix/src/libexpr/lexer.l>
- syn match INT /\<[0-9]\+\>/
- syn match PATH /[a-zA-Z0-9\.\_\-\+]*\(\/[a-zA-Z0-9\.\_\-\+]\+\)\+/
- syn match HPATH /\~\(\/[a-zA-Z0-9\.\_\-\+]\+\)\+/
- syn match SPATH /<[a-zA-Z0-9\.\_\-\+]\+\(\/[a-zA-Z0-9\.\_\-\+]\+\)*>/
- syn match URI /[a-zA-Z][a-zA-Z0-9\+\-\.]*:[a-zA-Z0-9\%\/\?\:\@\&\=\+\$\,\-\_\.\!\~\*\']\+/
- hi link INT Constant
- hi link PATH Constant
- hi link HPATH Constant
- hi link SPATH Constant
- hi link URI Constant
-
- syn match String /"\([^\\"]\|\\.\)*"/
- syn match Comment /\(^\|\s\)#.*/
-
- " Haskell comments
- syn region Comment start=/\(^\|\s\){-#/ end=/#-}/
- syn match Comment /\(^\|\s\)--.*/
-
- " Vim comments
- syn match Comment /\(^\|\s\)"[^"]*$/
-
- let b:current_syntax = "nix"
- ''}
+ au Syntax * syn match Garbage containedin=ALL /\s\+$/
+ \ | syn match TabStop containedin=ALL /\t\+/
+ \ | syn keyword Todo containedin=ALL TODO
+
+ au BufRead,BufNewFile *.hs so ${hs.vim}
+
+ au BufRead,BufNewFile *.nix so ${nix.vim}
au BufRead,BufNewFile /dev/shm/* set nobackup nowritebackup noswapfile
@@ -152,5 +199,130 @@ let
noremap <esc>[d <nop> | noremap! <esc>[d <nop>
vnoremap u <nop>
'';
+
+ hs.vim = pkgs.writeText "hs.vim" ''
+ syn region String start=+\[[[:alnum:]]*|+ end=+|]+
+
+ hi link ConId Identifier
+ hi link VarId Identifier
+ hi link hsDelimiter Delimiter
+ '';
+
+ nix.vim = pkgs.writeText "nix.vim" ''
+ setf nix
+
+ syn match NixCode /./
+
+ " 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 region NixSTRING
+ \ matchgroup=NixSTRING
+ \ start='"'
+ \ skip='\\"'
+ \ end='"'
+ syn region NixIND_STRING
+ \ matchgroup=NixIND_STRING
+ \ start="'''"
+ \ skip="'''\('\|[$]\|\\[nrt]\)"
+ \ end="'''"
+
+ syn cluster NixStrings contains=NixSTRING,NixIND_STRING
+
+ syn match NixCommentMatch /\(^\|\s\)#.*/
+ syn region NixCommentRegion start="/\*" end="\*/"
+
+ hi link NixCode Statement
+ hi link NixData Constant
+ 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 NixIND_STRING NixData
+
+ hi link NixEnter NixCode
+ hi link NixExit NixData
+ hi link NixQuote NixData
+ hi link NixQuote2 NixQuote
+ hi link NixQuote3 NixQuote
+
+ syn cluster NixSubLangs contains=NONE
+
+ ${concatStringsSep "\n" (mapAttrsToList (lang: { extraStart ? null }: let
+ startAlts = filter isString [
+ ''/\* ${lang} \*/''
+ extraStart
+ ];
+ sigil = ''\(${concatStringsSep ''\|'' startAlts}\)[ \t\r\n]*'';
+ in /* vim */ ''
+ syn include @${lang}Syntax syntax/${lang}.vim
+ unlet b:current_syntax
+
+ syn region ${lang}Block_NixSTRING
+ \ matchgroup=NixExit
+ \ extend
+ \ start='${replaceStrings ["'"] ["\\'"] sigil}"'
+ \ skip='\\"'
+ \ end='"'
+ \ contains=@${lang}Syntax
+
+ syn region ${lang}Block_NixIND_STRING
+ \ matchgroup=NixExit
+ \ extend
+ \ start="${replaceStrings ["\""] ["\\\""] sigil}'''"
+ \ skip="'''\('\|[$]\|\\[nrt]\)"
+ \ end="'''"
+ \ contains=@${lang}Syntax
+
+ syn cluster NixSubLangs
+ \ add=@${lang}Syntax,${lang}Block_NixSTRING,${lang}Block_NixIND_STRING
+
+ hi link ${lang}Block_NixSTRING Statement
+ hi link ${lang}Block_NixIND_STRING Statement
+ '') {
+ c = {};
+ cabal = {};
+ haskell = {};
+ sh.extraStart = ''write\(Ba\|Da\)sh[^ \t\r\n]*[ \t\r\n]*"[^"]*"'';
+ vim.extraStart =
+ ''write[^ \t\r\n]*[ \t\r\n]*"\(\([^"]*\.\)\?vimrc\|[^"]*\.vim\)"'';
+ })}
+
+ " Clear syntax that interferes with NixBlock.
+ " TODO redefine NixBlock so syntax don't have to be cleared
+ syn clear shOperator shSetList shVarAssign
+
+ syn region NixBlock
+ \ matchgroup=NixEnter
+ \ start="[$]{"
+ \ end="}"
+ \ contains=TOP
+ \ containedin=@NixSubLangs,@NixStrings
+
+ syn region NixBlockHack
+ \ matchgroup=NixEnter
+ \ 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
+
+ syn sync fromstart
+
+ let b:current_syntax = "nix"
+
+ set isk=@,48-57,_,192-255,-,'
+ '';
in
out