this repo has no description

feat: extract scratch.vim to vim-backscratch

Changed files
+266 -124
ctags
.ctags.d
fish
.config
fish
functions
git
.config
kitty
.config
kitty
misc
nix
vim
.config
nvim
after
ftplugin
autoload
compiler
ftdetect
plugin
syntax
-15
ctags/.ctags.d/elixir.ctags
···
-
--langdef=Elixir
-
--langmap=Elixir:.ex.exs
-
--regex-Elixir=/^[ \t]*def(p?)[ \t]+([a-z_][a-zA-Z0-9_?!]*)/\2/f,functions,functions (def ...)/
-
--regex-Elixir=/^[ \t]*defcallback[ \t]+([a-z_][a-zA-Z0-9_?!]*)/\1/c,callbacks,callbacks (defcallback ...)/
-
--regex-Elixir=/^[ \t]*defdelegate[ \t]+([a-z_][a-zA-Z0-9_?!]*)/\1/d,delegates,delegates (defdelegate ...)/
-
--regex-Elixir=/^[ \t]*defexception[ \t]+([A-Z][a-zA-Z0-9_]*\.)*([A-Z][a-zA-Z0-9_?!]*)/\2/e,exceptions,exceptions (defexception ...)/
-
--regex-Elixir=/^[ \t]*defimpl[ \t]+([A-Z][a-zA-Z0-9_]*\.)*([A-Z][a-zA-Z0-9_?!]*)/\2/i,implementations,implementations (defimpl ...)/
-
--regex-Elixir=/^[ \t]*defmacro(p?)[ \t]+([a-z_][a-zA-Z0-9_?!]*)\(/\2/a,macros,macros (defmacro ...)/
-
--regex-Elixir=/^[ \t]*defguard(p?)[ \t]+([a-z_][a-zA-Z0-9_?!]*)\(/\2/g,guards,guards (defguard ...)/
-
--regex-Elixir=/^[ \t]*defmacro(p?)[ \t]+([a-zA-Z0-9_?!]+)?[ \t]+([^ \tA-Za-z0-9_]+)[ \t]*[a-zA-Z0-9_!?!]/\3/o,operators,operators (e.g. "defmacro a <<< b")/
-
--regex-Elixir=/^[ \t]*defmodule[ \t]+([A-Z][a-zA-Z0-9_]*\.)*([A-Z][a-zA-Z0-9_?!]*)/\2/m,modules,modules (defmodule ...)/
-
--regex-Elixir=/^[ \t]*defprotocol[ \t]+([A-Z][a-zA-Z0-9_]*\.)*([A-Z][a-zA-Z0-9_?!]*)/\2/p,protocols,protocols (defprotocol...)/
-
--regex-Elixir=/^[ \t]*Record\.defrecord[ \t]+:([a-zA-Z0-9_]+)/\1/r,records,records (defrecord...)/
-
--regex-Elixir=/^[ \t]*test[ \t]+\"([a-z_][a-zA-Z0-9_?! ]*)\"*/\1/t,tests,tests (test ...)/
-
--exclude=_build
--exclude=deps
--exclude=.elixir_ls
+30 -3
fish/.config/fish/config.fish
···
if not functions -q fundle
eval (curl -sfL https://git.io/fundle-install)
end
-
fundle plugin 'hauleth/agnoster'
-
fundle init
ulimit -n 10480
set fish_user_paths ~/bin ~/.nix-profile/bin /run/current-system/sw/bin
+
if type nix-locate ^/dev/null >/dev/null
+
function nix_locate_bin --on-event fish_command_not_found
+
if not test -t 1
+
__fish_default_command_not_found_handler $argv[1]
+
end
+
+
set -l cmd $argv[1]
+
set -l attrs (nix-locate --minimal --no-group --type x --type s --top-level --whole-name --at-root "/bin/$cmd")
+
+
switch (count $attrs)
+
case 0
+
echo "$cmd: command not found" >&2
+
case 1
+
echo "Found one package with $cmd, trying to run in 1s" >&2
+
sleep 1
+
if nix-build --no-out-link -A $attrs "<nixpkgs>"
+
nix-shell -p $attrs --run (printf "'%s' " $argv)
+
return
+
else
+
echo "Failed to install nixpkgs.$attrs"
+
echo "$cmd: command not found"
+
end
+
case '*'
+
echo "$cmd is not installed. You can find it in:" >&2
+
printf "\tnix-env -iA nixpkgs.%s\n" $attrs >&2
+
end
+
end
+
end
+
if status --is-interactive
-
env SHELL=fish keychain --eval --quiet -Q id_ed25519 | source
+
# env SHELL=fish keychain --eval --quiet -Q | source
kitty + complete setup fish | source
end
+1 -1
fish/.config/fish/functions/p.fish
···
function p
-
pretty $argv
+
bat $argv
end
+7
git/.config/git/attributes
···
+
# Elixir
+
*.ex diff=elixir
+
*.exs diff=elixir
+
+
# Erlang
+
*.erl diff=erlang
+
*.hrl diff=erlang
+23 -3
git/.config/git/config
···
[core]
commitGraph = true
+
pager = "diff-so-fancy | less --tabs=4 -RFX"
[gc]
writeCommitGraph = true
[alias]
···
com = checkout master
ag = grep
rg = grep
-
ver = tag --sort=version:refname
skip = update-index --skip-worktree
unskip = update-index --no-skip-worktree
publish = push -u hauleth
-
cleaner = !git branch --merged master | grep -v '^[ *]*master$' | xargs -r git branch -d
+
cleanup = "!git branch --format='%(refname:lstrip=2)' --no-contains HEAD --no-contains master --merged master | xargs -xn1 git branch -d"
[mergetool]
keepBackup = false
···
autoSetupRebase = always
[push]
default = simple
+
followTags = true
[pull]
ff = only
[merge]
···
# Automatically sign all tags and commits
[tag]
forceSignAnnotated = true
+
sort = version:refname
[commit]
gpgsign = true
verbose = true
···
algorithm = histogram
mnemonicPrefix = true
+
[diff "elixir"]
+
xfuncname = "^[ \t]*((def(macro|module|impl|guard|protocol)?p?|test)[ \t].*)$"
+
+
[color]
+
ui = true
+
[color.diff]
old = blue
new = yellow
+
[color.diff-highlight]
+
oldNormal = "blue"
+
oldHighlight = "blue ul"
+
newNormal = "yellow"
+
newHighlight = "yellow ul"
+
[pack]
useSparse = true
-
# vim: ft=gitconfig noexpandtab
+
[sendemail]
+
annotate = true
+
confirm = always
+
thread = true
+
supersscc = self
+
+
# vim: ft=gitconfig noexpandtab sw=8
+1
git/.config/git/ignore
···
.tool-versions-e
# }}}
.elixir_ls
+
/.direnv
+1 -1
kitty/.config/kitty/kitty.conf
···
#: Font size (in pts)
-
# adjust_line_height 0
+
adjust_line_height 100%
# adjust_column_width 0
#: Change the size of each character cell kitty renders. You can use
+7 -7
misc/.dir_colors
···
# Below are the color init strings for the basic file types. A color init
# string consists of one or more of the following numeric codes:
# Attribute codes:
-
# 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
+
# 00=none 01=bold 03=cursive 04=underscore 05=blink 07=reverse 08=concealed
# Text color codes:
# 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
# Background color codes:
···
# Background 256 color coding:
# 48;5;COLOR_NUMBER
-
NORMAL 00;38;5;01 # no color code at all
+
NORMAL 00;38;5;07 # no color code at all
#FILE 00 # regular file: use no color at all
RESET 0 # reset to "normal" color
DIR 00;38;5;04 # directory 01;34
···
.tex 01;38;5;01
# }}}
# "unimportant" files as logs and backups (base01) {{{
-
.log 00;38;5;18
-
.bak 00;38;5;18
-
.aux 00;38;5;18
-
.bbl 00;38;5;18
-
.blg 00;38;5;18
+
.log 00;38;5;5
+
.bak 00;38;5;5
+
.aux 00;38;5;5
+
.bbl 00;38;5;5
+
.blg 00;38;5;5
# }}}
# audio formats (orange) {{{
.aac 00;38;5;06
+2
nix/.config/nix/nix.conf
···
+
keep-outputs = true
+
keep-derivations = true
+41 -25
nix/.config/nixpkgs/darwin/configuration.nix
···
{ config, pkgs, ... }:
+
let
+
gitFuller = pkgs.gitAndTools.gitFull.override { sendEmailSupport = true; };
+
in
{
system.defaults.dock.autohide = true;
···
# List packages installed in system profile. To search by name, run:
# $ nix-env -qaP | grep wget
-
environment.systemPackages = with pkgs;
-
[ neovim
-
neovim-remote
-
universal-ctags
-
ripgrep
-
fzy
-
jq
-
direnv
-
git
-
gitAndTools.hub
-
gitAndTools.git-imerge
-
gitAndTools.git-test
-
gitAndTools.tig
-
gnupg
-
keychain
-
noti
-
entr
-
httpie
-
dnsmasq
-
];
+
environment.systemPackages = with pkgs; [
+
aerc
+
asciinema
+
bat
+
coreutils
+
direnv
+
dnsmasq
+
entr
+
fzy
+
gitAndTools.diff-so-fancy
+
gitAndTools.git-imerge
+
gitAndTools.git-test
+
gitAndTools.hub
+
gitAndTools.tig
+
gitFuller
+
git-lfs
+
gnupg
+
httpie
+
imagemagick
+
jq
+
neovim
+
neovim-remote
+
nix-index
+
noti
+
ripgrep
+
universal-ctags
+
weechat
+
w3m
+
];
environment.shells = [ pkgs.fish ];
···
fonts.fonts = let
iosevkaTerm = pkgs.iosevka.override {
set = "term";
-
family = "Iosevka Term";
-
design = [ "ss10" "term" ];
+
privateBuildPlan = {
+
family = "Iosevka Term";
+
design = [ "ss10" "cv10" "cv38" "cv62" "term" ];
+
};
};
iosevka = pkgs.iosevka.override {
set = "ss10";
-
family = null;
-
design = [ "ss10" "calt-logic" ];
+
privateBuildPlan = {
+
family = "Iosevka";
+
design = [ "ss10" "cv10" "cv38" "cv62" "calt-logic" ];
+
};
};
in [
pkgs.lato
···
enable = true;
text = ''
address=/localhost/127.0.0.1
-
'';
+
'';
};
environment.etc."resolver/localhost" = {
enable = true;
+5 -10
nix/.config/nixpkgs/overlays/erlang.nix
···
self: super:
-
with self;
-
let
-
fetchMixDeps = callPackage ./erlang/fetch-mix-deps.nix {};
+
fetchMixDeps = super.callPackage ./erlang/fetch-mix-deps.nix {};
+
packages = super.beam.packages.erlang;
in
{
inherit fetchMixDeps;
-
erlangSourcer = callPackage ./erlang/sourcer.nix {
-
erlang = beam.packages.erlang;
-
};
-
-
elixirLS = self.callPackage ./erlang/elixir-ls.nix {
-
erlang = beam.packages.erlang;
-
};
+
erlangSourcer = packages.callPackage ./erlang/sourcer.nix {};
+
erlangLS = packages.callPackage ./erlang/erlang-ls.nix {};
+
elixirLS = packages.callPackage ./erlang/elixir-ls.nix {};
}
+6
nix/.config/nixpkgs/overlays/erlang/elixir-ls.json
···
+
{
+
"owner": "elixir-lsp",
+
"repo": "elixir-ls",
+
"rev": "ba1c9cb86545298c487cf77a166c203fc44ce8dd",
+
"sha256": "07i9hpgshl1i09id8gadi46p0z3j19z5pybmmasnky1jjnnqv7sk"
+
}
+7 -11
nix/.config/nixpkgs/overlays/erlang/elixir-ls.nix
···
-
{ stdenv, erlang, fetchFromGitHub, fetchMixDeps, git }:
+
{ stdenv, elixir, rebar3, hex, fetchFromGitHub, fetchMixDeps, gitMinimal }:
-
with erlang;
-
+
let
+
json = builtins.fromJSON (builtins.readFile ./elixir-ls.json);
+
in
stdenv.mkDerivation rec {
name = "elixir-ls";
-
version = "unstable-2019-07-15";
+
version = json.rev;
-
nativeBuildInputs = [ elixir hex git ];
+
nativeBuildInputs = [ elixir hex gitMinimal deps ];
deps = fetchMixDeps {
inherit name version src;
};
# refresh: nix-prefetch-git https://github.com/elixir-lsp/elixir-ls.git [--rev branchName | --rev sha]
-
src = fetchFromGitHub {
-
rev = "95c021fdb8e279ae3e9ab0ae1af8624d5572fad3";
-
owner = "elixir-lsp";
-
repo = "elixir-ls";
-
sha256 = "0qkqra09rvw6hxa8pbdvxnvqlvgw0qyq2rlgd56hxjbxa280ba1c";
-
};
+
src = fetchFromGitHub json;
dontStrip = true;
+6
nix/.config/nixpkgs/overlays/erlang/erlang-ls.json
···
+
{
+
"owner": "erlang-ls",
+
"repo": "erlang_ls",
+
"rev": "6a675ee5b43d53cf3ec393f225c61c7226c9da7b",
+
"sha256": "0n43b6g2k8d5cbgvgc00mlz5v8cmyjidlxsjx540xhn6ybyyz710"
+
}
+11
nix/.config/nixpkgs/overlays/erlang/erlang-ls.nix
···
+
{ rebar3Relx, fetchFromGitHub, gitMinimal }:
+
+
let
+
json = builtins.fromJSON (builtins.readFile ./erlang-ls.json);
+
in rebar3Relx rec {
+
name = "erlang-ls";
+
version = json.rev;
+
releaseType = "escript";
+
+
src = fetchFromGitHub json;
+
}
+2 -7
nix/.config/nixpkgs/overlays/erlang/fetch-mix-deps.nix
···
-
{ stdenv, elixir, rebar3, git, cacert }:
+
{ stdenv, elixir, rebar3, gitMinimal, cacert }:
{ name, version, sha256 ? null, src, env ? "prod" }:
···
mkDerivation {
name = "mix-deps-${name}-${version}";
-
nativeBuildInputs = [ elixir git cacert ];
+
nativeBuildInputs = [ elixir gitMinimal cacert ];
phases = [ "downloadPhase" "installPhase" ];
···
export MIX_HOME=$PWD
export MIX_ENV=${env}
-
echo $HEX_HOME
-
cp -R ${src}/* .
mix local.hex --force
mix local.rebar rebar3 ${rebar3}/bin/rebar3
mix deps.get
-
-
ls -la deps
'';
installPhase = ''
···
outputHashAlgo = "sha256";
outputHashMode = "recursive";
-
# outputHash = sha256;
impureEnvVars = lib.fetchers.proxyImpureEnvVars;
}
+2 -2
nix/.config/nixpkgs/overlays/erlang/sourcer.json
···
{
"owner": "erlang",
"repo": "sourcer",
-
"rev": "e598ec52ed2c62eb50e4556dc9cd5adb664de610",
-
"sha256": "1kq466vqcc5fwynl457xzqamj1ldfbbv03x7dg5m8167swdi93am"
+
"rev": "27ea9c63998b9e694eb7b654dd05b831b989e69e",
+
"sha256": "0v12ylryqfb0zm6zxv45v7jpqh3kbrvn0lzafnzp5vvmgd4g3qa5"
}
+4 -4
nix/.config/nixpkgs/overlays/erlang/sourcer.nix
···
-
{ erlang, fetchFromGitHub, gitMinimal }:
+
{ rebar3Relx, fetchFromGitHub, gitMinimal }:
let
json = builtins.fromJSON (builtins.readFile ./sourcer.json);
-
in erlang.rebar3Relx rec {
-
name = "erlang-ls";
-
version = "unstable-2019-07-26";
+
in rebar3Relx rec {
+
name = "erlang-sourcer";
+
version = json.rev;
releaseType = "escript";
nativeBuildInputs = [ gitMinimal ];
+1 -1
nix/.config/nixpkgs/overlays/mongodb.nix
···
self: super:
-
with self;
+
with super;
{
mongodb-4_0 = stdenv.mkDerivation rec {
+4 -2
nix/.config/nixpkgs/overlays/tokei.nix
···
self: super:
+
with super;
+
{
-
tokei = self.tokei.overrideDerivation (cfg: {
-
buildInputs = self.stdenv.lib.optionals self.stdenv.isDarwin [
+
tokei = tokei.overrideDerivation (cfg: {
+
buildInputs = stdenv.lib.optionals stdenv.isDarwin [
self.libiconv
self.darwin.apple_sdk.frameworks.Security
];
+1
result
···
+
/nix/store/b802k22mffrw1p4dvkv3nq2w8c0sqyff-darwin-system-20.03pre199995.895874d2145+darwin3.0000000
+4
vim/.config/nvim/after/ftplugin/dhall.vim
···
+
setlocal shiftwidth=2
+
setlocal commentstring=--\ %s
+
+
let b:undo_ftplugin = 'setl sw&'
+14 -8
vim/.config/nvim/autoload/plugins.vim
···
" vi: foldmethod=marker foldlevel=0
let s:current_file = expand('<sfile>')
+
let s:data_dir = exists('$XDG_DATA_HOME') ? $XDG_DATA_HOME : $HOME . '/.local/share'
+
+
let s:dir = s:data_dir . '/nvim/site/pack/packager'
if !exists('*plugins#reload')
func! plugins#reload() abort
···
func! plugins#spec() abort
packadd vim-packager
-
call packager#init({'dir': '~/.local/share/nvim/site/pack/packager'})
+
+
if !exists('g:packager')
+
call packager#init({'dir': s:dir})
+
endif
+
" Package manager {{{
call packager#add('kristijanhusak/vim-packager', {'type': 'opt'})
" }}}
···
" }}}
" Project navigation {{{
call packager#add('tpope/vim-projectionist') " Requires access to VimEnter
+
call packager#add('srstevenson/vim-picker')
+
call packager#add('justinmk/vim-dirvish') " Required for opening directories
+
call packager#add('tpope/vim-eunuch')
" }}}
" Git {{{
call packager#add('tpope/vim-fugitive', { 'type': 'opt' })
···
call packager#add('tpope/vim-cucumber') " ftplugin
call packager#add('tpope/vim-scriptease', {'type': 'opt'}) " ftplugin
call packager#add('LnL7/vim-nix')
-
" }}}
-
" File manager {{{
-
call packager#add('justinmk/vim-dirvish') " Required for opening directories
-
call packager#add('tpope/vim-eunuch')
-
call packager#add('srstevenson/vim-picker')
" }}}
" Completion {{{
call packager#add('prabirshrestha/async.vim') " autoload-only
call packager#add('prabirshrestha/vim-lsp')
call packager#add('Shougo/echodoc.vim')
call packager#add('fcpg/vim-complimentary') " autoload-only
-
call packager#add('vim-erlang/vim-erlang-omnicomplete')
" }}}
" Code manipulation {{{
call packager#add('AndrewRadev/splitjoin.vim')
···
call packager#add('t9md/vim-choosewin')
" }}}
" Utils {{{
+
call packager#add('andymass/vim-matchup')
call packager#add('tpope/vim-repeat') " autoload-only plugin
call packager#add('tpope/vim-unimpaired', {'type': 'opt'})
call packager#add('tpope/vim-rsi')
-
call packager#add('direnv/direnv.vim', {'type': 'opt'})
+
call packager#add('direnv/direnv.vim')
call packager#add('sgur/vim-editorconfig') " Required during startup
call packager#add('tpope/vim-characterize')
call packager#add('https://gitlab.com/hauleth/qfx.vim.git')
+
call packager#add('hauleth/vim-backscratch')
call packager#add('tpope/vim-dadbod')
call packager#add('https://gitlab.com/hauleth/smart.vim.git')
" }}}
+1 -1
vim/.config/nvim/compiler/mix.vim
···
endif
CompilerSet errorformat=%A%t%*[^:]:\ %m,%C%f:%l:\ %m,%C%f:%l,%Z
-
CompilerSet makeprg=mix
+
CompilerSet makeprg=mix\ compile
+3 -4
vim/.config/nvim/ftdetect/custom.vim
···
-
au BufRead,BufNewFile *.ket setlocal ft=ketos.scheme syn=scheme
-
au BufRead,BufNewFile *.config setlocal ft=erlang syn=erlang
-
au BufRead,BufNewFile *.config.script setlocal ft=erlang syn=erlang
-
au BufRead,BufNewFile *.app.src setlocal ft=erlang syn=erlang
+
au BufRead,BufNewFile *.config,*.config.script,*.app.src setf erlang
+
au BufRead,BufNewFile *.dhall setf dhall
+
au BufRead,BufNewFile PULLREQ_EDITMSG setf gitcommit
+16 -5
vim/.config/nvim/init.vim
···
" Plugins {{{
let g:loaded_netrwPlugin = 1
+
let g:loaded_matchit = 1
command! -bar PackInstall call plugins#reload() | call packager#install()
command! -bar PackUpdate call plugins#reload() | call packager#update()
···
" Hypen is part of the keyword, if you want to substract then add spaces {{{
set iskeyword+=-
" }}}
-
" Show 80 column {{{
-
set colorcolumn=+1
-
" }}}
" Split in CORRECT places {{{
set splitright splitbelow
" }}}
···
set undofile
" }}}
" Custom configurations {{{
+
" Matchparen {{{
+
let g:matchup_matchparen_offscreen = {'method': 'popup'}
+
+
augroup matchparen
+
autocmd!
+
autocmd BufEnter term://* NoMatchParen
+
autocmd BufLeave term://* DoMatchParen
+
augroup END
+
" }}}
" Fuzzy file search {{{
nnoremap <Space><Space> :<C-u>PickerEdit<CR>
let g:picker_custom_find_executable = 'rg'
let g:picker_custom_find_flags = '--color never --files --hidden --glob !.git'
+
let g:clap#provider#files# = {
+
\ 'source': 'rg --color never --files --hidden --glob !.git',
+
\ 'sink': 'e'
+
\ }
set path=,,
" }}}
···
augroup hotfix
autocmd!
-
autocmd FocusGained * checktime
-
autocmd CursorHold * checktime
+
autocmd BufLeave * call utils#cleanup()
autocmd ColorScheme * highlight LspErrorHighlight gui=underline cterm=underline
\ | highlight LspWarningHighlight gui=underline cterm=underline
augroup END
+
" Needed for Projectionist and dadbod
command! -nargs=* Start <mods> split new <bar> call termopen(<q-args>) <bar> startinsert
command! -nargs=0 Ctags AsyncDo ctags -R
-4
vim/.config/nvim/plugin/pack-delayed.vim
···
let g:loaded_pack_delayed = 1
func! DelayedLoad(...) abort " No abort as we want to continue if any plugin fails
-
echom 'Loading plugins'
-
" Git
packadd vim-fugitive
\ | call fugitive#detect(getcwd())
···
packadd targets.vim
autocmd! delayed_pack_load
-
-
echom 'Loaded plugins'
endfunc
augroup delayed_pack_load
+4
vim/.config/nvim/plugin/projections.vim
···
\ 'alternate': 'test/{}_test.exs',
\ 'template': ['defmodule {camelcase|capitalize|dot} do', 'end'],
\ },
+
\ 'src/*.erl': {
+
\ 'type': 'src',
+
\ 'alternate': 'test/{}_SUITE.erl',
+
\ },
\ 'test/*_test.exs': {
\ 'type': 'test',
\ 'alternate': 'lib/{}.ex',
-10
vim/.config/nvim/plugin/scratch.vim
···
-
if exists('g:loaded_scratch')
-
finish
-
endif
-
let g:loaded_scratch = 1
-
-
command! Scratchify setlocal nobuflisted noswapfile buftype=nofile bufhidden=delete
-
command! Scratch enew |Scratchify
-
command! SScratch new +Scratchify
-
command! VScratch vnew +Scratchify
-
command! TScratch tabnew +Scratchify
+62
vim/.config/nvim/syntax/dhall.vim
···
+
scriptencoding utf-8
+
+
if exists('b:current_syntax')
+
finish
+
endif
+
+
syntax match dhallInterpolation "\v\$\{[^\}]*\}"
+
syntax keyword dhallTodo TODO FIXME
+
syntax match dhallBrackets "[<>|]"
+
syntax match dhallOperator "+\|*\|#"
+
syntax match dhallOperator "//\|⫽"
+
syntax match dhallOperator "/\\\|∧"
+
syntax match dhallOperator "//\\\\\|⩓"
+
syntax match dhallNumber "\v[0-9]"
+
syntax match dhallNumber "\v\+[0-9]"
+
syntax match dhallIndex "\v\@[0-9]+" contains=dhallNumber
+
syntax match dhallLambda "∀\|λ\|→\|->\|\\"
+
syntax match dhallType "\v[A-Z][a-z0-9A-Z_]*"
+
syntax match dhallSpecialLabel "\v`[A-Z][a-z]*`"
+
syntax match dhallLabel "\v[A-Z][a-z]*/[a-z_][A-Za-z0-9\.\-]*"
+
syntax match dhallLabel "\v[a-z_][A-Za-z0-9\-]*"
+
syntax match dhallType "\v[a-zA-Z]+\.[A-Z][a-z0-9A-Z_]*"
+
syntax match dhallParens "(\|)\|\[\|\]\|,"
+
syntax match dhallRecord "{\|}\|:"
+
syntax keyword dhallKeyword let in forall constructors if then else merge env as
+
syntax match dhallEsc +\\["\\abfnrtv$/]+
+
syntax match dhallSingleSpecial +'''+
+
syntax match dhallSingleSpecial +''${+
+
syntax match dhallComment '\v--.*$' contains=@Spell,dhallTodo
+
syntax region dhallMultilineComment start="{-" end="-}" contains=@Spell,dhallTodo,dhallMultilineComment
+
syntax match dhallUrl "https://[a-zA-Z0-9/.\-_\?\=\&]*"
+
syntax match dhallUrl "http://[a-zA-Z0-9/.\-_\?\=\&]*"
+
syntax match dhallUrl "/[a-zA-Z0-9/.\-_]*"
+
syntax match dhallUrl "\.\./[a-zA-Z0-9/.\-_]*"
+
syntax match dhallUrl "\./[a-zA-Z0-9/.\-_]*"
+
syntax region dhallString start=+''+ end=+''+ contains=@Spell,dhallInterpolation,dhallSingleSpecial
+
syntax region dhallString start=+"+ end=+"+ contains=dhallInterpolation,dhallEsc
+
syntax region dhallString start=+"/+ end=+"+ contains=dhallInterpolation,dhallEsc
+
syntax keyword dhallBool True False
+
+
highlight link dhallSingleSpecial Special
+
highlight link dhallIndex Special
+
highlight link dhallSpecialLabel Operator
+
highlight link dhallEsc Special
+
highlight link dhallInterpolation Special
+
highlight link dhallTodo Todo
+
highlight link dhallBrackets Operator
+
highlight link dhallBool Underlined
+
highlight link dhallUrl String
+
highlight link dhallOperator Operator
+
highlight link dhallNumber Number
+
highlight link dhallLambda Special
+
highlight link dhallString String
+
highlight link dhallLabel Identifier
+
highlight link dhallRecord Special
+
highlight link dhallKeyword Keyword
+
highlight link dhallType Structure
+
highlight link dhallParens Special
+
highlight link dhallComment Comment
+
highlight link dhallMultilineComment Comment
+
+
let b:current_syntax = 'dhall'