Merge remote-tracking branch 'ni/master'
This commit is contained in:
commit
680d5b4cff
@ -18,6 +18,7 @@
|
||||
];
|
||||
|
||||
krebs.build.host = config.krebs.hosts.hotdog;
|
||||
krebs.github-hosts-sync.enable = true;
|
||||
|
||||
boot.isContainer = true;
|
||||
networking.useDHCP = false;
|
||||
|
@ -11,17 +11,25 @@ let
|
||||
|
||||
api = {
|
||||
enable = mkEnableOption "krebs.github-hosts-sync";
|
||||
port = mkOption {
|
||||
type = types.int; # TODO port type
|
||||
default = 1028;
|
||||
};
|
||||
dataDir = mkOption {
|
||||
type = types.str; # TODO path (but not just into store)
|
||||
default = "/var/lib/github-hosts-sync";
|
||||
};
|
||||
srcDir = mkOption {
|
||||
type = types.str;
|
||||
default = "${config.krebs.tinc.retiolum.confDir}/hosts";
|
||||
};
|
||||
ssh-identity-file = mkOption {
|
||||
type = types.suffixed-str [".ssh.id_ed25519" ".ssh.id_rsa"];
|
||||
default = toString <secrets/github-hosts-sync.ssh.id_rsa>;
|
||||
default = toString <secrets/github-hosts-sync.ssh.id_ed25519>;
|
||||
};
|
||||
url = mkOption {
|
||||
type = types.str;
|
||||
default = "git@github.com:krebs/hosts.git";
|
||||
};
|
||||
workTree = mkOption {
|
||||
type = types.absolute-pathname;
|
||||
default = "${cfg.dataDir}/cache";
|
||||
};
|
||||
};
|
||||
|
||||
@ -30,13 +38,18 @@ let
|
||||
after = [ "network.target" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
environment = {
|
||||
port = toString cfg.port;
|
||||
GITHUB_HOST_SYNC_USER_MAIL = user.mail;
|
||||
GITHUB_HOST_SYNC_USER_NAME = user.name;
|
||||
GITHUB_HOST_SYNC_SRCDIR = cfg.srcDir;
|
||||
GITHUB_HOST_SYNC_WORKTREE = cfg.workTree;
|
||||
GITHUB_HOST_SYNC_URL = cfg.url;
|
||||
};
|
||||
serviceConfig = {
|
||||
PermissionsStartOnly = "true";
|
||||
SyslogIdentifier = "github-hosts-sync";
|
||||
User = user.name;
|
||||
Restart = "always";
|
||||
Type = "oneshot";
|
||||
RemainAfterExit = true;
|
||||
ExecStartPre = pkgs.writeDash "github-hosts-sync-init" ''
|
||||
set -euf
|
||||
install -m 0711 -o ${user.name} -d ${cfg.dataDir}
|
||||
@ -56,6 +69,7 @@ let
|
||||
};
|
||||
|
||||
user = rec {
|
||||
mail = "${name}@${config.krebs.build.host.name}";
|
||||
name = "github-hosts-sync";
|
||||
uid = genid_uint31 name;
|
||||
};
|
||||
|
@ -28,12 +28,22 @@
|
||||
"140.82.125.*"
|
||||
"140.82.126.*"
|
||||
"140.82.127.*"
|
||||
"13.114.40.48"
|
||||
"13.229.188.59"
|
||||
"13.234.176.102"
|
||||
"13.234.210.38"
|
||||
"13.236.229.21"
|
||||
"13.237.44.5"
|
||||
"13.250.177.223"
|
||||
"15.164.81.167"
|
||||
"18.194.104.89"
|
||||
"18.195.85.27"
|
||||
"35.159.8.160"
|
||||
"52.192.72.89"
|
||||
"52.64.108.95"
|
||||
"52.69.186.44"
|
||||
"52.74.223.119"
|
||||
"52.78.231.108"
|
||||
];
|
||||
publicKey = "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==";
|
||||
};
|
||||
|
@ -1,37 +1,32 @@
|
||||
{ pkgs, stdenv, ... }:
|
||||
|
||||
stdenv.mkDerivation {
|
||||
name = "github-hosts-sync";
|
||||
stdenv.mkDerivation rec {
|
||||
name = "github-hosts-sync-${version}";
|
||||
version = "2.0.0";
|
||||
|
||||
src = pkgs.painload;
|
||||
src = ./src;
|
||||
|
||||
phases = [
|
||||
"unpackPhase"
|
||||
"installPhase"
|
||||
];
|
||||
|
||||
installPhase =
|
||||
let
|
||||
ca-bundle = "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt";
|
||||
path = stdenv.lib.makeBinPath (with pkgs; [
|
||||
coreutils
|
||||
findutils
|
||||
git
|
||||
gnugrep
|
||||
gnused
|
||||
nettools
|
||||
openssh
|
||||
socat
|
||||
]);
|
||||
in
|
||||
installPhase = let
|
||||
ca-bundle = "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt";
|
||||
path = stdenv.lib.makeBinPath [
|
||||
pkgs.git
|
||||
pkgs.nettools
|
||||
pkgs.openssh
|
||||
pkgs.rsync
|
||||
];
|
||||
in
|
||||
''
|
||||
mkdir -p $out/bin
|
||||
|
||||
sed \
|
||||
's,^main() {$,&\n export PATH=${path} GIT_SSL_CAINFO=${ca-bundle},' \
|
||||
< ./retiolum/scripts/github_hosts_sync/hosts-sync \
|
||||
> $out/bin/github-hosts-sync
|
||||
cp hosts-sync $out/bin/github-hosts-sync
|
||||
|
||||
chmod +x $out/bin/github-hosts-sync
|
||||
sed -i \
|
||||
'1s,$,\nPATH=${path}''${PATH+:$PATH} GIT_SSL_CAINFO=${ca-bundle},' \
|
||||
$out/bin/github-hosts-sync
|
||||
'';
|
||||
}
|
||||
|
33
krebs/5pkgs/simple/github-hosts-sync/src/hosts-sync
Executable file
33
krebs/5pkgs/simple/github-hosts-sync/src/hosts-sync
Executable file
@ -0,0 +1,33 @@
|
||||
#! /bin/sh
|
||||
set -efu
|
||||
exec >&2
|
||||
|
||||
hosts_srcdir=$GITHUB_HOST_SYNC_SRCDIR
|
||||
hosts_worktree=${GITHUB_HOST_SYNC_WORKTREE-/tmp/hosts}
|
||||
hosts_url=${GITHUB_HOST_SYNC_URL-git@github.com:krebs/hosts.git}
|
||||
user_mail=${GITHUB_HOST_SYNC_USER_MAIL-$LOGNAME@$(hostname)}
|
||||
user_name=${GITHUB_HOST_SYNC_USER_NAME-$LOGNAME}
|
||||
|
||||
test -d "$hosts_worktree" || git clone "$hosts_url" "$hosts_worktree"
|
||||
|
||||
cd "$hosts_worktree"
|
||||
|
||||
git pull
|
||||
|
||||
rsync \
|
||||
--chmod D755,F644 \
|
||||
--delete-excluded \
|
||||
--filter 'protect .git' \
|
||||
--recursive \
|
||||
--verbose \
|
||||
"$hosts_srcdir/" \
|
||||
.
|
||||
|
||||
git add .
|
||||
|
||||
if test -n "$(git status --porcelain)"; then
|
||||
git config user.email "$user_mail"
|
||||
git config user.name "$user_name"
|
||||
git commit -m bump
|
||||
git push
|
||||
fi
|
@ -57,6 +57,11 @@
|
||||
HandleSuspendKey=ignore
|
||||
'';
|
||||
|
||||
# because extraConfig is not extra enough:
|
||||
services.logind.lidSwitch = "ignore";
|
||||
services.logind.lidSwitchDocked = "ignore";
|
||||
services.logind.lidSwitchExternalPower = "ignore";
|
||||
|
||||
services.xserver = {
|
||||
videoDriver = "intel";
|
||||
};
|
||||
|
@ -14,389 +14,17 @@ let {
|
||||
};
|
||||
|
||||
extra-runtimepath = concatMapStringsSep "," (pkg: "${pkg.rtp}") [
|
||||
# cannot use pkgs.vimPlugins.fzf-vim as it's missing :Rg
|
||||
(pkgs.vimUtils.buildVimPlugin {
|
||||
name = "fzf-2018-11-14";
|
||||
src = pkgs.fetchgit {
|
||||
url = https://github.com/junegunn/fzf.vim;
|
||||
rev = "ad1833ecbc9153b6e34a4292dc089a58c4bcb8dc";
|
||||
sha256 = "1z2q71q6l9hq9fqfqpj1svhyk4yk1bzw1ljhksx4bnpz8gkfbx2m";
|
||||
};
|
||||
})
|
||||
pkgs.tv.vimPlugins.elixir
|
||||
pkgs.tv.vimPlugins.file-line
|
||||
pkgs.tv.vimPlugins.fzf
|
||||
pkgs.tv.vimPlugins.hack
|
||||
pkgs.tv.vimPlugins.jq
|
||||
pkgs.tv.vimPlugins.nix
|
||||
pkgs.tv.vimPlugins.showsyntax
|
||||
pkgs.tv.vimPlugins.tv
|
||||
pkgs.tv.vimPlugins.vim
|
||||
pkgs.vimPlugins.fzfWrapper
|
||||
pkgs.vimPlugins.undotree
|
||||
(pkgs.vimUtils.buildVimPlugin {
|
||||
name = "vim-elixir-2018-08-17";
|
||||
src = pkgs.fetchgit {
|
||||
url = https://github.com/elixir-editors/vim-elixir;
|
||||
rev = "0a847f0faed5ba2d94bb3d51f355c50f37ba025b";
|
||||
sha256 = "1jl85wpgywhcvhgw02y8zpvqf0glr4i8522kxpvhsiacb1v1xh04";
|
||||
};
|
||||
})
|
||||
(pkgs.vimUtils.buildVimPlugin {
|
||||
name = "vim-syntax-jq";
|
||||
src = pkgs.fetchgit {
|
||||
url = https://github.com/vito-c/jq.vim;
|
||||
rev = "99d55a300047946a82ecdd7617323a751199ad2d";
|
||||
sha256 = "09c94nah47wx0cr556w61h6pfznxld18pfblc3nv51ivbw7cjqyx";
|
||||
};
|
||||
})
|
||||
(pkgs.vimUtils.buildVimPlugin {
|
||||
name = "file-line-1.0";
|
||||
src = pkgs.fetchgit {
|
||||
url = git://github.com/bogado/file-line;
|
||||
rev = "refs/tags/1.0";
|
||||
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
|
||||
|
||||
hi Search cterm=NONE ctermbg=216
|
||||
'';
|
||||
})))
|
||||
((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()
|
||||
'';
|
||||
})))
|
||||
((rtp: rtp // { inherit rtp; }) (pkgs.write "vim-tv" {
|
||||
#
|
||||
# Haskell
|
||||
#
|
||||
"/ftplugin/haskell.vim".text = ''
|
||||
if exists("g:vim_tv_ftplugin_haskell_loaded")
|
||||
finish
|
||||
endif
|
||||
let g:vim_tv_ftplugin_haskell_loaded = 1
|
||||
|
||||
setlocal iskeyword+='
|
||||
'';
|
||||
#
|
||||
# TODO
|
||||
#
|
||||
"/ftdetect/todo.vim".text = ''
|
||||
au BufRead,BufNewFile TODO set ft=todo
|
||||
'';
|
||||
"/ftplugin/todo.vim".text = ''
|
||||
setlocal foldmethod=syntax
|
||||
'';
|
||||
"/syntax/todo.vim".text = ''
|
||||
syn match todoComment /#.*/
|
||||
|
||||
syn match todoDate /^[1-9]\S*/
|
||||
\ nextgroup=todoSummary
|
||||
|
||||
syn region todoSummary
|
||||
\ contained
|
||||
\ contains=todoTag
|
||||
\ start="." end="$\n"
|
||||
\ nextgroup=todoBlock
|
||||
|
||||
syn match todoTag /\[[A-Za-z]\+\]/hs=s+1,he=e-1
|
||||
\ contained
|
||||
|
||||
syn region todoBlock
|
||||
\ contained
|
||||
\ contains=Comment
|
||||
\ fold
|
||||
\ start="^[^1-9]" end="^[1-9]"re=s-1,he=s-1,me=s-1
|
||||
|
||||
syn sync minlines=1000
|
||||
|
||||
hi link todoComment Comment
|
||||
hi todoDate ctermfg=255
|
||||
hi todoSummary ctermfg=229
|
||||
hi todoBlock ctermfg=248
|
||||
hi todoTag ctermfg=217
|
||||
'';
|
||||
}))
|
||||
((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 = {
|
||||
|
7
tv/5pkgs/vim/default.nix
Normal file
7
tv/5pkgs/vim/default.nix
Normal file
@ -0,0 +1,7 @@
|
||||
with import <stockholm/lib>;
|
||||
|
||||
self: super: {
|
||||
tv = super.tv // {
|
||||
vimPlugins = mapNixDir (path: self.callPackage path {}) ./.;
|
||||
};
|
||||
}
|
9
tv/5pkgs/vim/elixir.nix
Normal file
9
tv/5pkgs/vim/elixir.nix
Normal file
@ -0,0 +1,9 @@
|
||||
{ pkgs }:
|
||||
pkgs.vimUtils.buildVimPlugin {
|
||||
name = "vim-elixir-2018-08-17";
|
||||
src = pkgs.fetchgit {
|
||||
url = https://github.com/elixir-editors/vim-elixir;
|
||||
rev = "0a847f0faed5ba2d94bb3d51f355c50f37ba025b";
|
||||
sha256 = "1jl85wpgywhcvhgw02y8zpvqf0glr4i8522kxpvhsiacb1v1xh04";
|
||||
};
|
||||
}
|
10
tv/5pkgs/vim/file-line.nix
Normal file
10
tv/5pkgs/vim/file-line.nix
Normal file
@ -0,0 +1,10 @@
|
||||
{ pkgs }:
|
||||
|
||||
pkgs.vimUtils.buildVimPlugin {
|
||||
name = "file-line-1.0";
|
||||
src = pkgs.fetchgit {
|
||||
url = git://github.com/bogado/file-line;
|
||||
rev = "refs/tags/1.0";
|
||||
sha256 = "0z47zq9rqh06ny0q8lpcdsraf3lyzn9xvb59nywnarf3nxrk6hx0";
|
||||
};
|
||||
}
|
11
tv/5pkgs/vim/fzf.nix
Normal file
11
tv/5pkgs/vim/fzf.nix
Normal file
@ -0,0 +1,11 @@
|
||||
{ pkgs }:
|
||||
|
||||
# cannot use pkgs.vimPlugins.fzf-vim as it's missing :Rg
|
||||
pkgs.vimUtils.buildVimPlugin {
|
||||
name = "fzf-2018-11-14";
|
||||
src = pkgs.fetchgit {
|
||||
url = https://github.com/junegunn/fzf.vim;
|
||||
rev = "ad1833ecbc9153b6e34a4292dc089a58c4bcb8dc";
|
||||
sha256 = "1z2q71q6l9hq9fqfqpj1svhyk4yk1bzw1ljhksx4bnpz8gkfbx2m";
|
||||
};
|
||||
}
|
46
tv/5pkgs/vim/hack.nix
Normal file
46
tv/5pkgs/vim/hack.nix
Normal file
@ -0,0 +1,46 @@
|
||||
with import <stockholm/lib>;
|
||||
{ pkgs }:
|
||||
|
||||
(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
|
||||
|
||||
hi Search cterm=NONE ctermbg=216
|
||||
'';
|
||||
}))
|
10
tv/5pkgs/vim/jq.nix
Normal file
10
tv/5pkgs/vim/jq.nix
Normal file
@ -0,0 +1,10 @@
|
||||
{ pkgs }:
|
||||
|
||||
pkgs.vimUtils.buildVimPlugin {
|
||||
name = "vim-syntax-jq";
|
||||
src = pkgs.fetchgit {
|
||||
url = https://github.com/vito-c/jq.vim;
|
||||
rev = "99d55a300047946a82ecdd7617323a751199ad2d";
|
||||
sha256 = "09c94nah47wx0cr556w61h6pfznxld18pfblc3nv51ivbw7cjqyx";
|
||||
};
|
||||
}
|
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*!.*/
|
||||
'';
|
||||
})
|
26
tv/5pkgs/vim/showsyntax.nix
Normal file
26
tv/5pkgs/vim/showsyntax.nix
Normal file
@ -0,0 +1,26 @@
|
||||
{ pkgs }:
|
||||
|
||||
(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()
|
||||
'';
|
||||
}))
|
53
tv/5pkgs/vim/tv.nix
Normal file
53
tv/5pkgs/vim/tv.nix
Normal file
@ -0,0 +1,53 @@
|
||||
{ pkgs }:
|
||||
|
||||
(rtp: rtp // { inherit rtp; }) (pkgs.write "vim-tv" {
|
||||
#
|
||||
# Haskell
|
||||
#
|
||||
"/ftplugin/haskell.vim".text = ''
|
||||
if exists("g:vim_tv_ftplugin_haskell_loaded")
|
||||
finish
|
||||
endif
|
||||
let g:vim_tv_ftplugin_haskell_loaded = 1
|
||||
|
||||
setlocal iskeyword+='
|
||||
'';
|
||||
#
|
||||
# TODO
|
||||
#
|
||||
"/ftdetect/todo.vim".text = ''
|
||||
au BufRead,BufNewFile TODO set ft=todo
|
||||
'';
|
||||
"/ftplugin/todo.vim".text = ''
|
||||
setlocal foldmethod=syntax
|
||||
'';
|
||||
"/syntax/todo.vim".text = ''
|
||||
syn match todoComment /#.*/
|
||||
|
||||
syn match todoDate /^[1-9]\S*/
|
||||
\ nextgroup=todoSummary
|
||||
|
||||
syn region todoSummary
|
||||
\ contained
|
||||
\ contains=todoTag
|
||||
\ start="." end="$\n"
|
||||
\ nextgroup=todoBlock
|
||||
|
||||
syn match todoTag /\[[A-Za-z]\+\]/hs=s+1,he=e-1
|
||||
\ contained
|
||||
|
||||
syn region todoBlock
|
||||
\ contained
|
||||
\ contains=Comment
|
||||
\ fold
|
||||
\ start="^[^1-9]" end="^[1-9]"re=s-1,he=s-1,me=s-1
|
||||
|
||||
syn sync minlines=1000
|
||||
|
||||
hi link todoComment Comment
|
||||
hi todoDate ctermfg=255
|
||||
hi todoSummary ctermfg=229
|
||||
hi todoBlock ctermfg=248
|
||||
hi todoTag ctermfg=217
|
||||
'';
|
||||
})
|
16
tv/5pkgs/vim/vim.nix
Normal file
16
tv/5pkgs/vim/vim.nix
Normal file
@ -0,0 +1,16 @@
|
||||
with import <stockholm/lib>;
|
||||
{ pkgs }:
|
||||
|
||||
(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))}
|
||||
'';
|
||||
}))
|
Loading…
Reference in New Issue
Block a user