tv vim: move nix to overlay
This commit is contained in:
parent
86972b5b60
commit
06f8c8986b
@ -19,228 +19,12 @@ let {
|
|||||||
pkgs.tv.vimPlugins.fzf
|
pkgs.tv.vimPlugins.fzf
|
||||||
pkgs.tv.vimPlugins.hack
|
pkgs.tv.vimPlugins.hack
|
||||||
pkgs.tv.vimPlugins.jq
|
pkgs.tv.vimPlugins.jq
|
||||||
|
pkgs.tv.vimPlugins.nix
|
||||||
pkgs.tv.vimPlugins.showsyntax
|
pkgs.tv.vimPlugins.showsyntax
|
||||||
pkgs.tv.vimPlugins.tv
|
pkgs.tv.vimPlugins.tv
|
||||||
pkgs.tv.vimPlugins.vim
|
pkgs.tv.vimPlugins.vim
|
||||||
pkgs.vimPlugins.fzfWrapper
|
pkgs.vimPlugins.fzfWrapper
|
||||||
pkgs.vimPlugins.undotree
|
pkgs.vimPlugins.undotree
|
||||||
((rtp: rtp // { inherit rtp; }) (pkgs.write "vim-syntax-nix-nested" {
|
|
||||||
"/syntax/haskell.vim".text = ''
|
|
||||||
syn region String start=+\[[[:alnum:]]*|+ end=+|]+
|
|
||||||
|
|
||||||
hi link ConId Identifier
|
|
||||||
hi link VarId Identifier
|
|
||||||
hi link hsDelimiter Delimiter
|
|
||||||
'';
|
|
||||||
"/syntax/nix.vim".text = ''
|
|
||||||
"" Quit when a (custom) syntax file was already loaded
|
|
||||||
"if exists("b:current_syntax")
|
|
||||||
" finish
|
|
||||||
"endif
|
|
||||||
|
|
||||||
"setf nix
|
|
||||||
|
|
||||||
" Ref <nix/src/libexpr/lexer.l>
|
|
||||||
syn match NixID /[a-zA-Z\_][a-zA-Z0-9\_\'\-]*/
|
|
||||||
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 match NixOther /[-!+&<>|():/;=.,?\[\]*@]/
|
|
||||||
|
|
||||||
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 NixID NixCode
|
|
||||||
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 NixOther NixCode
|
|
||||||
hi link NixQuote NixData
|
|
||||||
|
|
||||||
syn cluster nix_has_dollar_curly contains=@nix_ind_strings,@nix_strings
|
|
||||||
syn cluster nix_ind_strings contains=NixIND_STRING
|
|
||||||
syn cluster nix_strings contains=NixSTRING
|
|
||||||
|
|
||||||
${concatStringsSep "\n" (mapAttrsToList (name: {
|
|
||||||
extraStart ? null,
|
|
||||||
lang ? name
|
|
||||||
}:
|
|
||||||
let
|
|
||||||
startAlts = filter isString [
|
|
||||||
''/\* ${name} \*/''
|
|
||||||
extraStart
|
|
||||||
];
|
|
||||||
sigil = ''\(${concatStringsSep ''\|'' startAlts}\)[ \t\r\n]*'';
|
|
||||||
in /* vim */ ''
|
|
||||||
syn include @nix_${lang}_syntax syntax/${lang}.vim
|
|
||||||
if exists("b:current_syntax")
|
|
||||||
unlet b:current_syntax
|
|
||||||
endif
|
|
||||||
|
|
||||||
syn match nix_${lang}_sigil
|
|
||||||
\ X${replaceStrings ["X"] ["\\X"] sigil}\ze\('''\|"\)X
|
|
||||||
\ nextgroup=nix_${lang}_region_IND_STRING,nix_${lang}_region_STRING
|
|
||||||
\ transparent
|
|
||||||
|
|
||||||
syn region nix_${lang}_region_STRING
|
|
||||||
\ matchgroup=NixSTRING
|
|
||||||
\ start='"'
|
|
||||||
\ skip='\\"'
|
|
||||||
\ end='"'
|
|
||||||
\ contained
|
|
||||||
\ contains=@nix_${lang}_syntax
|
|
||||||
\ transparent
|
|
||||||
|
|
||||||
syn region nix_${lang}_region_IND_STRING
|
|
||||||
\ matchgroup=NixIND_STRING
|
|
||||||
\ start="'''"
|
|
||||||
\ skip="'''\('\|[$]\|\\[nrt]\)"
|
|
||||||
\ end="'''"
|
|
||||||
\ contained
|
|
||||||
\ contains=@nix_${lang}_syntax
|
|
||||||
\ transparent
|
|
||||||
|
|
||||||
syn cluster nix_ind_strings
|
|
||||||
\ add=nix_${lang}_region_IND_STRING
|
|
||||||
|
|
||||||
syn cluster nix_strings
|
|
||||||
\ add=nix_${lang}_region_STRING
|
|
||||||
|
|
||||||
" This is required because containedin isn't transitive.
|
|
||||||
syn cluster nix_has_dollar_curly
|
|
||||||
\ add=@nix_${lang}_syntax
|
|
||||||
'') (let
|
|
||||||
|
|
||||||
capitalize = s: let
|
|
||||||
xs = stringToCharacters s;
|
|
||||||
in
|
|
||||||
toUpper (head xs) + concatStrings (tail xs);
|
|
||||||
|
|
||||||
alts = xs: ''\(${concatStringsSep ''\|'' xs}\)'';
|
|
||||||
def = k: ''${k}[ \t\r\n]*='';
|
|
||||||
writer = k: ''write${k}[^ \t\r\n]*[ \t\r\n]*\("[^"]*"\|[a-z]\+\)'';
|
|
||||||
|
|
||||||
writerExt = k: writerName ''[^"]*\.${k}'';
|
|
||||||
writerName = k: ''write[^ \t\r\n]*[ \t\r\n]*"${k}"'';
|
|
||||||
|
|
||||||
in {
|
|
||||||
c = {};
|
|
||||||
cabal = {};
|
|
||||||
diff = {};
|
|
||||||
haskell = {};
|
|
||||||
jq.extraStart = alts [
|
|
||||||
(writer "Jq")
|
|
||||||
(writerExt "jq")
|
|
||||||
];
|
|
||||||
javascript.extraStart = ''/\* js \*/'';
|
|
||||||
lua = {};
|
|
||||||
python.extraStart = ''/\* py \*/'';
|
|
||||||
sed.extraStart = writer "Sed";
|
|
||||||
sh.extraStart = let
|
|
||||||
phases = [
|
|
||||||
"unpack"
|
|
||||||
"patch"
|
|
||||||
"configure"
|
|
||||||
"build"
|
|
||||||
"check"
|
|
||||||
"install"
|
|
||||||
"fixup"
|
|
||||||
"installCheck"
|
|
||||||
"dist"
|
|
||||||
];
|
|
||||||
shells = [
|
|
||||||
"ash"
|
|
||||||
"bash"
|
|
||||||
"dash"
|
|
||||||
];
|
|
||||||
in alts [
|
|
||||||
(def "shellHook")
|
|
||||||
(def "${alts phases}Phase")
|
|
||||||
(def "${alts ["pre" "post"]}${alts (map capitalize phases)}")
|
|
||||||
(writer (alts (map capitalize shells)))
|
|
||||||
];
|
|
||||||
yaml = {};
|
|
||||||
vim.extraStart = alts [
|
|
||||||
(def ''"[^"]*\.vim"\.text'')
|
|
||||||
(writerExt "vim")
|
|
||||||
(writerName ''\([^"]*\.\)\?vimrc'')
|
|
||||||
];
|
|
||||||
xdefaults = {};
|
|
||||||
xmodmap = {};
|
|
||||||
}))}
|
|
||||||
|
|
||||||
" Clear syntax that interferes with nixINSIDE_DOLLAR_CURLY.
|
|
||||||
syn clear shVarAssign
|
|
||||||
|
|
||||||
syn region nixINSIDE_DOLLAR_CURLY
|
|
||||||
\ matchgroup=NixEnter
|
|
||||||
\ start="[$]{"
|
|
||||||
\ end="}"
|
|
||||||
\ contains=TOP
|
|
||||||
\ containedin=@nix_has_dollar_curly
|
|
||||||
\ transparent
|
|
||||||
|
|
||||||
syn region nix_inside_curly
|
|
||||||
\ matchgroup=NixEnter
|
|
||||||
\ start="{"
|
|
||||||
\ end="}"
|
|
||||||
\ contains=TOP
|
|
||||||
\ containedin=nixINSIDE_DOLLAR_CURLY,nix_inside_curly
|
|
||||||
\ transparent
|
|
||||||
|
|
||||||
syn match NixQuote /'''\(''$\|\\.\)/he=s+2
|
|
||||||
\ containedin=@nix_ind_strings
|
|
||||||
\ contained
|
|
||||||
|
|
||||||
syn match NixQuote /'''\('\|\\.\)/he=s+1
|
|
||||||
\ containedin=@nix_ind_strings
|
|
||||||
\ contained
|
|
||||||
|
|
||||||
syn match NixQuote /\\./he=s+1
|
|
||||||
\ containedin=@nix_strings
|
|
||||||
\ contained
|
|
||||||
|
|
||||||
syn sync fromstart
|
|
||||||
|
|
||||||
let b:current_syntax = "nix"
|
|
||||||
|
|
||||||
set isk=@,48-57,_,192-255,-,'
|
|
||||||
'';
|
|
||||||
"/syntax/sed.vim".text = ''
|
|
||||||
syn region sedBranch
|
|
||||||
\ matchgroup=sedFunction start="T"
|
|
||||||
\ matchgroup=sedSemicolon end=";\|$"
|
|
||||||
\ contains=sedWhitespace
|
|
||||||
'';
|
|
||||||
"/syntax/xmodmap.vim".text = ''
|
|
||||||
syn match xmodmapComment /^\s*!.*/
|
|
||||||
'';
|
|
||||||
}))
|
|
||||||
];
|
];
|
||||||
|
|
||||||
dirs = {
|
dirs = {
|
||||||
|
222
tv/5pkgs/vim/nix.nix
Normal file
222
tv/5pkgs/vim/nix.nix
Normal file
@ -0,0 +1,222 @@
|
|||||||
|
with import <stockholm/lib>;
|
||||||
|
{ pkgs }:
|
||||||
|
|
||||||
|
(rtp: rtp // { inherit rtp; }) (pkgs.write "vim-syntax-nix-nested" {
|
||||||
|
"/syntax/haskell.vim".text = ''
|
||||||
|
syn region String start=+\[[[:alnum:]]*|+ end=+|]+
|
||||||
|
|
||||||
|
hi link ConId Identifier
|
||||||
|
hi link VarId Identifier
|
||||||
|
hi link hsDelimiter Delimiter
|
||||||
|
'';
|
||||||
|
"/syntax/nix.vim".text = ''
|
||||||
|
"" Quit when a (custom) syntax file was already loaded
|
||||||
|
"if exists("b:current_syntax")
|
||||||
|
" finish
|
||||||
|
"endif
|
||||||
|
|
||||||
|
"setf nix
|
||||||
|
|
||||||
|
" Ref <nix/src/libexpr/lexer.l>
|
||||||
|
syn match NixID /[a-zA-Z\_][a-zA-Z0-9\_\'\-]*/
|
||||||
|
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 match NixOther /[-!+&<>|():/;=.,?\[\]*@]/
|
||||||
|
|
||||||
|
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 NixID NixCode
|
||||||
|
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 NixOther NixCode
|
||||||
|
hi link NixQuote NixData
|
||||||
|
|
||||||
|
syn cluster nix_has_dollar_curly contains=@nix_ind_strings,@nix_strings
|
||||||
|
syn cluster nix_ind_strings contains=NixIND_STRING
|
||||||
|
syn cluster nix_strings contains=NixSTRING
|
||||||
|
|
||||||
|
${concatStringsSep "\n" (mapAttrsToList (name: {
|
||||||
|
extraStart ? null,
|
||||||
|
lang ? name
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
startAlts = filter isString [
|
||||||
|
''/\* ${name} \*/''
|
||||||
|
extraStart
|
||||||
|
];
|
||||||
|
sigil = ''\(${concatStringsSep ''\|'' startAlts}\)[ \t\r\n]*'';
|
||||||
|
in /* vim */ ''
|
||||||
|
syn include @nix_${lang}_syntax syntax/${lang}.vim
|
||||||
|
if exists("b:current_syntax")
|
||||||
|
unlet b:current_syntax
|
||||||
|
endif
|
||||||
|
|
||||||
|
syn match nix_${lang}_sigil
|
||||||
|
\ X${replaceStrings ["X"] ["\\X"] sigil}\ze\('''\|"\)X
|
||||||
|
\ nextgroup=nix_${lang}_region_IND_STRING,nix_${lang}_region_STRING
|
||||||
|
\ transparent
|
||||||
|
|
||||||
|
syn region nix_${lang}_region_STRING
|
||||||
|
\ matchgroup=NixSTRING
|
||||||
|
\ start='"'
|
||||||
|
\ skip='\\"'
|
||||||
|
\ end='"'
|
||||||
|
\ contained
|
||||||
|
\ contains=@nix_${lang}_syntax
|
||||||
|
\ transparent
|
||||||
|
|
||||||
|
syn region nix_${lang}_region_IND_STRING
|
||||||
|
\ matchgroup=NixIND_STRING
|
||||||
|
\ start="'''"
|
||||||
|
\ skip="'''\('\|[$]\|\\[nrt]\)"
|
||||||
|
\ end="'''"
|
||||||
|
\ contained
|
||||||
|
\ contains=@nix_${lang}_syntax
|
||||||
|
\ transparent
|
||||||
|
|
||||||
|
syn cluster nix_ind_strings
|
||||||
|
\ add=nix_${lang}_region_IND_STRING
|
||||||
|
|
||||||
|
syn cluster nix_strings
|
||||||
|
\ add=nix_${lang}_region_STRING
|
||||||
|
|
||||||
|
" This is required because containedin isn't transitive.
|
||||||
|
syn cluster nix_has_dollar_curly
|
||||||
|
\ add=@nix_${lang}_syntax
|
||||||
|
'') (let
|
||||||
|
|
||||||
|
# TODO move this higher
|
||||||
|
capitalize = s: let
|
||||||
|
xs = stringToCharacters s;
|
||||||
|
in
|
||||||
|
toUpper (head xs) + concatStrings (tail xs);
|
||||||
|
|
||||||
|
alts = xs: ''\(${concatStringsSep ''\|'' xs}\)'';
|
||||||
|
def = k: ''${k}[ \t\r\n]*='';
|
||||||
|
writer = k: ''write${k}[^ \t\r\n]*[ \t\r\n]*\("[^"]*"\|[a-z]\+\)'';
|
||||||
|
|
||||||
|
writerExt = k: writerName ''[^"]*\.${k}'';
|
||||||
|
writerName = k: ''write[^ \t\r\n]*[ \t\r\n]*"${k}"'';
|
||||||
|
|
||||||
|
in {
|
||||||
|
c = {};
|
||||||
|
cabal = {};
|
||||||
|
diff = {};
|
||||||
|
haskell = {};
|
||||||
|
jq.extraStart = alts [
|
||||||
|
(writer "Jq")
|
||||||
|
(writerExt "jq")
|
||||||
|
];
|
||||||
|
javascript.extraStart = ''/\* js \*/'';
|
||||||
|
lua = {};
|
||||||
|
#nginx = {};
|
||||||
|
python.extraStart = ''/\* py \*/'';
|
||||||
|
sed.extraStart = writer "Sed";
|
||||||
|
sh.extraStart = let
|
||||||
|
phases = [
|
||||||
|
"unpack"
|
||||||
|
"patch"
|
||||||
|
"configure"
|
||||||
|
"build"
|
||||||
|
"check"
|
||||||
|
"install"
|
||||||
|
"fixup"
|
||||||
|
"installCheck"
|
||||||
|
"dist"
|
||||||
|
];
|
||||||
|
shells = [
|
||||||
|
"ash"
|
||||||
|
"bash"
|
||||||
|
"dash"
|
||||||
|
];
|
||||||
|
in alts [
|
||||||
|
(def "shellHook")
|
||||||
|
(def "${alts phases}Phase")
|
||||||
|
(def "${alts ["pre" "post"]}${alts (map capitalize phases)}")
|
||||||
|
(writer (alts (map capitalize shells)))
|
||||||
|
];
|
||||||
|
yaml = {};
|
||||||
|
vim.extraStart = alts [
|
||||||
|
(def ''"[^"]*\.vim"\.text'')
|
||||||
|
(writerExt "vim")
|
||||||
|
(writerName ''\([^"]*\.\)\?vimrc'')
|
||||||
|
];
|
||||||
|
xdefaults = {};
|
||||||
|
xmodmap = {};
|
||||||
|
}))}
|
||||||
|
|
||||||
|
" Clear syntax that interferes with nixINSIDE_DOLLAR_CURLY.
|
||||||
|
syn clear shVarAssign
|
||||||
|
|
||||||
|
syn region nixINSIDE_DOLLAR_CURLY
|
||||||
|
\ matchgroup=NixEnter
|
||||||
|
\ start="[$]{"
|
||||||
|
\ end="}"
|
||||||
|
\ contains=TOP
|
||||||
|
\ containedin=@nix_has_dollar_curly
|
||||||
|
\ transparent
|
||||||
|
|
||||||
|
syn region nix_inside_curly
|
||||||
|
\ matchgroup=NixEnter
|
||||||
|
\ start="{"
|
||||||
|
\ end="}"
|
||||||
|
\ contains=TOP
|
||||||
|
\ containedin=nixINSIDE_DOLLAR_CURLY,nix_inside_curly
|
||||||
|
\ transparent
|
||||||
|
|
||||||
|
syn match NixQuote /'''\(''$\|\\.\)/he=s+2
|
||||||
|
\ containedin=@nix_ind_strings
|
||||||
|
\ contained
|
||||||
|
|
||||||
|
syn match NixQuote /'''\('\|\\.\)/he=s+1
|
||||||
|
\ containedin=@nix_ind_strings
|
||||||
|
\ contained
|
||||||
|
|
||||||
|
syn match NixQuote /\\./he=s+1
|
||||||
|
\ containedin=@nix_strings
|
||||||
|
\ contained
|
||||||
|
|
||||||
|
syn sync fromstart
|
||||||
|
|
||||||
|
let b:current_syntax = "nix"
|
||||||
|
|
||||||
|
set isk=@,48-57,_,192-255,-,'
|
||||||
|
'';
|
||||||
|
"/syntax/sed.vim".text = ''
|
||||||
|
syn region sedBranch
|
||||||
|
\ matchgroup=sedFunction start="T"
|
||||||
|
\ matchgroup=sedSemicolon end=";\|$"
|
||||||
|
\ contains=sedWhitespace
|
||||||
|
'';
|
||||||
|
"/syntax/xmodmap.vim".text = ''
|
||||||
|
syn match xmodmapComment /^\s*!.*/
|
||||||
|
'';
|
||||||
|
})
|
Loading…
Reference in New Issue
Block a user