summaryrefslogtreecommitdiff
path: root/dots
diff options
context:
space:
mode:
authorElizabeth <me@liz.coffee>2025-06-02 13:11:10 -0700
committerElizabeth <me@liz.coffee>2025-06-02 13:11:10 -0700
commitd098e94ad102da9d018acca72ca5a5c554d25a01 (patch)
treed6d23ee63ad5a1aa4017a605d9e09e75de2c5f49 /dots
parentede675866355d34ac9fdc1b8e047576f574bdfa2 (diff)
downloaddotfiles-d098e94ad102da9d018acca72ca5a5c554d25a01.tar.gz
dotfiles-d098e94ad102da9d018acca72ca5a5c554d25a01.zip
Update paths n stuff
Diffstat (limited to 'dots')
-rw-r--r--dots/aerospace/.aerospace.toml158
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/LICENSE202
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/README.md212
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/Cobalt2.pngbin0 -> 119961 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/acme.pngbin0 -> 21853 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/afterglow.pngbin0 -> 98605 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/alabaster.pngbin0 -> 60022 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/alabaster_dark.pngbin0 -> 60150 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/alacritty_0_12.pngbin0 -> 101342 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/argonaut.pngbin0 -> 115279 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/ashes_dark.pngbin0 -> 152667 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/ashes_light.pngbin0 -> 156310 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/aura.pngbin0 -> 48975 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/autumn.pngbin0 -> 207321 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/ayu_dark.pngbin0 -> 117836 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/ayu_light.pngbin0 -> 41674 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/ayu_mirage.pngbin0 -> 46748 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/baitong.pngbin0 -> 125945 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/base16_default_dark.pngbin0 -> 96886 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/blood_moon.pngbin0 -> 112532 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/bluish.pngbin0 -> 111932 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/breeze.pngbin0 -> 115920 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/campbell.pngbin0 -> 111126 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/carbonfox.pngbin0 -> 87219 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/catppuccin_frappe.pngbin0 -> 39328 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/catppuccin_latte.pngbin0 -> 39365 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/catppuccin_macchiato.pngbin0 -> 39570 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/catppuccin_mocha.pngbin0 -> 39886 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/challenger_deep.pngbin0 -> 119906 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/chicago95.pngbin0 -> 8656 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/citylights.pngbin0 -> 74992 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/cyber_punk_neon.pngbin0 -> 104045 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/dark_pastels.pngbin0 -> 113839 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/dark_plus.pngbin0 -> 58778 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/dark_pride.pngbin0 -> 78986 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/dawnfox.pngbin0 -> 85432 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/dayfox.pngbin0 -> 88600 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/deep_space.pngbin0 -> 79697 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/doom_one.pngbin0 -> 114256 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/dracula.pngbin0 -> 107713 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/dracula_plus.pngbin0 -> 78610 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/duskfox.pngbin0 -> 84595 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/enfocado_dark.pngbin0 -> 48064 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/enfocado_light.pngbin0 -> 49104 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/everforest_dark.pngbin0 -> 36408 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/everforest_light.pngbin0 -> 37015 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/falcon.pngbin0 -> 112595 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/flat_remix.pngbin0 -> 115305 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/flexoki.pngbin0 -> 175999 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/github_dark.pngbin0 -> 30731 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/github_dark_colorblind.pngbin0 -> 34514 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/github_dark_default.pngbin0 -> 34453 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/github_dark_dimmed.pngbin0 -> 33825 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/github_dark_high_contrast.pngbin0 -> 69024 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/github_dark_tritanopia.pngbin0 -> 68760 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/github_light.pngbin0 -> 33382 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/github_light_colorblind.pngbin0 -> 35461 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/github_light_default.pngbin0 -> 35486 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/github_light_high_contrast.pngbin0 -> 68765 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/github_light_tritanopia.pngbin0 -> 68441 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/gnome_terminal.pngbin0 -> 45200 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/google.pngbin0 -> 51116 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/gotham.pngbin0 -> 113793 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/gruber_darker.pngbin0 -> 46423 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/gruvbox_dark.pngbin0 -> 117764 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/gruvbox_light.pngbin0 -> 117114 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/gruvbox_material_hard_dark.pngbin0 -> 119527 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/gruvbox_material_hard_light.pngbin0 -> 114236 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/gruvbox_material_medium_dark.pngbin0 -> 156241 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/gruvbox_material_medium_light.pngbin0 -> 157489 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/hardhacker.pngbin0 -> 87030 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/hatsunemiku.pngbin0 -> 52446 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/high_contrast.pngbin0 -> 99594 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/horizon_dark.pngbin0 -> 118767 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/hyper.pngbin0 -> 94317 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/inferno.pngbin0 -> 42546 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/iris.pngbin0 -> 45451 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/iterm.pngbin0 -> 121283 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/kanagawa_dragon.pngbin0 -> 55296 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/kanagawa_wave.pngbin0 -> 55235 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/kimbie_dark.pngbin0 -> 72448 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/kimbie_light.pngbin0 -> 78701 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/konsole_linux.pngbin0 -> 113413 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/low_contrast.pngbin0 -> 98460 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/mariana.pngbin0 -> 33620 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/marine_dark.pngbin0 -> 81832 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/material_theme.pngbin0 -> 112786 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/material_theme_mod.pngbin0 -> 112822 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/meliora.pngbin0 -> 41854 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/miasma.pngbin0 -> 66529 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/midnight_haze.pngbin0 -> 42428 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/monokai.pngbin0 -> 58573 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/monokai_charcoal.pngbin0 -> 103713 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/monokai_pro.pngbin0 -> 75700 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/moonfly.pngbin0 -> 127393 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/moonlight_ii_vscode.pngbin0 -> 114810 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/msx.pngbin0 -> 27283 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/night_owl.pngbin0 -> 50511 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/night_owlish_light.pngbin0 -> 118221 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/nightfly.pngbin0 -> 137140 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/nightfox.pngbin0 -> 85950 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/noctis_lux.pngbin0 -> 122710 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/nord.pngbin0 -> 106388 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/nord_light.pngbin0 -> 42160 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/nordfox.pngbin0 -> 85944 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/nordic.pngbin0 -> 212713 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/oceanic_next.pngbin0 -> 105332 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/omni.pngbin0 -> 120446 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/one_dark.pngbin0 -> 99331 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/one_light.pngbin0 -> 103692 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/oxocarbon.pngbin0 -> 38942 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/palenight.pngbin0 -> 113561 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/papercolor_dark.pngbin0 -> 107189 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/papercolor_light.pngbin0 -> 109409 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/papertheme.pngbin0 -> 49308 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/pastel_dark.pngbin0 -> 157625 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/pencil_dark.pngbin0 -> 114323 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/pencil_light.pngbin0 -> 114065 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/rainbow.pngbin0 -> 101911 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/remedy_dark.pngbin0 -> 119434 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/rigel.pngbin0 -> 49973 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/rose_pine.pngbin0 -> 52386 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/rose_pine_dawn.pngbin0 -> 47239 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/rose_pine_moon.pngbin0 -> 52319 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/seashells.pngbin0 -> 116678 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/selenized_dark.pngbin0 -> 117820 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/selenized_light.pngbin0 -> 117881 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/seoul256-light.pngbin0 -> 46039 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/smoooooth.pngbin0 -> 118563 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/snazzy.pngbin0 -> 103905 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/solarized_dark.pngbin0 -> 110720 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/solarized_light.pngbin0 -> 114665 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/solarized_osaka.pngbin0 -> 401281 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/sonokai.pngbin0 -> 42028 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/spacegray.pngbin0 -> 48352 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/synthwave_84.pngbin0 -> 98190 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/taerminal.pngbin0 -> 114420 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/tango_dark.pngbin0 -> 114337 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/tender.pngbin0 -> 97297 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/terafox.pngbin0 -> 86386 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/terminal_app.pngbin0 -> 106089 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/thelovelace.pngbin0 -> 117823 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/tokyo_night.pngbin0 -> 117978 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/tokyo_night_enhanced.pngbin0 -> 40344 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/tokyo_night_storm.pngbin0 -> 117594 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/tomorrow_night.pngbin0 -> 115216 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/tomorrow_night_bright.pngbin0 -> 110742 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/ubuntu.pngbin0 -> 52734 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/vesper.pngbin0 -> 59583 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/vscode.pngbin0 -> 148571 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/wombat.pngbin0 -> 115590 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/xterm.pngbin0 -> 104509 bytes
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/images/zenburn.pngbin0 -> 111438 bytes
-rwxr-xr-xdots/alacritty/.config/alacritty/alacritty-theme/print_colors.sh10
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/Cobalt2.toml33
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/Mariana.toml39
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/acme.toml28
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/afterglow.toml45
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/alabaster.toml30
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/alabaster_dark.toml30
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/alacritty_0_12.toml44
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/argonaut.toml31
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/ashes_dark.toml27
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/ashes_light.toml27
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/aura.toml30
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/autumn.toml30
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/ayu_dark.toml28
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/ayu_light.toml28
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/ayu_mirage.toml29
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/baitong.toml55
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/base16_default_dark.toml32
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/blood_moon.toml28
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/bluish.toml26
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/breeze.toml42
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/campbell.toml28
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/carbonfox.toml71
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/catppuccin.toml39
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/catppuccin_frappe.toml73
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/catppuccin_latte.toml76
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/catppuccin_macchiato.toml76
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/catppuccin_mocha.toml75
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/challenger_deep.toml32
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/chicago95.toml29
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/citylights.toml30
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/cyber_punk_neon.toml33
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/dark_pastels.toml28
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/dark_plus.toml23
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/dark_pride.toml34
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/dawnfox.toml71
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/dayfox.toml71
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/deep_space.toml33
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/doom_one.toml17
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/dracula.toml28
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/dracula_plus.toml29
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/duskfox.toml71
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/enfocado_dark.toml29
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/enfocado_light.toml29
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/everforest_dark.toml28
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/everforest_light.toml28
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/falcon.toml33
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/flat_remix.toml23
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/flexoki.toml46
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/github_dark.toml36
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/github_dark_colorblind.toml36
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/github_dark_default.toml36
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/github_dark_dimmed.toml36
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/github_dark_high_contrast.toml33
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/github_dark_tritanopia.toml33
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/github_light.toml36
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/github_light_colorblind.toml36
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/github_light_default.toml36
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/github_light_high_contrast.toml33
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/github_light_tritanopia.toml33
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/gnome_terminal.toml28
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/google.toml23
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/gotham.toml28
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/gruber_darker.toml26
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/gruvbox_dark.toml30
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/gruvbox_light.toml30
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/gruvbox_material.toml25
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/gruvbox_material_hard_dark.toml28
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/gruvbox_material_hard_light.toml28
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/gruvbox_material_medium_dark.toml28
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/gruvbox_material_medium_light.toml28
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/hardhacker.toml33
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/hatsunemiku.toml23
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/high_contrast.toml33
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/horizon_dark.toml28
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/hyper.toml32
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/inferno.toml29
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/iris.toml28
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/iterm.toml28
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/kanagawa_dragon.toml38
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/kanagawa_wave.toml38
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/kimbie_dark.toml24
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/kimbie_light.toml24
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/konsole_linux.toml44
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/low_contrast.toml32
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/marine_dark.toml29
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/material_theme.toml28
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/material_theme_mod.toml28
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/meliora.toml75
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/miasma.toml28
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/midnight_haze.toml29
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/monokai.toml23
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/monokai_charcoal.toml28
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/monokai_pro.toml26
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/moonfly.toml34
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/moonlight_ii_vscode.toml27
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/msx.toml41
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/night_owl.toml54
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/night_owlish_light.toml33
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/nightfly.toml34
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/nightfox.toml71
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/noctis_lux.toml28
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/nord.toml28
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/nord_light.toml28
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/nordfox.toml71
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/nordic.toml29
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/oceanic_next.toml28
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/omni.toml37
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/one_dark.toml28
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/one_light.toml23
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/oxocarbon.toml34
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/palenight.toml29
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/papercolor_dark.toml32
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/papercolor_light.toml32
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/papertheme.toml28
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/pastel_dark.toml33
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/pencil_dark.toml28
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/pencil_light.toml28
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/rainbow.toml26
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/remedy_dark.toml29
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/rigel.toml30
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/rose_pine.toml39
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/rose_pine_dawn.toml39
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/rose_pine_moon.toml38
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/seashells.toml37
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/selenized_dark.toml26
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/selenized_light.toml25
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/seoul256-light.toml71
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/smoooooth.toml33
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/snazzy.toml28
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/solarized_dark.toml28
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/solarized_light.toml28
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/solarized_osaka.toml29
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/sonokai.toml33
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/spacegray.toml33
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/synthwave_84.toml23
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/taerminal.toml32
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/tango_dark.toml25
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/tender.toml26
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/terafox.toml71
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/terminal_app.toml28
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/thelovelace.toml26
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/tokyo_night.toml29
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/tokyo_night_enhanced.toml30
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/tokyo_night_storm.toml29
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/tomorrow_night.toml32
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/tomorrow_night_bright.toml28
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/ubuntu.toml33
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/vesper.toml26
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/vscode.toml23
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/wombat.toml28
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/xterm.toml28
-rw-r--r--dots/alacritty/.config/alacritty/alacritty-theme/themes/zenburn.toml29
-rw-r--r--dots/alacritty/.config/alacritty/alacritty.toml44
-rw-r--r--dots/alacritty/.config/alacritty/theme.toml4
-rw-r--r--dots/git/.config/git/rootignore7
-rw-r--r--dots/git/.gitconfig.j212
-rwxr-xr-xdots/gpg/.gnupg/common.conf1
-rwxr-xr-xdots/gpg/.gnupg/gpg-agent.conf2
-rw-r--r--dots/home/.pubkey.j21
-rw-r--r--dots/home/Documents/pubkey.asc0
-rw-r--r--dots/home/Pictures/pfp/bubblegum.pngbin0 -> 443498 bytes
-rw-r--r--dots/home/Pictures/pfp/eejypenguin.pngbin0 -> 175119 bytes
-rw-r--r--dots/home/Pictures/pfp/gus.jpgbin0 -> 31578 bytes
-rw-r--r--dots/home/Pictures/pfp/mefr.pngbin0 -> 1265644 bytes
-rw-r--r--dots/home/Pictures/pfp/shoppingpenguin.pngbin0 -> 277623 bytes
-rw-r--r--dots/home/Pictures/wallpapers/beach.jpgbin0 -> 169847 bytes
-rw-r--r--dots/home/Pictures/wallpapers/flat-books.pngbin0 -> 1133976 bytes
-rw-r--r--dots/home/Pictures/wallpapers/ghibli-road.pngbin0 -> 313297 bytes
-rw-r--r--dots/home/Pictures/wallpapers/penguins-hugging.jpgbin0 -> 519955 bytes
-rw-r--r--dots/home/Pictures/wallpapers/rose.pngbin0 -> 1508642 bytes
-rw-r--r--dots/home/Pictures/wallpapers/snowy-light-trees.jpgbin0 -> 1283226 bytes
-rw-r--r--dots/home/Pictures/wallpapers/sunrise-mountains.webpbin0 -> 62148 bytes
-rw-r--r--dots/home/Pictures/wallpapers/table.pngbin0 -> 608017 bytes
-rw-r--r--dots/home/Pictures/wallpapers/wall.jpgbin0 -> 275592 bytes
-rwxr-xr-xdots/home/scripts/greet.sh29
-rwxr-xr-xdots/home/scripts/log.sh32
-rwxr-xr-xdots/home/scripts/pinentry.sh20
-rwxr-xr-xdots/home/scripts/platform.sh11
-rwxr-xr-xdots/home/scripts/system_name.sh14
-rwxr-xr-xdots/home/scripts/theme.sh22
-rw-r--r--dots/mise/.config/mise/config.toml5
-rw-r--r--dots/nvim/.config/nvim/init.lua9
-rw-r--r--dots/nvim/.config/nvim/lua/.gitkeep0
-rw-r--r--dots/nvim/.config/nvim/lua/config/lazy.lua35
-rw-r--r--dots/nvim/.config/nvim/lua/config/options.lua39
-rw-r--r--dots/nvim/.config/nvim/lua/plugins/comment.lua6
-rw-r--r--dots/nvim/.config/nvim/lua/plugins/lualine.lua34
-rw-r--r--dots/nvim/.config/nvim/lua/plugins/telescope.lua25
-rw-r--r--dots/nvim/.config/nvim/lua/plugins/theme.lua9
-rw-r--r--dots/nvim/.config/nvim/lua/plugins/whichkey.lua6
-rw-r--r--dots/ssh/.ssh/config16
-rw-r--r--dots/ssh/.ssh/config.d/.gitkeep0
-rw-r--r--dots/starship/.config/starship.toml53
-rw-r--r--dots/theme/.config/theme/alacritty.toml4
-rw-r--r--dots/tmux/.config/tmux/tmux.conf28
-rw-r--r--dots/tmux/.tmux/plugins/tpm/.gitattributes9
-rw-r--r--dots/tmux/.tmux/plugins/tpm/.gitignore4
-rw-r--r--dots/tmux/.tmux/plugins/tpm/.gitmodules3
-rw-r--r--dots/tmux/.tmux/plugins/tpm/.travis.yml19
-rw-r--r--dots/tmux/.tmux/plugins/tpm/CHANGELOG.md86
-rw-r--r--dots/tmux/.tmux/plugins/tpm/HOW_TO_PLUGIN.md2
-rw-r--r--dots/tmux/.tmux/plugins/tpm/LICENSE.md20
-rw-r--r--dots/tmux/.tmux/plugins/tpm/README.md101
-rwxr-xr-xdots/tmux/.tmux/plugins/tpm/bin/clean_plugins14
-rwxr-xr-xdots/tmux/.tmux/plugins/tpm/bin/install_plugins14
-rwxr-xr-xdots/tmux/.tmux/plugins/tpm/bin/update_plugins24
-rwxr-xr-xdots/tmux/.tmux/plugins/tpm/bindings/clean_plugins19
-rwxr-xr-xdots/tmux/.tmux/plugins/tpm/bindings/install_plugins19
-rwxr-xr-xdots/tmux/.tmux/plugins/tpm/bindings/update_plugins49
-rw-r--r--dots/tmux/.tmux/plugins/tpm/docs/automatic_tpm_installation.md12
-rw-r--r--dots/tmux/.tmux/plugins/tpm/docs/changing_plugins_install_dir.md16
-rw-r--r--dots/tmux/.tmux/plugins/tpm/docs/how_to_create_plugin.md108
-rw-r--r--dots/tmux/.tmux/plugins/tpm/docs/managing_plugins_via_cmd_line.md36
-rw-r--r--dots/tmux/.tmux/plugins/tpm/docs/tpm_not_working.md102
-rwxr-xr-xdots/tmux/.tmux/plugins/tpm/scripts/check_tmux_version.sh78
-rwxr-xr-xdots/tmux/.tmux/plugins/tpm/scripts/clean_plugins.sh41
-rw-r--r--dots/tmux/.tmux/plugins/tpm/scripts/helpers/plugin_functions.sh104
-rw-r--r--dots/tmux/.tmux/plugins/tpm/scripts/helpers/shell_echo_functions.sh7
-rw-r--r--dots/tmux/.tmux/plugins/tpm/scripts/helpers/tmux_echo_functions.sh28
-rw-r--r--dots/tmux/.tmux/plugins/tpm/scripts/helpers/tmux_utils.sh6
-rw-r--r--dots/tmux/.tmux/plugins/tpm/scripts/helpers/utility.sh17
-rwxr-xr-xdots/tmux/.tmux/plugins/tpm/scripts/install_plugins.sh75
-rwxr-xr-xdots/tmux/.tmux/plugins/tpm/scripts/source_plugins.sh42
-rwxr-xr-xdots/tmux/.tmux/plugins/tpm/scripts/update_plugin.sh78
-rwxr-xr-xdots/tmux/.tmux/plugins/tpm/scripts/update_plugin_prompt_handler.sh18
-rw-r--r--dots/tmux/.tmux/plugins/tpm/scripts/variables.sh13
-rwxr-xr-xdots/tmux/.tmux/plugins/tpm/tests/expect_failed_plugin_download36
-rwxr-xr-xdots/tmux/.tmux/plugins/tpm/tests/expect_successful_clean_plugins35
-rwxr-xr-xdots/tmux/.tmux/plugins/tpm/tests/expect_successful_multiple_plugins_download44
-rwxr-xr-xdots/tmux/.tmux/plugins/tpm/tests/expect_successful_plugin_download50
-rwxr-xr-xdots/tmux/.tmux/plugins/tpm/tests/expect_successful_update_of_a_single_plugin55
-rwxr-xr-xdots/tmux/.tmux/plugins/tpm/tests/expect_successful_update_of_all_plugins59
-rw-r--r--dots/tmux/.tmux/plugins/tpm/tests/helpers/tpm.sh13
-rwxr-xr-xdots/tmux/.tmux/plugins/tpm/tests/test_plugin_clean.sh67
-rwxr-xr-xdots/tmux/.tmux/plugins/tpm/tests/test_plugin_installation.sh284
-rwxr-xr-xdots/tmux/.tmux/plugins/tpm/tests/test_plugin_installation_legacy.sh100
-rwxr-xr-xdots/tmux/.tmux/plugins/tpm/tests/test_plugin_sourcing.sh78
-rwxr-xr-xdots/tmux/.tmux/plugins/tpm/tests/test_plugin_update.sh60
-rwxr-xr-xdots/tmux/.tmux/plugins/tpm/tpm81
-rw-r--r--dots/zed/.config/zed/keymap.json14
-rw-r--r--dots/zed/.config/zed/settings.json.j2280
-rw-r--r--dots/zsh/.config/zsh/.zshrc38
-rw-r--r--dots/zsh/.config/zsh/greetings/00_art/another_penguin15
-rw-r--r--dots/zsh/.config/zsh/greetings/00_art/butterfly9
-rw-r--r--dots/zsh/.config/zsh/greetings/00_art/eebjy9
-rw-r--r--dots/zsh/.config/zsh/greetings/00_art/heart8
-rw-r--r--dots/zsh/.config/zsh/greetings/00_art/penguin16
-rw-r--r--dots/zsh/.config/zsh/greetings/00_art/puppy10
-rw-r--r--dots/zsh/.config/zsh/greetings/00_art/totoro13
-rw-r--r--dots/zsh/.config/zsh/greetings/01_prompts/aww_motivation_lost1
-rw-r--r--dots/zsh/.config/zsh/greetings/01_prompts/bashful1
-rw-r--r--dots/zsh/.config/zsh/greetings/01_prompts/bby1
-rw-r--r--dots/zsh/.config/zsh/greetings/01_prompts/bot1
-rw-r--r--dots/zsh/.config/zsh/greetings/01_prompts/break_stuff1
-rw-r--r--dots/zsh/.config/zsh/greetings/01_prompts/compiling_feelings1
-rw-r--r--dots/zsh/.config/zsh/greetings/01_prompts/crashin1
-rw-r--r--dots/zsh/.config/zsh/greetings/01_prompts/desu1
-rw-r--r--dots/zsh/.config/zsh/greetings/01_prompts/hacker_friend1
-rw-r--r--dots/zsh/.config/zsh/greetings/01_prompts/hai1
-rw-r--r--dots/zsh/.config/zsh/greetings/01_prompts/input_output_love1
-rw-r--r--dots/zsh/.config/zsh/greetings/01_prompts/love_letter1
-rw-r--r--dots/zsh/.config/zsh/greetings/01_prompts/online1
-rw-r--r--dots/zsh/.config/zsh/greetings/01_prompts/production1
-rw-r--r--dots/zsh/.config/zsh/greetings/01_prompts/sammich1
-rw-r--r--dots/zsh/.config/zsh/greetings/01_prompts/shell_yeah1
-rw-r--r--dots/zsh/.config/zsh/greetings/01_prompts/time_to_hack1
-rw-r--r--dots/zsh/.config/zsh/greetings/01_prompts/typing1
-rw-r--r--dots/zsh/.config/zsh/greetings/01_prompts/yeehaw1
-rwxr-xr-xdots/zsh/.config/zsh/linux/init.zsh6
-rwxr-xr-xdots/zsh/.config/zsh/osx/armin.zsh3
l---------dots/zsh/.config/zsh/osx/bcd074b37296.zsh1
-rwxr-xr-xdots/zsh/.config/zsh/osx/init.zsh13
-rwxr-xr-xdots/zsh/.config/zsh/osx/work.zsh29
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/.editorconfig18
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/.github/ISSUE_TEMPLATE/bug-report.md36
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/.github/ISSUE_TEMPLATE/feature_request.md20
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/.github/workflows/integration.yml51
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/.gitignore2
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/.rspec3
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/.rubocop.yml30
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/.ruby-version1
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/CHANGELOG.md124
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/DESCRIPTION1
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/Dockerfile21
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/Gemfile5
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/Gemfile.lock41
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/INSTALL.md81
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/LICENSE23
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/Makefile35
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/README.md188
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/URL1
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/VERSION1
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/ZSH_VERSIONS14
-rwxr-xr-xdots/zsh/.config/zsh/plugins/zsh-autosuggestions/install_test_zsh.sh23
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/async_spec.rb70
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/integrations/auto_cd_spec.rb14
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/integrations/bracketed_paste_magic_spec.rb43
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/integrations/client_zpty_spec.rb14
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/integrations/glob_subst_spec.rb12
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/integrations/rebound_bracket_spec.rb13
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/integrations/vi_mode_spec.rb80
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/integrations/wrapped_widget_spec.rb39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/integrations/zle_input_stack_spec.rb24
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/kill_ring_spec.rb23
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/line_init_spec.rb17
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/multi_line_spec.rb8
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/options/buffer_max_size_spec.rb30
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/options/highlight_style_spec.rb7
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/options/original_widget_prefix_spec.rb7
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/options/strategy_spec.rb55
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/options/widget_lists_spec.rb121
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/spec_helper.rb54
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/strategies/completion_spec.rb72
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/strategies/history_spec.rb23
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/strategies/match_prev_cmd_spec.rb34
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/strategies/special_characters_helper.rb75
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/terminal_session.rb99
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/widgets/disable_spec.rb19
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/widgets/enable_spec.rb42
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/widgets/fetch_spec.rb24
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/widgets/toggle_spec.rb26
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/async.zsh77
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/bind.zsh106
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/config.zsh95
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/fetch.zsh27
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/highlight.zsh26
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/start.zsh33
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/strategies/completion.zsh137
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/strategies/history.zsh32
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/strategies/match_prev_cmd.zsh66
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/util.zsh11
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/widgets.zsh231
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.plugin.zsh1
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh867
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/.editorconfig15
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/.gitattributes1
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/.github/workflows/test.yml75
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/.gitignore3
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/.revision-hash1
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/.version1
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/COPYING.md23
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/HACKING.md99
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/INSTALL.md169
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/Makefile64
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/README.md97
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/changelog.md920
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/docs/highlighters.md132
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/docs/highlighters/brackets.md31
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/docs/highlighters/cursor.md24
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/docs/highlighters/line.md24
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/docs/highlighters/main.md121
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/docs/highlighters/pattern.md24
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/docs/highlighters/regexp.md65
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/docs/highlighters/root.md25
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/README.md8
l---------dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/README.md1
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/brackets-highlighter.zsh107
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/cursor-matchingbracket-line-finish.zsh36
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/cursor-matchingbracket.zsh47
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/empty-styles.zsh33
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/loop-styles.zsh53
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/mismatch-patentheses.zsh42
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/near-quotes.zsh42
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/nested-parentheses.zsh45
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/only-error.zsh34
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/quoted-patentheses.zsh34
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/simple-parentheses.zsh42
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/unclosed-patentheses.zsh41
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/unclosed-patentheses2.zsh40
l---------dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/cursor/README.md1
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/cursor/cursor-highlighter.zsh47
l---------dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/line/README.md1
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/line/line-highlighter.zsh44
l---------dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/README.md1
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/main-highlighter.zsh1846
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/abspath-in-command-position1.zsh35
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/abspath-in-command-position1b.zsh36
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/abspath-in-command-position2.zsh35
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/abspath-in-command-position3.zsh37
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/abspath-in-command-position3b.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/abspath-in-command-position4.zsh35
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/abspath-in-command-position5.zsh35
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-assignment1.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-basic.zsh35
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-brackets.zsh41
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-command-substitution.zsh37
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-comment1.zsh37
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-comment2.zsh37
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-complex.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-empty.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-eponymous1.zsh36
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-eponymous2.zsh36
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-in-cmdsubst.zsh43
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-loop.zsh44
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-loop2.zsh35
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-nested-precommand.zsh43
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-nested.zsh40
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-parameter.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-precommand-option-argument1.zsh42
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-precommand-option-argument2.zsh42
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-precommand-option-argument3.zsh42
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-precommand-option-argument4.zsh42
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-quoted.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-redirect.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-reuse1.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-reuse2.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-reuse3.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-reuse4.zsh42
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-reuse5.zsh43
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-self.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-self2.zsh37
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-to-dir.zsh36
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-to-dir1b.zsh37
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-unknown-token1.zsh37
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-unknown-token2.zsh37
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias.zsh53
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/always1.zsh41
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/always2.zsh43
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/always3.zsh43
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/anonymous-function.zsh44
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arg0-colon.zsh35
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arith-cmdsubst-mess.zsh46
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arith1.zsh37
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arith2.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-command-substitution.zsh42
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-doubled-parens.zsh37
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-empty.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-evaluation.zsh40
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-hist-expn.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-invalid-chars.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-multiplication.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-nested.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-quoted.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-unclosed.zsh37
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-unfinished.zsh41
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/array-cmdsep1.zsh45
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/array-cmdsep2.zsh41
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/array-cmdsep3.zsh41
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-append.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-argv.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-array.zsh41
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-array2.zsh40
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-array3.zsh41
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-invalid-command.zsh37
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-not-array.zsh36
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-not-array2.zsh36
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-quoted-cmdsubst.zsh45
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-semicolon.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-subshell.zsh37
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-value-quote1.zsh37
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-value-quote2.zsh37
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign.zsh42
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assignment-before-resword1.zsh40
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assignment-before-resword2.zsh40
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assignment-before-resword3.zsh37
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assignment-before-resword4.zsh40
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assignment-before-resword5.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assignment-quoted.zsh37
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/back-quoted-argument.zsh58
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/back-quoted-open.zsh41
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/backslash-continuation.zsh35
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/backslash-continuation2.zsh37
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/backslash-space.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/backslash.zsh34
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/bang-assign-array.zsh42
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/bang-assign-scalar.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/bang-pipeline.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/block-assignment-no-command.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/braces1.zsh41
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/braces2.zsh41
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-matching1.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-matching2.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch1.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch10-if-negative.zsh42
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch2.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch3.zsh36
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch4.zsh36
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch5.zsh37
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch6.zsh40
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch7.zsh45
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch8-if-positive.zsh53
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch8.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch9-if-positive.zsh42
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-premature-termination.zsh40
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/cdpath-abspath.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/cmdpos-elision-partial.zsh44
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/command-substitution-adjacent.zsh45
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/command-substitution-in-assignment.zsh42
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/command-substitution-unclosed.zsh45
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/commandseparator.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/comment-followed.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/comment-leading.zsh36
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/comment-off.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/comments.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/commmand-parameter.zsh45
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/control-flow.zsh57
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/control-flow2.zsh40
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/control-flow3.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/cthulhu.zsh70
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/dinbrack1.zsh41
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/dirs_blacklist.zsh40
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/dollar-dollar.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/dollar-noise.zsh42
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/dollar-paren.zsh49
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/dollar-quoted.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/dollar-quoted2.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/dollar-quoted3.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/double-hyphen-option.zsh35
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/double-quoted.zsh42
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/double-quoted2.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/double-quoted3.zsh42
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/double-quoted4.zsh37
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/empty-command-newline.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/empty-command.zsh36
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/empty-command2.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/empty-line.zsh36
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/equals1.zsh36
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/equals2.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/equals3.zsh36
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/equals4.zsh36
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/escaped-single-quote.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/exec-redirection1.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/fd-target-not-filename.zsh40
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/function-altsyntax.zsh45
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/function-named1.zsh44
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/function-named2.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/function.zsh42
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/glob.zsh41
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/global-alias1.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/globs-with-quoting.zsh43
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/hashed-command.zsh35
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/history-double-quoted-escaped.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/history-double-quoted-followed.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/history-double-quoted-no.zsh37
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/history-double-quoted-unescaped.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/history-double-quoted-yes.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/history-expansion.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/history-expansion2.zsh34
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/inheritance.zsh40
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/jobsubst-isnt-glob.zsh37
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/jobsubst-isnt-glob2.zsh37
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/loop-newline.zsh40
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/meta-no-eval1.zsh49
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/meta-no-eval2.zsh40
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/multiline-array-assignment1.zsh41
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/multiline-string.zsh37
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/multiline-string2.zsh36
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/multios-negates-globbing.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/multios-negates-globbing2.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/multiple-quotes.zsh42
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/multiple-redirections.zsh46
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/noglob-alias.zsh36
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/noglob-always.zsh45
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/noglob1.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/noglob2.zsh40
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/noglob3.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/noglob4.zsh45
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/null-exec.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/null-exec2-printenv.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/number_range-glob.zsh42
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/off-by-one.zsh40
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/opt-shwordsplit1.zsh40
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/optimized-cmdsubst-input.zsh43
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/option-dollar-quote-isnt-filename.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/option-path_dirs.zsh44
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/option-with-quotes.zsh37
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/order-path-after-dollar.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/order-path-before-globbing.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/param-positional-in-array-append.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/param-precommand-option-argument1.zsh42
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/param-precommand-option-argument3.zsh42
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/parameter-elision-command-word.zsh36
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/parameter-expansion-shwordsplit.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/parameter-expansion-untokenized1.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/parameter-expansion-untokenized2.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/parameter-star.zsh40
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/parameter-to-global-alias.zsh42
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/parameter-value-contains-command-position1.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/parameter-value-contains-command-position2.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/pasted-quotes.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-broken-symlink.zsh41
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-dollared-word.zsh45
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-dollared-word2.zsh37
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-dollared-word3.zsh40
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-dollared-word3b.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-dollared-word4.zsh36
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-mixed-quoting.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-separators.zsh53
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-separators2.zsh40
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-space.zsh37
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-tilde-home.zsh36
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-tilde-home2.zsh37
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-tilde-home3.zsh36
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-tilde-named.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path.zsh37
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path_prefix.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path_prefix2.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path_prefix3.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/plain-file-in-command-position.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand-killing1.zsh40
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand-killing2.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand-then-assignment.zsh37
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand-type1.zsh61
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand-type2.zsh55
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand-type3.zsh55
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand-uninstalled.zsh44
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand-unknown-option.zsh43
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand.zsh36
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand2.zsh36
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand3.zsh41
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand4.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/prefix-redirection.zsh42
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/process-substitution-after-redirection.zsh46
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/process-substitution-redirection-isnt-globbing.zsh41
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/process-substitution.zsh43
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/process-substitution2.zsh51
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/quoted-command-substitution-empty.zsh44
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/quoted-redirection-in-command-word.zsh37
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/rc-quotes.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection-all.zsh95
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection-comment.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection-from-param.zsh40
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection-in-cmdsubst.zsh41
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection-inhibits-elision.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection-is-not-option.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection-special-cases.zsh44
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection2.zsh41
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection3.zsh42
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/reserved-word.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/simple-command.zsh34
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/simple-redirection.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/subshell.zsh51
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/sudo-command.zsh54
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/sudo-comment.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/sudo-longopt.zsh38
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/sudo-redirection.zsh48
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/sudo-redirection2.zsh41
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/sudo-redirection3.zsh41
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/tilde-command-word.zsh37
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/time-and-nocorrect1.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/time-and-nocorrect2.zsh40
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/unbackslash.zsh34
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/unknown-command.zsh34
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/vanilla-newline.zsh39
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/vi-linewise-mode.zsh43
l---------dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/pattern/README.md1
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/pattern/pattern-highlighter.zsh60
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/pattern/test-data/rm-rf.zsh36
l---------dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/regexp/README.md1
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/regexp/regexp-highlighter.zsh62
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/regexp/test-data/complex.zsh37
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/regexp/test-data/subexpression.zsh36
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/regexp/test-data/word-boundary.zsh42
l---------dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/root/README.md1
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/root/root-highlighter.zsh44
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/after1-smaller.pngbin0 -> 2517 bytes
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/after1.pngbin0 -> 5842 bytes
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/after2-smaller.pngbin0 -> 4386 bytes
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/after2.pngbin0 -> 10228 bytes
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/after3-smaller.pngbin0 -> 1673 bytes
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/after3.pngbin0 -> 3427 bytes
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/after4-smaller.pngbin0 -> 3224 bytes
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/before1-smaller.pngbin0 -> 1589 bytes
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/before1.pngbin0 -> 2636 bytes
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/before2-smaller.pngbin0 -> 2605 bytes
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/before2.pngbin0 -> 2614 bytes
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/before3-smaller.pngbin0 -> 763 bytes
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/before3.pngbin0 -> 1461 bytes
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/before4-smaller.pngbin0 -> 2987 bytes
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/preview-smaller.pngbin0 -> 5982 bytes
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/preview.pngbin0 -> 14650 bytes
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/release.md21
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/tests/README.md124
-rwxr-xr-xdots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/tests/edit-failed-tests40
-rwxr-xr-xdots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/tests/generate.zsh117
-rwxr-xr-xdots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/tests/tap-colorizer.zsh71
-rwxr-xr-xdots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/tests/tap-filter47
-rwxr-xr-xdots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/tests/test-highlighting.zsh291
-rwxr-xr-xdots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/tests/test-perfs.zsh103
-rwxr-xr-xdots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/tests/test-zprof.zsh78
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.plugin.zsh2
-rw-r--r--dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh587
-rwxr-xr-xdots/zsh/.config/zsh/setup/aliases.zsh27
-rwxr-xr-xdots/zsh/.config/zsh/setup/device.zsh30
-rwxr-xr-xdots/zsh/.config/zsh/setup/gpg.zsh.j223
-rwxr-xr-xdots/zsh/.config/zsh/setup/history.zsh14
-rwxr-xr-xdots/zsh/.config/zsh/setup/misc.zsh11
-rwxr-xr-xdots/zsh/.config/zsh/setup/tools.zsh20
-rw-r--r--dots/zsh/.hushlogin0
-rw-r--r--dots/zsh/.zshenv1
845 files changed, 29635 insertions, 0 deletions
diff --git a/dots/aerospace/.aerospace.toml b/dots/aerospace/.aerospace.toml
new file mode 100644
index 0000000..f4199e6
--- /dev/null
+++ b/dots/aerospace/.aerospace.toml
@@ -0,0 +1,158 @@
+after-login-command = []
+after-startup-command = [
+ 'exec-and-forget borders active_color=0xffe1e3e4 inactive_color=0xff494d64 width=4.0'
+]
+
+start-at-login = true
+
+# Normalizations. See: https://nikitabobko.github.io/AeroSpace/guide#normalization
+enable-normalization-flatten-containers = true
+enable-normalization-opposite-orientation-for-nested-containers = true
+
+# See: https://nikitabobko.github.io/AeroSpace/guide#layouts
+# The 'accordion-padding' specifies the size of accordion padding
+# You can set 0 to disable the padding feature
+accordion-padding = 30
+
+# Possible values: tiles|accordion
+default-root-container-layout = 'tiles'
+
+# Possible values: horizontal|vertical|auto
+# 'auto' means: wide monitor (anything wider than high) gets horizontal orientation,
+# tall monitor (anything higher than wide) gets vertical orientation
+default-root-container-orientation = 'auto'
+
+on-focus-changed = ['move-mouse window-lazy-center']
+
+# You can effectively turn off macOS "Hide application" (cmd-h) feature by toggling this flag
+# Useful if you don't use this macOS feature, but accidentally hit cmd-h or cmd-alt-h key
+# Also see: https://nikitabobko.github.io/AeroSpace/goodies#disable-hide-app
+automatically-unhide-macos-hidden-apps = true
+
+# Possible values: (qwerty|dvorak|colemak)
+# See https://nikitabobko.github.io/AeroSpace/guide#key-mapping
+[key-mapping]
+ preset = 'qwerty'
+
+# Gaps between windows (inner-*) and between monitor edges (outer-*).
+# Possible values:
+# - Constant: gaps.outer.top = 8
+# - Per monitor: gaps.outer.top = [{ monitor.main = 16 }, { monitor."some-pattern" = 32 }, 24]
+# In this example, 24 is a default value when there is no match.
+# Monitor pattern is the same as for 'workspace-to-monitor-force-assignment'.
+# See:
+# https://nikitabobko.github.io/AeroSpace/guide#assign-workspaces-to-monitors
+[gaps]
+ inner.horizontal = 8
+ inner.vertical = 8
+ outer.left = 8
+ outer.bottom = 8
+ outer.top = 8
+ outer.right = 8
+
+[mode.main.binding]
+ # All possible commands: https://nikitabobko.github.io/AeroSpace/commands
+
+ # See: https://nikitabobko.github.io/AeroSpace/commands#layout
+ alt-slash = 'layout tiles horizontal vertical'
+ alt-comma = 'layout accordion horizontal vertical'
+
+ alt-ctrl-d = 'close'
+ alt-h = 'focus left'
+ alt-j = 'focus down'
+ alt-k = 'focus up'
+ alt-l = 'focus right'
+
+ alt-shift-h = 'move left'
+ alt-shift-j = 'move down'
+ alt-shift-k = 'move up'
+ alt-shift-l = 'move right'
+
+ alt-ctrl-space = ['mode main']
+ alt-ctrl-h = ['join-with left', 'mode main']
+ alt-ctrl-j = ['join-with down', 'mode main']
+ alt-ctrl-k = ['join-with up', 'mode main']
+ alt-ctrl-l = ['join-with right', 'mode main']
+
+ alt-minus = 'resize smart -50'
+ alt-equal = 'resize smart +50'
+
+ # Monitor One Workspaces
+ alt-1 = 'workspace 1'
+ alt-2 = 'workspace 2'
+ alt-3 = 'workspace 3'
+ alt-4 = 'workspace 4'
+ alt-5 = 'workspace 5'
+ alt-q = 'workspace 1'
+ alt-w = 'workspace 2'
+ alt-e = 'workspace 3'
+ alt-r = 'workspace 4'
+ alt-t = 'workspace 5'
+ alt-shift-1 = 'move-node-to-workspace 1'
+ alt-shift-2 = 'move-node-to-workspace 2'
+ alt-shift-3 = 'move-node-to-workspace 3'
+ alt-shift-4 = 'move-node-to-workspace 4'
+ alt-shift-5 = 'move-node-to-workspace 5'
+ alt-shift-q = 'move-node-to-workspace 1'
+ alt-shift-w = 'move-node-to-workspace 2'
+ alt-shift-e = 'move-node-to-workspace 3'
+ alt-shift-r = 'move-node-to-workspace 4'
+ alt-shift-t = 'move-node-to-workspace 5'
+
+ # Monitor Two Workspaces
+ alt-6 = 'workspace 6'
+ alt-7 = 'workspace 7'
+ alt-8 = 'workspace 8'
+ alt-9 = 'workspace 9'
+ alt-0 = 'workspace 10'
+ alt-y = 'workspace 6'
+ alt-u = 'workspace 7'
+ alt-i = 'workspace 8'
+ alt-o = 'workspace 9'
+ alt-p = 'workspace 10'
+ alt-shift-6 = 'move-node-to-workspace 6'
+ alt-shift-7 = 'move-node-to-workspace 7'
+ alt-shift-8 = 'move-node-to-workspace 8'
+ alt-shift-9 = 'move-node-to-workspace 9'
+ alt-shift-0 = 'move-node-to-workspace 10'
+ alt-shift-y = 'move-node-to-workspace 6'
+ alt-shift-u = 'move-node-to-workspace 7'
+ alt-shift-i = 'move-node-to-workspace 8'
+ alt-shift-o = 'move-node-to-workspace 9'
+ alt-shift-p = 'move-node-to-workspace 10'
+
+ # See: https://nikitabobko.github.io/AeroSpace/commands#workspace-back-and-forth
+ alt-tab = 'workspace-back-and-forth'
+ # See: https://nikitabobko.github.io/AeroSpace/commands#move-workspace-to-monitor
+ alt-shift-tab = 'move-workspace-to-monitor --wrap-around next'
+
+ # See: https://nikitabobko.github.io/AeroSpace/commands#mode
+ alt-shift-semicolon = 'mode service'
+
+[workspace-to-monitor-force-assignment]
+ 1 = 'main'
+ 2 = 'main'
+ 3 = 'main'
+ 4 = 'main'
+ 5 = 'main'
+ 6 = 'secondary'
+ 7 = 'secondary'
+ 8 = 'secondary'
+ 9 = 'secondary'
+ 10 = 'secondary'
+
+# 'service' binding mode declaration.
+# See: https://nikitabobko.github.io/AeroSpace/guide#binding-modes
+[mode.service.binding]
+ esc = ['reload-config', 'mode main']
+ r = ['flatten-workspace-tree', 'mode main'] # reset layout
+ f = ['layout floating tiling', 'mode main'] # Toggle between floating and tiling layout
+ backspace = ['close-all-windows-but-current', 'mode main']
+
+ # sticky is not yet supported https://github.com/nikitabobko/AeroSpace/issues/2
+ #s = ['layout sticky tiling', 'mode main']
+
+ down = 'volume down'
+ up = 'volume up'
+ shift-down = ['volume set 0', 'mode main']
+
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/LICENSE b/dots/alacritty/.config/alacritty/alacritty-theme/LICENSE
new file mode 100644
index 0000000..149bf8b
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/LICENSE
@@ -0,0 +1,202 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+Copyright 2019-2023 indrajit
+Copyright 2023- The Alacritty Project
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/README.md b/dots/alacritty/.config/alacritty/alacritty-theme/README.md
new file mode 100644
index 0000000..cf84987
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/README.md
@@ -0,0 +1,212 @@
+# Alacritty Theme
+
+Collection of colorschemes for easy configuration of the [Alacritty terminal
+emulator].
+
+[Alacritty terminal emulator]: https://github.com/alacritty/alacritty
+
+## Installation
+
+### Imports
+
+Clone the repository, or download the theme of your choice:
+
+```sh
+# We use Alacritty's default Linux config directory as our storage location here.
+mkdir -p ~/.config/alacritty/themes
+git clone https://github.com/alacritty/alacritty-theme ~/.config/alacritty/themes
+```
+
+Add an import to your `alacritty.toml` (Replace `{theme}` with your desired
+colorscheme):
+
+```toml
+[general]
+import = [
+ "~/.config/alacritty/themes/themes/{theme}.toml"
+]
+```
+
+### Manual
+
+To manually include a colorscheme in an existing `alacritty.toml`, you just need
+to copy the entire content of the theme into the root level of your
+configuration file.
+
+## Color Schemes
+
+| NAME | COLORS |
+|:-------------------------------------------------------------------------------------------------------------------------------------------------:|:----------------------------------------------------------:|
+| **_acme_**<br>[source](https://github.com/plan9-for-vimspace/acme-colors) | ![acme](images/acme.png)
+| **_afterglow_**<br>[source](https://github.com/YabataDesign/afterglow-theme) | ![base16_default_dark](images/afterglow.png) |
+| **_alabaster_**<br>[source](https://github.com/tonsky/vscode-theme-alabaster) | ![alabaster](images/alabaster.png) |
+| **_alabaster_dark_**<br>[source](https://github.com/gargakshit/vscode-theme-alabaster-dark) | ![alabaster_dark](images/alabaster_dark.png) |
+| **_alacritty_0_12_**<br>[source](https://github.com/alacritty/alacritty/blob/v0.12.3/alacritty/src/config/color.rs) | ![alacritty_0_12](images/alacritty_0_12.png) |
+| **_argonaut_**<br>[source](https://github.com/pwaleczek/Argonaut-theme) | ![base16_default_dark](images/argonaut.png) |
+| **_ashes_dark_**<br>[source](https://marketplace.visualstudio.com/items?itemName=AndrsDC.base16-themes) | ![base16_ashes_dark](images/ashes_dark.png) |
+| **_ashes_light_**<br>[source](https://marketplace.visualstudio.com/items?itemName=AndrsDC.base16-themes) | ![base16_ashes_light](images/ashes_light.png) |
+| **_aura_**<br>[source](https://github.com/daltonmenezes/aura-theme) | ![aura](images/aura.png) |
+| **_autumn_**<br>[source](https://github.com/YorickPeterse/Autumn.vim) | ![autumn](images/autumn.png) |
+| **_ayu_dark_**<br>[source](https://github.com/ayu-theme/ayu-colors) | ![ayu_dark](images/ayu_dark.png) |
+| **_ayu_light_**<br>[source](https://github.com/ayu-theme/ayu-colors) | ![ayu_light](images/ayu_light.png) |
+| **_ayu_mirage_**<br>[source](https://github.com/ayu-theme/ayu-colors) | ![ayu_mirage](images/ayu_mirage.png) |
+| **_baitong_**<br>[source](https://github.com/cypj/baitong-theme) | ![baitong](images/baitong.png) |
+| **_base16_default_dark_**<br>[source](https://github.com/chriskempson/base16) | ![base16_default_dark](images/base16_default_dark.png) |
+| **_blood_moon_**<br>[source](https://github.com/dguo/blood-moon) | ![blood_moon](images/blood_moon.png) |
+| **_bluish_** | ![bluish](images/bluish.png) |
+| **_breeze_**<br>[source](https://github.com/KDE/breeze) | ![breeze](images/breeze.png) |
+| **_campbell_**<br>[source](https://blogs.msdn.microsoft.com/commandline/2017/08/02/updating-the-windows-console-colors) | ![campbell](images/campbell.png) |
+| **_carbonfox_**<br>[source](https://github.com/EdenEast/nightfox.nvim/blob/7557f26defd093c4e9bc17f28b08403f706f5a44/extra/carbonfox/alacritty.toml) | ![carbonfox](images/carbonfox.png) |
+| **_catppuccin_frappe_**<br>[source](https://github.com/catppuccin/alacritty) | ![catppuccin_frappe](images/catppuccin_frappe.png) |
+| **_catppuccin_latte_**<br>[source](https://github.com/catppuccin/alacritty) | ![catppuccin_latte](images/catppuccin_latte.png) |
+| **_catppuccin_macchiato_**<br>[source](https://github.com/catppuccin/alacritty) | ![catppuccin_macchiato](images/catppuccin_macchiato.png) |
+| **_catppuccin_mocha_**<br>[source](https://github.com/catppuccin/alacritty) | ![catppuccin_mocha](images/catppuccin_mocha.png) |
+| **_challenger_deep_**<br>[source](https://github.com/challenger-deep-theme/alacritty) | ![challenger_deep](images/challenger_deep.png) |
+| **_chicago95_** | ![chicago95](images/chicago95.png) |
+| **_citylights_**<br>[source](https://citylights.xyz/) | ![citylights](images/citylights.png) |
+| **_Cobalt2_**<br>[source](https://github.com/wesbos/cobalt2/tree/master/Cobalt2) | ![Cobalt2](images/Cobalt2.png) |
+| **_cyber_punk_neon_**<br>[source](https://github.com/Roboron3042/Cyberpunk-Neon) | ![cyber_punk_neon](images/cyber_punk_neon.png) |
+| **_dark_pastels_**<br>[source](https://invent.kde.org/utilities/konsole/-/blob/master/data/color-schemes/DarkPastels.colorscheme) | ![dark_pastels](images/dark_pastels.png) |
+| **_dark_plus_**<br>[source](https://github.com/microsoft/vscode/blob/12f9169c935bd3fd2730777130330c3bb19e0005/extensions/theme-defaults/themes/dark_plus.json) | ![dark_plus](images/dark_plus.png) |
+| **_dark_pride_**<br>[source](https://github.com/kovidgoyal/kitty-themes/blob/master/themes/dark_pride.conf) | ![dark_pride](images/dark_pride.png) |
+| **_dawnfox_**<br>[source](https://github.com/EdenEast/nightfox.nvim/blob/7557f26defd093c4e9bc17f28b08403f706f5a44/extra/dawnfox/alacritty.toml) | ![dawnfox](images/dawnfox.png) |
+| **_dayfox_**<br>[source](https://github.com/EdenEast/nightfox.nvim/blob/7557f26defd093c4e9bc17f28b08403f706f5a44/extra/dayfox/alacritty.toml) | ![dayfox](images/dayfox.png) |
+| **_deep_space_** | ![depp_space](images/deep_space.png) |
+| **_doom_one_**<br>[source](https://github.com/hlissner/emacs-doom-themes) | ![doom_one](images/doom_one.png) |
+| **_dracula_**<br>[source](https://draculatheme.com) | ![dracula](images/dracula.png) |
+| **_dracula_plus_**<br>[source](https://draculatheme.com) | ![dracula_plus](images/dracula_plus.png) |
+| **_duskfox_**<br>[source](https://github.com/EdenEast/nightfox.nvim/blob/7557f26defd093c4e9bc17f28b08403f706f5a44/extra/duskfox/alacritty.toml) | ![duskfox](images/duskfox.png) |
+| **_enfocado_dark_**<br>[source](https://github.com/wuelnerdotexe/vim-enfocado.git) |![enfocado_dark](images/enfocado_dark.png) |
+| **_enfocado_light_**<br>[source](https://github.com/wuelnerdotexe/vim-enfocado.git) |![enfocado_light](images/enfocado_light.png) |
+| **_everforest_dark_**<br>[source](https://github.com/sainnhe/everforest) | ![everforest_dark](images/everforest_dark.png) |
+| **_everforest_light_**<br>[source](https://github.com/sainnhe/everforest) | ![everforest_light](images/everforest_light.png) |
+| **_falcon_**<br>[source](https://github.com/fenetikm/falcon) | ![falcon](images/falcon.png) |
+| **_flat_remix_**<br>[source](https://github.com/Mayccoll/Gogh/blob/master/themes/flat-remix.sh) | ![flat_remix](images/flat_remix.png) |
+| **_flexoki_**<br>[source](https://github.com/kepano/flexoki/tree/main/alacritty) | ![flexoki](images/flexoki.png) |
+| **_github_dark_**<br>[source](https://github.com/projekt0n/github-theme-contrib/blob/main/themes/alacritty/github_dark.yml) | ![github_dark](images/github_dark.png) |
+| **_github_dark_colorblind_**<br>[source](https://github.com/projekt0n/github-theme-contrib/blob/main/themes/alacritty/github_dark_colorblind.yml) | ![github_dark_colorblind](images/github_dark_colorblind.png) |
+| **_github_dark_dimmed_**<br>[source](https://github.com/projekt0n/github-theme-contrib/blob/main/themes/alacritty/github_dark_dimmed.yml) | ![github_dark_dimmed](images/github_dark_dimmed.png) |
+| **_github_dark_high_contrast_**<br>[source](https://github.com/projekt0n/github-theme-contrib/blob/main/themes/alacritty/github_dark_high_contrast.yml)| ![github_dark_high_contrast](images/github_dark_high_contrast.png)|
+| **_github_dark_tritanopia_**<br>[source](https://github.com/projekt0n/github-theme-contrib/blob/main/themes/alacritty/github_dark_tritanopia.yml) | ![github_dark_tritanopia](images/github_dark_tritanopia.png) |
+| **_github_light_**<br>[source](https://github.com/projekt0n/github-theme-contrib/blob/main/themes/alacritty/github_light.yml) | ![github_light](images/github_light.png) |
+| **_github_light_colorblind_**<br>[source](https://github.com/projekt0n/github-theme-contrib/blob/main/themes/alacritty/github_light_colorblind.yml)| ![github_light_colorblind](images/github_light_colorblind.png) |
+| **_github_light_high_contrast_**<br>[source](https://github.com/projekt0n/github-theme-contrib/blob/main/themes/alacritty/github_light_high_contrast.yml)| ![github_light_high_contrast](images/github_light_high_contrast.png)|
+| **_github_light_tritanopia_**<br>[source](https://github.com/projekt0n/github-theme-contrib/blob/main/themes/alacritty/github_light_tritanopia.yml)| ![github_light_tritanopia](images/github_light_tritanopia.png) |
+| **_google_** | ![falcon](images/google.png) |
+| **_gotham_** | ![falcon](images/gotham.png) |
+| **_gnome_terminal_**<br>[source](https://gitlab.gnome.org/GNOME/gnome-terminal) | ![gnome_terminal](images/gnome_terminal.png) |
+| **_gruber_darker_**<br>[source](https://github.com/rexim/gruber-darker-theme) | ![gruber_darker](images/gruber_darker.png) |
+| **_gruvbox_dark_**<br>[source](https://github.com/morhetz/gruvbox) | ![gruvbox_dark](images/gruvbox_dark.png) |
+| **_gruvbox_light_**<br>[source](https://github.com/morhetz/gruvbox) | ![gruvbox_light](images/gruvbox_light.png) |
+| **_gruvbox_material_hard_dark_**<br>[source](https://github.com/sainnhe/gruvbox-material) | ![gruvbox_material_hard_dark](images/gruvbox_material_hard_dark.png) |
+| **_gruvbox_material_hard_light_**<br>[source](https://github.com/sainnhe/gruvbox-material) | ![gruvbox_material_hard_light](images/gruvbox_material_hard_light.png) |
+| **_gruvbox_material_medium_dark_**<br>[source](https://github.com/sainnhe/gruvbox-material) | ![gruvbox_material_medium_dark](images/gruvbox_material_medium_dark.png) |
+| **_gruvbox_material_medium_light_**<br>[source](https://github.com/sainnhe/gruvbox-material) | ![gruvbox_material_medium_light](images/gruvbox_material_medium_light.png) |
+| **_hardhacker_**<br>[source](https://github.com/hardhackerlabs/theme-alacritty) | ![hardhacker](images/hardhacker.png) |
+| **_hatsunemiku_**<br>[source](https://github.com/4513ECHO/vim-colors-hatsunemiku/) | ![hatsunemiku](images/hatsunemiku.png) |
+| **_high_contrast_** | ![gruvbox_light](images/high_contrast.png) |
+| **_horizon_dark_**<br>[source](https://github.com/jolaleye/horizon-theme-vscode) | ![horizon_dark](images/horizon_dark.png) |
+| **_hyper_**<br>[source](https://hyper.is) | ![hyper](images/hyper.png) |
+| **_inferno_**<br>[source](https://github.com/hafiz-muhammad/inferno-alacritty-theme) | ![inferno](images/inferno.png) |
+| **_iris_**<br>[source](https://github.com/DioptricDesign/Iris) | ![iris](images/iris.png) |
+| **_iterm_** | ![iterm](images/iterm.png) |
+| **_kanagawa_dragon_**<br>[source](https://github.com/rebelot/kanagawa.nvim) | ![kanagawa_dragon](images/kanagawa_dragon.png) |
+| **_kanagawa_wave_**<br>[source](https://github.com/rebelot/kanagawa.nvim) | ![kanagawa_wave](images/kanagawa_wave.png) |
+| **_kimbie_dark_**<br>[source](https://github.com/idleberg/Kimbie.tmTheme) | ![kimbie_dark](images/kimbie_dark.png) |
+| **_kimbie_light_**<br>[source](https://github.com/idleberg/Kimbie.tmTheme) | ![kimbie_dark](images/kimbie_light.png) |
+| **_konsole_linux_** | ![iterm](images/konsole_linux.png) |
+| **_low_contrast_** | ![iterm](images/low_contrast.png) |
+| **_Mariana_**<br>[source](https://github.com/mbadolato/iTerm2-Color-Schemes/blob/master/alacritty/Mariana.yml) | ![iterm](images/mariana.png) |
+| **_marine_dark_**<br>[source](https://github.com/ProDeSquare/alacritty-colorschemes/blob/master/themes/marine_dark.yaml) | ![marine_dark](images/marine_dark.png) |
+| **_material_theme_**<br>[source](https://github.com/equinusocio/material-theme) | ![material_theme](images/material_theme.png) |
+| **_material_theme_mod_** | ![material_theme_mod](images/material_theme_mod.png) |
+| **_meliora_**<br>[source](https://github.com/ramojus/mellifluous.nvim) | ![meliora](images/meliora.png) |
+| **_miasma_**<br>[source](https://github.com/xero/miasma.nvim/blob/main/extras/miasma.toml) | ![miasma](images/miasma.png) |
+| **_midnight_haze_**<br>[source](https://github.com/hafiz-muhammad/midnight-haze-alacritty-theme) | ![midnight_haze](images/midnight_haze.png) |
+| **_monokai_**<br>[source](https://unpkg.com/browse/alacritty-themes@4.1.5/themes/Monokai.dark.yml) | ![monokai](images/monokai.png) |
+| **_monokai_charcoal_**<br>[source](https://github.com/dodeca12/Monokai-Charcoal-Theme-for-Alacritty/blob/main/monokai_charcoal_white.yaml) | ![monokai_charcoal](images/monokai_charcoal.png) |
+| **_monokai_pro_**<br>[source](https://gist.github.com/AlphaTechnolog/d1d5f6557f77f71519cb5713268da7dd) | ![monokai_pro](images/monokai_pro.png) |
+| **_moonfly_**<br>[source](https://github.com/bluz71/vim-moonfly-colors) | ![moonfly](images/moonfly.png) |
+| **_moonlight_ii_vscode_**<br>[source](https://github.com/atomiks/moonlight-vscode-theme) | ![moonlight_ii_vscode](images/moonlight_ii_vscode.png) |
+| **_msx_**<br>[source](https://paulwratt.github.io/programmers-palettes/HW-MSX/HW-MSX-palettes.html) | ![msx](images/msx.png) |
+| **_nightfly_**<br>[source](https://github.com/bluz71/vim-nightfly-colors) | ![nightfly](images/nightfly.png) |
+| **_nightfox_**<br>[source](https://github.com/EdenEast/nightfox.nvim/blob/7557f26defd093c4e9bc17f28b08403f706f5a44/extra/nightfox/alacritty.toml) | ![nightfox](images/nightfox.png) |
+| **_night_owl_**<br>[source](https://vscodethemes.com/e/sdras.night-owl/night-owl) | ![night_owl](images/night_owl.png) |
+| **_night_owlish_light_** | ![night_owlish_light](images/night_owlish_light.png) |
+| **_noctis_lux_**<br>[source](https://github.com/liviuschera/noctis) | ![noctis_lux](images/noctis_lux.png) |
+| **_nord_**<br>[source](https://github.com/nordtheme/alacritty) | ![nord](images/nord.png) |
+| **_nordfox_**<br>[source](https://github.com/EdenEast/nightfox.nvim/blob/7557f26defd093c4e9bc17f28b08403f706f5a44/extra/nordfox/alacritty.toml) | ![nordfox](images/nordfox.png) |
+| **_nordic_**<br>[source](https://github.com/AlexvZyl/nordic.nvim) | ![nordic](images/nordic.png) |
+| **_nord_light_**<br>[source](https://github.com/nordtheme/alacritty/issues/28#issuecomment-1422225211) | ![nord](images/nord_light.png) |
+| **_oceanic_next_**<br>[source](https://github.com/voronianski/oceanic-next-color-scheme) | ![oceanic_next](images/oceanic_next.png) |
+| **_omni_**<br>[source](https://github.com/getomni/alacritty/blob/main/omni.yml) | ![omni](images/omni.png) |
+| **_one_dark_** | ![one_dark](images/one_dark.png) |
+| **_one_light_**<br>[source](https://github.com/dexpota/kitty-themes/blob/master/themes/AtomOneLight.conf) | ![one_light](images/one_light.png) |
+| **_oxocarbon_**<br>[source](https://github.com/nyoom-engineering/oxocarbon.nvim/tree/main) | ![oxocarbon](images/oxocarbon.png) |
+| **_palenight_**<br>[source](https://github.com/JonathanSpeek/palenight-iterm2) | ![palenight](images/palenight.png) |
+| **_papercolor_dark_**<br>[source](https://github.com/NLKNguyen/papercolor-theme/blob/master/colors/PaperColor.vim#L126) | ![papercolor_dark](images/papercolor_dark.png) |
+| **_papercolor_light_**<br>[source](https://github.com/NLKNguyen/papercolor-theme/blob/master/colors/PaperColor.vim#L36) | ![papercolor_light](images/papercolor_light.png) |
+| **_papertheme_**<br>[source](https://github.com/s6muel/paper-theme/blob/main/themes/alacritty/paper-theme.yml) | ![papercolor_light](images/papertheme.png) |
+|**_pastel_dark_**<br>[source](https://github.com/gnachman/iTerm2/blob/01c280152acebfe123f56e0215a3c178297a0edc/plists/ColorPresets.plist#L3715-L3924)| ![pastel_dark](images/pastel_dark.png) |
+| **_pencil_dark_**<br>[source](https://github.com/mattly/iterm-colors-pencil) | ![pencil_dark](images/pencil_dark.png) |
+| **_pencil_light_**<br>[source](https://github.com/mattly/iterm-colors-pencil) | ![pencil_light](images/pencil_light.png) |
+| **_rainbow_** | ![rainbow](images/rainbow.png) |
+| **_remedy_dark_**<br>[source](https://github.com/robertrossmann/vscode-remedy) | ![remedy_dark](images/remedy_dark.png) |
+| **_rigel_**<br>[source](https://github.com/Rigellute/rigel) | ![rigel](images/rigel.png) |
+| **_rose_pine_**<br>[source](https://github.com/rose-pine/alacritty) | ![rose_pine](images/rose_pine.png) |
+| **_rose_pine_dawn_**<br>[source](https://github.com/rose-pine/alacritty) | ![rose_pine_dawn](images/rose_pine_dawn.png) |
+| **_rose_pine_moon_**<br>[source](https://github.com/rose-pine/alacritty) | ![rose_pine_moon](images/rose_pine_moon.png) |
+| **seashells**<br>[source](https://raw.githubusercontent.com/mbadolato/iTerm2-Color-Schemes/master/schemes/SeaShells.itermcolors) | ![seashells](images/seashells.png) |
+| **selenized_dark**<br>[source](https://github.com/jan-warchol/selenized/blob/master/terminals/alacritty/selenized-dark.yml) | ![selenized_dark](images/selenized_dark.png) |
+| **selenized_light**<br>[source](https://github.com/jan-warchol/selenized/blob/master/terminals/alacritty/selenized-light.yml) | ![selenized_light](images/selenized_light.png) |
+| **seoul256-light**<br>[source](https://github.com/junegunn/seoul256.vim) | ![seoul256-light](images/seoul256-light.png) |
+| **smoooooth**<br>[source](https://github.com/gnachman/iTerm2/blob/33945e63ad48ed80d6cc1adf7cbeb663217652d2/plists/ColorPresets.plist#L4345-L4685) | ![smoooooth](images/smoooooth.png) |
+| **_snazzy_**<br>[source](https://github.com/sindresorhus/hyper-snazzy) | ![snazzy](images/snazzy.png) |
+| **_solarized_dark_**<br>[source](http://ethanschoonover.com/solarized) | ![solarized_dark](images/solarized_dark.png) |
+| **_solarized_light_**<br>[source](http://ethanschoonover.com/solarized) | ![solarized_light](images/solarized_light.png) |
+| **_solarized_osaka_**<br>[source](https://github.com/craftzdog/solarized-osaka.nvim) | ![solarized_osaka](images/solarized_osaka.png) |
+| **_sonokai_**<br>[source](https://github.com/sainnhe/sonokai) | ![sonokai](images/sonokai.png) |
+| **_spacegray_**<br>[source](https://github.com/SublimeText/Spacegray) | ![spacegray](images/spacegray.png)
+| **_synthwave_84_**<br>[source](https://github.com/robb0wen/synthwave-vscode) | ![synthwave_84](images/synthwave_84.png) |
+| **_taerminal_**<br>[source](https://github.com/cozywigwam/iterm-taerminal) | ![taerminal](images/taerminal.png) |
+| **_tango_dark_**<br>[source](https://github.com/GNOME/gnome-terminal/blob/18939a24d21d6b7c6edd57a00a3a8a48f3aecec5/src/profile-editor.c#L213) | ![tango_dark](images/tango_dark.png) |
+| **_tender_**<br>[source](https://github.com/huyvohcmc/tender-alacritty) | ![tender](images/tender.png) |
+| **_terafox_**<br>[source](https://github.com/EdenEast/nightfox.nvim/blob/7557f26defd093c4e9bc17f28b08403f706f5a44/extra/terafox/alacritty.toml) | ![terafox](images/terafox.png) |
+| **_terminal_app_** | ![terminal_app](images/terminal_app.png) |
+| **_thelovelace_** | ![terminal_app](images/thelovelace.png) |
+| **_tokyo_night_**<br>[source](https://github.com/zatchheems/tokyo-night-alacritty-theme) | ![tokyo_night](images/tokyo_night.png) |
+| **_tokyo_night_storm_**<br>[source](https://github.com/zatchheems/tokyo-night-alacritty-theme) | ![tokyo_night_storm](images/tokyo_night_storm.png) |
+| **_tokyo_night_enhanced_**<br>[source](https://github.com/Venage5603/Tokyo-Night-Dark-Enhanced) | ![tokyo_night_enhanced](images/tokyo_night_enhanced.png) |
+| **_tomorrow_night_**<br>[source](https://github.com/ChrisKempson/Tomorrow-Theme) | ![tomorrow_night](images/tomorrow_night.png) |
+| **_tomorrow_night_bright_**<br>[source](https://github.com/ChrisKempson/Tomorrow-Theme) | ![tomorrow_night_bright](images/tomorrow_night_bright.png) |
+| **_ubuntu_**<br>[source](https://design.ubuntu.com/brand/colour-palette/) | ![ubuntu](images/ubuntu.png) |
+| **_vesper_**<br>[source](https://github.com/raunofreiberg/vesper) | ![vesper](images/vesper.png) |
+| **_vscode_**<br>[source](https://github.com/microsoft/vscode/blob/main/src/vs/workbench/contrib/terminal/common/terminalColorRegistry.ts) | ![vscode](images/vscode.png) |
+| **_wombat_**<br>[source](https://github.com/djoyner/iTerm2-wombat) | ![wombat](images/wombat.png) |
+| **_xterm_** | ![xterm](images/xterm.png) |
+| **_zenburn_**<br>[source](https://github.com/jnurmine/Zenburn) | ![zenburn](images/zenburn.png) |
+
+## Contributing
+
+Bug reports and pull requests are welcome on GitHub at the [alacritty-theme]
+repository.
+
+[alacritty-theme]: https://github.com/alacritty/alacritty-theme
+
+To add a new theme, please create a Pull Request. Note that submissions by theme
+authors are not accepted, to ensure there's at least some community interest.
+The following changes must be made for a new theme:
+
+ - Add your theme to the `themes` directory with the `{theme}.toml` file format
+ - Create a screenshot of your theme using the [`print_colors.sh`](./print_colors.sh) script
+ - Add the screenshot to the `images` directory with the `{theme}.png` file format
+ - Add your theme to the `README.md`, following alphabetical ordering
+
+## Maintainers
+
+ * **indrajit** - *Author* - [eendroroy](https://github.com/eendroroy)
+ * **Christian Dürr** - *Maintainer* - [chrisduerr](https://github.com/chrisduerr)
+
+## License
+
+The project is available as open source under the terms of the [Apache License, Version 2.0](LICENSE)
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/Cobalt2.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/Cobalt2.png
new file mode 100644
index 0000000..f410a18
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/Cobalt2.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/acme.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/acme.png
new file mode 100644
index 0000000..a4fc8d0
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/acme.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/afterglow.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/afterglow.png
new file mode 100644
index 0000000..9ab4f3d
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/afterglow.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/alabaster.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/alabaster.png
new file mode 100644
index 0000000..6b9042e
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/alabaster.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/alabaster_dark.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/alabaster_dark.png
new file mode 100644
index 0000000..ffea3cb
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/alabaster_dark.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/alacritty_0_12.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/alacritty_0_12.png
new file mode 100644
index 0000000..e9d3f70
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/alacritty_0_12.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/argonaut.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/argonaut.png
new file mode 100644
index 0000000..2845c9b
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/argonaut.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/ashes_dark.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/ashes_dark.png
new file mode 100644
index 0000000..6380c27
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/ashes_dark.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/ashes_light.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/ashes_light.png
new file mode 100644
index 0000000..bb0e899
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/ashes_light.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/aura.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/aura.png
new file mode 100644
index 0000000..3324869
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/aura.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/autumn.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/autumn.png
new file mode 100644
index 0000000..9b3d4c0
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/autumn.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/ayu_dark.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/ayu_dark.png
new file mode 100644
index 0000000..4d4581d
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/ayu_dark.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/ayu_light.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/ayu_light.png
new file mode 100644
index 0000000..21d3ea4
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/ayu_light.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/ayu_mirage.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/ayu_mirage.png
new file mode 100644
index 0000000..8c43703
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/ayu_mirage.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/baitong.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/baitong.png
new file mode 100644
index 0000000..9950473
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/baitong.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/base16_default_dark.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/base16_default_dark.png
new file mode 100644
index 0000000..f6c9036
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/base16_default_dark.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/blood_moon.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/blood_moon.png
new file mode 100644
index 0000000..40c84ee
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/blood_moon.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/bluish.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/bluish.png
new file mode 100644
index 0000000..0040739
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/bluish.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/breeze.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/breeze.png
new file mode 100644
index 0000000..7a41c14
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/breeze.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/campbell.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/campbell.png
new file mode 100644
index 0000000..54c9414
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/campbell.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/carbonfox.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/carbonfox.png
new file mode 100644
index 0000000..2b55b8a
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/carbonfox.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/catppuccin_frappe.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/catppuccin_frappe.png
new file mode 100644
index 0000000..65418b4
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/catppuccin_frappe.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/catppuccin_latte.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/catppuccin_latte.png
new file mode 100644
index 0000000..43a289a
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/catppuccin_latte.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/catppuccin_macchiato.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/catppuccin_macchiato.png
new file mode 100644
index 0000000..5320138
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/catppuccin_macchiato.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/catppuccin_mocha.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/catppuccin_mocha.png
new file mode 100644
index 0000000..d61d5a2
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/catppuccin_mocha.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/challenger_deep.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/challenger_deep.png
new file mode 100644
index 0000000..49c4223
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/challenger_deep.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/chicago95.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/chicago95.png
new file mode 100644
index 0000000..95e2155
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/chicago95.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/citylights.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/citylights.png
new file mode 100644
index 0000000..0122f7b
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/citylights.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/cyber_punk_neon.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/cyber_punk_neon.png
new file mode 100644
index 0000000..ddc6f3e
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/cyber_punk_neon.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/dark_pastels.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/dark_pastels.png
new file mode 100644
index 0000000..f8102f8
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/dark_pastels.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/dark_plus.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/dark_plus.png
new file mode 100644
index 0000000..c09ec86
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/dark_plus.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/dark_pride.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/dark_pride.png
new file mode 100644
index 0000000..c2ebcc5
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/dark_pride.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/dawnfox.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/dawnfox.png
new file mode 100644
index 0000000..130bb9b
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/dawnfox.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/dayfox.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/dayfox.png
new file mode 100644
index 0000000..70e557c
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/dayfox.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/deep_space.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/deep_space.png
new file mode 100644
index 0000000..5ed5ffc
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/deep_space.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/doom_one.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/doom_one.png
new file mode 100644
index 0000000..73818db
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/doom_one.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/dracula.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/dracula.png
new file mode 100644
index 0000000..128daeb
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/dracula.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/dracula_plus.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/dracula_plus.png
new file mode 100644
index 0000000..2914240
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/dracula_plus.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/duskfox.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/duskfox.png
new file mode 100644
index 0000000..affc099
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/duskfox.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/enfocado_dark.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/enfocado_dark.png
new file mode 100644
index 0000000..e308ce3
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/enfocado_dark.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/enfocado_light.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/enfocado_light.png
new file mode 100644
index 0000000..5e9c17d
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/enfocado_light.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/everforest_dark.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/everforest_dark.png
new file mode 100644
index 0000000..4d26ba2
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/everforest_dark.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/everforest_light.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/everforest_light.png
new file mode 100644
index 0000000..520a5d5
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/everforest_light.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/falcon.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/falcon.png
new file mode 100644
index 0000000..0509231
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/falcon.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/flat_remix.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/flat_remix.png
new file mode 100644
index 0000000..524461d
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/flat_remix.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/flexoki.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/flexoki.png
new file mode 100644
index 0000000..4c27f03
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/flexoki.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/github_dark.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/github_dark.png
new file mode 100644
index 0000000..066b2cf
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/github_dark.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/github_dark_colorblind.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/github_dark_colorblind.png
new file mode 100644
index 0000000..5e874ae
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/github_dark_colorblind.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/github_dark_default.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/github_dark_default.png
new file mode 100644
index 0000000..4de4935
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/github_dark_default.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/github_dark_dimmed.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/github_dark_dimmed.png
new file mode 100644
index 0000000..0f7e209
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/github_dark_dimmed.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/github_dark_high_contrast.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/github_dark_high_contrast.png
new file mode 100644
index 0000000..bfd9b95
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/github_dark_high_contrast.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/github_dark_tritanopia.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/github_dark_tritanopia.png
new file mode 100644
index 0000000..2d1def4
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/github_dark_tritanopia.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/github_light.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/github_light.png
new file mode 100644
index 0000000..03524f0
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/github_light.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/github_light_colorblind.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/github_light_colorblind.png
new file mode 100644
index 0000000..4e15ec8
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/github_light_colorblind.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/github_light_default.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/github_light_default.png
new file mode 100644
index 0000000..92e0264
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/github_light_default.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/github_light_high_contrast.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/github_light_high_contrast.png
new file mode 100644
index 0000000..fb460e8
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/github_light_high_contrast.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/github_light_tritanopia.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/github_light_tritanopia.png
new file mode 100644
index 0000000..98f274a
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/github_light_tritanopia.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/gnome_terminal.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/gnome_terminal.png
new file mode 100644
index 0000000..df8d76f
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/gnome_terminal.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/google.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/google.png
new file mode 100644
index 0000000..8930f0c
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/google.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/gotham.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/gotham.png
new file mode 100644
index 0000000..696466d
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/gotham.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/gruber_darker.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/gruber_darker.png
new file mode 100644
index 0000000..10fbc8a
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/gruber_darker.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/gruvbox_dark.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/gruvbox_dark.png
new file mode 100644
index 0000000..1124b94
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/gruvbox_dark.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/gruvbox_light.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/gruvbox_light.png
new file mode 100644
index 0000000..1b1efb1
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/gruvbox_light.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/gruvbox_material_hard_dark.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/gruvbox_material_hard_dark.png
new file mode 100644
index 0000000..226e16f
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/gruvbox_material_hard_dark.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/gruvbox_material_hard_light.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/gruvbox_material_hard_light.png
new file mode 100644
index 0000000..8c7a42d
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/gruvbox_material_hard_light.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/gruvbox_material_medium_dark.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/gruvbox_material_medium_dark.png
new file mode 100644
index 0000000..d4f725e
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/gruvbox_material_medium_dark.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/gruvbox_material_medium_light.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/gruvbox_material_medium_light.png
new file mode 100644
index 0000000..68464f9
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/gruvbox_material_medium_light.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/hardhacker.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/hardhacker.png
new file mode 100644
index 0000000..9492ae4
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/hardhacker.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/hatsunemiku.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/hatsunemiku.png
new file mode 100644
index 0000000..b43f1a7
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/hatsunemiku.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/high_contrast.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/high_contrast.png
new file mode 100644
index 0000000..7814b33
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/high_contrast.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/horizon_dark.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/horizon_dark.png
new file mode 100644
index 0000000..f5d11e0
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/horizon_dark.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/hyper.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/hyper.png
new file mode 100644
index 0000000..f79dd00
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/hyper.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/inferno.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/inferno.png
new file mode 100644
index 0000000..fe676d2
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/inferno.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/iris.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/iris.png
new file mode 100644
index 0000000..812a9c6
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/iris.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/iterm.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/iterm.png
new file mode 100644
index 0000000..9cec735
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/iterm.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/kanagawa_dragon.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/kanagawa_dragon.png
new file mode 100644
index 0000000..dfce5ef
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/kanagawa_dragon.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/kanagawa_wave.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/kanagawa_wave.png
new file mode 100644
index 0000000..21c3838
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/kanagawa_wave.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/kimbie_dark.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/kimbie_dark.png
new file mode 100644
index 0000000..666fcac
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/kimbie_dark.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/kimbie_light.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/kimbie_light.png
new file mode 100644
index 0000000..fb66ef4
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/kimbie_light.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/konsole_linux.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/konsole_linux.png
new file mode 100644
index 0000000..e4b64ee
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/konsole_linux.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/low_contrast.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/low_contrast.png
new file mode 100644
index 0000000..52970f5
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/low_contrast.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/mariana.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/mariana.png
new file mode 100644
index 0000000..6315056
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/mariana.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/marine_dark.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/marine_dark.png
new file mode 100644
index 0000000..8ee9d86
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/marine_dark.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/material_theme.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/material_theme.png
new file mode 100644
index 0000000..3098592
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/material_theme.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/material_theme_mod.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/material_theme_mod.png
new file mode 100644
index 0000000..a310664
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/material_theme_mod.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/meliora.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/meliora.png
new file mode 100644
index 0000000..563cb38
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/meliora.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/miasma.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/miasma.png
new file mode 100644
index 0000000..5c27f3c
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/miasma.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/midnight_haze.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/midnight_haze.png
new file mode 100644
index 0000000..143c08c
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/midnight_haze.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/monokai.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/monokai.png
new file mode 100644
index 0000000..1e7510b
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/monokai.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/monokai_charcoal.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/monokai_charcoal.png
new file mode 100644
index 0000000..e6648a9
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/monokai_charcoal.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/monokai_pro.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/monokai_pro.png
new file mode 100644
index 0000000..95437fa
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/monokai_pro.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/moonfly.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/moonfly.png
new file mode 100644
index 0000000..f4c2009
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/moonfly.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/moonlight_ii_vscode.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/moonlight_ii_vscode.png
new file mode 100644
index 0000000..1058371
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/moonlight_ii_vscode.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/msx.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/msx.png
new file mode 100644
index 0000000..a765bfe
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/msx.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/night_owl.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/night_owl.png
new file mode 100644
index 0000000..5e1af45
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/night_owl.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/night_owlish_light.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/night_owlish_light.png
new file mode 100644
index 0000000..6178912
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/night_owlish_light.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/nightfly.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/nightfly.png
new file mode 100644
index 0000000..3df75e2
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/nightfly.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/nightfox.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/nightfox.png
new file mode 100644
index 0000000..f5e9cd6
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/nightfox.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/noctis_lux.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/noctis_lux.png
new file mode 100644
index 0000000..e08c0c6
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/noctis_lux.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/nord.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/nord.png
new file mode 100644
index 0000000..ad1ec75
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/nord.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/nord_light.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/nord_light.png
new file mode 100644
index 0000000..df63d7b
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/nord_light.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/nordfox.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/nordfox.png
new file mode 100644
index 0000000..7c3c60e
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/nordfox.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/nordic.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/nordic.png
new file mode 100644
index 0000000..f4d651c
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/nordic.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/oceanic_next.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/oceanic_next.png
new file mode 100644
index 0000000..2408c9e
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/oceanic_next.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/omni.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/omni.png
new file mode 100644
index 0000000..efabdc8
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/omni.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/one_dark.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/one_dark.png
new file mode 100644
index 0000000..089ed78
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/one_dark.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/one_light.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/one_light.png
new file mode 100644
index 0000000..6c98bb1
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/one_light.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/oxocarbon.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/oxocarbon.png
new file mode 100644
index 0000000..8a316c2
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/oxocarbon.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/palenight.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/palenight.png
new file mode 100644
index 0000000..9e0fd58
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/palenight.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/papercolor_dark.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/papercolor_dark.png
new file mode 100644
index 0000000..a5d3f77
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/papercolor_dark.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/papercolor_light.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/papercolor_light.png
new file mode 100644
index 0000000..7e7b9e6
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/papercolor_light.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/papertheme.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/papertheme.png
new file mode 100644
index 0000000..ec5d947
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/papertheme.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/pastel_dark.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/pastel_dark.png
new file mode 100644
index 0000000..9bfe3dd
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/pastel_dark.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/pencil_dark.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/pencil_dark.png
new file mode 100644
index 0000000..5cf5df0
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/pencil_dark.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/pencil_light.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/pencil_light.png
new file mode 100644
index 0000000..c392e14
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/pencil_light.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/rainbow.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/rainbow.png
new file mode 100644
index 0000000..1825f63
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/rainbow.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/remedy_dark.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/remedy_dark.png
new file mode 100644
index 0000000..eac67b5
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/remedy_dark.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/rigel.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/rigel.png
new file mode 100644
index 0000000..8ecf035
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/rigel.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/rose_pine.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/rose_pine.png
new file mode 100644
index 0000000..00de305
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/rose_pine.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/rose_pine_dawn.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/rose_pine_dawn.png
new file mode 100644
index 0000000..96e25b8
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/rose_pine_dawn.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/rose_pine_moon.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/rose_pine_moon.png
new file mode 100644
index 0000000..c640e33
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/rose_pine_moon.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/seashells.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/seashells.png
new file mode 100644
index 0000000..b76f2f8
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/seashells.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/selenized_dark.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/selenized_dark.png
new file mode 100644
index 0000000..975c6c4
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/selenized_dark.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/selenized_light.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/selenized_light.png
new file mode 100644
index 0000000..e735a41
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/selenized_light.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/seoul256-light.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/seoul256-light.png
new file mode 100644
index 0000000..9882dfb
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/seoul256-light.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/smoooooth.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/smoooooth.png
new file mode 100644
index 0000000..7034974
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/smoooooth.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/snazzy.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/snazzy.png
new file mode 100644
index 0000000..9632f15
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/snazzy.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/solarized_dark.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/solarized_dark.png
new file mode 100644
index 0000000..27f98fd
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/solarized_dark.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/solarized_light.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/solarized_light.png
new file mode 100644
index 0000000..5d23dde
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/solarized_light.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/solarized_osaka.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/solarized_osaka.png
new file mode 100644
index 0000000..bc5cb2e
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/solarized_osaka.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/sonokai.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/sonokai.png
new file mode 100644
index 0000000..3909c35
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/sonokai.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/spacegray.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/spacegray.png
new file mode 100644
index 0000000..241755d
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/spacegray.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/synthwave_84.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/synthwave_84.png
new file mode 100644
index 0000000..2457124
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/synthwave_84.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/taerminal.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/taerminal.png
new file mode 100644
index 0000000..0619607
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/taerminal.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/tango_dark.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/tango_dark.png
new file mode 100644
index 0000000..b1e3915
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/tango_dark.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/tender.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/tender.png
new file mode 100644
index 0000000..d817267
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/tender.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/terafox.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/terafox.png
new file mode 100644
index 0000000..df80b8a
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/terafox.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/terminal_app.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/terminal_app.png
new file mode 100644
index 0000000..81c9da1
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/terminal_app.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/thelovelace.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/thelovelace.png
new file mode 100644
index 0000000..269a797
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/thelovelace.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/tokyo_night.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/tokyo_night.png
new file mode 100644
index 0000000..d6ed018
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/tokyo_night.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/tokyo_night_enhanced.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/tokyo_night_enhanced.png
new file mode 100644
index 0000000..156360a
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/tokyo_night_enhanced.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/tokyo_night_storm.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/tokyo_night_storm.png
new file mode 100644
index 0000000..ad39605
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/tokyo_night_storm.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/tomorrow_night.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/tomorrow_night.png
new file mode 100644
index 0000000..ab9ac93
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/tomorrow_night.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/tomorrow_night_bright.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/tomorrow_night_bright.png
new file mode 100644
index 0000000..b5d1493
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/tomorrow_night_bright.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/ubuntu.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/ubuntu.png
new file mode 100644
index 0000000..f3cc1d8
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/ubuntu.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/vesper.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/vesper.png
new file mode 100644
index 0000000..dcbbab7
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/vesper.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/vscode.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/vscode.png
new file mode 100644
index 0000000..ebf8a4a
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/vscode.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/wombat.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/wombat.png
new file mode 100644
index 0000000..651534c
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/wombat.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/xterm.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/xterm.png
new file mode 100644
index 0000000..62e3039
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/xterm.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/images/zenburn.png b/dots/alacritty/.config/alacritty/alacritty-theme/images/zenburn.png
new file mode 100644
index 0000000..c3fa0a8
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/images/zenburn.png
Binary files differ
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/print_colors.sh b/dots/alacritty/.config/alacritty/alacritty-theme/print_colors.sh
new file mode 100755
index 0000000..100099f
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/print_colors.sh
@@ -0,0 +1,10 @@
+#!/usr/bin/env sh
+
+printf "|039| \033[39mDefault \033[m |049| \033[49mDefault \033[m |037| \033[37mLight gray \033[m |047| \033[47mLight gray \033[m\n"
+printf "|030| \033[30mBlack \033[m |040| \033[40mBlack \033[m |090| \033[90mDark gray \033[m |100| \033[100mDark gray \033[m\n"
+printf "|031| \033[31mRed \033[m |041| \033[41mRed \033[m |091| \033[91mLight red \033[m |101| \033[101mLight red \033[m\n"
+printf "|032| \033[32mGreen \033[m |042| \033[42mGreen \033[m |092| \033[92mLight green \033[m |102| \033[102mLight green \033[m\n"
+printf "|033| \033[33mYellow \033[m |043| \033[43mYellow \033[m |093| \033[93mLight yellow \033[m |103| \033[103mLight yellow \033[m\n"
+printf "|034| \033[34mBlue \033[m |044| \033[44mBlue \033[m |094| \033[94mLight blue \033[m |104| \033[104mLight blue \033[m\n"
+printf "|035| \033[35mMagenta \033[m |045| \033[45mMagenta \033[m |095| \033[95mLight magenta \033[m |105| \033[105mLight magenta \033[m\n"
+printf "|036| \033[36mCyan \033[m |046| \033[46mCyan \033[m |096| \033[96mLight cyan \033[m |106| \033[106mLight cyan \033[m\n"
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/Cobalt2.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/Cobalt2.toml
new file mode 100644
index 0000000..d390bab
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/Cobalt2.toml
@@ -0,0 +1,33 @@
+# From the famous Cobalt2 sublime theme
+# Source https//github.com/wesbos/cobalt2/tree/master/Cobalt2
+
+# Default colors
+[colors.primary]
+background = '#122637'
+foreground = '#ffffff'
+
+[colors.cursor]
+text = '#122637'
+cursor = '#f0cb09'
+
+# Normal colors
+[colors.normal]
+black = '#000000'
+red = '#ff0000'
+green = '#37dd21'
+yellow = '#fee409'
+blue = '#1460d2'
+magenta = '#ff005d'
+cyan = '#00bbbb'
+white = '#bbbbbb'
+
+# Bright colors
+[colors.bright]
+black = '#545454'
+red = '#f40d17'
+green = '#3bcf1d'
+yellow = '#ecc809'
+blue = '#5555ff'
+magenta = '#ff55ff'
+cyan = '#6ae3f9'
+white = '#ffffff'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/Mariana.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/Mariana.toml
new file mode 100644
index 0000000..0b7497b
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/Mariana.toml
@@ -0,0 +1,39 @@
+# Mariana (ported from Sublime Text 4)
+# Source https//github.com/mbadolato/iTerm2-Color-Schemes/blob/master/alacritty/Mariana.yml
+
+# Default colors
+[colors.primary]
+background = '#343d46'
+foreground = '#d8dee9'
+
+# Cursor colors
+[colors.cursor]
+cursor = '#fcbb6a'
+text = '#ffffff'
+
+# Normal colors
+[colors.normal]
+black = '#000000'
+blue = '#6699cc'
+cyan = '#5fb4b4'
+green = '#99c794'
+magenta = '#c695c6'
+red = '#ec5f66'
+white = '#f7f7f7'
+yellow = '#f9ae58'
+
+# Bright colors
+[colors.bright]
+black = '#333333'
+blue = '#85add6'
+cyan = '#82c4c4'
+green = '#acd1a8'
+magenta = '#d8b6d8'
+red = '#f97b58'
+white = '#ffffff'
+yellow = '#fac761'
+
+# Selection colors
+[colors.selection]
+background = '#4e5a65'
+text = '#d8dee9'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/acme.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/acme.toml
new file mode 100644
index 0000000..be8ece9
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/acme.toml
@@ -0,0 +1,28 @@
+# Colors (acme)
+
+# Default colors
+[colors.primary]
+background = '#ffffea'
+foreground = '#000000'
+
+# Normal colors
+[colors.normal]
+black = '#101010'
+red = '#af5f00'
+green = '#cccc7c'
+yellow = '#ffff5f'
+blue = '#aeeeee'
+magenta = '#505050'
+cyan = '#afffd7'
+white = '#fcfcce'
+
+# Bright colors
+[colors.bright]
+black = '#101010'
+red = '#af5f00'
+green = '#cccc7c'
+yellow = '#ffff5f'
+blue = '#aeeeee'
+magenta = '#505050'
+cyan = '#afffd7'
+white = '#fcfcce'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/afterglow.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/afterglow.toml
new file mode 100644
index 0000000..74702c1
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/afterglow.toml
@@ -0,0 +1,45 @@
+# Default colors
+[colors.primary]
+background = '#2c2c2c'
+foreground = '#d6d6d6'
+
+dim_foreground = '#dbdbdb'
+bright_foreground = '#d9d9d9'
+
+# Cursor colors
+[colors.cursor]
+text = '#2c2c2c'
+cursor = '#d9d9d9'
+
+# Normal colors
+[colors.normal]
+black = '#1c1c1c'
+red = '#bc5653'
+green = '#909d63'
+yellow = '#ebc17a'
+blue = '#7eaac7'
+magenta = '#aa6292'
+cyan = '#86d3ce'
+white = '#cacaca'
+
+# Bright colors
+[colors.bright]
+black = '#636363'
+red = '#bc5653'
+green = '#909d63'
+yellow = '#ebc17a'
+blue = '#7eaac7'
+magenta = '#aa6292'
+cyan = '#86d3ce'
+white = '#f7f7f7'
+
+# Dim colors
+[colors.dim]
+black = '#232323'
+red = '#74423f'
+green = '#5e6547'
+yellow = '#8b7653'
+blue = '#556b79'
+magenta = '#6e4962'
+cyan = '#5c8482'
+white = '#828282'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/alabaster.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/alabaster.toml
new file mode 100644
index 0000000..df312d3
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/alabaster.toml
@@ -0,0 +1,30 @@
+# Colors (Alabaster)
+# author tonsky
+
+[colors.primary]
+background = '#F7F7F7'
+foreground = '#434343'
+
+[colors.cursor]
+text = '#F7F7F7'
+cursor = '#434343'
+
+[colors.normal]
+black = '#000000'
+red = '#AA3731'
+green = '#448C27'
+yellow = '#CB9000'
+blue = '#325CC0'
+magenta = '#7A3E9D'
+cyan = '#0083B2'
+white = '#BBBBBB'
+
+[colors.bright]
+black = '#777777'
+red = '#F05050'
+green = '#60CB00'
+yellow = '#FFBC5D'
+blue = '#007ACC'
+magenta = '#E64CE6'
+cyan = '#00AACB'
+white = '#FFFFFF'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/alabaster_dark.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/alabaster_dark.toml
new file mode 100644
index 0000000..500f1ee
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/alabaster_dark.toml
@@ -0,0 +1,30 @@
+# Colors (Alabaster Dark)
+# author tonsky
+
+[colors.primary]
+background = '#0E1415'
+foreground = '#CECECE'
+
+[colors.cursor]
+text = '#0E1415'
+cursor = '#CECECE'
+
+[colors.normal]
+black = '#0E1415'
+red = '#e25d56'
+green = '#73ca50'
+yellow = '#e9bf57'
+blue = '#4a88e4'
+magenta = '#915caf'
+cyan = '#23acdd'
+white = '#f0f0f0'
+
+[colors.bright]
+black = '#777777'
+red = '#f36868'
+green = '#88db3f'
+yellow = '#f0bf7a'
+blue = '#6f8fdb'
+magenta = '#e987e9'
+cyan = '#4ac9e2'
+white = '#FFFFFF'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/alacritty_0_12.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/alacritty_0_12.toml
new file mode 100644
index 0000000..434db48
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/alacritty_0_12.toml
@@ -0,0 +1,44 @@
+# Alacritty's default color scheme pre-0.13 (based on tomorrow_night)
+# https://github.com/alacritty/alacritty/blob/v0.12.3/alacritty/src/config/color.rs
+
+[colors.primary]
+foreground = "#c5c8c6"
+background = "#1d1f21"
+
+[colors.normal]
+black = "#1d1f21"
+red = "#cc6666"
+green = "#b5bd68"
+yellow = "#f0c674"
+blue = "#81a2be"
+magenta = "#b294bb"
+cyan = "#8abeb7"
+white = "#c5c8c6"
+
+[colors.bright]
+black = "#666666"
+red = "#d54e53"
+green = "#b9ca4a"
+yellow = "#e7c547"
+blue = "#7aa6da"
+magenta = "#c397d8"
+cyan = "#70c0b1"
+white = "#eaeaea"
+
+[colors.dim]
+black = "#131415"
+red = "#864343"
+green = "#777c44"
+yellow = "#9e824c"
+blue = "#556a7d"
+magenta = "#75617b"
+cyan = "#5b7d78"
+white = "#828482"
+
+[colors.hints]
+start = { foreground = "#1d1f21", background = "#e9ff5e" }
+end = { foreground = "#e9ff5e", background = "#1d1f21" }
+
+[colors.search]
+matches = { foreground = "#000000", background = "#ffffff" }
+focused_match = { foreground = "#ffffff", background = "#000000" }
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/argonaut.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/argonaut.toml
new file mode 100644
index 0000000..dc5eb53
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/argonaut.toml
@@ -0,0 +1,31 @@
+# Default colors
+[colors.primary]
+background = '#292C3E'
+foreground = '#EBEBEB'
+
+# Cursor colors
+[colors.cursor]
+text = '#EBEBEB'
+cursor = '#FF261E'
+
+# Normal colors
+[colors.normal]
+black = '#0d0d0d'
+red = '#FF301B'
+green = '#A0E521'
+yellow = '#FFC620'
+blue = '#1BA6FA'
+magenta = '#8763B8'
+cyan = '#21DEEF'
+white = '#EBEBEB'
+
+# Bright colors
+[colors.bright]
+black = '#6D7070'
+red = '#FF4352'
+green = '#B8E466'
+yellow = '#FFD750'
+blue = '#1BA6FA'
+magenta = '#A578EA'
+cyan = '#73FBF1'
+white = '#FEFEF8'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/ashes_dark.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/ashes_dark.toml
new file mode 100644
index 0000000..ed218ea
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/ashes_dark.toml
@@ -0,0 +1,27 @@
+[colors.primary]
+background = '#1c2023'
+foreground = '#c7ccd1'
+
+[colors.cursor]
+text = '#1c2023'
+cursor = '#c7ccd1'
+
+[colors.normal]
+black = '#1c2023'
+red = '#c7ae95'
+green = '#95c7ae'
+yellow = '#aec795'
+blue = '#ae95c7'
+magenta = '#c795ae'
+cyan = '#95aec7'
+white = '#c7ccd1'
+
+[colors.bright]
+black = '#747c84'
+red = '#c7ae95'
+green = '#95c7ae'
+yellow = '#aec795'
+blue = '#ae95c7'
+magenta = '#c795ae'
+cyan = '#95aec7'
+white = '#f3f4f5'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/ashes_light.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/ashes_light.toml
new file mode 100644
index 0000000..1b76e8f
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/ashes_light.toml
@@ -0,0 +1,27 @@
+[colors.primary]
+background = '#f3f4f5'
+foreground = '#565e65'
+
+[colors.cursor]
+text = '#f3f4f5'
+cursor = '#565e65'
+
+[colors.normal]
+black = '#1c2023'
+red = '#c7ae95'
+green = '#95c7ae'
+yellow = '#aec795'
+blue = '#ae95c7'
+magenta = '#c795ae'
+cyan = '#95aec7'
+white = '#c7ccd1'
+
+[colors.bright]
+black = '#747c84'
+red = '#c7ae95'
+green = '#95c7ae'
+yellow = '#aec795'
+blue = '#ae95c7'
+magenta = '#c795ae'
+cyan = '#95aec7'
+white = '#f3f4f5'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/aura.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/aura.toml
new file mode 100644
index 0000000..e9967ef
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/aura.toml
@@ -0,0 +1,30 @@
+[colors.primary]
+background = "#15141b"
+foreground = "#edecee"
+
+[colors.cursor]
+cursor = "#a277ff"
+
+[colors.selection]
+text = "CellForeground"
+background = "#29263c"
+
+[colors.normal]
+black = "#110f18"
+red = "#ff6767"
+green = "#61ffca"
+yellow = "#ffca85"
+blue = "#a277ff"
+magenta = "#a277ff"
+cyan = "#61ffca"
+white = "#edecee"
+
+[colors.bright]
+black = "#4d4d4d"
+red = "#ff6767"
+green = "#61ffca"
+yellow = "#ffca85"
+blue = "#a277ff"
+magenta = "#a277ff"
+cyan = "#61ffca"
+white = "#edecee"
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/autumn.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/autumn.toml
new file mode 100644
index 0000000..e979168
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/autumn.toml
@@ -0,0 +1,30 @@
+# From: https://github.com/yorickpeterse/Autumn.vim/blob/master/colors/autumn.vim
+
+[colors.primary]
+foreground = "#F3F2CC"
+background = "#232323"
+
+[colors.cursor]
+text = "#232323"
+cursor = "#F3F2CC"
+
+[colors.normal]
+black = "#212121"
+red = "#F05E48"
+green = "#99be70"
+yellow = "#FAD566"
+blue = "#86c1b9"
+magenta = "#cfba8b"
+cyan = "#72a59e"
+white = "#c8c8c8"
+
+[colors.bright]
+black = "#404040"
+red = "#F05E48"
+green = "#99be70"
+yellow = "#ffff9f"
+blue = "#86c1b9"
+magenta = "#cfba8b"
+cyan = "#72a59e"
+white = "#e8e8e8"
+
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/ayu_dark.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/ayu_dark.toml
new file mode 100644
index 0000000..a2ea740
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/ayu_dark.toml
@@ -0,0 +1,28 @@
+# Colors (Ayu Dark)
+
+# Default colors
+[colors.primary]
+background = '#0A0E14'
+foreground = '#B3B1AD'
+
+# Normal colors
+[colors.normal]
+black = '#01060E'
+red = '#EA6C73'
+green = '#91B362'
+yellow = '#F9AF4F'
+blue = '#53BDFA'
+magenta = '#FAE994'
+cyan = '#90E1C6'
+white = '#C7C7C7'
+
+# Bright colors
+[colors.bright]
+black = '#686868'
+red = '#F07178'
+green = '#C2D94C'
+yellow = '#FFB454'
+blue = '#59C2FF'
+magenta = '#FFEE99'
+cyan = '#95E6CB'
+white = '#FFFFFF'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/ayu_light.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/ayu_light.toml
new file mode 100644
index 0000000..d5cd4f9
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/ayu_light.toml
@@ -0,0 +1,28 @@
+# Colors (Ayu Light)
+
+# Default colors - taken from ayu-colors
+[colors.primary]
+background = '#FCFCFC'
+foreground = '#5C6166'
+
+# Normal colors - taken from ayu-iTerm
+[colors.normal]
+black = '#010101'
+red = '#e7666a'
+green = '#80ab24'
+yellow = '#eba54d'
+blue = '#4196df'
+magenta = '#9870c3'
+cyan = '#51b891'
+white = '#c1c1c1'
+
+# Bright colors - pastel lighten 0.1 <normal> except black lighten with 0.2
+[colors.bright]
+black = '#343434'
+red = '#ee9295'
+green = '#9fd32f'
+yellow = '#f0bc7b'
+blue = '#6daee6'
+magenta = '#b294d2'
+cyan = '#75c7a8'
+white = '#dbdbdb'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/ayu_mirage.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/ayu_mirage.toml
new file mode 100644
index 0000000..6deddd4
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/ayu_mirage.toml
@@ -0,0 +1,29 @@
+# Colors (Ayu Mirage)
+
+# Default Colors
+[colors.primary]
+background = "#1f2430"
+foreground = "#cbccc6"
+bright_foreground = "#f28779"
+
+# Normal colors
+[colors.normal]
+black = "#212733"
+red = "#f08778"
+green = "#53bf97"
+yellow = "#fdcc60"
+blue = "#60b8d6"
+magenta = "#ec7171"
+cyan = "#98e6ca"
+white = "#fafafa"
+
+# Bright colors
+[colors.bright]
+black = "#686868"
+red = "#f58c7d"
+green = "#58c49c"
+yellow = "#ffd165"
+blue = "#65bddb"
+magenta = "#f17676"
+cyan = "#9debcf"
+white = "#ffffff"
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/baitong.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/baitong.toml
new file mode 100644
index 0000000..4057041
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/baitong.toml
@@ -0,0 +1,55 @@
+# Colors (Baitong)
+
+[colors.primary]
+background = '#112a2a'
+foreground = '#33ff33'
+
+[colors.cursor]
+text = '#112a2a'
+cursor = '#ff00ff'
+
+[colors.vi_mode_cursor]
+text = '#112a2a'
+cursor = '#ff00ff'
+
+[colors.search]
+matches = { foreground = '#000000', background = '#1AE642' }
+focused_match = { foreground = '#000000', background = '#ff00ff' }
+
+[colors.hints]
+start = { foreground = '#1d1f21', background = '#1AE642' }
+end = { foreground = '#1AE642', background = '#1d1f21' }
+
+[colors.line_indicator]
+foreground = '#33ff33'
+background = '#1d1f21'
+
+[colors.footer_bar]
+background = '#731d8b'
+foreground = '#ffffff'
+
+[colors.selection]
+text = '#112a2a'
+background = '#1AE642'
+
+# Normal colors
+[colors.normal]
+black = '#000000'
+red = '#f77272'
+green = '#33ff33'
+yellow = '#1AE642'
+blue = '#68FDFE'
+magenta = '#ff66ff'
+cyan = '#87CEFA'
+white = '#dbdbd9'
+
+# Bright colors
+[colors.bright]
+black = '#ffffff'
+red = '#f77272'
+green = '#33ff33'
+yellow = '#1AE642'
+blue = '#68FDFE'
+magenta = '#ff66ff'
+cyan = '#68FDFE'
+white = '#dbdbd9'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/base16_default_dark.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/base16_default_dark.toml
new file mode 100644
index 0000000..ca85177
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/base16_default_dark.toml
@@ -0,0 +1,32 @@
+# Colors (Base16 Default Dark)
+
+# Default colors
+[colors.primary]
+background = '#181818'
+foreground = '#d8d8d8'
+
+[colors.cursor]
+text = '#181818'
+cursor = '#d8d8d8'
+
+# Normal colors
+[colors.normal]
+black = '#181818'
+red = '#ab4642'
+green = '#a1b56c'
+yellow = '#f7ca88'
+blue = '#7cafc2'
+magenta = '#ba8baf'
+cyan = '#86c1b9'
+white = '#d8d8d8'
+
+# Bright colors
+[colors.bright]
+black = '#585858'
+red = '#ab4642'
+green = '#a1b56c'
+yellow = '#f7ca88'
+blue = '#7cafc2'
+magenta = '#ba8baf'
+cyan = '#86c1b9'
+white = '#f8f8f8'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/blood_moon.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/blood_moon.toml
new file mode 100644
index 0000000..ae99edd
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/blood_moon.toml
@@ -0,0 +1,28 @@
+# Colors (Blood Moon)
+
+# Default colors
+[colors.primary]
+background = '#10100E'
+foreground = '#C6C6C4'
+
+# Normal colors
+[colors.normal]
+black = '#10100E'
+red = '#C40233'
+green = '#009F6B'
+yellow = '#FFD700'
+blue = '#0087BD'
+magenta = '#9A4EAE'
+cyan = '#20B2AA'
+white = '#C6C6C4'
+
+# Bright colors
+[colors.bright]
+black = '#696969'
+red = '#FF2400'
+green = '#03C03C'
+yellow = '#FDFF00'
+blue = '#007FFF'
+magenta = '#FF1493'
+cyan = '#00CCCC'
+white = '#FFFAFA'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/bluish.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/bluish.toml
new file mode 100644
index 0000000..ca2333f
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/bluish.toml
@@ -0,0 +1,26 @@
+# Default colors
+[colors.primary]
+background = '#2c3640'
+foreground = '#297dd3'
+
+# Normal colors
+[colors.normal]
+black = '#0b0b0c'
+red = '#377fc4'
+green = '#2691e7'
+yellow = '#2090c1'
+blue = '#2c5e87'
+magenta = '#436280'
+cyan = '#547aa2'
+white = '#536679'
+
+# Bright colors
+[colors.bright]
+black = '#23272c'
+red = '#66a5cc'
+green = '#59b0f2'
+yellow = '#4bb0d3'
+blue = '#487092'
+magenta = '#50829e'
+cyan = '#658795'
+white = '#4d676b'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/breeze.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/breeze.toml
new file mode 100644
index 0000000..67e4992
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/breeze.toml
@@ -0,0 +1,42 @@
+# KDE Breeze (Ported from Konsole)
+
+# Default colors
+[colors.primary]
+background = '#232627'
+foreground = '#fcfcfc'
+
+dim_foreground = '#eff0f1'
+bright_foreground = '#ffffff'
+
+# Normal colors
+[colors.normal]
+black = '#232627'
+red = '#ed1515'
+green = '#11d116'
+yellow = '#f67400'
+blue = '#1d99f3'
+magenta = '#9b59b6'
+cyan = '#1abc9c'
+white = '#fcfcfc'
+
+# Bright colors
+[colors.bright]
+black = '#7f8c8d'
+red = '#c0392b'
+green = '#1cdc9a'
+yellow = '#fdbc4b'
+blue = '#3daee9'
+magenta = '#8e44ad'
+cyan = '#16a085'
+white = '#ffffff'
+
+# Dim colors
+[colors.dim]
+black = '#31363b'
+red = '#783228'
+green = '#17a262'
+yellow = '#b65619'
+blue = '#1b668f'
+magenta = '#614a73'
+cyan = '#186c60'
+white = '#63686d'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/campbell.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/campbell.toml
new file mode 100644
index 0000000..05630b7
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/campbell.toml
@@ -0,0 +1,28 @@
+# Campbell (Windows 10 default)
+
+# Default colors
+[colors.primary]
+background = '#0c0c0c'
+foreground = '#cccccc'
+
+# Normal colors
+[colors.normal]
+black = '#0c0c0c'
+red = '#c50f1f'
+green = '#13a10e'
+yellow = '#c19c00'
+blue = '#0037da'
+magenta = '#881798'
+cyan = '#3a96dd'
+white = '#cccccc'
+
+# Bright colors
+[colors.bright]
+black = '#767676'
+red = '#e74856'
+green = '#16c60c'
+yellow = '#f9f1a5'
+blue = '#3b78ff'
+magenta = '#b4009e'
+cyan = '#61d6d6'
+white = '#f2f2f2'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/carbonfox.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/carbonfox.toml
new file mode 100644
index 0000000..fcb24f4
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/carbonfox.toml
@@ -0,0 +1,71 @@
+# Nightfox Alacritty Colors
+## name: carbonfox
+## upstream: https://github.com/edeneast/nightfox.nvim/raw/main/extra/carbonfox/alacritty.toml
+
+[colors.primary]
+background = "#161616"
+foreground = "#f2f4f8"
+dim_foreground = "#b6b8bb"
+bright_foreground = "#f9fbff"
+
+[colors.cursor]
+text = "#f2f4f8"
+cursor = "#b6b8bb"
+
+[colors.vi_mode_cursor]
+text = "#f2f4f8"
+cursor = "#33b1ff"
+
+[colors.search.matches]
+foreground = "#f2f4f8"
+background = "#525253"
+
+[colors.search.focused_match]
+foreground = "#f2f4f8"
+background = "#3ddbd9"
+
+[colors.footer_bar]
+foreground = "#f2f4f8"
+background = "#353535"
+
+[colors.hints.start]
+foreground = "#f2f4f8"
+background = "#3ddbd9"
+
+[colors.hints.end]
+foreground = "#f2f4f8"
+background = "#353535"
+
+[colors.selection]
+text = "#f2f4f8"
+background = "#2a2a2a"
+
+[colors.normal]
+black = "#282828"
+red = "#ee5396"
+green = "#25be6a"
+yellow = "#08bdba"
+blue = "#78a9ff"
+magenta = "#be95ff"
+cyan = "#33b1ff"
+white = "#dfdfe0"
+
+[colors.bright]
+black = "#484848"
+red = "#f16da6"
+green = "#46c880"
+yellow = "#2dc7c4"
+blue = "#8cb6ff"
+magenta = "#c8a5ff"
+cyan = "#52bdff"
+white = "#e4e4e5"
+
+[colors.dim]
+black = "#222222"
+red = "#ca4780"
+green = "#1fa25a"
+yellow = "#07a19e"
+blue = "#6690d9"
+magenta = "#a27fd9"
+cyan = "#2b96d9"
+white = "#bebebe"
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/catppuccin.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/catppuccin.toml
new file mode 100644
index 0000000..2ea110f
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/catppuccin.toml
@@ -0,0 +1,39 @@
+# Catppuccino theme scheme for Alacritty
+
+[colors.primary]
+background = '#1E1E2E'
+foreground = '#D6D6D6'
+
+[colors.cursor]
+text = '#1E1E2E'
+cursor = '#D9D9D9'
+
+[colors.normal]
+black = '#181A1F'
+red = '#E86671'
+green = '#98C379'
+yellow = '#E5C07B'
+blue = '#61AFEF'
+magenta = '#C678DD'
+cyan = '#54AFBC'
+white = '#ABB2BF'
+
+[colors.bright]
+black = '#5C6370'
+red = '#E86671'
+green = '#98C379'
+yellow = '#E5C07B'
+blue = '#61AFEF'
+magenta = '#C678DD'
+cyan = '#54AFBC'
+white = '#F7F7F7'
+
+[colors.dim]
+black = '#5C6370'
+red = '#74423F'
+green = '#98C379'
+yellow = '#E5C07B'
+blue = '#61AFEF'
+magenta = '#6E4962'
+cyan = '#5C8482'
+white = '#828282'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/catppuccin_frappe.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/catppuccin_frappe.toml
new file mode 100644
index 0000000..6a286e2
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/catppuccin_frappe.toml
@@ -0,0 +1,73 @@
+# Default colors
+[colors.primary]
+background = '#303446' # base
+foreground = '#C6D0F5' # text
+# Bright and dim foreground colors
+dim_foreground = '#C6D0F5' # text
+bright_foreground = '#C6D0F5' # text
+
+# Cursor colors
+[colors.cursor]
+text = '#303446' # base
+cursor = '#F2D5CF' # rosewater
+
+[colors.vi_mode_cursor]
+text = '#303446' # base
+cursor = '#BABBF1' # lavender
+
+# Search colors
+[colors.search.matches]
+foreground = '#303446' # base
+background = '#A5ADCE' # subtext0
+[colors.search.focused_match]
+foreground = '#303446' # base
+background = '#A6D189' # green
+[colors.footer_bar]
+foreground = '#303446' # base
+background = '#A5ADCE' # subtext0
+
+# Keyboard regex hints
+[colors.hints.start]
+foreground = '#303446' # base
+background = '#E5C890' # yellow
+[colors.hints.end]
+foreground = '#303446' # base
+background = '#A5ADCE' # subtext0
+
+# Selection colors
+[colors.selection]
+text = '#303446' # base
+background = '#F2D5CF' # rosewater
+
+# Normal colors
+[colors.normal]
+black = '#51576D' # surface1
+red = '#E78284' # red
+green = '#A6D189' # green
+yellow = '#E5C890' # yellow
+blue = '#8CAAEE' # blue
+magenta = '#F4B8E4' # pink
+cyan = '#81C8BE' # teal
+white = '#B5BFE2' # subtext1
+
+# Bright colors
+[colors.bright]
+black = '#626880' # surface2
+red = '#E78284' # red
+green = '#A6D189' # green
+yellow = '#E5C890' # yellow
+blue = '#8CAAEE' # blue
+magenta = '#F4B8E4' # pink
+cyan = '#81C8BE' # teal
+white = '#A5ADCE' # subtext0
+
+# Dim colors
+[colors.dim]
+black = '#51576D' # surface1
+red = '#E78284' # red
+green = '#A6D189' # green
+yellow = '#E5C890' # yellow
+blue = '#8CAAEE' # blue
+magenta = '#F4B8E4' # pink
+cyan = '#81C8BE' # teal
+white = '#B5BFE2' # subtext1
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/catppuccin_latte.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/catppuccin_latte.toml
new file mode 100644
index 0000000..9a1cde7
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/catppuccin_latte.toml
@@ -0,0 +1,76 @@
+# Default colors
+[colors.primary]
+background = '#EFF1F5' # base
+foreground = '#4C4F69' # text
+# Bright and dim foreground colors
+dim_foreground = '#4C4F69' # text
+bright_foreground = '#4C4F69' # text
+
+# Cursor colors
+[colors.cursor]
+text = '#EFF1F5' # base
+cursor = '#DC8A78' # rosewater
+
+[colors.vi_mode_cursor]
+text = '#EFF1F5' # base
+cursor = '#7287FD' # lavender
+
+# Search colors
+[colors.search.matches]
+foreground = '#EFF1F5' # base
+background = '#6C6F85' # subtext0
+
+[colors.search.focused_match]
+foreground = '#EFF1F5' # base
+background = '#40A02B' # green
+
+[colors.footer_bar]
+foreground = '#EFF1F5' # base
+background = '#6C6F85' # subtext0
+
+# Keyboard regex hints
+[colors.hints.start]
+foreground = '#EFF1F5' # base
+background = '#DF8E1D' # yellow
+
+[colors.hints.end]
+foreground = '#EFF1F5' # base
+background = '#6C6F85' # subtext0
+
+# Selection colors
+[colors.selection]
+text = '#EFF1F5' # base
+background = '#DC8A78' # rosewater
+
+# Normal colors
+[colors.normal]
+black = '#5C5F77' # subtext1
+red = '#D20F39' # red
+green = '#40A02B' # green
+yellow = '#DF8E1D' # yellow
+blue = '#1E66F5' # blue
+magenta = '#EA76CB' # pink
+cyan = '#179299' # teal
+white = '#ACB0BE' # surface2
+
+# Bright colors
+[colors.bright]
+black = '#6C6F85' # subtext0
+red = '#D20F39' # red
+green = '#40A02B' # green
+yellow = '#DF8E1D' # yellow
+blue = '#1E66F5' # blue
+magenta = '#EA76CB' # pink
+cyan = '#179299' # teal
+white = '#BCC0CC' # surface1
+
+# Dim colors
+[colors.dim]
+black = '#5C5F77' # subtext1
+red = '#D20F39' # red
+green = '#40A02B' # green
+yellow = '#DF8E1D' # yellow
+blue = '#1E66F5' # blue
+magenta = '#EA76CB' # pink
+cyan = '#179299' # teal
+white = '#ACB0BE' # surface2
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/catppuccin_macchiato.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/catppuccin_macchiato.toml
new file mode 100644
index 0000000..fdec19a
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/catppuccin_macchiato.toml
@@ -0,0 +1,76 @@
+# Default colors
+[colors.primary]
+background = '#24273A' # base
+foreground = '#CAD3F5' # text
+# Bright and dim foreground colors
+dim_foreground = '#CAD3F5' # text
+bright_foreground = '#CAD3F5' # text
+
+# Cursor colors
+[colors.cursor]
+text = '#24273A' # base
+cursor = '#F4DBD6' # rosewater
+
+[colors.vi_mode_cursor]
+text = '#24273A' # base
+cursor = '#B7BDF8' # lavender
+
+# Search colors
+[colors.search.matches]
+foreground = '#24273A' # base
+background = '#A5ADCB' # subtext0
+
+[colors.search.focused_match]
+foreground = '#24273A' # base
+background = '#A6DA95' # green
+
+[colors.footer_bar]
+foreground = '#24273A' # base
+background = '#A5ADCB' # subtext0
+
+# Keyboard regex hints
+[colors.hints.start]
+foreground = '#24273A' # base
+background = '#EED49F' # yellow
+
+[colors.hints.end]
+foreground = '#24273A' # base
+background = '#A5ADCB' # subtext0
+
+# Selection colors
+[colors.selection]
+text = '#24273A' # base
+background = '#F4DBD6' # rosewater
+
+# Normal colors
+[colors.normal]
+black = '#494D64' # surface1
+red = '#ED8796' # red
+green = '#A6DA95' # green
+yellow = '#EED49F' # yellow
+blue = '#8AADF4' # blue
+magenta = '#F5BDE6' # pink
+cyan = '#8BD5CA' # teal
+white = '#B8C0E0' # subtext1
+
+# Bright colors
+[colors.bright]
+black = '#5B6078' # surface2
+red = '#ED8796' # red
+green = '#A6DA95' # green
+yellow = '#EED49F' # yellow
+blue = '#8AADF4' # blue
+magenta = '#F5BDE6' # pink
+cyan = '#8BD5CA' # teal
+white = '#A5ADCB' # subtext0
+
+# Dim colors
+[colors.dim]
+black = '#494D64' # surface1
+red = '#ED8796' # red
+green = '#A6DA95' # green
+yellow = '#EED49F' # yellow
+blue = '#8AADF4' # blue
+magenta = '#F5BDE6' # pink
+cyan = '#8BD5CA' # teal
+white = '#B8C0E0' # subtext1
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/catppuccin_mocha.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/catppuccin_mocha.toml
new file mode 100644
index 0000000..e57824d
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/catppuccin_mocha.toml
@@ -0,0 +1,75 @@
+[colors.primary]
+background = '#1E1E2E' # base
+foreground = '#CDD6F4' # text
+# Bright and dim foreground colors
+dim_foreground = '#CDD6F4' # text
+bright_foreground = '#CDD6F4' # text
+
+# Cursor colors
+[colors.cursor]
+text = '#1E1E2E' # base
+cursor = '#F5E0DC' # rosewater
+
+[colors.vi_mode_cursor]
+text = '#1E1E2E' # base
+cursor = '#B4BEFE' # lavender
+
+# Search colors
+[colors.search.matches]
+foreground = '#1E1E2E' # base
+background = '#A6ADC8' # subtext0
+
+[colors.search.focused_match]
+foreground = '#1E1E2E' # base
+background = '#A6E3A1' # green
+
+[colors.footer_bar]
+foreground = '#1E1E2E' # base
+background = '#A6ADC8' # subtext0
+
+# Keyboard regex hints
+[colors.hints.start]
+foreground = '#1E1E2E' # base
+background = '#F9E2AF' # yellow
+
+[colors.hints.end]
+foreground = '#1E1E2E' # base
+background = '#A6ADC8' # subtext0
+
+# Selection colors
+[colors.selection]
+text = '#1E1E2E' # base
+background = '#F5E0DC' # rosewater
+
+# Normal colors
+[colors.normal]
+black = '#45475A' # surface1
+red = '#F38BA8' # red
+green = '#A6E3A1' # green
+yellow = '#F9E2AF' # yellow
+blue = '#89B4FA' # blue
+magenta = '#F5C2E7' # pink
+cyan = '#94E2D5' # teal
+white = '#BAC2DE' # subtext1
+
+# Bright colors
+[colors.bright]
+black = '#585B70' # surface2
+red = '#F38BA8' # red
+green = '#A6E3A1' # green
+yellow = '#F9E2AF' # yellow
+blue = '#89B4FA' # blue
+magenta = '#F5C2E7' # pink
+cyan = '#94E2D5' # teal
+white = '#A6ADC8' # subtext0
+
+# Dim colors
+[colors.dim]
+black = '#45475A' # surface1
+red = '#F38BA8' # red
+green = '#A6E3A1' # green
+yellow = '#F9E2AF' # yellow
+blue = '#89B4FA' # blue
+magenta = '#F5C2E7' # pink
+cyan = '#94E2D5' # teal
+white = '#BAC2DE' # subtext1
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/challenger_deep.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/challenger_deep.toml
new file mode 100644
index 0000000..a5c4a32
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/challenger_deep.toml
@@ -0,0 +1,32 @@
+# Colors (Challenger Deep)
+
+# Default colors
+[colors.primary]
+background = '#1e1c31'
+foreground = '#cbe1e7'
+
+[colors.cursor]
+text = '#ff271d'
+cursor = '#fbfcfc'
+
+# Normal colors
+[colors.normal]
+black = '#141228'
+red = '#ff5458'
+green = '#62d196'
+yellow = '#ffb378'
+blue = '#65b2ff'
+magenta = '#906cff'
+cyan = '#63f2f1'
+white = '#a6b3cc'
+
+# Bright colors
+[colors.bright]
+black = '#565575'
+red = '#ff8080'
+green = '#95ffa4'
+yellow = '#ffe9aa'
+blue = '#91ddff'
+magenta = '#c991e1'
+cyan = '#aaffe4'
+white = '#cbe3e7'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/chicago95.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/chicago95.toml
new file mode 100644
index 0000000..6902e76
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/chicago95.toml
@@ -0,0 +1,29 @@
+# Windows 95 Color Scheme
+# To have the authentic experience in Chicago95 GTK Theme.
+
+# Default colors
+[colors.primary]
+background = '#000000'
+foreground = '#C0C7C8'
+
+# Normal colors
+[colors.normal]
+black = '#000000'
+red = '#A80000'
+green = '#00A800'
+yellow = '#A85400'
+blue = '#0000A8'
+magenta = '#A800A8'
+cyan = '#00A8A8'
+white = '#A8A8A8'
+
+# Bright colors
+[colors.bright]
+black = '#545454'
+red = '#FC5454'
+green = '#54FC54'
+yellow = '#FCFC54'
+blue = '#5454FC'
+magenta = '#FC54FC'
+cyan = '#54FCFC'
+white = '#FFFFFF'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/citylights.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/citylights.toml
new file mode 100644
index 0000000..775ee72
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/citylights.toml
@@ -0,0 +1,30 @@
+# Default colors
+[colors.primary]
+background = '#171d23'
+foreground = '#ffffff'
+
+# Cursor colors
+[colors.cursor]
+text = '#fafafa'
+cursor = '#008b94'
+
+# Normal colors
+[colors.normal]
+black = '#333f4a'
+red = '#d95468'
+green = '#8bd49c'
+blue = '#539afc'
+magenta = '#b62d65'
+cyan = '#70e1e8'
+white = '#b7c5d3'
+
+# Bright colors
+[colors.bright]
+black = '#41505e'
+red = '#d95468'
+green = '#8bd49c'
+yellow = '#ebbf83'
+blue = '#5ec4ff'
+magenta = '#e27e8d'
+cyan = '#70e1e8'
+white = '#ffffff'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/cyber_punk_neon.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/cyber_punk_neon.toml
new file mode 100644
index 0000000..0424e47
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/cyber_punk_neon.toml
@@ -0,0 +1,33 @@
+# Cyber Punk Neon
+# Source https//github.com/Roboron3042/Cyberpunk-Neon
+
+# Default colors
+[colors.primary]
+background = '#000b1e'
+foreground = '#0abdc6'
+
+[colors.cursor]
+text = '#000b1e'
+cursor = '#0abdc6'
+
+# Normal colors
+[colors.normal]
+black = '#123e7c'
+red = '#ff0000'
+green = '#d300c4'
+yellow = '#f57800'
+blue = '#123e7c'
+magenta = '#711c91'
+cyan = '#0abdc6'
+white = '#d7d7d5'
+
+# Bright colors
+[colors.bright]
+black = '#1c61c2'
+red = '#ff0000'
+green = '#d300c4'
+yellow = '#f57800'
+blue = '#00ff00'
+magenta = '#711c91'
+cyan = '#0abdc6'
+white = '#d7d7d5'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/dark_pastels.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/dark_pastels.toml
new file mode 100644
index 0000000..6f11b9b
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/dark_pastels.toml
@@ -0,0 +1,28 @@
+# Colors (Konsole's Dark Pastels)
+
+# Default colors
+[colors.primary]
+background = '#2C2C2C'
+foreground = '#DCDCCC'
+
+# Normal colors
+[colors.normal]
+black = '#3F3F3F'
+red = '#705050'
+green = '#60B48A'
+yellow = '#DFAF8F'
+blue = '#9AB8D7'
+magenta = '#DC8CC3'
+cyan = '#8CD0D3'
+white = '#DCDCCC'
+
+# Bright colors
+[colors.bright]
+black = '#709080'
+red = '#DCA3A3'
+green = '#72D5A3'
+yellow = '#F0DFAF'
+blue = '#94BFF3'
+magenta = '#EC93D3'
+cyan = '#93E0E3'
+white = '#FFFFFF'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/dark_plus.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/dark_plus.toml
new file mode 100644
index 0000000..d168c6f
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/dark_plus.toml
@@ -0,0 +1,23 @@
+[colors.primary]
+background = "#1F1F1F"
+foreground = "#CCCCCC"
+
+[colors.normal]
+black = "#000000"
+red = "#d6181b"
+green = "#6A9955"
+yellow = "#e4d201"
+blue = "#569cd6"
+magenta = "#bc3fbc"
+cyan = "#4EC9B0"
+white = "#e5e5e5"
+
+[colors.bright]
+black = "#666666"
+red = "#ce9178"
+green = "#b5cea8"
+yellow = "#DCDCAA"
+blue = "#9cdcfe"
+magenta = "#d670d6"
+cyan = "#9cdcfe"
+white = "#e5e5e5"
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/dark_pride.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/dark_pride.toml
new file mode 100644
index 0000000..6cfba47
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/dark_pride.toml
@@ -0,0 +1,34 @@
+# Dark Pride
+# A dark trans pride colour inspired theme
+
+# Primary colors
+[colors.primary]
+background = '#0d0d1b'
+foreground = '#ccccce'
+
+# Colors used for 'custom_cursor_colors'
+[colors.cursor]
+text = '#bbbbbb'
+cursor = '#ff0017'
+
+# Colors 0 through 7
+[colors.normal]
+black = '#282828'
+red = '#ca1444'
+green = '#789aba'
+yellow = '#b3879f'
+blue = '#95569b'
+magenta = '#cb6fa1'
+cyan = '#fb6e93'
+white = '#cf98c1'
+
+# Colors 8 through 15
+[colors.bright]
+black = '#98218e'
+red = '#cb515d'
+green = '#5a87b1'
+yellow = '#9c61ab'
+blue = '#9a77b1'
+magenta = '#f2a297'
+cyan = '#f4436f'
+white = '#ebdbb2'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/dawnfox.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/dawnfox.toml
new file mode 100644
index 0000000..ad637ed
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/dawnfox.toml
@@ -0,0 +1,71 @@
+# Nightfox Alacritty Colors
+## name: dawnfox
+## upstream: https://github.com/edeneast/nightfox.nvim/raw/main/extra/dawnfox/alacritty.toml
+
+[colors.primary]
+background = "#faf4ed"
+foreground = "#575279"
+dim_foreground = "#4c4769"
+bright_foreground = "#625c87"
+
+[colors.cursor]
+text = "#575279"
+cursor = "#625c87"
+
+[colors.vi_mode_cursor]
+text = "#575279"
+cursor = "#56949f"
+
+[colors.search.matches]
+foreground = "#575279"
+background = "#b8cece"
+
+[colors.search.focused_match]
+foreground = "#575279"
+background = "#618774"
+
+[colors.footer_bar]
+foreground = "#575279"
+background = "#ebdfe4"
+
+[colors.hints.start]
+foreground = "#575279"
+background = "#d7827e"
+
+[colors.hints.end]
+foreground = "#575279"
+background = "#ebdfe4"
+
+[colors.selection]
+text = "#575279"
+background = "#d0d8d8"
+
+[colors.normal]
+black = "#575279"
+red = "#b4637a"
+green = "#618774"
+yellow = "#ea9d34"
+blue = "#286983"
+magenta = "#907aa9"
+cyan = "#56949f"
+white = "#e5e9f0"
+
+[colors.bright]
+black = "#5f5695"
+red = "#c26d85"
+green = "#629f81"
+yellow = "#eea846"
+blue = "#2d81a3"
+magenta = "#9a80b9"
+cyan = "#5ca7b4"
+white = "#e6ebf3"
+
+[colors.dim]
+black = "#504c6b"
+red = "#a5576d"
+green = "#597668"
+yellow = "#dd9024"
+blue = "#295e73"
+magenta = "#816b9a"
+cyan = "#50848c"
+white = "#c8cfde"
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/dayfox.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/dayfox.toml
new file mode 100644
index 0000000..049bbc3
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/dayfox.toml
@@ -0,0 +1,71 @@
+# Nightfox Alacritty Colors
+## name: dayfox
+## upstream: https://github.com/edeneast/nightfox.nvim/raw/main/extra/dayfox/alacritty.toml
+
+[colors.primary]
+background = "#f6f2ee"
+foreground = "#3d2b5a"
+dim_foreground = "#302b5d"
+bright_foreground = "#643f61"
+
+[colors.cursor]
+text = "#3d2b5a"
+cursor = "#643f61"
+
+[colors.vi_mode_cursor]
+text = "#3d2b5a"
+cursor = "#287980"
+
+[colors.search.matches]
+foreground = "#3d2b5a"
+background = "#a4c1c2"
+
+[colors.search.focused_match]
+foreground = "#3d2b5a"
+background = "#396847"
+
+[colors.footer_bar]
+foreground = "#3d2b5a"
+background = "#d3c7bb"
+
+[colors.hints.start]
+foreground = "#3d2b5a"
+background = "#955f61"
+
+[colors.hints.end]
+foreground = "#3d2b5a"
+background = "#d3c7bb"
+
+[colors.selection]
+text = "#3d2b5a"
+background = "#e7d2be"
+
+[colors.normal]
+black = "#352c24"
+red = "#a5222f"
+green = "#396847"
+yellow = "#ac5402"
+blue = "#2848a9"
+magenta = "#6e33ce"
+cyan = "#287980"
+white = "#f2e9e1"
+
+[colors.bright]
+black = "#534c45"
+red = "#b3434e"
+green = "#577f63"
+yellow = "#b86e28"
+blue = "#4863b6"
+magenta = "#8452d5"
+cyan = "#488d93"
+white = "#f4ece6"
+
+[colors.dim]
+black = "#2d251f"
+red = "#8c1d28"
+green = "#30583c"
+yellow = "#924702"
+blue = "#223d90"
+magenta = "#5e2baf"
+cyan = "#22676d"
+white = "#cec6bf"
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/deep_space.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/deep_space.toml
new file mode 100644
index 0000000..551d899
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/deep_space.toml
@@ -0,0 +1,33 @@
+# Source https//github.com/tyrannicaltoucan/vim-deep-space
+
+# Default colors
+[colors.primary]
+background = '#1b202a'
+foreground = '#9aa7bd'
+
+# Colors the cursor will use if `custom_cursor_colors` is true
+[colors.cursor]
+text = '#232936'
+cursor = '#51617d'
+
+# Normal colors
+[colors.normal]
+black = '#1b202a'
+red = '#b15e7c'
+green = '#709d6c'
+yellow = '#b5a262'
+blue = '#608cc3'
+magenta = '#8f72bf'
+cyan = '#56adb7'
+white = '#9aa7bd'
+
+# Bright colors
+[colors.bright]
+black = '#232936'
+red = '#b3785d'
+green = '#709d6c'
+yellow = '#d5b875'
+blue = '#608cc3'
+magenta = '#c47ebd'
+cyan = '#51617d'
+white = '#9aa7bd'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/doom_one.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/doom_one.toml
new file mode 100644
index 0000000..c7133f6
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/doom_one.toml
@@ -0,0 +1,17 @@
+# Colors (Doom One)
+
+# Default colors
+[colors.primary]
+background = '#282c34'
+foreground = '#bbc2cf'
+
+# Normal colors
+[colors.normal]
+black = '#282c34'
+red = '#ff6c6b'
+green = '#98be65'
+yellow = '#ecbe7b'
+blue = '#51afef'
+magenta = '#c678dd'
+cyan = '#46d9ff'
+white = '#bbc2cf'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/dracula.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/dracula.toml
new file mode 100644
index 0000000..b64f482
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/dracula.toml
@@ -0,0 +1,28 @@
+# Colors (Dracula)
+
+# Default colors
+[colors.primary]
+background = '#282a36'
+foreground = '#f8f8f2'
+
+# Normal colors
+[colors.normal]
+black = '#000000'
+red = '#ff5555'
+green = '#50fa7b'
+yellow = '#f1fa8c'
+blue = '#bd93f9'
+magenta = '#ff79c6'
+cyan = '#8be9fd'
+white = '#bbbbbb'
+
+# Bright colors
+[colors.bright]
+black = '#555555'
+red = '#ff5555'
+green = '#50fa7b'
+yellow = '#f1fa8c'
+blue = '#caa9fa'
+magenta = '#ff79c6'
+cyan = '#8be9fd'
+white = '#ffffff'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/dracula_plus.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/dracula_plus.toml
new file mode 100644
index 0000000..86a8549
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/dracula_plus.toml
@@ -0,0 +1,29 @@
+# Colors (Dracula+)
+
+[colors.primary]
+background = '#212121'
+foreground = '#F8F8F2'
+
+[colors.cursor]
+text = '#0E1415'
+cursor = '#ECEFF4'
+
+[colors.normal]
+black = '#21222C'
+red = '#FF5555'
+green = '#50FA7B'
+yellow = '#FFCB6B'
+blue = '#82AAFF'
+magenta = '#C792EA'
+cyan = '#8BE9FD'
+white = '#F8F9F2'
+
+[colors.bright]
+black = '#545454'
+red = '#FF6E6E'
+green = '#69FF94'
+yellow = '#FFCB6B'
+blue = '#D6ACFF'
+magenta = '#FF92DF'
+cyan = '#A4FFFF'
+white = '#F8F8F2'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/duskfox.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/duskfox.toml
new file mode 100644
index 0000000..9348b23
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/duskfox.toml
@@ -0,0 +1,71 @@
+# Nightfox Alacritty Colors
+## name: duskfox
+## upstream: https://github.com/edeneast/nightfox.nvim/raw/main/extra/duskfox/alacritty.toml
+
+[colors.primary]
+background = "#232136"
+foreground = "#e0def4"
+dim_foreground = "#cdcbe0"
+bright_foreground = "#eae8ff"
+
+[colors.cursor]
+text = "#e0def4"
+cursor = "#cdcbe0"
+
+[colors.vi_mode_cursor]
+text = "#e0def4"
+cursor = "#9ccfd8"
+
+[colors.search.matches]
+foreground = "#e0def4"
+background = "#63577d"
+
+[colors.search.focused_match]
+foreground = "#e0def4"
+background = "#a3be8c"
+
+[colors.footer_bar]
+foreground = "#e0def4"
+background = "#373354"
+
+[colors.hints.start]
+foreground = "#e0def4"
+background = "#ea9a97"
+
+[colors.hints.end]
+foreground = "#e0def4"
+background = "#373354"
+
+[colors.selection]
+text = "#e0def4"
+background = "#433c59"
+
+[colors.normal]
+black = "#393552"
+red = "#eb6f92"
+green = "#a3be8c"
+yellow = "#f6c177"
+blue = "#569fba"
+magenta = "#c4a7e7"
+cyan = "#9ccfd8"
+white = "#e0def4"
+
+[colors.bright]
+black = "#47407d"
+red = "#f083a2"
+green = "#b1d196"
+yellow = "#f9cb8c"
+blue = "#65b1cd"
+magenta = "#ccb1ed"
+cyan = "#a6dae3"
+white = "#e2e0f7"
+
+[colors.dim]
+black = "#322e42"
+red = "#d84f76"
+green = "#8aa872"
+yellow = "#e6a852"
+blue = "#4a869c"
+magenta = "#a580d2"
+cyan = "#7bb8c1"
+white = "#b1acde"
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/enfocado_dark.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/enfocado_dark.toml
new file mode 100644
index 0000000..d4e2fde
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/enfocado_dark.toml
@@ -0,0 +1,29 @@
+# Theme: enfocado_dark
+# Source: https://github.com/wuelnerdotexe/vim-enfocado
+
+# Default colors
+[colors.primary]
+background = '#181818'
+foreground = '#b9b9b9'
+
+# Normal colors
+[colors.normal]
+black = '#3b3b3b'
+red = '#ed4a46'
+green = '#70b433'
+yellow = '#dbb32d'
+blue = '#368aeb'
+magenta = '#eb6eb7'
+cyan = '#3fc5b7'
+white = '#b9b9b9'
+
+# Bright colors
+[colors.bright]
+black = '#777777'
+red = '#ff5e56'
+green = '#83c746'
+yellow = '#efc541'
+blue = '#4f9cfe'
+magenta = '#ff81ca'
+cyan = '#56d8c9'
+white = '#dedede'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/enfocado_light.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/enfocado_light.toml
new file mode 100644
index 0000000..5c27f56
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/enfocado_light.toml
@@ -0,0 +1,29 @@
+# Theme: enfocado_light
+# Source: https://github.com/wuelnerdotexe/vim-enfocado
+
+# Default colors
+[colors.primary]
+background = '#ffffff'
+foreground = '#474747'
+
+# Normal colors
+[colors.normal]
+black = '#282828'
+red = '#d6000c'
+green = '#1d9700'
+yellow = '#c49700'
+blue = '#0064e4'
+magenta = '#dd0f9d'
+cyan = '#00ad9c'
+white = '#cdcdcd'
+
+# Bright colors
+[colors.bright]
+black = '#878787'
+red = '#df0000'
+green = '#008400'
+yellow = '#af8500'
+blue = '#0054cf'
+magenta = '#c7008b'
+cyan = '#009a8a'
+white = '#ebebeb'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/everforest_dark.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/everforest_dark.toml
new file mode 100644
index 0000000..af185d2
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/everforest_dark.toml
@@ -0,0 +1,28 @@
+# Colors (Everforest Dark)
+
+# Default colors
+[colors.primary]
+background = '#2d353b'
+foreground = '#d3c6aa'
+
+# Normal colors
+[colors.normal]
+black = '#475258'
+red = '#e67e80'
+green = '#a7c080'
+yellow = '#dbbc7f'
+blue = '#7fbbb3'
+magenta = '#d699b6'
+cyan = '#83c092'
+white = '#d3c6aa'
+
+# Bright colors
+[colors.bright]
+black = '#475258'
+red = '#e67e80'
+green = '#a7c080'
+yellow = '#dbbc7f'
+blue = '#7fbbb3'
+magenta = '#d699b6'
+cyan = '#83c092'
+white = '#d3c6aa'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/everforest_light.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/everforest_light.toml
new file mode 100644
index 0000000..3c720a2
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/everforest_light.toml
@@ -0,0 +1,28 @@
+# Colors (Everforest Light)
+
+# Default colors
+[colors.primary]
+background = '#fdf6e3'
+foreground = '#5c6a72'
+
+# Normal colors
+[colors.normal]
+black = '#5c6a72'
+red = '#f85552'
+green = '#8da101'
+yellow = '#dfa000'
+blue = '#3a94c5'
+magenta = '#df69ba'
+cyan = '#35a77c'
+white = '#e0dcc7'
+
+# Bright Colors
+[colors.bright]
+black = '#5c6a72'
+red = '#f85552'
+green = '#8da101'
+yellow = '#dfa000'
+blue = '#3a94c5'
+magenta = '#df69ba'
+cyan = '#35a77c'
+white = '#e0dcc7'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/falcon.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/falcon.toml
new file mode 100644
index 0000000..e5b027b
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/falcon.toml
@@ -0,0 +1,33 @@
+# falcon colorscheme for alacritty
+# by fenetikm, https//github.com/fenetikm/falcon
+
+# Default colors
+[colors.primary]
+background = '#020221'
+foreground = '#b4b4b9'
+
+[colors.cursor]
+text = '#020221'
+cursor = '#ffe8c0'
+
+# Normal colors
+[colors.normal]
+black = '#000004'
+red = '#ff3600'
+green = '#718e3f'
+yellow = '#ffc552'
+blue = '#635196'
+magenta = '#ff761a'
+cyan = '#34bfa4'
+white = '#b4b4b9'
+
+# Bright colors
+[colors.bright]
+black = '#020221'
+red = '#ff8e78'
+green = '#b1bf75'
+yellow = '#ffd392'
+blue = '#99a4bc'
+magenta = '#ffb07b'
+cyan = '#8bccbf'
+white = '#f8f8ff'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/flat_remix.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/flat_remix.toml
new file mode 100644
index 0000000..907ac82
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/flat_remix.toml
@@ -0,0 +1,23 @@
+[colors.primary]
+background = '#272a34'
+foreground = '#FFFFFF'
+
+[colors.normal]
+black = '#1F2229'
+red = '#EC0101'
+green = '#47D4B9'
+yellow = '#FF8A18'
+blue = '#277FFF'
+magenta = '#D71655'
+cyan = '#05A1F7'
+white = '#FFFFFF'
+
+[colors.bright]
+black = '#1F2229'
+red = '#D41919'
+green = '#5EBDAB'
+yellow = '#FEA44C'
+blue = '#367bf0'
+magenta = '#BF2E5D'
+cyan = '#49AEE6'
+white = '#FFFFFF'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/flexoki.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/flexoki.toml
new file mode 100644
index 0000000..f4b3b37
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/flexoki.toml
@@ -0,0 +1,46 @@
+# based on https//stephango.com/flexoki and https//github.com/kepano/flexoki/tree/main/alacritty
+
+# Default colors
+[colors.primary]
+background = '#282726'
+foreground = '#FFFCF0'
+dim_foreground = '#FFFCF0'
+bright_foreground = '#FFFCF0'
+
+# Cursor colors
+[colors.cursor]
+text = '#FFFCF0'
+cursor = '#FFFCF0'
+
+# Normal colors
+[colors.normal]
+black = '#100F0F'
+red = '#AF3029'
+green = '#66800B'
+yellow = '#AD8301'
+blue = '#205EA6'
+magenta = '#A02F6F'
+cyan = '#24837B'
+white = '#FFFCF0'
+
+# Bright colors
+[colors.bright]
+black = '#100F0F'
+red = '#D14D41'
+green = '#879A39'
+yellow = '#D0A215'
+blue = '#4385BE'
+magenta = '#CE5D97'
+cyan = '#3AA99F'
+white = '#FFFCF0'
+
+# Dim colors
+[colors.dim]
+black = '#100F0F'
+red = '#AF3029'
+green = '#66800B'
+yellow = '#AD8301'
+blue = '#205EA6'
+magenta = '#A02F6F'
+cyan = '#24837B'
+white = '#FFFCF0'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/github_dark.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/github_dark.toml
new file mode 100644
index 0000000..dc3a338
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/github_dark.toml
@@ -0,0 +1,36 @@
+# github Alacritty Colors
+
+# Default colors
+[colors.primary]
+background = '#24292e'
+foreground = '#d1d5da'
+
+# Normal colors
+[colors.normal]
+black = '#586069'
+red = '#ea4a5a'
+green = '#34d058'
+yellow = '#ffea7f'
+blue = '#2188ff'
+magenta = '#b392f0'
+cyan = '#39c5cf'
+white = '#d1d5da'
+
+# Bright colors
+[colors.bright]
+black = '#959da5'
+red = '#f97583'
+green = '#85e89d'
+yellow = '#ffea7f'
+blue = '#79b8ff'
+magenta = '#b392f0'
+cyan = '#56d4dd'
+white = '#fafbfc'
+
+[[colors.indexed_colors]]
+index = 16
+color = '#d18616'
+
+[[colors.indexed_colors]]
+index = 17
+color = '#f97583'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/github_dark_colorblind.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/github_dark_colorblind.toml
new file mode 100644
index 0000000..76bb4f2
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/github_dark_colorblind.toml
@@ -0,0 +1,36 @@
+# github Alacritty Colors
+
+# Default colors
+[colors.primary]
+background = '#0d1117'
+foreground = '#b3b1ad'
+
+# Normal colors
+[colors.normal]
+black = '#484f58'
+red = '#ff7b72'
+green = '#3fb950'
+yellow = '#d29922'
+blue = '#58a6ff'
+magenta = '#bc8cff'
+cyan = '#39c5cf'
+white = '#b1bac4'
+
+# Bright colors
+[colors.bright]
+black = '#6e7681'
+red = '#ffa198'
+green = '#56d364'
+yellow = '#e3b341'
+blue = '#79c0ff'
+magenta = '#d2a8ff'
+cyan = '#56d4dd'
+white = '#f0f6fc'
+
+[[colors.indexed_colors]]
+index = 16
+color = '#d18616'
+
+[[colors.indexed_colors]]
+index = 17
+color = '#ffa198'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/github_dark_default.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/github_dark_default.toml
new file mode 100644
index 0000000..76bb4f2
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/github_dark_default.toml
@@ -0,0 +1,36 @@
+# github Alacritty Colors
+
+# Default colors
+[colors.primary]
+background = '#0d1117'
+foreground = '#b3b1ad'
+
+# Normal colors
+[colors.normal]
+black = '#484f58'
+red = '#ff7b72'
+green = '#3fb950'
+yellow = '#d29922'
+blue = '#58a6ff'
+magenta = '#bc8cff'
+cyan = '#39c5cf'
+white = '#b1bac4'
+
+# Bright colors
+[colors.bright]
+black = '#6e7681'
+red = '#ffa198'
+green = '#56d364'
+yellow = '#e3b341'
+blue = '#79c0ff'
+magenta = '#d2a8ff'
+cyan = '#56d4dd'
+white = '#f0f6fc'
+
+[[colors.indexed_colors]]
+index = 16
+color = '#d18616'
+
+[[colors.indexed_colors]]
+index = 17
+color = '#ffa198'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/github_dark_dimmed.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/github_dark_dimmed.toml
new file mode 100644
index 0000000..851cbfe
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/github_dark_dimmed.toml
@@ -0,0 +1,36 @@
+# github Alacritty Colors
+
+# Default colors
+[colors.primary]
+background = '#22272e'
+foreground = '#768390'
+
+# Normal colors
+[colors.normal]
+black = '#545d68'
+red = '#f47067'
+green = '#57ab5a'
+yellow = '#c69026'
+blue = '#539bf5'
+magenta = '#b083f0'
+cyan = '#39c5cf'
+white = '#909dab'
+
+# Bright colors
+[colors.bright]
+black = '#636e7b'
+red = '#ff938a'
+green = '#6bc46d'
+yellow = '#daaa3f'
+blue = '#6cb6ff'
+magenta = '#dcbdfb'
+cyan = '#56d4dd'
+white = '#cdd9e5'
+
+[[colors.indexed_colors]]
+index = 16
+color = '#d18616'
+
+[[colors.indexed_colors]]
+index = 17
+color = '#ff938a'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/github_dark_high_contrast.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/github_dark_high_contrast.toml
new file mode 100644
index 0000000..e1b1b3e
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/github_dark_high_contrast.toml
@@ -0,0 +1,33 @@
+# (Github Dark High Contrast) Colors for Alacritty
+
+# Default colors
+[colors.primary]
+background = '#0a0c10'
+foreground = '#f0f3f6'
+
+# Cursor colors
+[colors.cursor]
+text = '#0a0c10'
+cursor = '#f0f3f6'
+
+# Normal colors
+[colors.normal]
+black = '#7a828e'
+red = '#ff9492'
+green = '#26cd4d'
+yellow = '#f0b72f'
+blue = '#71b7ff'
+magenta = '#cb9eff'
+cyan = '#39c5cf'
+white = '#d9dee3'
+
+# Bright colors
+[colors.bright]
+black = '#9ea7b3'
+red = '#ffb1af'
+green = '#4ae168'
+yellow = '#f7c843'
+blue = '#91cbff'
+magenta = '#cb9eff'
+cyan = '#39c5cf'
+white = '#d9dee3'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/github_dark_tritanopia.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/github_dark_tritanopia.toml
new file mode 100644
index 0000000..e24c822
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/github_dark_tritanopia.toml
@@ -0,0 +1,33 @@
+# (Github Dark Tritanopia) Colors for Alacritty
+
+# Default colors
+[colors.primary]
+background = '#0d1117'
+foreground = '#c9d1d9'
+
+# Cursor colors
+[colors.cursor]
+text = '#0d1117'
+cursor = '#c9d1d9'
+
+# Normal colors
+[colors.normal]
+black = '#484f58'
+red = '#ff7b72'
+green = '#58a6ff'
+yellow = '#d29922'
+blue = '#58a6ff'
+magenta = '#bc8cff'
+cyan = '#39c5cf'
+white = '#b1bac4'
+
+# Bright colors
+[colors.bright]
+black = '#6e7681'
+red = '#ffa198'
+green = '#79c0ff'
+yellow = '#e3b341'
+blue = '#79c0ff'
+magenta = '#bc8cff'
+cyan = '#39c5cf'
+white = '#b1bac4'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/github_light.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/github_light.toml
new file mode 100644
index 0000000..4c6524a
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/github_light.toml
@@ -0,0 +1,36 @@
+# github Alacritty Colors
+
+# Default colors
+[colors.primary]
+background = '#ffffff'
+foreground = '#24292f'
+
+# Normal colors
+[colors.normal]
+black = '#24292e'
+red = '#d73a49'
+green = '#28a745'
+yellow = '#dbab09'
+blue = '#0366d6'
+magenta = '#5a32a3'
+cyan = '#0598bc'
+white = '#6a737d'
+
+# Bright colors
+[colors.bright]
+black = '#959da5'
+red = '#cb2431'
+green = '#22863a'
+yellow = '#b08800'
+blue = '#005cc5'
+magenta = '#5a32a3'
+cyan = '#3192aa'
+white = '#d1d5da'
+
+[[colors.indexed_colors]]
+index = 16
+color = '#d18616'
+
+[[colors.indexed_colors]]
+index = 17
+color = '#cb2431'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/github_light_colorblind.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/github_light_colorblind.toml
new file mode 100644
index 0000000..4e02300
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/github_light_colorblind.toml
@@ -0,0 +1,36 @@
+# github Alacritty Colors
+
+# Default colors
+[colors.primary]
+background = '#ffffff'
+foreground = '#0E1116'
+
+# Normal colors
+[colors.normal]
+black = '#24292f'
+red = '#cf222e'
+green = '#116329'
+yellow = '#4d2d00'
+blue = '#0969da'
+magenta = '#8250df'
+cyan = '#1b7c83'
+white = '#6e7781'
+
+# Bright colors
+[colors.bright]
+black = '#57606a'
+red = '#a40e26'
+green = '#1a7f37'
+yellow = '#633c01'
+blue = '#218bff'
+magenta = '#a475f9'
+cyan = '#3192aa'
+white = '#8c959f'
+
+[[colors.indexed_colors]]
+index = 16
+color = '#d18616'
+
+[[colors.indexed_colors]]
+index = 17
+color = '#a40e26'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/github_light_default.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/github_light_default.toml
new file mode 100644
index 0000000..4e02300
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/github_light_default.toml
@@ -0,0 +1,36 @@
+# github Alacritty Colors
+
+# Default colors
+[colors.primary]
+background = '#ffffff'
+foreground = '#0E1116'
+
+# Normal colors
+[colors.normal]
+black = '#24292f'
+red = '#cf222e'
+green = '#116329'
+yellow = '#4d2d00'
+blue = '#0969da'
+magenta = '#8250df'
+cyan = '#1b7c83'
+white = '#6e7781'
+
+# Bright colors
+[colors.bright]
+black = '#57606a'
+red = '#a40e26'
+green = '#1a7f37'
+yellow = '#633c01'
+blue = '#218bff'
+magenta = '#a475f9'
+cyan = '#3192aa'
+white = '#8c959f'
+
+[[colors.indexed_colors]]
+index = 16
+color = '#d18616'
+
+[[colors.indexed_colors]]
+index = 17
+color = '#a40e26'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/github_light_high_contrast.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/github_light_high_contrast.toml
new file mode 100644
index 0000000..ee5b9c7
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/github_light_high_contrast.toml
@@ -0,0 +1,33 @@
+# (Github Light High Contrast) Colors for Alacritty
+
+# Default colors
+[colors.primary]
+background = '#ffffff'
+foreground = '#010409'
+
+# Cursor colors
+[colors.cursor]
+text = '#ffffff'
+cursor = '#0e1116'
+
+# Normal colors
+[colors.normal]
+black = '#0e1116'
+red = '#a0111f'
+green = '#024c1a'
+yellow = '#3f2200'
+blue = '#0349b4'
+magenta = '#622cbc'
+cyan = '#1b7c83'
+white = '#66707b'
+
+# Bright colors
+[colors.bright]
+black = '#4b535d'
+red = '#86061d'
+green = '#055d20'
+yellow = '#4e2c00'
+blue = '#1168e3'
+magenta = '#622cbc'
+cyan = '#1b7c83'
+white = '#66707b'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/github_light_tritanopia.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/github_light_tritanopia.toml
new file mode 100644
index 0000000..6b68f6a
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/github_light_tritanopia.toml
@@ -0,0 +1,33 @@
+# (Github Light Tritanopia) Colors for Alacritty
+
+# Default colors
+[colors.primary]
+background = '#ffffff'
+foreground = '#1b1f24'
+
+# Cursor colors
+[colors.cursor]
+text = '#ffffff'
+cursor = '#24292f'
+
+# Normal colors
+[colors.normal]
+black = '#24292f'
+red = '#cf222e'
+green = '#0550ae'
+yellow = '#4d2d00'
+blue = '#0969da'
+magenta = '#8250df'
+cyan = '#1b7c83'
+white = '#6e7781'
+
+# Bright colors
+[colors.bright]
+black = '#57606a'
+red = '#a40e26'
+green = '#0969da'
+yellow = '#633c01'
+blue = '#218bff'
+magenta = '#8250df'
+cyan = '#1b7c83'
+white = '#6e7781'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/gnome_terminal.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/gnome_terminal.toml
new file mode 100644
index 0000000..a6d21fb
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/gnome_terminal.toml
@@ -0,0 +1,28 @@
+# Gnome (Gnome Terminal Default)
+
+# Default colors
+[colors.primary]
+background = '#1e1e1e'
+foreground = '#ffffff'
+
+# Normal colors
+[colors.normal]
+black = '#171421'
+red = '#c01c28'
+green = '#26a269'
+yellow = '#a2734c'
+blue = '#12488b'
+magenta = '#a347ba'
+cyan = '#2aa1b3'
+white = '#d0cfcc'
+
+# Bright colors
+[colors.bright]
+black = '#5e5c64'
+red = '#f66151'
+green = '#33d17a'
+yellow = '#e9ad0c'
+blue = '#2a7bde'
+magenta = '#c061cb'
+cyan = '#33c7de'
+white = '#ffffff'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/google.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/google.toml
new file mode 100644
index 0000000..001c45d
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/google.toml
@@ -0,0 +1,23 @@
+[colors.primary]
+background = '#1d1f21'
+foreground = '#c5c8c6'
+
+[colors.normal]
+black = '#1d1f21'
+red = '#cc342b'
+green = '#198844'
+yellow = '#fba922'
+blue = '#3971ed'
+magenta = '#a36ac7'
+cyan = '#3971ed'
+white = '#c5c8c6'
+
+[colors.bright]
+black = '#969896'
+red = '#cc342b'
+green = '#198844'
+yellow = '#fba922'
+blue = '#3971ed'
+magenta = '#a36ac7'
+cyan = '#3971ed'
+white = '#ffffff'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/gotham.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/gotham.toml
new file mode 100644
index 0000000..d4a405d
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/gotham.toml
@@ -0,0 +1,28 @@
+# Colors (Gotham)
+
+# Default colors
+[colors.primary]
+background = '#0a0f14'
+foreground = '#98d1ce'
+
+# Normal colors
+[colors.normal]
+black = '#0a0f14'
+red = '#c33027'
+green = '#26a98b'
+yellow = '#edb54b'
+blue = '#195465'
+magenta = '#4e5165'
+cyan = '#33859d'
+white = '#98d1ce'
+
+# Bright colors
+[colors.bright]
+black = '#10151b'
+red = '#d26939'
+green = '#081f2d'
+yellow = '#245361'
+blue = '#093748'
+magenta = '#888ba5'
+cyan = '#599caa'
+white = '#d3ebe9'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/gruber_darker.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/gruber_darker.toml
new file mode 100644
index 0000000..50b4377
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/gruber_darker.toml
@@ -0,0 +1,26 @@
+# author: rexim
+# from: https://github.com/rexim/gruber-darker-theme
+
+[colors.primary]
+background = "#181818"
+foreground = "#E4E4E4"
+
+[colors.normal]
+black = "#181818"
+red = "#F43841"
+green = "#73D936"
+yellow = "#FFDD33"
+blue = "#96A6C8"
+magenta = "#9E95C7"
+cyan = "#95A99F"
+white = "#E4E4E4"
+
+[colors.bright]
+black = "#52494E"
+red = "#FF4F58"
+green = "#73D936"
+yellow = "#FFDD33"
+blue = "#96A6C8"
+magenta = "#AFAFD7"
+cyan = "#95A99F"
+white = "#F5F5F5"
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/gruvbox_dark.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/gruvbox_dark.toml
new file mode 100644
index 0000000..d2845cd
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/gruvbox_dark.toml
@@ -0,0 +1,30 @@
+# Colors (Gruvbox dark)
+
+# Default colors
+[colors.primary]
+# hard contrast background = = '#1d2021'
+background = '#282828'
+# soft contrast background = = '#32302f'
+foreground = '#ebdbb2'
+
+# Normal colors
+[colors.normal]
+black = '#282828'
+red = '#cc241d'
+green = '#98971a'
+yellow = '#d79921'
+blue = '#458588'
+magenta = '#b16286'
+cyan = '#689d6a'
+white = '#a89984'
+
+# Bright colors
+[colors.bright]
+black = '#928374'
+red = '#fb4934'
+green = '#b8bb26'
+yellow = '#fabd2f'
+blue = '#83a598'
+magenta = '#d3869b'
+cyan = '#8ec07c'
+white = '#ebdbb2'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/gruvbox_light.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/gruvbox_light.toml
new file mode 100644
index 0000000..d2852db
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/gruvbox_light.toml
@@ -0,0 +1,30 @@
+# Colors (Gruvbox light)
+
+# Default colors
+[colors.primary]
+# hard contrast background = = '#f9f5d7'
+background = '#fbf1c7'
+# soft contrast background = = '#f2e5bc'
+foreground = '#3c3836'
+
+# Normal colors
+[colors.normal]
+black = '#fbf1c7'
+red = '#cc241d'
+green = '#98971a'
+yellow = '#d79921'
+blue = '#458588'
+magenta = '#b16286'
+cyan = '#689d6a'
+white = '#7c6f64'
+
+# Bright colors
+[colors.bright]
+black = '#928374'
+red = '#9d0006'
+green = '#79740e'
+yellow = '#b57614'
+blue = '#076678'
+magenta = '#8f3f71'
+cyan = '#427b58'
+white = '#3c3836'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/gruvbox_material.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/gruvbox_material.toml
new file mode 100644
index 0000000..02accfd
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/gruvbox_material.toml
@@ -0,0 +1,25 @@
+# Colors (Gruvbox Material Dark Medium)
+
+[colors.primary]
+background = '#282828'
+foreground = '#dfbf8e'
+
+[colors.normal]
+black = '#665c54'
+red = '#ea6962'
+green = '#a9b665'
+yellow = '#e78a4e'
+blue = '#7daea3'
+magenta = '#d3869b'
+cyan = '#89b482'
+white = '#dfbf8e'
+
+[colors.bright]
+black = '#928374'
+red = '#ea6962'
+green = '#a9b665'
+yellow = '#e3a84e'
+blue = '#7daea3'
+magenta = '#d3869b'
+cyan = '#89b482'
+white = '#dfbf8e'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/gruvbox_material_hard_dark.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/gruvbox_material_hard_dark.toml
new file mode 100644
index 0000000..f9fb56d
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/gruvbox_material_hard_dark.toml
@@ -0,0 +1,28 @@
+# Colors (Gruvbox Material Hard Dark)
+
+# Default colors
+[colors.primary]
+background = '#1d2021'
+foreground = '#d4be98'
+
+# Normal colors
+[colors.normal]
+black = '#32302f'
+red = '#ea6962'
+green = '#a9b665'
+yellow = '#d8a657'
+blue = '#7daea3'
+magenta = '#d3869b'
+cyan = '#89b482'
+white = '#d4be98'
+
+# Bright colors (same as normal colors)
+[colors.bright]
+black = '#32302f'
+red = '#ea6962'
+green = '#a9b665'
+yellow = '#d8a657'
+blue = '#7daea3'
+magenta = '#d3869b'
+cyan = '#89b482'
+white = '#d4be98'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/gruvbox_material_hard_light.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/gruvbox_material_hard_light.toml
new file mode 100644
index 0000000..e17ebdf
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/gruvbox_material_hard_light.toml
@@ -0,0 +1,28 @@
+# Colors (Gruvbox Material Hard Light)
+
+# Default colors
+[colors.primary]
+background = '#f9f5d7'
+foreground = '#654735'
+
+# Normal colors
+[colors.normal]
+black = '#654735'
+red = '#c14a4a'
+green = '#6c782e'
+yellow = '#b47109'
+blue = '#45707a'
+magenta = '#945e80'
+cyan = '#4c7a5d'
+white = '#f2e5bc'
+
+# Bright colors (same as normal colors)
+[colors.bright]
+black = '#654735'
+red = '#c14a4a'
+green = '#6c782e'
+yellow = '#b47109'
+blue = '#45707a'
+magenta = '#945e80'
+cyan = '#4c7a5d'
+white = '#f2e5bc'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/gruvbox_material_medium_dark.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/gruvbox_material_medium_dark.toml
new file mode 100644
index 0000000..1bbbfe8
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/gruvbox_material_medium_dark.toml
@@ -0,0 +1,28 @@
+# Colors (Gruvbox Material Medium Dark)
+
+# Default colors
+[colors.primary]
+background = '#282828'
+foreground = '#d4be98'
+
+# Normal colors
+[colors.normal]
+black = '#3c3836'
+red = '#ea6962'
+green = '#a9b665'
+yellow = '#d8a657'
+blue = '#7daea3'
+magenta = '#d3869b'
+cyan = '#89b482'
+white = '#d4be98'
+
+# Bright colors (same as normal colors)
+[colors.bright]
+black = '#3c3836'
+red = '#ea6962'
+green = '#a9b665'
+yellow = '#d8a657'
+blue = '#7daea3'
+magenta = '#d3869b'
+cyan = '#89b482'
+white = '#d4be98'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/gruvbox_material_medium_light.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/gruvbox_material_medium_light.toml
new file mode 100644
index 0000000..d43ac16
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/gruvbox_material_medium_light.toml
@@ -0,0 +1,28 @@
+# Colors (Gruvbox Material Medium Light)
+
+# Default colors
+[colors.primary]
+background = '#fbf1c7'
+foreground = '#654735'
+
+# Normal colors
+[colors.normal]
+black = '#654735'
+red = '#c14a4a'
+green = '#6c782e'
+yellow = '#b47109'
+blue = '#45707a'
+magenta = '#945e80'
+cyan = '#4c7a5d'
+white = '#eee0b7'
+
+# Bright colors (same as normal colors)
+[colors.bright]
+black = '#654735'
+red = '#c14a4a'
+green = '#6c782e'
+yellow = '#b47109'
+blue = '#45707a'
+magenta = '#945e80'
+cyan = '#4c7a5d'
+white = '#eee0b7'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/hardhacker.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/hardhacker.toml
new file mode 100644
index 0000000..a3b0b64
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/hardhacker.toml
@@ -0,0 +1,33 @@
+# hardhacker colorscheme for alacritty
+# by xin wu, https//github.com/hardhackerlabs/theme-alacritty
+
+# Default colors
+[colors.primary]
+background = '#282433'
+foreground = '#eee9fc'
+
+[colors.cursor]
+text = '#eee9fc'
+cursor = '#eee9fc'
+
+# Normal colors
+[colors.normal]
+black = '#282433'
+red = '#e965a5'
+green = '#b1f2a7'
+yellow = '#ebde76'
+blue = '#b1baf4'
+magenta = '#e192ef'
+cyan = '#b3f4f3'
+white = '#eee9fc'
+
+# Bright colors
+[colors.bright]
+black = '#3f3951'
+red = '#e965a5'
+green = '#b1f2a7'
+yellow = '#ebde76'
+blue = '#b1baf4'
+magenta = '#e192ef'
+cyan = '#b3f4f3'
+white = '#eee9fc'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/hatsunemiku.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/hatsunemiku.toml
new file mode 100644
index 0000000..d39317a
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/hatsunemiku.toml
@@ -0,0 +1,23 @@
+[colors.primary]
+background = '#242829'
+foreground = '#dcd7d7'
+
+[colors.normal]
+black = '#242829'
+red = '#df2683'
+green = '#13868c'
+yellow = '#fcfcdf'
+blue = '#1a86b9'
+magenta = '#bc7fd2'
+cyan = '#7cc7d6'
+white = '#4a4b4b'
+
+[colors.bright]
+black = '#7b8b99'
+red = '#df2683'
+green = '#13868c'
+yellow = '#fcfcdf'
+blue = '#1a86b9'
+magenta = '#bc7fd2'
+cyan = '#7cc7d6'
+white = '#dcd7d7'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/high_contrast.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/high_contrast.toml
new file mode 100644
index 0000000..c90466b
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/high_contrast.toml
@@ -0,0 +1,33 @@
+# Colors (High Contrast)
+
+# Default colors
+[colors.primary]
+background = '#444444'
+foreground = '#dddddd'
+
+# Colors the cursor will use if `custom_cursor_colors` is true
+[colors.cursor]
+text = '#aaaaaa'
+cursor = '#ffffff'
+
+# Normal colors
+[colors.normal]
+black = '#000000'
+red = '#ff0000'
+green = '#00ff00'
+yellow = '#ffff00'
+blue = '#0000ff'
+magenta = '#ff00ff'
+cyan = '#00ffff'
+white = '#ffffff'
+
+# Bright colors
+[colors.bright]
+black = '#000000'
+red = '#ff0000'
+green = '#00ff00'
+yellow = '#ffff00'
+blue = '#0000ff'
+magenta = '#ff00ff'
+cyan = '#00ffff'
+white = '#ffffff'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/horizon_dark.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/horizon_dark.toml
new file mode 100644
index 0000000..009a784
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/horizon_dark.toml
@@ -0,0 +1,28 @@
+# Colors (Horizon Dark)
+
+# Primary colors
+[colors.primary]
+background = '#1c1e26'
+foreground = '#e0e0e0'
+
+# Normal colors
+[colors.normal]
+black = '#16161c'
+red = '#e95678'
+green = '#29d398'
+yellow = '#fab795'
+blue = '#26bbd9'
+magenta = '#ee64ac'
+cyan = '#59e1e3'
+white = '#d5d8da'
+
+# Bright colors
+[colors.bright]
+black = '#5b5858'
+red = '#ec6a88'
+green = '#3fdaa4'
+yellow = '#fbc3a7'
+blue = '#3fc4de'
+magenta = '#f075b5'
+cyan = '#6be4e6'
+white = '#d5d8da'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/hyper.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/hyper.toml
new file mode 100644
index 0000000..89256b2
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/hyper.toml
@@ -0,0 +1,32 @@
+# Colors (Hyper)
+
+# Default colors
+[colors.primary]
+background = '#000000'
+foreground = '#ffffff'
+
+[colors.cursor]
+text = '#F81CE5'
+cursor = '#ffffff'
+
+# Normal colors
+[colors.normal]
+black = '#000000'
+red = '#fe0100'
+green = '#33ff00'
+yellow = '#feff00'
+blue = '#0066ff'
+magenta = '#cc00ff'
+cyan = '#00ffff'
+white = '#d0d0d0'
+
+# Bright colors
+[colors.bright]
+black = '#808080'
+red = '#fe0100'
+green = '#33ff00'
+yellow = '#feff00'
+blue = '#0066ff'
+magenta = '#cc00ff'
+cyan = '#00ffff'
+white = '#FFFFFF'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/inferno.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/inferno.toml
new file mode 100644
index 0000000..5157fab
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/inferno.toml
@@ -0,0 +1,29 @@
+# Inferno theme
+# Source https//github.com/hafiz-muhammad/inferno-alacritty-theme
+
+# Default colors
+[colors.primary]
+background = '#270d06'
+foreground = '#d9d9d9'
+
+# Normal colors
+[colors.normal]
+black = '#330000'
+red = '#ff3300'
+green = '#ff6600'
+yellow = '#ff9900'
+blue = '#ffcc00'
+magenta = '#ff6600'
+cyan = '#ff9900'
+white = '#d9d9d9'
+
+# Bright colors
+[colors.bright]
+black = '#663300'
+red = '#ff6633'
+green = '#ff9966'
+yellow = '#ffcc99'
+blue = '#ffcc33'
+magenta = '#ff9966'
+cyan = '#ffcc99'
+white = '#d9d9d9'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/iris.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/iris.toml
new file mode 100644
index 0000000..38401a1
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/iris.toml
@@ -0,0 +1,28 @@
+# Colors (Iris)
+
+# Default colors
+[colors.primary]
+background = '#272537'
+foreground = '#e8e6e9'
+
+# Normal colors
+[colors.normal]
+black = '#111133'
+red = '#d61d52'
+green = '#48a842'
+yellow = '#e1a51c'
+blue = '#5556d3'
+magenta = '#8650d3'
+cyan = '#52afb7'
+white = '#9f9aa7'
+
+# Bright colors
+[colors.bright]
+black = '#484867'
+red = '#e15877'
+green = '#71ab3a'
+yellow = '#c6a642'
+blue = '#6d6dc9'
+magenta = '#956ad3'
+cyan = '#6ab6bd'
+white = '#e8e6e9'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/iterm.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/iterm.toml
new file mode 100644
index 0000000..018f6c8
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/iterm.toml
@@ -0,0 +1,28 @@
+# Colors (iTerm 2 default theme)
+
+# Default colors
+[colors.primary]
+background = '#101421'
+foreground = '#fffbf6'
+
+# Normal colors
+[colors.normal]
+black = '#2e2e2e'
+red = '#eb4129'
+green = '#abe047'
+yellow = '#f6c744'
+blue = '#47a0f3'
+magenta = '#7b5cb0'
+cyan = '#64dbed'
+white = '#e5e9f0'
+
+# Bright colors
+[colors.bright]
+black = '#565656'
+red = '#ec5357'
+green = '#c0e17d'
+yellow = '#f9da6a'
+blue = '#49a4f8'
+magenta = '#a47de9'
+cyan = '#99faf2'
+white = '#ffffff'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/kanagawa_dragon.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/kanagawa_dragon.toml
new file mode 100644
index 0000000..a3dc784
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/kanagawa_dragon.toml
@@ -0,0 +1,38 @@
+# Colors (Kanagawa Dragon)
+# Source https//github.com/rebelot/kanagawa.nvim
+
+[colors.primary]
+background = '#181616'
+foreground = '#c5c9c5'
+
+[colors.normal]
+black = '#0d0c0c'
+blue = '#8ba4b0'
+cyan = '#8ea4a2'
+green = '#8a9a7b'
+magenta = '#a292a3'
+red = '#c4746e'
+white = '#C8C093'
+yellow = '#c4b28a'
+
+[colors.bright]
+black = '#a6a69c'
+blue = '#7FB4CA'
+cyan = '#7AA89F'
+green = '#87a987'
+magenta = '#938AA9'
+red = '#E46876'
+white = '#c5c9c5'
+yellow = '#E6C384'
+
+[colors.selection]
+background = '#2d4f67'
+foreground = '#c8c093'
+
+[[colors.indexed_colors]]
+index = 16
+color = '#ffa066'
+
+[[colors.indexed_colors]]
+index = 17
+color = '#ff5d62'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/kanagawa_wave.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/kanagawa_wave.toml
new file mode 100644
index 0000000..73ae8fb
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/kanagawa_wave.toml
@@ -0,0 +1,38 @@
+# Colors (Kanagawa Wave)
+# Source https//github.com/rebelot/kanagawa.nvim
+
+[colors.primary]
+background = '#1f1f28'
+foreground = '#dcd7ba'
+
+[colors.normal]
+black = '#090618'
+red = '#c34043'
+green = '#76946a'
+yellow = '#c0a36e'
+blue = '#7e9cd8'
+magenta = '#957fb8'
+cyan = '#6a9589'
+white = '#c8c093'
+
+[colors.bright]
+black = '#727169'
+red = '#e82424'
+green = '#98bb6c'
+yellow = '#e6c384'
+blue = '#7fb4ca'
+magenta = '#938aa9'
+cyan = '#7aa89f'
+white = '#dcd7ba'
+
+[colors.selection]
+background = '#2d4f67'
+foreground = '#c8c093'
+
+[[colors.indexed_colors]]
+index = 16
+color = '#ffa066'
+
+[[colors.indexed_colors]]
+index = 17
+color = '#ff5d62'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/kimbie_dark.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/kimbie_dark.toml
new file mode 100644
index 0000000..7521fcc
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/kimbie_dark.toml
@@ -0,0 +1,24 @@
+[colors.primary]
+background = "#221a0f"
+foreground = "#d3af86"
+
+[colors.normal]
+black = "#221a0f"
+red = "#c87e5a"
+green = "#879a6b"
+yellow = "#e4b581"
+blue = "#5d90cd"
+magenta = "#c792ea"
+cyan = "#6bbab2"
+white = "#d3af86"
+
+[colors.bright]
+black = "#7d6f48"
+red = "#c87e5a"
+green = "#879a6b"
+yellow = "#e4b581"
+blue = "#5d90cd"
+magenta = "#c792ea"
+cyan = "#6bbab2"
+white = "#f2cca8"
+
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/kimbie_light.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/kimbie_light.toml
new file mode 100644
index 0000000..76e214f
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/kimbie_light.toml
@@ -0,0 +1,24 @@
+[colors.primary]
+background = "#fbebd4"
+foreground = "#6e5346"
+
+[colors.normal]
+black = "#fbebd4"
+red = "#d43552"
+green = "#b8bb26"
+yellow = "#f0c674"
+blue = "#7cafc2"
+magenta = "#d3869b"
+cyan = "#8abeb7"
+white = "#6e5346"
+
+[colors.bright]
+black = "#f7e4c6"
+red = "#d43552"
+green = "#b8bb26"
+yellow = "#f0c674"
+blue = "#7cafc2"
+magenta = "#d3869b"
+cyan = "#8abeb7"
+white = "#4a3631"
+
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/konsole_linux.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/konsole_linux.toml
new file mode 100644
index 0000000..b5b15d3
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/konsole_linux.toml
@@ -0,0 +1,44 @@
+# Color theme ported from Konsole Linux colors
+
+[colors.primary]
+foreground = '#e3e3e3'
+bright_foreground = '#ffffff'
+background = '#1f1f1f'
+
+[colors.cursor]
+text = '#191622'
+cursor = '#f8f8f2'
+
+[colors.search]
+matches = { foreground = '#b2b2b2', background = '#b26818' }
+focused_match = { foreground = "CellBackground", background = "CellForeground" }
+
+[colors.normal]
+black = '#000000'
+red = '#b21818'
+green = '#18b218'
+yellow = '#b26818'
+blue = '#1818b2'
+magenta = '#b218b2'
+cyan = '#18b2b2'
+white = '#b2b2b2'
+
+[colors.bright]
+black = '#686868'
+red = '#ff5454'
+green = '#54ff54'
+yellow = '#ffff54'
+blue = '#5454ff'
+magenta = '#ff54ff'
+cyan = '#54ffff'
+white = '#ffffff'
+
+[colors.dim]
+black = '#000000'
+red = '#b21818'
+green = '#18b218'
+yellow = '#b26818'
+blue = '#1818b2'
+magenta = '#b218b2'
+cyan = '#18b2b2'
+white = '#b2b2b2'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/low_contrast.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/low_contrast.toml
new file mode 100644
index 0000000..ecde019
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/low_contrast.toml
@@ -0,0 +1,32 @@
+# Colors (Dim)
+
+# Default colors
+[colors.primary]
+background = '#333333'
+foreground = '#dddddd'
+
+[colors.cursor]
+text = '#aaaaaa'
+cursor = '#ffffff'
+
+# Normal colors
+[colors.normal]
+black = '#000000'
+red = '#bb0000'
+green = '#00bb00'
+yellow = '#bbbb00'
+blue = '#0000bb'
+magenta = '#bb00bb'
+cyan = '#00bbbb'
+white = '#bbbbbb'
+
+# Bright colors
+[colors.bright]
+black = '#000000'
+red = '#bb0000'
+green = '#00bb00'
+yellow = '#bbbb00'
+blue = '#0000bb'
+magenta = '#bb00bb'
+cyan = '#00bbbb'
+white = '#bbbbbb'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/marine_dark.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/marine_dark.toml
new file mode 100644
index 0000000..a06dcfa
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/marine_dark.toml
@@ -0,0 +1,29 @@
+# Marine Dark Theme
+# Source https//github.com/ProDeSquare/alacritty-colorschemes/blob/master/themes/marine_dark.yaml
+
+# Default colors
+[colors.primary]
+background = '#002221'
+foreground = '#e6f8f8'
+
+# Normal colors
+[colors.normal]
+black = '#002221'
+red = '#ea3431'
+green = '#00b6b6'
+yellow = '#f8b017'
+blue = '#4894fd'
+magenta = '#e01dca'
+cyan = '#1ab2ad'
+white = '#99dddb'
+
+# Bright colors
+[colors.bright]
+black = '#006562'
+red = '#ea3431'
+green = '#00b6b6'
+yellow = '#f8b017'
+blue = '#4894fd'
+magenta = '#e01dca'
+cyan = '#1ab2ad'
+white = '#e6f6f6'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/material_theme.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/material_theme.toml
new file mode 100644
index 0000000..deae20b
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/material_theme.toml
@@ -0,0 +1,28 @@
+# Colors (Material Theme)
+
+# Default colors
+[colors.primary]
+background = '#1e282d'
+foreground = '#c4c7d1'
+
+# Normal colors
+[colors.normal]
+black = '#666666'
+red = '#eb606b'
+green = '#c3e88d'
+yellow = '#f7eb95'
+blue = '#80cbc4'
+magenta = '#ff2f90'
+cyan = '#aeddff'
+white = '#ffffff'
+
+# Bright colors
+[colors.bright]
+black = '#ff262b'
+red = '#eb606b'
+green = '#c3e88d'
+yellow = '#f7eb95'
+blue = '#7dc6bf'
+magenta = '#6c71c4'
+cyan = '#35434d'
+white = '#ffffff'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/material_theme_mod.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/material_theme_mod.toml
new file mode 100644
index 0000000..782760d
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/material_theme_mod.toml
@@ -0,0 +1,28 @@
+# Colors (Material Theme)
+
+# Default colors
+[colors.primary]
+background = '#1e282d'
+foreground = '#c4c7d1'
+
+# Normal colors
+[colors.normal]
+black = '#666666'
+red = '#eb606b'
+green = '#c3e88d'
+yellow = '#f7eb95'
+blue = '#80cbc4'
+magenta = '#ff2f90'
+cyan = '#aeddff'
+white = '#ffffff'
+
+# Bright colors
+[colors.bright]
+black = '#a1a1a1'
+red = '#eb606b'
+green = '#c3e88d'
+yellow = '#f7eb95'
+blue = '#7dc6bf'
+magenta = '#6c71c4'
+cyan = '#35434d'
+white = '#ffffff'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/meliora.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/meliora.toml
new file mode 100644
index 0000000..8eb702f
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/meliora.toml
@@ -0,0 +1,75 @@
+[colors.primary]
+background = '#1c1917'
+foreground = '#d6d0cd'
+# Bright and dim foreground colors
+dim_foreground = '#d6d0cd'
+bright_foreground = '#d6d0cd'
+
+# Cursor colors
+[colors.cursor]
+text = '#1c1917'
+cursor = '#d6d0cd'
+
+[colors.vi_mode_cursor]
+text = '#1c1917'
+cursor = '#d6d0cd'
+
+# Search colors
+[colors.search]
+matches = { foreground = '#1c1917', background = '#24201e' }
+focused_match = { foreground = '#1c1917', background = '#2a2522' }
+
+[colors.footer_bar]
+foreground = '#1c1917'
+background = '#b8aea8'
+
+# Keyboard regex hints
+[colors.hints]
+start = { foreground = '#1c1917', background = '#c4b392' }
+end = { foreground = '#1c1917', background = '#24201e' }
+
+# Selection colors
+[colors.selection]
+text = '#d6d0cd'
+background = '#2a2522'
+
+# Normal colors
+[colors.normal]
+black = '#2a2421'
+red = '#d49191'
+green = '#b6b696'
+yellow = '#c4b392'
+blue = '#9e96b6'
+magenta = '#b696b1'
+cyan = '#98acc8'
+white = '#ddd9d6'
+
+# Bright colors
+[colors.bright]
+black = '#2e2622'
+red = '#d89393'
+green = '#b9b99b'
+yellow = '#c8b692'
+blue = '#a299b9'
+magenta = '#b997b4'
+cyan = '#9bb0ca'
+white = '#e1dbd9'
+
+# Dim colors
+[colors.dim]
+black = '#2a2421'
+red = '#d18989'
+green = '#727246'
+yellow = '#c1b090'
+blue = '#9b92b3'
+magenta = '#b393ad'
+cyan = '#95a9c5'
+white = '#e3d5ce'
+
+[[colors.indexed_colors]]
+index = 16
+color = '#c4b392'
+
+[[colors.indexed_colors]]
+index = 17
+color = '#ddd9d6'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/miasma.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/miasma.toml
new file mode 100644
index 0000000..23cb410
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/miasma.toml
@@ -0,0 +1,28 @@
+# miasma: https://github.com/xero/miasma.nvim
+
+# Primary colors
+[colors.primary]
+background = "#222222"
+foreground = "#c2c2b0"
+
+# Normal colors
+[colors.normal]
+black = "#222222"
+red = "#685742"
+green = "#5f875f"
+yellow = "#b36d43"
+blue = "#78824b"
+magenta = "#bb7744"
+cyan = "#c9a554"
+white = "#d7c483"
+
+# Bright colors
+[colors.bright]
+black = "#666666"
+red = "#685742"
+green = "#5f875f"
+yellow = "#b36d43"
+blue = "#78824b"
+magenta = "#bb7744"
+cyan = "#c9a554"
+white = "#d7c483"
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/midnight_haze.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/midnight_haze.toml
new file mode 100644
index 0000000..9cb5557
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/midnight_haze.toml
@@ -0,0 +1,29 @@
+# Midnight Haze theme
+# Source https//github.com/hafiz-muhammad/midnight-haze-alacritty-theme
+
+# Default colors
+[colors.primary]
+background = '#0c0c16'
+foreground = '#d8dee9'
+
+# Normal colors
+[colors.normal]
+black = '#2c2c3d'
+red = '#ff6e6e'
+green = '#9ec875'
+yellow = '#ffa759'
+blue = '#70a7d4'
+magenta = '#d291e0'
+cyan = '#96e0e0'
+white = '#d8dee9'
+
+# Bright colors
+[colors.bright]
+black = '#414166'
+red = '#ff8d8d'
+green = '#b3d987'
+yellow = '#ffc57f'
+blue = '#9bb3d3'
+magenta = '#ffa1ff'
+cyan = '#9cd8d8'
+white = '#ffffff'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/monokai.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/monokai.toml
new file mode 100644
index 0000000..45aaafe
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/monokai.toml
@@ -0,0 +1,23 @@
+[colors.primary]
+background = "#272822"
+foreground = "#f8f8f2"
+
+[colors.normal]
+black = "#272822"
+red = "#f92672"
+green = "#a6e22e"
+yellow = "#f4bf75"
+blue = "#66d9ef"
+magenta = "#ae81ff"
+cyan = "#a1efe4"
+white = "#f8f8f2"
+
+[colors.bright]
+black = "#75715e"
+red = "#f92672"
+green = "#a6e22e"
+yellow = "#f4bf75"
+blue = "#66d9ef"
+magenta = "#ae81ff"
+cyan = "#a1efe4"
+white = "#f9f8f5"
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/monokai_charcoal.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/monokai_charcoal.toml
new file mode 100644
index 0000000..c6ae6c6
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/monokai_charcoal.toml
@@ -0,0 +1,28 @@
+# Colours (Monokai Charcoal)
+
+# Default Colours
+[colors.primary]
+background = '#000000'
+foreground = '#FFFFFF'
+
+# Normal Colours
+[colors.normal]
+black = '#1a1a1a'
+red = '#f4005f'
+green = '#98e024'
+yellow = '#fa8419'
+blue = '#9d65ff'
+magenta = '#f4005f'
+cyan = '#58d1eb'
+white = '#c4c5b5'
+
+# Bright Colours
+[colors.bright]
+black = '#625e4c'
+red = '#f4005f'
+green = '#98e024'
+yellow = '#e0d561'
+blue = '#9d65ff'
+magenta = '#f4005f'
+cyan = '#58d1eb'
+white = '#f6f6ef'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/monokai_pro.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/monokai_pro.toml
new file mode 100644
index 0000000..e434900
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/monokai_pro.toml
@@ -0,0 +1,26 @@
+# Default colors
+[colors.primary]
+background = '#2D2A2E'
+foreground = '#fff1f3'
+
+# Normal colors
+[colors.normal]
+black = '#2c2525'
+red = '#fd6883'
+green = '#adda78'
+yellow = '#f9cc6c'
+blue = '#f38d70'
+magenta = '#a8a9eb'
+cyan = '#85dacc'
+white = '#fff1f3'
+
+# Bright colors
+[colors.bright]
+black = '#72696a'
+red = '#fd6883'
+green = '#adda78'
+yellow = '#f9cc6c'
+blue = '#f38d70'
+magenta = '#a8a9eb'
+cyan = '#85dacc'
+white = '#fff1f3'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/moonfly.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/moonfly.toml
new file mode 100644
index 0000000..8fadb90
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/moonfly.toml
@@ -0,0 +1,34 @@
+# Upstream: github.com/bluz71/vim-moonfly-colors
+
+[colors.bright]
+black = "#949494"
+blue = "#74b2ff"
+cyan = "#85dc85"
+green = "#36c692"
+magenta = "#ae81ff"
+red = "#ff5189"
+white = "#e4e4e4"
+yellow = "#c6c684"
+
+[colors.cursor]
+cursor = "#8e8e8e"
+text = "#080808"
+
+[colors.normal]
+black = "#323437"
+blue = "#80a0ff"
+cyan = "#79dac8"
+green = "#8cc85f"
+magenta = "#cf87e8"
+red = "#ff5454"
+white = "#c6c6c6"
+yellow = "#e3c78a"
+
+[colors.primary]
+background = "#080808"
+bright_foreground = "#eeeeee"
+foreground = "#bdbdbd"
+
+[colors.selection]
+background = "#b2ceee"
+text = "#080808"
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/moonlight_ii_vscode.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/moonlight_ii_vscode.toml
new file mode 100644
index 0000000..2991e70
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/moonlight_ii_vscode.toml
@@ -0,0 +1,27 @@
+[colors.primary]
+background = '#1e2030'
+foreground = '#7f85a3'
+
+[colors.cursor]
+text = '#7f85a3'
+cursor = '#808080'
+
+[colors.normal]
+black = '#444a73'
+red = '#ff5370'
+green = '#4fd6be'
+yellow = '#ffc777'
+blue = '#3e68d7'
+magenta = '#fc7b7b'
+cyan = '#86e1fc'
+white = '#d0d0d0'
+
+[colors.bright]
+black = '#828bb8'
+red = '#ff98a4'
+green = '#c3e88d'
+yellow = '#ffc777'
+blue = '#82aaff'
+magenta = '#ff966c'
+cyan = '#b4f9f8'
+white = '#5f8787'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/msx.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/msx.toml
new file mode 100644
index 0000000..d10a124
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/msx.toml
@@ -0,0 +1,41 @@
+# Colors (MSX-like)
+# Notice that MSX used blue as background so [bright] blue and [bright] black
+# are reversed in this theme. Also MSX had only 15 colors (color 0 was
+# transparent) so 'gray' (#CCCCCC) is used two times both as white and
+# bright black.
+
+# Default colors
+[colors.primary]
+background = '#5955E0'
+foreground = '#FFFFFF'
+
+# Normal colors
+[colors.normal]
+# It is 'dark blue' not black
+black = '#5955E0'
+red = '#B95E51'
+green = '#3AA241'
+yellow = '#CCC35E'
+# It is 'black' not blue
+blue = '#000000'
+# It is 'medium red' not magenta
+magenta = '#DB6559'
+# It is 'medium green' not cyan
+cyan = '#3EB849'
+# It is 'gray' not white
+white = '#CCCCCC'
+
+# Bright colors
+[colors.bright]
+# It is 'light blue' not bright black
+black = '#8076F1'
+red = '#FF897D'
+green = '#74D07D'
+yellow = '#DED087'
+# It is 'gray' not bright blue
+blue = '#CCCCCC'
+# It is 'magenta' not bright magenta
+magenta = '#B766B5'
+# It is 'cyan' not bright cyan
+cyan = '#65DBEF'
+white = '#FFFFFF'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/night_owl.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/night_owl.toml
new file mode 100644
index 0000000..f77eebc
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/night_owl.toml
@@ -0,0 +1,54 @@
+# Default colors
+[colors.primary]
+background = "#011627"
+foreground = "#d6deeb"
+
+# Cursor colors
+[colors.cursor]
+text = "CellBackground"
+cursor = "CellForeground"
+
+[colors.vi_mode_cursor]
+text = "CellBackground"
+cursor = "#22da6e"
+
+# Search colors
+[colors.search.matches]
+foreground = "#000000"
+background = "#22da6e"
+
+[colors.search.focused_match]
+foreground = "#ffffff"
+background = "#22da6e"
+
+[colors.footer_bar]
+foreground = "#ffffff"
+background = "#1d3b53"
+
+# Selection colors
+[colors.selection]
+text = "#ffffff"
+background = "#0d486e"
+
+# Normal colors
+[colors.normal]
+black = "#011627"
+red = "#EF5350"
+green = "#22da6e"
+yellow = "#c5e478"
+blue = "#82AAFF"
+magenta = "#C792EA"
+cyan = "#21c7a8"
+white = "#ffffff"
+
+# Bright colors
+[colors.bright]
+black = "#575656"
+red = "#EF5350"
+green = "#22da6e"
+yellow = "#ffeb95"
+blue = "#82AAFF"
+magenta = "#C792EA"
+cyan = "#7fdbca"
+white = "#ffffff"
+
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/night_owlish_light.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/night_owlish_light.toml
new file mode 100644
index 0000000..7aaf7cf
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/night_owlish_light.toml
@@ -0,0 +1,33 @@
+# Colors (Night Owlish Light)
+
+[colors.primary]
+background = '#ffffff'
+foreground = '#403f53'
+
+[colors.normal]
+black = '#011627'
+red = '#d3423e'
+green = '#2aa298'
+yellow = '#daaa01'
+blue = '#4876d6'
+magenta = '#403f53'
+cyan = '#08916a'
+white = '#7a8181'
+
+[colors.bright]
+black = '#7a8181'
+red = '#f76e6e'
+green = '#49d0c5'
+yellow = '#dac26b'
+blue = '#5ca7e4'
+magenta = '#697098'
+cyan = '#00c990'
+white = '#989fb1'
+
+[colors.cursor]
+cursor = '#403f53'
+text = '#fbfbfb'
+
+[colors.selection]
+background = '#f2f2f2'
+text = '#403f53'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/nightfly.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/nightfly.toml
new file mode 100644
index 0000000..f935754
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/nightfly.toml
@@ -0,0 +1,34 @@
+# Source https://github.com/bluz71/vim-nightfly-colors
+
+[colors.bright]
+black = "#7c8f8f"
+blue = "#82aaff"
+cyan = "#7fdbca"
+green = "#21c7a8"
+magenta = "#ae81ff"
+red = "#ff5874"
+white = "#d6deeb"
+yellow = "#ecc48d"
+
+[colors.cursor]
+cursor = "#9ca1aa"
+text = "#080808"
+
+[colors.normal]
+black = "#1d3b53"
+blue = "#82aaff"
+cyan = "#7fdbca"
+green = "#a1cd5e"
+magenta = "#c792ea"
+red = "#fc514e"
+white = "#a1aab8"
+yellow = "#e3d18a"
+
+[colors.primary]
+background = "#011627"
+bright_foreground = "#eeeeee"
+foreground = "#bdc1c6"
+
+[colors.selection]
+background = "#b2ceee"
+text = "#080808"
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/nightfox.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/nightfox.toml
new file mode 100644
index 0000000..cedb99b
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/nightfox.toml
@@ -0,0 +1,71 @@
+# Nightfox Alacritty Colors
+## name: nightfox
+## upstream: https://github.com/edeneast/nightfox.nvim/raw/main/extra/nightfox/alacritty.toml
+
+[colors.primary]
+background = "#192330"
+foreground = "#cdcecf"
+dim_foreground = "#aeafb0"
+bright_foreground = "#d6d6d7"
+
+[colors.cursor]
+text = "#cdcecf"
+cursor = "#aeafb0"
+
+[colors.vi_mode_cursor]
+text = "#cdcecf"
+cursor = "#63cdcf"
+
+[colors.search.matches]
+foreground = "#cdcecf"
+background = "#3c5372"
+
+[colors.search.focused_match]
+foreground = "#cdcecf"
+background = "#81b29a"
+
+[colors.footer_bar]
+foreground = "#cdcecf"
+background = "#29394f"
+
+[colors.hints.start]
+foreground = "#cdcecf"
+background = "#f4a261"
+
+[colors.hints.end]
+foreground = "#cdcecf"
+background = "#29394f"
+
+[colors.selection]
+text = "#cdcecf"
+background = "#2b3b51"
+
+[colors.normal]
+black = "#393b44"
+red = "#c94f6d"
+green = "#81b29a"
+yellow = "#dbc074"
+blue = "#719cd6"
+magenta = "#9d79d6"
+cyan = "#63cdcf"
+white = "#dfdfe0"
+
+[colors.bright]
+black = "#575860"
+red = "#d16983"
+green = "#8ebaa4"
+yellow = "#e0c989"
+blue = "#86abdc"
+magenta = "#baa1e2"
+cyan = "#7ad5d6"
+white = "#e4e4e5"
+
+[colors.dim]
+black = "#30323a"
+red = "#ab435d"
+green = "#6e9783"
+yellow = "#baa363"
+blue = "#6085b6"
+magenta = "#8567b6"
+cyan = "#54aeb0"
+white = "#bebebe"
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/noctis_lux.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/noctis_lux.toml
new file mode 100644
index 0000000..eb2479a
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/noctis_lux.toml
@@ -0,0 +1,28 @@
+# Colors (NoctixLux)
+
+# Default colors
+[colors.primary]
+background = '#fef8ec'
+foreground = '#005661'
+
+# Normal colors
+[colors.normal]
+black = '#003b42'
+red = '#e34e1c'
+green = '#00b368'
+yellow = '#f49725'
+blue = '#0094f0'
+magenta = '#ff5792'
+cyan = '#00bdd6'
+white = '#8ca6a6'
+
+# Bright colors
+[colors.bright]
+black = '#004d57'
+red = '#ff4000'
+green = '#00d17a'
+yellow = '#ff8c00'
+blue = '#0fa3ff'
+magenta = '#ff6b9f'
+cyan = '#00cbe6'
+white = '#bbc3c4'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/nord.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/nord.toml
new file mode 100644
index 0000000..01cc0d0
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/nord.toml
@@ -0,0 +1,28 @@
+# Colors (Nord)
+
+# Default colors
+[colors.primary]
+background = '#2E3440'
+foreground = '#D8DEE9'
+
+# Normal colors
+[colors.normal]
+black = '#3B4252'
+red = '#BF616A'
+green = '#A3BE8C'
+yellow = '#EBCB8B'
+blue = '#81A1C1'
+magenta = '#B48EAD'
+cyan = '#88C0D0'
+white = '#E5E9F0'
+
+# Bright colors
+[colors.bright]
+black = '#4C566A'
+red = '#BF616A'
+green = '#A3BE8C'
+yellow = '#EBCB8B'
+blue = '#81A1C1'
+magenta = '#B48EAD'
+cyan = '#8FBCBB'
+white = '#ECEFF4'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/nord_light.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/nord_light.toml
new file mode 100644
index 0000000..84e570c
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/nord_light.toml
@@ -0,0 +1,28 @@
+# Colors (Nord light) theme based on https//github.com/nordtheme/alacritty/issues/28#issuecomment-1422225211
+
+# Default colors
+[colors.primary]
+background = '#ECEFF4'
+foreground = '#81A1C1'
+
+# Normal colors
+[colors.normal]
+black = '#D8DEE9'
+red = '#bf616a'
+green = '#a3be8c'
+yellow = '#D08770'
+blue = '#81A1C1'
+magenta = '#B48EAD'
+cyan = '#88C0D0'
+white = '#4C566A'
+
+# Bright colors
+[colors.bright]
+black = '#D8DEE9'
+red = '#bf616a'
+green = '#a3be8c'
+yellow = '#D08770'
+blue = '#D8DEE9'
+magenta = '#B48EAD'
+cyan = '#8FBCBB'
+white = '#D8DEE9'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/nordfox.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/nordfox.toml
new file mode 100644
index 0000000..7961947
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/nordfox.toml
@@ -0,0 +1,71 @@
+# Nightfox Alacritty Colors
+## name: nordfox
+## upstream: https://github.com/edeneast/nightfox.nvim/raw/main/extra/nordfox/alacritty.toml
+
+[colors.primary]
+background = "#2e3440"
+foreground = "#cdcecf"
+dim_foreground = "#abb1bb"
+bright_foreground = "#c7cdd9"
+
+[colors.cursor]
+text = "#cdcecf"
+cursor = "#abb1bb"
+
+[colors.vi_mode_cursor]
+text = "#cdcecf"
+cursor = "#88c0d0"
+
+[colors.search.matches]
+foreground = "#cdcecf"
+background = "#4f6074"
+
+[colors.search.focused_match]
+foreground = "#cdcecf"
+background = "#a3be8c"
+
+[colors.footer_bar]
+foreground = "#cdcecf"
+background = "#444c5e"
+
+[colors.hints.start]
+foreground = "#cdcecf"
+background = "#c9826b"
+
+[colors.hints.end]
+foreground = "#cdcecf"
+background = "#444c5e"
+
+[colors.selection]
+text = "#cdcecf"
+background = "#3e4a5b"
+
+[colors.normal]
+black = "#3b4252"
+red = "#bf616a"
+green = "#a3be8c"
+yellow = "#ebcb8b"
+blue = "#81a1c1"
+magenta = "#b48ead"
+cyan = "#88c0d0"
+white = "#e5e9f0"
+
+[colors.bright]
+black = "#465780"
+red = "#d06f79"
+green = "#b1d196"
+yellow = "#f0d399"
+blue = "#8cafd2"
+magenta = "#c895bf"
+cyan = "#93ccdc"
+white = "#e7ecf4"
+
+[colors.dim]
+black = "#353a45"
+red = "#a54e56"
+green = "#8aa872"
+yellow = "#d9b263"
+blue = "#668aab"
+magenta = "#9d7495"
+cyan = "#69a7ba"
+white = "#bbc3d4"
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/nordic.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/nordic.toml
new file mode 100644
index 0000000..a72e017
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/nordic.toml
@@ -0,0 +1,29 @@
+# Colors (Nordic)
+
+[colors.primary]
+background = '#242933'
+foreground = '#BBBDAF'
+
+[colors.normal]
+black = '#191C1D'
+red = '#BD6062'
+green = '#A3D6A9'
+yellow = '#F0DFAF'
+blue = '#8FB4D8'
+magenta = '#C7A9D9'
+cyan = '#B6D7A8'
+white = '#BDC5BD'
+
+[colors.bright]
+black = '#727C7C'
+red = '#D18FAF'
+green = '#B7CEB0'
+yellow = '#BCBCBC'
+blue = '#E0CF9F'
+magenta = '#C7A9D9'
+cyan = '#BBDA97'
+white = '#BDC5BD'
+
+[colors.selection]
+text = '#000000'
+background = '#F0DFAF'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/oceanic_next.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/oceanic_next.toml
new file mode 100644
index 0000000..9268425
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/oceanic_next.toml
@@ -0,0 +1,28 @@
+# Colors (Oceanic Next)
+
+# Default colors
+[colors.primary]
+background = '#1b2b34'
+foreground = '#d8dee9'
+
+# Normal colors
+[colors.normal]
+black = '#29414f'
+red = '#ec5f67'
+green = '#99c794'
+yellow = '#fac863'
+blue = '#6699cc'
+magenta = '#c594c5'
+cyan = '#5fb3b3'
+white = '#65737e'
+
+# Bright colors
+[colors.bright]
+black = '#405860'
+red = '#ec5f67'
+green = '#99c794'
+yellow = '#fac863'
+blue = '#6699cc'
+magenta = '#c594c5'
+cyan = '#5fb3b3'
+white = '#adb5c0'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/omni.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/omni.toml
new file mode 100644
index 0000000..ed006d1
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/omni.toml
@@ -0,0 +1,37 @@
+[colors.primary]
+background = '#191622'
+foreground = '#e1e1e6'
+
+[colors.cursor]
+text = '#191622'
+cursor = '#f8f8f2'
+
+[colors.normal]
+black = '#000000'
+red = '#ff5555'
+green = '#50fa7b'
+yellow = '#effa78'
+blue = '#bd93f9'
+magenta = '#ff79c6'
+cyan = '#8d79ba'
+white = '#bfbfbf'
+
+[colors.bright]
+black = '#4d4d4d'
+red = '#ff6e67'
+green = '#5af78e'
+yellow = '#eaf08d'
+blue = '#caa9fa'
+magenta = '#ff92d0'
+cyan = '#aa91e3'
+white = '#e6e6e6'
+
+[colors.dim]
+black = '#000000'
+red = '#a90000'
+green = '#049f2b'
+yellow = '#a3b106'
+blue = '#530aba'
+magenta = '#bb006b'
+cyan = '#433364'
+white = '#5f5f5f'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/one_dark.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/one_dark.toml
new file mode 100644
index 0000000..b2de35e
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/one_dark.toml
@@ -0,0 +1,28 @@
+# Colors (One Dark)
+
+# Default colors
+[colors.primary]
+background = '#282c34'
+foreground = '#abb2bf'
+
+# Normal colors
+[colors.normal]
+black = '#1e2127'
+red = '#e06c75'
+green = '#98c379'
+yellow = '#d19a66'
+blue = '#61afef'
+magenta = '#c678dd'
+cyan = '#56b6c2'
+white = '#abb2bf'
+
+# Bright colors
+[colors.bright]
+black = '#5c6370'
+red = '#e06c75'
+green = '#98c379'
+yellow = '#d19a66'
+blue = '#61afef'
+magenta = '#c678dd'
+cyan = '#56b6c2'
+white = '#ffffff'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/one_light.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/one_light.toml
new file mode 100644
index 0000000..0337917
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/one_light.toml
@@ -0,0 +1,23 @@
+[colors.primary]
+background = '#f8f8f8'
+foreground = '#2a2b33'
+
+[colors.normal]
+black = '#000000'
+red = '#de3d35'
+green = '#3e953a'
+yellow = '#d2b67b'
+blue = '#2f5af3'
+magenta = '#a00095'
+cyan = '#3e953a'
+white = '#bbbbbb'
+
+[colors.bright]
+black = '#000000'
+red = '#de3d35'
+green = '#3e953a'
+yellow = '#d2b67b'
+blue = '#2f5af3'
+magenta = '#a00095'
+cyan = '#3e953a'
+white = '#ffffff'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/oxocarbon.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/oxocarbon.toml
new file mode 100644
index 0000000..cd990c9
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/oxocarbon.toml
@@ -0,0 +1,34 @@
+# Colors (Oxocarbon)
+# Source https://vimcolorschemes.com/nyoom-engineering/oxocarbon.nvim
+
+# Default colors
+[colors.primary]
+background = '#1b1b1b'
+foreground = '#ffffff'
+
+[colors.cursor]
+text = '#161616'
+cursor = '#78a9ff'
+
+# Normal colors
+[colors.normal]
+black = '#161616'
+red = '#ee5396'
+green = '#42be65'
+yellow = '#ff7eb6'
+blue = '#33b1ff'
+magenta = '#be95ff'
+cyan = '#3ddbd9'
+white = '#ffffff'
+
+# Bright colors
+[colors.bright]
+black = '#525252'
+red = '#ee5396'
+green = '#42be65'
+yellow = '#ff7eb6'
+blue = '#33b1ff'
+magenta = '#be95ff'
+cyan = '#3ddbd9'
+white = '#ffffff'
+
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/palenight.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/palenight.toml
new file mode 100644
index 0000000..fb9ccfc
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/palenight.toml
@@ -0,0 +1,29 @@
+# iTerm2 Material Design - Palenight theme for Alacritty
+# Source https//github.com/JonathanSpeek/palenight-iterm2
+
+# Default colors
+[colors.primary]
+background = '#292d3e'
+foreground = '#d0d0d0'
+
+# Normal colors
+[colors.normal]
+black = '#292d3e'
+red = '#f07178'
+green = '#c3e88d'
+yellow = '#ffcb6b'
+blue = '#82aaff'
+magenta = '#c792ea'
+cyan = '#89ddff'
+white = '#d0d0d0'
+
+# Bright colors
+[colors.bright]
+black = '#434758'
+red = '#ff8b92'
+green = '#ddffa7'
+yellow = '#ffe585'
+blue = '#9cc4ff'
+magenta = '#e1acff'
+cyan = '#a3f7ff'
+white = '#ffffff'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/papercolor_dark.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/papercolor_dark.toml
new file mode 100644
index 0000000..a595146
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/papercolor_dark.toml
@@ -0,0 +1,32 @@
+# Colors (PaperColor - Dark)
+
+# Default colors
+[colors.primary]
+background = '#1c1c1c'
+foreground = '#808080'
+
+[colors.cursor]
+text = '#1c1c1c'
+cursor = '#808080'
+
+# Normal colors
+[colors.normal]
+black = '#1c1c1c'
+red = '#af005f'
+green = '#5faf00'
+yellow = '#d7af5f'
+blue = '#5fafd7'
+magenta = '#808080'
+cyan = '#d7875f'
+white = '#d0d0d0'
+
+# Bright colors
+[colors.bright]
+black = '#585858'
+red = '#5faf5f'
+green = '#afd700'
+yellow = '#af87d7'
+blue = '#ffaf00'
+magenta = '#ffaf00'
+cyan = '#00afaf'
+white = '#5f8787'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/papercolor_light.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/papercolor_light.toml
new file mode 100644
index 0000000..bcbec81
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/papercolor_light.toml
@@ -0,0 +1,32 @@
+# Colors (PaperColor - Light)
+
+# Default colors
+[colors.primary]
+background = '#eeeeee'
+foreground = '#444444'
+
+[colors.cursor]
+text = '#eeeeee'
+cursor = '#444444'
+
+# Normal colors
+[colors.normal]
+black = '#eeeeee'
+red = '#af0000'
+green = '#008700'
+yellow = '#5f8700'
+blue = '#0087af'
+magenta = '#878787'
+cyan = '#005f87'
+white = '#444444'
+
+# Bright colors
+[colors.bright]
+black = '#bcbcbc'
+red = '#d70000'
+green = '#d70087'
+yellow = '#8700af'
+blue = '#d75f00'
+magenta = '#d75f00'
+cyan = '#005faf'
+white = '#005f87'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/papertheme.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/papertheme.toml
new file mode 100644
index 0000000..0c192b1
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/papertheme.toml
@@ -0,0 +1,28 @@
+# Colors (Paper Theme)
+
+# Default colors
+[colors.primary]
+background = '#F2EEDE'
+foreground = '#000000'
+
+# Normal colors
+[colors.normal]
+black = '#000000'
+red = '#CC3E28'
+green = '#216609'
+yellow = '#B58900'
+blue = '#1E6FCC'
+magenta = '#5C21A5'
+cyan = '#158C86'
+white = '#AAAAAA'
+
+# Bright colors
+[colors.bright]
+black = '#555555'
+red = '#CC3E28'
+green = '#216609'
+yellow = '#B58900'
+blue = '#1E6FCC'
+magenta = '#5C21A5'
+cyan = '#158C86'
+white = '#AAAAAA'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/pastel_dark.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/pastel_dark.toml
new file mode 100644
index 0000000..a877760
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/pastel_dark.toml
@@ -0,0 +1,33 @@
+# From iTerm2 Pastel Dark theme
+
+# Default colors
+[colors.primary]
+background = '#000000'
+foreground = '#C7C7C7'
+
+# Cursor colors
+[colors.cursor]
+text = '#FFFEFF'
+cursor = '#FFB472'
+
+# Normal colors
+[colors.normal]
+black = '#616161'
+red = '#FF8272'
+green = '#B4FA72'
+yellow = '#FEFDC2'
+blue = '#A5D5FE'
+magenta = '#FF8FFD'
+cyan = '#D0D1FE'
+white = '#F1F1F1'
+
+# Bright colors
+[colors.bright]
+black = '#8E8E8E'
+red = '#FFC4BD'
+green = '#D6FCB9'
+yellow = '#FEFDD5'
+blue = '#C1E3FE'
+magenta = '#FFB1FE'
+cyan = '#E5E6FE'
+white = '#FFFEFF'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/pencil_dark.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/pencil_dark.toml
new file mode 100644
index 0000000..470544c
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/pencil_dark.toml
@@ -0,0 +1,28 @@
+# Colors (Pencil Dark)
+
+# Default Colors
+[colors.primary]
+background = '#212121'
+foreground = '#f1f1f1'
+
+# Normal colors
+[colors.normal]
+black = '#212121'
+red = '#c30771'
+green = '#10a778'
+yellow = '#a89c14'
+blue = '#008ec4'
+magenta = '#523c79'
+cyan = '#20a5ba'
+white = '#e0e0e0'
+
+# Bright colors
+[colors.bright]
+black = '#818181'
+red = '#fb007a'
+green = '#5fd7af'
+yellow = '#f3e430'
+blue = '#20bbfc'
+magenta = '#6855de'
+cyan = '#4fb8cc'
+white = '#f1f1f1'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/pencil_light.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/pencil_light.toml
new file mode 100644
index 0000000..a985b10
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/pencil_light.toml
@@ -0,0 +1,28 @@
+# Colors (Pencil Light)
+
+# Default Colors
+[colors.primary]
+background = '#f1f1f1'
+foreground = '#424242'
+
+# Normal colors
+[colors.normal]
+black = '#212121'
+red = '#c30771'
+green = '#10a778'
+yellow = '#a89c14'
+blue = '#008ec4'
+magenta = '#523c79'
+cyan = '#20a5ba'
+white = '#e0e0e0'
+
+# Bright colors
+[colors.bright]
+black = '#212121'
+red = '#fb007a'
+green = '#5fd7af'
+yellow = '#f3e430'
+blue = '#20bbfc'
+magenta = '#6855de'
+cyan = '#4fb8cc'
+white = '#f1f1f1'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/rainbow.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/rainbow.toml
new file mode 100644
index 0000000..dd7a782
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/rainbow.toml
@@ -0,0 +1,26 @@
+# Default colors
+[colors.primary]
+background = '#192835'
+foreground = '#AADA4F'
+
+# Normal colors
+[colors.normal]
+black = '#5B4375'
+red = '#426bb6'
+green = '#2286b5'
+yellow = '#5ab782'
+blue = '#93ca5b'
+magenta = '#c6c842'
+cyan = '#8a5135'
+white = '#c54646'
+
+# Bright colors
+[colors.bright]
+black = '#5B4375'
+red = '#426bb6'
+green = '#2286b5'
+yellow = '#5ab782'
+blue = '#93ca5b'
+magenta = '#c6c842'
+cyan = '#8a5135'
+white = '#c54646'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/remedy_dark.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/remedy_dark.toml
new file mode 100644
index 0000000..682ec20
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/remedy_dark.toml
@@ -0,0 +1,29 @@
+# Default colors
+[colors.primary]
+background = '#2c2b2a'
+foreground = '#f9e7c4'
+
+dim_foreground = '#685E4A'
+bright_foreground = '#1C1508'
+
+# Normal colors
+[colors.normal]
+black = '#282a2e'
+red = '#a54242'
+green = '#8c9440'
+yellow = '#de935f'
+blue = '#5f819d'
+magenta = '#85678f'
+cyan = '#5e8d87'
+white = '#707880'
+
+# Bright colors
+[colors.bright]
+black = '#373b41'
+red = '#cc6666'
+green = '#b5bd68'
+yellow = '#f0c674'
+blue = '#81a2be'
+magenta = '#b294bb'
+cyan = '#8abeb7'
+white = '#c5c8c6'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/rigel.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/rigel.toml
new file mode 100644
index 0000000..84ab9b9
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/rigel.toml
@@ -0,0 +1,30 @@
+# Rigel theme
+# Source: https://github.com/Rigellute/rigel/blob/master/alacritty.toml
+
+[colors.primary]
+background = '#002635'
+foreground = '#e6e6dc'
+
+[colors.normal]
+black = '#00384d'
+red = '#c43061'
+green = '#7fc06e'
+yellow = '#f08e48'
+blue = '#1c8db2'
+magenta = '#c694ff'
+cyan = '#00cccc'
+white = '#77929e'
+
+[colors.bright]
+black = '#517f8d'
+red = '#ff5a67'
+green = '#9cf087'
+yellow = '#ffcc1b'
+blue = '#7eb2dd'
+magenta = '#fb94ff'
+cyan = '#00ffff'
+white = '#b7cff9'
+
+[colors.cursor]
+text = '#002635'
+cursor = '#ffcc1b'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/rose_pine.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/rose_pine.toml
new file mode 100644
index 0000000..0c5ffc2
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/rose_pine.toml
@@ -0,0 +1,39 @@
+[colors.primary]
+background = '#191724'
+foreground = '#e0def4'
+
+[colors.cursor]
+text = '#e0def4'
+cursor = '#524f67'
+
+[colors.vi_mode_cursor]
+text = '#e0def4'
+cursor = '#524f67'
+
+[colors.selection]
+text = '#e0def4'
+background = '#403d52'
+
+[colors.normal]
+black = '#26233a'
+red = '#eb6f92'
+green = '#31748f'
+yellow = '#f6c177'
+blue = '#9ccfd8'
+magenta = '#c4a7e7'
+cyan = '#ebbcba'
+white = '#e0def4'
+
+[colors.bright]
+black = '#6e6a86'
+red = '#eb6f92'
+green = '#31748f'
+yellow = '#f6c177'
+blue = '#9ccfd8'
+magenta = '#c4a7e7'
+cyan = '#ebbcba'
+white = '#e0def4'
+
+[colors.hints]
+start = {foreground = '#908caa', background = '#1f1d2e' }
+end = { foreground = '#6e6a86', background = '#1f1d2e' }
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/rose_pine_dawn.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/rose_pine_dawn.toml
new file mode 100644
index 0000000..a0ee855
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/rose_pine_dawn.toml
@@ -0,0 +1,39 @@
+[colors.primary]
+background = '#faf4ed'
+foreground = '#575279'
+
+[colors.cursor]
+text = '#575279'
+cursor = '#cecacd'
+
+[colors.vi_mode_cursor]
+text = '#575279'
+cursor = '#cecacd'
+
+[colors.selection]
+text = '#575279'
+background = '#dfdad9'
+
+[colors.normal]
+black = '#f2e9e1'
+red = '#b4637a'
+green = '#286983'
+yellow = '#ea9d34'
+blue = '#56949f'
+magenta = '#907aa9'
+cyan = '#d7827e'
+white = '#575279'
+
+[colors.bright]
+black = '#9893a5'
+red = '#b4637a'
+green = '#286983'
+yellow = '#ea9d34'
+blue = '#56949f'
+magenta = '#907aa9'
+cyan = '#d7827e'
+white = '#575279'
+
+[colors.hints]
+start = { foreground = '#797593', background = '#fffaf3' }
+end = { foreground = '#9893a5', background = '#fffaf3' }
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/rose_pine_moon.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/rose_pine_moon.toml
new file mode 100644
index 0000000..f816e1e
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/rose_pine_moon.toml
@@ -0,0 +1,38 @@
+[colors.primary]
+background = '#232136'
+foreground = '#e0def4'
+
+[colors.cursor]
+text = '#e0def4'
+cursor = '#56526e'
+
+[colors.vi_mode_cursor]
+text = '#e0def4'
+cursor = '#56526e'
+
+[colors.selection]
+text = '#e0def4'
+background = '#44415a'
+[colors.normal]
+black = '#393552'
+red = '#eb6f92'
+green = '#3e8fb0'
+yellow = '#f6c177'
+blue = '#9ccfd8'
+magenta = '#c4a7e7'
+cyan = '#ea9a97'
+white = '#e0def4'
+
+[colors.bright]
+black = '#6e6a86'
+red = '#eb6f92'
+green = '#3e8fb0'
+yellow = '#f6c177'
+blue = '#9ccfd8'
+magenta = '#c4a7e7'
+cyan = '#ea9a97'
+white = '#e0def4'
+
+[colors.hints]
+start = { foreground = '#908caa', background = '#2a273f' }
+end = { foreground = '#6e6a86', background = '#2a273f' }
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/seashells.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/seashells.toml
new file mode 100644
index 0000000..0db2734
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/seashells.toml
@@ -0,0 +1,37 @@
+# Colors (SeaShells)
+# Source https//raw.githubusercontent.com/mbadolato/iTerm2-Color-Schemes/master/schemes/SeaShells.itermcolors
+
+# Default colors
+[colors.primary]
+background = '#061923'
+foreground = '#e5c49e'
+
+[colors.cursor]
+text = '#061822'
+cursor = '#feaf3c'
+
+[colors.selection]
+text = '#ffe9d7'
+background = '#265b75'
+
+# Normal colors
+[colors.normal]
+black = '#1d485f'
+red = '#db662d'
+green = '#008eab'
+yellow = '#feaf3c'
+blue = '#255a62'
+magenta = '#77dbf4'
+cyan = '#5fb1c2'
+white = '#e5c49e'
+
+# Bright colors
+[colors.bright]
+black = '#545d65'
+red = '#dd998a'
+green = '#739da8'
+yellow = '#fedaae'
+blue = '#0bc7e3'
+magenta = '#c6e8f1'
+cyan = '#97b9c0'
+white = '#ffe9d7'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/selenized_dark.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/selenized_dark.toml
new file mode 100644
index 0000000..c2c79af
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/selenized_dark.toml
@@ -0,0 +1,26 @@
+# Colors (Selenized Dark)
+
+[colors.primary]
+background = "#103c48"
+foreground = "#adbcbc"
+
+[colors.normal]
+black = "#184956"
+red = "#fa5750"
+green = "#75b938"
+yellow = "#dbb32d"
+blue = "#4695f7"
+magenta = "#f275be"
+cyan = "#41c7b9"
+white = "#72898f"
+
+[colors.bright]
+black = "#2d5b69"
+red = "#ff665c"
+green = "#84c747"
+yellow = "#ebc13d"
+blue = "#58a3ff"
+magenta = "#ff84cd"
+cyan = "#53d6c7"
+white = "#cad8d9"
+
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/selenized_light.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/selenized_light.toml
new file mode 100644
index 0000000..daa0df0
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/selenized_light.toml
@@ -0,0 +1,25 @@
+# Colors (Selenized Light)
+[colors.primary]
+background = '#fbf3db'
+foreground = '#53676d'
+
+[colors.normal]
+black = '#ece3cc'
+red = '#d2212d'
+green = '#489100'
+yellow = '#ad8900'
+blue = '#0072d4'
+magenta = '#ca4898'
+cyan = '#009c8f'
+white = '#909995'
+
+[colors.bright]
+black = '#d5cdb6'
+red = '#cc1729'
+green = '#428b00'
+yellow = '#a78300'
+blue = '#006dce'
+magenta = '#c44392'
+cyan = '#00978a'
+white = '#3a4d53'
+
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/seoul256-light.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/seoul256-light.toml
new file mode 100644
index 0000000..37880fc
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/seoul256-light.toml
@@ -0,0 +1,71 @@
+# Seoul256 Light Alacritty Colors
+## name: seoul256-light
+## inspired by: https://github.com/junegunn/seoul256.vim
+
+[colors.primary]
+background = "#dadada" # light_bg (253)
+foreground = "#4e4e4e" # light_fg (239)
+dim_foreground = "#616161" # slightly darker than foreground
+bright_foreground = "#3a3a3a" # slightly brighter than foreground
+
+[colors.cursor]
+text = "#dadada" # background
+cursor = "#4e4e4e" # foreground
+
+[colors.vi_mode_cursor]
+text = "#dadada" # background
+cursor = "#007299" # blue (24)
+
+[colors.search.matches]
+foreground = "#ffffff" # white (255)
+background = "#007299" # blue (74)
+
+[colors.search.focused_match]
+foreground = "#ffffff" # white (255)
+background = "#005f87" # darker blue
+
+[colors.footer_bar]
+foreground = "#4e4e4e" # foreground
+background = "#bcbcbc" # light grey (250)
+
+[colors.hints.start]
+foreground = "#4e4e4e" # foreground
+background = "#d7afaf" # light pink (181)
+
+[colors.hints.end]
+foreground = "#4e4e4e" # foreground
+background = "#d0d0d0" # slightly darker than background (252)
+
+[colors.selection]
+text = "#4e4e4e" # foreground
+background = "#bcdede" # light cyan (152)
+
+[colors.normal]
+black = "#4e4e4e" # light_fg (239)
+red = "#af005f" # dark red (125)
+green = "#5f875f" # green (65)
+yellow = "#af5f00" # orange/yellow (130)
+blue = "#007173" # blue (23)
+magenta = "#870087" # magenta (90)
+cyan = "#008787" # cyan (30)
+white = "#e4e4e4" # very light grey (254)
+
+[colors.bright]
+black = "#626262" # grey (241)
+red = "#d70087" # bright red (162)
+green = "#87af87" # bright green (108)
+yellow = "#dfbc72" # bright yellow (179)
+blue = "#5fafd7" # bright blue (74)
+magenta = "#af5fff" # bright magenta (135)
+cyan = "#00afaf" # bright cyan (37)
+white = "#ffffff" # white (231)
+
+[colors.dim]
+black = "#3a3a3a" # darker grey (237)
+red = "#9B1D72" # dim red (89)
+green = "#719872" # dim green (65)
+yellow = "#BE9873" # dim yellow (137)
+blue = "#719899" # dim blue (66)
+magenta = "#9A7599" # dim magenta (96)
+cyan = "#6FBCBD" # dim cyan (73)
+white = "#d0d0d0" # dim white (252)
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/smoooooth.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/smoooooth.toml
new file mode 100644
index 0000000..bdda69f
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/smoooooth.toml
@@ -0,0 +1,33 @@
+# Color theme ported from iTerm 2 Smoooooth
+
+[colors.primary]
+foreground = '#dbdbdb'
+background = '#14191e'
+
+[colors.cursor]
+text = '#000000'
+cursor = '#fefffe'
+
+[colors.selection]
+text = '#000000'
+background = '#b3d7ff'
+
+[colors.normal]
+black = '#14191e'
+red = '#b43c29'
+green = '#00c200'
+yellow = '#c7c400'
+blue = '#2743c7'
+magenta = '#bf3fbd'
+cyan = '#00c5c7'
+white = '#c7c7c7'
+
+[colors.bright]
+black = '#676767'
+red = '#dc7974'
+green = '#57e690'
+yellow = '#ece100'
+blue = '#a6aaf1'
+magenta = '#e07de0'
+cyan = '#5ffdff'
+white = '#feffff'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/snazzy.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/snazzy.toml
new file mode 100644
index 0000000..1d47914
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/snazzy.toml
@@ -0,0 +1,28 @@
+# Colors (Snazzy)
+
+# Default colors
+[colors.primary]
+background = '#282a36'
+foreground = '#eff0eb'
+
+# Normal colors
+[colors.normal]
+black = '#282a36'
+red = '#ff5c57'
+green = '#5af78e'
+yellow = '#f3f99d'
+blue = '#57c7ff'
+magenta = '#ff6ac1'
+cyan = '#9aedfe'
+white = '#f1f1f0'
+
+# Bright colors
+[colors.bright]
+black = '#686868'
+red = '#ff5c57'
+green = '#5af78e'
+yellow = '#f3f99d'
+blue = '#57c7ff'
+magenta = '#ff6ac1'
+cyan = '#9aedfe'
+white = '#f1f1f0'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/solarized_dark.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/solarized_dark.toml
new file mode 100644
index 0000000..dbcce2b
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/solarized_dark.toml
@@ -0,0 +1,28 @@
+# Colors (Solarized Dark)
+
+# Default colors
+[colors.primary]
+background = '#002b36'
+foreground = '#839496'
+
+# Normal colors
+[colors.normal]
+black = '#073642'
+red = '#dc322f'
+green = '#859900'
+yellow = '#b58900'
+blue = '#268bd2'
+magenta = '#d33682'
+cyan = '#2aa198'
+white = '#eee8d5'
+
+# Bright colors
+[colors.bright]
+black = '#002b36'
+red = '#cb4b16'
+green = '#586e75'
+yellow = '#657b83'
+blue = '#839496'
+magenta = '#6c71c4'
+cyan = '#93a1a1'
+white = '#fdf6e3'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/solarized_light.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/solarized_light.toml
new file mode 100644
index 0000000..3f7eb25
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/solarized_light.toml
@@ -0,0 +1,28 @@
+# Colors (Solarized Light)
+
+# Default colors
+[colors.primary]
+background = '#fdf6e3'
+foreground = '#586e75'
+
+# Normal colors
+[colors.normal]
+black = '#073642'
+red = '#dc322f'
+green = '#859900'
+yellow = '#b58900'
+blue = '#268bd2'
+magenta = '#d33682'
+cyan = '#2aa198'
+white = '#eee8d5'
+
+# Bright colors
+[colors.bright]
+black = '#002b36'
+red = '#cb4b16'
+green = '#586e75'
+yellow = '#657b83'
+blue = '#839496'
+magenta = '#6c71c4'
+cyan = '#93a1a1'
+white = '#fdf6e3'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/solarized_osaka.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/solarized_osaka.toml
new file mode 100644
index 0000000..0f25c29
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/solarized_osaka.toml
@@ -0,0 +1,29 @@
+# Colors (Solarized Osaka)
+# Source https://github.com/craftzdog/solarized-osaka.nvim
+
+# Default colors
+[colors.primary]
+background = '#001a1d'
+foreground = '#839496'
+
+# Normal colors
+[colors.normal]
+black = '#073642'
+red = '#dc322f'
+green = '#859900'
+yellow = '#b58900'
+blue = '#268bd2'
+magenta = '#d33682'
+cyan = '#2aa198'
+white = '#eee8d5'
+
+# Bright colors
+[colors.bright]
+black = '#4c4c4c'
+red = '#cb4b16'
+green = '#586e75'
+yellow = '#657b83'
+blue = '#839496'
+magenta = '#6c71c4'
+cyan = '#93a1a1'
+white = '#fdf6e3'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/sonokai.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/sonokai.toml
new file mode 100644
index 0000000..537ca46
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/sonokai.toml
@@ -0,0 +1,33 @@
+# sonokai.toml: Sonokai color scheme for Alacritty.
+
+[colors.primary]
+foreground = "#e2e2e3"
+background = "#2c2e34"
+
+[colors.normal]
+black = "#181819"
+red = "#fc5d7c"
+green = "#9ed072"
+yellow = "#e7c664"
+blue = "#76cce0"
+magenta = "#b39df3"
+cyan = "#f39660"
+white = "#e2e2e3"
+
+[colors.bright]
+black = "#7f8490"
+red = "#fc5d7c"
+green = "#9ed072"
+yellow = "#e7c664"
+blue = "#76cce0"
+magenta = "#b39df3"
+cyan = "#f39660"
+white = "#e2e2e3"
+
+[colors.cursor]
+text = "#2c2e34"
+cursor = "#e2e2e3"
+
+[colors.selection]
+text = "CellForeground"
+background = "#414550"
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/spacegray.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/spacegray.toml
new file mode 100644
index 0000000..3543c83
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/spacegray.toml
@@ -0,0 +1,33 @@
+# Spacegray, from Sublime Text
+# Source https://github.com/SublimeText/Spacegray
+
+# Default colors
+[colors.primary]
+background = '#20242d'
+foreground = '#b3b8c3'
+
+[colors.cursor]
+text = '#b3b8c3'
+cursor = '#b3b8c3'
+
+# Normal colors
+[colors.normal]
+black = '#000000'
+red = '#b04b57'
+green = '#87b379'
+yellow = '#e5c179'
+blue = '#7d8fa4'
+magenta = '#a47996'
+cyan = '#85a7a5'
+white = '#b3b8c3'
+
+# Bright colors
+[colors.bright]
+black = '#000000'
+red = '#b04b57'
+green = '#87b379'
+yellow = '#e5c179'
+blue = '#7d8fa4'
+magenta = '#a47996'
+cyan = '#85a7a5'
+white = '#ffffff'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/synthwave_84.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/synthwave_84.toml
new file mode 100644
index 0000000..89df666
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/synthwave_84.toml
@@ -0,0 +1,23 @@
+[colors.primary]
+foreground = "#ffffff"
+background = "#262335"
+
+[colors.normal]
+black = "#262335"
+red = "#fe4450"
+green = "#72f1b8"
+yellow = "#f3e70f"
+blue = "#03edf9"
+magenta = "#ff7edb"
+cyan = "#03edf9"
+white = "#ffffff"
+
+[colors.bright]
+black = "#614d85"
+red = "#fe4450"
+green = "#72f1b8"
+yellow = "#fede5d"
+blue = "#03edf9"
+magenta = "#ff7edb"
+cyan = "#03edf9"
+white = "#ffffff"
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/taerminal.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/taerminal.toml
new file mode 100644
index 0000000..1ae012a
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/taerminal.toml
@@ -0,0 +1,32 @@
+# Colors (Taerminal)
+
+# Default colors
+[colors.primary]
+background = '#26282a'
+foreground = '#f0f0f0'
+
+[colors.cursor]
+background = '#f0f0f0'
+foreground = '#26282a'
+
+# Normal colors
+[colors.normal]
+black = '#26282a'
+red = '#ff8878'
+green = '#b4fb73'
+yellow = '#fffcb7'
+blue = '#8bbce5'
+magenta = '#ffb2fe'
+cyan = '#a2e1f8'
+white = '#f1f1f1'
+
+# Bright colors
+[colors.bright]
+black = '#6f6f6f'
+red = '#fe978b'
+green = '#d6fcba'
+yellow = '#fffed5'
+blue = '#c2e3ff'
+magenta = '#ffc6ff'
+cyan = '#c0e9f8'
+white = '#ffffff'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/tango_dark.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/tango_dark.toml
new file mode 100644
index 0000000..55541a9
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/tango_dark.toml
@@ -0,0 +1,25 @@
+# GNOME Terminal Tango Dark
+
+[colors.primary]
+background = '#2e3436'
+foreground = '#d3d7cf'
+
+[colors.normal]
+black = '#2e3436'
+red = '#cc0000'
+green = '#4e9a06'
+yellow = '#c4a000'
+blue = '#3465a4'
+magenta = '#75507b'
+cyan = '#06989a'
+white = '#d3d7cf'
+
+[colors.bright]
+black = '#555753'
+red = '#ef2929'
+green = '#8ae234'
+yellow = '#fce94f'
+blue = '#729fcf'
+magenta = '#ad7fa8'
+cyan = '#34e2e2'
+white = '#eeeeec'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/tender.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/tender.toml
new file mode 100644
index 0000000..9e09a06
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/tender.toml
@@ -0,0 +1,26 @@
+# Default colors
+[colors.primary]
+background = '#282828'
+foreground = '#eeeeee'
+
+# Normal colors
+[colors.normal]
+black = '#282828'
+red = '#f43753'
+green = '#c9d05c'
+yellow = '#ffc24b'
+blue = '#b3deef'
+magenta = '#d3b987'
+cyan = '#73cef4'
+white = '#eeeeee'
+
+# Bright colors
+[colors.bright]
+black = '#4c4c4c'
+red = '#f43753'
+green = '#c9d05c'
+yellow = '#ffc24b'
+blue = '#b3deef'
+magenta = '#d3b987'
+cyan = '#73cef4'
+white = '#feffff'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/terafox.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/terafox.toml
new file mode 100644
index 0000000..84b7f6d
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/terafox.toml
@@ -0,0 +1,71 @@
+# Nightfox Alacritty Colors
+## name: terafox
+## upstream: https://github.com/edeneast/nightfox.nvim/raw/main/extra/terafox/alacritty.toml
+
+[colors.primary]
+background = "#152528"
+foreground = "#e6eaea"
+dim_foreground = "#cbd9d8"
+bright_foreground = "#eaeeee"
+
+[colors.cursor]
+text = "#e6eaea"
+cursor = "#cbd9d8"
+
+[colors.vi_mode_cursor]
+text = "#e6eaea"
+cursor = "#a1cdd8"
+
+[colors.search.matches]
+foreground = "#e6eaea"
+background = "#425e5e"
+
+[colors.search.focused_match]
+foreground = "#e6eaea"
+background = "#7aa4a1"
+
+[colors.footer_bar]
+foreground = "#e6eaea"
+background = "#254147"
+
+[colors.hints.start]
+foreground = "#e6eaea"
+background = "#ff8349"
+
+[colors.hints.end]
+foreground = "#e6eaea"
+background = "#254147"
+
+[colors.selection]
+text = "#e6eaea"
+background = "#293e40"
+
+[colors.normal]
+black = "#2f3239"
+red = "#e85c51"
+green = "#7aa4a1"
+yellow = "#fda47f"
+blue = "#5a93aa"
+magenta = "#ad5c7c"
+cyan = "#a1cdd8"
+white = "#ebebeb"
+
+[colors.bright]
+black = "#4e5157"
+red = "#eb746b"
+green = "#8eb2af"
+yellow = "#fdb292"
+blue = "#73a3b7"
+magenta = "#b97490"
+cyan = "#afd4de"
+white = "#eeeeee"
+
+[colors.dim]
+black = "#282a30"
+red = "#c54e45"
+green = "#688b89"
+yellow = "#d78b6c"
+blue = "#4d7d90"
+magenta = "#934e69"
+cyan = "#89aeb8"
+white = "#c8c8c8"
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/terminal_app.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/terminal_app.toml
new file mode 100644
index 0000000..838f7a5
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/terminal_app.toml
@@ -0,0 +1,28 @@
+# Colors (Terminal.app)
+
+# Default colors
+[colors.primary]
+background = '#000000'
+foreground = '#b6b6b6'
+
+# Normal colors
+[colors.normal]
+black = '#000000'
+red = '#990000'
+green = '#00a600'
+yellow = '#999900'
+blue = '#0000b2'
+magenta = '#b200b2'
+cyan = '#00a6b2'
+white = '#bfbfbf'
+
+# Bright colors
+[colors.bright]
+black = '#666666'
+red = '#e50000'
+green = '#00d900'
+yellow = '#e5e500'
+blue = '#0000ff'
+magenta = '#e500e5'
+cyan = '#00e5e5'
+white = '#e5e5e5'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/thelovelace.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/thelovelace.toml
new file mode 100644
index 0000000..461474e
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/thelovelace.toml
@@ -0,0 +1,26 @@
+# Default colors
+[colors.primary]
+background = '#1D1F28'
+foreground = '#FDFDFD'
+
+# Normal colors
+[colors.normal]
+# Bright colors
+black = '#282A36'
+red = '#F37F97'
+green = '#5ADECD'
+yellow = '#F2A272'
+blue = '#8897F4'
+magenta = '#C574DD'
+cyan = '#79E6F3'
+white = '#FDFDFD'
+
+[colors.bright]
+black = '#414458'
+red = '#FF4971'
+green = '#18E3C8'
+yellow = '#EBCB8B'
+blue = '#FF8037'
+magenta = '#556FFF'
+cyan = '#3FDCEE'
+white = '#BEBEC1'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/tokyo_night.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/tokyo_night.toml
new file mode 100644
index 0000000..0642a90
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/tokyo_night.toml
@@ -0,0 +1,29 @@
+# Colors (Tokyo Night)
+# Source https//github.com/zatchheems/tokyo-night-alacritty-theme
+
+# Default colors
+[colors.primary]
+background = '#1a1b26'
+foreground = '#a9b1d6'
+
+# Normal colors
+[colors.normal]
+black = '#32344a'
+red = '#f7768e'
+green = '#9ece6a'
+yellow = '#e0af68'
+blue = '#7aa2f7'
+magenta = '#ad8ee6'
+cyan = '#449dab'
+white = '#787c99'
+
+# Bright colors
+[colors.bright]
+black = '#444b6a'
+red = '#ff7a93'
+green = '#b9f27c'
+yellow = '#ff9e64'
+blue = '#7da6ff'
+magenta = '#bb9af7'
+cyan = '#0db9d7'
+white = '#acb0d0'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/tokyo_night_enhanced.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/tokyo_night_enhanced.toml
new file mode 100644
index 0000000..90ba82b
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/tokyo_night_enhanced.toml
@@ -0,0 +1,30 @@
+[colors.primary]
+background = "#08080b"
+foreground = "#787c99"
+
+[colors.cursor]
+cursor = "#787c99"
+
+[colors.selection]
+text = "CellForeground"
+background = "#515c7e"
+
+[colors.normal]
+black = "#363b54"
+red = "#f7768e"
+green = "#41a6b5"
+yellow = "#e0af68"
+blue = "#7aa2f7"
+magenta = "#bb9af7"
+cyan = "#7dcfff"
+white = "#787c99"
+
+[colors.bright]
+black = "#363b54"
+red = "#f7768e"
+green = "#41a6b5"
+yellow = "#e0af68"
+blue = "#7aa2f7"
+magenta = "#bb9af7"
+cyan = "#7dcfff"
+white = "#787c99"
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/tokyo_night_storm.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/tokyo_night_storm.toml
new file mode 100644
index 0000000..992f1d3
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/tokyo_night_storm.toml
@@ -0,0 +1,29 @@
+# Colors (Tokyo Night Storm variant)
+# Source https//github.com/zatchheems/tokyo-night-alacritty-theme
+
+# Default colors
+[colors.primary]
+background = '#24283b'
+foreground = '#a9b1d6'
+
+# Normal colors
+[colors.normal]
+black = '#32344a'
+red = '#f7768e'
+green = '#9ece6a'
+yellow = '#e0af68'
+blue = '#7aa2f7'
+magenta = '#ad8ee6'
+cyan = '#449dab'
+white = '#9699a8'
+
+# Bright colors
+[colors.bright]
+black = '#444b6a'
+red = '#ff7a93'
+green = '#b9f27c'
+yellow = '#ff9e64'
+blue = '#7da6ff'
+magenta = '#bb9af7'
+cyan = '#0db9d7'
+white = '#acb0d0'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/tomorrow_night.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/tomorrow_night.toml
new file mode 100644
index 0000000..579ebd8
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/tomorrow_night.toml
@@ -0,0 +1,32 @@
+# Colors (Tomorrow Night)
+
+# Default colors
+[colors.primary]
+background = '#1d1f21'
+foreground = '#c5c8c6'
+
+[colors.cursor]
+text = '#1d1f21'
+cursor = '#ffffff'
+
+# Normal colors
+[colors.normal]
+black = '#1d1f21'
+red = '#cc6666'
+green = '#b5bd68'
+yellow = '#e6c547'
+blue = '#81a2be'
+magenta = '#b294bb'
+cyan = '#70c0ba'
+white = '#373b41'
+
+# Bright colors
+[colors.bright]
+black = '#666666'
+red = '#ff3334'
+green = '#9ec400'
+yellow = '#f0c674'
+blue = '#81a2be'
+magenta = '#b77ee0'
+cyan = '#54ced6'
+white = '#282a2e'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/tomorrow_night_bright.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/tomorrow_night_bright.toml
new file mode 100644
index 0000000..9ce62a3
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/tomorrow_night_bright.toml
@@ -0,0 +1,28 @@
+# Colors (Tomorrow Night Bright)
+
+# Default colors
+[colors.primary]
+background = '#000000'
+foreground = '#eaeaea'
+
+# Normal colors
+[colors.normal]
+black = '#000000'
+red = '#d54e53'
+green = '#b9ca4a'
+yellow = '#e6c547'
+blue = '#7aa6da'
+magenta = '#c397d8'
+cyan = '#70c0ba'
+white = '#424242'
+
+# Bright colors
+[colors.bright]
+black = '#666666'
+red = '#ff3334'
+green = '#9ec400'
+yellow = '#e7c547'
+blue = '#7aa6da'
+magenta = '#b77ee0'
+cyan = '#54ced6'
+white = '#2a2a2a'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/ubuntu.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/ubuntu.toml
new file mode 100644
index 0000000..952cc07
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/ubuntu.toml
@@ -0,0 +1,33 @@
+# 0x From the Ubuntu terminal color palette
+
+# 0x Default colors
+[colors.primary]
+background = '#300a24'
+foreground = '#eeeeec'
+
+# 0x Colors the cursor will use if `custom_cursor_colors` is true
+[colors.cursor]
+text = '#bbbbbb'
+cursor = '#b4d5ff'
+
+# 0x Normal colors
+[colors.normal]
+black = '#2e3436'
+red = '#cc0000'
+green = '#4e9a06'
+yellow = '#c4a000'
+blue = '#3465a4'
+magenta = '#75507b'
+cyan = '#06989a'
+white = '#d3d7cf'
+
+# 0x Bright colors
+[colors.bright]
+black = '#555753'
+red = '#ef2929'
+green = '#8ae234'
+yellow = '#fce94f'
+blue = '#729fcf'
+magenta = '#ad7fa8'
+cyan = '#34e2e2'
+white = '#eeeeec'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/vesper.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/vesper.toml
new file mode 100644
index 0000000..dea338c
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/vesper.toml
@@ -0,0 +1,26 @@
+# Colors (Vesper)
+# Source https://github.com/raunofreiberg/vesper
+
+[colors.primary]
+background = '#101010'
+foreground = '#ffffff'
+
+[colors.normal]
+black = '#101010'
+red = '#f5a191'
+green = '#90b99f'
+yellow = '#e6b99d'
+blue = '#aca1cf'
+magenta = '#e29eca'
+cyan = '#ea83a5'
+white = '#a0a0a0'
+
+[colors.bright]
+black = '#7e7e7e'
+red = '#ff8080'
+green = '#99ffe4'
+yellow = '#ffc799'
+blue = '#b9aeda'
+magenta = '#ecaad6'
+cyan = '#f591b2'
+white = '#ffffff'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/vscode.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/vscode.toml
new file mode 100644
index 0000000..6d40ab2
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/vscode.toml
@@ -0,0 +1,23 @@
+[colors.primary]
+foreground = "#cccccc"
+background = "#1e1e1e"
+
+[colors.normal]
+black = "#000000"
+red = "#cd3131"
+green = "#0dbc79"
+yellow = "#e5e510"
+blue = "#2472c8"
+magenta = "#bc3fbc"
+cyan = "#11a8cd"
+white = "#e5e5e5"
+
+[colors.bright]
+black = "#666666"
+red = "#f14c4c"
+green = "#23d18b"
+yellow = "#f5f543"
+blue = "#3b8eea"
+magenta = "#d670d6"
+cyan = "#29b8db"
+white = "#e5e5e5"
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/wombat.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/wombat.toml
new file mode 100644
index 0000000..fb13a54
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/wombat.toml
@@ -0,0 +1,28 @@
+# Colors (Wombat)
+
+# Default colors
+[colors.primary]
+background = '#1f1f1f'
+foreground = '#e5e1d8'
+
+# Normal colors
+[colors.normal]
+black = '#000000'
+red = '#f7786d'
+green = '#bde97c'
+yellow = '#efdfac'
+blue = '#6ebaf8'
+magenta = '#ef88ff'
+cyan = '#90fdf8'
+white = '#e5e1d8'
+
+# Bright colors
+[colors.bright]
+black = '#b4b4b4'
+red = '#f99f92'
+green = '#e3f7a1'
+yellow = '#f2e9bf'
+blue = '#b3d2ff'
+magenta = '#e5bdff'
+cyan = '#c2fefa'
+white = '#ffffff'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/xterm.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/xterm.toml
new file mode 100644
index 0000000..47fd62c
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/xterm.toml
@@ -0,0 +1,28 @@
+# XTerm's default colors
+
+# Default colors
+[colors.primary]
+background = '#000000'
+foreground = '#ffffff'
+
+# Normal colors
+[colors.normal]
+black = '#000000'
+red = '#cd0000'
+green = '#00cd00'
+yellow = '#cdcd00'
+blue = '#0000ee'
+magenta = '#cd00cd'
+cyan = '#00cdcd'
+white = '#e5e5e5'
+
+# Bright colors
+[colors.bright]
+black = '#7f7f7f'
+red = '#ff0000'
+green = '#00ff00'
+yellow = '#ffff00'
+blue = '#5c5cff'
+magenta = '#ff00ff'
+cyan = '#00ffff'
+white = '#ffffff'
diff --git a/dots/alacritty/.config/alacritty/alacritty-theme/themes/zenburn.toml b/dots/alacritty/.config/alacritty/alacritty-theme/themes/zenburn.toml
new file mode 100644
index 0000000..9c6fcd0
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty-theme/themes/zenburn.toml
@@ -0,0 +1,29 @@
+# Colors (Zenburn)
+# Orginally designed by jnurmine for vim.
+
+# Default colors
+[colors.primary]
+background = '#3A3A3A'
+foreground = '#DCDCCC'
+
+# Normal colors
+[colors.normal]
+black = '#1E2320'
+red = '#D78787'
+green = '#60B48A'
+yellow = '#DFAF8F'
+blue = '#506070'
+magenta = '#DC8CC3'
+cyan = '#8CD0D3'
+white = '#DCDCCC'
+
+# Bright colors
+[colors.bright]
+black = '#709080'
+red = '#DCA3A3'
+green = '#C3BF9F'
+yellow = '#F0DFAF'
+blue = '#94BFF3'
+magenta = '#EC93D3'
+cyan = '#93E0E3'
+white = '#FFFFFF'
diff --git a/dots/alacritty/.config/alacritty/alacritty.toml b/dots/alacritty/.config/alacritty/alacritty.toml
new file mode 100644
index 0000000..f742d05
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/alacritty.toml
@@ -0,0 +1,44 @@
+[cursor]
+style = "Block"
+unfocused_hollow = false
+
+[font]
+size = 14.0
+
+[font.glyph_offset]
+x = 0
+y = 0
+
+[font.bold]
+family = "Lekton Nerd Font Mono"
+style = "Bold"
+
+[font.italic]
+family = "Lekton Nerd Font Mono"
+style = "Italic"
+
+[font.normal]
+family = "Lekton Nerd Font Mono"
+style = "Regular"
+
+[font.offset]
+x = 0
+y = 1
+
+[window]
+dynamic_padding = true
+option_as_alt = "Both"
+decorations = "Buttonless"
+opacity = 0.91
+blur = true
+
+[window.padding]
+x = 12
+y = 4
+
+[env]
+TERM = "alacritty-direct"
+
+[general]
+import = ["~/.theme/alacritty.toml"]
+
diff --git a/dots/alacritty/.config/alacritty/theme.toml b/dots/alacritty/.config/alacritty/theme.toml
new file mode 100644
index 0000000..b8631a4
--- /dev/null
+++ b/dots/alacritty/.config/alacritty/theme.toml
@@ -0,0 +1,4 @@
+[general]
+import = [
+ "/tmp/alacritty_theme.toml"
+]
diff --git a/dots/git/.config/git/rootignore b/dots/git/.config/git/rootignore
new file mode 100644
index 0000000..136db89
--- /dev/null
+++ b/dots/git/.config/git/rootignore
@@ -0,0 +1,7 @@
+.classpath
+.factorypath
+.project
+.settings
+.idea
+.cache
+.vscode
diff --git a/dots/git/.gitconfig.j2 b/dots/git/.gitconfig.j2
new file mode 100644
index 0000000..015ad96
--- /dev/null
+++ b/dots/git/.gitconfig.j2
@@ -0,0 +1,12 @@
+[user]
+ signingkey = {{ pgp.signing }}
+ user = {{ user.name }}
+ email = {{ user.email }}
+[commit]
+ gpgsign = true
+[core]
+ excludesFile = ~/.config/git/rootignore
+[push]
+ autoSetupRemote = true
+[pull]
+ rebase = true
diff --git a/dots/gpg/.gnupg/common.conf b/dots/gpg/.gnupg/common.conf
new file mode 100755
index 0000000..5add401
--- /dev/null
+++ b/dots/gpg/.gnupg/common.conf
@@ -0,0 +1 @@
+use-keyboxd
diff --git a/dots/gpg/.gnupg/gpg-agent.conf b/dots/gpg/.gnupg/gpg-agent.conf
new file mode 100755
index 0000000..3578512
--- /dev/null
+++ b/dots/gpg/.gnupg/gpg-agent.conf
@@ -0,0 +1,2 @@
+pinentry-program /tmp/pinentry
+enable-ssh-support
diff --git a/dots/home/.pubkey.j2 b/dots/home/.pubkey.j2
new file mode 100644
index 0000000..e4e3602
--- /dev/null
+++ b/dots/home/.pubkey.j2
@@ -0,0 +1 @@
+{{ pgp.asc }}
diff --git a/dots/home/Documents/pubkey.asc b/dots/home/Documents/pubkey.asc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/dots/home/Documents/pubkey.asc
diff --git a/dots/home/Pictures/pfp/bubblegum.png b/dots/home/Pictures/pfp/bubblegum.png
new file mode 100644
index 0000000..171bc62
--- /dev/null
+++ b/dots/home/Pictures/pfp/bubblegum.png
Binary files differ
diff --git a/dots/home/Pictures/pfp/eejypenguin.png b/dots/home/Pictures/pfp/eejypenguin.png
new file mode 100644
index 0000000..2ae47cb
--- /dev/null
+++ b/dots/home/Pictures/pfp/eejypenguin.png
Binary files differ
diff --git a/dots/home/Pictures/pfp/gus.jpg b/dots/home/Pictures/pfp/gus.jpg
new file mode 100644
index 0000000..8073311
--- /dev/null
+++ b/dots/home/Pictures/pfp/gus.jpg
Binary files differ
diff --git a/dots/home/Pictures/pfp/mefr.png b/dots/home/Pictures/pfp/mefr.png
new file mode 100644
index 0000000..46e6948
--- /dev/null
+++ b/dots/home/Pictures/pfp/mefr.png
Binary files differ
diff --git a/dots/home/Pictures/pfp/shoppingpenguin.png b/dots/home/Pictures/pfp/shoppingpenguin.png
new file mode 100644
index 0000000..02c14ec
--- /dev/null
+++ b/dots/home/Pictures/pfp/shoppingpenguin.png
Binary files differ
diff --git a/dots/home/Pictures/wallpapers/beach.jpg b/dots/home/Pictures/wallpapers/beach.jpg
new file mode 100644
index 0000000..e2e3949
--- /dev/null
+++ b/dots/home/Pictures/wallpapers/beach.jpg
Binary files differ
diff --git a/dots/home/Pictures/wallpapers/flat-books.png b/dots/home/Pictures/wallpapers/flat-books.png
new file mode 100644
index 0000000..3e4cf16
--- /dev/null
+++ b/dots/home/Pictures/wallpapers/flat-books.png
Binary files differ
diff --git a/dots/home/Pictures/wallpapers/ghibli-road.png b/dots/home/Pictures/wallpapers/ghibli-road.png
new file mode 100644
index 0000000..bf7b60d
--- /dev/null
+++ b/dots/home/Pictures/wallpapers/ghibli-road.png
Binary files differ
diff --git a/dots/home/Pictures/wallpapers/penguins-hugging.jpg b/dots/home/Pictures/wallpapers/penguins-hugging.jpg
new file mode 100644
index 0000000..ee21cc5
--- /dev/null
+++ b/dots/home/Pictures/wallpapers/penguins-hugging.jpg
Binary files differ
diff --git a/dots/home/Pictures/wallpapers/rose.png b/dots/home/Pictures/wallpapers/rose.png
new file mode 100644
index 0000000..0b11bcb
--- /dev/null
+++ b/dots/home/Pictures/wallpapers/rose.png
Binary files differ
diff --git a/dots/home/Pictures/wallpapers/snowy-light-trees.jpg b/dots/home/Pictures/wallpapers/snowy-light-trees.jpg
new file mode 100644
index 0000000..c2f6350
--- /dev/null
+++ b/dots/home/Pictures/wallpapers/snowy-light-trees.jpg
Binary files differ
diff --git a/dots/home/Pictures/wallpapers/sunrise-mountains.webp b/dots/home/Pictures/wallpapers/sunrise-mountains.webp
new file mode 100644
index 0000000..c59bd58
--- /dev/null
+++ b/dots/home/Pictures/wallpapers/sunrise-mountains.webp
Binary files differ
diff --git a/dots/home/Pictures/wallpapers/table.png b/dots/home/Pictures/wallpapers/table.png
new file mode 100644
index 0000000..bb86417
--- /dev/null
+++ b/dots/home/Pictures/wallpapers/table.png
Binary files differ
diff --git a/dots/home/Pictures/wallpapers/wall.jpg b/dots/home/Pictures/wallpapers/wall.jpg
new file mode 100644
index 0000000..f9df8f1
--- /dev/null
+++ b/dots/home/Pictures/wallpapers/wall.jpg
Binary files differ
diff --git a/dots/home/scripts/greet.sh b/dots/home/scripts/greet.sh
new file mode 100755
index 0000000..cb2aae5
--- /dev/null
+++ b/dots/home/scripts/greet.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+source log.sh "greet.sh"
+
+pick_greeting() {
+ path="$1"
+ greetings=("$1"/*)
+ greeting_path="${greetings[$RANDOM % ${#greetings[@]}]}"
+ echo "$greeting_path"
+}
+
+GREETINGS_LIST="$XDG_CONFIG_HOME/zsh/greetings"
+if [ ! -d "$GREETINGS_LIST" ]; then
+ log DEBUG "no such file $GREETINGS_LIST"
+ exit 0
+fi
+
+for greetings in $(ls "$GREETINGS_LIST" | sort); do
+ echo
+ log DEBUG "greeting $greetings"
+
+ path="$GREETINGS_LIST/$greetings"
+ if [ ! -d "$path" ]; then
+ log DEBUG "greetings $path is not a directory"
+ continue
+ fi
+
+ greeting=$(pick_greeting "$path")
+ cat "$greeting"
+done
diff --git a/dots/home/scripts/log.sh b/dots/home/scripts/log.sh
new file mode 100755
index 0000000..8895097
--- /dev/null
+++ b/dots/home/scripts/log.sh
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+# usage:
+# > source log.sh <CALLER>
+# > log INFO "hello"
+# > log "this is epic"
+# > log DEBUG "yo"
+
+_LOG_CALLER=$(basename "$1")
+
+log() {
+ LEVEL=$1
+ shift
+
+ case "$LEVEL" in
+ INFO|DEBUG|ERROR)
+ ;;
+ *)
+ set -- "INFO" "$LEVEL" "$@"
+ LEVEL="INFO"
+ ;;
+ esac
+
+ TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
+ MESSAGE="$*"
+
+ if [ "$LEVEL" = "DEBUG" ] && [ -z "$DEBUG" ]; then
+ return
+ fi
+
+ echo "[$TIMESTAMP] [$_LOG_CALLER] [$LEVEL] $MESSAGE"
+}
diff --git a/dots/home/scripts/pinentry.sh b/dots/home/scripts/pinentry.sh
new file mode 100755
index 0000000..f02ee6f
--- /dev/null
+++ b/dots/home/scripts/pinentry.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+source log.sh "pinentry.sh"
+
+#-- <gpg> --
+bin="${HOMEBREW_PREFIX:-"/usr"}/bin"
+case "$PINENTRY_USER_DATA" in
+ *USE_TTY*) pe=$bin/pinentry-tty ;;
+ *USE_CURSES*) pe=$bin/pinentry-curses ;;
+ *USE_QT*) pe=$bin/pinentry-qt ;;
+ *USE_MAC*) pe=$bin/pinentry-mac ;;
+ *USE_GTK2*) pe=$bin/pinentry-gtk-2 ;;
+ *USE_GNOME3*) pe=$bin/pinentry-gnome3 ;;
+ *USE_X11*) pe=$bin/pinentry-x11 ;;
+esac
+
+log DEBUG "$pe"
+
+exec $pe "$@"
+#-- </gpg> --
diff --git a/dots/home/scripts/platform.sh b/dots/home/scripts/platform.sh
new file mode 100755
index 0000000..9449ceb
--- /dev/null
+++ b/dots/home/scripts/platform.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+case "$OSTYPE" in
+ solaris*) echo "solaris" ;;
+ darwin*) echo "osx" ;;
+ linux*) echo "linux" ;;
+ bsd*) echo "bsd" ;;
+ msys*) echo "windows" ;;
+ cygwin*) echo "windows" ;;
+ *) echo "unknown" ;;
+esac
diff --git a/dots/home/scripts/system_name.sh b/dots/home/scripts/system_name.sh
new file mode 100755
index 0000000..2625293
--- /dev/null
+++ b/dots/home/scripts/system_name.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+PLATFORM="${PLATFORM:-`platform.sh`}"
+
+MACHINE="$HOST"
+if [ "$PLATFORM" = "osx" ]; then
+ MACHINE="$(scutil --get ComputerName)"
+elif [ "$PLATFORM" = "linux" ]; then
+ MACHINE="$(cat /proc/sys/kernel/hostname)"
+fi
+
+echo $MACHINE | awk -F\. '{print $1}' \
+ | tr '[:upper:]' '[:lower:]' \
+ | tr ' ' '-'
diff --git a/dots/home/scripts/theme.sh b/dots/home/scripts/theme.sh
new file mode 100755
index 0000000..830f56b
--- /dev/null
+++ b/dots/home/scripts/theme.sh
@@ -0,0 +1,22 @@
+#!/bin/bash
+
+# usage: theme.sh <theme_name>
+
+source log.sh "theme.sh"
+
+THEME="$1"
+log DEBUG "setting theme $THEME"
+
+THEME_SRC="$XDG_CONFIG_HOME/theme"
+THEME_DEST="$HOME/.theme"
+log DEBUG "src $THEME_SRC -> dest $THEME_DEST"
+
+THEME_TEMPL="{{THEME}}"
+
+find -L "$THEME_SRC/" -type f | while read source_file; do
+ destination_file=`echo "$source_file" | sed "s|^$THEME_SRC|$THEME_DEST|g"`
+ mkdir -p `dirname $destination_file`
+ log DEBUG "src $source_file -> dest $destination_file"
+ cat "$source_file" | sed "s|$THEME_TEMPL|$THEME|g" > $destination_file
+done
+
diff --git a/dots/mise/.config/mise/config.toml b/dots/mise/.config/mise/config.toml
new file mode 100644
index 0000000..7d382a3
--- /dev/null
+++ b/dots/mise/.config/mise/config.toml
@@ -0,0 +1,5 @@
+[tools]
+node = "lts"
+python = "3.12"
+deno = "2.3.3"
+java = "21"
diff --git a/dots/nvim/.config/nvim/init.lua b/dots/nvim/.config/nvim/init.lua
new file mode 100644
index 0000000..ae56b98
--- /dev/null
+++ b/dots/nvim/.config/nvim/init.lua
@@ -0,0 +1,9 @@
+-- <leader> --
+vim.g.mapleader = " "
+vim.g.maplocalleader = "\\"
+-- </leader> --
+
+-- <init.config> --
+require("config.lazy")
+require("config.options")
+-- </init.config> --
diff --git a/dots/nvim/.config/nvim/lua/.gitkeep b/dots/nvim/.config/nvim/lua/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/dots/nvim/.config/nvim/lua/.gitkeep
diff --git a/dots/nvim/.config/nvim/lua/config/lazy.lua b/dots/nvim/.config/nvim/lua/config/lazy.lua
new file mode 100644
index 0000000..f5ee74c
--- /dev/null
+++ b/dots/nvim/.config/nvim/lua/config/lazy.lua
@@ -0,0 +1,35 @@
+-- Bootstrap lazy.nvim
+local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
+if not (vim.uv or vim.loop).fs_stat(lazypath) then
+ local lazyrepo = "https://github.com/folke/lazy.nvim.git"
+ local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
+ if vim.v.shell_error ~= 0 then
+ vim.api.nvim_echo({
+ { "Failed to clone lazy.nvim:\n", "ErrorMsg" },
+ { out, "WarningMsg" },
+ { "\nPress any key to exit..." },
+ }, true, {})
+ vim.fn.getchar()
+ os.exit(1)
+ end
+end
+vim.opt.rtp:prepend(lazypath)
+
+-- Make sure to setup `mapleader` and `maplocalleader` before
+-- loading lazy.nvim so that mappings are correct.
+-- This is also a good place to setup other settings (vim.opt)
+vim.g.mapleader = " "
+vim.g.maplocalleader = "\\"
+
+-- Setup lazy.nvim
+require("lazy").setup({
+ spec = {
+ -- import your plugins
+ { import = "plugins" },
+ },
+ -- Configure any other settings here. See the documentation for more details.
+ -- colorscheme that will be used when installing plugins.
+ install = { colorscheme = { "habamax" } },
+ -- automatically check for plugin updates
+ checker = { enabled = true },
+})
diff --git a/dots/nvim/.config/nvim/lua/config/options.lua b/dots/nvim/.config/nvim/lua/config/options.lua
new file mode 100644
index 0000000..01489f0
--- /dev/null
+++ b/dots/nvim/.config/nvim/lua/config/options.lua
@@ -0,0 +1,39 @@
+local options = {
+ cmdheight = 0,
+
+ number = true,
+ relativenumber = true,
+
+ clipboard = "unnamedplus",
+
+ breakindent = true,
+ tabstop = 4,
+ softtabstop = 4,
+ shiftwidth = 4,
+ expandtab = true,
+
+ undofile = true,
+
+ hlsearch = false,
+ ignorecase = true,
+ smartcase = true,
+
+ completeopt = "menuone,noselect",
+
+ timeout = true,
+ timeoutlen = 500,
+
+ foldcolumn = "0",
+ foldlevel = 99,
+ foldlevelstart = 99,
+ foldenable = true,
+
+ spelllang = { "nb", "en" },
+ spellcapcheck = "",
+}
+
+vim.g.spellfile_URL = "https://ftp.nluug.nl/pub/vim/runtime/spell/"
+
+for k, v in pairs(options) do
+ vim.opt[k] = v
+end
diff --git a/dots/nvim/.config/nvim/lua/plugins/comment.lua b/dots/nvim/.config/nvim/lua/plugins/comment.lua
new file mode 100644
index 0000000..fe9adbe
--- /dev/null
+++ b/dots/nvim/.config/nvim/lua/plugins/comment.lua
@@ -0,0 +1,6 @@
+return {
+ "numToStr/Comment.nvim",
+ opts = {},
+ lazy = false,
+}
+
diff --git a/dots/nvim/.config/nvim/lua/plugins/lualine.lua b/dots/nvim/.config/nvim/lua/plugins/lualine.lua
new file mode 100644
index 0000000..a5c341d
--- /dev/null
+++ b/dots/nvim/.config/nvim/lua/plugins/lualine.lua
@@ -0,0 +1,34 @@
+return {
+ {
+ 'nvim-lualine/lualine.nvim',
+ event = 'VeryLazy',
+ opts = function()
+ return {
+ options = {
+ icons_enabled = true,
+ theme = 'gruvbox',
+ component_separators = { left = '', right = ''},
+ section_separators = { left = '', right = ''},
+ },
+ sections = {
+ lualine_c = {
+ { 'filename', path = 1 },
+ },
+ lualine_y = {
+ {
+ require('tmux-status').tmux_windows,
+ cond = require('tmux-status').show,
+ padding = { left = 1, right = 1 },
+ },
+ }
+ },
+ }
+ end,
+ },
+ {
+ "christopher-francisco/tmux-status.nvim",
+-- lazy = true,
+ opts = {},
+ },
+}
+
diff --git a/dots/nvim/.config/nvim/lua/plugins/telescope.lua b/dots/nvim/.config/nvim/lua/plugins/telescope.lua
new file mode 100644
index 0000000..47b0b36
--- /dev/null
+++ b/dots/nvim/.config/nvim/lua/plugins/telescope.lua
@@ -0,0 +1,25 @@
+return {
+ "nvim-telescope/telescope.nvim",
+ branch = "0.1.x",
+ dependencies = {
+ "nvim-lua/plenary.nvim",
+ {
+ "nvim-telescope/telescope-fzf-native.nvim",
+ build = "make",
+ cond = function()
+ return vim.fn.executable "make" == 1
+ end,
+ },
+ },
+ config = function ()
+ pcall(require("telescope").load_extension, "fzf")
+ end,
+ opt = {
+ pickers = {
+ colorscheme = {
+ enable_preview = true
+ }
+ }
+ },
+}
+
diff --git a/dots/nvim/.config/nvim/lua/plugins/theme.lua b/dots/nvim/.config/nvim/lua/plugins/theme.lua
new file mode 100644
index 0000000..7f53fa8
--- /dev/null
+++ b/dots/nvim/.config/nvim/lua/plugins/theme.lua
@@ -0,0 +1,9 @@
+return {
+ "ellisonleao/gruvbox.nvim",
+ opts = {
+ transparent_mode = true,
+ },
+ init = function()
+ vim.cmd("colorscheme gruvbox")
+ end
+}
diff --git a/dots/nvim/.config/nvim/lua/plugins/whichkey.lua b/dots/nvim/.config/nvim/lua/plugins/whichkey.lua
new file mode 100644
index 0000000..1173e06
--- /dev/null
+++ b/dots/nvim/.config/nvim/lua/plugins/whichkey.lua
@@ -0,0 +1,6 @@
+return {
+ "folke/which-key.nvim",
+ event = "VeryLazy",
+ opts = {},
+}
+
diff --git a/dots/ssh/.ssh/config b/dots/ssh/.ssh/config
new file mode 100644
index 0000000..698b53c
--- /dev/null
+++ b/dots/ssh/.ssh/config
@@ -0,0 +1,16 @@
+Include config.d/*
+
+Host coffee
+ User serve
+ ForwardAgent yes
+ Hostname outbound.liz.coffee
+
+Host coffee-one
+ User serve
+ ForwardAgent yes
+ Hostname outbound-one.liz.coffee
+
+Host coffee-src
+ User liz
+ Hostname src.liz.coffee
+ Port 2222
diff --git a/dots/ssh/.ssh/config.d/.gitkeep b/dots/ssh/.ssh/config.d/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/dots/ssh/.ssh/config.d/.gitkeep
diff --git a/dots/starship/.config/starship.toml b/dots/starship/.config/starship.toml
new file mode 100644
index 0000000..1967fe4
--- /dev/null
+++ b/dots/starship/.config/starship.toml
@@ -0,0 +1,53 @@
+format = """
+${custom.tztime} \
+$username\
+$hostname\
+$directory\
+$git_branch\
+$git_state\
+$git_status\
+$cmd_duration\
+$line_break\
+$character"""
+
+[username]
+show_always = true
+
+[hostname]
+ssh_only = false
+
+[directory]
+style = "blue"
+
+[character]
+success_symbol = "[λ](blue)"
+error_symbol = "[λ](red)"
+vimcmd_symbol = "[λ](green)"
+
+[git_branch]
+format = "[$branch]($style)"
+style = "bright-black"
+
+[git_status]
+format = "[[(*$conflicted$untracked$modified$staged$renamed$deleted)](218) ($ahead_behind$stashed)]($style)"
+style = "cyan"
+conflicted = "​"
+untracked = "​"
+modified = "​"
+staged = "​"
+renamed = "​"
+deleted = "​"
+stashed = "≡"
+
+[git_state]
+format = '\([$state( $progress_current/$progress_total)]($style)\) '
+style = "bright-black"
+
+[cmd_duration]
+format = "[$duration]($style) "
+style = "yellow"
+
+[custom.tztime]
+command = 'date +"%a %b %d %Y %l:%M%p (%Z%z)"'
+when = "true"
+format = '[\[$symbol($output)\]](green)'
diff --git a/dots/theme/.config/theme/alacritty.toml b/dots/theme/.config/theme/alacritty.toml
new file mode 100644
index 0000000..d3c158b
--- /dev/null
+++ b/dots/theme/.config/theme/alacritty.toml
@@ -0,0 +1,4 @@
+[general]
+import = [
+ "~/.config/alacritty/alacritty-theme/themes/{{THEME}}.toml"
+]
diff --git a/dots/tmux/.config/tmux/tmux.conf b/dots/tmux/.config/tmux/tmux.conf
new file mode 100644
index 0000000..d5bc17c
--- /dev/null
+++ b/dots/tmux/.config/tmux/tmux.conf
@@ -0,0 +1,28 @@
+#-- <keybinds> --
+set -g prefix C-s
+
+set-window-option mode-keys vi
+
+unbind r
+bind r source-file ~/.config/tmux/tmux.conf
+
+bind-key h select-pane -L
+bind-key j select-pane -D
+bind-key k select-pane -U
+bind-key l select-pane -R
+#-- </keybinds> --
+
+#-- <plugins> --
+set -g @plugin 'tmux-plugins/tpm'
+set -g @plugin 'tmux-plugins/tmux-sensible'
+#-- </plugins> --
+
+#-- <theme> --
+set -g @plugin 'egel/tmux-gruvbox'
+set -g @tmux-gruvbox 'dark'
+#-- </theme> --
+
+#-- <tpm> --
+# keep at bottom
+run '~/.tmux/plugins/tpm/tpm'
+#-- </tpm> --
diff --git a/dots/tmux/.tmux/plugins/tpm/.gitattributes b/dots/tmux/.tmux/plugins/tpm/.gitattributes
new file mode 100644
index 0000000..80772e4
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/.gitattributes
@@ -0,0 +1,9 @@
+# Force text files to have unix eols, so Windows/Cygwin does not break them
+*.* eol=lf
+
+# These files are unfortunately not recognized as text files so
+# explicitly listing them here
+tpm eol=lf
+bin/* eol=lf
+bindings/* eol=lf
+tests/* eol=lf
diff --git a/dots/tmux/.tmux/plugins/tpm/.gitignore b/dots/tmux/.tmux/plugins/tpm/.gitignore
new file mode 100644
index 0000000..8a94156
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/.gitignore
@@ -0,0 +1,4 @@
+**/.vagrant/
+run_tests
+tests/run_tests_in_isolation
+tests/helpers/helpers.sh
diff --git a/dots/tmux/.tmux/plugins/tpm/.gitmodules b/dots/tmux/.tmux/plugins/tpm/.gitmodules
new file mode 100644
index 0000000..5e44e3c
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "lib/tmux-test"]
+ path = lib/tmux-test
+ url = https://github.com/tmux-plugins/tmux-test.git
diff --git a/dots/tmux/.tmux/plugins/tpm/.travis.yml b/dots/tmux/.tmux/plugins/tpm/.travis.yml
new file mode 100644
index 0000000..ac45d8b
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/.travis.yml
@@ -0,0 +1,19 @@
+# generic packages and tmux
+before_install:
+ - sudo apt-get update
+ - sudo apt-get install -y git-core expect
+ - sudo apt-get install -y python-software-properties software-properties-common
+ - sudo apt-get install -y libevent-dev libncurses-dev
+ - git clone https://github.com/tmux/tmux.git
+ - cd tmux
+ - git checkout 2.0
+ - sh autogen.sh
+ - ./configure && make && sudo make install
+
+install:
+ - git fetch --unshallow --recurse-submodules || git fetch --recurse-submodules
+ # manual `git clone` required for testing `tmux-test` plugin itself
+ - git clone https://github.com/tmux-plugins/tmux-test lib/tmux-test; true
+ - lib/tmux-test/setup
+
+script: ./tests/run_tests_in_isolation
diff --git a/dots/tmux/.tmux/plugins/tpm/CHANGELOG.md b/dots/tmux/.tmux/plugins/tpm/CHANGELOG.md
new file mode 100644
index 0000000..a9ce81e
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/CHANGELOG.md
@@ -0,0 +1,86 @@
+# Changelog
+
+### master
+
+### v3.1.0, 2023-01-03
+- upgrade to new version of `tmux-test`
+- bug: when using `emacs` copy mode, Enter does not quit screen after tpm
+ installation/update. Fix by making `Escape` the key for emacs mode.
+- add a doc with troubleshooting instructions
+- add `.gitattributes` file that forces linefeed characters (classic `\n`) as
+ line endings - helps with misconfigured git on windows/cygwin
+- readme update: announce Cygwin support
+- un-deprecate old plugin definition syntax: `set -g @tpm_plugins`
+- More stuff, check `git log`.
+
+### v3.0.0, 2015-08-03
+- refactor `shared_set_tpm_path_constant` function
+- move all instructions to `docs/` dir
+- add `bin/install_plugins` cli executable script
+- improved test runner function
+- switch to using [tmux-test](https://github.com/tmux-plugins/tmux-test)
+ framework
+- add `bin/update_plugins` cli executable script
+- refactor test `expect` scripts, make them simpler and ensure they properly
+ assert expectations
+- refactor code that sets 'TMUX_PLUGIN_MANAGER_PATH' global env var
+- stop using global variable for 'tpm path'
+- support defining plugins via `set -g @plugin` in sourced files as well
+
+### v2.0.0, 2015-07-07
+- enable overriding default key bindings
+- start using `C-c` to clear screen
+- add uninstall/clean procedure and keybinding (prefix+alt+u) (@chilicuil)
+- add new `set @plugin 'repo'` plugin definition syntax (@chilicuil)
+- revert back to using `-g` flag in new plugin definition syntax
+- permit leading whitespace with new plugin definition syntax (thanks @chilicuil)
+- make sure `TMUX_PLUGIN_MANAGER_PATH` always has trailng slash
+- ensure old/deprecated plugin syntax `set -g @tpm_plugins` works alongside new
+ `set -g @plugin` syntax
+
+### v1.2.2, 2015-02-08
+- set GIT_TERMINAL_PROMPT=0 when doing `git clone`, `pull` or `submodule update`
+ to ensure git does not prompt for username/password in any case
+
+### v1.2.1, 2014-11-21
+- change the way plugin name is expanded. It now uses the http username
+ and password by default, like this: `https://git::@github.com/`. This prevents
+ username and password prompt (and subsequently tmux install hanging) with old
+ git versions. Fixes #7.
+
+### v1.2.0, 2014-11-20
+- refactor tests so they can be used on travis
+- add travis.yml, add travis badge to the readme
+
+### v1.1.0, 2014-11-19
+- if the plugin is not downloaded do not source it
+- remove `PLUGINS.md`, an obsolete list of plugins
+- update readme with instructions about uninstalling plugins
+- tilde char and `$HOME` in `TMUX_SHARED_MANAGER_PATH` couldn't be used because
+ they are just plain strings. Fixing the problem by manually expanding them.
+- bugfix: fragile `*.tmux` file globbing (@majutsushi)
+
+### v1.0.0, 2014-08-05
+- update readme because of github organization change to
+ [tmux-plugins](https://github.com/tmux-plugins)
+- update tests to pass
+- update README to suggest different first plugin
+- update list of plugins in the README
+- remove README 'about' section
+- move key binding to the main file. Delete `key_binding.sh`.
+- rename `display_message` -> `echo_message`
+- installing plugins installs just new plugins. Already installed plugins aren't
+ updated.
+- add 'update plugin' binding and functionality
+- add test for updating a plugin
+
+### v0.0.2, 2014-07-17
+- run all *.tmux plugin files as executables
+- fix all redirects to /dev/null
+- fix bug: TPM shared path is created before sync (cloning plugins from github
+ is done)
+- add test suite running in Vagrant
+- add Tmux version check. `TPM` won't run if Tmux version is less than 1.9.
+
+### v0.0.1, 2014-05-21
+- get TPM up and running
diff --git a/dots/tmux/.tmux/plugins/tpm/HOW_TO_PLUGIN.md b/dots/tmux/.tmux/plugins/tpm/HOW_TO_PLUGIN.md
new file mode 100644
index 0000000..9901619
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/HOW_TO_PLUGIN.md
@@ -0,0 +1,2 @@
+Instructions moved to
+[docs/how_to_create_plugin.md](docs/how_to_create_plugin.md).
diff --git a/dots/tmux/.tmux/plugins/tpm/LICENSE.md b/dots/tmux/.tmux/plugins/tpm/LICENSE.md
new file mode 100644
index 0000000..1222865
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/LICENSE.md
@@ -0,0 +1,20 @@
+MIT license
+Copyright (C) 2014 Bruno Sutic
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
+OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/dots/tmux/.tmux/plugins/tpm/README.md b/dots/tmux/.tmux/plugins/tpm/README.md
new file mode 100644
index 0000000..2371863
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/README.md
@@ -0,0 +1,101 @@
+# Tmux Plugin Manager
+
+[![Build Status](https://travis-ci.org/tmux-plugins/tpm.svg?branch=master)](https://travis-ci.org/tmux-plugins/tpm)
+
+Installs and loads `tmux` plugins.
+
+Tested and working on Linux, OSX, and Cygwin.
+
+See list of plugins [here](https://github.com/tmux-plugins/list).
+
+### Installation
+
+Requirements: `tmux` version 1.9 (or higher), `git`, `bash`.
+
+Clone TPM:
+
+```bash
+git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
+```
+
+Put this at the bottom of `~/.tmux.conf` (`$XDG_CONFIG_HOME/tmux/tmux.conf`
+works too):
+
+```bash
+# List of plugins
+set -g @plugin 'tmux-plugins/tpm'
+set -g @plugin 'tmux-plugins/tmux-sensible'
+
+# Other examples:
+# set -g @plugin 'github_username/plugin_name'
+# set -g @plugin 'github_username/plugin_name#branch'
+# set -g @plugin 'git@github.com:user/plugin'
+# set -g @plugin 'git@bitbucket.com:user/plugin'
+
+# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
+run '~/.tmux/plugins/tpm/tpm'
+```
+
+Reload TMUX environment so TPM is sourced:
+
+```bash
+# type this in terminal if tmux is already running
+tmux source ~/.tmux.conf
+```
+
+That's it!
+
+### Installing plugins
+
+1. Add new plugin to `~/.tmux.conf` with `set -g @plugin '...'`
+2. Press `prefix` + <kbd>I</kbd> (capital i, as in **I**nstall) to fetch the plugin.
+
+You're good to go! The plugin was cloned to `~/.tmux/plugins/` dir and sourced.
+
+### Uninstalling plugins
+
+1. Remove (or comment out) plugin from the list.
+2. Press `prefix` + <kbd>alt</kbd> + <kbd>u</kbd> (lowercase u as in **u**ninstall) to remove the plugin.
+
+All the plugins are installed to `~/.tmux/plugins/` so alternatively you can
+find plugin directory there and remove it.
+
+### Key bindings
+
+`prefix` + <kbd>I</kbd>
+- Installs new plugins from GitHub or any other git repository
+- Refreshes TMUX environment
+
+`prefix` + <kbd>U</kbd>
+- updates plugin(s)
+
+`prefix` + <kbd>alt</kbd> + <kbd>u</kbd>
+- remove/uninstall plugins not on the plugin list
+
+### Docs
+
+- [Help, tpm not working](docs/tpm_not_working.md) - problem solutions
+
+More advanced features and instructions, regular users probably do not need
+this:
+
+- [How to create a plugin](docs/how_to_create_plugin.md). It's easy.
+- [Managing plugins via the command line](docs/managing_plugins_via_cmd_line.md)
+- [Changing plugins install dir](docs/changing_plugins_install_dir.md)
+- [Automatic TPM installation on a new machine](docs/automatic_tpm_installation.md)
+
+### Tests
+
+Tests for this project run on [Travis CI](https://travis-ci.org/tmux-plugins/tpm).
+
+When run locally, [vagrant](https://www.vagrantup.com/) is required.
+Run tests with:
+
+```bash
+# within project directory
+./run_tests
+```
+
+### License
+
+[MIT](LICENSE.md)
diff --git a/dots/tmux/.tmux/plugins/tpm/bin/clean_plugins b/dots/tmux/.tmux/plugins/tpm/bin/clean_plugins
new file mode 100755
index 0000000..12f8730
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/bin/clean_plugins
@@ -0,0 +1,14 @@
+#!/usr/bin/env bash
+
+# Script intended for use via the command line.
+#
+# `.tmux.conf` needs to be set for TPM. Tmux has to be installed on the system,
+# but does not need to be started in order to run this script.
+
+CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+SCRIPTS_DIR="$CURRENT_DIR/../scripts"
+
+main() {
+ "$SCRIPTS_DIR/clean_plugins.sh" # has correct exit code
+}
+main
diff --git a/dots/tmux/.tmux/plugins/tpm/bin/install_plugins b/dots/tmux/.tmux/plugins/tpm/bin/install_plugins
new file mode 100755
index 0000000..c66b15b
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/bin/install_plugins
@@ -0,0 +1,14 @@
+#!/usr/bin/env bash
+
+# Script intended for use via the command line.
+#
+# `.tmux.conf` needs to be set for TPM. Tmux has to be installed on the system,
+# but does not need to be started in order to run this script.
+
+CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+SCRIPTS_DIR="$CURRENT_DIR/../scripts"
+
+main() {
+ "$SCRIPTS_DIR/install_plugins.sh" # has correct exit code
+}
+main
diff --git a/dots/tmux/.tmux/plugins/tpm/bin/update_plugins b/dots/tmux/.tmux/plugins/tpm/bin/update_plugins
new file mode 100755
index 0000000..30a5646
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/bin/update_plugins
@@ -0,0 +1,24 @@
+#!/usr/bin/env bash
+
+# Script intended for use via the command line.
+#
+# `.tmux.conf` needs to be set for TPM. Tmux has to be installed on the system,
+# but does not need to be started in order to run this script.
+
+CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+SCRIPTS_DIR="$CURRENT_DIR/../scripts"
+PROGRAM_NAME="$0"
+
+if [ $# -eq 0 ]; then
+ echo "usage:"
+ echo " $PROGRAM_NAME all update all plugins"
+ echo " $PROGRAM_NAME tmux-foo update plugin 'tmux-foo'"
+ echo " $PROGRAM_NAME tmux-bar tmux-baz update multiple plugins"
+ exit 1
+fi
+
+main() {
+ "$SCRIPTS_DIR/update_plugin.sh" --shell-echo "$*" # has correct exit code
+}
+main "$*"
+
diff --git a/dots/tmux/.tmux/plugins/tpm/bindings/clean_plugins b/dots/tmux/.tmux/plugins/tpm/bindings/clean_plugins
new file mode 100755
index 0000000..9a0d5d7
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/bindings/clean_plugins
@@ -0,0 +1,19 @@
+#!/usr/bin/env bash
+
+# Tmux key-binding script.
+# Scripts intended to be used via the command line are in `bin/` directory.
+
+CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+SCRIPTS_DIR="$CURRENT_DIR/../scripts"
+HELPERS_DIR="$SCRIPTS_DIR/helpers"
+
+source "$HELPERS_DIR/tmux_echo_functions.sh"
+source "$HELPERS_DIR/tmux_utils.sh"
+
+main() {
+ reload_tmux_environment
+ "$SCRIPTS_DIR/clean_plugins.sh" --tmux-echo >/dev/null 2>&1
+ reload_tmux_environment
+ end_message
+}
+main
diff --git a/dots/tmux/.tmux/plugins/tpm/bindings/install_plugins b/dots/tmux/.tmux/plugins/tpm/bindings/install_plugins
new file mode 100755
index 0000000..3ade3c4
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/bindings/install_plugins
@@ -0,0 +1,19 @@
+#!/usr/bin/env bash
+
+# Tmux key-binding script.
+# Scripts intended to be used via the command line are in `bin/` directory.
+
+CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+SCRIPTS_DIR="$CURRENT_DIR/../scripts"
+HELPERS_DIR="$SCRIPTS_DIR/helpers"
+
+source "$HELPERS_DIR/tmux_echo_functions.sh"
+source "$HELPERS_DIR/tmux_utils.sh"
+
+main() {
+ reload_tmux_environment
+ "$SCRIPTS_DIR/install_plugins.sh" --tmux-echo >/dev/null 2>&1
+ reload_tmux_environment
+ end_message
+}
+main
diff --git a/dots/tmux/.tmux/plugins/tpm/bindings/update_plugins b/dots/tmux/.tmux/plugins/tpm/bindings/update_plugins
new file mode 100755
index 0000000..28cc281
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/bindings/update_plugins
@@ -0,0 +1,49 @@
+#!/usr/bin/env bash
+
+# Tmux key-binding script.
+# Scripts intended to be used via the command line are in `bin/` directory.
+
+# This script:
+# - shows a list of installed plugins
+# - starts a prompt to enter the name of the plugin that will be updated
+
+CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+SCRIPTS_DIR="$CURRENT_DIR/../scripts"
+HELPERS_DIR="$SCRIPTS_DIR/helpers"
+
+source "$HELPERS_DIR/plugin_functions.sh"
+source "$HELPERS_DIR/tmux_echo_functions.sh"
+source "$HELPERS_DIR/tmux_utils.sh"
+
+display_plugin_update_list() {
+ local plugins="$(tpm_plugins_list_helper)"
+ tmux_echo "Installed plugins:"
+ tmux_echo ""
+
+ for plugin in $plugins; do
+ # displaying only installed plugins
+ if plugin_already_installed "$plugin"; then
+ local plugin_name="$(plugin_name_helper "$plugin")"
+ tmux_echo " $plugin_name"
+ fi
+ done
+
+ tmux_echo ""
+ tmux_echo "Type plugin name to update it."
+ tmux_echo ""
+ tmux_echo "- \"all\" - updates all plugins"
+ tmux_echo "- ENTER - cancels"
+}
+
+update_plugin_prompt() {
+ tmux command-prompt -p 'plugin update:' " \
+ send-keys C-c; \
+ run-shell '$SCRIPTS_DIR/update_plugin_prompt_handler.sh %1'"
+}
+
+main() {
+ reload_tmux_environment
+ display_plugin_update_list
+ update_plugin_prompt
+}
+main
diff --git a/dots/tmux/.tmux/plugins/tpm/docs/automatic_tpm_installation.md b/dots/tmux/.tmux/plugins/tpm/docs/automatic_tpm_installation.md
new file mode 100644
index 0000000..630573f
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/docs/automatic_tpm_installation.md
@@ -0,0 +1,12 @@
+# Automatic tpm installation
+
+One of the first things we do on a new machine is cloning our dotfiles. Not everything comes with them though, so for example `tpm` most likely won't be installed.
+
+If you want to install `tpm` and plugins automatically when tmux is started, put the following snippet in `.tmux.conf` before the final `run '~/.tmux/plugins/tpm/tpm'`:
+
+```
+if "test ! -d ~/.tmux/plugins/tpm" \
+ "run 'git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm && ~/.tmux/plugins/tpm/bin/install_plugins'"
+```
+
+This useful tip was submitted by @acr4 and narfman0.
diff --git a/dots/tmux/.tmux/plugins/tpm/docs/changing_plugins_install_dir.md b/dots/tmux/.tmux/plugins/tpm/docs/changing_plugins_install_dir.md
new file mode 100644
index 0000000..27de96d
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/docs/changing_plugins_install_dir.md
@@ -0,0 +1,16 @@
+# Changing plugins install dir
+
+By default, TPM installs plugins in a subfolder named `plugins/` inside
+`$XDG_CONFIG_HOME/tmux/` if a `tmux.conf` file was found at that location, or
+inside `~/.tmux/` otherwise.
+
+You can change the install path by putting this in `.tmux.conf`:
+
+ set-environment -g TMUX_PLUGIN_MANAGER_PATH '/some/other/path/'
+
+Tmux plugin manager initialization in `.tmux.conf` should also be updated:
+
+ # initializes TMUX plugin manager in a new path
+ run /some/other/path/tpm/tpm
+
+Please make sure that the `run` line is at the very bottom of `.tmux.conf`.
diff --git a/dots/tmux/.tmux/plugins/tpm/docs/how_to_create_plugin.md b/dots/tmux/.tmux/plugins/tpm/docs/how_to_create_plugin.md
new file mode 100644
index 0000000..f7d9c13
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/docs/how_to_create_plugin.md
@@ -0,0 +1,108 @@
+# How to create Tmux plugins
+
+Creating a new plugin is easy.
+
+For demonstration purposes we'll create a simple plugin that lists all
+installed TPM plugins. Yes, a plugin that lists plugins :) We'll bind that to
+`prefix + T`.
+
+The source code for this example plugin can be found
+[here](https://github.com/tmux-plugins/tmux-example-plugin).
+
+### 1. create a new git project
+
+TPM depends on git for downloading and updating plugins.
+
+To create a new git project:
+
+ $ mkdir tmux_my_plugin
+ $ cd tmux_my_plugin
+ $ git init
+
+### 2. create a `*.tmux` plugin run file
+
+When it sources a plugin, TPM executes all `*.tmux` files in your plugins'
+directory. That's how plugins are run.
+
+Create a plugin run file in plugin directory:
+
+ $ touch my_plugin.tmux
+ $ chmod u+x my_plugin.tmux
+
+You can have more than one `*.tmux` file, and all will get executed. However, usually
+you'll need just one.
+
+### 3. create a plugin key binding
+
+We want the behavior of the plugin to trigger when a user hits `prefix + T`.
+
+Key `T` is chosen because:
+ - it's "kind of" a mnemonic for `TPM`
+ - the key is not used by Tmux natively. Tmux man page, KEY BINDINGS section
+ contains a list of all the bindings Tmux uses. There's plenty of unused keys
+ and we don't want to override any of Tmux default key bindings.
+
+Open the plugin run file in your favorite text editor:
+
+ $ vim my_plugin.tmux
+ # or
+ $ subl my_plugin.tmux
+
+Put the following content in the file:
+
+ #!/usr/bin/env bash
+
+ CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+ tmux bind-key T run-shell "$CURRENT_DIR/scripts/tmux_list_plugins.sh"
+
+As you can see, plugin run file is a simple bash script that sets up the binding.
+
+When pressed, `prefix + T` will execute another shell script:
+`tmux_list_plugins.sh`. That script should be in `scripts/` directory -
+relative to the plugin run file.
+
+
+### 4. listing plugins
+
+Now that we have the binding, let's create a script that's invoked with
+`prefix + T`.
+
+ $ mkdir scripts
+ $ touch scripts/tmux_list_plugins.sh
+ $ chmod u+x scripts/tmux_list_plugins.sh
+
+And here's the script content:
+
+ #!/usr/bin/env bash
+
+ # fetching the directory where plugins are installed
+ plugin_path="$(tmux show-env -g TMUX_PLUGIN_MANAGER_PATH | cut -f2 -d=)"
+
+ # listing installed plugins
+ ls -1 "$plugin_path"
+
+### 5. try it out
+
+To see if this works, execute the plugin run file:
+
+ $ ./my_plugin.tmux
+
+That should set up the key binding. Now hit `prefix + T` and see if it works.
+
+### 6. publish the plugin
+
+When everything is ready, push the plugin to an online git repository,
+preferably GitHub.
+
+Other users can install your plugin by just adding plugin git URL to the
+`@plugin` list in their `.tmux.conf`.
+
+If the plugin is on GitHub, your users will be able to use the shorthand of
+`github_username/repository`.
+
+### Conclusion
+
+Hopefully, that was easy. As you can see, it's mostly shell scripting.
+
+You can use other scripting languages (ruby, python etc) but plain old shell
+is preferred because of portability.
diff --git a/dots/tmux/.tmux/plugins/tpm/docs/managing_plugins_via_cmd_line.md b/dots/tmux/.tmux/plugins/tpm/docs/managing_plugins_via_cmd_line.md
new file mode 100644
index 0000000..7aefd7d
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/docs/managing_plugins_via_cmd_line.md
@@ -0,0 +1,36 @@
+# Managing plugins via the command line
+
+Aside from tmux key bindings, TPM provides shell interface for managing plugins
+via scripts located in [bin/](../bin/) directory.
+
+Tmux does not need to be started in order to run scripts (but it's okay if it
+is). If you [changed tpm install dir](../docs/changing_plugins_install_dir.md)
+in `.tmux.conf` that should work fine too.
+
+Prerequisites:
+
+- tmux installed on the system (doh)
+- `.tmux.conf` set up for TPM
+
+### Installing plugins
+
+As usual, plugins need to be specified in `.tmux.conf`. Run the following
+command to install plugins:
+
+ ~/.tmux/plugins/tpm/bin/install_plugins
+
+### Updating plugins
+
+To update all installed plugins:
+
+ ~/.tmux/plugins/tpm/bin/update_plugins all
+
+or update a single plugin:
+
+ ~/.tmux/plugins/tpm/bin/update_plugins tmux-sensible
+
+### Removing plugins
+
+To remove plugins not on the plugin list:
+
+ ~/.tmux/plugins/tpm/bin/clean_plugins
diff --git a/dots/tmux/.tmux/plugins/tpm/docs/tpm_not_working.md b/dots/tmux/.tmux/plugins/tpm/docs/tpm_not_working.md
new file mode 100644
index 0000000..6680291
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/docs/tpm_not_working.md
@@ -0,0 +1,102 @@
+# Help, tpm not working!
+
+Here's the list of issues users had with `tpm`:
+
+<hr />
+
+> Nothing works. `tpm` key bindings `prefix + I`, `prefix + U` not even
+ defined.
+
+Related [issue #22](https://github.com/tmux-plugins/tpm/issues/22)
+
+- Do you have required `tmux` version to run `tpm`?<br/>
+ Check `tmux` version with `$ tmux -V` command and make sure it's higher or
+ equal to the required version for `tpm` as stated in the readme.
+
+- ZSH tmux plugin might be causing issues.<br/>
+ If you have it installed, try disabling it and see if `tpm` works then.
+
+<hr />
+
+> Help, I'm using custom config file with `tmux -f /path/to/my_tmux.conf`
+to start Tmux and for some reason plugins aren't loaded!?
+
+Related [issue #57](https://github.com/tmux-plugins/tpm/issues/57)
+
+`tpm` has a known issue when using custom config file with `-f` option.
+The solution is to use alternative plugin definition syntax. Here are the steps
+to make it work:
+
+1. remove all `set -g @plugin` lines from tmux config file
+2. in the config file define the plugins in the following way:
+
+ # List of plugins
+ set -g @tpm_plugins ' \
+ tmux-plugins/tpm \
+ tmux-plugins/tmux-sensible \
+ tmux-plugins/tmux-resurrect \
+ '
+
+ # Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
+ run '~/.tmux/plugins/tpm/tpm'
+
+3. Reload TMUX environment so TPM is sourced: `$ tmux source /path/to/my_tmux.conf`
+
+The plugins should now be working.
+
+<hr />
+
+> Weird sequence of characters show up when installing or updating plugins
+
+Related: [issue #25](https://github.com/tmux-plugins/tpm/issues/25)
+
+- This could be caused by [tmuxline.vim](https://github.com/edkolev/tmuxline.vim)
+ plugin. Uninstall it and see if things work.
+
+<hr />
+
+> "failed to connect to server" error when sourcing .tmux.conf
+
+Related: [issue #48](https://github.com/tmux-plugins/tpm/issues/48)
+
+- Make sure `tmux source ~/.tmux.conf` command is ran from inside `tmux`.
+
+<hr />
+
+> tpm not working: '~/.tmux/plugins/tpm/tpm' returned 2 (Windows / Cygwin)
+
+Related: [issue #81](https://github.com/tmux-plugins/tpm/issues/81)
+
+This issue is most likely caused by Windows line endings. For example, if you
+have git's `core.autocrlf` option set to `true`, git will automatically convert
+all the files to Windows line endings which might cause a problem.
+
+The solution is to convert all line ending to Unix newline characters. This
+command handles that for all files under `.tmux/` dir (skips `.git`
+subdirectories):
+
+```bash
+find ~/.tmux -type d -name '.git*' -prune -o -type f -print0 | xargs -0 dos2unix
+```
+
+<hr />
+
+> '~/.tmux/plugins/tpm/tpm' returned 127 (on macOS, w/ tmux installed using brew)
+
+Related: [issue #67](https://github.com/tmux-plugins/tpm/issues/67)
+
+This problem is because tmux's `run-shell` command runs a shell which doesn't read from user configs, thus tmux installed in a brew prefix (e.g. `/usr/local/bin`) will not be found.
+
+The solution is to find your brew prefix
+
+```sh
+> echo "$(brew --prefix)/bin"
+/opt/homebrew/bin
+```
+
+And prepend it to the `PATH` environment variable
+```
+set-environment -g PATH "/opt/homebrew/bin:/bin:/usr/bin"
+```
+
+before any `run-shell`/`run` commands in `~/.tmux.conf`.
diff --git a/dots/tmux/.tmux/plugins/tpm/scripts/check_tmux_version.sh b/dots/tmux/.tmux/plugins/tpm/scripts/check_tmux_version.sh
new file mode 100755
index 0000000..b0aedec
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/scripts/check_tmux_version.sh
@@ -0,0 +1,78 @@
+#!/usr/bin/env bash
+
+VERSION="$1"
+UNSUPPORTED_MSG="$2"
+
+get_tmux_option() {
+ local option=$1
+ local default_value=$2
+ local option_value=$(tmux show-option -gqv "$option")
+ if [ -z "$option_value" ]; then
+ echo "$default_value"
+ else
+ echo "$option_value"
+ fi
+}
+
+# Ensures a message is displayed for 5 seconds in tmux prompt.
+# Does not override the 'display-time' tmux option.
+display_message() {
+ local message="$1"
+
+ # display_duration defaults to 5 seconds, if not passed as an argument
+ if [ "$#" -eq 2 ]; then
+ local display_duration="$2"
+ else
+ local display_duration="5000"
+ fi
+
+ # saves user-set 'display-time' option
+ local saved_display_time=$(get_tmux_option "display-time" "750")
+
+ # sets message display time to 5 seconds
+ tmux set-option -gq display-time "$display_duration"
+
+ # displays message
+ tmux display-message "$message"
+
+ # restores original 'display-time' value
+ tmux set-option -gq display-time "$saved_display_time"
+}
+
+# this is used to get "clean" integer version number. Examples:
+# `tmux 1.9` => `19`
+# `1.9a` => `19`
+get_digits_from_string() {
+ local string="$1"
+ local only_digits="$(echo "$string" | tr -dC '[:digit:]')"
+ echo "$only_digits"
+}
+
+tmux_version_int() {
+ local tmux_version_string=$(tmux -V)
+ echo "$(get_digits_from_string "$tmux_version_string")"
+}
+
+unsupported_version_message() {
+ if [ -n "$UNSUPPORTED_MSG" ]; then
+ echo "$UNSUPPORTED_MSG"
+ else
+ echo "Error, Tmux version unsupported! Please install Tmux version $VERSION or greater!"
+ fi
+}
+
+exit_if_unsupported_version() {
+ local current_version="$1"
+ local supported_version="$2"
+ if [ "$current_version" -lt "$supported_version" ]; then
+ display_message "$(unsupported_version_message)"
+ exit 1
+ fi
+}
+
+main() {
+ local supported_version_int="$(get_digits_from_string "$VERSION")"
+ local current_version_int="$(tmux_version_int)"
+ exit_if_unsupported_version "$current_version_int" "$supported_version_int"
+}
+main
diff --git a/dots/tmux/.tmux/plugins/tpm/scripts/clean_plugins.sh b/dots/tmux/.tmux/plugins/tpm/scripts/clean_plugins.sh
new file mode 100755
index 0000000..a025524
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/scripts/clean_plugins.sh
@@ -0,0 +1,41 @@
+#!/usr/bin/env bash
+
+CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+HELPERS_DIR="$CURRENT_DIR/helpers"
+
+source "$HELPERS_DIR/plugin_functions.sh"
+source "$HELPERS_DIR/utility.sh"
+
+if [ "$1" == "--tmux-echo" ]; then # tmux-specific echo functions
+ source "$HELPERS_DIR/tmux_echo_functions.sh"
+else # shell output functions
+ source "$HELPERS_DIR/shell_echo_functions.sh"
+fi
+
+clean_plugins() {
+ local plugins plugin plugin_directory
+ plugins="$(tpm_plugins_list_helper)"
+
+ for plugin_directory in "$(tpm_path)"/*; do
+ [ -d "${plugin_directory}" ] || continue
+ plugin="$(plugin_name_helper "${plugin_directory}")"
+ case "${plugins}" in
+ *"${plugin}"*) : ;;
+ *)
+ [ "${plugin}" = "tpm" ] && continue
+ echo_ok "Removing \"$plugin\""
+ rm -rf "${plugin_directory}" >/dev/null 2>&1
+ [ -d "${plugin_directory}" ] &&
+ echo_err " \"$plugin\" clean fail" ||
+ echo_ok " \"$plugin\" clean success"
+ ;;
+ esac
+ done
+}
+
+main() {
+ ensure_tpm_path_exists
+ clean_plugins
+ exit_value_helper
+}
+main
diff --git a/dots/tmux/.tmux/plugins/tpm/scripts/helpers/plugin_functions.sh b/dots/tmux/.tmux/plugins/tpm/scripts/helpers/plugin_functions.sh
new file mode 100644
index 0000000..f33d215
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/scripts/helpers/plugin_functions.sh
@@ -0,0 +1,104 @@
+# using @tpm_plugins is now deprecated in favor of using @plugin syntax
+tpm_plugins_variable_name="@tpm_plugins"
+
+# manually expanding tilde char or `$HOME` variable.
+_manual_expansion() {
+ local path="$1"
+ local expanded_tilde="${path/#\~/$HOME}"
+ echo "${expanded_tilde/#\$HOME/$HOME}"
+}
+
+_tpm_path() {
+ local string_path="$(tmux start-server\; show-environment -g TMUX_PLUGIN_MANAGER_PATH | cut -f2 -d=)/"
+ _manual_expansion "$string_path"
+}
+
+_CACHED_TPM_PATH="$(_tpm_path)"
+
+# Get the absolute path to the users configuration file of TMux.
+# This includes a prioritized search on different locations.
+#
+_get_user_tmux_conf() {
+ # Define the different possible locations.
+ xdg_location="${XDG_CONFIG_HOME:-$HOME/.config}/tmux/tmux.conf"
+ default_location="$HOME/.tmux.conf"
+
+ # Search for the correct configuration file by priority.
+ if [ -f "$xdg_location" ]; then
+ echo "$xdg_location"
+
+ else
+ echo "$default_location"
+ fi
+}
+
+_tmux_conf_contents() {
+ user_config=$(_get_user_tmux_conf)
+ cat /etc/tmux.conf "$user_config" 2>/dev/null
+ if [ "$1" == "full" ]; then # also output content from sourced files
+ local file
+ for file in $(_sourced_files); do
+ cat $(_manual_expansion "$file") 2>/dev/null
+ done
+ fi
+}
+
+# return files sourced from tmux config files
+_sourced_files() {
+ _tmux_conf_contents |
+ sed -E -n -e "s/^[[:space:]]*source(-file)?[[:space:]]+(-q+[[:space:]]+)?['\"]?([^'\"]+)['\"]?/\3/p"
+}
+
+# Want to be able to abort in certain cases
+trap "exit 1" TERM
+export TOP_PID=$$
+
+_fatal_error_abort() {
+ echo >&2 "Aborting."
+ kill -s TERM $TOP_PID
+}
+
+# PUBLIC FUNCTIONS BELOW
+
+tpm_path() {
+ if [ "$_CACHED_TPM_PATH" == "/" ]; then
+ echo >&2 "FATAL: Tmux Plugin Manager not configured in tmux.conf"
+ _fatal_error_abort
+ fi
+ echo "$_CACHED_TPM_PATH"
+}
+
+tpm_plugins_list_helper() {
+ # lists plugins from @tpm_plugins option
+ echo "$(tmux start-server\; show-option -gqv "$tpm_plugins_variable_name")"
+
+ # read set -g @plugin "tmux-plugins/tmux-example-plugin" entries
+ _tmux_conf_contents "full" |
+ awk '/^[ \t]*set(-option)? +-g +@plugin/ { gsub(/'\''/,""); gsub(/'\"'/,""); print $4 }'
+}
+
+# Allowed plugin name formats:
+# 1. "git://github.com/user/plugin_name.git"
+# 2. "user/plugin_name"
+plugin_name_helper() {
+ local plugin="$1"
+ # get only the part after the last slash, e.g. "plugin_name.git"
+ local plugin_basename="$(basename "$plugin")"
+ # remove ".git" extension (if it exists) to get only "plugin_name"
+ local plugin_name="${plugin_basename%.git}"
+ echo "$plugin_name"
+}
+
+plugin_path_helper() {
+ local plugin="$1"
+ local plugin_name="$(plugin_name_helper "$plugin")"
+ echo "$(tpm_path)${plugin_name}/"
+}
+
+plugin_already_installed() {
+ local plugin="$1"
+ local plugin_path="$(plugin_path_helper "$plugin")"
+ [ -d "$plugin_path" ] &&
+ cd "$plugin_path" &&
+ git remote >/dev/null 2>&1
+}
diff --git a/dots/tmux/.tmux/plugins/tpm/scripts/helpers/shell_echo_functions.sh b/dots/tmux/.tmux/plugins/tpm/scripts/helpers/shell_echo_functions.sh
new file mode 100644
index 0000000..ecaa37e
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/scripts/helpers/shell_echo_functions.sh
@@ -0,0 +1,7 @@
+echo_ok() {
+ echo "$*"
+}
+
+echo_err() {
+ fail_helper "$*"
+}
diff --git a/dots/tmux/.tmux/plugins/tpm/scripts/helpers/tmux_echo_functions.sh b/dots/tmux/.tmux/plugins/tpm/scripts/helpers/tmux_echo_functions.sh
new file mode 100644
index 0000000..7a6ef0a
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/scripts/helpers/tmux_echo_functions.sh
@@ -0,0 +1,28 @@
+_has_emacs_mode_keys() {
+ $(tmux show -gw mode-keys | grep -q emacs)
+}
+
+tmux_echo() {
+ local message="$1"
+ tmux run-shell "echo '$message'"
+}
+
+echo_ok() {
+ tmux_echo "$*"
+}
+
+echo_err() {
+ tmux_echo "$*"
+}
+
+end_message() {
+ if _has_emacs_mode_keys; then
+ local continue_key="ESCAPE"
+ else
+ local continue_key="ENTER"
+ fi
+ tmux_echo ""
+ tmux_echo "TMUX environment reloaded."
+ tmux_echo ""
+ tmux_echo "Done, press $continue_key to continue."
+}
diff --git a/dots/tmux/.tmux/plugins/tpm/scripts/helpers/tmux_utils.sh b/dots/tmux/.tmux/plugins/tpm/scripts/helpers/tmux_utils.sh
new file mode 100644
index 0000000..238952d
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/scripts/helpers/tmux_utils.sh
@@ -0,0 +1,6 @@
+HELPERS_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+source "$HELPERS_DIR/plugin_functions.sh"
+
+reload_tmux_environment() {
+ tmux source-file $(_get_user_tmux_conf) >/dev/null 2>&1
+}
diff --git a/dots/tmux/.tmux/plugins/tpm/scripts/helpers/utility.sh b/dots/tmux/.tmux/plugins/tpm/scripts/helpers/utility.sh
new file mode 100644
index 0000000..de6eb35
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/scripts/helpers/utility.sh
@@ -0,0 +1,17 @@
+ensure_tpm_path_exists() {
+ mkdir -p "$(tpm_path)"
+}
+
+fail_helper() {
+ local message="$1"
+ echo "$message" >&2
+ FAIL="true"
+}
+
+exit_value_helper() {
+ if [ "$FAIL" == "true" ]; then
+ exit 1
+ else
+ exit 0
+ fi
+}
diff --git a/dots/tmux/.tmux/plugins/tpm/scripts/install_plugins.sh b/dots/tmux/.tmux/plugins/tpm/scripts/install_plugins.sh
new file mode 100755
index 0000000..e2450ac
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/scripts/install_plugins.sh
@@ -0,0 +1,75 @@
+#!/usr/bin/env bash
+
+CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+HELPERS_DIR="$CURRENT_DIR/helpers"
+
+source "$HELPERS_DIR/plugin_functions.sh"
+source "$HELPERS_DIR/utility.sh"
+
+if [ "$1" == "--tmux-echo" ]; then # tmux-specific echo functions
+ source "$HELPERS_DIR/tmux_echo_functions.sh"
+else # shell output functions
+ source "$HELPERS_DIR/shell_echo_functions.sh"
+fi
+
+clone() {
+ local plugin="$1"
+ local branch="$2"
+ if [ -n "$branch" ]; then
+ cd "$(tpm_path)" &&
+ GIT_TERMINAL_PROMPT=0 git clone -b "$branch" --single-branch --recursive "$plugin" >/dev/null 2>&1
+ else
+ cd "$(tpm_path)" &&
+ GIT_TERMINAL_PROMPT=0 git clone --single-branch --recursive "$plugin" >/dev/null 2>&1
+ fi
+}
+
+# tries cloning:
+# 1. plugin name directly - works if it's a valid git url
+# 2. expands the plugin name to point to a GitHub repo and tries cloning again
+clone_plugin() {
+ local plugin="$1"
+ local branch="$2"
+ clone "$plugin" "$branch" ||
+ clone "https://git::@github.com/$plugin" "$branch"
+}
+
+# clone plugin and produce output
+install_plugin() {
+ local plugin="$1"
+ local branch="$2"
+ local plugin_name="$(plugin_name_helper "$plugin")"
+
+ if plugin_already_installed "$plugin"; then
+ echo_ok "Already installed \"$plugin_name\""
+ else
+ echo_ok "Installing \"$plugin_name\""
+ clone_plugin "$plugin" "$branch" &&
+ echo_ok " \"$plugin_name\" download success" ||
+ echo_err " \"$plugin_name\" download fail"
+ fi
+}
+
+install_plugins() {
+ local plugins="$(tpm_plugins_list_helper)"
+ for plugin in $plugins; do
+ IFS='#' read -ra plugin <<< "$plugin"
+ install_plugin "${plugin[0]}" "${plugin[1]}"
+ done
+}
+
+verify_tpm_path_permissions() {
+ local path="$(tpm_path)"
+ # check the write permission flag for all users to ensure
+ # that we have proper access
+ [ -w "$path" ] ||
+ echo_err "$path is not writable!"
+}
+
+main() {
+ ensure_tpm_path_exists
+ verify_tpm_path_permissions
+ install_plugins
+ exit_value_helper
+}
+main
diff --git a/dots/tmux/.tmux/plugins/tpm/scripts/source_plugins.sh b/dots/tmux/.tmux/plugins/tpm/scripts/source_plugins.sh
new file mode 100755
index 0000000..6381d54
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/scripts/source_plugins.sh
@@ -0,0 +1,42 @@
+#!/usr/bin/env bash
+
+CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+HELPERS_DIR="$CURRENT_DIR/helpers"
+
+source "$HELPERS_DIR/plugin_functions.sh"
+
+plugin_dir_exists() {
+ [ -d "$1" ]
+}
+
+# Runs all *.tmux files from the plugin directory.
+# Files are ran as executables.
+# No errors if the plugin dir does not exist.
+silently_source_all_tmux_files() {
+ local plugin_path="$1"
+ local plugin_tmux_files="$plugin_path*.tmux"
+ if plugin_dir_exists "$plugin_path"; then
+ for tmux_file in $plugin_tmux_files; do
+ # if the glob didn't find any files this will be the
+ # unexpanded glob which obviously doesn't exist
+ [ -f "$tmux_file" ] || continue
+ # runs *.tmux file as an executable
+ $tmux_file >/dev/null 2>&1
+ done
+ fi
+}
+
+source_plugins() {
+ local plugin plugin_path
+ local plugins="$(tpm_plugins_list_helper)"
+ for plugin in $plugins; do
+ IFS='#' read -ra plugin <<< "$plugin"
+ plugin_path="$(plugin_path_helper "${plugin[0]}")"
+ silently_source_all_tmux_files "$plugin_path"
+ done
+}
+
+main() {
+ source_plugins
+}
+main
diff --git a/dots/tmux/.tmux/plugins/tpm/scripts/update_plugin.sh b/dots/tmux/.tmux/plugins/tpm/scripts/update_plugin.sh
new file mode 100755
index 0000000..e533664
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/scripts/update_plugin.sh
@@ -0,0 +1,78 @@
+#!/usr/bin/env bash
+
+# this script handles core logic of updating plugins
+
+CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+HELPERS_DIR="$CURRENT_DIR/helpers"
+
+source "$HELPERS_DIR/plugin_functions.sh"
+source "$HELPERS_DIR/utility.sh"
+
+if [ "$1" == "--tmux-echo" ]; then # tmux-specific echo functions
+ source "$HELPERS_DIR/tmux_echo_functions.sh"
+else # shell output functions
+ source "$HELPERS_DIR/shell_echo_functions.sh"
+fi
+
+# from now on ignore first script argument
+shift
+
+pull_changes() {
+ local plugin="$1"
+ local plugin_path="$(plugin_path_helper "$plugin")"
+ cd "$plugin_path" &&
+ GIT_TERMINAL_PROMPT=0 git pull &&
+ GIT_TERMINAL_PROMPT=0 git submodule update --init --recursive
+}
+
+update() {
+ local plugin="$1" output
+ output=$(pull_changes "$plugin" 2>&1)
+ if (( $? == 0 )); then
+ echo_ok " \"$plugin\" update success"
+ echo_ok "$(echo "$output" | sed -e 's/^/ | /')"
+ else
+ echo_err " \"$plugin\" update fail"
+ echo_err "$(echo "$output" | sed -e 's/^/ | /')"
+ fi
+}
+
+update_all() {
+ echo_ok "Updating all plugins!"
+ echo_ok ""
+ local plugins="$(tpm_plugins_list_helper)"
+ for plugin in $plugins; do
+ IFS='#' read -ra plugin <<< "$plugin"
+ local plugin_name="$(plugin_name_helper "${plugin[0]}")"
+ # updating only installed plugins
+ if plugin_already_installed "$plugin_name"; then
+ update "$plugin_name" &
+ fi
+ done
+ wait
+}
+
+update_plugins() {
+ local plugins="$*"
+ for plugin in $plugins; do
+ IFS='#' read -ra plugin <<< "$plugin"
+ local plugin_name="$(plugin_name_helper "${plugin[0]}")"
+ if plugin_already_installed "$plugin_name"; then
+ update "$plugin_name" &
+ else
+ echo_err "$plugin_name not installed!" &
+ fi
+ done
+ wait
+}
+
+main() {
+ ensure_tpm_path_exists
+ if [ "$1" == "all" ]; then
+ update_all
+ else
+ update_plugins "$*"
+ fi
+ exit_value_helper
+}
+main "$*"
diff --git a/dots/tmux/.tmux/plugins/tpm/scripts/update_plugin_prompt_handler.sh b/dots/tmux/.tmux/plugins/tpm/scripts/update_plugin_prompt_handler.sh
new file mode 100755
index 0000000..5e1f7d9
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/scripts/update_plugin_prompt_handler.sh
@@ -0,0 +1,18 @@
+#!/usr/bin/env bash
+
+CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+HELPERS_DIR="$CURRENT_DIR/helpers"
+
+if [ $# -eq 0 ]; then
+ exit 0
+fi
+
+source "$HELPERS_DIR/tmux_echo_functions.sh"
+source "$HELPERS_DIR/tmux_utils.sh"
+
+main() {
+ "$CURRENT_DIR/update_plugin.sh" --tmux-echo "$*"
+ reload_tmux_environment
+ end_message
+}
+main "$*"
diff --git a/dots/tmux/.tmux/plugins/tpm/scripts/variables.sh b/dots/tmux/.tmux/plugins/tpm/scripts/variables.sh
new file mode 100644
index 0000000..5601a86
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/scripts/variables.sh
@@ -0,0 +1,13 @@
+install_key_option="@tpm-install"
+default_install_key="I"
+
+update_key_option="@tpm-update"
+default_update_key="U"
+
+clean_key_option="@tpm-clean"
+default_clean_key="M-u"
+
+SUPPORTED_TMUX_VERSION="1.9"
+
+DEFAULT_TPM_ENV_VAR_NAME="TMUX_PLUGIN_MANAGER_PATH"
+DEFAULT_TPM_PATH="$HOME/.tmux/plugins/"
diff --git a/dots/tmux/.tmux/plugins/tpm/tests/expect_failed_plugin_download b/dots/tmux/.tmux/plugins/tpm/tests/expect_failed_plugin_download
new file mode 100755
index 0000000..b970477
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/tests/expect_failed_plugin_download
@@ -0,0 +1,36 @@
+#!/usr/bin/env expect
+
+# disables script output
+log_user 0
+
+spawn tmux
+
+# Waiting for tmux to attach. If this is not done, next command, `send` will
+# not work properly.
+sleep 1
+
+# this is tmux prefix + I
+send "I"
+
+# cloning might take a while
+set timeout 20
+
+expect_after {
+ timeout { exit 1 }
+}
+
+expect {
+ "Installing \"non-existing-plugin\""
+}
+
+expect {
+ "\"non-existing-plugin\" download fail"
+}
+
+expect {
+ "Done, press ENTER to continue" {
+ exit 0
+ }
+}
+
+exit 1
diff --git a/dots/tmux/.tmux/plugins/tpm/tests/expect_successful_clean_plugins b/dots/tmux/.tmux/plugins/tpm/tests/expect_successful_clean_plugins
new file mode 100755
index 0000000..987c49d
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/tests/expect_successful_clean_plugins
@@ -0,0 +1,35 @@
+#!/usr/bin/env expect
+
+# disables script output
+log_user 0
+
+spawn tmux
+
+# Waiting for tmux to attach. If this is not done, next command, `send` will
+# not work properly.
+sleep 1
+
+# this is tmux prefix + alt + u
+send "u"
+
+set timeout 5
+
+expect_after {
+ timeout { exit 1 }
+}
+
+expect {
+ "Removing \"tmux-example-plugin\""
+}
+
+expect {
+ "\"tmux-example-plugin\" clean success"
+}
+
+expect {
+ "Done, press ENTER to continue." {
+ exit 0
+ }
+}
+
+exit 1
diff --git a/dots/tmux/.tmux/plugins/tpm/tests/expect_successful_multiple_plugins_download b/dots/tmux/.tmux/plugins/tpm/tests/expect_successful_multiple_plugins_download
new file mode 100755
index 0000000..cc87a26
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/tests/expect_successful_multiple_plugins_download
@@ -0,0 +1,44 @@
+#!/usr/bin/env expect
+
+# disables script output
+log_user 0
+
+spawn tmux
+
+# Waiting for tmux to attach. If this is not done, next command, `send` will
+# not work properly.
+sleep 1
+
+# this is tmux prefix + I
+send "I"
+
+# cloning might take a while
+set timeout 15
+
+expect_after {
+ timeout { exit 1 }
+}
+
+expect {
+ "Installing \"tmux-example-plugin\""
+}
+
+expect {
+ "\"tmux-example-plugin\" download success"
+}
+
+expect {
+ "Installing \"tmux-copycat\""
+}
+
+expect {
+ "\"tmux-copycat\" download success"
+}
+
+expect {
+ "Done, press ENTER to continue." {
+ exit 0
+ }
+}
+
+exit 1
diff --git a/dots/tmux/.tmux/plugins/tpm/tests/expect_successful_plugin_download b/dots/tmux/.tmux/plugins/tpm/tests/expect_successful_plugin_download
new file mode 100755
index 0000000..388f05d
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/tests/expect_successful_plugin_download
@@ -0,0 +1,50 @@
+#!/usr/bin/env expect
+
+# disables script output
+log_user 0
+
+spawn tmux
+
+# Waiting for tmux to attach. If this is not done, next command, `send` will
+# not work properly.
+sleep 1
+
+# this is tmux prefix + I
+send "I"
+
+# cloning might take a while
+set timeout 15
+
+expect_after {
+ timeout { exit 1 }
+}
+
+expect {
+ "Installing \"tmux-example-plugin\""
+}
+
+expect {
+ "\"tmux-example-plugin\" download success"
+}
+
+expect {
+ "Done, press ENTER to continue" {
+ send " "
+ }
+}
+
+sleep 1
+# this is tmux prefix + I
+send "I"
+
+expect {
+ "Already installed \"tmux-example-plugin\""
+}
+
+expect {
+ "Done, press ENTER to continue" {
+ exit 0
+ }
+}
+
+exit 1
diff --git a/dots/tmux/.tmux/plugins/tpm/tests/expect_successful_update_of_a_single_plugin b/dots/tmux/.tmux/plugins/tpm/tests/expect_successful_update_of_a_single_plugin
new file mode 100755
index 0000000..bcd64fe
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/tests/expect_successful_update_of_a_single_plugin
@@ -0,0 +1,55 @@
+#!/usr/bin/env expect
+
+# disables script output
+log_user 0
+
+spawn tmux
+
+# Waiting for tmux to attach. If this is not done, next command, `send` will
+# not work properly.
+sleep 1
+
+# this is tmux prefix + U
+send "U"
+
+set timeout 15
+
+expect_after {
+ timeout { exit 1 }
+}
+
+expect {
+ "Installed plugins"
+}
+
+expect {
+ "tmux-example-plugin"
+}
+
+expect {
+ "\"all\" - updates all plugins"
+}
+
+expect {
+ "ENTER - cancels"
+}
+
+# wait for tmux to display prompt before sending characters
+sleep 1
+send "tmux-example-plugin\r"
+
+expect {
+ "Updating \"tmux-example-plugin\""
+}
+
+expect {
+ "\"tmux-example-plugin\" update success"
+}
+
+expect {
+ "Done, press ENTER to continue." {
+ exit 0
+ }
+}
+
+exit 1
diff --git a/dots/tmux/.tmux/plugins/tpm/tests/expect_successful_update_of_all_plugins b/dots/tmux/.tmux/plugins/tpm/tests/expect_successful_update_of_all_plugins
new file mode 100755
index 0000000..4f3a4a3
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/tests/expect_successful_update_of_all_plugins
@@ -0,0 +1,59 @@
+#!/usr/bin/env expect
+
+# disables script output
+log_user 0
+
+spawn tmux
+
+# Waiting for tmux to attach. If this is not done, next command, `send` will
+# not work properly.
+sleep 1
+
+# this is tmux prefix + U
+send "U"
+
+set timeout 5
+
+expect_after {
+ timeout { exit 1 }
+}
+
+expect {
+ "Installed plugins"
+}
+
+expect {
+ "tmux-example-plugin"
+}
+
+expect {
+ "\"all\" - updates all plugins"
+}
+
+expect {
+ "ENTER - cancels"
+}
+
+# wait for tmux to display prompt before sending characters
+sleep 1
+send "all\r"
+
+expect {
+ "Updating all plugins!"
+}
+
+expect {
+ "Updating \"tmux-example-plugin\""
+}
+
+expect {
+ "\"tmux-example-plugin\" update success"
+}
+
+expect {
+ "Done, press ENTER to continue." {
+ exit 0
+ }
+}
+
+exit 1
diff --git a/dots/tmux/.tmux/plugins/tpm/tests/helpers/tpm.sh b/dots/tmux/.tmux/plugins/tpm/tests/helpers/tpm.sh
new file mode 100644
index 0000000..1594afb
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/tests/helpers/tpm.sh
@@ -0,0 +1,13 @@
+check_dir_exists_helper() {
+ [ -d "$1" ]
+}
+
+# runs the scripts and asserts it has the correct output and exit code
+script_run_helper() {
+ local script="$1"
+ local expected_output="$2"
+ local expected_exit_code="${3:-0}"
+ $script 2>&1 |
+ grep "$expected_output" >/dev/null 2>&1 && # grep -q flag quits the script early
+ [ "${PIPESTATUS[0]}" -eq "$expected_exit_code" ]
+}
diff --git a/dots/tmux/.tmux/plugins/tpm/tests/test_plugin_clean.sh b/dots/tmux/.tmux/plugins/tpm/tests/test_plugin_clean.sh
new file mode 100755
index 0000000..d36c468
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/tests/test_plugin_clean.sh
@@ -0,0 +1,67 @@
+#!/usr/bin/env bash
+
+CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+TPM_DIR="$PWD"
+PLUGINS_DIR="$HOME/.tmux/plugins"
+
+source "$CURRENT_DIR/helpers/helpers.sh"
+source "$CURRENT_DIR/helpers/tpm.sh"
+
+manually_install_the_plugin() {
+ rm -rf "$PLUGINS_DIR"
+ mkdir -p "$PLUGINS_DIR"
+ cd "$PLUGINS_DIR"
+ git clone --quiet https://github.com/tmux-plugins/tmux-example-plugin
+}
+
+# TMUX KEY-BINDING TESTS
+
+test_plugin_uninstallation_via_tmux_key_binding() {
+ set_tmux_conf_helper <<- HERE
+ set -g mode-keys vi
+ run-shell "$TPM_DIR/tpm"
+ HERE
+
+ manually_install_the_plugin
+
+ "$CURRENT_DIR/expect_successful_clean_plugins" ||
+ fail_helper "[key-binding] clean fails"
+
+ teardown_helper
+}
+
+# SCRIPT TESTS
+
+test_plugin_uninstallation_via_script() {
+ set_tmux_conf_helper <<- HERE
+ set -g mode-keys vi
+ run-shell "$TPM_DIR/tpm"
+ HERE
+
+ manually_install_the_plugin
+
+ script_run_helper "$TPM_DIR/bin/clean_plugins" '"tmux-example-plugin" clean success' ||
+ fail_helper "[script] plugin cleaning fails"
+
+ teardown_helper
+}
+
+test_unsuccessful_plugin_uninstallation_via_script() {
+ set_tmux_conf_helper <<- HERE
+ set -g mode-keys vi
+ run-shell "$TPM_DIR/tpm"
+ HERE
+
+ manually_install_the_plugin
+ chmod 000 "$PLUGINS_DIR/tmux-example-plugin" # disable directory deletion
+
+ local expected_exit_code=1
+ script_run_helper "$TPM_DIR/bin/clean_plugins" '"tmux-example-plugin" clean fail' "$expected_exit_code" ||
+ fail_helper "[script] unsuccessful plugin cleaning doesn't fail"
+
+ chmod 755 "$PLUGINS_DIR/tmux-example-plugin" # enable directory deletion
+
+ teardown_helper
+}
+
+run_tests
diff --git a/dots/tmux/.tmux/plugins/tpm/tests/test_plugin_installation.sh b/dots/tmux/.tmux/plugins/tpm/tests/test_plugin_installation.sh
new file mode 100755
index 0000000..94fb674
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/tests/test_plugin_installation.sh
@@ -0,0 +1,284 @@
+#!/usr/bin/env bash
+
+CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+PLUGINS_DIR="$HOME/.tmux/plugins"
+TPM_DIR="$PWD"
+
+CUSTOM_PLUGINS_DIR="$HOME/foo/plugins"
+ADDITIONAL_CONFIG_FILE_1="$HOME/.tmux/additional_config_file_1"
+ADDITIONAL_CONFIG_FILE_2="$HOME/.tmux/additional_config_file_2"
+
+source "$CURRENT_DIR/helpers/helpers.sh"
+source "$CURRENT_DIR/helpers/tpm.sh"
+
+# TMUX KEY-BINDING TESTS
+
+test_plugin_installation_via_tmux_key_binding() {
+ set_tmux_conf_helper <<- HERE
+ set -g mode-keys vi
+ set -g @plugin "tmux-plugins/tmux-example-plugin"
+ run-shell "$TPM_DIR/tpm"
+ HERE
+
+ "$CURRENT_DIR/expect_successful_plugin_download" ||
+ fail_helper "[key-binding] plugin installation fails"
+
+ check_dir_exists_helper "$PLUGINS_DIR/tmux-example-plugin/" ||
+ fail_helper "[key-binding] plugin download fails"
+
+ teardown_helper
+}
+
+test_plugin_installation_via_tmux_key_binding_set_option() {
+ set_tmux_conf_helper <<- HERE
+ set -g mode-keys vi
+ set-option -g @plugin "tmux-plugins/tmux-example-plugin"
+ run-shell "$TPM_DIR/tpm"
+ HERE
+
+ "$CURRENT_DIR/expect_successful_plugin_download" ||
+ fail_helper "[key-binding][set-option] plugin installation fails"
+
+ check_dir_exists_helper "$PLUGINS_DIR/tmux-example-plugin/" ||
+ fail_helper "[key-binding][set-option] plugin download fails"
+
+ teardown_helper
+}
+
+test_plugin_installation_custom_dir_via_tmux_key_binding() {
+ set_tmux_conf_helper <<- HERE
+ set -g mode-keys vi
+ set-environment -g TMUX_PLUGIN_MANAGER_PATH '$CUSTOM_PLUGINS_DIR'
+
+ set -g @plugin "tmux-plugins/tmux-example-plugin"
+ run-shell "$TPM_DIR/tpm"
+ HERE
+
+ "$CURRENT_DIR/expect_successful_plugin_download" ||
+ fail_helper "[key-binding][custom dir] plugin installation fails"
+
+ check_dir_exists_helper "$CUSTOM_PLUGINS_DIR/tmux-example-plugin/" ||
+ fail_helper "[key-binding][custom dir] plugin download fails"
+
+ teardown_helper
+ rm -rf "$CUSTOM_PLUGINS_DIR"
+}
+
+test_non_existing_plugin_installation_via_tmux_key_binding() {
+ set_tmux_conf_helper <<- HERE
+ set -g mode-keys vi
+ set -g @plugin "tmux-plugins/non-existing-plugin"
+ run-shell "$TPM_DIR/tpm"
+ HERE
+
+ "$CURRENT_DIR/expect_failed_plugin_download" ||
+ fail_helper "[key-binding] non existing plugin installation doesn't fail"
+
+ teardown_helper
+}
+
+test_multiple_plugins_installation_via_tmux_key_binding() {
+ set_tmux_conf_helper <<- HERE
+ set -g mode-keys vi
+ set -g @plugin "tmux-plugins/tmux-example-plugin"
+ \ \ set -g @plugin 'tmux-plugins/tmux-copycat'
+ run-shell "$TPM_DIR/tpm"
+ HERE
+
+ "$CURRENT_DIR/expect_successful_multiple_plugins_download" ||
+ fail_helper "[key-binding] multiple plugins installation fails"
+
+ check_dir_exists_helper "$PLUGINS_DIR/tmux-example-plugin/" ||
+ fail_helper "[key-binding] plugin download fails (tmux-example-plugin)"
+
+ check_dir_exists_helper "$PLUGINS_DIR/tmux-copycat/" ||
+ fail_helper "[key-binding] plugin download fails (tmux-copycat)"
+
+ teardown_helper
+}
+
+test_plugins_installation_from_sourced_file_via_tmux_key_binding() {
+ set_tmux_conf_helper <<- HERE
+ set -g mode-keys vi
+ source '$ADDITIONAL_CONFIG_FILE_1'
+ set -g @plugin 'tmux-plugins/tmux-example-plugin'
+ run-shell "$TPM_DIR/tpm"
+ HERE
+
+ mkdir ~/.tmux
+ echo "set -g @plugin 'tmux-plugins/tmux-copycat'" > "$ADDITIONAL_CONFIG_FILE_1"
+
+ "$CURRENT_DIR/expect_successful_multiple_plugins_download" ||
+ fail_helper "[key-binding][sourced file] plugins installation fails"
+
+ check_dir_exists_helper "$PLUGINS_DIR/tmux-example-plugin/" ||
+ fail_helper "[key-binding][sourced file] plugin download fails (tmux-example-plugin)"
+
+ check_dir_exists_helper "$PLUGINS_DIR/tmux-copycat/" ||
+ fail_helper "[key-binding][sourced file] plugin download fails (tmux-copycat)"
+
+ teardown_helper
+}
+
+test_plugins_installation_from_multiple_sourced_files_via_tmux_key_binding() {
+ set_tmux_conf_helper <<- HERE
+ set -g mode-keys vi
+ \ \ source '$ADDITIONAL_CONFIG_FILE_1'
+ source-file '$ADDITIONAL_CONFIG_FILE_2'
+ run-shell "$TPM_DIR/tpm"
+ HERE
+
+ mkdir ~/.tmux
+ echo "set -g @plugin 'tmux-plugins/tmux-example-plugin'" > "$ADDITIONAL_CONFIG_FILE_1"
+ echo " set -g @plugin 'tmux-plugins/tmux-copycat'" > "$ADDITIONAL_CONFIG_FILE_2"
+
+ "$CURRENT_DIR/expect_successful_multiple_plugins_download" ||
+ fail_helper "[key-binding][multiple sourced files] plugins installation fails"
+
+ check_dir_exists_helper "$PLUGINS_DIR/tmux-example-plugin/" ||
+ fail_helper "[key-binding][multiple sourced files] plugin download fails (tmux-example-plugin)"
+
+ check_dir_exists_helper "$PLUGINS_DIR/tmux-copycat/" ||
+ fail_helper "[key-binding][multiple sourced files] plugin download fails (tmux-copycat)"
+
+ teardown_helper
+}
+
+# SCRIPT TESTS
+
+test_plugin_installation_via_script() {
+ set_tmux_conf_helper <<- HERE
+ set -g mode-keys vi
+ set -g @plugin "tmux-plugins/tmux-example-plugin"
+ run-shell "$TPM_DIR/tpm"
+ HERE
+
+ script_run_helper "$TPM_DIR/bin/install_plugins" '"tmux-example-plugin" download success' ||
+ fail_helper "[script] plugin installation fails"
+
+ check_dir_exists_helper "$PLUGINS_DIR/tmux-example-plugin/" ||
+ fail_helper "[script] plugin download fails"
+
+ script_run_helper "$TPM_DIR/bin/install_plugins" 'Already installed "tmux-example-plugin"' ||
+ fail_helper "[script] plugin already installed message fail"
+
+ teardown_helper
+}
+
+test_plugin_installation_custom_dir_via_script() {
+ set_tmux_conf_helper <<- HERE
+ set -g mode-keys vi
+ set-environment -g TMUX_PLUGIN_MANAGER_PATH '$CUSTOM_PLUGINS_DIR'
+
+ set -g @plugin "tmux-plugins/tmux-example-plugin"
+ run-shell "$TPM_DIR/tpm"
+ HERE
+
+ script_run_helper "$TPM_DIR/bin/install_plugins" '"tmux-example-plugin" download success' ||
+ fail_helper "[script][custom dir] plugin installation fails"
+
+ check_dir_exists_helper "$CUSTOM_PLUGINS_DIR/tmux-example-plugin/" ||
+ fail_helper "[script][custom dir] plugin download fails"
+
+ script_run_helper "$TPM_DIR/bin/install_plugins" 'Already installed "tmux-example-plugin"' ||
+ fail_helper "[script][custom dir] plugin already installed message fail"
+
+ teardown_helper
+ rm -rf "$CUSTOM_PLUGINS_DIR"
+}
+
+test_non_existing_plugin_installation_via_script() {
+ set_tmux_conf_helper <<- HERE
+ set -g mode-keys vi
+ set -g @plugin "tmux-plugins/non-existing-plugin"
+ run-shell "$TPM_DIR/tpm"
+ HERE
+
+ local expected_exit_code=1
+ script_run_helper "$TPM_DIR/bin/install_plugins" '"non-existing-plugin" download fail' "$expected_exit_code" ||
+ fail_helper "[script] non existing plugin installation doesn't fail"
+
+ teardown_helper
+}
+
+test_multiple_plugins_installation_via_script() {
+ set_tmux_conf_helper <<- HERE
+ set -g mode-keys vi
+ set -g @plugin "tmux-plugins/tmux-example-plugin"
+ \ \ set -g @plugin 'tmux-plugins/tmux-copycat'
+ run-shell "$TPM_DIR/tpm"
+ HERE
+
+ script_run_helper "$TPM_DIR/bin/install_plugins" '"tmux-example-plugin" download success' ||
+ fail_helper "[script] multiple plugins installation fails"
+
+ check_dir_exists_helper "$PLUGINS_DIR/tmux-example-plugin/" ||
+ fail_helper "[script] plugin download fails (tmux-example-plugin)"
+
+ check_dir_exists_helper "$PLUGINS_DIR/tmux-copycat/" ||
+ fail_helper "[script] plugin download fails (tmux-copycat)"
+
+ script_run_helper "$TPM_DIR/bin/install_plugins" 'Already installed "tmux-copycat"' ||
+ fail_helper "[script] multiple plugins already installed message fail"
+
+ teardown_helper
+}
+
+test_plugins_installation_from_sourced_file_via_script() {
+ set_tmux_conf_helper <<- HERE
+ set -g mode-keys vi
+ source '$ADDITIONAL_CONFIG_FILE_1'
+ set -g @plugin 'tmux-plugins/tmux-example-plugin'
+ run-shell "$TPM_DIR/tpm"
+ HERE
+
+ mkdir ~/.tmux
+ echo "set -g @plugin 'tmux-plugins/tmux-copycat'" > "$ADDITIONAL_CONFIG_FILE_1"
+
+ script_run_helper "$TPM_DIR/bin/install_plugins" '"tmux-copycat" download success' ||
+ fail_helper "[script][sourced file] plugins installation fails"
+
+ check_dir_exists_helper "$PLUGINS_DIR/tmux-example-plugin/" ||
+ fail_helper "[script][sourced file] plugin download fails (tmux-example-plugin)"
+
+ check_dir_exists_helper "$PLUGINS_DIR/tmux-copycat/" ||
+ fail_helper "[script][sourced file] plugin download fails (tmux-copycat)"
+
+ script_run_helper "$TPM_DIR/bin/install_plugins" 'Already installed "tmux-copycat"' ||
+ fail_helper "[script][sourced file] plugins already installed message fail"
+
+ teardown_helper
+}
+
+test_plugins_installation_from_multiple_sourced_files_via_script() {
+ set_tmux_conf_helper <<- HERE
+ set -g mode-keys vi
+ \ \ source '$ADDITIONAL_CONFIG_FILE_1'
+ source-file '$ADDITIONAL_CONFIG_FILE_2'
+ set -g @plugin 'tmux-plugins/tmux-example-plugin'
+ run-shell "$TPM_DIR/tpm"
+ HERE
+
+ mkdir ~/.tmux
+ echo " set -g @plugin 'tmux-plugins/tmux-copycat'" > "$ADDITIONAL_CONFIG_FILE_1"
+ echo "set -g @plugin 'tmux-plugins/tmux-sensible'" > "$ADDITIONAL_CONFIG_FILE_2"
+
+ script_run_helper "$TPM_DIR/bin/install_plugins" '"tmux-sensible" download success' ||
+ fail_helper "[script][multiple sourced files] plugins installation fails"
+
+ check_dir_exists_helper "$PLUGINS_DIR/tmux-example-plugin/" ||
+ fail_helper "[script][multiple sourced files] plugin download fails (tmux-example-plugin)"
+
+ check_dir_exists_helper "$PLUGINS_DIR/tmux-copycat/" ||
+ fail_helper "[script][multiple sourced files] plugin download fails (tmux-copycat)"
+
+ check_dir_exists_helper "$PLUGINS_DIR/tmux-sensible/" ||
+ fail_helper "[script][multiple sourced files] plugin download fails (tmux-sensible)"
+
+ script_run_helper "$TPM_DIR/bin/install_plugins" 'Already installed "tmux-sensible"' ||
+ fail_helper "[script][multiple sourced files] plugins already installed message fail"
+
+ teardown_helper
+}
+
+run_tests
diff --git a/dots/tmux/.tmux/plugins/tpm/tests/test_plugin_installation_legacy.sh b/dots/tmux/.tmux/plugins/tpm/tests/test_plugin_installation_legacy.sh
new file mode 100755
index 0000000..b1d0cf6
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/tests/test_plugin_installation_legacy.sh
@@ -0,0 +1,100 @@
+#!/usr/bin/env bash
+
+CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+PLUGINS_DIR="$HOME/.tmux/plugins"
+TPM_DIR="$PWD"
+
+source "$CURRENT_DIR/helpers/helpers.sh"
+source "$CURRENT_DIR/helpers/tpm.sh"
+
+# TMUX KEY-BINDING TESTS
+
+test_plugin_installation_via_tmux_key_binding() {
+ set_tmux_conf_helper <<- HERE
+ set -g mode-keys vi
+ set -g @tpm_plugins "tmux-plugins/tmux-example-plugin"
+ run-shell "$TPM_DIR/tpm"
+ HERE
+
+ # opens tmux and test it with `expect`
+ $CURRENT_DIR/expect_successful_plugin_download ||
+ fail_helper "[key-binding] plugin installation fails"
+
+ # check plugin dir exists after download
+ check_dir_exists_helper "$PLUGINS_DIR/tmux-example-plugin/" ||
+ fail_helper "[key-binding] plugin download fails"
+
+ teardown_helper
+}
+
+test_legacy_and_new_syntax_for_plugin_installation_work_via_tmux_key_binding() {
+ set_tmux_conf_helper <<- HERE
+ set -g mode-keys vi
+ set -g @tpm_plugins " \
+ tmux-plugins/tmux-example-plugin \
+ "
+ set -g @plugin 'tmux-plugins/tmux-copycat'
+ run-shell "$TPM_DIR/tpm"
+ HERE
+
+ # opens tmux and test it with `expect`
+ "$CURRENT_DIR"/expect_successful_multiple_plugins_download ||
+ fail_helper "[key-binding] multiple plugins installation fails"
+
+ # check plugin dir exists after download
+ check_dir_exists_helper "$PLUGINS_DIR/tmux-example-plugin/" ||
+ fail_helper "[key-binding] plugin download fails (tmux-example-plugin)"
+
+ check_dir_exists_helper "$PLUGINS_DIR/tmux-copycat/" ||
+ fail_helper "[key-binding] plugin download fails (tmux-copycat)"
+
+ teardown_helper
+}
+
+# SCRIPT TESTS
+
+test_plugin_installation_via_script() {
+ set_tmux_conf_helper <<- HERE
+ set -g mode-keys vi
+ set -g @tpm_plugins "tmux-plugins/tmux-example-plugin"
+ run-shell "$TPM_DIR/tpm"
+ HERE
+
+ script_run_helper "$TPM_DIR/bin/install_plugins" '"tmux-example-plugin" download success' ||
+ fail_helper "[script] plugin installation fails"
+
+ check_dir_exists_helper "$PLUGINS_DIR/tmux-example-plugin/" ||
+ fail_helper "[script] plugin download fails"
+
+ script_run_helper "$TPM_DIR/bin/install_plugins" 'Already installed "tmux-example-plugin"' ||
+ fail_helper "[script] plugin already installed message fail"
+
+ teardown_helper
+}
+
+test_legacy_and_new_syntax_for_plugin_installation_work_via_script() {
+ set_tmux_conf_helper <<- HERE
+ set -g mode-keys vi
+ set -g @tpm_plugins " \
+ tmux-plugins/tmux-example-plugin \
+ "
+ set -g @plugin 'tmux-plugins/tmux-copycat'
+ run-shell "$TPM_DIR/tpm"
+ HERE
+
+ script_run_helper "$TPM_DIR/bin/install_plugins" '"tmux-example-plugin" download success' ||
+ fail_helper "[script] multiple plugin installation fails"
+
+ check_dir_exists_helper "$PLUGINS_DIR/tmux-example-plugin/" ||
+ fail_helper "[script] plugin download fails (tmux-example-plugin)"
+
+ check_dir_exists_helper "$PLUGINS_DIR/tmux-copycat/" ||
+ fail_helper "[script] plugin download fails (tmux-copycat)"
+
+ script_run_helper "$TPM_DIR/bin/install_plugins" 'Already installed "tmux-copycat"' ||
+ fail_helper "[script] multiple plugins already installed message fail"
+
+ teardown_helper
+}
+
+run_tests
diff --git a/dots/tmux/.tmux/plugins/tpm/tests/test_plugin_sourcing.sh b/dots/tmux/.tmux/plugins/tpm/tests/test_plugin_sourcing.sh
new file mode 100755
index 0000000..c06f1fe
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/tests/test_plugin_sourcing.sh
@@ -0,0 +1,78 @@
+#!/usr/bin/env bash
+
+CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+TPM_DIR="$PWD"
+PLUGINS_DIR="$HOME/.tmux/plugins"
+
+CUSTOM_PLUGINS_DIR="$HOME/foo/plugins"
+
+source "$CURRENT_DIR/helpers/helpers.sh"
+source "$CURRENT_DIR/helpers/tpm.sh"
+
+check_binding_defined() {
+ local binding="$1"
+ tmux list-keys | grep -q "$binding"
+}
+
+create_test_plugin_helper() {
+ local plugin_path="$PLUGINS_DIR/tmux_test_plugin/"
+ rm -rf "$plugin_path"
+ mkdir -p "$plugin_path"
+
+ while read line; do
+ echo "$line" >> "$plugin_path/test_plugin.tmux"
+ done
+ chmod +x "$plugin_path/test_plugin.tmux"
+}
+
+check_tpm_path() {
+ local correct_tpm_path="$1"
+ local tpm_path="$(tmux start-server\; show-environment -g TMUX_PLUGIN_MANAGER_PATH | cut -f2 -d=)"
+ [ "$correct_tpm_path" == "$tpm_path" ]
+}
+
+test_plugin_sourcing() {
+ set_tmux_conf_helper <<- HERE
+ set -g mode-keys vi
+ set -g @plugin "doesnt_matter/tmux_test_plugin"
+ run-shell "$TPM_DIR/tpm"
+ HERE
+
+ # manually creates a local tmux plugin
+ create_test_plugin_helper <<- HERE
+ tmux bind-key R run-shell foo_command
+ HERE
+
+ tmux new-session -d # tmux starts detached
+ check_binding_defined "R run-shell foo_command" ||
+ fail_helper "Plugin sourcing fails"
+
+ teardown_helper
+}
+
+test_default_tpm_path() {
+ set_tmux_conf_helper <<- HERE
+ set -g mode-keys vi
+ run-shell "$TPM_DIR/tpm"
+ HERE
+
+ check_tpm_path "${PLUGINS_DIR}/" ||
+ fail_helper "Default TPM path not correct"
+
+ teardown_helper
+}
+
+test_custom_tpm_path() {
+ set_tmux_conf_helper <<- HERE
+ set -g mode-keys vi
+ set-environment -g TMUX_PLUGIN_MANAGER_PATH '$CUSTOM_PLUGINS_DIR'
+ run-shell "$TPM_DIR/tpm"
+ HERE
+
+ check_tpm_path "$CUSTOM_PLUGINS_DIR" ||
+ fail_helper "Custom TPM path not correct"
+
+ teardown_helper
+}
+
+run_tests
diff --git a/dots/tmux/.tmux/plugins/tpm/tests/test_plugin_update.sh b/dots/tmux/.tmux/plugins/tpm/tests/test_plugin_update.sh
new file mode 100755
index 0000000..4924d16
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/tests/test_plugin_update.sh
@@ -0,0 +1,60 @@
+#!/usr/bin/env bash
+
+CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+TPM_DIR="$PWD"
+PLUGINS_DIR="$HOME/.tmux/plugins"
+
+source "$CURRENT_DIR/helpers/helpers.sh"
+source "$CURRENT_DIR/helpers/tpm.sh"
+
+manually_install_the_plugin() {
+ mkdir -p "$PLUGINS_DIR"
+ cd "$PLUGINS_DIR"
+ git clone --quiet https://github.com/tmux-plugins/tmux-example-plugin
+}
+
+# TMUX KEY-BINDING TESTS
+
+test_plugin_update_via_tmux_key_binding() {
+ set_tmux_conf_helper <<- HERE
+ set -g mode-keys vi
+ set -g @plugin "tmux-plugins/tmux-example-plugin"
+ run-shell "$TPM_DIR/tpm"
+ HERE
+
+ manually_install_the_plugin
+
+ "$CURRENT_DIR/expect_successful_update_of_all_plugins" ||
+ fail_helper "[key-binding] 'update all plugins' fails"
+
+ "$CURRENT_DIR/expect_successful_update_of_a_single_plugin" ||
+ fail_helper "[key-binding] 'update single plugin' fails"
+
+ teardown_helper
+}
+
+# SCRIPT TESTS
+
+test_plugin_update_via_script() {
+ set_tmux_conf_helper <<- HERE
+ set -g mode-keys vi
+ set -g @plugin "tmux-plugins/tmux-example-plugin"
+ run-shell "$TPM_DIR/tpm"
+ HERE
+
+ manually_install_the_plugin
+
+ local expected_exit_code=1
+ script_run_helper "$TPM_DIR/bin/update_plugins" 'usage' "$expected_exit_code" ||
+ fail_helper "[script] running update plugins without args should fail"
+
+ script_run_helper "$TPM_DIR/bin/update_plugins tmux-example-plugin" '"tmux-example-plugin" update success' ||
+ fail_helper "[script] plugin update fails"
+
+ script_run_helper "$TPM_DIR/bin/update_plugins all" '"tmux-example-plugin" update success' ||
+ fail_helper "[script] update all plugins fails"
+
+ teardown_helper
+}
+
+run_tests
diff --git a/dots/tmux/.tmux/plugins/tpm/tpm b/dots/tmux/.tmux/plugins/tpm/tpm
new file mode 100755
index 0000000..7ad4b99
--- /dev/null
+++ b/dots/tmux/.tmux/plugins/tpm/tpm
@@ -0,0 +1,81 @@
+#!/usr/bin/env bash
+
+CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+BINDINGS_DIR="$CURRENT_DIR/bindings"
+SCRIPTS_DIR="$CURRENT_DIR/scripts"
+
+source "$SCRIPTS_DIR/variables.sh"
+
+get_tmux_option() {
+ local option="$1"
+ local default_value="$2"
+ local option_value="$(tmux show-option -gqv "$option")"
+ if [ -z "$option_value" ]; then
+ echo "$default_value"
+ else
+ echo "$option_value"
+ fi
+}
+
+tpm_path_set() {
+ tmux show-environment -g "$DEFAULT_TPM_ENV_VAR_NAME" >/dev/null 2>&1
+}
+
+# Check if configuration file exists at an XDG-compatible location, if so use
+# that directory for TMUX_PLUGIN_MANAGER_PATH. Otherwise use $DEFAULT_TPM_PATH.
+set_default_tpm_path() {
+ local xdg_tmux_path="${XDG_CONFIG_HOME:-$HOME/.config}/tmux"
+ local tpm_path="$DEFAULT_TPM_PATH"
+
+ if [ -f "$xdg_tmux_path/tmux.conf" ]; then
+ tpm_path="$xdg_tmux_path/plugins/"
+ fi
+
+ tmux set-environment -g "$DEFAULT_TPM_ENV_VAR_NAME" "$tpm_path"
+}
+
+# Ensures TMUX_PLUGIN_MANAGER_PATH global env variable is set.
+#
+# Put this in `.tmux.conf` to override the default:
+# `set-environment -g TMUX_PLUGIN_MANAGER_PATH "/some/other/path/"`
+set_tpm_path() {
+ if ! tpm_path_set; then
+ set_default_tpm_path
+ fi
+}
+
+# 1. Fetches plugin names from `@plugin` variables
+# 2. Creates full plugin path
+# 3. Sources all *.tmux files from each of the plugin directories
+# - no errors raised if directory does not exist
+# Files are sourced as tmux config files, not as shell scripts!
+source_plugins() {
+ "$SCRIPTS_DIR/source_plugins.sh" >/dev/null 2>&1
+}
+
+# prefix + I - downloads TPM plugins and reloads TMUX environment
+# prefix + U - updates a plugin (or all of them) and reloads TMUX environment
+# prefix + alt + u - remove unused TPM plugins and reloads TMUX environment
+set_tpm_key_bindings() {
+ local install_key="$(get_tmux_option "$install_key_option" "$default_install_key")"
+ tmux bind-key "$install_key" run-shell "$BINDINGS_DIR/install_plugins"
+
+ local update_key="$(get_tmux_option "$update_key_option" "$default_update_key")"
+ tmux bind-key "$update_key" run-shell "$BINDINGS_DIR/update_plugins"
+
+ local clean_key="$(get_tmux_option "$clean_key_option" "$default_clean_key")"
+ tmux bind-key "$clean_key" run-shell "$BINDINGS_DIR/clean_plugins"
+}
+
+supported_tmux_version_ok() {
+ "$SCRIPTS_DIR/check_tmux_version.sh" "$SUPPORTED_TMUX_VERSION"
+}
+
+main() {
+ if supported_tmux_version_ok; then
+ set_tpm_path
+ set_tpm_key_bindings
+ source_plugins
+ fi
+}
+main
diff --git a/dots/zed/.config/zed/keymap.json b/dots/zed/.config/zed/keymap.json
new file mode 100644
index 0000000..816b7c6
--- /dev/null
+++ b/dots/zed/.config/zed/keymap.json
@@ -0,0 +1,14 @@
+[
+ {
+ "context": "Workspace",
+ "bindings": {
+ "shift shift": "file_finder::Toggle"
+ }
+ },
+ {
+ "context": "Editor",
+ "bindings": {
+ // "j k": ["workspace::SendKeystrokes", "escape"]
+ }
+ }
+]
diff --git a/dots/zed/.config/zed/settings.json.j2 b/dots/zed/.config/zed/settings.json.j2
new file mode 100644
index 0000000..6a11650
--- /dev/null
+++ b/dots/zed/.config/zed/settings.json.j2
@@ -0,0 +1,280 @@
+{
+ // -- <telemetry> --
+ "telemetry": {
+ "metrics": false,
+ "diagnostics": false
+ },
+ "features": {
+ "copilot": false
+ },
+ "show_copilot_suggestions": false,
+ // -- </telemetry> --
+
+ // -- <keys> --
+ "vim_mode": true,
+ "base_keymap": "JetBrains",
+ // -- </keys> --
+
+ // -- <text> --
+ "ui_font_size": 14,
+ "tab_size": 4,
+ "buffer_font_size": 14,
+ "ui_font_family": "Agave Nerd Font Mono",
+ "buffer_font_family": "Agave Nerd Font Mono",
+ // -- </text> --
+
+ // -- <theme> --
+ "theme": {
+ "mode": "system",
+ "light": "Gruvbox Light Hard",
+ "dark": "Gruvbox Dark Soft"
+ },
+ // -- </theme> --
+
+ // -- <line_view> --
+ "relative_line_numbers": true,
+ "current_line_highlight": "all",
+ "show_whitespaces": "selection",
+ // -- </line_view> --
+
+ // -- <on_save> --
+ "format_on_save": "off",
+ "ensure_final_newline_on_save": true,
+ // -- </on_save> --
+
+ // -- <layout> --
+ "centered_layout": {
+ "left_padding": 0.1,
+ "right_padding": 0.1
+ },
+ "tab_bar": {
+ "show": false
+ },
+ "toolbar": {
+ "breadcrumbs": false,
+ "quick_actions": false,
+ "selections_menu": false,
+ "agent_review": false,
+ "code_actions": false
+ },
+ "project_panel": {
+ "dock": "right"
+ },
+ // -- </layout> --
+
+ // -- <languages> --
+ "lsp": {
+ "jdtls": {
+ "initialization_options": {
+ "settings": {
+ "java": {
+ "home": "~/.local/share/mise/installs/java/21",
+ "jdt": {
+ "ls": {
+ "lombokSupport": {
+ "enabled": true
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "languages": {
+ "Java": {
+ "formatter": "prettier",
+ "format_on_save": "off",
+ "language_servers": ["jdtls"]
+ },
+ "TypeScript": {
+ "language_servers": ["typescript-language-server"],
+ "formatter": "prettier"
+ },
+ "TSX": {
+ "language_servers": ["typescript-language-server"],
+ "formatter": "prettier"
+ }
+ },
+ // -- </languages> --
+
+ // -- <extensions> --
+ "auto_install_extensions": {
+ "html": true,
+ "dockerfile": true,
+ "docker-compose": true,
+ "ansible": true,
+ "deno": true,
+ "java": true,
+ "kotlin": true,
+ "toml": true,
+
+ // https://github.com/modelcontextprotocol/servers/tree/main/src/sequentialthinking
+ "mcp-server-sequential-thinking": true
+ },
+ // -- </extensions> --
+
+{% if features.work_mode %}
+ // -- <amzn_ai> --
+ "language_models": {
+ "bedrock": {
+ "authentication_method": "named_profile",
+ "profile": "cline",
+ "region": "us-west-2"
+ }
+ },
+ "context_servers": {
+ // wasabi's MCP server
+ "wasabi": {
+ "command": {
+ "path": "wasabi",
+ "args": ["--mcp-server"],
+ "env": null
+ },
+ "settings": {}
+ },
+ // the internal general MCP server
+ "Amazon Internal MCP": {
+ "command": {
+ "path": "amzn_ai-mcp",
+ "args": [],
+ "env": null
+ },
+ "settings": {}
+ },
+ // offical AWS Docs MCP server built by Labs
+ "AWS Documentation MCP Server": {
+ "command": {
+ "path": "mise",
+ "args": [
+ "exec",
+ "uv@latest",
+ "--",
+ "uvx",
+ "awslabs.aws-documentation-mcp-server@latest"
+ ],
+ "env": {
+ "FASTMCP_LOG_LEVEL": "ERROR"
+ }
+ }
+ }
+ },
+ "agent": {
+ "dock": "left",
+ "profiles": {
+ "starter-profile": {
+ "name": "Starter Profile",
+ "tools": {
+ "copy_path": false,
+ "create_directory": false,
+ "delete_path": false,
+ "diagnostics": false,
+ "edit_file": true,
+ "fetch": false,
+ "find_path": false,
+ "grep": false,
+ "list_directory": true,
+ "move_path": false,
+ "terminal": false,
+ "read_file": true,
+ "open": true,
+ "now": true,
+ "thinking": true
+ },
+ "context_servers": {
+ "wasabi": {
+ "tools": {
+ "WorkspaceSearch": true,
+ "ReadInternalWebsites": true,
+ "Delegate": true
+ }
+ },
+ "mcp-server-sequential-thinking": {
+ "tools": {
+ "sequentialthinking": true
+ }
+ },
+ "Amazon Internal MCP": {
+ "tools": {
+ "write_internal_website": true,
+ "tod_download_logs": true,
+ "taskei_get_task": true,
+ "slack-send-message": true,
+ "sim_update_issue": true,
+ "sim_search_issues": true,
+ "sim_get_issue": true,
+ "sim_get_folders": true,
+ "sim_create_issue": true,
+ "sim_add_tag": true,
+ "sim_add_comment": true,
+ "search_symphony": true,
+ "search_sable": true,
+ "search_products": true,
+ "search_quip": true,
+ "search_people": true,
+ "search_katal_components": true,
+ "search_internal_websites": true,
+ "search_internal_issues": true,
+ "search_datapath": true,
+ "search_internal_code": true,
+ "read_quip": true,
+ "read_orr": true,
+ "read_kingpin_goal": true,
+ "read_internal_website": true,
+ "read_coe": true,
+ "prompt_farm_search_prompts": true,
+ "prompt_farm_prompt_content": true,
+ "policy_engine_get_user_dashboard": true,
+ "policy_engine_get_risk": true,
+ "plantuml": true,
+ "pippin_update_project": true,
+ "pippin_update_artifact": true,
+ "pippin_list_projects": true,
+ "pippin_list_artifacts": true,
+ "pippin_get_project": true,
+ "pippin_get_artifact": true,
+ "pippin_create_project": true,
+ "pippin_create_artifact": true,
+ "mox_console": true,
+ "lookup_user_coding_activity_summary": true,
+ "lookup_team_code_resource": true,
+ "list_katal_components": true,
+ "get_recent_messages_quip": true,
+ "get_katal_component": true,
+ "edit_quip": true,
+ "create_quip": true
+ }
+ },
+ "AWS Documentation MCP Server": {
+ "tools": {
+ "recommend": true,
+ "search_documentation": true,
+ "read_documentation": true
+ }
+ }
+ }
+ }
+ },
+ "default_profile": "starter-profile",
+ "inline_assistant_model": {
+ "provider": "amazon-bedrock",
+ "model": "amazon.nova-lite-v1:0"
+ },
+ "commit_message_model": {
+ "provider": "amazon-bedrock",
+ "model": "amazon.nova-lite-v1:0"
+ },
+ "thread_summary_model": {
+ "provider": "amazon-bedrock",
+ "model": "amazon.nova-lite-v1:0"
+ },
+ "always_allow_tool_actions": true,
+ "default_model": {
+ "provider": "amazon-bedrock",
+ "model": "anthropic.claude-3-7-sonnet-20250219-v1:0"
+ },
+ "version": "2"
+ }
+ // -- </amzn_ai> --
+{% endif %}
+}
diff --git a/dots/zsh/.config/zsh/.zshrc b/dots/zsh/.config/zsh/.zshrc
new file mode 100644
index 0000000..a2376b7
--- /dev/null
+++ b/dots/zsh/.config/zsh/.zshrc
@@ -0,0 +1,38 @@
+#!/bin/zsh
+
+#-- <startup> --
+export XDG_CONFIG_HOME="$HOME/.config"
+export ZDOTDIR=${XDG_CONFIG_HOME:-$HOME/.config}/zsh
+export PATH=$PATH:$HOME/scripts:$HOME/.local/bin
+
+source log.sh ".zshrc"
+greet.sh
+#-- </startup> --
+
+#-- <misc> --
+. "$ZDOTDIR/setup/misc.zsh"
+#-- </misc> --
+
+#-- <common_aliases> --
+. "$ZDOTDIR/setup/aliases.zsh"
+#-- </common_aliases> --
+
+#-- <shell_opts> --
+. "$ZDOTDIR/setup/history.zsh"
+#-- </shell_opts> --
+
+#-- <misc> --
+. "$ZDOTDIR/setup/git.zsh"
+#-- </misc> --
+
+#-- <device> --
+. "$ZDOTDIR/setup/device.zsh"
+#-- </device> --
+
+#-- <tools> --
+. "$ZDOTDIR/setup/tools.zsh"
+#-- </tools> --
+
+#-- <gpg> --
+. "$ZDOTDIR/setup/gpg.zsh"
+#-- </gpg> --
diff --git a/dots/zsh/.config/zsh/greetings/00_art/another_penguin b/dots/zsh/.config/zsh/greetings/00_art/another_penguin
new file mode 100644
index 0000000..00f43e3
--- /dev/null
+++ b/dots/zsh/.config/zsh/greetings/00_art/another_penguin
@@ -0,0 +1,15 @@
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⣀⣀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣖⣫⠵⠔⢿⣿⣿⣿⡄⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⢠⠾⠯⣾⠃⠀⢀⣸⡿⠛⠻⢿⣆⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠆⣀⡀⠹⣶⣀⣨⡏⢀⣀⡀⠈⣿⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⢸⠀⠛⠃⢰⠋⠉⢻⠀⠘⠛⠃⠀⣿⡄⠀⠀
+⠀⠀⠀⠀⠀⢀⣀⣘⡀⠀⠀⠀⠀⠒⠉⠀⠀⠀⢀⣼⡟⠀⠀⠀
+⣠⣶⣶⣾⣿⣿⣿⣿⣯⡶⡀⠀⠀⠀⠀⢀⣀⢴⡻⣗⡄⠀⠀⠀
+⠹⡿⠿⠛⢿⣿⣿⣿⣟⣥⡈⠉⠁⠀⠀⠀⠀⢀⣵⢊⠨⠢⠀⠀
+⠀⠀⠀⠀⠘⠻⠿⠿⠿⠁⠘⠋⠒⠂⠀⠐⠊⠉⠈⠎⣦⡀⠱⡀
+⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠘⠟⢧⣱
+⠀⠀⠀⠀⠀⠀⠀⢸⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⠀⢸⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⢸⣇⠀⡀⠀⠀⠀⠀⠀⠀⠀⡰⠁⠀⢺⠆⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠻⣆⠳⢄⣀⠠⠀⠀⠐⡄⡇⠀⣠⡯⠟⠀
+⠀⠀⠀⠀⠀⠀⠀⣤⣎⣟⡖⣺⠗⠉⠉⠉⠉⠉⡖⡶⣟⢢⣐⠶
+⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠉⠁⠒⠒⠒⠒⠒⠂⠉⠉⠉⠁⠀⠀ \ No newline at end of file
diff --git a/dots/zsh/.config/zsh/greetings/00_art/butterfly b/dots/zsh/.config/zsh/greetings/00_art/butterfly
new file mode 100644
index 0000000..cea5d72
--- /dev/null
+++ b/dots/zsh/.config/zsh/greetings/00_art/butterfly
@@ -0,0 +1,9 @@
+⠀⠀⠀⠀⊹
+⢶⢻⣑⣒⢤⡀⠀⢄⠀⠀⡠⠀⢀⡤⣆⣊⡿⡷
+⠀⠹⠹⣚⣣⠻⣦⡀⠀⠀⢀⣴⠟⣸⢓⢎⠏⠀
+⠀⠀⢡⣱⣖⣢⡾⢿⣾⣷⡿⢷⣖⣒⣎⡎⠀⠀
+⠀⠀⠀⣠⠓⢬⠅⡺⢻⡟⢗⠨⡥⠚⣄⠀⠀⠀
+⠀⠀⠀⣿⡆⠘⠆⢇⢸⡇⠸⠰⠃⢰⣿⠀⠀⠀
+⠀⠀⠀⠐⡻⣮⣬⠞⠈⠁⠳⣤⣴⢿⠂⠀⠀⠀
+⠀⠀⠀⡜⠀⠁⠉⠀⠀⠀⠀⠈⠈⠀⢣⠀⠀⠀⊹
+⊹ \ No newline at end of file
diff --git a/dots/zsh/.config/zsh/greetings/00_art/eebjy b/dots/zsh/.config/zsh/greetings/00_art/eebjy
new file mode 100644
index 0000000..6e6bbcf
--- /dev/null
+++ b/dots/zsh/.config/zsh/greetings/00_art/eebjy
@@ -0,0 +1,9 @@
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡀⠀⠀⠀⠀
+⠀⠀⠀⠀⢀⡴⣆⠀⠀⠀⠀⠀⣠⡀ ᶻ 𝗓 𐰁 .ᐟ ⣼⣿⡗⠀⠀⠀⠀
+⠀⠀⠀⣠⠟⠀⠘⠷⠶⠶⠶⠾⠉⢳⡄⠀⠀⠀⠀⠀⣧⣿⠀⠀⠀⠀⠀
+⠀⠀⣰⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣤⣤⣤⣤⣤⣿⢿⣄⠀⠀⠀⠀
+⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣧⠀⠀⠀⠀⠀⠀⠙⣷⡴⠶⣦
+⠀⠀⢱⡀⠀⠉⠉⠀⠀⠀⠀⠛⠃⠀⢠⡟⠀⠀⠀⢀⣀⣠⣤⠿⠞⠛⠋
+⣠⠾⠋⠙⣶⣤⣤⣤⣤⣤⣀⣠⣤⣾⣿⠴⠶⠚⠋⠉⠁⠀⠀⠀⠀⠀⠀
+⠛⠒⠛⠉⠉⠀⠀⠀⣴⠟⢃⡴⠛⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠛⠛⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
diff --git a/dots/zsh/.config/zsh/greetings/00_art/heart b/dots/zsh/.config/zsh/greetings/00_art/heart
new file mode 100644
index 0000000..3394514
--- /dev/null
+++ b/dots/zsh/.config/zsh/greetings/00_art/heart
@@ -0,0 +1,8 @@
+.  +⠀ ⠀
+⠀˚⠀ ⣴⠟⠉⠉⠛⢦⡀⢀⣴⠛⠉⠈⠙⠻⣄
+⠀⠀⣼⠃⠀⠀⠀⠀⠀⠙⠋⠀⠀⠀⠀⠀⠀⠹⣦
+⠀⠀⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿
+⠀⠀⠿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⡆
+⠀⠀⠀⢻⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡼⠃
+⠀⠀⠀⠀⠀⠻⢦⣄⠀⠀⠀⠀⠀⣠⡴⠛
+⠀⠀⠀⠀⠀⠀⠀⠉⠛⠶⣄⠶⠋ ⠀⠀⠀+. * \ No newline at end of file
diff --git a/dots/zsh/.config/zsh/greetings/00_art/penguin b/dots/zsh/.config/zsh/greetings/00_art/penguin
new file mode 100644
index 0000000..6389d00
--- /dev/null
+++ b/dots/zsh/.config/zsh/greetings/00_art/penguin
@@ -0,0 +1,16 @@
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⡤⠴⠒⠒⠒⠶⢤⣄⡀⠀⠀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⣠⠞⠁⠀⠀⠀⠀⠀⠀⠀⠈⠙⢦⡀⠀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⡼⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢳⡀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⢸⠁⠀⠀⣠⠖⠛⠛⠲⢤⠀⠀⠀⣰⠚⠛⢷⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⣿⠀⠀⣸⠃⠀⠀⢀⣀⠈⢧⣠⣤⣯⢠⣤⠘⣆⠀⠀⠀
+⠀⠀⠀⠀⠀⣿⠀⠀⡇⠀⠀⠀⠻⠟⠠⣏⣀⣀⣨⡇⠉⢀⣿⠀⠀⠀
+⠀⠀⠀⠀⢀⡟⠀⠀⠹⡄⠀⠀⠀⠀⠀⠉⠑⠚⠉⠀⣠⡞⢿⠀⠀⠀
+⠀⠀⠀⢀⡼⠁⠀⠀⠀⠙⠳⢤⡄⠀⠀⠀⠀⠀⠀⠀⠁⠙⢦⠳⣄⠀
+⠀⠀⢀⡾⠁⠀⠀⠀⠀⠀⠤⣏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⠃⠙⡆
+⠀⠀⣼⠁⠀⠀⠀⠀⠀⠀⠀⠈⠳⣄⠀⠀⠀⠀⠀⠀⠀⢠⡏⠀⠀⡇
+⠀⠀⣏⠀⠀⠀⠀⠲⣄⡀⠀⠀⠀⠸⡄⠀⠀⠀⠀⠀⠀⢸⠀⢀⡼⠁
+⢀⡴⢿⠀⠀⠀⠀⠀⢸⠟⢦⡀⠀⢀⡇⠀⠀⠀⠀⠀⠀⠘⠗⣿⠁⠀
+⠸⣦⡘⣦⠀⠀⠀⠀⣸⣄⠀⡉⠓⠚⠀⠀⠀⠀⠀⠀⠀⠀⡴⢹⣦⡀
+⠀⠀⠉⠛⠳⢤⣴⠾⠁⠈⠟⠉⣇⠀⠀⠀⠀⠀⠀⠀⣠⠞⠁⣠⠞⠁
+⠀⠀⠀⠀⠀⠀⠙⢧⣀⠀⠀⣠⠏⠀⠀⢀⣀⣠⠴⠛⠓⠚⠋⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠋⠉⠉⠉⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀
diff --git a/dots/zsh/.config/zsh/greetings/00_art/puppy b/dots/zsh/.config/zsh/greetings/00_art/puppy
new file mode 100644
index 0000000..c4d7fbb
--- /dev/null
+++ b/dots/zsh/.config/zsh/greetings/00_art/puppy
@@ -0,0 +1,10 @@
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣄⢀⡀⠀⠀⠀⠀
+⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⣿⣿⡿⠀⠀⠀⠀
+⠀⠀⠀⠀⣀⣀⣤⠖⠛⠉⠉⠉⠉⠉⠙⠒⠦⣿⣏⣀⠀⠀⠀⠀
+⠀⠀⣠⠞⠁⠀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢵⡄⠀⠀
+⠀⢰⣯⠀⠀⢀⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠀⠀⣿⠀⠀
+⠀⠈⣇⢀⢠⠇⠀⣶⡶⠄⠀⠀⠀⢠⣶⡶⠀⠀⣸⣀⣼⠟⠀⠀
+⠀⠀⠙⠛⠾⡆⠀⠙⠛⠃⠀⠀⠀⠀⠙⠋⠀⠀⣹⠟⠁⠀⠀⠀
+⢀⡴⠚⠉⠛⢿⠀⠀⠀⠀⢿⣿⠆⠀⠀⠀⠀⢀⣿⠋⠉⠉⢳⡄
+⢾⡀⡄⠀⣄⡼⠻⢧⠤⣤⠤⠤⣤⣠⣦⣾⠶⠞⢿⣤⡄⣠⣀⡷
+⠈⠙⠛⠋⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠉⠀ \ No newline at end of file
diff --git a/dots/zsh/.config/zsh/greetings/00_art/totoro b/dots/zsh/.config/zsh/greetings/00_art/totoro
new file mode 100644
index 0000000..9a1ba92
--- /dev/null
+++ b/dots/zsh/.config/zsh/greetings/00_art/totoro
@@ -0,0 +1,13 @@
+⠀⠀⠀⠀⣶⣄⠀⠀⠀⠀⠀⠀⢀⣶⡆⠀⠀⠀
+⠀⠀⠀⢸⣿⣿⡆⠀⠀⠀⠀⢀⣾⣿⡇⠀⠀⠀
+⠀⠀⠀⠘⣿⣿⣿⠀⠀⠀⠀⢸⣿⣿⡇⠀⠀⠀
+⠀⠀⠀⠀⢿⣿⣿⣤⣤⣤⣤⣼⣿⡿⠃⠀⠀⠀
+⠀⠀⠀⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣆⠀⠀⠀
+⠀⠀⢠⣿⡃⣦⢹⣿⣟⣙⣿⣿⠰⡀⣿⣇⠀⠀
+⠠⠬⣿⣿⣷⣶⣿⣿⣿⣿⣿⣿⣷⣾⣿⣿⡭⠤
+⠀⣼⣿⣿⣿⣿⠿⠛⠛⠛⠛⠻⢿⣿⣿⣿⣿⡀
+⢰⣿⣿⣿⠋⠀⠀⠀⢀⣀⠀⠀⠀⠉⢿⣿⣿⣧
+⢸⣿⣿⠃⠜⠛⠂⠀⠋⠉⠃⠐⠛⠻⠄⢿⣿⣿
+⢸⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿
+⠘⣿⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⣿⡏
+⠀⠈⠻⠿⣤⣀⡀⠀⠀⠀⠀⠀⣀⣠⠾⠟⠋⠀ \ No newline at end of file
diff --git a/dots/zsh/.config/zsh/greetings/01_prompts/aww_motivation_lost b/dots/zsh/.config/zsh/greetings/01_prompts/aww_motivation_lost
new file mode 100644
index 0000000..59aeae6
--- /dev/null
+++ b/dots/zsh/.config/zsh/greetings/01_prompts/aww_motivation_lost
@@ -0,0 +1 @@
+404: motivation not found~ try again (︶︹︶)
diff --git a/dots/zsh/.config/zsh/greetings/01_prompts/bashful b/dots/zsh/.config/zsh/greetings/01_prompts/bashful
new file mode 100644
index 0000000..5a9bf7e
--- /dev/null
+++ b/dots/zsh/.config/zsh/greetings/01_prompts/bashful
@@ -0,0 +1 @@
+lil shell says hai~ (,,>﹏<,,)
diff --git a/dots/zsh/.config/zsh/greetings/01_prompts/bby b/dots/zsh/.config/zsh/greetings/01_prompts/bby
new file mode 100644
index 0000000..b0378bb
--- /dev/null
+++ b/dots/zsh/.config/zsh/greetings/01_prompts/bby
@@ -0,0 +1 @@
+welcome back bby, whatcha codin~? ◝(˶˃ ᵕ ˂˶) ◜ ♡
diff --git a/dots/zsh/.config/zsh/greetings/01_prompts/bot b/dots/zsh/.config/zsh/greetings/01_prompts/bot
new file mode 100644
index 0000000..9f1bfe5
--- /dev/null
+++ b/dots/zsh/.config/zsh/greetings/01_prompts/bot
@@ -0,0 +1 @@
+beep boop i’m ur smol shell bot~ (≧ ◡ ≦)
diff --git a/dots/zsh/.config/zsh/greetings/01_prompts/break_stuff b/dots/zsh/.config/zsh/greetings/01_prompts/break_stuff
new file mode 100644
index 0000000..38fba6b
--- /dev/null
+++ b/dots/zsh/.config/zsh/greetings/01_prompts/break_stuff
@@ -0,0 +1 @@
+──⋆⋅☆⋅⋆── what are u gonna break today? ──⋆⋅☆⋅⋆──
diff --git a/dots/zsh/.config/zsh/greetings/01_prompts/compiling_feelings b/dots/zsh/.config/zsh/greetings/01_prompts/compiling_feelings
new file mode 100644
index 0000000..beeb049
--- /dev/null
+++ b/dots/zsh/.config/zsh/greetings/01_prompts/compiling_feelings
@@ -0,0 +1 @@
+current mood: compiling feelings... (っ´ω `)ノ(╥ ω ╥ )
diff --git a/dots/zsh/.config/zsh/greetings/01_prompts/crashin b/dots/zsh/.config/zsh/greetings/01_prompts/crashin
new file mode 100644
index 0000000..78ce202
--- /dev/null
+++ b/dots/zsh/.config/zsh/greetings/01_prompts/crashin
@@ -0,0 +1 @@
+lowkey bashin’ and highkey crashin~ (∩^o^)⊃━☆゚.*・。゚
diff --git a/dots/zsh/.config/zsh/greetings/01_prompts/desu b/dots/zsh/.config/zsh/greetings/01_prompts/desu
new file mode 100644
index 0000000..210ca3c
--- /dev/null
+++ b/dots/zsh/.config/zsh/greetings/01_prompts/desu
@@ -0,0 +1 @@
+terminal-chan desu~ ( ^・ω・^ )
diff --git a/dots/zsh/.config/zsh/greetings/01_prompts/hacker_friend b/dots/zsh/.config/zsh/greetings/01_prompts/hacker_friend
new file mode 100644
index 0000000..8daadee
--- /dev/null
+++ b/dots/zsh/.config/zsh/greetings/01_prompts/hacker_friend
@@ -0,0 +1 @@
+hewwwooo hacker friend~ ( ˶ˆᗜ ˆ˵ )͜♡ ready 2 typey type?
diff --git a/dots/zsh/.config/zsh/greetings/01_prompts/hai b/dots/zsh/.config/zsh/greetings/01_prompts/hai
new file mode 100644
index 0000000..487c866
--- /dev/null
+++ b/dots/zsh/.config/zsh/greetings/01_prompts/hai
@@ -0,0 +1 @@
+ahh!! it’s you again~ kyaaa~!! (,,> ᴗ <,,)
diff --git a/dots/zsh/.config/zsh/greetings/01_prompts/input_output_love b/dots/zsh/.config/zsh/greetings/01_prompts/input_output_love
new file mode 100644
index 0000000..9d3964d
--- /dev/null
+++ b/dots/zsh/.config/zsh/greetings/01_prompts/input_output_love
@@ -0,0 +1 @@
+input accepted, output is love (´。• ω •。) ♡`
diff --git a/dots/zsh/.config/zsh/greetings/01_prompts/love_letter b/dots/zsh/.config/zsh/greetings/01_prompts/love_letter
new file mode 100644
index 0000000..b2556fe
--- /dev/null
+++ b/dots/zsh/.config/zsh/greetings/01_prompts/love_letter
@@ -0,0 +1 @@
+shell prompt... or love letter? (⸝⸝๑﹏๑⸝⸝)
diff --git a/dots/zsh/.config/zsh/greetings/01_prompts/online b/dots/zsh/.config/zsh/greetings/01_prompts/online
new file mode 100644
index 0000000..0201fde
--- /dev/null
+++ b/dots/zsh/.config/zsh/greetings/01_prompts/online
@@ -0,0 +1 @@
+system online... awaiting ur magic~ ૮ ˶ᵔ ᵕ ᵔ˶ ა
diff --git a/dots/zsh/.config/zsh/greetings/01_prompts/production b/dots/zsh/.config/zsh/greetings/01_prompts/production
new file mode 100644
index 0000000..4deab12
--- /dev/null
+++ b/dots/zsh/.config/zsh/greetings/01_prompts/production
@@ -0,0 +1 @@
+plz don't break the server... or do, whatever ( ¬ ⤙ ¬ )
diff --git a/dots/zsh/.config/zsh/greetings/01_prompts/sammich b/dots/zsh/.config/zsh/greetings/01_prompts/sammich
new file mode 100644
index 0000000..f22df0a
--- /dev/null
+++ b/dots/zsh/.config/zsh/greetings/01_prompts/sammich
@@ -0,0 +1 @@
+sudo make me a sandwich? (・∀・) 🥪 ✧₊˚ʚ
diff --git a/dots/zsh/.config/zsh/greetings/01_prompts/shell_yeah b/dots/zsh/.config/zsh/greetings/01_prompts/shell_yeah
new file mode 100644
index 0000000..7826b64
--- /dev/null
+++ b/dots/zsh/.config/zsh/greetings/01_prompts/shell_yeah
@@ -0,0 +1 @@
+shell yeah!! let’s do some scripts~ (ノ≧ ڡ ≦)
diff --git a/dots/zsh/.config/zsh/greetings/01_prompts/time_to_hack b/dots/zsh/.config/zsh/greetings/01_prompts/time_to_hack
new file mode 100644
index 0000000..afc0cb6
--- /dev/null
+++ b/dots/zsh/.config/zsh/greetings/01_prompts/time_to_hack
@@ -0,0 +1 @@
+*clickity clack* time 2 hack~ (。•̀ᴗ-)✧
diff --git a/dots/zsh/.config/zsh/greetings/01_prompts/typing b/dots/zsh/.config/zsh/greetings/01_prompts/typing
new file mode 100644
index 0000000..6d4c0d0
--- /dev/null
+++ b/dots/zsh/.config/zsh/greetings/01_prompts/typing
@@ -0,0 +1 @@
+typing together forever~~ (づ。◕‿‿◕。)づ
diff --git a/dots/zsh/.config/zsh/greetings/01_prompts/yeehaw b/dots/zsh/.config/zsh/greetings/01_prompts/yeehaw
new file mode 100644
index 0000000..53eb098
--- /dev/null
+++ b/dots/zsh/.config/zsh/greetings/01_prompts/yeehaw
@@ -0,0 +1 @@
+rootin' and tootin' with sudo~ yeehaw~ (⌒ ▽ ⌒) ☆
diff --git a/dots/zsh/.config/zsh/linux/init.zsh b/dots/zsh/.config/zsh/linux/init.zsh
new file mode 100755
index 0000000..49db77e
--- /dev/null
+++ b/dots/zsh/.config/zsh/linux/init.zsh
@@ -0,0 +1,6 @@
+#!/bin/zsh
+
+#-- <gpg> --
+export PINENTRY_USER_DATA="PINENTRY_USE_QT"
+#-- </gpg> --
+
diff --git a/dots/zsh/.config/zsh/osx/armin.zsh b/dots/zsh/.config/zsh/osx/armin.zsh
new file mode 100755
index 0000000..cc54a2e
--- /dev/null
+++ b/dots/zsh/.config/zsh/osx/armin.zsh
@@ -0,0 +1,3 @@
+#!/bin/zsh
+
+
diff --git a/dots/zsh/.config/zsh/osx/bcd074b37296.zsh b/dots/zsh/.config/zsh/osx/bcd074b37296.zsh
new file mode 120000
index 0000000..f99643e
--- /dev/null
+++ b/dots/zsh/.config/zsh/osx/bcd074b37296.zsh
@@ -0,0 +1 @@
+work.zsh \ No newline at end of file
diff --git a/dots/zsh/.config/zsh/osx/init.zsh b/dots/zsh/.config/zsh/osx/init.zsh
new file mode 100755
index 0000000..0cb288d
--- /dev/null
+++ b/dots/zsh/.config/zsh/osx/init.zsh
@@ -0,0 +1,13 @@
+#!/bin/zsh
+
+#-- <brew> --
+# HOMEBREW_PREFIX, MANPATH, INFOPATH, etc.
+eval "$(/opt/homebrew/bin/brew shellenv)"
+
+# use gnu coreutils
+export PATH="$HOMEBREW_PREFIX/opt/coreutils/libexec/gnubin:$PATH"
+#-- </brew> --
+
+#-- <gpg> --
+export PINENTRY_USER_DATA="PINENTRY_USE_MAC"
+#-- </gpg> --
diff --git a/dots/zsh/.config/zsh/osx/work.zsh b/dots/zsh/.config/zsh/osx/work.zsh
new file mode 100755
index 0000000..6fff676
--- /dev/null
+++ b/dots/zsh/.config/zsh/osx/work.zsh
@@ -0,0 +1,29 @@
+#!/bin/zsh
+
+#-- <amzn> --
+export AWS_REGION=us-west-2
+
+# finch
+export DOCKER_HOST=unix:///Applications/Finch/lima/data/finch/sock/finch.sock
+
+# bb ...
+export PATH="$PATH:$HOME/.toolbox/bin"
+alias bb='brazil-build'
+alias bba='brazil-build apollo-pkg'
+alias bre='brazil-runtime-exec'
+alias brc='brazil-recursive-cmd'
+alias bws='brazil ws'
+alias bwsuse='bws use --gitMode -p'
+alias bwscreate='bws create -n'
+alias brc=brazil-recursive-cmd
+alias bbr='brc brazil-build'
+alias bball='brc --allPackages'
+alias bbb='brc --allPackages brazil-build'
+alias bbra='bbr apollo-pkg'
+alias bbcr='bb && cr'
+alias brazil-recursive-cmd='brazil-recursive-cmd-parallel'
+
+# run java repl with class path of package! :D
+alias jshell='jshell --class-path "`brazil-path build.classpath`:`brazil-path run.classpath`"'
+#-- </amzn> --
+
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/.editorconfig b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/.editorconfig
new file mode 100644
index 0000000..ddabb17
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/.editorconfig
@@ -0,0 +1,18 @@
+[*]
+charset = utf-8
+end_of_line = lf
+insert_final_newline = true
+trim_trailing_whitespace = true
+indent_style = tab
+indent_size = 4
+
+[*.md]
+indent_style = space
+
+[*.rb]
+indent_style = space
+indent_size = 2
+
+[*.yml]
+indent_style = space
+indent_size = 2
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/.github/ISSUE_TEMPLATE/bug-report.md b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/.github/ISSUE_TEMPLATE/bug-report.md
new file mode 100644
index 0000000..7663df6
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/.github/ISSUE_TEMPLATE/bug-report.md
@@ -0,0 +1,36 @@
+---
+name: Bug report
+about: Create a report to help us improve
+title: ''
+labels: bug
+assignees: ''
+
+---
+
+### Describe the bug
+<!-- A clear and concise description of what the bug is. -->
+
+### To Reproduce
+Steps to reproduce the behavior:
+
+<!-- If you are not able to reproduce it by running `zsh -df` and sourcing the plugin manually, it means there that the issue is caused by something in your local config file(s). Temporarily comment out or remove sections of your config and restart `zsh` until you narrow down exactly what is causing the issue. -->
+
+```sh
+% zsh -df
+% source path/to/zsh-autosuggestions.zsh
+% ... # what do you do to reproduce?
+```
+
+### Expected behavior
+<!-- A clear and concise description of what you expected to happen. -->
+
+### Screenshots
+<!-- If applicable, add screenshots to help explain your problem. -->
+
+### Desktop
+ - OS + distribution: <!-- e.g. Arch Linux 2019.07.01 -->
+ - Zsh version: <!-- `echo $ZSH_VERSION` -->
+ - Plugin version: <!-- or git commit hash if installed via git -->
+
+### Additional context
+<!-- Add any other context about the problem here. -->
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/.github/ISSUE_TEMPLATE/feature_request.md b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/.github/ISSUE_TEMPLATE/feature_request.md
new file mode 100644
index 0000000..5874625
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/.github/ISSUE_TEMPLATE/feature_request.md
@@ -0,0 +1,20 @@
+---
+name: Feature request
+about: Suggest an idea for this project
+title: ''
+labels: enhancement
+assignees: ''
+
+---
+
+### Is your feature request related to a problem? Please describe.
+<!-- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -->
+
+### Describe the solution you'd like
+<!-- A clear and concise description of what you want to happen. -->
+
+### Describe alternatives you've considered
+<!-- A clear and concise description of any alternative solutions or features you've considered. -->
+
+### Additional context
+<!-- Add any other context or screenshots about the feature request here. -->
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/.github/workflows/integration.yml b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/.github/workflows/integration.yml
new file mode 100644
index 0000000..ec7bc75
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/.github/workflows/integration.yml
@@ -0,0 +1,51 @@
+on: [push, pull_request]
+concurrency:
+ group: ${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: true
+env:
+ IMAGE_CACHE_PATH: /tmp/.image-cache
+ IMAGE_CACHE_NAME: zsh-autosuggestions-test
+jobs:
+ determine-versions:
+ runs-on: ubuntu-22.04
+ outputs:
+ versions: ${{ steps.set-versions.outputs.versions }}
+ steps:
+ - uses: actions/checkout@v3
+ - id: set-versions
+ run: |
+ echo "versions=$(
+ grep "^[^#]" ZSH_VERSIONS \
+ | sed -E 's/(^|$)/"/g' \
+ | paste -sd ',' - \
+ | sed -e 's/^/[/' -e 's/$/]/'
+ )" >> $GITHUB_OUTPUT
+ test:
+ needs: determine-versions
+ runs-on: ubuntu-22.04
+ strategy:
+ matrix:
+ version: ${{ fromJson(needs.determine-versions.outputs.versions) }}
+ steps:
+ - uses: actions/checkout@v3
+ - name: Docker image cache
+ id: image-cache
+ uses: actions/cache@v3
+ with:
+ path: ${{ env.IMAGE_CACHE_PATH }}
+ key: image-cache-${{ matrix.version }}-${{ hashFiles('Dockerfile', 'install_test_zsh.sh', 'Gemfile.lock') }}
+ - name: Load cached docker image if available
+ if: ${{ steps.image-cache.outputs.cache-hit }}
+ run: gunzip < $IMAGE_CACHE_PATH/$IMAGE_CACHE_NAME.tar.gz | docker load
+ - name: Build the docker image if necessary
+ if: ${{ !steps.image-cache.outputs.cache-hit }}
+ run: |
+ docker build --build-arg TEST_ZSH_VERSION=${{ matrix.version }} -t $IMAGE_CACHE_NAME .
+ mkdir -p $IMAGE_CACHE_PATH
+ docker save $IMAGE_CACHE_NAME | gzip > $IMAGE_CACHE_PATH/$IMAGE_CACHE_NAME.tar.gz
+ - name: Run the tests
+ run: |
+ docker run --rm \
+ -v $PWD:/zsh-autosuggestions \
+ $IMAGE_CACHE_NAME \
+ make test
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/.gitignore b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/.gitignore
new file mode 100644
index 0000000..d8decde
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/.gitignore
@@ -0,0 +1,2 @@
+# zsh word code files
+*.zwc
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/.rspec b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/.rspec
new file mode 100644
index 0000000..43ae203
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/.rspec
@@ -0,0 +1,3 @@
+--color
+--require spec_helper
+--format documentation
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/.rubocop.yml b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/.rubocop.yml
new file mode 100644
index 0000000..97facac
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/.rubocop.yml
@@ -0,0 +1,30 @@
+# Rails:
+# Enabled: true
+
+AllCops:
+ TargetRubyVersion: 2.3
+ Include:
+ - '**/Rakefile'
+ - '**/config.ru'
+ - '**/Gemfile'
+
+Metrics/LineLength:
+ Max: 120
+
+Style/Documentation:
+ Enabled: false
+
+Style/DotPosition:
+ EnforcedStyle: trailing
+
+Style/FrozenStringLiteralComment:
+ Enabled: false
+
+Style/Lambda:
+ Enabled: false
+
+Style/MultilineMethodCallIndentation:
+ EnforcedStyle: indented
+
+Style/TrailingUnderscoreVariable:
+ Enabled: false
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/.ruby-version b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/.ruby-version
new file mode 100644
index 0000000..aedc15b
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/.ruby-version
@@ -0,0 +1 @@
+2.5.3
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/CHANGELOG.md b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/CHANGELOG.md
new file mode 100644
index 0000000..30c7735
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/CHANGELOG.md
@@ -0,0 +1,124 @@
+# Changelog
+
+## v0.7.1
+- Clear POSTDISPLAY instead of unsetting (#634)
+- Always reset async file descriptor after consuming it (#630)
+- Always use builtin `exec` (#628)
+- Add `history-beginning-search-*-end` widgets to clear widget list (#619)
+- Switch CI from Circle CI to GitHub Actions
+
+## v0.7.0
+- Enable asynchronous mode by default (#498)
+- No longer wrap user widgets starting with `autosuggest-` prefix (#496)
+- Fix a bug wrapping widgets that modify the buffer (#541)
+
+
+## v0.6.4
+- Fix `vi-forward-char` triggering a bell when using it to accept a suggestion (#488)
+- New configuration option to skip completion suggestions when buffer matches a pattern (#487)
+- New configuration option to ignore history entries matching a pattern (#456)
+
+## v0.6.3
+- Fixed bug moving cursor to end of buffer after accepting suggestion (#453)
+
+## v0.6.2
+- Fixed bug deleting the last character in the buffer in vi mode (#450)
+- Degrade gracefully when user doesn't have `zsh/system` module installed (#447)
+
+## v0.6.1
+- Fixed bug occurring when `_complete` had been aliased (#443)
+
+## v0.6.0
+- Added `completion` suggestion strategy powered by completion system (#111)
+- Allow setting `ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE` to an empty string (#422)
+- Don't fetch suggestions after copy-earlier-word (#439)
+- Allow users to unignore zle-\* widgets (e.g. zle-line-init) (#432)
+
+
+## v0.5.2
+- Allow disabling automatic widget re-binding for better performance (#418)
+- Fix async suggestions when `SH_WORD_SPLIT` is set
+- Refactor async mode to use process substitution instead of zpty (#417)
+
+## v0.5.1
+- Speed up widget rebinding (#413)
+- Clean up global variable creations (#403)
+- Respect user's set options when running original widget (#402)
+
+## v0.5.0
+- Don't overwrite config with default values (#335)
+- Support fallback strategies by supplying array to suggestion config var
+- Rename "default" suggestion strategy to "history" to name it based on what it actually does
+- Reset opts in some functions affected by `GLOB_SUBST` (#334)
+- Support widgets starting with dashes (ex: `-a-widget`) (#337)
+- Skip async tests in zsh versions less than 5.0.8 because of reliability issues
+- Fix handling of newline + carriage return in async pty (#333)
+
+
+## v0.4.3
+- Avoid bell when accepting suggestions with `autosuggest-accept` (#228)
+- Don't fetch suggestions after [up,down]-line-or-beginning-search (#227, #241)
+- We are now running CI against new 5.5.1 version
+- Fix partial-accept in vi mode (#188)
+- Fix suggestion disappearing on fast movement after switching to `vicmd` mode (#290)
+- Fix issue rotating through kill ring with `yank-pop` (#301)
+- Fix issue creating new pty for async mode when previous pty is not properly cleaned up (#249)
+
+## v0.4.2
+- Fix bug in zsh versions older than 5.0.8 (#296)
+- Officially support back to zsh v4.3.11
+
+## v0.4.1
+- Switch to [[ and (( conditionals instead of [ (#257)
+- Avoid warnnestedvar warnings with `typeset -g` (#275)
+- Replace tabs with spaces in yaml (#268)
+- Clean up and fix escaping of special characters (#267)
+- Add `emacs-forward-word` to default list of partial accept widgets (#246)
+
+## v0.4.0
+- High-level integration tests using RSpec and tmux
+- Add continuous integration with Circle CI
+- Experimental support for asynchronous suggestions (#170)
+- Fix problems with multi-line suggestions (#225)
+- Optimize case where manually typing in suggestion
+- Avoid wrapping any zle-\* widgets (#206)
+- Remove support for deprecated options from v0.0.x
+- Handle history entries that begin with dashes
+- Gracefully handle being sourced multiple times (#126)
+- Add enable/disable/toggle widgets to disable/enable suggestions (#219)
+
+
+## v0.3.3
+- Switch from $history array to fc builtin for better performance with large HISTFILEs (#164)
+- Fix tilde handling when extended_glob is set (#168)
+- Add config option for maximum buffer length to fetch suggestions for (#178)
+- Add config option for list of widgets to ignore (#184)
+- Don't fetch a new suggestion unless a modification widget actually modifies the buffer (#183)
+
+## v0.3.2
+- Test runner now supports running specific tests and choosing zsh binary
+- Return code from original widget is now correctly passed through (#135)
+- Add `vi-add-eol` to list of accept widgets (#143)
+- Escapes widget names within evals to fix problems with irregular widget names (#152)
+- Plugin now clears suggestion while within a completion menu (#149)
+- .plugin file no longer relies on symbolic link support, fixing issues on Windows (#156)
+
+## v0.3.1
+
+- Fixes issue with `vi-next-char` not accepting suggestion (#137).
+- Fixes global variable warning when WARN_CREATE_GLOBAL option enabled (#133).
+- Split out a separate test file for each widget.
+
+## v0.3.0
+
+- Adds `autosuggest-execute` widget (PR #124).
+- Adds concept of suggestion "strategies" for different ways of fetching suggestions.
+- Adds "match_prev_cmd" strategy (PR #131).
+- Uses git submodules for testing dependencies.
+- Lots of test cleanup.
+- Various bug fixes for zsh 5.0.x and `sh_word_split` option.
+
+
+## v0.2.17
+
+Start of changelog.
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/DESCRIPTION b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/DESCRIPTION
new file mode 100644
index 0000000..b69200f
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/DESCRIPTION
@@ -0,0 +1 @@
+Fish-like fast/unobtrusive autosuggestions for zsh.
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/Dockerfile b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/Dockerfile
new file mode 100644
index 0000000..f5dd3c4
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/Dockerfile
@@ -0,0 +1,21 @@
+FROM ruby:2.5.3-alpine
+
+ARG TEST_ZSH_VERSION
+RUN : "${TEST_ZSH_VERSION:?}"
+
+RUN apk add --no-cache autoconf
+RUN apk add --no-cache libtool
+RUN apk add --no-cache libcap-dev
+RUN apk add --no-cache pcre-dev
+RUN apk add --no-cache curl
+RUN apk add --no-cache build-base
+RUN apk add --no-cache ncurses-dev
+RUN apk add --no-cache tmux
+
+WORKDIR /zsh-autosuggestions
+
+ADD install_test_zsh.sh ./
+RUN ./install_test_zsh.sh
+
+ADD Gemfile Gemfile.lock ./
+RUN bundle install
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/Gemfile b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/Gemfile
new file mode 100644
index 0000000..8b5deec
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/Gemfile
@@ -0,0 +1,5 @@
+source 'https://rubygems.org'
+
+gem 'rspec'
+gem 'rspec-wait'
+gem 'pry-byebug'
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/Gemfile.lock b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/Gemfile.lock
new file mode 100644
index 0000000..63ee778
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/Gemfile.lock
@@ -0,0 +1,41 @@
+GEM
+ remote: https://rubygems.org/
+ specs:
+ byebug (9.0.5)
+ coderay (1.1.1)
+ diff-lcs (1.3)
+ method_source (0.8.2)
+ pry (0.10.4)
+ coderay (~> 1.1.0)
+ method_source (~> 0.8.1)
+ slop (~> 3.4)
+ pry-byebug (3.4.0)
+ byebug (~> 9.0)
+ pry (~> 0.10)
+ rspec (3.5.0)
+ rspec-core (~> 3.5.0)
+ rspec-expectations (~> 3.5.0)
+ rspec-mocks (~> 3.5.0)
+ rspec-core (3.5.4)
+ rspec-support (~> 3.5.0)
+ rspec-expectations (3.5.0)
+ diff-lcs (>= 1.2.0, < 2.0)
+ rspec-support (~> 3.5.0)
+ rspec-mocks (3.5.0)
+ diff-lcs (>= 1.2.0, < 2.0)
+ rspec-support (~> 3.5.0)
+ rspec-support (3.5.0)
+ rspec-wait (0.0.9)
+ rspec (>= 3, < 4)
+ slop (3.6.0)
+
+PLATFORMS
+ ruby
+
+DEPENDENCIES
+ pry-byebug
+ rspec
+ rspec-wait
+
+BUNDLED WITH
+ 1.13.6
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/INSTALL.md b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/INSTALL.md
new file mode 100644
index 0000000..725a8f8
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/INSTALL.md
@@ -0,0 +1,81 @@
+# Installation
+
+* [Packages](#packages)
+* [Antigen](#antigen)
+* [Oh My Zsh](#oh-my-zsh)
+* [HomeBrew](#homebrew)
+* [Manual](#manual-git-clone)
+
+## Packages
+
+| System | Package |
+| ------------- | ------------- |
+| Alpine Linux | [zsh-autosuggestions](https://pkgs.alpinelinux.org/packages?name=zsh-autosuggestions) |
+| Debian / Ubuntu | [zsh-autosuggestions OBS repository](https://software.opensuse.org/download.html?project=shells%3Azsh-users%3Azsh-autosuggestions&package=zsh-autosuggestions) |
+| Fedora / CentOS / RHEL / Scientific Linux | [zsh-autosuggestions OBS repository](https://software.opensuse.org/download.html?project=shells%3Azsh-users%3Azsh-autosuggestions&package=zsh-autosuggestions) |
+| OpenSUSE / SLE | [zsh-autosuggestions OBS repository](https://software.opensuse.org/download.html?project=shells%3Azsh-users%3Azsh-autosuggestions&package=zsh-autosuggestions) |
+| Arch Linux / Manjaro / Antergos / Hyperbola | [zsh-autosuggestions](https://www.archlinux.org/packages/zsh-autosuggestions), [zsh-autosuggestions-git](https://aur.archlinux.org/packages/zsh-autosuggestions-git) |
+| NixOS | [zsh-autosuggestions](https://github.com/NixOS/nixpkgs/blob/master/pkgs/by-name/zs/zsh-autosuggestions/package.nix) |
+| Void Linux | [zsh-autosuggestions](https://github.com/void-linux/void-packages/blob/master/srcpkgs/zsh-autosuggestions/template) |
+| Mac OS | [homebrew](https://github.com/Homebrew/homebrew-core/blob/master/Formula/z/zsh-autosuggestions.rb) |
+| NetBSD | [pkgsrc](http://ftp.netbsd.org/pub/pkgsrc/current/pkgsrc/shells/zsh-autosuggestions/README.html) |
+
+## Antigen
+
+1. Add the following to your `.zshrc`:
+
+ ```sh
+ antigen bundle zsh-users/zsh-autosuggestions
+ ```
+
+2. Start a new terminal session.
+
+## Oh My Zsh
+
+1. Clone this repository into `$ZSH_CUSTOM/plugins` (by default `~/.oh-my-zsh/custom/plugins`)
+
+ ```sh
+ git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
+ ```
+
+2. Add the plugin to the list of plugins for Oh My Zsh to load (inside `~/.zshrc`):
+
+ ```sh
+ plugins=(
+ # other plugins...
+ zsh-autosuggestions
+ )
+ ```
+
+3. Start a new terminal session.
+
+## Homebrew
+
+1. Install command:
+ ```sh
+ brew install zsh-autosuggestions
+ ```
+
+2. To activate the autosuggestions, add the following at the end of your .zshrc:
+
+ ```sh
+ source $(brew --prefix)/share/zsh-autosuggestions/zsh-autosuggestions.zsh
+ ```
+
+3. Start a new terminal session.
+
+## Manual (Git Clone)
+
+1. Clone this repository somewhere on your machine. This guide will assume `~/.zsh/zsh-autosuggestions`.
+
+ ```sh
+ git clone https://github.com/zsh-users/zsh-autosuggestions ~/.zsh/zsh-autosuggestions
+ ```
+
+2. Add the following to your `.zshrc`:
+
+ ```sh
+ source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh
+ ```
+
+3. Start a new terminal session.
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/LICENSE b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/LICENSE
new file mode 100644
index 0000000..7ea78cc
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/LICENSE
@@ -0,0 +1,23 @@
+Copyright (c) 2013 Thiago de Arruda
+Copyright (c) 2016-2021 Eric Freese
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/Makefile b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/Makefile
new file mode 100644
index 0000000..6f5431e
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/Makefile
@@ -0,0 +1,35 @@
+SRC_DIR := ./src
+
+SRC_FILES := \
+ $(SRC_DIR)/config.zsh \
+ $(SRC_DIR)/util.zsh \
+ $(SRC_DIR)/bind.zsh \
+ $(SRC_DIR)/highlight.zsh \
+ $(SRC_DIR)/widgets.zsh \
+ $(SRC_DIR)/strategies/*.zsh \
+ $(SRC_DIR)/fetch.zsh \
+ $(SRC_DIR)/async.zsh \
+ $(SRC_DIR)/start.zsh
+
+HEADER_FILES := \
+ DESCRIPTION \
+ URL \
+ VERSION \
+ LICENSE
+
+PLUGIN_TARGET := zsh-autosuggestions.zsh
+
+all: $(PLUGIN_TARGET)
+
+$(PLUGIN_TARGET): $(HEADER_FILES) $(SRC_FILES)
+ cat $(HEADER_FILES) | sed -e 's/^/# /g' > $@
+ cat $(SRC_FILES) >> $@
+
+.PHONY: clean
+clean:
+ rm $(PLUGIN_TARGET)
+
+.PHONY: test
+test: all
+ @test -n "$$TEST_ZSH_BIN" && echo "Testing zsh binary: $(TEST_ZSH_BIN)" || true
+ bundle exec rspec $(TESTS)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/README.md b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/README.md
new file mode 100644
index 0000000..a8c1b6c
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/README.md
@@ -0,0 +1,188 @@
+# zsh-autosuggestions
+
+_[Fish](http://fishshell.com/)-like fast/unobtrusive autosuggestions for zsh._
+
+It suggests commands as you type based on history and completions.
+
+Requirements: Zsh v4.3.11 or later
+
+[![Chat on Gitter](https://img.shields.io/gitter/room/zsh-users/zsh-autosuggestions.svg)](https://gitter.im/zsh-users/zsh-autosuggestions)
+
+<a href="https://asciinema.org/a/37390" target="_blank"><img src="https://asciinema.org/a/37390.png" width="400" /></a>
+
+
+## Installation
+
+See [INSTALL.md](INSTALL.md).
+
+
+## Usage
+
+As you type commands, you will see a completion offered after the cursor in a muted gray color. This color can be changed by setting the `ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE` variable. See [configuration](#configuration).
+
+If you press the <kbd>→</kbd> key (`forward-char` widget) or <kbd>End</kbd> (`end-of-line` widget) with the cursor at the end of the buffer, it will accept the suggestion, replacing the contents of the command line buffer with the suggestion.
+
+If you invoke the `forward-word` widget, it will partially accept the suggestion up to the point that the cursor moves to.
+
+
+## Configuration
+
+You may want to override the default global config variables. Default values of these variables can be found [here](src/config.zsh).
+
+**Note:** If you are using Oh My Zsh, you can put this configuration in a file in the `$ZSH_CUSTOM` directory. See their comments on [overriding internals](https://github.com/robbyrussell/oh-my-zsh/wiki/Customization#overriding-internals).
+
+
+### Suggestion Highlight Style
+
+Set `ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE` to configure the style that the suggestion is shown with. The default is `fg=8`, which will set the foreground color to color 8 from the [256-color palette](https://upload.wikimedia.org/wikipedia/commons/1/15/Xterm_256color_chart.svg). If your terminal only supports 8 colors, you will need to use a number between 0 and 7.
+
+Background color can also be set, and the suggestion can be styled bold, underlined, or standout. For example, this would show suggestions with bold, underlined, pink text on a cyan background:
+
+```sh
+ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=#ff00ff,bg=cyan,bold,underline"
+```
+
+For more info, read the Character Highlighting section of the zsh manual: `man zshzle` or [online](http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting).
+
+**Note:** Some iTerm2 users have reported [not being able to see the suggestions](https://github.com/zsh-users/zsh-autosuggestions/issues/416#issuecomment-486516333). If this affects you, the problem is likely caused by incorrect color settings. In order to correct this, go into iTerm2's setting, navigate to profile > colors and make sure that the colors for Basic Colors > Background and ANSI Colors > Bright Black are **different**.
+
+
+### Suggestion Strategy
+
+`ZSH_AUTOSUGGEST_STRATEGY` is an array that specifies how suggestions should be generated. The strategies in the array are tried successively until a suggestion is found. There are currently three built-in strategies to choose from:
+
+- `history`: Chooses the most recent match from history.
+- `completion`: Chooses a suggestion based on what tab-completion would suggest. (requires `zpty` module, which is included with zsh since 4.0.1)
+- `match_prev_cmd`: Like `history`, but chooses the most recent match whose preceding history item matches the most recently executed command ([more info](src/strategies/match_prev_cmd.zsh)). Note that this strategy won't work as expected with ZSH options that don't preserve the history order such as `HIST_IGNORE_ALL_DUPS` or `HIST_EXPIRE_DUPS_FIRST`.
+
+For example, setting `ZSH_AUTOSUGGEST_STRATEGY=(history completion)` will first try to find a suggestion from your history, but, if it can't find a match, will find a suggestion from the completion engine.
+
+
+### Widget Mapping
+
+This plugin works by triggering custom behavior when certain [zle widgets](http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Zle-Widgets) are invoked. You can add and remove widgets from these arrays to change the behavior of this plugin:
+
+- `ZSH_AUTOSUGGEST_CLEAR_WIDGETS`: Widgets in this array will clear the suggestion when invoked.
+- `ZSH_AUTOSUGGEST_ACCEPT_WIDGETS`: Widgets in this array will accept the suggestion when invoked.
+- `ZSH_AUTOSUGGEST_EXECUTE_WIDGETS`: Widgets in this array will execute the suggestion when invoked.
+- `ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS`: Widgets in this array will partially accept the suggestion when invoked.
+- `ZSH_AUTOSUGGEST_IGNORE_WIDGETS`: Widgets in this array will not trigger any custom behavior.
+
+Widgets that modify the buffer and are not found in any of these arrays will fetch a new suggestion after they are invoked.
+
+**Note:** A widget shouldn't belong to more than one of the above arrays.
+
+
+### Disabling suggestion for large buffers
+
+Set `ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE` to an integer value to disable autosuggestion for large buffers. The default is unset, which means that autosuggestion will be tried for any buffer size. Recommended value is 20.
+This can be useful when pasting large amount of text in the terminal, to avoid triggering autosuggestion for strings that are too long.
+
+### Asynchronous Mode
+
+Suggestions are fetched asynchronously by default in zsh versions 5.0.8 and greater. To disable asynchronous suggestions and fetch them synchronously instead, `unset ZSH_AUTOSUGGEST_USE_ASYNC` after sourcing the plugin.
+
+Alternatively, if you are using a version of zsh older than 5.0.8 and want to enable asynchronous mode, set the `ZSH_AUTOSUGGEST_USE_ASYNC` variable after sourcing the plugin (it can be set to anything). Note that there is [a bug](https://github.com/zsh-users/zsh-autosuggestions/issues/364#issuecomment-481423232) in versions of zsh older than 5.0.8 where <kbd>ctrl</kbd> + <kbd>c</kbd> will fail to reset the prompt immediately after fetching a suggestion asynchronously.
+
+### Disabling automatic widget re-binding
+
+Set `ZSH_AUTOSUGGEST_MANUAL_REBIND` (it can be set to anything) to disable automatic widget re-binding on each precmd. This can be a big boost to performance, but you'll need to handle re-binding yourself if any of the widget lists change or if you or another plugin wrap any of the autosuggest widgets. To re-bind widgets, run `_zsh_autosuggest_bind_widgets`.
+
+### Ignoring history suggestions that match a pattern
+
+Set `ZSH_AUTOSUGGEST_HISTORY_IGNORE` to a [glob pattern](http://zsh.sourceforge.net/Doc/Release/Expansion.html#Glob-Operators) to prevent offering suggestions for history entries that match the pattern. For example, set it to `"cd *"` to never suggest any `cd` commands from history. Or set to `"?(#c50,)"` to never suggest anything 50 characters or longer.
+
+**Note:** This only affects the `history` and `match_prev_cmd` suggestion strategies.
+
+### Skipping completion suggestions for certain cases
+
+Set `ZSH_AUTOSUGGEST_COMPLETION_IGNORE` to a [glob pattern](http://zsh.sourceforge.net/Doc/Release/Expansion.html#Glob-Operators) to prevent offering completion suggestions when the buffer matches that pattern. For example, set it to `"git *"` to disable completion suggestions for git subcommands.
+
+**Note:** This only affects the `completion` suggestion strategy.
+
+
+### Key Bindings
+
+This plugin provides a few widgets that you can use with `bindkey`:
+
+1. `autosuggest-accept`: Accepts the current suggestion.
+2. `autosuggest-execute`: Accepts and executes the current suggestion.
+3. `autosuggest-clear`: Clears the current suggestion.
+4. `autosuggest-fetch`: Fetches a suggestion (works even when suggestions are disabled).
+5. `autosuggest-disable`: Disables suggestions.
+6. `autosuggest-enable`: Re-enables suggestions.
+7. `autosuggest-toggle`: Toggles between enabled/disabled suggestions.
+
+For example, this would bind <kbd>ctrl</kbd> + <kbd>space</kbd> to accept the current suggestion.
+
+```sh
+bindkey '^ ' autosuggest-accept
+```
+
+
+## Troubleshooting
+
+If you have a problem, please search through [the list of issues on GitHub](https://github.com/zsh-users/zsh-autosuggestions/issues?q=) to see if someone else has already reported it.
+
+### Reporting an Issue
+
+Before reporting an issue, please try temporarily disabling sections of your configuration and other plugins that may be conflicting with this plugin to isolate the problem.
+
+When reporting an issue, please include:
+
+- The smallest, simplest `.zshrc` configuration that will reproduce the problem. See [this comment](https://github.com/zsh-users/zsh-autosuggestions/issues/102#issuecomment-180944764) for a good example of what this means.
+- The version of zsh you're using (`zsh --version`)
+- Which operating system you're running
+
+
+## Uninstallation
+
+1. Remove the code referencing this plugin from `~/.zshrc`.
+
+2. Remove the git repository from your hard drive
+
+ ```sh
+ rm -rf ~/.zsh/zsh-autosuggestions # Or wherever you installed
+ ```
+
+
+## Development
+
+### Build Process
+
+Edit the source files in `src/`. Run `make` to build `zsh-autosuggestions.zsh` from those source files.
+
+
+### Pull Requests
+
+Pull requests are welcome! If you send a pull request, please:
+
+- Request to merge into the `develop` branch (*NOT* `master`)
+- Match the existing coding conventions.
+- Include helpful comments to keep the barrier-to-entry low for people new to the project.
+- Write tests that cover your code as much as possible.
+
+
+### Testing
+
+Tests are written in ruby using the [`rspec`](http://rspec.info/) framework. They use [`tmux`](https://tmux.github.io/) to drive a pseudoterminal, sending simulated keystrokes and making assertions on the terminal content.
+
+Test files live in `spec/`. To run the tests, run `make test`. To run a specific test, run `TESTS=spec/some_spec.rb make test`. You can also specify a `zsh` binary to use by setting the `TEST_ZSH_BIN` environment variable (ex: `TEST_ZSH_BIN=/bin/zsh make test`).
+
+It's possible to run the tests for any supported version of zsh in a Docker image by building an image from the provided Dockerfile. To build the docker image for a specific version of zsh (where `<version>` below is substituted with the contents of a line from the [`ZSH_VERSIONS`](ZSH_VERSIONS) file), run:
+
+```sh
+docker build --build-arg TEST_ZSH_VERSION=<version> -t zsh-autosuggestions-test .
+```
+
+After building the image, run the tests via:
+
+```sh
+docker run -it -v $PWD:/zsh-autosuggestions zsh-autosuggestions-test make test
+```
+
+
+## License
+
+This project is licensed under [MIT license](http://opensource.org/licenses/MIT).
+For the full text of the license, see the [LICENSE](LICENSE) file.
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/URL b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/URL
new file mode 100644
index 0000000..4e2bd94
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/URL
@@ -0,0 +1 @@
+https://github.com/zsh-users/zsh-autosuggestions
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/VERSION b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/VERSION
new file mode 100644
index 0000000..63f2359
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/VERSION
@@ -0,0 +1 @@
+v0.7.1
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/ZSH_VERSIONS b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/ZSH_VERSIONS
new file mode 100644
index 0000000..23006db
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/ZSH_VERSIONS
@@ -0,0 +1,14 @@
+# Zsh releases to run tests against
+# See https://github.com/zsh-users/zsh/releases
+4.3.11
+5.0.2
+5.0.8
+5.1.1
+5.2
+5.3.1
+5.4.2
+5.5.1
+5.6.2
+5.7.1
+5.8.1
+5.9
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/install_test_zsh.sh b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/install_test_zsh.sh
new file mode 100755
index 0000000..6cac9f5
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/install_test_zsh.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+set -ex
+
+mkdir zsh-build
+cd zsh-build
+
+curl -L https://api.github.com/repos/zsh-users/zsh/tarball/zsh-$TEST_ZSH_VERSION | tar xz --strip=1
+
+./Util/preconfig
+./configure --enable-pcre \
+ --enable-cap \
+ --enable-multibyte \
+ --with-term-lib='ncursesw tinfo' \
+ --with-tcsetpgrp
+
+make install.bin
+make install.modules
+make install.fns
+
+cd ..
+
+rm -rf zsh-build
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/async_spec.rb b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/async_spec.rb
new file mode 100644
index 0000000..0af7232
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/async_spec.rb
@@ -0,0 +1,70 @@
+context 'with asynchronous suggestions enabled' do
+ let(:options) { ["ZSH_AUTOSUGGEST_USE_ASYNC="] }
+
+ describe '`up-line-or-beginning-search`' do
+ let(:before_sourcing) do
+ -> do
+ session.
+ run_command('autoload -U up-line-or-beginning-search').
+ run_command('zle -N up-line-or-beginning-search').
+ send_string('bindkey "').
+ send_keys('C-v').send_keys('up').
+ send_string('" up-line-or-beginning-search').
+ send_keys('enter')
+ end
+ end
+
+ it 'should show previous history entries' do
+ with_history(
+ 'echo foo',
+ 'echo bar',
+ 'echo baz'
+ ) do
+ session.clear_screen
+ 3.times { session.send_keys('up') }
+ wait_for { session.content }.to eq("echo foo")
+ end
+ end
+ end
+
+ describe '`copy-earlier-word`' do
+ let(:before_sourcing) do
+ -> do
+ session.
+ run_command('autoload -Uz copy-earlier-word').
+ run_command('zle -N copy-earlier-word').
+ run_command('bindkey "^N" copy-earlier-word')
+ end
+ end
+
+ it 'should cycle through previous words in the buffer' do
+ session.clear_screen
+ session.send_string('foo bar baz')
+ sleep 0.5
+ session.send_keys('C-n')
+ wait_for { session.content }.to eq('foo bar bazbaz')
+ session.send_keys('C-n')
+ wait_for { session.content }.to eq('foo bar bazbar')
+ session.send_keys('C-n')
+ wait_for { session.content }.to eq('foo bar bazfoo')
+ end
+ end
+
+ describe 'pressing ^C after fetching a suggestion' do
+ before do
+ skip 'Workaround does not work below v5.0.8' if session.zsh_version < Gem::Version.new('5.0.8')
+ end
+
+ it 'terminates the prompt and begins a new one' do
+ session.send_keys('e')
+ sleep 0.5
+ session.send_keys('C-c')
+ sleep 0.5
+ session.send_keys('echo')
+
+ wait_for { session.content }.to eq("e\necho")
+ end
+ end
+end
+
+
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/integrations/auto_cd_spec.rb b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/integrations/auto_cd_spec.rb
new file mode 100644
index 0000000..94bd24b
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/integrations/auto_cd_spec.rb
@@ -0,0 +1,14 @@
+describe 'with `AUTO_CD` option set' do
+ let(:after_sourcing) do
+ -> {
+ session.run_command('setopt AUTO_CD')
+ session.run_command('autoload compinit && compinit')
+ }
+ end
+
+ it 'directory names are still completed' do
+ session.send_string('sr')
+ session.send_keys('C-i')
+ wait_for { session.content }.to eq('src/')
+ end
+end
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/integrations/bracketed_paste_magic_spec.rb b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/integrations/bracketed_paste_magic_spec.rb
new file mode 100644
index 0000000..41ff267
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/integrations/bracketed_paste_magic_spec.rb
@@ -0,0 +1,43 @@
+describe 'pasting using bracketed-paste-magic' do
+ let(:before_sourcing) do
+ -> do
+ session.
+ run_command('autoload -Uz bracketed-paste-magic').
+ run_command('zle -N bracketed-paste bracketed-paste-magic')
+ end
+ end
+
+ context 'with suggestions disabled while pasting' do
+ before do
+ session.
+ run_command('bpm_init() { zle autosuggest-disable }').
+ run_command('bpm_finish() { zle autosuggest-enable }').
+ run_command('zstyle :bracketed-paste-magic paste-init bpm_init').
+ run_command('zstyle :bracketed-paste-magic paste-finish bpm_finish')
+ end
+
+ it 'does not show an incorrect suggestion' do
+ with_history('echo hello') do
+ session.paste_string("echo #{'a' * 60}")
+ sleep 1
+ expect(session.content).to eq("echo #{'a' * 60}")
+ end
+ end
+ end
+
+ context 'with `bracketed-paste` added to the list of widgets that clear the suggestion' do
+ let(:options) { ['ZSH_AUTOSUGGEST_CLEAR_WIDGETS+=(bracketed-paste)'] }
+
+ it 'does not retain an old suggestion' do
+ with_history ('echo foo') do
+ session.send_string('echo ')
+ wait_for { session.content }.to eq('echo foo')
+ session.paste_string('bar')
+ wait_for { session.content }.to eq('echo bar')
+ session.send_keys('C-a') # Any cursor movement works
+ sleep 1
+ expect(session.content).to eq('echo bar')
+ end
+ end
+ end
+end
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/integrations/client_zpty_spec.rb b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/integrations/client_zpty_spec.rb
new file mode 100644
index 0000000..b8abb37
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/integrations/client_zpty_spec.rb
@@ -0,0 +1,14 @@
+describe 'a running zpty command' do
+ let(:before_sourcing) { -> { session.run_command('zmodload zsh/zpty && zpty -b kitty cat') } }
+
+ context 'when using `completion` strategy' do
+ let(:options) { ["ZSH_AUTOSUGGEST_STRATEGY=completion"] }
+
+ it 'is not affected' do
+ session.send_keys('a').send_keys('C-h')
+ session.run_command('zpty -t kitty; echo $?')
+
+ wait_for { session.content }.to end_with("\n0")
+ end
+ end
+end
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/integrations/glob_subst_spec.rb b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/integrations/glob_subst_spec.rb
new file mode 100644
index 0000000..c3dd671
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/integrations/glob_subst_spec.rb
@@ -0,0 +1,12 @@
+describe 'with `GLOB_SUBST` option set' do
+ let(:after_sourcing) do
+ -> {
+ session.run_command('setopt GLOB_SUBST')
+ }
+ end
+
+ it 'error messages are not printed' do
+ session.send_string('[[')
+ wait_for { session.content }.to eq('[[')
+ end
+end
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/integrations/rebound_bracket_spec.rb b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/integrations/rebound_bracket_spec.rb
new file mode 100644
index 0000000..8b420f0
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/integrations/rebound_bracket_spec.rb
@@ -0,0 +1,13 @@
+describe 'rebinding [' do
+ context 'initialized before sourcing the plugin' do
+ before do
+ session.run_command("function [ { $commands[\\[] \"$@\" }")
+ session.clear_screen
+ end
+
+ it 'executes the custom behavior and the built-in behavior' do
+ session.send_string('asdf')
+ wait_for { session.content }.to eq('asdf')
+ end
+ end
+end
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/integrations/vi_mode_spec.rb b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/integrations/vi_mode_spec.rb
new file mode 100644
index 0000000..0a295c2
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/integrations/vi_mode_spec.rb
@@ -0,0 +1,80 @@
+describe 'when using vi mode' do
+ let(:before_sourcing) do
+ -> do
+ session.run_command('bindkey -v')
+ end
+ end
+
+ describe 'moving the cursor after exiting insert mode' do
+ it 'should not clear the current suggestion' do
+ with_history('foobar foo') do
+ session.
+ send_string('foo').
+ send_keys('escape').
+ send_keys('h')
+
+ wait_for { session.content }.to eq('foobar foo')
+ end
+ end
+ end
+
+ describe '`vi-forward-word-end`' do
+ it 'should accept through the end of the current word' do
+ with_history('foobar foo') do
+ session.
+ send_string('foo').
+ send_keys('escape').
+ send_keys('e'). # vi-forward-word-end
+ send_keys('a'). # vi-add-next
+ send_string('baz')
+
+ wait_for { session.content }.to eq('foobarbaz')
+ end
+ end
+ end
+
+ describe '`vi-forward-word`' do
+ it 'should accept through the first character of the next word' do
+ with_history('foobar foo') do
+ session.
+ send_string('foo').
+ send_keys('escape').
+ send_keys('w'). # vi-forward-word
+ send_keys('a'). # vi-add-next
+ send_string('az')
+
+ wait_for { session.content }.to eq('foobar faz')
+ end
+ end
+ end
+
+ describe '`vi-find-next-char`' do
+ it 'should accept through the next occurrence of the character' do
+ with_history('foobar foo') do
+ session.
+ send_string('foo').
+ send_keys('escape').
+ send_keys('f'). # vi-find-next-char
+ send_keys('o').
+ send_keys('a'). # vi-add-next
+ send_string('b')
+
+ wait_for { session.content }.to eq('foobar fob')
+ end
+ end
+ end
+
+ describe '`vi-delete`' do
+ it 'should be able to remove the last character in the buffer' do
+ skip 'deleting last char did not work below zsh version 5.0.8' if session.zsh_version < Gem::Version.new('5.0.8')
+
+ session.
+ send_string('echo foo').
+ send_keys('escape').
+ send_keys('d').
+ send_keys('l')
+
+ wait_for { session.content }.to eq('echo fo')
+ end
+ end
+end
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/integrations/wrapped_widget_spec.rb b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/integrations/wrapped_widget_spec.rb
new file mode 100644
index 0000000..61dfc2d
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/integrations/wrapped_widget_spec.rb
@@ -0,0 +1,39 @@
+describe 'a wrapped widget' do
+ let(:widget) { 'backward-delete-char' }
+
+ context 'initialized before sourcing the plugin' do
+ let(:before_sourcing) do
+ -> do
+ session.
+ run_command("_orig_#{widget}() { zle .#{widget} }").
+ run_command("zle -N orig-#{widget} _orig_#{widget}").
+ run_command("#{widget}-magic() { zle orig-#{widget}; BUFFER+=b }").
+ run_command("zle -N #{widget} #{widget}-magic")
+ end
+ end
+
+ it 'executes the custom behavior and the built-in behavior' do
+ with_history('foobar', 'foodar') do
+ session.send_string('food').send_keys('C-h')
+ wait_for { session.content }.to eq('foobar')
+ end
+ end
+ end
+
+ context 'initialized after sourcing the plugin' do
+ before do
+ session.
+ run_command("zle -N orig-#{widget} ${widgets[#{widget}]#*:}").
+ run_command("#{widget}-magic() { zle orig-#{widget}; BUFFER+=b }").
+ run_command("zle -N #{widget} #{widget}-magic").
+ clear_screen
+ end
+
+ it 'executes the custom behavior and the built-in behavior' do
+ with_history('foobar', 'foodar') do
+ session.send_string('food').send_keys('C-h')
+ wait_for { session.content }.to eq('foobar')
+ end
+ end
+ end
+end
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/integrations/zle_input_stack_spec.rb b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/integrations/zle_input_stack_spec.rb
new file mode 100644
index 0000000..12cfbc7
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/integrations/zle_input_stack_spec.rb
@@ -0,0 +1,24 @@
+describe 'using `zle -U`' do
+ let(:before_sourcing) do
+ -> do
+ session.
+ run_command('_zsh_autosuggest_strategy_test() { sleep 1; _zsh_autosuggest_strategy_history "$1" }').
+ run_command('foo() { zle -U - "echo hello" }; zle -N foo; bindkey ^B foo')
+ end
+ end
+
+ let(:options) { ['unset ZSH_AUTOSUGGEST_USE_ASYNC', 'ZSH_AUTOSUGGEST_STRATEGY=test'] }
+
+ # TODO: This is only possible with the $KEYS_QUEUED_COUNT widget parameter, coming soon...
+ xit 'does not fetch a suggestion for every inserted character' do
+ session.send_keys('C-b')
+ wait_for { session.content }.to eq('echo hello')
+ end
+
+ it 'shows a suggestion when the widget completes' do
+ with_history('echo hello world') do
+ session.send_keys('C-b')
+ wait_for { session.content(esc_seqs: true) }.to match(/\Aecho hello\e\[[0-9]+m world/)
+ end
+ end
+end
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/kill_ring_spec.rb b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/kill_ring_spec.rb
new file mode 100644
index 0000000..4d0178f
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/kill_ring_spec.rb
@@ -0,0 +1,23 @@
+context 'with some items in the kill ring' do
+ before do
+ session.
+ send_string('echo foo').
+ send_keys('C-u').
+ send_string('echo bar').
+ send_keys('C-u')
+ end
+
+ describe '`yank-pop`' do
+ it 'should cycle through all items in the kill ring' do
+ session.send_keys('C-y')
+ wait_for { session.content }.to eq('echo bar')
+
+ session.send_keys('escape').send_keys('y')
+ wait_for { session.content }.to eq('echo foo')
+
+ session.send_keys('escape').send_keys('y')
+ wait_for { session.content }.to eq('echo bar')
+ end
+ end
+end
+
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/line_init_spec.rb b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/line_init_spec.rb
new file mode 100644
index 0000000..826277f
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/line_init_spec.rb
@@ -0,0 +1,17 @@
+context 'with zle-line-init unignored' do
+ let(:after_sourcing) do
+ -> do
+ session.
+ run_command('setopt extendedglob').
+ run_command('ZSH_AUTOSUGGEST_IGNORE_WIDGETS=(${(@)ZSH_AUTOSUGGEST_IGNORE_WIDGETS:#zle-\*} zle-\^line-init)').
+ run_command('zle-line-init() { BUFFER="echo" }')
+ end
+ end
+
+ it 'should fetch a suggestion on each line initialization' do
+ with_history('echo foo') do
+ session.run_command('zle -N zle-line-init')
+ wait_for { session.content }.to end_with('echo foo')
+ end
+ end
+end
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/multi_line_spec.rb b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/multi_line_spec.rb
new file mode 100644
index 0000000..364780a
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/multi_line_spec.rb
@@ -0,0 +1,8 @@
+describe 'a multi-line suggestion' do
+ it 'should be displayed on multiple lines' do
+ with_history("echo \"\n\"") do
+ session.send_keys('e')
+ wait_for { session.content }.to eq("echo \"\n\"")
+ end
+ end
+end
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/options/buffer_max_size_spec.rb b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/options/buffer_max_size_spec.rb
new file mode 100644
index 0000000..29ca8bc
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/options/buffer_max_size_spec.rb
@@ -0,0 +1,30 @@
+describe 'a suggestion' do
+ let(:term_opts) { { width: 200 } }
+ let(:long_command) { "echo #{'a' * 100}" }
+
+ around do |example|
+ with_history(long_command) { example.run }
+ end
+
+ it 'is provided for any buffer length' do
+ session.send_string(long_command[0...-1])
+ wait_for { session.content }.to eq(long_command)
+ end
+
+ context 'when ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE is specified' do
+ let(:buffer_max_size) { 10 }
+ let(:options) { ["ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE=#{buffer_max_size}"] }
+
+ it 'is provided when the buffer is shorter than the specified length' do
+ session.send_string(long_command[0...(buffer_max_size - 1)])
+ wait_for { session.content }.to eq(long_command)
+ end
+
+ it 'is provided when the buffer is equal to the specified length' do
+ session.send_string(long_command[0...(buffer_max_size)])
+ wait_for { session.content }.to eq(long_command)
+ end
+
+ it 'is not provided when the buffer is longer than the specified length'
+ end
+end
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/options/highlight_style_spec.rb b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/options/highlight_style_spec.rb
new file mode 100644
index 0000000..a7e39b3
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/options/highlight_style_spec.rb
@@ -0,0 +1,7 @@
+describe 'a displayed suggestion' do
+ it 'is shown in the default style'
+
+ describe 'when ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE is set to a zle_highlight string' do
+ it 'is shown in the specified style'
+ end
+end
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/options/original_widget_prefix_spec.rb b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/options/original_widget_prefix_spec.rb
new file mode 100644
index 0000000..a4b6e98
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/options/original_widget_prefix_spec.rb
@@ -0,0 +1,7 @@
+describe 'an original zle widget' do
+ context 'is accessible with the default prefix'
+
+ context 'when ZSH_AUTOSUGGEST_ORIGINAL_WIDGET_PREFIX is set' do
+ it 'is accessible with the specified prefix'
+ end
+end
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/options/strategy_spec.rb b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/options/strategy_spec.rb
new file mode 100644
index 0000000..58562d0
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/options/strategy_spec.rb
@@ -0,0 +1,55 @@
+describe 'a suggestion for a given prefix' do
+ let(:history_strategy) { '_zsh_autosuggest_strategy_history() { suggestion="history" }' }
+ let(:foobar_strategy) { '_zsh_autosuggest_strategy_foobar() { [[ "foobar baz" = $1* ]] && suggestion="foobar baz" }' }
+ let(:foobaz_strategy) { '_zsh_autosuggest_strategy_foobaz() { [[ "foobaz bar" = $1* ]] && suggestion="foobaz bar" }' }
+
+ let(:after_sourcing) do
+ -> do
+ session.run_command(history_strategy)
+ end
+ end
+
+ it 'by default is determined by calling the `history` strategy function' do
+ session.send_string('h')
+ wait_for { session.content }.to eq('history')
+ end
+
+ context 'when ZSH_AUTOSUGGEST_STRATEGY is set to an array' do
+ let(:after_sourcing) do
+ -> do
+ session.
+ run_command(foobar_strategy).
+ run_command(foobaz_strategy).
+ run_command('ZSH_AUTOSUGGEST_STRATEGY=(foobar foobaz)')
+ end
+ end
+
+ it 'is determined by the first strategy function to return a suggestion' do
+ session.send_string('foo')
+ wait_for { session.content }.to eq('foobar baz')
+
+ session.send_string('baz')
+ wait_for { session.content }.to eq('foobaz bar')
+ end
+ end
+
+ context 'when ZSH_AUTOSUGGEST_STRATEGY is set to a string' do
+ let(:after_sourcing) do
+ -> do
+ session.
+ run_command(foobar_strategy).
+ run_command(foobaz_strategy).
+ run_command('ZSH_AUTOSUGGEST_STRATEGY="foobar foobaz"')
+ end
+ end
+
+ it 'is determined by the first strategy function to return a suggestion' do
+ session.send_string('foo')
+ wait_for { session.content }.to eq('foobar baz')
+
+ session.send_string('baz')
+ wait_for { session.content }.to eq('foobaz bar')
+ end
+ end
+end
+
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/options/widget_lists_spec.rb b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/options/widget_lists_spec.rb
new file mode 100644
index 0000000..421b84e
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/options/widget_lists_spec.rb
@@ -0,0 +1,121 @@
+describe 'a zle widget' do
+ let(:widget) { 'my-widget' }
+ let(:before_sourcing) { -> { session.run_command("#{widget}() {}; zle -N #{widget}; bindkey ^B #{widget}") } }
+
+ context 'when added to ZSH_AUTOSUGGEST_ACCEPT_WIDGETS' do
+ let(:options) { ["ZSH_AUTOSUGGEST_ACCEPT_WIDGETS+=(#{widget})"] }
+
+ it 'accepts the suggestion and moves the cursor to the end of the buffer when invoked' do
+ with_history('echo hello') do
+ session.send_string('e')
+ wait_for { session.content }.to eq('echo hello')
+ session.send_keys('C-b')
+ wait_for { session.content(esc_seqs: true) }.to eq('echo hello')
+ wait_for { session.cursor }.to eq([10, 0])
+ end
+ end
+ end
+
+ context 'when added to ZSH_AUTOSUGGEST_CLEAR_WIDGETS' do
+ let(:options) { ["ZSH_AUTOSUGGEST_CLEAR_WIDGETS+=(#{widget})"] }
+
+ it 'clears the suggestion when invoked' do
+ with_history('echo hello') do
+ session.send_string('e')
+ wait_for { session.content }.to eq('echo hello')
+ session.send_keys('C-b')
+ wait_for { session.content }.to eq('e')
+ end
+ end
+ end
+
+ context 'when added to ZSH_AUTOSUGGEST_EXECUTE_WIDGETS' do
+ let(:options) { ["ZSH_AUTOSUGGEST_EXECUTE_WIDGETS+=(#{widget})"] }
+
+ it 'executes the suggestion when invoked' do
+ with_history('echo hello') do
+ session.send_string('e')
+ wait_for { session.content }.to eq('echo hello')
+ session.send_keys('C-b')
+ wait_for { session.content }.to end_with("\nhello")
+ end
+ end
+ end
+
+ context 'when added to ZSH_AUTOSUGGEST_IGNORE_WIDGETS' do
+ let(:options) { ["ZSH_AUTOSUGGEST_IGNORE_WIDGETS=(#{widget})"] }
+
+ it 'should not be wrapped with an autosuggest widget' do
+ session.run_command("echo $widgets[#{widget}]")
+ wait_for { session.content }.to end_with("\nuser:#{widget}")
+ end
+ end
+
+ context 'that moves the cursor forward' do
+ before { session.run_command("#{widget}() { zle forward-char }") }
+
+ context 'when added to ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS' do
+ let(:options) { ["ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS=(#{widget})"] }
+
+ it 'accepts the suggestion as far as the cursor is moved when invoked' do
+ with_history('echo hello') do
+ session.send_string('e')
+ wait_for { session.content }.to start_with('echo hello')
+ session.send_keys('C-b')
+ wait_for { session.content(esc_seqs: true) }.to match(/\Aec\e\[[0-9]+mho hello/)
+ end
+ end
+ end
+ end
+
+ context 'that modifies the buffer' do
+ before { session.run_command("#{widget}() { BUFFER=\"foo\" }") }
+
+ context 'when not added to any of the widget lists' do
+ it 'modifies the buffer and fetches a new suggestion' do
+ with_history('foobar') do
+ session.send_keys('C-b')
+ wait_for { session.content }.to eq('foobar')
+ end
+ end
+ end
+ end
+end
+
+describe 'a modification to the widget lists' do
+ let(:widget) { 'my-widget' }
+ let(:before_sourcing) { -> { session.run_command("#{widget}() {}; zle -N #{widget}; bindkey ^B #{widget}") } }
+ before { session.run_command("ZSH_AUTOSUGGEST_ACCEPT_WIDGETS+=(#{widget})") }
+
+ it 'takes effect on the next cmd line' do
+ with_history('echo hello') do
+ session.send_string('e')
+ wait_for { session.content }.to eq('echo hello')
+ session.send_keys('C-b')
+ wait_for { session.content(esc_seqs: true) }.to eq('echo hello')
+ end
+ end
+
+ context 'when manual rebind is enabled' do
+ let(:options) { ["ZSH_AUTOSUGGEST_MANUAL_REBIND=true"] }
+
+ it 'does not take effect until bind command is re-run' do
+ with_history('echo hello') do
+ session.send_string('e')
+ wait_for { session.content }.to eq('echo hello')
+ session.send_keys('C-b')
+ sleep 1
+ expect(session.content(esc_seqs: true)).not_to eq('echo hello')
+
+ session.send_keys('C-c')
+ session.run_command('_zsh_autosuggest_bind_widgets').clear_screen
+ wait_for { session.content }.to eq('')
+
+ session.send_string('e')
+ wait_for { session.content }.to eq('echo hello')
+ session.send_keys('C-b')
+ wait_for { session.content(esc_seqs: true) }.to eq('echo hello')
+ end
+ end
+ end
+end
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/spec_helper.rb b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/spec_helper.rb
new file mode 100644
index 0000000..dc1abb0
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/spec_helper.rb
@@ -0,0 +1,54 @@
+require 'pry'
+require 'rspec/wait'
+require 'terminal_session'
+require 'tempfile'
+
+RSpec.shared_context 'terminal session' do
+ let(:term_opts) { {} }
+ let(:session) { TerminalSession.new(term_opts) }
+ let(:before_sourcing) { -> {} }
+ let(:after_sourcing) { -> {} }
+ let(:options) { [] }
+
+ around do |example|
+ before_sourcing.call
+ session.run_command(['source zsh-autosuggestions.zsh', *options].join('; '))
+ after_sourcing.call
+ session.clear_screen
+
+ example.run
+
+ session.destroy
+ end
+
+ def with_history(*commands, &block)
+ Tempfile.create do |f|
+ f.write(commands.map{|c| c.gsub("\n", "\\\n")}.join("\n"))
+ f.flush
+
+ session.run_command('fc -p')
+ session.run_command("fc -R #{f.path}")
+
+ session.clear_screen
+
+ yield block
+
+ session.send_keys('C-c')
+ session.run_command('fc -P')
+ end
+ end
+end
+
+RSpec.configure do |config|
+ config.expect_with :rspec do |expectations|
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
+ end
+
+ config.mock_with :rspec do |mocks|
+ mocks.verify_partial_doubles = true
+ end
+
+ config.wait_timeout = 2
+
+ config.include_context 'terminal session'
+end
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/strategies/completion_spec.rb b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/strategies/completion_spec.rb
new file mode 100644
index 0000000..92794d6
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/strategies/completion_spec.rb
@@ -0,0 +1,72 @@
+describe 'the `completion` suggestion strategy' do
+ let(:options) { ['ZSH_AUTOSUGGEST_STRATEGY=completion'] }
+ let(:before_sourcing) do
+ -> do
+ session.
+ run_command('autoload compinit && compinit').
+ run_command('_foo() { compadd bar; compadd bat }').
+ run_command('_num() { compadd two; compadd three }').
+ run_command('compdef _foo baz').
+ run_command('compdef _num one')
+ end
+ end
+
+ it 'suggests the first completion result' do
+ session.send_string('baz ')
+ wait_for { session.content }.to eq('baz bar')
+ end
+
+ it 'does not add extra carriage returns when prefix has a line feed' do
+ skip '`stty` does not work inside zpty below zsh version 5.0.3' if session.zsh_version < Gem::Version.new('5.0.3')
+ session.send_string('baz \\').send_keys('C-v', 'C-j')
+ wait_for { session.content }.to eq("baz \\\nbar")
+ end
+
+ context 'when `_complete` is aliased' do
+ let(:before_sourcing) do
+ -> do
+ session.
+ run_command('autoload compinit && compinit').
+ run_command('_foo() { compadd bar; compadd bat }').
+ run_command('compdef _foo baz').
+ run_command('alias _complete=_complete')
+ end
+ end
+
+ it 'suggests the first completion result' do
+ session.send_string('baz ')
+ wait_for { session.content }.to eq('baz bar')
+ end
+ end
+
+ context 'when ZSH_AUTOSUGGEST_COMPLETION_IGNORE is set to a pattern' do
+ let(:options) { ['ZSH_AUTOSUGGEST_STRATEGY=completion', 'ZSH_AUTOSUGGEST_COMPLETION_IGNORE="one *"'] }
+
+ it 'makes suggestions when the buffer does not match the pattern' do
+ session.send_string('baz ')
+ wait_for { session.content }.to eq('baz bar')
+ end
+
+ it 'does not make suggestions when the buffer matches the pattern' do
+ session.send_string('one t')
+ sleep 1
+ expect(session.content).to eq('one t')
+ end
+ end
+
+ context 'when async mode is enabled' do
+ let(:options) { ['ZSH_AUTOSUGGEST_USE_ASYNC=true', 'ZSH_AUTOSUGGEST_STRATEGY=completion'] }
+
+ it 'suggests the first completion result' do
+ session.send_string('baz ')
+ wait_for { session.content }.to eq('baz bar')
+ end
+
+ it 'does not add extra carriage returns when prefix has a line feed' do
+ skip '`stty` does not work inside zpty below zsh version 5.0.3' if session.zsh_version < Gem::Version.new('5.0.3')
+ session.send_string('baz \\').send_keys('C-v', 'C-j')
+ wait_for { session.content }.to eq("baz \\\nbar")
+ end
+ end
+end
+
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/strategies/history_spec.rb b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/strategies/history_spec.rb
new file mode 100644
index 0000000..eee8efd
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/strategies/history_spec.rb
@@ -0,0 +1,23 @@
+require 'strategies/special_characters_helper'
+
+describe 'the `history` suggestion strategy' do
+ it 'suggests the last matching history entry' do
+ with_history('ls foo', 'ls bar', 'echo baz') do
+ session.send_string('ls')
+ wait_for { session.content }.to eq('ls bar')
+ end
+ end
+
+ context 'when ZSH_AUTOSUGGEST_HISTORY_IGNORE is set to a pattern' do
+ let(:options) { ['ZSH_AUTOSUGGEST_HISTORY_IGNORE="* bar"'] }
+
+ it 'does not make suggestions that match the pattern' do
+ with_history('ls foo', 'ls bar', 'echo baz') do
+ session.send_string('ls')
+ wait_for { session.content }.to eq('ls foo')
+ end
+ end
+ end
+
+ include_examples 'special characters'
+end
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/strategies/match_prev_cmd_spec.rb b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/strategies/match_prev_cmd_spec.rb
new file mode 100644
index 0000000..c435f16
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/strategies/match_prev_cmd_spec.rb
@@ -0,0 +1,34 @@
+require 'strategies/special_characters_helper'
+
+describe 'the `match_prev_cmd` strategy' do
+ let(:options) { ['ZSH_AUTOSUGGEST_STRATEGY=match_prev_cmd'] }
+
+ let(:history) { [
+ 'echo what',
+ 'ls foo',
+ 'echo what',
+ 'ls bar',
+ 'ls baz',
+ 'echo what'
+ ] }
+
+ it 'suggests the last matching history entry after the previous command' do
+ with_history(*history) do
+ session.send_string('ls')
+ wait_for { session.content }.to eq('ls bar')
+ end
+ end
+
+ context 'when ZSH_AUTOSUGGEST_HISTORY_IGNORE is set to a pattern' do
+ let(:options) { ['ZSH_AUTOSUGGEST_STRATEGY=match_prev_cmd', 'ZSH_AUTOSUGGEST_HISTORY_IGNORE="* bar"'] }
+
+ it 'does not make suggestions that match the pattern' do
+ with_history(*history) do
+ session.send_string('ls')
+ wait_for { session.content }.to eq('ls foo')
+ end
+ end
+ end
+
+ include_examples 'special characters'
+end
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/strategies/special_characters_helper.rb b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/strategies/special_characters_helper.rb
new file mode 100644
index 0000000..eb1f0cd
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/strategies/special_characters_helper.rb
@@ -0,0 +1,75 @@
+shared_examples 'special characters' do
+ describe 'a special character in the buffer should be treated like any other character' do
+ it 'asterisk' do
+ with_history('echo "hello*"', 'echo "hello."') do
+ session.send_string('echo "hello*')
+ wait_for { session.content }.to eq('echo "hello*"')
+ end
+ end
+
+ it 'question mark' do
+ with_history('echo "hello?"', 'echo "hello."') do
+ session.send_string('echo "hello?')
+ wait_for { session.content }.to eq('echo "hello?"')
+ end
+ end
+
+ it 'backslash' do
+ with_history('echo "hello\nworld"') do
+ session.send_string('echo "hello\\')
+ wait_for { session.content }.to eq('echo "hello\nworld"')
+ end
+ end
+
+ it 'double backslash' do
+ with_history('echo "\\\\"') do
+ session.send_string('echo "\\\\')
+ wait_for { session.content }.to eq('echo "\\\\"')
+ end
+ end
+
+ it 'tilde' do
+ with_history('echo ~/foo') do
+ session.send_string('echo ~')
+ wait_for { session.content }.to eq('echo ~/foo')
+ end
+ end
+
+ it 'parentheses' do
+ with_history('echo "$(ls foo)"') do
+ session.send_string('echo "$(')
+ wait_for { session.content }.to eq('echo "$(ls foo)"')
+ end
+ end
+
+ it 'square bracket' do
+ with_history('echo "$history[123]"') do
+ session.send_string('echo "$history[')
+ wait_for { session.content }.to eq('echo "$history[123]"')
+ session.send_string('123]')
+ wait_for { session.content }.to eq('echo "$history[123]"')
+ end
+ end
+
+ it 'octothorpe' do
+ with_history('echo "#yolo"') do
+ session.send_string('echo "#')
+ wait_for { session.content }.to eq('echo "#yolo"')
+ end
+ end
+
+ it 'caret' do
+ with_history('echo "^A"', 'echo "^B"') do
+ session.send_string('echo "^A')
+ wait_for { session.content }.to eq('echo "^A"')
+ end
+ end
+
+ it 'dash' do
+ with_history('-foo() {}') do
+ session.send_string('-')
+ wait_for { session.content }.to eq('-foo() {}')
+ end
+ end
+ end
+end
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/terminal_session.rb b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/terminal_session.rb
new file mode 100644
index 0000000..f91ee6c
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/terminal_session.rb
@@ -0,0 +1,99 @@
+require 'securerandom'
+
+class TerminalSession
+ ZSH_BIN = ENV['TEST_ZSH_BIN'] || 'zsh'
+
+ def initialize(opts = {})
+ opts = {
+ width: 80,
+ height: 24,
+ prompt: '',
+ term: 'xterm-256color',
+ zsh_bin: ZSH_BIN
+ }.merge(opts)
+
+ @opts = opts
+
+ cmd="PS1=\"#{opts[:prompt]}\" TERM=#{opts[:term]} #{ZSH_BIN} -f"
+ tmux_command("new-session -d -x #{opts[:width]} -y #{opts[:height]} '#{cmd}'")
+ end
+
+ def zsh_version
+ @zsh_version ||= Gem::Version.new(`#{ZSH_BIN} -c 'echo -n $ZSH_VERSION'`)
+ end
+
+ def tmux_socket_name
+ @tmux_socket_name ||= SecureRandom.hex(6)
+ end
+
+ def run_command(command)
+ send_string(command)
+ send_keys('enter')
+
+ self
+ end
+
+ def send_string(str)
+ tmux_command("send-keys -t 0 -l -- '#{str.gsub("'", "\\'")}'")
+
+ self
+ end
+
+ def send_keys(*keys)
+ tmux_command("send-keys -t 0 #{keys.join(' ')}")
+
+ self
+ end
+
+ def paste_string(str)
+ tmux_command("set-buffer -- '#{str}'")
+ tmux_command("paste-buffer -dpr -t 0")
+
+ self
+ end
+
+ def content(esc_seqs: false)
+ cmd = 'capture-pane -p -t 0'
+ cmd += ' -e' if esc_seqs
+ tmux_command(cmd).strip
+ end
+
+ def clear_screen
+ send_keys('C-l')
+
+ i = 0
+ until content == opts[:prompt] || i > 20 do
+ sleep(0.1)
+ i = i + 1
+ end
+
+ self
+ end
+
+ def destroy
+ tmux_command('kill-session')
+ end
+
+ def cursor
+ tmux_command("display-message -t 0 -p '\#{cursor_x},\#{cursor_y}'").
+ strip.
+ split(',').
+ map(&:to_i)
+ end
+
+ def attach!
+ tmux_command('attach-session')
+ end
+
+ private
+
+ attr_reader :opts
+
+ def tmux_command(cmd)
+ out = `tmux -u -L #{tmux_socket_name} #{cmd}`
+
+ raise("tmux error running: '#{cmd}'") unless $?.success?
+
+ out
+ end
+end
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/widgets/disable_spec.rb b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/widgets/disable_spec.rb
new file mode 100644
index 0000000..b387a59
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/widgets/disable_spec.rb
@@ -0,0 +1,19 @@
+describe 'the `autosuggest-disable` widget' do
+ before do
+ session.run_command('bindkey ^B autosuggest-disable')
+ end
+
+ it 'disables suggestions and clears the suggestion' do
+ with_history('echo hello') do
+ session.send_string('echo')
+ wait_for { session.content }.to eq('echo hello')
+
+ session.send_keys('C-b')
+ wait_for { session.content }.to eq('echo')
+
+ session.send_string(' h')
+ sleep 1
+ expect(session.content).to eq('echo h')
+ end
+ end
+end
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/widgets/enable_spec.rb b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/widgets/enable_spec.rb
new file mode 100644
index 0000000..3ad35a8
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/widgets/enable_spec.rb
@@ -0,0 +1,42 @@
+describe 'the `autosuggest-enable` widget' do
+ before do
+ session.
+ run_command('typeset -g _ZSH_AUTOSUGGEST_DISABLED').
+ run_command('bindkey ^B autosuggest-enable')
+ end
+
+ it 'enables suggestions and fetches a suggestion' do
+ with_history('echo hello') do
+ session.send_string('e')
+ sleep 1
+ expect(session.content).to eq('e')
+
+ session.send_keys('C-b')
+ session.send_string('c')
+ wait_for { session.content }.to eq('echo hello')
+ end
+ end
+
+ context 'invoked on an empty buffer' do
+ it 'does not fetch a suggestion' do
+ with_history('echo hello') do
+ session.send_keys('C-b')
+ sleep 1
+ expect(session.content).to eq('')
+ end
+ end
+ end
+
+ context 'invoked on a non-empty buffer' do
+ it 'fetches a suggestion' do
+ with_history('echo hello') do
+ session.send_string('e')
+ sleep 1
+ expect(session.content).to eq('e')
+
+ session.send_keys('C-b')
+ wait_for { session.content }.to eq('echo hello')
+ end
+ end
+ end
+end
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/widgets/fetch_spec.rb b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/widgets/fetch_spec.rb
new file mode 100644
index 0000000..eb8f2ba
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/widgets/fetch_spec.rb
@@ -0,0 +1,24 @@
+describe 'the `autosuggest-fetch` widget' do
+ context 'when suggestions are disabled' do
+ before do
+ session.
+ run_command('bindkey ^B autosuggest-disable').
+ run_command('bindkey ^F autosuggest-fetch').
+ send_keys('C-b')
+ end
+
+ it 'will fetch and display a suggestion' do
+ with_history('echo hello') do
+ session.send_string('echo h')
+ sleep 1
+ expect(session.content).to eq('echo h')
+
+ session.send_keys('C-f')
+ wait_for { session.content }.to eq('echo hello')
+
+ session.send_string('e')
+ wait_for { session.content }.to eq('echo hello')
+ end
+ end
+ end
+end
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/widgets/toggle_spec.rb b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/widgets/toggle_spec.rb
new file mode 100644
index 0000000..8f9f3c3
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/spec/widgets/toggle_spec.rb
@@ -0,0 +1,26 @@
+describe 'the `autosuggest-toggle` widget' do
+ before do
+ session.run_command('bindkey ^B autosuggest-toggle')
+ end
+
+ it 'toggles suggestions' do
+ with_history('echo world', 'echo hello') do
+ session.send_string('echo')
+ wait_for { session.content }.to eq('echo hello')
+
+ session.send_keys('C-b')
+ wait_for { session.content }.to eq('echo')
+
+ session.send_string(' h')
+ sleep 1
+ expect(session.content).to eq('echo h')
+
+ session.send_keys('C-b')
+ wait_for { session.content }.to eq('echo hello')
+
+ session.send_keys('C-h')
+ session.send_string('w')
+ wait_for { session.content }.to eq('echo world')
+ end
+ end
+end
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/async.zsh b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/async.zsh
new file mode 100644
index 0000000..e179734
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/async.zsh
@@ -0,0 +1,77 @@
+
+#--------------------------------------------------------------------#
+# Async #
+#--------------------------------------------------------------------#
+
+_zsh_autosuggest_async_request() {
+ zmodload zsh/system 2>/dev/null # For `$sysparams`
+
+ typeset -g _ZSH_AUTOSUGGEST_ASYNC_FD _ZSH_AUTOSUGGEST_CHILD_PID
+
+ # If we've got a pending request, cancel it
+ if [[ -n "$_ZSH_AUTOSUGGEST_ASYNC_FD" ]] && { true <&$_ZSH_AUTOSUGGEST_ASYNC_FD } 2>/dev/null; then
+ # Close the file descriptor and remove the handler
+ builtin exec {_ZSH_AUTOSUGGEST_ASYNC_FD}<&-
+ zle -F $_ZSH_AUTOSUGGEST_ASYNC_FD
+
+ # We won't know the pid unless the user has zsh/system module installed
+ if [[ -n "$_ZSH_AUTOSUGGEST_CHILD_PID" ]]; then
+ # Zsh will make a new process group for the child process only if job
+ # control is enabled (MONITOR option)
+ if [[ -o MONITOR ]]; then
+ # Send the signal to the process group to kill any processes that may
+ # have been forked by the suggestion strategy
+ kill -TERM -$_ZSH_AUTOSUGGEST_CHILD_PID 2>/dev/null
+ else
+ # Kill just the child process since it wasn't placed in a new process
+ # group. If the suggestion strategy forked any child processes they may
+ # be orphaned and left behind.
+ kill -TERM $_ZSH_AUTOSUGGEST_CHILD_PID 2>/dev/null
+ fi
+ fi
+ fi
+
+ # Fork a process to fetch a suggestion and open a pipe to read from it
+ builtin exec {_ZSH_AUTOSUGGEST_ASYNC_FD}< <(
+ # Tell parent process our pid
+ echo $sysparams[pid]
+
+ # Fetch and print the suggestion
+ local suggestion
+ _zsh_autosuggest_fetch_suggestion "$1"
+ echo -nE "$suggestion"
+ )
+
+ # There's a weird bug here where ^C stops working unless we force a fork
+ # See https://github.com/zsh-users/zsh-autosuggestions/issues/364
+ autoload -Uz is-at-least
+ is-at-least 5.8 || command true
+
+ # Read the pid from the child process
+ read _ZSH_AUTOSUGGEST_CHILD_PID <&$_ZSH_AUTOSUGGEST_ASYNC_FD
+
+ # When the fd is readable, call the response handler
+ zle -F "$_ZSH_AUTOSUGGEST_ASYNC_FD" _zsh_autosuggest_async_response
+}
+
+# Called when new data is ready to be read from the pipe
+# First arg will be fd ready for reading
+# Second arg will be passed in case of error
+_zsh_autosuggest_async_response() {
+ emulate -L zsh
+
+ local suggestion
+
+ if [[ -z "$2" || "$2" == "hup" ]]; then
+ # Read everything from the fd and give it as a suggestion
+ IFS='' read -rd '' -u $1 suggestion
+ zle autosuggest-suggest -- "$suggestion"
+
+ # Close the fd
+ builtin exec {1}<&-
+ fi
+
+ # Always remove the handler
+ zle -F "$1"
+ _ZSH_AUTOSUGGEST_ASYNC_FD=
+}
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/bind.zsh b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/bind.zsh
new file mode 100644
index 0000000..1dde137
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/bind.zsh
@@ -0,0 +1,106 @@
+
+#--------------------------------------------------------------------#
+# Widget Helpers #
+#--------------------------------------------------------------------#
+
+_zsh_autosuggest_incr_bind_count() {
+ typeset -gi bind_count=$((_ZSH_AUTOSUGGEST_BIND_COUNTS[$1]+1))
+ _ZSH_AUTOSUGGEST_BIND_COUNTS[$1]=$bind_count
+}
+
+# Bind a single widget to an autosuggest widget, saving a reference to the original widget
+_zsh_autosuggest_bind_widget() {
+ typeset -gA _ZSH_AUTOSUGGEST_BIND_COUNTS
+
+ local widget=$1
+ local autosuggest_action=$2
+ local prefix=$ZSH_AUTOSUGGEST_ORIGINAL_WIDGET_PREFIX
+
+ local -i bind_count
+
+ # Save a reference to the original widget
+ case $widgets[$widget] in
+ # Already bound
+ user:_zsh_autosuggest_(bound|orig)_*)
+ bind_count=$((_ZSH_AUTOSUGGEST_BIND_COUNTS[$widget]))
+ ;;
+
+ # User-defined widget
+ user:*)
+ _zsh_autosuggest_incr_bind_count $widget
+ zle -N $prefix$bind_count-$widget ${widgets[$widget]#*:}
+ ;;
+
+ # Built-in widget
+ builtin)
+ _zsh_autosuggest_incr_bind_count $widget
+ eval "_zsh_autosuggest_orig_${(q)widget}() { zle .${(q)widget} }"
+ zle -N $prefix$bind_count-$widget _zsh_autosuggest_orig_$widget
+ ;;
+
+ # Completion widget
+ completion:*)
+ _zsh_autosuggest_incr_bind_count $widget
+ eval "zle -C $prefix$bind_count-${(q)widget} ${${(s.:.)widgets[$widget]}[2,3]}"
+ ;;
+ esac
+
+ # Pass the original widget's name explicitly into the autosuggest
+ # function. Use this passed in widget name to call the original
+ # widget instead of relying on the $WIDGET variable being set
+ # correctly. $WIDGET cannot be trusted because other plugins call
+ # zle without the `-w` flag (e.g. `zle self-insert` instead of
+ # `zle self-insert -w`).
+ eval "_zsh_autosuggest_bound_${bind_count}_${(q)widget}() {
+ _zsh_autosuggest_widget_$autosuggest_action $prefix$bind_count-${(q)widget} \$@
+ }"
+
+ # Create the bound widget
+ zle -N -- $widget _zsh_autosuggest_bound_${bind_count}_$widget
+}
+
+# Map all configured widgets to the right autosuggest widgets
+_zsh_autosuggest_bind_widgets() {
+ emulate -L zsh
+
+ local widget
+ local ignore_widgets
+
+ ignore_widgets=(
+ .\*
+ _\*
+ ${_ZSH_AUTOSUGGEST_BUILTIN_ACTIONS/#/autosuggest-}
+ $ZSH_AUTOSUGGEST_ORIGINAL_WIDGET_PREFIX\*
+ $ZSH_AUTOSUGGEST_IGNORE_WIDGETS
+ )
+
+ # Find every widget we might want to bind and bind it appropriately
+ for widget in ${${(f)"$(builtin zle -la)"}:#${(j:|:)~ignore_widgets}}; do
+ if [[ -n ${ZSH_AUTOSUGGEST_CLEAR_WIDGETS[(r)$widget]} ]]; then
+ _zsh_autosuggest_bind_widget $widget clear
+ elif [[ -n ${ZSH_AUTOSUGGEST_ACCEPT_WIDGETS[(r)$widget]} ]]; then
+ _zsh_autosuggest_bind_widget $widget accept
+ elif [[ -n ${ZSH_AUTOSUGGEST_EXECUTE_WIDGETS[(r)$widget]} ]]; then
+ _zsh_autosuggest_bind_widget $widget execute
+ elif [[ -n ${ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS[(r)$widget]} ]]; then
+ _zsh_autosuggest_bind_widget $widget partial_accept
+ else
+ # Assume any unspecified widget might modify the buffer
+ _zsh_autosuggest_bind_widget $widget modify
+ fi
+ done
+}
+
+# Given the name of an original widget and args, invoke it, if it exists
+_zsh_autosuggest_invoke_original_widget() {
+ # Do nothing unless called with at least one arg
+ (( $# )) || return 0
+
+ local original_widget_name="$1"
+
+ shift
+
+ if (( ${+widgets[$original_widget_name]} )); then
+ zle $original_widget_name -- $@
+ fi
+}
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/config.zsh b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/config.zsh
new file mode 100644
index 0000000..32d32b2
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/config.zsh
@@ -0,0 +1,95 @@
+
+#--------------------------------------------------------------------#
+# Global Configuration Variables #
+#--------------------------------------------------------------------#
+
+# Color to use when highlighting suggestion
+# Uses format of `region_highlight`
+# More info: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Zle-Widgets
+(( ! ${+ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE} )) &&
+typeset -g ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=8'
+
+# Prefix to use when saving original versions of bound widgets
+(( ! ${+ZSH_AUTOSUGGEST_ORIGINAL_WIDGET_PREFIX} )) &&
+typeset -g ZSH_AUTOSUGGEST_ORIGINAL_WIDGET_PREFIX=autosuggest-orig-
+
+# Strategies to use to fetch a suggestion
+# Will try each strategy in order until a suggestion is returned
+(( ! ${+ZSH_AUTOSUGGEST_STRATEGY} )) && {
+ typeset -ga ZSH_AUTOSUGGEST_STRATEGY
+ ZSH_AUTOSUGGEST_STRATEGY=(history)
+}
+
+# Widgets that clear the suggestion
+(( ! ${+ZSH_AUTOSUGGEST_CLEAR_WIDGETS} )) && {
+ typeset -ga ZSH_AUTOSUGGEST_CLEAR_WIDGETS
+ ZSH_AUTOSUGGEST_CLEAR_WIDGETS=(
+ history-search-forward
+ history-search-backward
+ history-beginning-search-forward
+ history-beginning-search-backward
+ history-beginning-search-forward-end
+ history-beginning-search-backward-end
+ history-substring-search-up
+ history-substring-search-down
+ up-line-or-beginning-search
+ down-line-or-beginning-search
+ up-line-or-history
+ down-line-or-history
+ accept-line
+ copy-earlier-word
+ )
+}
+
+# Widgets that accept the entire suggestion
+(( ! ${+ZSH_AUTOSUGGEST_ACCEPT_WIDGETS} )) && {
+ typeset -ga ZSH_AUTOSUGGEST_ACCEPT_WIDGETS
+ ZSH_AUTOSUGGEST_ACCEPT_WIDGETS=(
+ forward-char
+ end-of-line
+ vi-forward-char
+ vi-end-of-line
+ vi-add-eol
+ )
+}
+
+# Widgets that accept the entire suggestion and execute it
+(( ! ${+ZSH_AUTOSUGGEST_EXECUTE_WIDGETS} )) && {
+ typeset -ga ZSH_AUTOSUGGEST_EXECUTE_WIDGETS
+ ZSH_AUTOSUGGEST_EXECUTE_WIDGETS=(
+ )
+}
+
+# Widgets that accept the suggestion as far as the cursor moves
+(( ! ${+ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS} )) && {
+ typeset -ga ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS
+ ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS=(
+ forward-word
+ emacs-forward-word
+ vi-forward-word
+ vi-forward-word-end
+ vi-forward-blank-word
+ vi-forward-blank-word-end
+ vi-find-next-char
+ vi-find-next-char-skip
+ )
+}
+
+# Widgets that should be ignored (globbing supported but must be escaped)
+(( ! ${+ZSH_AUTOSUGGEST_IGNORE_WIDGETS} )) && {
+ typeset -ga ZSH_AUTOSUGGEST_IGNORE_WIDGETS
+ ZSH_AUTOSUGGEST_IGNORE_WIDGETS=(
+ orig-\*
+ beep
+ run-help
+ set-local-history
+ which-command
+ yank
+ yank-pop
+ zle-\*
+ )
+}
+
+# Pty name for capturing completions for completion suggestion strategy
+(( ! ${+ZSH_AUTOSUGGEST_COMPLETIONS_PTY_NAME} )) &&
+typeset -g ZSH_AUTOSUGGEST_COMPLETIONS_PTY_NAME=zsh_autosuggest_completion_pty
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/fetch.zsh b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/fetch.zsh
new file mode 100644
index 0000000..fef2715
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/fetch.zsh
@@ -0,0 +1,27 @@
+
+#--------------------------------------------------------------------#
+# Fetch Suggestion #
+#--------------------------------------------------------------------#
+# Loops through all specified strategies and returns a suggestion
+# from the first strategy to provide one.
+#
+
+_zsh_autosuggest_fetch_suggestion() {
+ typeset -g suggestion
+ local -a strategies
+ local strategy
+
+ # Ensure we are working with an array
+ strategies=(${=ZSH_AUTOSUGGEST_STRATEGY})
+
+ for strategy in $strategies; do
+ # Try to get a suggestion from this strategy
+ _zsh_autosuggest_strategy_$strategy "$1"
+
+ # Ensure the suggestion matches the prefix
+ [[ "$suggestion" != "$1"* ]] && unset suggestion
+
+ # Break once we've found a valid suggestion
+ [[ -n "$suggestion" ]] && break
+ done
+}
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/highlight.zsh b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/highlight.zsh
new file mode 100644
index 0000000..273c03d
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/highlight.zsh
@@ -0,0 +1,26 @@
+
+#--------------------------------------------------------------------#
+# Highlighting #
+#--------------------------------------------------------------------#
+
+# If there was a highlight, remove it
+_zsh_autosuggest_highlight_reset() {
+ typeset -g _ZSH_AUTOSUGGEST_LAST_HIGHLIGHT
+
+ if [[ -n "$_ZSH_AUTOSUGGEST_LAST_HIGHLIGHT" ]]; then
+ region_highlight=("${(@)region_highlight:#$_ZSH_AUTOSUGGEST_LAST_HIGHLIGHT}")
+ unset _ZSH_AUTOSUGGEST_LAST_HIGHLIGHT
+ fi
+}
+
+# If there's a suggestion, highlight it
+_zsh_autosuggest_highlight_apply() {
+ typeset -g _ZSH_AUTOSUGGEST_LAST_HIGHLIGHT
+
+ if (( $#POSTDISPLAY )); then
+ typeset -g _ZSH_AUTOSUGGEST_LAST_HIGHLIGHT="$#BUFFER $(($#BUFFER + $#POSTDISPLAY)) $ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE"
+ region_highlight+=("$_ZSH_AUTOSUGGEST_LAST_HIGHLIGHT")
+ else
+ unset _ZSH_AUTOSUGGEST_LAST_HIGHLIGHT
+ fi
+}
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/start.zsh b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/start.zsh
new file mode 100644
index 0000000..5d4ee52
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/start.zsh
@@ -0,0 +1,33 @@
+
+#--------------------------------------------------------------------#
+# Start #
+#--------------------------------------------------------------------#
+
+# Start the autosuggestion widgets
+_zsh_autosuggest_start() {
+ # By default we re-bind widgets on every precmd to ensure we wrap other
+ # wrappers. Specifically, highlighting breaks if our widgets are wrapped by
+ # zsh-syntax-highlighting widgets. This also allows modifications to the
+ # widget list variables to take effect on the next precmd. However this has
+ # a decent performance hit, so users can set ZSH_AUTOSUGGEST_MANUAL_REBIND
+ # to disable the automatic re-binding.
+ if (( ${+ZSH_AUTOSUGGEST_MANUAL_REBIND} )); then
+ add-zsh-hook -d precmd _zsh_autosuggest_start
+ fi
+
+ _zsh_autosuggest_bind_widgets
+}
+
+# Mark for auto-loading the functions that we use
+autoload -Uz add-zsh-hook is-at-least
+
+# Automatically enable asynchronous mode in newer versions of zsh. Disable for
+# older versions because there is a bug when using async mode where ^C does not
+# work immediately after fetching a suggestion.
+# See https://github.com/zsh-users/zsh-autosuggestions/issues/364
+if is-at-least 5.0.8; then
+ typeset -g ZSH_AUTOSUGGEST_USE_ASYNC=
+fi
+
+# Start the autosuggestion widgets on the next precmd
+add-zsh-hook precmd _zsh_autosuggest_start
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/strategies/completion.zsh b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/strategies/completion.zsh
new file mode 100644
index 0000000..e2d114c
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/strategies/completion.zsh
@@ -0,0 +1,137 @@
+
+#--------------------------------------------------------------------#
+# Completion Suggestion Strategy #
+#--------------------------------------------------------------------#
+# Fetches a suggestion from the completion engine
+#
+
+_zsh_autosuggest_capture_postcompletion() {
+ # Always insert the first completion into the buffer
+ compstate[insert]=1
+
+ # Don't list completions
+ unset 'compstate[list]'
+}
+
+_zsh_autosuggest_capture_completion_widget() {
+ # Add a post-completion hook to be called after all completions have been
+ # gathered. The hook can modify compstate to affect what is done with the
+ # gathered completions.
+ local -a +h comppostfuncs
+ comppostfuncs=(_zsh_autosuggest_capture_postcompletion)
+
+ # Only capture completions at the end of the buffer
+ CURSOR=$#BUFFER
+
+ # Run the original widget wrapping `.complete-word` so we don't
+ # recursively try to fetch suggestions, since our pty is forked
+ # after autosuggestions is initialized.
+ zle -- ${(k)widgets[(r)completion:.complete-word:_main_complete]}
+
+ if is-at-least 5.0.3; then
+ # Don't do any cr/lf transformations. We need to do this immediately before
+ # output because if we do it in setup, onlcr will be re-enabled when we enter
+ # vared in the async code path. There is a bug in zpty module in older versions
+ # where the tty is not properly attached to the pty slave, resulting in stty
+ # getting stopped with a SIGTTOU. See zsh-workers thread 31660 and upstream
+ # commit f75904a38
+ stty -onlcr -ocrnl -F /dev/tty
+ fi
+
+ # The completion has been added, print the buffer as the suggestion
+ echo -nE - $'\0'$BUFFER$'\0'
+}
+
+zle -N autosuggest-capture-completion _zsh_autosuggest_capture_completion_widget
+
+_zsh_autosuggest_capture_setup() {
+ # There is a bug in zpty module in older zsh versions by which a
+ # zpty that exits will kill all zpty processes that were forked
+ # before it. Here we set up a zsh exit hook to SIGKILL the zpty
+ # process immediately, before it has a chance to kill any other
+ # zpty processes.
+ if ! is-at-least 5.4; then
+ zshexit() {
+ # The zsh builtin `kill` fails sometimes in older versions
+ # https://unix.stackexchange.com/a/477647/156673
+ kill -KILL $$ 2>&- || command kill -KILL $$
+
+ # Block for long enough for the signal to come through
+ sleep 1
+ }
+ fi
+
+ # Try to avoid any suggestions that wouldn't match the prefix
+ zstyle ':completion:*' matcher-list ''
+ zstyle ':completion:*' path-completion false
+ zstyle ':completion:*' max-errors 0 not-numeric
+
+ bindkey '^I' autosuggest-capture-completion
+}
+
+_zsh_autosuggest_capture_completion_sync() {
+ _zsh_autosuggest_capture_setup
+
+ zle autosuggest-capture-completion
+}
+
+_zsh_autosuggest_capture_completion_async() {
+ _zsh_autosuggest_capture_setup
+
+ zmodload zsh/parameter 2>/dev/null || return # For `$functions`
+
+ # Make vared completion work as if for a normal command line
+ # https://stackoverflow.com/a/7057118/154703
+ autoload +X _complete
+ functions[_original_complete]=$functions[_complete]
+ function _complete() {
+ unset 'compstate[vared]'
+ _original_complete "$@"
+ }
+
+ # Open zle with buffer set so we can capture completions for it
+ vared 1
+}
+
+_zsh_autosuggest_strategy_completion() {
+ # Reset options to defaults and enable LOCAL_OPTIONS
+ emulate -L zsh
+
+ # Enable extended glob for completion ignore pattern
+ setopt EXTENDED_GLOB
+
+ typeset -g suggestion
+ local line REPLY
+
+ # Exit if we don't have completions
+ whence compdef >/dev/null || return
+
+ # Exit if we don't have zpty
+ zmodload zsh/zpty 2>/dev/null || return
+
+ # Exit if our search string matches the ignore pattern
+ [[ -n "$ZSH_AUTOSUGGEST_COMPLETION_IGNORE" ]] && [[ "$1" == $~ZSH_AUTOSUGGEST_COMPLETION_IGNORE ]] && return
+
+ # Zle will be inactive if we are in async mode
+ if zle; then
+ zpty $ZSH_AUTOSUGGEST_COMPLETIONS_PTY_NAME _zsh_autosuggest_capture_completion_sync
+ else
+ zpty $ZSH_AUTOSUGGEST_COMPLETIONS_PTY_NAME _zsh_autosuggest_capture_completion_async "\$1"
+ zpty -w $ZSH_AUTOSUGGEST_COMPLETIONS_PTY_NAME $'\t'
+ fi
+
+ {
+ # The completion result is surrounded by null bytes, so read the
+ # content between the first two null bytes.
+ zpty -r $ZSH_AUTOSUGGEST_COMPLETIONS_PTY_NAME line '*'$'\0''*'$'\0'
+
+ # Extract the suggestion from between the null bytes. On older
+ # versions of zsh (older than 5.3), we sometimes get extra bytes after
+ # the second null byte, so trim those off the end.
+ # See http://www.zsh.org/mla/workers/2015/msg03290.html
+ suggestion="${${(@0)line}[2]}"
+ } always {
+ # Destroy the pty
+ zpty -d $ZSH_AUTOSUGGEST_COMPLETIONS_PTY_NAME
+ }
+}
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/strategies/history.zsh b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/strategies/history.zsh
new file mode 100644
index 0000000..0672a13
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/strategies/history.zsh
@@ -0,0 +1,32 @@
+
+#--------------------------------------------------------------------#
+# History Suggestion Strategy #
+#--------------------------------------------------------------------#
+# Suggests the most recent history item that matches the given
+# prefix.
+#
+
+_zsh_autosuggest_strategy_history() {
+ # Reset options to defaults and enable LOCAL_OPTIONS
+ emulate -L zsh
+
+ # Enable globbing flags so that we can use (#m) and (x~y) glob operator
+ setopt EXTENDED_GLOB
+
+ # Escape backslashes and all of the glob operators so we can use
+ # this string as a pattern to search the $history associative array.
+ # - (#m) globbing flag enables setting references for match data
+ # TODO: Use (b) flag when we can drop support for zsh older than v5.0.8
+ local prefix="${1//(#m)[\\*?[\]<>()|^~#]/\\$MATCH}"
+
+ # Get the history items that match the prefix, excluding those that match
+ # the ignore pattern
+ local pattern="$prefix*"
+ if [[ -n $ZSH_AUTOSUGGEST_HISTORY_IGNORE ]]; then
+ pattern="($pattern)~($ZSH_AUTOSUGGEST_HISTORY_IGNORE)"
+ fi
+
+ # Give the first history item matching the pattern as the suggestion
+ # - (r) subscript flag makes the pattern match on values
+ typeset -g suggestion="${history[(r)$pattern]}"
+}
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/strategies/match_prev_cmd.zsh b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/strategies/match_prev_cmd.zsh
new file mode 100644
index 0000000..b709783
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/strategies/match_prev_cmd.zsh
@@ -0,0 +1,66 @@
+
+#--------------------------------------------------------------------#
+# Match Previous Command Suggestion Strategy #
+#--------------------------------------------------------------------#
+# Suggests the most recent history item that matches the given
+# prefix and whose preceding history item also matches the most
+# recently executed command.
+#
+# For example, suppose your history has the following entries:
+# - pwd
+# - ls foo
+# - ls bar
+# - pwd
+#
+# Given the history list above, when you type 'ls', the suggestion
+# will be 'ls foo' rather than 'ls bar' because your most recently
+# executed command (pwd) was previously followed by 'ls foo'.
+#
+# Note that this strategy won't work as expected with ZSH options that don't
+# preserve the history order such as `HIST_IGNORE_ALL_DUPS` or
+# `HIST_EXPIRE_DUPS_FIRST`.
+
+_zsh_autosuggest_strategy_match_prev_cmd() {
+ # Reset options to defaults and enable LOCAL_OPTIONS
+ emulate -L zsh
+
+ # Enable globbing flags so that we can use (#m) and (x~y) glob operator
+ setopt EXTENDED_GLOB
+
+ # TODO: Use (b) flag when we can drop support for zsh older than v5.0.8
+ local prefix="${1//(#m)[\\*?[\]<>()|^~#]/\\$MATCH}"
+
+ # Get the history items that match the prefix, excluding those that match
+ # the ignore pattern
+ local pattern="$prefix*"
+ if [[ -n $ZSH_AUTOSUGGEST_HISTORY_IGNORE ]]; then
+ pattern="($pattern)~($ZSH_AUTOSUGGEST_HISTORY_IGNORE)"
+ fi
+
+ # Get all history event numbers that correspond to history
+ # entries that match the pattern
+ local history_match_keys
+ history_match_keys=(${(k)history[(R)$~pattern]})
+
+ # By default we use the first history number (most recent history entry)
+ local histkey="${history_match_keys[1]}"
+
+ # Get the previously executed command
+ local prev_cmd="$(_zsh_autosuggest_escape_command "${history[$((HISTCMD-1))]}")"
+
+ # Iterate up to the first 200 history event numbers that match $prefix
+ for key in "${(@)history_match_keys[1,200]}"; do
+ # Stop if we ran out of history
+ [[ $key -gt 1 ]] || break
+
+ # See if the history entry preceding the suggestion matches the
+ # previous command, and use it if it does
+ if [[ "${history[$((key - 1))]}" == "$prev_cmd" ]]; then
+ histkey="$key"
+ break
+ fi
+ done
+
+ # Give back the matched history entry
+ typeset -g suggestion="$history[$histkey]"
+}
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/util.zsh b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/util.zsh
new file mode 100644
index 0000000..1f55d36
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/util.zsh
@@ -0,0 +1,11 @@
+
+#--------------------------------------------------------------------#
+# Utility Functions #
+#--------------------------------------------------------------------#
+
+_zsh_autosuggest_escape_command() {
+ setopt localoptions EXTENDED_GLOB
+
+ # Escape special chars in the string (requires EXTENDED_GLOB)
+ echo -E "${1//(#m)[\"\'\\()\[\]|*?~]/\\$MATCH}"
+}
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/widgets.zsh b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/widgets.zsh
new file mode 100644
index 0000000..7562897
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/src/widgets.zsh
@@ -0,0 +1,231 @@
+
+#--------------------------------------------------------------------#
+# Autosuggest Widget Implementations #
+#--------------------------------------------------------------------#
+
+# Disable suggestions
+_zsh_autosuggest_disable() {
+ typeset -g _ZSH_AUTOSUGGEST_DISABLED
+ _zsh_autosuggest_clear
+}
+
+# Enable suggestions
+_zsh_autosuggest_enable() {
+ unset _ZSH_AUTOSUGGEST_DISABLED
+
+ if (( $#BUFFER )); then
+ _zsh_autosuggest_fetch
+ fi
+}
+
+# Toggle suggestions (enable/disable)
+_zsh_autosuggest_toggle() {
+ if (( ${+_ZSH_AUTOSUGGEST_DISABLED} )); then
+ _zsh_autosuggest_enable
+ else
+ _zsh_autosuggest_disable
+ fi
+}
+
+# Clear the suggestion
+_zsh_autosuggest_clear() {
+ # Remove the suggestion
+ POSTDISPLAY=
+
+ _zsh_autosuggest_invoke_original_widget $@
+}
+
+# Modify the buffer and get a new suggestion
+_zsh_autosuggest_modify() {
+ local -i retval
+
+ # Only available in zsh >= 5.4
+ local -i KEYS_QUEUED_COUNT
+
+ # Save the contents of the buffer/postdisplay
+ local orig_buffer="$BUFFER"
+ local orig_postdisplay="$POSTDISPLAY"
+
+ # Clear suggestion while waiting for next one
+ POSTDISPLAY=
+
+ # Original widget may modify the buffer
+ _zsh_autosuggest_invoke_original_widget $@
+ retval=$?
+
+ emulate -L zsh
+
+ # Don't fetch a new suggestion if there's more input to be read immediately
+ if (( $PENDING > 0 || $KEYS_QUEUED_COUNT > 0 )); then
+ POSTDISPLAY="$orig_postdisplay"
+ return $retval
+ fi
+
+ # Optimize if manually typing in the suggestion or if buffer hasn't changed
+ if [[ "$BUFFER" = "$orig_buffer"* && "$orig_postdisplay" = "${BUFFER:$#orig_buffer}"* ]]; then
+ POSTDISPLAY="${orig_postdisplay:$(($#BUFFER - $#orig_buffer))}"
+ return $retval
+ fi
+
+ # Bail out if suggestions are disabled
+ if (( ${+_ZSH_AUTOSUGGEST_DISABLED} )); then
+ return $?
+ fi
+
+ # Get a new suggestion if the buffer is not empty after modification
+ if (( $#BUFFER > 0 )); then
+ if [[ -z "$ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE" ]] || (( $#BUFFER <= $ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE )); then
+ _zsh_autosuggest_fetch
+ fi
+ fi
+
+ return $retval
+}
+
+# Fetch a new suggestion based on what's currently in the buffer
+_zsh_autosuggest_fetch() {
+ if (( ${+ZSH_AUTOSUGGEST_USE_ASYNC} )); then
+ _zsh_autosuggest_async_request "$BUFFER"
+ else
+ local suggestion
+ _zsh_autosuggest_fetch_suggestion "$BUFFER"
+ _zsh_autosuggest_suggest "$suggestion"
+ fi
+}
+
+# Offer a suggestion
+_zsh_autosuggest_suggest() {
+ emulate -L zsh
+
+ local suggestion="$1"
+
+ if [[ -n "$suggestion" ]] && (( $#BUFFER )); then
+ POSTDISPLAY="${suggestion#$BUFFER}"
+ else
+ POSTDISPLAY=
+ fi
+}
+
+# Accept the entire suggestion
+_zsh_autosuggest_accept() {
+ local -i retval max_cursor_pos=$#BUFFER
+
+ # When vicmd keymap is active, the cursor can't move all the way
+ # to the end of the buffer
+ if [[ "$KEYMAP" = "vicmd" ]]; then
+ max_cursor_pos=$((max_cursor_pos - 1))
+ fi
+
+ # If we're not in a valid state to accept a suggestion, just run the
+ # original widget and bail out
+ if (( $CURSOR != $max_cursor_pos || !$#POSTDISPLAY )); then
+ _zsh_autosuggest_invoke_original_widget $@
+ return
+ fi
+
+ # Only accept if the cursor is at the end of the buffer
+ # Add the suggestion to the buffer
+ BUFFER="$BUFFER$POSTDISPLAY"
+
+ # Remove the suggestion
+ POSTDISPLAY=
+
+ # Run the original widget before manually moving the cursor so that the
+ # cursor movement doesn't make the widget do something unexpected
+ _zsh_autosuggest_invoke_original_widget $@
+ retval=$?
+
+ # Move the cursor to the end of the buffer
+ if [[ "$KEYMAP" = "vicmd" ]]; then
+ CURSOR=$(($#BUFFER - 1))
+ else
+ CURSOR=$#BUFFER
+ fi
+
+ return $retval
+}
+
+# Accept the entire suggestion and execute it
+_zsh_autosuggest_execute() {
+ # Add the suggestion to the buffer
+ BUFFER="$BUFFER$POSTDISPLAY"
+
+ # Remove the suggestion
+ POSTDISPLAY=
+
+ # Call the original `accept-line` to handle syntax highlighting or
+ # other potential custom behavior
+ _zsh_autosuggest_invoke_original_widget "accept-line"
+}
+
+# Partially accept the suggestion
+_zsh_autosuggest_partial_accept() {
+ local -i retval cursor_loc
+
+ # Save the contents of the buffer so we can restore later if needed
+ local original_buffer="$BUFFER"
+
+ # Temporarily accept the suggestion.
+ BUFFER="$BUFFER$POSTDISPLAY"
+
+ # Original widget moves the cursor
+ _zsh_autosuggest_invoke_original_widget $@
+ retval=$?
+
+ # Normalize cursor location across vi/emacs modes
+ cursor_loc=$CURSOR
+ if [[ "$KEYMAP" = "vicmd" ]]; then
+ cursor_loc=$((cursor_loc + 1))
+ fi
+
+ # If we've moved past the end of the original buffer
+ if (( $cursor_loc > $#original_buffer )); then
+ # Set POSTDISPLAY to text right of the cursor
+ POSTDISPLAY="${BUFFER[$(($cursor_loc + 1)),$#BUFFER]}"
+
+ # Clip the buffer at the cursor
+ BUFFER="${BUFFER[1,$cursor_loc]}"
+ else
+ # Restore the original buffer
+ BUFFER="$original_buffer"
+ fi
+
+ return $retval
+}
+
+() {
+ typeset -ga _ZSH_AUTOSUGGEST_BUILTIN_ACTIONS
+
+ _ZSH_AUTOSUGGEST_BUILTIN_ACTIONS=(
+ clear
+ fetch
+ suggest
+ accept
+ execute
+ enable
+ disable
+ toggle
+ )
+
+ local action
+ for action in $_ZSH_AUTOSUGGEST_BUILTIN_ACTIONS modify partial_accept; do
+ eval "_zsh_autosuggest_widget_$action() {
+ local -i retval
+
+ _zsh_autosuggest_highlight_reset
+
+ _zsh_autosuggest_$action \$@
+ retval=\$?
+
+ _zsh_autosuggest_highlight_apply
+
+ zle -R
+
+ return \$retval
+ }"
+ done
+
+ for action in $_ZSH_AUTOSUGGEST_BUILTIN_ACTIONS; do
+ zle -N autosuggest-$action _zsh_autosuggest_widget_$action
+ done
+}
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.plugin.zsh b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.plugin.zsh
new file mode 100644
index 0000000..16c2256
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.plugin.zsh
@@ -0,0 +1 @@
+source ${0:A:h}/zsh-autosuggestions.zsh
diff --git a/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh
new file mode 100644
index 0000000..e780225
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh
@@ -0,0 +1,867 @@
+# Fish-like fast/unobtrusive autosuggestions for zsh.
+# https://github.com/zsh-users/zsh-autosuggestions
+# v0.7.1
+# Copyright (c) 2013 Thiago de Arruda
+# Copyright (c) 2016-2021 Eric Freese
+#
+# Permission is hereby granted, free of charge, to any person
+# obtaining a copy of this software and associated documentation
+# files (the "Software"), to deal in the Software without
+# restriction, including without limitation the rights to use,
+# copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following
+# conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+# OTHER DEALINGS IN THE SOFTWARE.
+
+#--------------------------------------------------------------------#
+# Global Configuration Variables #
+#--------------------------------------------------------------------#
+
+# Color to use when highlighting suggestion
+# Uses format of `region_highlight`
+# More info: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Zle-Widgets
+(( ! ${+ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE} )) &&
+typeset -g ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=8'
+
+# Prefix to use when saving original versions of bound widgets
+(( ! ${+ZSH_AUTOSUGGEST_ORIGINAL_WIDGET_PREFIX} )) &&
+typeset -g ZSH_AUTOSUGGEST_ORIGINAL_WIDGET_PREFIX=autosuggest-orig-
+
+# Strategies to use to fetch a suggestion
+# Will try each strategy in order until a suggestion is returned
+(( ! ${+ZSH_AUTOSUGGEST_STRATEGY} )) && {
+ typeset -ga ZSH_AUTOSUGGEST_STRATEGY
+ ZSH_AUTOSUGGEST_STRATEGY=(history)
+}
+
+# Widgets that clear the suggestion
+(( ! ${+ZSH_AUTOSUGGEST_CLEAR_WIDGETS} )) && {
+ typeset -ga ZSH_AUTOSUGGEST_CLEAR_WIDGETS
+ ZSH_AUTOSUGGEST_CLEAR_WIDGETS=(
+ history-search-forward
+ history-search-backward
+ history-beginning-search-forward
+ history-beginning-search-backward
+ history-beginning-search-forward-end
+ history-beginning-search-backward-end
+ history-substring-search-up
+ history-substring-search-down
+ up-line-or-beginning-search
+ down-line-or-beginning-search
+ up-line-or-history
+ down-line-or-history
+ accept-line
+ copy-earlier-word
+ )
+}
+
+# Widgets that accept the entire suggestion
+(( ! ${+ZSH_AUTOSUGGEST_ACCEPT_WIDGETS} )) && {
+ typeset -ga ZSH_AUTOSUGGEST_ACCEPT_WIDGETS
+ ZSH_AUTOSUGGEST_ACCEPT_WIDGETS=(
+ forward-char
+ end-of-line
+ vi-forward-char
+ vi-end-of-line
+ vi-add-eol
+ )
+}
+
+# Widgets that accept the entire suggestion and execute it
+(( ! ${+ZSH_AUTOSUGGEST_EXECUTE_WIDGETS} )) && {
+ typeset -ga ZSH_AUTOSUGGEST_EXECUTE_WIDGETS
+ ZSH_AUTOSUGGEST_EXECUTE_WIDGETS=(
+ )
+}
+
+# Widgets that accept the suggestion as far as the cursor moves
+(( ! ${+ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS} )) && {
+ typeset -ga ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS
+ ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS=(
+ forward-word
+ emacs-forward-word
+ vi-forward-word
+ vi-forward-word-end
+ vi-forward-blank-word
+ vi-forward-blank-word-end
+ vi-find-next-char
+ vi-find-next-char-skip
+ )
+}
+
+# Widgets that should be ignored (globbing supported but must be escaped)
+(( ! ${+ZSH_AUTOSUGGEST_IGNORE_WIDGETS} )) && {
+ typeset -ga ZSH_AUTOSUGGEST_IGNORE_WIDGETS
+ ZSH_AUTOSUGGEST_IGNORE_WIDGETS=(
+ orig-\*
+ beep
+ run-help
+ set-local-history
+ which-command
+ yank
+ yank-pop
+ zle-\*
+ )
+}
+
+# Pty name for capturing completions for completion suggestion strategy
+(( ! ${+ZSH_AUTOSUGGEST_COMPLETIONS_PTY_NAME} )) &&
+typeset -g ZSH_AUTOSUGGEST_COMPLETIONS_PTY_NAME=zsh_autosuggest_completion_pty
+
+#--------------------------------------------------------------------#
+# Utility Functions #
+#--------------------------------------------------------------------#
+
+_zsh_autosuggest_escape_command() {
+ setopt localoptions EXTENDED_GLOB
+
+ # Escape special chars in the string (requires EXTENDED_GLOB)
+ echo -E "${1//(#m)[\"\'\\()\[\]|*?~]/\\$MATCH}"
+}
+
+#--------------------------------------------------------------------#
+# Widget Helpers #
+#--------------------------------------------------------------------#
+
+_zsh_autosuggest_incr_bind_count() {
+ typeset -gi bind_count=$((_ZSH_AUTOSUGGEST_BIND_COUNTS[$1]+1))
+ _ZSH_AUTOSUGGEST_BIND_COUNTS[$1]=$bind_count
+}
+
+# Bind a single widget to an autosuggest widget, saving a reference to the original widget
+_zsh_autosuggest_bind_widget() {
+ typeset -gA _ZSH_AUTOSUGGEST_BIND_COUNTS
+
+ local widget=$1
+ local autosuggest_action=$2
+ local prefix=$ZSH_AUTOSUGGEST_ORIGINAL_WIDGET_PREFIX
+
+ local -i bind_count
+
+ # Save a reference to the original widget
+ case $widgets[$widget] in
+ # Already bound
+ user:_zsh_autosuggest_(bound|orig)_*)
+ bind_count=$((_ZSH_AUTOSUGGEST_BIND_COUNTS[$widget]))
+ ;;
+
+ # User-defined widget
+ user:*)
+ _zsh_autosuggest_incr_bind_count $widget
+ zle -N $prefix$bind_count-$widget ${widgets[$widget]#*:}
+ ;;
+
+ # Built-in widget
+ builtin)
+ _zsh_autosuggest_incr_bind_count $widget
+ eval "_zsh_autosuggest_orig_${(q)widget}() { zle .${(q)widget} }"
+ zle -N $prefix$bind_count-$widget _zsh_autosuggest_orig_$widget
+ ;;
+
+ # Completion widget
+ completion:*)
+ _zsh_autosuggest_incr_bind_count $widget
+ eval "zle -C $prefix$bind_count-${(q)widget} ${${(s.:.)widgets[$widget]}[2,3]}"
+ ;;
+ esac
+
+ # Pass the original widget's name explicitly into the autosuggest
+ # function. Use this passed in widget name to call the original
+ # widget instead of relying on the $WIDGET variable being set
+ # correctly. $WIDGET cannot be trusted because other plugins call
+ # zle without the `-w` flag (e.g. `zle self-insert` instead of
+ # `zle self-insert -w`).
+ eval "_zsh_autosuggest_bound_${bind_count}_${(q)widget}() {
+ _zsh_autosuggest_widget_$autosuggest_action $prefix$bind_count-${(q)widget} \$@
+ }"
+
+ # Create the bound widget
+ zle -N -- $widget _zsh_autosuggest_bound_${bind_count}_$widget
+}
+
+# Map all configured widgets to the right autosuggest widgets
+_zsh_autosuggest_bind_widgets() {
+ emulate -L zsh
+
+ local widget
+ local ignore_widgets
+
+ ignore_widgets=(
+ .\*
+ _\*
+ ${_ZSH_AUTOSUGGEST_BUILTIN_ACTIONS/#/autosuggest-}
+ $ZSH_AUTOSUGGEST_ORIGINAL_WIDGET_PREFIX\*
+ $ZSH_AUTOSUGGEST_IGNORE_WIDGETS
+ )
+
+ # Find every widget we might want to bind and bind it appropriately
+ for widget in ${${(f)"$(builtin zle -la)"}:#${(j:|:)~ignore_widgets}}; do
+ if [[ -n ${ZSH_AUTOSUGGEST_CLEAR_WIDGETS[(r)$widget]} ]]; then
+ _zsh_autosuggest_bind_widget $widget clear
+ elif [[ -n ${ZSH_AUTOSUGGEST_ACCEPT_WIDGETS[(r)$widget]} ]]; then
+ _zsh_autosuggest_bind_widget $widget accept
+ elif [[ -n ${ZSH_AUTOSUGGEST_EXECUTE_WIDGETS[(r)$widget]} ]]; then
+ _zsh_autosuggest_bind_widget $widget execute
+ elif [[ -n ${ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS[(r)$widget]} ]]; then
+ _zsh_autosuggest_bind_widget $widget partial_accept
+ else
+ # Assume any unspecified widget might modify the buffer
+ _zsh_autosuggest_bind_widget $widget modify
+ fi
+ done
+}
+
+# Given the name of an original widget and args, invoke it, if it exists
+_zsh_autosuggest_invoke_original_widget() {
+ # Do nothing unless called with at least one arg
+ (( $# )) || return 0
+
+ local original_widget_name="$1"
+
+ shift
+
+ if (( ${+widgets[$original_widget_name]} )); then
+ zle $original_widget_name -- $@
+ fi
+}
+
+#--------------------------------------------------------------------#
+# Highlighting #
+#--------------------------------------------------------------------#
+
+# If there was a highlight, remove it
+_zsh_autosuggest_highlight_reset() {
+ typeset -g _ZSH_AUTOSUGGEST_LAST_HIGHLIGHT
+
+ if [[ -n "$_ZSH_AUTOSUGGEST_LAST_HIGHLIGHT" ]]; then
+ region_highlight=("${(@)region_highlight:#$_ZSH_AUTOSUGGEST_LAST_HIGHLIGHT}")
+ unset _ZSH_AUTOSUGGEST_LAST_HIGHLIGHT
+ fi
+}
+
+# If there's a suggestion, highlight it
+_zsh_autosuggest_highlight_apply() {
+ typeset -g _ZSH_AUTOSUGGEST_LAST_HIGHLIGHT
+
+ if (( $#POSTDISPLAY )); then
+ typeset -g _ZSH_AUTOSUGGEST_LAST_HIGHLIGHT="$#BUFFER $(($#BUFFER + $#POSTDISPLAY)) $ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE"
+ region_highlight+=("$_ZSH_AUTOSUGGEST_LAST_HIGHLIGHT")
+ else
+ unset _ZSH_AUTOSUGGEST_LAST_HIGHLIGHT
+ fi
+}
+
+#--------------------------------------------------------------------#
+# Autosuggest Widget Implementations #
+#--------------------------------------------------------------------#
+
+# Disable suggestions
+_zsh_autosuggest_disable() {
+ typeset -g _ZSH_AUTOSUGGEST_DISABLED
+ _zsh_autosuggest_clear
+}
+
+# Enable suggestions
+_zsh_autosuggest_enable() {
+ unset _ZSH_AUTOSUGGEST_DISABLED
+
+ if (( $#BUFFER )); then
+ _zsh_autosuggest_fetch
+ fi
+}
+
+# Toggle suggestions (enable/disable)
+_zsh_autosuggest_toggle() {
+ if (( ${+_ZSH_AUTOSUGGEST_DISABLED} )); then
+ _zsh_autosuggest_enable
+ else
+ _zsh_autosuggest_disable
+ fi
+}
+
+# Clear the suggestion
+_zsh_autosuggest_clear() {
+ # Remove the suggestion
+ POSTDISPLAY=
+
+ _zsh_autosuggest_invoke_original_widget $@
+}
+
+# Modify the buffer and get a new suggestion
+_zsh_autosuggest_modify() {
+ local -i retval
+
+ # Only available in zsh >= 5.4
+ local -i KEYS_QUEUED_COUNT
+
+ # Save the contents of the buffer/postdisplay
+ local orig_buffer="$BUFFER"
+ local orig_postdisplay="$POSTDISPLAY"
+
+ # Clear suggestion while waiting for next one
+ POSTDISPLAY=
+
+ # Original widget may modify the buffer
+ _zsh_autosuggest_invoke_original_widget $@
+ retval=$?
+
+ emulate -L zsh
+
+ # Don't fetch a new suggestion if there's more input to be read immediately
+ if (( $PENDING > 0 || $KEYS_QUEUED_COUNT > 0 )); then
+ POSTDISPLAY="$orig_postdisplay"
+ return $retval
+ fi
+
+ # Optimize if manually typing in the suggestion or if buffer hasn't changed
+ if [[ "$BUFFER" = "$orig_buffer"* && "$orig_postdisplay" = "${BUFFER:$#orig_buffer}"* ]]; then
+ POSTDISPLAY="${orig_postdisplay:$(($#BUFFER - $#orig_buffer))}"
+ return $retval
+ fi
+
+ # Bail out if suggestions are disabled
+ if (( ${+_ZSH_AUTOSUGGEST_DISABLED} )); then
+ return $?
+ fi
+
+ # Get a new suggestion if the buffer is not empty after modification
+ if (( $#BUFFER > 0 )); then
+ if [[ -z "$ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE" ]] || (( $#BUFFER <= $ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE )); then
+ _zsh_autosuggest_fetch
+ fi
+ fi
+
+ return $retval
+}
+
+# Fetch a new suggestion based on what's currently in the buffer
+_zsh_autosuggest_fetch() {
+ if (( ${+ZSH_AUTOSUGGEST_USE_ASYNC} )); then
+ _zsh_autosuggest_async_request "$BUFFER"
+ else
+ local suggestion
+ _zsh_autosuggest_fetch_suggestion "$BUFFER"
+ _zsh_autosuggest_suggest "$suggestion"
+ fi
+}
+
+# Offer a suggestion
+_zsh_autosuggest_suggest() {
+ emulate -L zsh
+
+ local suggestion="$1"
+
+ if [[ -n "$suggestion" ]] && (( $#BUFFER )); then
+ POSTDISPLAY="${suggestion#$BUFFER}"
+ else
+ POSTDISPLAY=
+ fi
+}
+
+# Accept the entire suggestion
+_zsh_autosuggest_accept() {
+ local -i retval max_cursor_pos=$#BUFFER
+
+ # When vicmd keymap is active, the cursor can't move all the way
+ # to the end of the buffer
+ if [[ "$KEYMAP" = "vicmd" ]]; then
+ max_cursor_pos=$((max_cursor_pos - 1))
+ fi
+
+ # If we're not in a valid state to accept a suggestion, just run the
+ # original widget and bail out
+ if (( $CURSOR != $max_cursor_pos || !$#POSTDISPLAY )); then
+ _zsh_autosuggest_invoke_original_widget $@
+ return
+ fi
+
+ # Only accept if the cursor is at the end of the buffer
+ # Add the suggestion to the buffer
+ BUFFER="$BUFFER$POSTDISPLAY"
+
+ # Remove the suggestion
+ POSTDISPLAY=
+
+ # Run the original widget before manually moving the cursor so that the
+ # cursor movement doesn't make the widget do something unexpected
+ _zsh_autosuggest_invoke_original_widget $@
+ retval=$?
+
+ # Move the cursor to the end of the buffer
+ if [[ "$KEYMAP" = "vicmd" ]]; then
+ CURSOR=$(($#BUFFER - 1))
+ else
+ CURSOR=$#BUFFER
+ fi
+
+ return $retval
+}
+
+# Accept the entire suggestion and execute it
+_zsh_autosuggest_execute() {
+ # Add the suggestion to the buffer
+ BUFFER="$BUFFER$POSTDISPLAY"
+
+ # Remove the suggestion
+ POSTDISPLAY=
+
+ # Call the original `accept-line` to handle syntax highlighting or
+ # other potential custom behavior
+ _zsh_autosuggest_invoke_original_widget "accept-line"
+}
+
+# Partially accept the suggestion
+_zsh_autosuggest_partial_accept() {
+ local -i retval cursor_loc
+
+ # Save the contents of the buffer so we can restore later if needed
+ local original_buffer="$BUFFER"
+
+ # Temporarily accept the suggestion.
+ BUFFER="$BUFFER$POSTDISPLAY"
+
+ # Original widget moves the cursor
+ _zsh_autosuggest_invoke_original_widget $@
+ retval=$?
+
+ # Normalize cursor location across vi/emacs modes
+ cursor_loc=$CURSOR
+ if [[ "$KEYMAP" = "vicmd" ]]; then
+ cursor_loc=$((cursor_loc + 1))
+ fi
+
+ # If we've moved past the end of the original buffer
+ if (( $cursor_loc > $#original_buffer )); then
+ # Set POSTDISPLAY to text right of the cursor
+ POSTDISPLAY="${BUFFER[$(($cursor_loc + 1)),$#BUFFER]}"
+
+ # Clip the buffer at the cursor
+ BUFFER="${BUFFER[1,$cursor_loc]}"
+ else
+ # Restore the original buffer
+ BUFFER="$original_buffer"
+ fi
+
+ return $retval
+}
+
+() {
+ typeset -ga _ZSH_AUTOSUGGEST_BUILTIN_ACTIONS
+
+ _ZSH_AUTOSUGGEST_BUILTIN_ACTIONS=(
+ clear
+ fetch
+ suggest
+ accept
+ execute
+ enable
+ disable
+ toggle
+ )
+
+ local action
+ for action in $_ZSH_AUTOSUGGEST_BUILTIN_ACTIONS modify partial_accept; do
+ eval "_zsh_autosuggest_widget_$action() {
+ local -i retval
+
+ _zsh_autosuggest_highlight_reset
+
+ _zsh_autosuggest_$action \$@
+ retval=\$?
+
+ _zsh_autosuggest_highlight_apply
+
+ zle -R
+
+ return \$retval
+ }"
+ done
+
+ for action in $_ZSH_AUTOSUGGEST_BUILTIN_ACTIONS; do
+ zle -N autosuggest-$action _zsh_autosuggest_widget_$action
+ done
+}
+
+#--------------------------------------------------------------------#
+# Completion Suggestion Strategy #
+#--------------------------------------------------------------------#
+# Fetches a suggestion from the completion engine
+#
+
+_zsh_autosuggest_capture_postcompletion() {
+ # Always insert the first completion into the buffer
+ compstate[insert]=1
+
+ # Don't list completions
+ unset 'compstate[list]'
+}
+
+_zsh_autosuggest_capture_completion_widget() {
+ # Add a post-completion hook to be called after all completions have been
+ # gathered. The hook can modify compstate to affect what is done with the
+ # gathered completions.
+ local -a +h comppostfuncs
+ comppostfuncs=(_zsh_autosuggest_capture_postcompletion)
+
+ # Only capture completions at the end of the buffer
+ CURSOR=$#BUFFER
+
+ # Run the original widget wrapping `.complete-word` so we don't
+ # recursively try to fetch suggestions, since our pty is forked
+ # after autosuggestions is initialized.
+ zle -- ${(k)widgets[(r)completion:.complete-word:_main_complete]}
+
+ if is-at-least 5.0.3; then
+ # Don't do any cr/lf transformations. We need to do this immediately before
+ # output because if we do it in setup, onlcr will be re-enabled when we enter
+ # vared in the async code path. There is a bug in zpty module in older versions
+ # where the tty is not properly attached to the pty slave, resulting in stty
+ # getting stopped with a SIGTTOU. See zsh-workers thread 31660 and upstream
+ # commit f75904a38
+ stty -onlcr -ocrnl -F /dev/tty
+ fi
+
+ # The completion has been added, print the buffer as the suggestion
+ echo -nE - $'\0'$BUFFER$'\0'
+}
+
+zle -N autosuggest-capture-completion _zsh_autosuggest_capture_completion_widget
+
+_zsh_autosuggest_capture_setup() {
+ # There is a bug in zpty module in older zsh versions by which a
+ # zpty that exits will kill all zpty processes that were forked
+ # before it. Here we set up a zsh exit hook to SIGKILL the zpty
+ # process immediately, before it has a chance to kill any other
+ # zpty processes.
+ if ! is-at-least 5.4; then
+ zshexit() {
+ # The zsh builtin `kill` fails sometimes in older versions
+ # https://unix.stackexchange.com/a/477647/156673
+ kill -KILL $$ 2>&- || command kill -KILL $$
+
+ # Block for long enough for the signal to come through
+ sleep 1
+ }
+ fi
+
+ # Try to avoid any suggestions that wouldn't match the prefix
+ zstyle ':completion:*' matcher-list ''
+ zstyle ':completion:*' path-completion false
+ zstyle ':completion:*' max-errors 0 not-numeric
+
+ bindkey '^I' autosuggest-capture-completion
+}
+
+_zsh_autosuggest_capture_completion_sync() {
+ _zsh_autosuggest_capture_setup
+
+ zle autosuggest-capture-completion
+}
+
+_zsh_autosuggest_capture_completion_async() {
+ _zsh_autosuggest_capture_setup
+
+ zmodload zsh/parameter 2>/dev/null || return # For `$functions`
+
+ # Make vared completion work as if for a normal command line
+ # https://stackoverflow.com/a/7057118/154703
+ autoload +X _complete
+ functions[_original_complete]=$functions[_complete]
+ function _complete() {
+ unset 'compstate[vared]'
+ _original_complete "$@"
+ }
+
+ # Open zle with buffer set so we can capture completions for it
+ vared 1
+}
+
+_zsh_autosuggest_strategy_completion() {
+ # Reset options to defaults and enable LOCAL_OPTIONS
+ emulate -L zsh
+
+ # Enable extended glob for completion ignore pattern
+ setopt EXTENDED_GLOB
+
+ typeset -g suggestion
+ local line REPLY
+
+ # Exit if we don't have completions
+ whence compdef >/dev/null || return
+
+ # Exit if we don't have zpty
+ zmodload zsh/zpty 2>/dev/null || return
+
+ # Exit if our search string matches the ignore pattern
+ [[ -n "$ZSH_AUTOSUGGEST_COMPLETION_IGNORE" ]] && [[ "$1" == $~ZSH_AUTOSUGGEST_COMPLETION_IGNORE ]] && return
+
+ # Zle will be inactive if we are in async mode
+ if zle; then
+ zpty $ZSH_AUTOSUGGEST_COMPLETIONS_PTY_NAME _zsh_autosuggest_capture_completion_sync
+ else
+ zpty $ZSH_AUTOSUGGEST_COMPLETIONS_PTY_NAME _zsh_autosuggest_capture_completion_async "\$1"
+ zpty -w $ZSH_AUTOSUGGEST_COMPLETIONS_PTY_NAME $'\t'
+ fi
+
+ {
+ # The completion result is surrounded by null bytes, so read the
+ # content between the first two null bytes.
+ zpty -r $ZSH_AUTOSUGGEST_COMPLETIONS_PTY_NAME line '*'$'\0''*'$'\0'
+
+ # Extract the suggestion from between the null bytes. On older
+ # versions of zsh (older than 5.3), we sometimes get extra bytes after
+ # the second null byte, so trim those off the end.
+ # See http://www.zsh.org/mla/workers/2015/msg03290.html
+ suggestion="${${(@0)line}[2]}"
+ } always {
+ # Destroy the pty
+ zpty -d $ZSH_AUTOSUGGEST_COMPLETIONS_PTY_NAME
+ }
+}
+
+#--------------------------------------------------------------------#
+# History Suggestion Strategy #
+#--------------------------------------------------------------------#
+# Suggests the most recent history item that matches the given
+# prefix.
+#
+
+_zsh_autosuggest_strategy_history() {
+ # Reset options to defaults and enable LOCAL_OPTIONS
+ emulate -L zsh
+
+ # Enable globbing flags so that we can use (#m) and (x~y) glob operator
+ setopt EXTENDED_GLOB
+
+ # Escape backslashes and all of the glob operators so we can use
+ # this string as a pattern to search the $history associative array.
+ # - (#m) globbing flag enables setting references for match data
+ # TODO: Use (b) flag when we can drop support for zsh older than v5.0.8
+ local prefix="${1//(#m)[\\*?[\]<>()|^~#]/\\$MATCH}"
+
+ # Get the history items that match the prefix, excluding those that match
+ # the ignore pattern
+ local pattern="$prefix*"
+ if [[ -n $ZSH_AUTOSUGGEST_HISTORY_IGNORE ]]; then
+ pattern="($pattern)~($ZSH_AUTOSUGGEST_HISTORY_IGNORE)"
+ fi
+
+ # Give the first history item matching the pattern as the suggestion
+ # - (r) subscript flag makes the pattern match on values
+ typeset -g suggestion="${history[(r)$pattern]}"
+}
+
+#--------------------------------------------------------------------#
+# Match Previous Command Suggestion Strategy #
+#--------------------------------------------------------------------#
+# Suggests the most recent history item that matches the given
+# prefix and whose preceding history item also matches the most
+# recently executed command.
+#
+# For example, suppose your history has the following entries:
+# - pwd
+# - ls foo
+# - ls bar
+# - pwd
+#
+# Given the history list above, when you type 'ls', the suggestion
+# will be 'ls foo' rather than 'ls bar' because your most recently
+# executed command (pwd) was previously followed by 'ls foo'.
+#
+# Note that this strategy won't work as expected with ZSH options that don't
+# preserve the history order such as `HIST_IGNORE_ALL_DUPS` or
+# `HIST_EXPIRE_DUPS_FIRST`.
+
+_zsh_autosuggest_strategy_match_prev_cmd() {
+ # Reset options to defaults and enable LOCAL_OPTIONS
+ emulate -L zsh
+
+ # Enable globbing flags so that we can use (#m) and (x~y) glob operator
+ setopt EXTENDED_GLOB
+
+ # TODO: Use (b) flag when we can drop support for zsh older than v5.0.8
+ local prefix="${1//(#m)[\\*?[\]<>()|^~#]/\\$MATCH}"
+
+ # Get the history items that match the prefix, excluding those that match
+ # the ignore pattern
+ local pattern="$prefix*"
+ if [[ -n $ZSH_AUTOSUGGEST_HISTORY_IGNORE ]]; then
+ pattern="($pattern)~($ZSH_AUTOSUGGEST_HISTORY_IGNORE)"
+ fi
+
+ # Get all history event numbers that correspond to history
+ # entries that match the pattern
+ local history_match_keys
+ history_match_keys=(${(k)history[(R)$~pattern]})
+
+ # By default we use the first history number (most recent history entry)
+ local histkey="${history_match_keys[1]}"
+
+ # Get the previously executed command
+ local prev_cmd="$(_zsh_autosuggest_escape_command "${history[$((HISTCMD-1))]}")"
+
+ # Iterate up to the first 200 history event numbers that match $prefix
+ for key in "${(@)history_match_keys[1,200]}"; do
+ # Stop if we ran out of history
+ [[ $key -gt 1 ]] || break
+
+ # See if the history entry preceding the suggestion matches the
+ # previous command, and use it if it does
+ if [[ "${history[$((key - 1))]}" == "$prev_cmd" ]]; then
+ histkey="$key"
+ break
+ fi
+ done
+
+ # Give back the matched history entry
+ typeset -g suggestion="$history[$histkey]"
+}
+
+#--------------------------------------------------------------------#
+# Fetch Suggestion #
+#--------------------------------------------------------------------#
+# Loops through all specified strategies and returns a suggestion
+# from the first strategy to provide one.
+#
+
+_zsh_autosuggest_fetch_suggestion() {
+ typeset -g suggestion
+ local -a strategies
+ local strategy
+
+ # Ensure we are working with an array
+ strategies=(${=ZSH_AUTOSUGGEST_STRATEGY})
+
+ for strategy in $strategies; do
+ # Try to get a suggestion from this strategy
+ _zsh_autosuggest_strategy_$strategy "$1"
+
+ # Ensure the suggestion matches the prefix
+ [[ "$suggestion" != "$1"* ]] && unset suggestion
+
+ # Break once we've found a valid suggestion
+ [[ -n "$suggestion" ]] && break
+ done
+}
+
+#--------------------------------------------------------------------#
+# Async #
+#--------------------------------------------------------------------#
+
+_zsh_autosuggest_async_request() {
+ zmodload zsh/system 2>/dev/null # For `$sysparams`
+
+ typeset -g _ZSH_AUTOSUGGEST_ASYNC_FD _ZSH_AUTOSUGGEST_CHILD_PID
+
+ # If we've got a pending request, cancel it
+ if [[ -n "$_ZSH_AUTOSUGGEST_ASYNC_FD" ]] && { true <&$_ZSH_AUTOSUGGEST_ASYNC_FD } 2>/dev/null; then
+ # Close the file descriptor and remove the handler
+ builtin exec {_ZSH_AUTOSUGGEST_ASYNC_FD}<&-
+ zle -F $_ZSH_AUTOSUGGEST_ASYNC_FD
+
+ # We won't know the pid unless the user has zsh/system module installed
+ if [[ -n "$_ZSH_AUTOSUGGEST_CHILD_PID" ]]; then
+ # Zsh will make a new process group for the child process only if job
+ # control is enabled (MONITOR option)
+ if [[ -o MONITOR ]]; then
+ # Send the signal to the process group to kill any processes that may
+ # have been forked by the suggestion strategy
+ kill -TERM -$_ZSH_AUTOSUGGEST_CHILD_PID 2>/dev/null
+ else
+ # Kill just the child process since it wasn't placed in a new process
+ # group. If the suggestion strategy forked any child processes they may
+ # be orphaned and left behind.
+ kill -TERM $_ZSH_AUTOSUGGEST_CHILD_PID 2>/dev/null
+ fi
+ fi
+ fi
+
+ # Fork a process to fetch a suggestion and open a pipe to read from it
+ builtin exec {_ZSH_AUTOSUGGEST_ASYNC_FD}< <(
+ # Tell parent process our pid
+ echo $sysparams[pid]
+
+ # Fetch and print the suggestion
+ local suggestion
+ _zsh_autosuggest_fetch_suggestion "$1"
+ echo -nE "$suggestion"
+ )
+
+ # There's a weird bug here where ^C stops working unless we force a fork
+ # See https://github.com/zsh-users/zsh-autosuggestions/issues/364
+ autoload -Uz is-at-least
+ is-at-least 5.8 || command true
+
+ # Read the pid from the child process
+ read _ZSH_AUTOSUGGEST_CHILD_PID <&$_ZSH_AUTOSUGGEST_ASYNC_FD
+
+ # When the fd is readable, call the response handler
+ zle -F "$_ZSH_AUTOSUGGEST_ASYNC_FD" _zsh_autosuggest_async_response
+}
+
+# Called when new data is ready to be read from the pipe
+# First arg will be fd ready for reading
+# Second arg will be passed in case of error
+_zsh_autosuggest_async_response() {
+ emulate -L zsh
+
+ local suggestion
+
+ if [[ -z "$2" || "$2" == "hup" ]]; then
+ # Read everything from the fd and give it as a suggestion
+ IFS='' read -rd '' -u $1 suggestion
+ zle autosuggest-suggest -- "$suggestion"
+
+ # Close the fd
+ builtin exec {1}<&-
+ fi
+
+ # Always remove the handler
+ zle -F "$1"
+ _ZSH_AUTOSUGGEST_ASYNC_FD=
+}
+
+#--------------------------------------------------------------------#
+# Start #
+#--------------------------------------------------------------------#
+
+# Start the autosuggestion widgets
+_zsh_autosuggest_start() {
+ # By default we re-bind widgets on every precmd to ensure we wrap other
+ # wrappers. Specifically, highlighting breaks if our widgets are wrapped by
+ # zsh-syntax-highlighting widgets. This also allows modifications to the
+ # widget list variables to take effect on the next precmd. However this has
+ # a decent performance hit, so users can set ZSH_AUTOSUGGEST_MANUAL_REBIND
+ # to disable the automatic re-binding.
+ if (( ${+ZSH_AUTOSUGGEST_MANUAL_REBIND} )); then
+ add-zsh-hook -d precmd _zsh_autosuggest_start
+ fi
+
+ _zsh_autosuggest_bind_widgets
+}
+
+# Mark for auto-loading the functions that we use
+autoload -Uz add-zsh-hook is-at-least
+
+# Automatically enable asynchronous mode in newer versions of zsh. Disable for
+# older versions because there is a bug when using async mode where ^C does not
+# work immediately after fetching a suggestion.
+# See https://github.com/zsh-users/zsh-autosuggestions/issues/364
+if is-at-least 5.0.8; then
+ typeset -g ZSH_AUTOSUGGEST_USE_ASYNC=
+fi
+
+# Start the autosuggestion widgets on the next precmd
+add-zsh-hook precmd _zsh_autosuggest_start
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/.editorconfig b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/.editorconfig
new file mode 100644
index 0000000..cda541d
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/.editorconfig
@@ -0,0 +1,15 @@
+# Top-most editorconfig file
+
+root = true
+
+[*]
+end_of_line = lf
+tab_width = 2
+indent_size = 2
+indent_style = space
+
+[Makefile]
+tab_width = 8
+indent_size = 8
+indent_style = tab
+
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/.gitattributes b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/.gitattributes
new file mode 100644
index 0000000..715e624
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/.gitattributes
@@ -0,0 +1 @@
+.revision-hash export-subst
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/.github/workflows/test.yml b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/.github/workflows/test.yml
new file mode 100644
index 0000000..cd50b8a
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/.github/workflows/test.yml
@@ -0,0 +1,75 @@
+---
+name: Tests
+on:
+ push:
+ paths-ignore:
+ - '**.md'
+ - '**.png'
+ pull_request:
+ paths-ignore:
+ - '**.md'
+ - '**.png'
+ schedule:
+ - cron: '29 7 * * 1'
+
+jobs:
+ test:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ version:
+ - master
+ - 5.9
+ - 5.8.1
+ - 5.8
+ - 5.7.1
+ - 5.7
+ - 5.6.2
+ - 5.6.1
+ - 5.6
+ - 5.5.1
+ - 5.5
+ - 5.4.2
+ - 5.4.1
+ - 5.4
+ - 5.3.1
+ - 5.3
+ - 5.2
+ - 5.1.1
+ - 5.1
+ - 5.0.8
+ - 5.0.7
+ - 5.0.6
+ - 5.0.5
+ - 5.0.4
+ - 5.0.3
+ - 5.0.2
+ - 5.0.1
+ - 5.0.0
+ - 4.3.17
+ - 4.3.16
+ - 4.3.15
+ - 4.3.14
+ - 4.3.13
+ - 4.3.12
+ - 4.3.11
+ container:
+ image: ghcr.io/zsh-users/zsh:${{ matrix.version }}
+ steps:
+ - uses: actions/checkout@v4
+ - run: install_packages bsdmainutils make procps
+ - run: make test
+
+ notify:
+ runs-on: ubuntu-latest
+ needs: test
+ if: failure() && (github.repository_owner == 'zsh-users')
+ steps:
+ -
+ name: Notify IRC
+ uses: Gottox/irc-message-action@v2
+ with:
+ channel: '#zsh-syntax-highlighting'
+ nickname: zsyh-gh-bot
+ message: '${{ github.ref }} failed tests: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}'
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/.gitignore b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/.gitignore
new file mode 100644
index 0000000..18fa5ec
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/.gitignore
@@ -0,0 +1,3 @@
+*.zwc*
+.pc/
+docs/all.md
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/.revision-hash b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/.revision-hash
new file mode 100644
index 0000000..6828f88
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/.revision-hash
@@ -0,0 +1 @@
+$Format:%H$
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/.version b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/.version
new file mode 100644
index 0000000..d182dc9
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/.version
@@ -0,0 +1 @@
+0.8.1-dev
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/COPYING.md b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/COPYING.md
new file mode 100644
index 0000000..cacbcbe
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/COPYING.md
@@ -0,0 +1,23 @@
+Copyright (c) 2010-2020 zsh-syntax-highlighting contributors
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted
+provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this list of conditions
+ and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice, this list of
+ conditions and the following disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+ may be used to endorse or promote products derived from this software without specific prior
+ written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/HACKING.md b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/HACKING.md
new file mode 100644
index 0000000..ddd39a4
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/HACKING.md
@@ -0,0 +1,99 @@
+Hacking on zsh-syntax-highlighting itself
+=========================================
+
+This document includes information for people working on z-sy-h itself: on the
+core driver (`zsh-syntax-highlighting.zsh`), on the highlighters in the
+distribution, and on the test suite. It does not target third-party
+highlighter authors (although they may find it an interesting read).
+
+The `main` highlighter
+----------------------
+
+The following function `pz` is useful when working on the `main` highlighting:
+
+```zsh
+pq() {
+ (( $#argv )) || return 0
+ print -r -l -- ${(qqqq)argv}
+}
+pz() {
+ local arg
+ for arg; do
+ pq ${(z)arg}
+ done
+}
+```
+
+It prints, for each argument, its token breakdown, similar to how the main
+loop of the `main` highlighter sees it.
+
+Testing the `brackets` highlighter
+----------------------------------
+
+Since the test harness empties `ZSH_HIGHLIGHT_STYLES` and the `brackets`
+highlighter interrogates `ZSH_HIGHLIGHT_STYLES` to determine how to highlight,
+tests must set the `bracket-level-#` keys themselves. For example:
+
+```zsh
+ZSH_HIGHLIGHT_STYLES[bracket-level-1]=
+ZSH_HIGHLIGHT_STYLES[bracket-level-2]=
+
+BUFFER='echo ({x})'
+
+expected_region_highlight=(
+ "6 6 bracket-level-1" # (
+ "7 7 bracket-level-2" # {
+ "9 9 bracket-level-2" # }
+ "10 10 bracket-level-1" # )
+)
+```
+
+Testing the `pattern` and `regexp` highlighters
+-----------------------------------------------
+
+Because the `pattern` and `regexp` highlighters modifies `region_highlight`
+directly instead of using `_zsh_highlight_add_highlight`, the test harness
+cannot get the `ZSH_HIGHLIGHT_STYLES` keys. Therefore, when writing tests, use
+the style itself as third word (cf. the
+[documentation for `expected_region_highlight`](docs/highlighters.md)). For example:
+
+```zsh
+ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red')
+
+BUFFER='rm -rf /'
+
+expected_region_highlight=(
+ "1 8 fg=white,bold,bg=red" # rm -rf /
+)
+```
+
+Memos and commas
+----------------
+
+We append to `region_highlight` as follows:
+
+
+```zsh
+region_highlight+=("$start $end $spec, memo=zsh-syntax-highlighting")
+```
+
+That comma is required to cause zsh 5.8 and older to ignore the memo without
+ignoring the `$spec`. It's a hack, but given that no further 5.8.x patch
+releases are planned, it's been deemed acceptable. See issue #418 and the
+cross-referenced issues.
+
+
+Miscellany
+----------
+
+If you work on the driver (`zsh-syntax-highlighting.zsh`), you may find the following zstyle useful:
+
+```zsh
+zstyle ':completion:*:*:*:*:globbed-files' ignored-patterns {'*/',}zsh-syntax-highlighting.plugin.zsh
+```
+
+IRC channel
+-----------
+
+We're on #zsh-syntax-highlighting on Libera.Chat.
+
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/INSTALL.md b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/INSTALL.md
new file mode 100644
index 0000000..2e1286d
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/INSTALL.md
@@ -0,0 +1,169 @@
+How to install
+--------------
+
+### Using packages
+
+First, install the package:
+
+* Arch Linux: [community/zsh-syntax-highlighting][arch-package] / [AUR/zsh-syntax-highlighting-git][AUR-package]
+* Debian: `zsh-syntax-highlighting` package [in `stretch`][debian-package] (or in [OBS repository][obs-repository])
+* Fedora: [zsh-syntax-highlighting package][fedora-package-alt] in Fedora 24+ (or in [OBS repository][obs-repository])
+* FreeBSD: `pkg install zsh-syntax-highlighting` (port name: [`shells/zsh-syntax-highlighting`][freebsd-port])
+* Gentoo: [app-shells/zsh-syntax-highlighting][gentoo-repository]
+* Mac OS X / Homebrew: `brew install zsh-syntax-highlighting` ([formula][brew-package])
+* NetBSD: `pkg_add zsh-syntax-highlighting` (port name: [`shells/zsh-syntax-highlighting`][netbsd-port])
+* OpenBSD: `pkg_add zsh-syntax-highlighting` (port name: [`shells/zsh-syntax-highlighting`][openbsd-port])
+* openSUSE / SLE: `zsh-syntax-highlighting` package in [OBS repository][obs-repository]
+* RHEL / CentOS / Scientific Linux: `zsh-syntax-highlighting` package in [OBS repository][obs-repository]
+* Ubuntu: `zsh-syntax-highlighting` package [in Xenial][ubuntu-package] (or in [OBS repository][obs-repository])
+* Void Linux: `zsh-syntax-highlighting package` [in XBPS][void-package]
+
+[arch-package]: https://www.archlinux.org/packages/zsh-syntax-highlighting
+[AUR-package]: https://aur.archlinux.org/packages/zsh-syntax-highlighting-git
+[brew-package]: https://github.com/Homebrew/homebrew-core/blob/master/Formula/z/zsh-syntax-highlighting.rb
+[debian-package]: https://packages.debian.org/zsh-syntax-highlighting
+[fedora-package]: https://apps.fedoraproject.org/packages/zsh-syntax-highlighting
+[fedora-package-alt]: https://bodhi.fedoraproject.org/updates/?packages=zsh-syntax-highlighting
+[freebsd-port]: https://www.freshports.org/textproc/zsh-syntax-highlighting/
+[gentoo-repository]: https://packages.gentoo.org/packages/app-shells/zsh-syntax-highlighting
+[netbsd-port]: http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/shells/zsh-syntax-highlighting/
+[obs-repository]: https://software.opensuse.org/download.html?project=shells%3Azsh-users%3Azsh-syntax-highlighting&package=zsh-syntax-highlighting
+[openbsd-port]: https://cvsweb.openbsd.org/ports/shells/zsh-syntax-highlighting/
+[ubuntu-package]: https://launchpad.net/ubuntu/+source/zsh-syntax-highlighting
+[void-package]: https://github.com/void-linux/void-packages/tree/master/srcpkgs/zsh-syntax-highlighting
+
+See also [repology's cross-distro index](https://repology.org/metapackage/zsh-syntax-highlighting/versions)
+
+Second, enable zsh-syntax-highlighting by sourcing the script. Running this command on the terminal will add the source line to the end of your .zshrc:
+
+* On most Linux distributions (except perhaps NixOS):
+
+ ```zsh
+ echo "source /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" >> ${ZDOTDIR:-$HOME}/.zshrc
+ ```
+
+* NetBSD and OpenBSD:
+
+ ```zsh
+ echo "source /usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" >> ${ZDOTDIR:-$HOME}/.zshrc
+ ```
+
+* Mac OS X / Homebrew:
+
+ ```zsh
+ echo "source $(brew --prefix)/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" >> ${ZDOTDIR:-$HOME}/.zshrc
+ ```
+
+Then restart zsh (such as by opening a new instance of your terminal emulator).
+
+ Alternatively, add the `source` command manually **at the end** of your `.zshrc`:
+
+* On most Linux distributions (except perhaps NixOS):
+`source /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh`
+* NetBSD and OpenBSD:
+`source /usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh`
+
+Then restart zsh.
+
+### In your ~/.zshrc
+
+Simply clone this repository and source the script:
+
+```zsh
+git clone https://github.com/zsh-users/zsh-syntax-highlighting.git
+echo "source ${(q-)PWD}/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" >> ${ZDOTDIR:-$HOME}/.zshrc
+```
+
+ Then, enable syntax highlighting in the current interactive shell:
+
+```zsh
+source ./zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
+```
+
+ If `git` is not installed, download and extract a snapshot of the latest
+ development tree from:
+
+```
+https://github.com/zsh-users/zsh-syntax-highlighting/archive/master.tar.gz
+```
+
+ Note the `source` command must be **at the end** of `~/.zshrc`.
+
+
+### With a plugin manager
+
+Note that `zsh-syntax-highlighting` must be the last plugin sourced.
+
+The zsh-syntax-highlighting authors recommend manual installation over the use
+of a framework or plugin manager.
+
+This list is incomplete as there are too many
+[frameworks / plugin managers][framework-list] to list them all here.
+
+[framework-list]: https://github.com/unixorn/awesome-zsh-plugins#frameworks
+
+#### [Antigen](https://github.com/zsh-users/antigen)
+
+Add `antigen bundle zsh-users/zsh-syntax-highlighting` as the last bundle in
+your `.zshrc`.
+
+#### [Fig](https://fig.io)
+
+Click the `Install Plugin` button on the [Fig plugin page][fig-plugin].
+
+[fig-plugin]: https://fig.io/plugins/other/zsh-syntax-highlighting
+
+#### [Oh-my-zsh](https://github.com/robbyrussell/oh-my-zsh)
+
+1. Clone this repository in oh-my-zsh's plugins directory:
+
+ ```zsh
+ git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
+ ```
+
+2. Activate the plugin in `~/.zshrc`:
+
+ ```zsh
+ plugins=( [plugins...] zsh-syntax-highlighting)
+ ```
+
+3. Restart zsh (such as by opening a new instance of your terminal emulator).
+
+#### [Prezto](https://github.com/sorin-ionescu/prezto)
+
+Zsh-syntax-highlighting is included with Prezto. See the
+[Prezto documentation][prezto-docs] to enable and configure highlighters.
+
+[prezto-docs]: https://github.com/sorin-ionescu/prezto/tree/master/modules/syntax-highlighting
+
+#### [zgen](https://github.com/tarjoilija/zgen)
+
+Add `zgen load zsh-users/zsh-syntax-highlighting` to the end of your `.zshrc`.
+
+#### [zinit](https://github.com/zdharma-continuum/zinit)
+
+Add `zinit light zsh-users/zsh-syntax-highlighting` to the end of your
+`.zshrc`.
+
+#### [zplug](https://github.com/zplug/zplug)
+
+Add `zplug "zsh-users/zsh-syntax-highlighting", defer:2` to your `.zshrc`.
+
+
+### System-wide installation
+
+Any of the above methods is suitable for a single-user installation,
+which requires no special privileges. If, however, you desire to install
+zsh-syntax-highlighting system-wide, you may do so by running
+
+```zsh
+make install
+```
+
+and directing your users to add
+
+```zsh
+source /usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
+```
+
+to their `.zshrc`s.
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/Makefile b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/Makefile
new file mode 100644
index 0000000..bbc1d43
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/Makefile
@@ -0,0 +1,64 @@
+NAME=zsh-syntax-highlighting
+
+INSTALL?=install -c
+PREFIX?=/usr/local
+SHARE_DIR?=$(DESTDIR)$(PREFIX)/share/$(NAME)
+DOC_DIR?=$(DESTDIR)$(PREFIX)/share/doc/$(NAME)
+ZSH?=zsh # zsh binary to run tests with
+
+all:
+ cd docs && \
+ cp highlighters.md all.md && \
+ printf '\n\nIndividual highlighters documentation\n=====================================' >> all.md && \
+ for doc in highlighters/*.md; do printf '\n\n'; cat "$$doc"; done >> all.md
+
+install: all
+ $(INSTALL) -d $(SHARE_DIR)
+ $(INSTALL) -d $(DOC_DIR)
+ cp .version zsh-syntax-highlighting.zsh $(SHARE_DIR)
+ cp COPYING.md README.md changelog.md $(DOC_DIR)
+ sed -e '1s/ .*//' -e '/^\[build-status-[a-z]*\]: /d' < README.md > $(DOC_DIR)/README.md
+ if [ x"true" = x"`git rev-parse --is-inside-work-tree 2>/dev/null`" ]; then \
+ git rev-parse HEAD; \
+ else \
+ cat .revision-hash; \
+ fi > $(SHARE_DIR)/.revision-hash
+ :
+# The [ -e ] check below is to because sh evaluates this with (the moral
+# equivalent of) NONOMATCH in effect, and highlighters/*.zsh has no matches.
+ for dirname in highlighters highlighters/*/ ; do \
+ $(INSTALL) -d $(SHARE_DIR)/"$$dirname"; \
+ for fname in "$$dirname"/*.zsh ; do [ -e "$$fname" ] && cp "$$fname" $(SHARE_DIR)"/$$dirname"; done; \
+ done
+ cp -R docs/* $(DOC_DIR)
+
+clean:
+ rm -f docs/all.md
+
+test:
+ @$(ZSH) -fc 'echo ZSH_PATCHLEVEL=$$ZSH_PATCHLEVEL'
+ @result=0; \
+ for test in highlighters/*; do \
+ if [ -d $$test/test-data ]; then \
+ echo "Running test $${test##*/}"; \
+ env -i QUIET=$$QUIET $${TERM:+"TERM=$$TERM"} $(ZSH) -f tests/test-highlighting.zsh "$${test##*/}"; \
+ : $$(( result |= $$? )); \
+ fi \
+ done; \
+ exit $$result
+
+quiet-test:
+ $(MAKE) test QUIET=y
+
+perf:
+ @result=0; \
+ for test in highlighters/*; do \
+ if [ -d $$test/test-data ]; then \
+ echo "Running test $${test##*/}"; \
+ $(ZSH) -f tests/test-perfs.zsh "$${test##*/}"; \
+ : $$(( result |= $$? )); \
+ fi \
+ done; \
+ exit $$result
+
+.PHONY: all install clean test perf
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/README.md b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/README.md
new file mode 100644
index 0000000..4768b3d
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/README.md
@@ -0,0 +1,97 @@
+zsh-syntax-highlighting [![Build Status][build-status-image]][build-status]
+=======================
+
+**[Fish shell][fish]-like syntax highlighting for [Zsh][zsh].**
+
+*Requirements: zsh 4.3.11+.*
+
+[fish]: https://fishshell.com/
+[zsh]: https://www.zsh.org/
+
+This package provides syntax highlighting for the shell zsh. It enables
+highlighting of commands whilst they are typed at a zsh prompt into an
+interactive terminal. This helps in reviewing commands before running
+them, particularly in catching syntax errors.
+
+Some examples:
+
+Before: [![Screenshot #1.1](images/before1-smaller.png)](images/before1.png)
+<br/>
+After:&nbsp; [![Screenshot #1.2](images/after1-smaller.png)](images/after1.png)
+
+Before: [![Screenshot #2.1](images/before2-smaller.png)](images/before2.png)
+<br/>
+After:&nbsp; [![Screenshot #2.2](images/after2-smaller.png)](images/after2.png)
+
+Before: [![Screenshot #3.1](images/before3-smaller.png)](images/before3.png)
+<br/>
+After:&nbsp; [![Screenshot #3.2](images/after3-smaller.png)](images/after3.png)
+
+Before: [![Screenshot #4.1](images/before4-smaller.png)](images/before4-smaller.png)
+<br/>
+After:&nbsp; [![Screenshot #4.2](images/after4-smaller.png)](images/after4-smaller.png)
+
+
+
+How to install
+--------------
+
+See [INSTALL.md](INSTALL.md).
+
+
+FAQ
+---
+
+### Why must `zsh-syntax-highlighting.zsh` be sourced at the end of the `.zshrc` file?
+
+zsh-syntax-highlighting works by hooking into the Zsh Line Editor (ZLE) and
+computing syntax highlighting for the command-line buffer as it stands at the
+time z-sy-h's hook is invoked.
+
+In zsh 5.2 and older,
+`zsh-syntax-highlighting.zsh` hooks into ZLE by wrapping ZLE widgets. It must
+be sourced after all custom widgets have been created (i.e., after all `zle -N`
+calls and after running `compinit`) in order to be able to wrap all of them.
+Widgets created after z-sy-h is sourced will work, but will not update the
+syntax highlighting.
+
+In zsh newer than 5.8 (not including 5.8 itself),
+zsh-syntax-highlighting uses the `add-zle-hook-widget` facility to install
+a `zle-line-pre-redraw` hook. Hooks are run in order of registration,
+therefore, z-sy-h must be sourced (and register its hook) after anything else
+that adds hooks that modify the command-line buffer.
+
+### Does syntax highlighting work during incremental history search?
+
+Highlighting the command line during an incremental history search (by default bound to
+to <kbd>Ctrl+R</kbd> in zsh's emacs keymap) requires zsh 5.4 or newer.
+
+Under zsh versions older than 5.4, the zsh-default [underlining][zshzle-Character-Highlighting]
+of the matched portion of the buffer remains available, but zsh-syntax-highlighting's
+additional highlighting is unavailable. (Those versions of zsh do not provide
+enough information to allow computing the highlighting correctly.)
+
+See issues [#288][i288] and [#415][i415] for details.
+
+[zshzle-Character-Highlighting]: https://zsh.sourceforge.io/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting
+[i288]: https://github.com/zsh-users/zsh-syntax-highlighting/pull/288
+[i415]: https://github.com/zsh-users/zsh-syntax-highlighting/pull/415
+
+### How are new releases announced?
+
+There is currently no "push" announcements channel. However, the following
+alternatives exist:
+
+- GitHub's RSS feed of releases: https://github.com/zsh-users/zsh-syntax-highlighting/releases.atom
+- An anitya entry: https://release-monitoring.org/project/7552/
+
+
+How to tweak
+------------
+
+Syntax highlighting is done by pluggable highlighter scripts. See the
+[documentation on highlighters](docs/highlighters.md) for details and
+configuration settings.
+
+[build-status]: https://github.com/zsh-users/zsh-syntax-highlighting/actions
+[build-status-image]: https://github.com/zsh-users/zsh-syntax-highlighting/workflows/Tests/badge.svg
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/changelog.md b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/changelog.md
new file mode 100644
index 0000000..8ee5088
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/changelog.md
@@ -0,0 +1,920 @@
+# Changes in HEAD
+
+
+- Highlight `&>` `>&|` `>&!` `&>|` and `&>!` as redirection.
+ [#942]
+
+
+# Changes in 0.8.0
+
+This is a stable bugfix and feature release. Major new features and changes include:
+
+
+## Changes fixed as part of the switch to zle-line-pre-redraw
+
+The changes in this section were fixed by switching to a `zle-line-pre-redraw`-based
+implementation.
+
+Note: The new implementation will only be used on future zsh releases,
+numbered 5.8.1.1 and newer, due to interoperability issues with other plugins
+(issues #418 and #579). The underlying zsh feature has been available since
+zsh 5.3.
+
+Whilst under development, the new implementation was known as the
+"feature/redrawhook" topic branch.
+
+- Fixed: Highlighting not triggered after popping a buffer from the buffer stack
+ (using the `push-line` widget, default binding: `M-q`)
+ [#40]
+
+- Fixed: Invoking completion when there were no matches removed highlighting
+ [#90, #470]
+
+- Fixed: Two successive deletes followed by a yank only yanked the latest
+ delete, rather than both of them
+ [#150, #151, #160; cf. #183]
+
+- Presumed fixed: Completing `$(xsel)` results in an error message from `xsel`,
+ with pre-2017 versions of `xsel`. (For 2017 vintage and newer, see the issue
+ for details.)
+ [#154]
+
+- Fixed: When the standard `bracketed-paste-magic` widget is in use, pastes were slow
+ [#295]
+
+- Fixed: No way to prevent a widget from being wrapped
+ [#324]
+
+- Fixed: No highlighting while cycling menu completion
+ [#375]
+
+- Fixed: Does not coexist with the `IGNORE_EOF` option
+ [#377]
+
+- Fixed: The `undefined-key` widget was wrapped
+ [#421]
+
+- Fixed: Does not coexist with the standard `surround` family of widgets
+ [#520]
+
+- Fixed: First completed filename doesn't get `path` highlighting
+ [#632]
+
+
+## Other changes
+
+- Add issue #712 to the previous release's changelog (hereinafter).
+
+- Fix highlighting when using an alias twice inside another alias
+ [#769, #775]
+
+- Remove lint warning for `env` followed by a pipe
+ [#797]
+
+- Recognize `proxychains` as a precommand
+ [#814, #914]
+
+- Honor shwordsplit when expanding parameters
+ [#687, #818]
+
+- Skip highlighting when keys are still pending in more cases
+ [#835]
+
+- Recognize `grc` as a precommand
+
+- Recognize `torsocks` and `torift` as precommands
+ [#898]
+
+- Recognize `cpulimit` as a precommand
+ [#897]
+
+- Recognize `ktrace` as a precommand
+
+
+# Changes in 0.8.0-alpha1-pre-redrawhook
+
+## Notice about an improbable-but-not-impossible forward incompatibility
+
+Everyone can probably skip this section.
+
+The `master` branch of zsh-syntax-highlighting uses a zsh feature that has not
+yet appeared in a zsh release: the `memo=` feature, added to zsh in commit
+zsh-5.8-172-gdd6e702ee (after zsh 5.8, before zsh 5.9). In the unlikely event
+that this zsh feature should change in an incompatible way before the next
+stable zsh release, set `zsh_highlight__memo_feature=0` in your .zshrc files to
+disable use of the new feature.
+
+z-sy-h dogfoods the new, unreleased zsh feature because that feature was
+added to zsh at z-sy-h's initiative. The new feature is used in the fix
+to issue #418.
+
+
+## Incompatible changes:
+
+- An unsuccessful completion (a <kbd>⮀ Tab</kbd> press that doesn't change the
+ command line) no longer causes highlighting to be lost. Visual feedback can
+ alternatively be achieved by setting the `format` zstyle under the `warnings`
+ tag, for example,
+
+ zstyle ':completion:*:warnings' format '%F{red}No matches%f'
+
+ Refer to the [description of the `format` style in `zshcompsys(1)`]
+ [zshcompsys-Standard-Styles-format].
+
+ (#90, part of #245 (feature/redrawhook))
+
+[zshcompsys-Standard-Styles]: https://zsh.sourceforge.io/Doc/Release/Completion-System.html#Standard-Styles
+[zshcompsys-Standard-Styles-format]: https://zsh.sourceforge.io/Doc/Release/Completion-System.html#index-format_002c-completion-style
+
+
+
+## Other changes:
+
+- Document `$ZSH_HIGHLIGHT_MAXLENGTH`.
+ [#698]
+
+- Optimize highlighting unquoted words (words that are not in single quotes, double quotes, backticks, or dollar-single-quotes)
+ [#730]
+
+- Redirection operators (e.g., `<` and `>`) are now highlighted by default
+ [#646]
+
+- Propertly terminate `noglob` scope in try/always blocks
+ [#577]
+
+- Don't error out when `KSH_ARRAYS` is set in the calling scope
+ [#622, #689]
+
+- Literal semicolons in array assignments (`foo=( bar ; baz )`) are now
+ highlighted as errors.
+ [3ca93f864fb6]
+
+- Command separators in array assignments (`foo=( bar | baz )`) are now
+ highlighted as errors.
+ [#651, 81267ca3130c]
+
+- Support parameter elision in command position (e.g., `$foo ls` where `$foo` is unset or empty)
+ [#667]
+
+- Don't consider the filename in `sudo -e /path/to/file` to be a command position
+ [#678]
+
+- Don't look up absolute directory names in $cdpath
+ [2cc2583f8f12, part of #669]
+
+- Fix `exec 2>&1;` being highlighted as an error.
+ [#676]
+
+- Fix `: $(<*)` being highlighted as globbing.
+ [#582]
+
+- Fix `cat < *` being highlighting as globbing when the `MULTIOS` option is unset.
+ [#583]
+
+- Fix `echo >&2` highlighting the `2` as a filename if a file by that name happened to exist
+ [#694, part of #645]
+
+- Fix `echo >&-` highlighting the `-` as a filename if a file by that name happened to exist
+ [part of #645]
+
+- Fix `echo >&p` highlighting the `p` as a filename if a file by that name happened to exist
+ [part of #645]
+
+- Fix wrong highlighting of unquoted parameter expansions under zsh 5.2 and older
+ [e165f18c758e]
+
+- Highlight global aliases
+ [#700]
+
+- Highlight `: =nosuchcommand' as an error (when the `EQUALS` option hasn't been unset).
+ [#430]
+
+- Highlight reserved word after assignments as errors (e.g., `foo=bar (ls;)`)
+ [#461]
+
+- Correctly highlight `[[ foo && bar || baz ]]`.
+
+- Highlight non-executable files in command position correctly (e.g., `% /etc/passwd`)
+ [#202, #669]
+
+- Highlight directories in command position correctly, including `AUTO_CD` support
+ [#669]
+
+- Recognize `env` as a precommand (e.g., `env FOO=bar ls`)
+
+- Recognize `ionice` as a precommand
+
+- Recognize `strace` as a precommand
+
+- Fix an error message on stderr before every prompt when the `WARN_NESTED_VAR` zsh option is set:
+ `_zsh_highlight_main__precmd_hook:1: array parameter _zsh_highlight_main__command_type_cache set in enclosing scope in function _zsh_highlight_main__precmd_hook`
+ [#727, #731, #732, #733]
+
+- Fix highlighting of alias whose definitions use a simple command terminator
+ (such as `;`, `|`, `&&`) before a newline
+ [#677; had regressed in 0.7.0]
+
+- Highlight arithmetic expansions (e.g., `$(( 42 ))`)
+ [#607 #649 #704]
+
+- Highlight the parentheses of array assignments as reserved words (`foo=( bar )`).
+ The `assign` style remains supported and has precedence.
+ [#585]
+
+- Fix interoperability issue with other plugins that use highlighting. The fix
+ requires zsh 5.8.0.3 or newer. (zsh 5.8.0.2-dev from the `master` branch,
+ revision zsh-5.8-172-gdd6e702ee or newer is also fine.)
+ [#418, https://github.com/okapia/zsh-viexchange/issues/1]
+
+- Improve performance of the `brackets` highlighter.
+
+- Fix highlighting of pre-command redirections (e.g., the `$fn` in `<$fn cat`)
+ [#712]
+
+
+# Changes in version 0.7.1
+
+- Remove out-of-date information from the 0.7.0 changelog.
+
+
+# Changes in version 0.7.0
+
+This is a stable bugfix and feature release. Major new features and changes include:
+
+- Add `ZSH_HIGHLIGHT_DIRS_BLACKLIST` to disable "path" and "path prefix"
+ highlighting for specific directories
+ [#379]
+
+- Add the "regexp" highlighter, modelled after the pattern highlighter
+ [4e6f60063f1c]
+
+- When a word uses globbing, only the globbing metacharacters will be highlighted as globbing:
+ in `: foo*bar`, only the `*` will be blue.
+ [e48af357532c]
+
+- Highlight pasted quotes (e.g., `: foo"bar"`)
+ [dc1b2f6fa4bb]
+
+- Highlight command substitutions (`` : `ls` ``, `: $(ls)`)
+ [c0e64fe13178 and parents, e86f75a840e7, et al]
+
+- Highlight process substitutions (`: >(nl)`, `: <(pwd)`, `: =(git diff)`)
+ [c0e64fe13178 and parents, e86f75a840e7, et al]
+
+- Highlight command substitutions inside double quotes (``: "`foo`"``)
+ [f16e858f0c83]
+
+- Highlight many precommands (e.g., `nice`, `stdbuf`, `eatmydata`;
+ see `$precommand_options` in the source)
+
+- Highlight numeric globs (e.g., `echo /lib<->`)
+
+- Assorted improvements to aliases highlighting
+ (e.g.,
+ `alias sudo_u='sudo -u'; sudo_u jrandom ls`,
+ `alias x=y y=z z=nosuchcommand; x`,
+ `alias ls='ls -l'; \ls`)
+ [f3410c5862fc, 57386f30aec8, #544, and many others]
+
+- Highlight some more syntax errors
+ [dea05e44e671, 298ef6a2fa30]
+
+- New styles: named file descriptors, `RC_QUOTES`, and unclosed quotes (e.g., `echo "foo<CURSOR>`)
+ [38c794a978cd, 25ae1c01216c, 967335dfc5fd]
+
+- The 'brackets' highlighting no longer treats quotes specially.
+ [ecdda36ef56f]
+
+
+Selected bugfixes include:
+
+- Highlight `sudo` correctly when it's not installed
+ [26a82113b08b]
+
+- Handle some non-default options being set in zshrc
+ [b07ada1255b7, a2a899b41b8, 972ad197c13d, b3f66fc8748f]
+
+- Fix off-by-one highlighting in vi "visual" mode (vicmd keymap)
+ [be3882aeb054]
+
+- The 'yank-pop' widget is not wrapped
+ [#183]
+
+
+Known issues include:
+
+- A multiline alias that uses a simple command terminator (such as `;`, `|`, `&&`)
+ before a newline will incorrectly be highlighted as an error. See issue #677
+ for examples and workarounds.
+ [#677]
+ [UPDATE: Fixed in 0.8.0]
+
+
+# Changes in version 0.6.0
+
+This is a stable release, featuring bugfixes and minor improvements.
+
+
+## Performance improvements:
+
+(none)
+
+
+## Added highlighting of:
+
+- The `isearch` and `suffix` [`$zle_highlight` settings][zshzle-Character-Highlighting].
+ (79e4d3d12405, 15db71abd0cc, b56ee542d619; requires zsh 5.3 for `$ISEARCHMATCH_ACTIVE` / `$SUFFIX_ACTIVE` support)
+
+[zshzle-Character-Highlighting]: https://zsh.sourceforge.io/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting
+
+- Possible history expansions in double-quoted strings.
+ (76ea9e1df316)
+
+- Mismatched `if`/`then`/`elif`/`else`/`fi`.
+ (73cb83270262)
+
+
+## Fixed highlighting of:
+
+- A comment line followed by a non-comment line.
+ (#385, 9396ad5c5f9c)
+
+- An unquoted `$*` (expands to the positional parameters).
+ (237f89ad629f)
+
+- history-incremental-pattern-search-backward under zsh 5.3.1.
+ (#407, #415, 462779629a0c)
+
+
+## API changes (for highlighter authors):
+
+(none)
+
+
+## Developer-visible changes:
+
+- tests: Set the `ALIAS_FUNC_DEF` option for zsh 5.4 compatibility.
+ (9523d6d49cb3)
+
+
+## Other changes:
+
+- docs: Added before/after screenshots.
+ (cd9ec14a65ec..b7e277106b49)
+
+- docs: Link Fedora package.
+ (3d74aa47e4a7, 5feed23962df)
+
+- docs: Link FreeBSD port.
+ (626c034c68d7)
+
+- docs: Link OpenSUSE Build Service packages
+ (#419, dea1fedc7358)
+
+- Prevent user-defined aliases from taking effect in z-sy-h's own code.
+ (#390, 2dce602727d7, 8d5afe47f774; and #392, #395, b8fa1b9dc954)
+
+- docs: Update zplug installation instructions.
+ (#399, 4f49c4a35f17)
+
+- Improve "unhandled ZLE widget 'foo'" error message.
+ (#409, be083d7f3710)
+
+- Fix printing of "failed loading highlighters" error message.
+ (#426, ad522a091429)
+
+
+# Changes in version 0.5.0
+
+
+## Performance improvements:
+
+We thank Sebastian Gniazdowski and "m0viefreak" for significant contributions
+in this area.
+
+- Optimize string operations in the `main` (default) highlighter.
+ (#372/3cb58fd7d7b9, 02229ebd6328, ef4bfe5bcc14, #372/c6b6513ac0d6, #374/15461e7d21c3)
+
+- Command word highlighting: Use the `zsh/parameter` module to avoid forks.
+ Memoize (cache) the results.
+ (#298, 3ce01076b521, 2f18ba64e397, 12b879caf7a6; #320, 3b67e656bff5)
+
+- Avoid forks in the driver and in the `root` highlighter.
+ (b9112aec798a, 38c8fbea2dd2)
+
+
+## Added highlighting of:
+
+- `pkexec` (a precommand).
+ (#248, 4f3910cbbaa5)
+
+- Aliases that cannot be defined normally nor invoked normally (highlighted as an error).
+ (#263 (in part), 28932316cca6)
+
+- Path separators (`/`) — the default behaviour remains to highlight path separators
+ and path components the same way.
+ (#136, #260, 6cd39e7c70d3, 9a934d291e7c, f3d3aaa00cc4)
+
+- Assignments to individual positional arguments (`42=foo` to assign to `$42`).
+ (f4036a09cee3)
+
+- Linewise region (the `visual-line-mode` widget, bound to `V` in zsh's `vi` keymap).
+ (#267, a7a7f8b42280, ee07588cfd9b)
+
+- Command-lines recalled by `isearch` mode; requires zsh≥5.3.
+ (#261 (in part); #257; 4ad311ec0a68)
+
+- Command-lines whilst the `IGNORE_BRACES` or `IGNORE_CLOSE_BRACES` option is in effect.
+ (a8a6384356af, 02807f1826a5)
+
+- Mismatched parentheses and braces (in the `main` highlighter).
+ (51b9d79c3bb6, 2fabf7ca64b7, a4196eda5e6f, and others)
+
+- Mismatched `do`/`done` keywords.
+ (b2733a64da93)
+
+- Mismatched `foreach`/`end` keywords.
+ (#96, 2bb8f0703d8f)
+
+- In Bourne-style function definitions, when the `MULTI_FUNC_DEF` option is set
+ (which is the default), highlight the first word in the function body as
+ a command word: `f() { g "$@" }`.
+ (6f91850a01e1)
+
+- `always` blocks.
+ (#335, e5782e4ddfb6)
+
+- Command substitutions inside double quotes, `"$(echo foo)"`.
+ (#139 (in part), c3913e0d8ead)
+
+- Non-alphabetic parameters inside double quotes (`"$$"`, `"$#"`, `"$*"`, `"$@"`, `"$?"`, `"$-"`).
+ (4afe670f7a1b, 44ef6e38e5a7)
+
+- Command words from future versions of zsh (forward compatibly).
+ This also adds an `arg0` style that all other command word styles fall back to.
+ (b4537a972eed, bccc3dc26943)
+
+- Escaped history expansions inside double quotes: `: "\!"`
+ (28d7056a7a06, et seq)
+
+
+## Fixed highlighting of:
+
+- Command separator tokens in syntactically-invalid positions.
+ (09c4114eb980)
+
+- Redirections with a file descriptor number at command word.
+ (#238 (in part), 73ee7c1f6c4a)
+
+- The `select` prompt, `$PS3`.
+ (#268, 451665cb2a8b)
+
+- Values of variables in `vared`.
+ (e500ca246286)
+
+- `!` as an argument (neither a history expansion nor a reserved word).
+ (4c23a2fd1b90)
+
+- "division by zero" error under the `brackets` highlighter when `$ZSH_HIGHLIGHT_STYLES` is empty.
+ (f73f3d53d3a6)
+
+- Process substitutions, `<(pwd)` and `>(wc -l)`.
+ (#302, 6889ff6bd2ad, bfabffbf975c, fc9c892a3f15)
+
+- The non-`SHORT_LOOPS` form of `repeat` loops: `repeat 42; do true; done`.
+ (#290, 4832f18c50a5, ef68f50c048f, 6362c757b6f7)
+
+- Broken symlinks (are now highlighted as files).
+ (#342, 95f7206a9373, 53083da8215e)
+
+- Lines accepted from `isearch` mode.
+ (#284; #257, #259, #288; 5bae6219008b, a8fe22d42251)
+
+- Work around upstream bug that triggered when the command word was a relative
+ path, that when interpreted relative to a $PATH directory denoted a command;
+ the effect of that upstream bug was that the relative path was cached as
+ a "valid external command name".
+ (#354, #355, 51614ca2c994, fdaeec45146b, 7d38d07255e4;
+ upstream fix slated to be released in 5.3 (workers/39104))
+
+- After accepting a line with the cursor on a bracket, the matching bracket
+ of the bracket under the cursor no longer remains highlighted (with the
+ `brackets` highlighter).
+ (4c4baede519a)
+
+- The first word on a new line within an array assignment or initialization is no
+ longer considered a command position.
+ (8bf423d16d46)
+
+- Subshells that end at command position, `(A=42)`, `(true;)`.
+ (#231, 7fb6f9979121; #344, 4fc35362ee5a)
+
+- Command word after array assignment, `a=(lorem ipsum) pwd`.
+ (#330, 7fb6f9979121)
+
+
+## API changes (for highlighter authors):
+
+- New interface `_zsh_highlight_add_highlight`.
+ (341a3ae1f015, c346f6eb6fb6)
+
+- tests: Specify the style key, not its value, in test expectations.
+ (a830613467af, fd061b5730bf, eaa4335c3441, among others)
+
+- Module author documentation improvements.
+ (#306 (in part), 217669270418, 0ff354b44b6e, 80148f6c8402, 364f206a547f, and others)
+
+- The driver no longer defines a `_zsh_highlight_${highlighter}_highlighter_cache`
+ variable, which is in the highlighters' namespace.
+ (3e59ab41b6b8, 80148f6c8402, f91a7b885e7d)
+
+- Rename highlighter entry points. The old names remain supported for
+ backwards compatibility.
+ (a3d5dfcbdae9, c793e0dceab1)
+
+- tests: Add the "NONE" expectation.
+ (4da9889d1545, 13018f3dd735, d37c55c788cd)
+
+- tests: consider a test that writes to stderr to have failed.
+ (#291, 1082067f9315)
+
+
+## Developer-visible changes:
+
+- Add `make quiet-test`.
+ (9b64ad750f35)
+
+- test harness: Better quote replaceables in error messages.
+ (30d8f92df225)
+
+- test harness: Fix exit code for XPASS.
+ (bb8d325c0cbd)
+
+- Create [HACKING.md](HACKING.md).
+ (cef49752fd0e)
+
+- tests: Emit a description for PASS test points.
+ (6aa57d60aa64, f0bae44b76dd)
+
+- tests: Create a script that generates a test file.
+ (8013dc3b8db6, et seq; `tests/generate.zsh`)
+
+
+## Other changes:
+
+- Under zsh≤5.2, widgets whose names start with a `_` are no longer excluded
+ from highlighting.
+ (ed33d2cb1388; reverts part of 186d80054a40 which was for #65)
+
+- Under zsh≤5.2, widgets implemented by a function named after the widget are
+ no longer excluded from highlighting.
+ (487b122c480d; reverts part of 776453cb5b69)
+
+- Under zsh≤5.2, shell-unsafe widget names can now be wrapped.
+ (#278, 6a634fac9fb9, et seq)
+
+- Correct some test expectations.
+ (78290e043bc5)
+
+- `zsh-syntax-highlighting.plugin.zsh`: Convert from symlink to plain file
+ for msys2 compatibility.
+ (#292, d4f8edc9f3ad)
+
+- Document installation under some plugin managers.
+ (e635f766bef9, 9cab566f539b)
+
+- Don't leak the `PATH_DIRS` option.
+ (7b82b88a7166)
+
+- Don't require the `FUNCTION_ARGZERO` option to be set.
+ (#338, 750aebc553f2)
+
+- Under zsh≤5.2, support binding incomplete/nonexistent widgets.
+ (9e569bb0fe04, part of #288)
+
+- Make the driver reentrant, fixing possibility of infinite recursion
+ under zsh≤5.2 under interaction with theoretical third-party code.
+ (#305, d711563fe1bf, 295d62ec888d, f3242cbd6aba)
+
+- Fix warnings when `WARN_CREATE_GLOBAL` is set prior to sourcing zsh-syntax-highlighting.
+ (z-sy-h already sets `WARN_CREATE_GLOBAL` internally.)
+ (da60234fb236)
+
+- Warn only once, rather than once per keypress, when a highlighter is unavailable.
+ (0a9b347483ae)
+
+
+# Changes in version 0.4.1
+
+## Fixes:
+
+- Arguments to widgets were not properly dash-escaped. Only matters for widgets
+ that take arguments (i.e., that are invoked as `zle ${widget} -- ${args}`).
+ (282c7134e8ac, reverts c808d2187a73)
+
+
+# Changes in version 0.4.0
+
+
+## Added highlighting of:
+
+- incomplete sudo commands
+ (a3047a912100, 2f05620b19ae)
+
+ ```zsh
+ sudo;
+ sudo -u;
+ ```
+
+- command words following reserved words
+ (#207, #222, b397b12ac139 et seq, 6fbd2aa9579b et seq, 8b4adbd991b0)
+
+ ```zsh
+ if ls; then ls; else ls; fi
+ repeat 10 do ls; done
+ ```
+
+ (The `ls` are now highlighted as a command.)
+
+- comments (when `INTERACTIVE_COMMENTS` is set)
+ (#163, #167, 693de99a9030)
+
+ ```zsh
+ echo Hello # comment
+ ```
+
+- closing brackets of arithmetic expansion, subshells, and blocks
+ (#226, a59f442d2d34, et seq)
+
+ ```zsh
+ (( foo ))
+ ( foo )
+ { foo }
+ ```
+
+- command names enabled by the `PATH_DIRS` option
+ (#228, 96ee5116b182)
+
+ ```zsh
+ # When ~/bin/foo/bar exists, is executable, ~/bin is in $PATH,
+ # and 'setopt PATH_DIRS' is in effect
+ foo/bar
+ ```
+
+- parameter expansions with braces inside double quotes
+ (#186, 6e3720f39d84)
+
+ ```zsh
+ echo "${foo}"
+ ```
+
+- parameter expansions in command word
+ (#101, 4fcfb15913a2)
+
+ ```zsh
+ x=/bin/ls
+ $x -l
+ ```
+
+- the command separators '\|&', '&!', '&\|'
+
+ ```zsh
+ view file.pdf &! ls
+ ```
+
+
+## Fixed highlighting of:
+
+- precommand modifiers at non-command-word position
+ (#209, 2c9f8c8c95fa)
+
+ ```zsh
+ ls command foo
+ ```
+
+- sudo commands with infix redirections
+ (#221, be006aded590, 86e924970911)
+
+ ```zsh
+ sudo -u >/tmp/foo.out user ls
+ ```
+
+- subshells; anonymous functions
+ (#166, #194, 0d1bfbcbfa67, 9e178f9f3948)
+
+ ```zsh
+ (true)
+ () { true }
+ ```
+
+- parameter assignment statements with no command
+ (#205, 01d7eeb3c713)
+
+ ```zsh
+ A=1;
+ ```
+
+ (The semicolon used to be highlighted as a mistake)
+
+- cursor highlighter: Remove the cursor highlighting when accepting a line.
+ (#109, 4f0c293fdef0)
+
+
+## Removed features:
+
+- Removed highlighting of approximate paths (`path_approx`).
+ (#187, 98aee7f8b9a3)
+
+
+## Other changes:
+
+- main highlighter refactored to use states rather than booleans.
+ (2080a441ac49, et seq)
+
+- Fix initialization when sourcing `zsh-syntax-highlighting.zsh` via a symlink
+ (083c47b00707)
+
+- docs: Add screenshot.
+ (57624bb9f64b)
+
+- widgets wrapping: Don't add '--' when invoking widgets.
+ (c808d2187a73) [_reverted in 0.4.1_]
+
+- Refresh highlighting upon `accept-*` widgets (`accept-line` et al).
+ (59fbdda64c21)
+
+- Stop leaking match/mbegin/mend to global scope (thanks to upstream
+ `WARN_CREATE_GLOBAL` improvements).
+ (d3deffbf46a4)
+
+- 'make install': Permit setting `$(SHARE_DIR)` from the environment.
+ (e1078a8b4cf1)
+
+- driver: Tolerate KSH_ARRAYS being set in the calling context.
+ (#162, 8f19af6b319d)
+
+- 'make install': Install documentation fully and properly.
+ (#219, b1619c001390, et seq)
+
+- docs: Improve 'main' highlighter's documentation.
+ (00de155063f5, 7d4252f5f596)
+
+- docs: Moved to a new docs/ tree; assorted minor updates
+ (c575f8f37567, 5b34c23cfad5, et seq)
+
+- docs: Split README.md into INSTALL.md
+ (0b3183f6cb9a)
+
+- driver: Report `$ZSH_HIGHLIGHT_REVISION` when running from git
+ (84734ba95026)
+
+
+## Developer-visible changes:
+
+- Test harness converted to [TAP](https://testanything.org/tap-specification.html) format
+ (d99aa58aaaef, et seq)
+
+- Run each test in a separate subprocess, isolating them from each other
+ (d99aa58aaaef, et seq)
+
+- Fix test failure with nonexisting $HOME
+ (#216, b2ac98b98150)
+
+- Test output is now colorized.
+ (4d3da30f8b72, 6fe07c096109)
+
+- Document `make install`
+ (a18a7427fd2c)
+
+- tests: Allow specifying the zsh binary to use.
+ (557bb7e0c6a0)
+
+- tests: Add 'make perf' target
+ (4513eaea71d7)
+
+- tests: Run each test in a sandbox directory
+ (c01533920245)
+
+
+# Changes in version 0.3.0
+
+
+## Added highlighting of:
+
+- suffix aliases (requires zsh 5.1.1 or newer):
+
+ ```zsh
+ alias -s png=display
+ foo.png
+ ```
+
+- prefix redirections:
+
+ ```zsh
+ <foo.txt cat
+ ```
+
+- redirection operators:
+
+ ```zsh
+ echo > foo.txt
+ ```
+
+- arithmetic evaluations:
+
+ ```zsh
+ (( 42 ))
+ ```
+
+- $'' strings, including \x/\octal/\u/\U escapes
+
+ ```zsh
+ : $'foo\u0040bar'
+ ```
+
+- multiline strings:
+
+ ```zsh
+ % echo "line 1
+ line 2"
+ ```
+
+- string literals that haven't been finished:
+
+ ```zsh
+ % echo "Hello, world
+ ```
+- command words that involve tilde expansion:
+
+ ```zsh
+ % ~/bin/foo
+ ```
+
+## Fixed highlighting of:
+
+- quoted command words:
+
+ ```zsh
+ % \ls
+ ```
+
+- backslash escapes in "" strings:
+
+ ```zsh
+ % echo "\x41"
+ ```
+
+- noglob after command separator:
+
+ ```zsh
+ % :; noglob echo *
+ ```
+
+- glob after command separator, when the first command starts with 'noglob':
+
+ ```zsh
+ % noglob true; echo *
+ ```
+
+- the region (vi visual mode / set-mark-command) (issue #165)
+
+- redirection and command separators that would be highlighted as `path_approx`
+
+ ```zsh
+ % echo foo;‸
+ % echo <‸
+ ```
+
+ (where `‸` represents the cursor location)
+
+- escaped globbing (outside quotes)
+
+ ```zsh
+ % echo \*
+ ```
+
+
+## Other changes:
+
+- implemented compatibility with zsh's paste highlighting (issue #175)
+
+- `$?` propagated correctly to wrapped widgets
+
+- don't leak $REPLY into global scope
+
+
+## Developer-visible changes:
+
+- added makefile with `install` and `test` targets
+
+- set `warn_create_global` internally
+
+- document release process
+
+
+
+
+# Version 0.2.1
+
+(Start of changelog.)
+
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/docs/highlighters.md b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/docs/highlighters.md
new file mode 100644
index 0000000..fb64c3a
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/docs/highlighters.md
@@ -0,0 +1,132 @@
+zsh-syntax-highlighting / highlighters
+======================================
+
+Syntax highlighting is done by pluggable highlighters:
+
+* `main` - the base highlighter, and the only one [active by default][main].
+* `brackets` - [matches brackets][brackets] and parenthesis.
+* `pattern` - matches [user-defined patterns][pattern].
+* `regexp` - matches [user-defined regular expressions][regexp].
+* `cursor` - matches [the cursor position][cursor].
+* `root` - highlights the whole command line [if the current user is root][root].
+* `line` - applied to [the whole command line][line].
+
+[main]: highlighters/main.md
+[brackets]: highlighters/brackets.md
+[pattern]: highlighters/pattern.md
+[regexp]: highlighters/regexp.md
+[cursor]: highlighters/cursor.md
+[root]: highlighters/root.md
+[line]: highlighters/line.md
+
+
+Highlighter-independent settings
+--------------------------------
+
+By default, all command lines are highlighted. However, it is possible to
+prevent command lines longer than a fixed number of characters from being
+highlighted by setting the variable `${ZSH_HIGHLIGHT_MAXLENGTH}` to the maximum
+length (in characters) of command lines to be highlighter. This is useful when
+editing very long command lines (for example, with the [`fned`][fned] utility
+function). Example:
+
+[fned]: https://zsh.sourceforge.io/Doc/Release/User-Contributions.html#index-zed
+
+```zsh
+ZSH_HIGHLIGHT_MAXLENGTH=512
+```
+
+
+How to activate highlighters
+----------------------------
+
+To activate an highlighter, add it to the `ZSH_HIGHLIGHT_HIGHLIGHTERS` array.
+By default `ZSH_HIGHLIGHT_HIGHLIGHTERS` is `(main)`. For example to activate
+`brackets`, `pattern`, and `cursor` highlighters, in `~/.zshrc` do:
+
+```zsh
+ZSH_HIGHLIGHT_HIGHLIGHTERS+=(brackets pattern cursor)
+```
+
+
+How to tweak highlighters
+-------------------------
+
+Highlighters look up styles from the `ZSH_HIGHLIGHT_STYLES` associative array.
+Navigate into the [individual highlighters' documentation](highlighters/) to
+see what styles (keys) each highlighter defines; the syntax for values is the
+same as the syntax of "types of highlighting" of the zsh builtin
+`$zle_highlight` array, which is documented in [the `zshzle(1)` manual
+page][zshzle-Character-Highlighting].
+
+[zshzle-Character-Highlighting]: https://zsh.sourceforge.io/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting
+
+Some highlighters support additional configuration parameters; see each
+highlighter's documentation for details and examples.
+
+
+How to implement a new highlighter
+----------------------------------
+
+To create your own `acme` highlighter:
+
+* Create your script at
+ `highlighters/acme/acme-highlighter.zsh`.
+
+* Implement the `_zsh_highlight_highlighter_acme_predicate` function.
+ This function must return 0 when the highlighter needs to be called and
+ non-zero otherwise, for example:
+
+ ```zsh
+ _zsh_highlight_highlighter_acme_predicate() {
+ # Call this highlighter in SVN working copies
+ [[ -d .svn ]]
+ }
+ ```
+
+* Implement the `_zsh_highlight_highlighter_acme_paint` function.
+ This function does the actual syntax highlighting, by calling
+ `_zsh_highlight_add_highlight` with the start and end of the region to
+ be highlighted and the `ZSH_HIGHLIGHT_STYLES` key to use. Define the default
+ style for that key in the highlighter script outside of any function with
+ `: ${ZSH_HIGHLIGHT_STYLES[key]:=value}`, being sure to prefix
+ the key with your highlighter name and a colon. For example:
+
+ ```zsh
+ : ${ZSH_HIGHLIGHT_STYLES[acme:aurora]:=fg=green}
+
+ _zsh_highlight_highlighter_acme_paint() {
+ # Colorize the whole buffer with the 'aurora' style
+ _zsh_highlight_add_highlight 0 $#BUFFER acme:aurora
+ }
+ ```
+
+ If you need to test which options the user has set, test `zsyh_user_options`
+ with a sensible default if the option is not present in supported zsh
+ versions. For example:
+
+ ```zsh
+ [[ ${zsyh_user_options[ignoreclosebraces]:-off} == on ]]
+ ```
+
+ The option name must be all lowercase with no underscores and not an alias.
+
+* Name your own functions and global variables `_zsh_highlight_acme_*`.
+
+ - In zsh-syntax-highlighting 0.4.0 and earlier, the entrypoints
+ `_zsh_highlight_highlighter_acme_predicate` and
+ `_zsh_highlight_highlighter_acme_paint`
+ were named
+ `_zsh_highlight_acme_highlighter_predicate` and
+ `_zsh_highlight_highlighter_acme_paint` respectively.
+
+ These names are still supported for backwards compatibility;
+ however, support for them will be removed in a future major or minor release (v0.x.0 or v1.0.0).
+
+* Activate your highlighter in `~/.zshrc`:
+
+ ```zsh
+ ZSH_HIGHLIGHT_HIGHLIGHTERS+=(acme)
+ ```
+
+* [Write tests](../tests/README.md).
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/docs/highlighters/brackets.md b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/docs/highlighters/brackets.md
new file mode 100644
index 0000000..0101699
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/docs/highlighters/brackets.md
@@ -0,0 +1,31 @@
+zsh-syntax-highlighting / highlighters / brackets
+-------------------------------------------------
+
+This is the `brackets` highlighter, that highlights brackets and parentheses, and
+matches them.
+
+
+### How to tweak it
+
+This highlighter defines the following styles:
+
+* `bracket-error` - unmatched brackets
+* `bracket-level-N` - brackets with nest level N
+* `cursor-matchingbracket` - the matching bracket, if cursor is on a bracket
+
+To override one of those styles, change its entry in `ZSH_HIGHLIGHT_STYLES`,
+for example in `~/.zshrc`:
+
+```zsh
+# To define styles for nested brackets up to level 4
+ZSH_HIGHLIGHT_STYLES[bracket-level-1]='fg=blue,bold'
+ZSH_HIGHLIGHT_STYLES[bracket-level-2]='fg=red,bold'
+ZSH_HIGHLIGHT_STYLES[bracket-level-3]='fg=yellow,bold'
+ZSH_HIGHLIGHT_STYLES[bracket-level-4]='fg=magenta,bold'
+```
+
+The syntax for values is the same as the syntax of "types of highlighting" of
+the zsh builtin `$zle_highlight` array, which is documented in [the `zshzle(1)`
+manual page][zshzle-Character-Highlighting].
+
+[zshzle-Character-Highlighting]: https://zsh.sourceforge.io/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/docs/highlighters/cursor.md b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/docs/highlighters/cursor.md
new file mode 100644
index 0000000..3f87d42
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/docs/highlighters/cursor.md
@@ -0,0 +1,24 @@
+zsh-syntax-highlighting / highlighters / cursor
+-----------------------------------------------
+
+This is the `cursor` highlighter, that highlights the cursor.
+
+
+### How to tweak it
+
+This highlighter defines the following styles:
+
+* `cursor` - the style for the current cursor position
+
+To override one of those styles, change its entry in `ZSH_HIGHLIGHT_STYLES`,
+for example in `~/.zshrc`:
+
+```zsh
+ZSH_HIGHLIGHT_STYLES[cursor]='bg=blue'
+```
+
+The syntax for values is the same as the syntax of "types of highlighting" of
+the zsh builtin `$zle_highlight` array, which is documented in [the `zshzle(1)`
+manual page][zshzle-Character-Highlighting].
+
+[zshzle-Character-Highlighting]: https://zsh.sourceforge.io/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/docs/highlighters/line.md b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/docs/highlighters/line.md
new file mode 100644
index 0000000..f76639e
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/docs/highlighters/line.md
@@ -0,0 +1,24 @@
+zsh-syntax-highlighting / highlighters / line
+---------------------------------------------
+
+This is the `line` highlighter, that highlights the whole line.
+
+
+### How to tweak it
+
+This highlighter defines the following styles:
+
+* `line` - the style for the whole line
+
+To override one of those styles, change its entry in `ZSH_HIGHLIGHT_STYLES`,
+for example in `~/.zshrc`:
+
+```zsh
+ZSH_HIGHLIGHT_STYLES[line]='bold'
+```
+
+The syntax for values is the same as the syntax of "types of highlighting" of
+the zsh builtin `$zle_highlight` array, which is documented in [the `zshzle(1)`
+manual page][zshzle-Character-Highlighting].
+
+[zshzle-Character-Highlighting]: https://zsh.sourceforge.io/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/docs/highlighters/main.md b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/docs/highlighters/main.md
new file mode 100644
index 0000000..4a27653
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/docs/highlighters/main.md
@@ -0,0 +1,121 @@
+zsh-syntax-highlighting / highlighters / main
+---------------------------------------------
+
+This is the `main` highlighter, that highlights:
+
+* Commands
+* Options
+* Arguments
+* Paths
+* Strings
+
+This highlighter is active by default.
+
+
+### How to tweak it
+
+This highlighter defines the following styles:
+
+* `unknown-token` - unknown tokens / errors
+* `reserved-word` - shell reserved words (`if`, `for`)
+* `alias` - aliases
+* `suffix-alias` - suffix aliases (requires zsh 5.1.1 or newer)
+* `global-alias` - global aliases
+* `builtin` - shell builtin commands (`shift`, `pwd`, `zstyle`)
+* `function` - function names
+* `command` - command names
+* `precommand` - precommand modifiers (e.g., `noglob`, `builtin`)
+* `commandseparator` - command separation tokens (`;`, `&&`)
+* `hashed-command` - hashed commands
+* `autodirectory` - a directory name in command position when the `AUTO_CD` option is set
+* `path` - existing filenames
+* `path_pathseparator` - path separators in filenames (`/`); if unset, `path` is used (default)
+* `path_prefix` - prefixes of existing filenames
+* `path_prefix_pathseparator` - path separators in prefixes of existing filenames (`/`); if unset, `path_prefix` is used (default)
+* `globbing` - globbing expressions (`*.txt`)
+* `history-expansion` - history expansion expressions (`!foo` and `^foo^bar`)
+* `command-substitution` - command substitutions (`$(echo foo)`)
+* `command-substitution-unquoted` - an unquoted command substitution (`$(echo foo)`)
+* `command-substitution-quoted` - a quoted command substitution (`"$(echo foo)"`)
+* `command-substitution-delimiter` - command substitution delimiters (`$(` and `)`)
+* `command-substitution-delimiter-unquoted` - an unquoted command substitution delimiters (`$(` and `)`)
+* `command-substitution-delimiter-quoted` - a quoted command substitution delimiters (`"$(` and `)"`)
+* `process-substitution` - process substitutions (`<(echo foo)`)
+* `process-substitution-delimiter` - process substitution delimiters (`<(` and `)`)
+* `arithmetic-expansion` - arithmetic expansion `$(( 42 ))`)
+* `single-hyphen-option` - single-hyphen options (`-o`)
+* `double-hyphen-option` - double-hyphen options (`--option`)
+* `back-quoted-argument` - backtick command substitution (`` `foo` ``)
+* `back-quoted-argument-unclosed` - unclosed backtick command substitution (`` `foo ``)
+* `back-quoted-argument-delimiter` - backtick command substitution delimiters (`` ` ``)
+* `single-quoted-argument` - single-quoted arguments (`` 'foo' ``)
+* `single-quoted-argument-unclosed` - unclosed single-quoted arguments (`` 'foo ``)
+* `double-quoted-argument` - double-quoted arguments (`` "foo" ``)
+* `double-quoted-argument-unclosed` - unclosed double-quoted arguments (`` "foo ``)
+* `dollar-quoted-argument` - dollar-quoted arguments (`` $'foo' ``)
+* `dollar-quoted-argument-unclosed` - unclosed dollar-quoted arguments (`` $'foo ``)
+* `rc-quote` - two single quotes inside single quotes when the `RC_QUOTES` option is set (`` 'foo''bar' ``)
+* `dollar-double-quoted-argument` - parameter expansion inside double quotes (`$foo` inside `""`)
+* `back-double-quoted-argument` - backslash escape sequences inside double-quoted arguments (`\"` in `"foo\"bar"`)
+* `back-dollar-quoted-argument` - backslash escape sequences inside dollar-quoted arguments (`\x` in `$'\x48'`)
+* `assign` - parameter assignments (`x=foo` and `x=( )`)
+* `redirection` - redirection operators (`<`, `>`, etc)
+* `comment` - comments, when `setopt INTERACTIVE_COMMENTS` is in effect (`echo # foo`)
+* `comment` - elided parameters in command position (`$x ls` when `$x` is unset or empty)
+* `named-fd` - named file descriptor (the `fd` in `echo foo {fd}>&2`)
+* `numeric-fd` - numeric file descriptor (the `2` in `echo foo {fd}>&2`)
+* `arg0` - a command word other than one of those enumerated above (other than a command, precommand, alias, function, or shell builtin command).
+* `default` - everything else
+
+To override one of those styles, change its entry in `ZSH_HIGHLIGHT_STYLES`,
+for example in `~/.zshrc`:
+
+```zsh
+# Declare the variable
+typeset -A ZSH_HIGHLIGHT_STYLES
+
+# To differentiate aliases from other command types
+ZSH_HIGHLIGHT_STYLES[alias]='fg=magenta,bold'
+
+# To have paths colored instead of underlined
+ZSH_HIGHLIGHT_STYLES[path]='fg=cyan'
+
+# To disable highlighting of globbing expressions
+ZSH_HIGHLIGHT_STYLES[globbing]='none'
+```
+
+The syntax for values is the same as the syntax of "types of highlighting" of
+the zsh builtin `$zle_highlight` array, which is documented in [the `zshzle(1)`
+manual page][zshzle-Character-Highlighting].
+
+#### Parameters
+
+To avoid partial path lookups on a path, add the path to the `ZSH_HIGHLIGHT_DIRS_BLACKLIST` array.
+
+```zsh
+ZSH_HIGHLIGHT_DIRS_BLACKLIST+=(/mnt/slow_share)
+```
+
+### Useless trivia
+
+#### Forward compatibility.
+
+zsh-syntax-highlighting attempts to be forward-compatible with zsh.
+Specifically, we attempt to facilitate highlighting _command word_ types that
+had not yet been invented when this version of zsh-syntax-highlighting was
+released.
+
+A _command word_ is something like a function name, external command name, et
+cetera. (See
+[Simple Commands & Pipelines in `zshmisc(1)`][zshmisc-Simple-Commands-And-Pipelines]
+for a formal definition.)
+
+If a new _kind_ of command word is ever added to zsh — something conceptually
+different than "function" and "alias" and "external command" — then command words
+of that (new) kind will be highlighted by the style `arg0_$kind`,
+where `$kind` is the output of `type -w` on the new kind of command word. If that
+style is not defined, then the style `arg0` will be used instead.
+
+[zshmisc-Simple-Commands-And-Pipelines]: https://zsh.sourceforge.io/Doc/Release/Shell-Grammar.html#Simple-Commands-_0026-Pipelines
+
+[zshzle-Character-Highlighting]: https://zsh.sourceforge.io/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/docs/highlighters/pattern.md b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/docs/highlighters/pattern.md
new file mode 100644
index 0000000..ecaa6a7
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/docs/highlighters/pattern.md
@@ -0,0 +1,24 @@
+zsh-syntax-highlighting / highlighters / pattern
+------------------------------------------------
+
+This is the `pattern` highlighter, that highlights user-defined patterns.
+
+
+### How to tweak it
+
+To use this highlighter, associate patterns with styles in the
+`ZSH_HIGHLIGHT_PATTERNS` associative array, for example in `~/.zshrc`:
+
+```zsh
+# Declare the variable
+typeset -A ZSH_HIGHLIGHT_PATTERNS
+
+# To have commands starting with `rm -rf` in red:
+ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red')
+```
+
+The syntax for values is the same as the syntax of "types of highlighting" of
+the zsh builtin `$zle_highlight` array, which is documented in [the `zshzle(1)`
+manual page][zshzle-Character-Highlighting].
+
+[zshzle-Character-Highlighting]: https://zsh.sourceforge.io/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/docs/highlighters/regexp.md b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/docs/highlighters/regexp.md
new file mode 100644
index 0000000..8c711a3
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/docs/highlighters/regexp.md
@@ -0,0 +1,65 @@
+zsh-syntax-highlighting / highlighters / regexp
+------------------------------------------------
+
+This is the `regexp` highlighter, that highlights user-defined regular
+expressions. It's similar to the `pattern` highlighter, but allows more complex
+patterns.
+
+### How to tweak it
+
+To use this highlighter, associate regular expressions with styles in the
+`ZSH_HIGHLIGHT_REGEXP` associative array, for example in `~/.zshrc`:
+
+```zsh
+typeset -A ZSH_HIGHLIGHT_REGEXP
+ZSH_HIGHLIGHT_REGEXP+=('^rm .*' fg=red,bold)
+```
+
+This will highlight lines that start with a call to the `rm` command.
+
+The regular expressions flavour used is [PCRE][pcresyntax] when the
+`RE_MATCH_PCRE` option is set and POSIX Extended Regular Expressions (ERE),
+as implemented by the platform's C library, otherwise. For details on the
+latter, see [the `zsh/regex` module's documentation][MAN_ZSH_REGEX] and the
+`regcomp(3)` and `re_format(7)` manual pages on your system.
+
+For instance, to highlight `sudo` only as a complete word, i.e., `sudo cmd`,
+but not `sudoedit`, one might use:
+
+* When the `RE_MATCH_PCRE` is set:
+
+ ```zsh
+ typeset -A ZSH_HIGHLIGHT_REGEXP
+ ZSH_HIGHLIGHT_REGEXP+=('\bsudo\b' fg=123,bold)
+ ```
+
+* When the `RE_MATCH_PCRE` is unset, on platforms with GNU `libc` (e.g., many GNU/Linux distributions):
+
+ ```zsh
+ typeset -A ZSH_HIGHLIGHT_REGEXP
+ ZSH_HIGHLIGHT_REGEXP+=('\<sudo\>' fg=123,bold)
+ ```
+
+* When the `RE_MATCH_PCRE` is unset, on BSD-based platforms (e.g., macOS):
+
+ ```zsh
+ typeset -A ZSH_HIGHLIGHT_REGEXP
+ ZSH_HIGHLIGHT_REGEXP+=('[[:<:]]sudo[[:>:]]' fg=123,bold)
+ ```
+
+Note, however, that PCRE and POSIX ERE have a large common subset:
+for instance, the regular expressions `[abc]`, `a*`, and `(a|b)` have the same
+meaning in both flavours.
+
+The syntax for values is the same as the syntax of "types of highlighting" of
+the zsh builtin `$zle_highlight` array, which is documented in [the `zshzle(1)`
+manual page][zshzle-Character-Highlighting].
+
+See also: [regular expressions tutorial][perlretut], zsh regexp operator `=~`
+in [the `zshmisc(1)` manual page][zshmisc-Conditional-Expressions]
+
+[zshzle-Character-Highlighting]: https://zsh.sourceforge.io/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting
+[perlretut]: https://perldoc.perl.org/perlretut
+[zshmisc-Conditional-Expressions]: https://zsh.sourceforge.io/Doc/Release/Conditional-Expressions.html#Conditional-Expressions
+[MAN_ZSH_REGEX]: https://zsh.sourceforge.io/Doc/Release/Zsh-Modules.html#The-zsh_002fregex-Module
+[pcresyntax]: https://www.pcre.org/original/doc/html/pcresyntax.html
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/docs/highlighters/root.md b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/docs/highlighters/root.md
new file mode 100644
index 0000000..8197e4b
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/docs/highlighters/root.md
@@ -0,0 +1,25 @@
+zsh-syntax-highlighting / highlighters / root
+---------------------------------------------
+
+This is the `root` highlighter, that highlights the whole line if the current
+user is root.
+
+
+### How to tweak it
+
+This highlighter defines the following styles:
+
+* `root` - the style for the whole line if the current user is root.
+
+To override one of those styles, change its entry in `ZSH_HIGHLIGHT_STYLES`,
+for example in `~/.zshrc`:
+
+```zsh
+ZSH_HIGHLIGHT_STYLES[root]='bg=red'
+```
+
+The syntax for values is the same as the syntax of "types of highlighting" of
+the zsh builtin `$zle_highlight` array, which is documented in [the `zshzle(1)`
+manual page][zshzle-Character-Highlighting].
+
+[zshzle-Character-Highlighting]: https://zsh.sourceforge.io/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/README.md b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/README.md
new file mode 100644
index 0000000..8490ddf
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/README.md
@@ -0,0 +1,8 @@
+zsh-syntax-highlighting / highlighters
+======================================
+
+Navigate into the individual highlighters' documentation to see
+what styles (`$ZSH_HIGHLIGHT_STYLES` keys) each highlighter defines.
+
+Refer to the [documentation on highlighters](../docs/highlighters.md) for further
+information.
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/README.md b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/README.md
new file mode 120000
index 0000000..6997bd6
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/README.md
@@ -0,0 +1 @@
+../../docs/highlighters/brackets.md \ No newline at end of file
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/brackets-highlighter.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/brackets-highlighter.zsh
new file mode 100644
index 0000000..bc388fd
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/brackets-highlighter.zsh
@@ -0,0 +1,107 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2010-2017 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+
+# Define default styles.
+: ${ZSH_HIGHLIGHT_STYLES[bracket-error]:=fg=red,bold}
+: ${ZSH_HIGHLIGHT_STYLES[bracket-level-1]:=fg=blue,bold}
+: ${ZSH_HIGHLIGHT_STYLES[bracket-level-2]:=fg=green,bold}
+: ${ZSH_HIGHLIGHT_STYLES[bracket-level-3]:=fg=magenta,bold}
+: ${ZSH_HIGHLIGHT_STYLES[bracket-level-4]:=fg=yellow,bold}
+: ${ZSH_HIGHLIGHT_STYLES[bracket-level-5]:=fg=cyan,bold}
+: ${ZSH_HIGHLIGHT_STYLES[cursor-matchingbracket]:=standout}
+
+# Whether the brackets highlighter should be called or not.
+_zsh_highlight_highlighter_brackets_predicate()
+{
+ [[ $WIDGET == zle-line-finish ]] || _zsh_highlight_cursor_moved || _zsh_highlight_buffer_modified
+}
+
+# Brackets highlighting function.
+_zsh_highlight_highlighter_brackets_paint()
+{
+ local char style
+ local -i bracket_color_size=${#ZSH_HIGHLIGHT_STYLES[(I)bracket-level-*]} buflen=${#BUFFER} level=0 matchingpos pos
+ local -A levelpos lastoflevel matching
+
+ # Find all brackets and remember which one is matching
+ pos=0
+ for char in ${(s..)BUFFER} ; do
+ (( ++pos ))
+ case $char in
+ ["([{"])
+ levelpos[$pos]=$((++level))
+ lastoflevel[$level]=$pos
+ ;;
+ [")]}"])
+ if (( level > 0 )); then
+ matchingpos=$lastoflevel[$level]
+ levelpos[$pos]=$((level--))
+ if _zsh_highlight_brackets_match $matchingpos $pos; then
+ matching[$matchingpos]=$pos
+ matching[$pos]=$matchingpos
+ fi
+ else
+ levelpos[$pos]=-1
+ fi
+ ;;
+ esac
+ done
+
+ # Now highlight all found brackets
+ for pos in ${(k)levelpos}; do
+ if (( $+matching[$pos] )); then
+ if (( bracket_color_size )); then
+ _zsh_highlight_add_highlight $((pos - 1)) $pos bracket-level-$(( (levelpos[$pos] - 1) % bracket_color_size + 1 ))
+ fi
+ else
+ _zsh_highlight_add_highlight $((pos - 1)) $pos bracket-error
+ fi
+ done
+
+ # If cursor is on a bracket, then highlight corresponding bracket, if any.
+ if [[ $WIDGET != zle-line-finish ]]; then
+ pos=$((CURSOR + 1))
+ if (( $+levelpos[$pos] )) && (( $+matching[$pos] )); then
+ local -i otherpos=$matching[$pos]
+ _zsh_highlight_add_highlight $((otherpos - 1)) $otherpos cursor-matchingbracket
+ fi
+ fi
+}
+
+# Helper function to differentiate type
+_zsh_highlight_brackets_match()
+{
+ case $BUFFER[$1] in
+ \() [[ $BUFFER[$2] == \) ]];;
+ \[) [[ $BUFFER[$2] == \] ]];;
+ \{) [[ $BUFFER[$2] == \} ]];;
+ *) false;;
+ esac
+}
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/cursor-matchingbracket-line-finish.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/cursor-matchingbracket-line-finish.zsh
new file mode 100644
index 0000000..b2acd31
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/cursor-matchingbracket-line-finish.zsh
@@ -0,0 +1,36 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+WIDGET=zle-line-finish
+
+BUFFER=': $foo[bar]'
+CURSOR=6 # cursor is zero-based
+
+expected_region_highlight=(
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/cursor-matchingbracket.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/cursor-matchingbracket.zsh
new file mode 100644
index 0000000..e05b4e9
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/cursor-matchingbracket.zsh
@@ -0,0 +1,47 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+unsorted=1
+
+ZSH_HIGHLIGHT_STYLES[bracket-level-1]=
+ZSH_HIGHLIGHT_STYLES[bracket-level-2]=
+ZSH_HIGHLIGHT_STYLES[bracket-level-3]=
+
+BUFFER=': ((( )))'
+CURSOR=2 # cursor is zero-based
+
+expected_region_highlight=(
+ "3 3 bracket-level-1"
+ "4 4 bracket-level-2"
+ "5 5 bracket-level-3"
+ "7 7 bracket-level-3"
+ "8 8 bracket-level-2"
+ "9 9 bracket-level-1"
+ "9 9 cursor-matchingbracket"
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/empty-styles.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/empty-styles.zsh
new file mode 100644
index 0000000..e60657b
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/empty-styles.zsh
@@ -0,0 +1,33 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=': (x)'
+
+expected_region_highlight=(
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/loop-styles.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/loop-styles.zsh
new file mode 100644
index 0000000..e5cfcdf
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/loop-styles.zsh
@@ -0,0 +1,53 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+unsorted=1
+
+ZSH_HIGHLIGHT_STYLES[bracket-level-1]=
+ZSH_HIGHLIGHT_STYLES[bracket-level-2]=
+ZSH_HIGHLIGHT_STYLES[bracket-level-3]=
+
+BUFFER=': ({[({[(x)]})]})'
+
+expected_region_highlight=(
+ "3 3 bracket-level-1"
+ "4 4 bracket-level-2"
+ "5 5 bracket-level-3"
+ "6 6 bracket-level-1"
+ "7 7 bracket-level-2"
+ "8 8 bracket-level-3"
+ "9 9 bracket-level-1"
+ "11 11 bracket-level-1"
+ "12 12 bracket-level-3"
+ "13 13 bracket-level-2"
+ "14 14 bracket-level-1"
+ "15 15 bracket-level-3"
+ "16 16 bracket-level-2"
+ "17 17 bracket-level-1"
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/mismatch-patentheses.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/mismatch-patentheses.zsh
new file mode 100644
index 0000000..5cc588f
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/mismatch-patentheses.zsh
@@ -0,0 +1,42 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+unsorted=1
+
+ZSH_HIGHLIGHT_STYLES[bracket-level-1]=
+ZSH_HIGHLIGHT_STYLES[bracket-level-2]=
+
+BUFFER='echo ({x}]'
+
+expected_region_highlight=(
+ "6 6 bracket-error" # (
+ "7 7 bracket-level-2" # {
+ "9 9 bracket-level-2" # }
+ "10 10 bracket-error" # )
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/near-quotes.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/near-quotes.zsh
new file mode 100644
index 0000000..49f002b
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/near-quotes.zsh
@@ -0,0 +1,42 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+unsorted=1
+
+ZSH_HIGHLIGHT_STYLES[bracket-level-1]=
+ZSH_HIGHLIGHT_STYLES[bracket-level-2]=
+
+BUFFER=': {"{x}"}'
+
+expected_region_highlight=(
+ "3 3 bracket-level-1"
+ "5 5 bracket-level-2"
+ "7 7 bracket-level-2"
+ "9 9 bracket-level-1"
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/nested-parentheses.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/nested-parentheses.zsh
new file mode 100644
index 0000000..21a20fb
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/nested-parentheses.zsh
@@ -0,0 +1,45 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+unsorted=1
+
+ZSH_HIGHLIGHT_STYLES[bracket-level-1]=
+ZSH_HIGHLIGHT_STYLES[bracket-level-2]=
+ZSH_HIGHLIGHT_STYLES[bracket-level-3]=
+
+BUFFER='echo $(echo ${(z)array})'
+
+expected_region_highlight=(
+ "7 7 bracket-level-1" # (
+ "14 14 bracket-level-2" # {
+ "15 15 bracket-level-3" # (
+ "17 17 bracket-level-3" # )
+ "23 23 bracket-level-2" # }
+ "24 24 bracket-level-1" # )
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/only-error.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/only-error.zsh
new file mode 100644
index 0000000..00fe557
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/only-error.zsh
@@ -0,0 +1,34 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2017 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=': x)'
+
+expected_region_highlight=(
+ "4 4 bracket-error" # )
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/quoted-patentheses.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/quoted-patentheses.zsh
new file mode 100644
index 0000000..81ee04f
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/quoted-patentheses.zsh
@@ -0,0 +1,34 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='echo "foo ( bar"'
+
+expected_region_highlight=(
+"11 11 bracket-error"
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/simple-parentheses.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/simple-parentheses.zsh
new file mode 100644
index 0000000..2ccfbab
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/simple-parentheses.zsh
@@ -0,0 +1,42 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+unsorted=1
+
+ZSH_HIGHLIGHT_STYLES[bracket-level-1]=
+ZSH_HIGHLIGHT_STYLES[bracket-level-2]=
+
+BUFFER='echo ({x})'
+
+expected_region_highlight=(
+ "6 6 bracket-level-1" # (
+ "7 7 bracket-level-2" # {
+ "9 9 bracket-level-2" # }
+ "10 10 bracket-level-1" # )
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/unclosed-patentheses.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/unclosed-patentheses.zsh
new file mode 100644
index 0000000..d3f6560
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/unclosed-patentheses.zsh
@@ -0,0 +1,41 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+unsorted=1
+
+ZSH_HIGHLIGHT_STYLES[bracket-level-1]=
+ZSH_HIGHLIGHT_STYLES[bracket-level-2]=
+
+BUFFER='echo ({x}'
+
+expected_region_highlight=(
+ "6 6 bracket-error" # (
+ "7 7 bracket-level-2" # {
+ "9 9 bracket-level-2" # }
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/unclosed-patentheses2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/unclosed-patentheses2.zsh
new file mode 100644
index 0000000..2c489c3
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/brackets/test-data/unclosed-patentheses2.zsh
@@ -0,0 +1,40 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+unsorted=1
+
+ZSH_HIGHLIGHT_STYLES[bracket-level-1]=
+
+BUFFER='echo {x})'
+
+expected_region_highlight=(
+ "6 6 bracket-level-1" # {
+ "8 8 bracket-level-1" # }
+ "9 9 bracket-error" # )
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/cursor/README.md b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/cursor/README.md
new file mode 120000
index 0000000..70e0c8c
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/cursor/README.md
@@ -0,0 +1 @@
+../../docs/highlighters/cursor.md \ No newline at end of file
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/cursor/cursor-highlighter.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/cursor/cursor-highlighter.zsh
new file mode 100644
index 0000000..81633a3
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/cursor/cursor-highlighter.zsh
@@ -0,0 +1,47 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+
+# Define default styles.
+: ${ZSH_HIGHLIGHT_STYLES[cursor]:=standout}
+
+# Whether the cursor highlighter should be called or not.
+_zsh_highlight_highlighter_cursor_predicate()
+{
+ # remove cursor highlighting when the line is finished
+ [[ $WIDGET == zle-line-finish ]] || _zsh_highlight_cursor_moved
+}
+
+# Cursor highlighting function.
+_zsh_highlight_highlighter_cursor_paint()
+{
+ [[ $WIDGET == zle-line-finish ]] && return
+
+ _zsh_highlight_add_highlight $CURSOR $(( $CURSOR + 1 )) cursor
+}
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/line/README.md b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/line/README.md
new file mode 120000
index 0000000..052fe20
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/line/README.md
@@ -0,0 +1 @@
+../../docs/highlighters/line.md \ No newline at end of file
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/line/line-highlighter.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/line/line-highlighter.zsh
new file mode 100644
index 0000000..f922dc9
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/line/line-highlighter.zsh
@@ -0,0 +1,44 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+
+# Define default styles.
+: ${ZSH_HIGHLIGHT_STYLES[line]:=}
+
+# Whether the root highlighter should be called or not.
+_zsh_highlight_highlighter_line_predicate()
+{
+ _zsh_highlight_buffer_modified
+}
+
+# root highlighting function.
+_zsh_highlight_highlighter_line_paint()
+{
+ _zsh_highlight_add_highlight 0 $#BUFFER line
+}
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/README.md b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/README.md
new file mode 120000
index 0000000..0354731
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/README.md
@@ -0,0 +1 @@
+../../docs/highlighters/main.md \ No newline at end of file
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/main-highlighter.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/main-highlighter.zsh
new file mode 100644
index 0000000..3ec96d9
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/main-highlighter.zsh
@@ -0,0 +1,1846 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2010-2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+
+# Define default styles.
+: ${ZSH_HIGHLIGHT_STYLES[default]:=none}
+: ${ZSH_HIGHLIGHT_STYLES[unknown-token]:=fg=red,bold}
+: ${ZSH_HIGHLIGHT_STYLES[reserved-word]:=fg=yellow}
+: ${ZSH_HIGHLIGHT_STYLES[suffix-alias]:=fg=green,underline}
+: ${ZSH_HIGHLIGHT_STYLES[global-alias]:=fg=cyan}
+: ${ZSH_HIGHLIGHT_STYLES[precommand]:=fg=green,underline}
+: ${ZSH_HIGHLIGHT_STYLES[commandseparator]:=none}
+: ${ZSH_HIGHLIGHT_STYLES[autodirectory]:=fg=green,underline}
+: ${ZSH_HIGHLIGHT_STYLES[path]:=underline}
+: ${ZSH_HIGHLIGHT_STYLES[path_pathseparator]:=}
+: ${ZSH_HIGHLIGHT_STYLES[path_prefix_pathseparator]:=}
+: ${ZSH_HIGHLIGHT_STYLES[globbing]:=fg=blue}
+: ${ZSH_HIGHLIGHT_STYLES[history-expansion]:=fg=blue}
+: ${ZSH_HIGHLIGHT_STYLES[command-substitution]:=none}
+: ${ZSH_HIGHLIGHT_STYLES[command-substitution-delimiter]:=fg=magenta}
+: ${ZSH_HIGHLIGHT_STYLES[process-substitution]:=none}
+: ${ZSH_HIGHLIGHT_STYLES[process-substitution-delimiter]:=fg=magenta}
+: ${ZSH_HIGHLIGHT_STYLES[single-hyphen-option]:=none}
+: ${ZSH_HIGHLIGHT_STYLES[double-hyphen-option]:=none}
+: ${ZSH_HIGHLIGHT_STYLES[back-quoted-argument]:=none}
+: ${ZSH_HIGHLIGHT_STYLES[back-quoted-argument-delimiter]:=fg=magenta}
+: ${ZSH_HIGHLIGHT_STYLES[single-quoted-argument]:=fg=yellow}
+: ${ZSH_HIGHLIGHT_STYLES[double-quoted-argument]:=fg=yellow}
+: ${ZSH_HIGHLIGHT_STYLES[dollar-quoted-argument]:=fg=yellow}
+: ${ZSH_HIGHLIGHT_STYLES[rc-quote]:=fg=cyan}
+: ${ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]:=fg=cyan}
+: ${ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]:=fg=cyan}
+: ${ZSH_HIGHLIGHT_STYLES[back-dollar-quoted-argument]:=fg=cyan}
+: ${ZSH_HIGHLIGHT_STYLES[assign]:=none}
+: ${ZSH_HIGHLIGHT_STYLES[redirection]:=fg=yellow}
+: ${ZSH_HIGHLIGHT_STYLES[comment]:=fg=black,bold}
+: ${ZSH_HIGHLIGHT_STYLES[named-fd]:=none}
+: ${ZSH_HIGHLIGHT_STYLES[numeric-fd]:=none}
+: ${ZSH_HIGHLIGHT_STYLES[arg0]:=fg=green}
+
+# Whether the highlighter should be called or not.
+_zsh_highlight_highlighter_main_predicate()
+{
+ # may need to remove path_prefix highlighting when the line ends
+ [[ $WIDGET == zle-line-finish ]] || _zsh_highlight_buffer_modified
+}
+
+# Helper to deal with tokens crossing line boundaries.
+_zsh_highlight_main_add_region_highlight() {
+ integer start=$1 end=$2
+ shift 2
+
+ if (( $#in_alias )); then
+ [[ $1 == unknown-token ]] && alias_style=unknown-token
+ return
+ fi
+ if (( in_param )); then
+ if [[ $1 == unknown-token ]]; then
+ param_style=unknown-token
+ fi
+ if [[ -n $param_style ]]; then
+ return
+ fi
+ param_style=$1
+ return
+ fi
+
+ # The calculation was relative to $buf but region_highlight is relative to $BUFFER.
+ (( start += buf_offset ))
+ (( end += buf_offset ))
+
+ list_highlights+=($start $end $1)
+}
+
+_zsh_highlight_main_add_many_region_highlights() {
+ for 1 2 3; do
+ _zsh_highlight_main_add_region_highlight $1 $2 $3
+ done
+}
+
+_zsh_highlight_main_calculate_fallback() {
+ local -A fallback_of; fallback_of=(
+ alias arg0
+ suffix-alias arg0
+ global-alias dollar-double-quoted-argument
+ builtin arg0
+ function arg0
+ command arg0
+ precommand arg0
+ hashed-command arg0
+ autodirectory arg0
+ arg0_\* arg0
+
+ # TODO: Maybe these? —
+ # named-fd file-descriptor
+ # numeric-fd file-descriptor
+
+ path_prefix path
+ # The path separator fallback won't ever be used, due to the optimisation
+ # in _zsh_highlight_main_highlighter_highlight_path_separators().
+ path_pathseparator path
+ path_prefix_pathseparator path_prefix
+
+ single-quoted-argument{-unclosed,}
+ double-quoted-argument{-unclosed,}
+ dollar-quoted-argument{-unclosed,}
+ back-quoted-argument{-unclosed,}
+
+ command-substitution{-quoted,,-unquoted,}
+ command-substitution-delimiter{-quoted,,-unquoted,}
+
+ command-substitution{-delimiter,}
+ process-substitution{-delimiter,}
+ back-quoted-argument{-delimiter,}
+ )
+ local needle=$1 value
+ reply=($1)
+ while [[ -n ${value::=$fallback_of[(k)$needle]} ]]; do
+ unset "fallback_of[$needle]" # paranoia against infinite loops
+ reply+=($value)
+ needle=$value
+ done
+}
+
+# Get the type of a command.
+#
+# Uses the zsh/parameter module if available to avoid forks, and a
+# wrapper around 'type -w' as fallback.
+#
+# If $2 is 0, do not consider aliases.
+#
+# The result will be stored in REPLY.
+_zsh_highlight_main__type() {
+ integer -r aliases_allowed=${2-1}
+ # We won't cache replies of anything that exists as an alias at all, to
+ # ensure the cached value is correct regardless of $aliases_allowed.
+ #
+ # ### We probably _should_ cache them in a cache that's keyed on the value of
+ # ### $aliases_allowed, on the assumption that aliases are the common case.
+ integer may_cache=1
+
+ # Cache lookup
+ if (( $+_zsh_highlight_main__command_type_cache )); then
+ REPLY=$_zsh_highlight_main__command_type_cache[(e)$1]
+ if [[ -n "$REPLY" ]]; then
+ return
+ fi
+ fi
+
+ # Main logic
+ if (( $#options_to_set )); then
+ setopt localoptions $options_to_set;
+ fi
+ unset REPLY
+ if zmodload -e zsh/parameter; then
+ if (( $+aliases[(e)$1] )); then
+ may_cache=0
+ fi
+ if (( ${+galiases[(e)$1]} )) && (( aliases_allowed )); then
+ REPLY='global alias'
+ elif (( $+aliases[(e)$1] )) && (( aliases_allowed )); then
+ REPLY=alias
+ elif [[ $1 == *.* && -n ${1%.*} ]] && (( $+saliases[(e)${1##*.}] )); then
+ REPLY='suffix alias'
+ elif (( $reswords[(Ie)$1] )); then
+ REPLY=reserved
+ elif (( $+functions[(e)$1] )); then
+ REPLY=function
+ elif (( $+builtins[(e)$1] )); then
+ REPLY=builtin
+ elif (( $+commands[(e)$1] )); then
+ REPLY=command
+ # None of the special hashes had a match, so fall back to 'type -w', for
+ # forward compatibility with future versions of zsh that may add new command
+ # types.
+ #
+ # zsh 5.2 and older have a bug whereby running 'type -w ./sudo' implicitly
+ # runs 'hash ./sudo=/usr/local/bin/./sudo' (assuming /usr/local/bin/sudo
+ # exists and is in $PATH). Avoid triggering the bug, at the expense of
+ # falling through to the $() below, incurring a fork. (Issue #354.)
+ #
+ # The first disjunct mimics the isrelative() C call from the zsh bug.
+ elif { [[ $1 != */* ]] || is-at-least 5.3 } &&
+ # Add a subshell to avoid a zsh upstream bug; see issue #606.
+ # ### Remove the subshell when we stop supporting zsh 5.7.1 (I assume 5.8 will have the bugfix).
+ ! (builtin type -w -- "$1") >/dev/null 2>&1; then
+ REPLY=none
+ fi
+ fi
+ if ! (( $+REPLY )); then
+ # zsh/parameter not available or had no matches.
+ #
+ # Note that 'type -w' will run 'rehash' implicitly.
+ #
+ # We 'unalias' in a subshell, so the parent shell is not affected.
+ #
+ # The colon command is there just to avoid a command substitution that
+ # starts with an arithmetic expression [«((…))» as the first thing inside
+ # «$(…)»], which is area that has had some parsing bugs before 5.6
+ # (approximately).
+ REPLY="${$(:; (( aliases_allowed )) || unalias -- "$1" 2>/dev/null; LC_ALL=C builtin type -w -- "$1" 2>/dev/null)##*: }"
+ if [[ $REPLY == 'alias' ]]; then
+ may_cache=0
+ fi
+ fi
+
+ # Cache population
+ if (( may_cache )) && (( $+_zsh_highlight_main__command_type_cache )); then
+ _zsh_highlight_main__command_type_cache[(e)$1]=$REPLY
+ fi
+ [[ -n $REPLY ]]
+ return $?
+}
+
+# Checks whether $1 is something that can be run.
+#
+# Return 0 if runnable, 1 if not runnable, 2 if trouble.
+_zsh_highlight_main__is_runnable() {
+ if _zsh_highlight_main__type "$1"; then
+ [[ $REPLY != none ]]
+ else
+ return 2
+ fi
+}
+
+# Check whether the first argument is a redirection operator token.
+# Report result via the exit code.
+_zsh_highlight_main__is_redirection() {
+ # A redirection operator token:
+ # - starts with an optional single-digit number;
+ # - is one of the tokens listed in zshmisc(1)
+ # - however (z) normalizes ! to |
+ [[ ${1#[0-9]} == (\<|\<\>|(\>|\>\>)(|\|)|\<\<(|-)|\<\<\<|\<\&|\&\<|(\>|\>\>)\&(|\|)|\&(\>|\>\>)(|\||\!)) ]]
+}
+
+# Resolve alias.
+#
+# Takes a single argument.
+#
+# The result will be stored in REPLY.
+_zsh_highlight_main__resolve_alias() {
+ if zmodload -e zsh/parameter; then
+ REPLY=${aliases[$arg]}
+ else
+ REPLY="${"$(alias -- $arg)"#*=}"
+ fi
+}
+
+# Return true iff $1 is a global alias
+_zsh_highlight_main__is_global_alias() {
+ if zmodload -e zsh/parameter; then
+ (( ${+galiases[$arg]} ))
+ elif [[ $arg == '='* ]]; then
+ # avoid running into «alias -L '=foo'» erroring out with 'bad assignment'
+ return 1
+ else
+ alias -L -g -- "$1" >/dev/null
+ fi
+}
+
+# Check that the top of $braces_stack has the expected value. If it does, set
+# the style according to $2; otherwise, set style=unknown-token.
+#
+# $1: character expected to be at the top of $braces_stack
+# $2: optional assignment to style it if matches
+# return value is 0 if there is a match else 1
+_zsh_highlight_main__stack_pop() {
+ if [[ $braces_stack[1] == $1 ]]; then
+ braces_stack=${braces_stack:1}
+ if (( $+2 )); then
+ style=$2
+ fi
+ return 0
+ else
+ style=unknown-token
+ return 1
+ fi
+}
+
+# Main syntax highlighting function.
+_zsh_highlight_highlighter_main_paint()
+{
+ setopt localoptions extendedglob
+
+ # At the PS3 prompt and in vared, highlight nothing.
+ #
+ # (We can't check this in _zsh_highlight_highlighter_main_predicate because
+ # if the predicate returns false, the previous value of region_highlight
+ # would be reused.)
+ if [[ $CONTEXT == (select|vared) ]]; then
+ return
+ fi
+
+ typeset -a ZSH_HIGHLIGHT_TOKENS_COMMANDSEPARATOR
+ typeset -a ZSH_HIGHLIGHT_TOKENS_CONTROL_FLOW
+ local -a options_to_set reply # used in callees
+ local REPLY
+
+ # $flags_with_argument is a set of letters, corresponding to the option letters
+ # that would be followed by a colon in a getopts specification.
+ local flags_with_argument
+ # $flags_sans_argument is a set of letters, corresponding to the option letters
+ # that wouldn't be followed by a colon in a getopts specification.
+ local flags_sans_argument
+ # $flags_solo is a set of letters, corresponding to option letters that, if
+ # present, mean the precommand will not be acting as a precommand, i.e., will
+ # not be followed by a :start: word.
+ local flags_solo
+ # $precommand_options maps precommand name to values of $flags_with_argument,
+ # $flags_sans_argument, and flags_solo for that precommand, joined by a
+ # colon. (The value is NOT a getopt(3) spec, although it resembles one.)
+ #
+ # Currently, setting $flags_sans_argument is only important for commands that
+ # have a non-empty $flags_with_argument; see test-data/precommand4.zsh.
+ local -A precommand_options
+ precommand_options=(
+ # Precommand modifiers as of zsh 5.6.2 cf. zshmisc(1).
+ '-' ''
+ 'builtin' ''
+ 'command' :pvV
+ 'exec' a:cl
+ 'noglob' ''
+ # 'time' and 'nocorrect' shouldn't be added here; they're reserved words, not precommands.
+
+ # miscellaneous commands
+ 'doas' aCu:Lns # as of OpenBSD's doas(1) dated September 4, 2016
+ 'nice' n: # as of current POSIX spec
+ 'pkexec' '' # doesn't take short options; immune to #121 because it's usually not passed --option flags
+ # Not listed: -h, which has two different meanings.
+ 'sudo' Cgprtu:AEHPSbilns:eKkVv # as of sudo 1.8.21p2
+ 'stdbuf' ioe:
+ 'eatmydata' ''
+ 'catchsegv' ''
+ 'nohup' ''
+ 'setsid' :wc
+ 'env' u:i
+ 'ionice' cn:t:pPu # util-linux 2.33.1-0.1
+ 'strace' IbeaosXPpEuOS:ACdfhikqrtTvVxyDc # strace 4.26-0.2
+ 'proxychains' f:q # proxychains 4.4.0
+ 'torsocks' idq:upaP # Torsocks 2.3.0
+ 'torify' idq:upaP # Torsocks 2.3.0
+ 'ssh-agent' aEPt:csDd:k # As of OpenSSH 8.1p1
+ 'tabbed' gnprtTuU:cdfhs:v # suckless-tools v44
+ 'chronic' :ev # moreutils 0.62-1
+ 'ifne' :n # moreutils 0.62-1
+ 'grc' :se # grc - a "generic colouriser" (that's their spelling, not mine)
+ 'cpulimit' elp:ivz # cpulimit 0.2
+ 'ktrace' fgpt:aBCcdiT
+ )
+ # Commands that would need to skip one positional argument:
+ # flock
+ # ssh
+ # _wanted (skip two)
+
+ if [[ $zsyh_user_options[ignorebraces] == on || ${zsyh_user_options[ignoreclosebraces]:-off} == on ]]; then
+ local right_brace_is_recognised_everywhere=false
+ else
+ local right_brace_is_recognised_everywhere=true
+ fi
+
+ if [[ $zsyh_user_options[pathdirs] == on ]]; then
+ options_to_set+=( PATH_DIRS )
+ fi
+
+ ZSH_HIGHLIGHT_TOKENS_COMMANDSEPARATOR=(
+ '|' '||' ';' '&' '&&'
+ $'\n' # ${(z)} returns ';' but we convert it to $'\n'
+ '|&'
+ '&!' '&|'
+ # ### 'case' syntax, but followed by a pattern, not by a command
+ # ';;' ';&' ';|'
+ )
+
+ # Tokens that, at (naively-determined) "command position", are followed by
+ # a de jure command position. All of these are reserved words.
+ ZSH_HIGHLIGHT_TOKENS_CONTROL_FLOW=(
+ $'\x7b' # block
+ $'\x28' # subshell
+ '()' # anonymous function
+ 'while'
+ 'until'
+ 'if'
+ 'then'
+ 'elif'
+ 'else'
+ 'do'
+ 'time'
+ 'coproc'
+ '!' # reserved word; unrelated to $histchars[1]
+ )
+
+ if (( $+X_ZSH_HIGHLIGHT_DIRS_BLACKLIST )); then
+ print >&2 'zsh-syntax-highlighting: X_ZSH_HIGHLIGHT_DIRS_BLACKLIST is deprecated. Please use ZSH_HIGHLIGHT_DIRS_BLACKLIST.'
+ ZSH_HIGHLIGHT_DIRS_BLACKLIST=($X_ZSH_HIGHLIGHT_DIRS_BLACKLIST)
+ unset X_ZSH_HIGHLIGHT_DIRS_BLACKLIST
+ fi
+
+ _zsh_highlight_main_highlighter_highlight_list -$#PREBUFFER '' 1 "$PREBUFFER$BUFFER"
+
+ # end is a reserved word
+ local start end_ style
+ for start end_ style in $reply; do
+ (( start >= end_ )) && { print -r -- >&2 "zsh-syntax-highlighting: BUG: _zsh_highlight_highlighter_main_paint: start($start) >= end($end_)"; return }
+ (( end_ <= 0 )) && continue
+ (( start < 0 )) && start=0 # having start<0 is normal with e.g. multiline strings
+ _zsh_highlight_main_calculate_fallback $style
+ _zsh_highlight_add_highlight $start $end_ $reply
+ done
+}
+
+# Try to expand $1, if it's possible to do so safely.
+#
+# Uses two parameters from the caller: $parameter_name_pattern and $res.
+#
+# If expansion was done, set $reply to the expansion and return true.
+# Otherwise, return false.
+_zsh_highlight_main_highlighter__try_expand_parameter()
+{
+ local arg="$1"
+ unset reply
+ {
+ # ### For now, expand just '$foo' or '${foo}', possibly with braces, but with
+ # ### no other features of the parameter expansion syntax. (No ${(x)foo},
+ # ### no ${foo[x]}, no ${foo:-x}.)
+ {
+ local -a match mbegin mend
+ local MATCH; integer MBEGIN MEND
+ local parameter_name
+ local -a words
+ if [[ $arg[1] != '$' ]]; then
+ return 1
+ fi
+ if [[ ${arg[2]} == '{' ]] && [[ ${arg[-1]} == '}' ]]; then
+ parameter_name=${${arg:2}%?}
+ else
+ parameter_name=${arg:1}
+ fi
+ if [[ $res == none ]] &&
+ [[ ${parameter_name} =~ ^${~parameter_name_pattern}$ ]] &&
+ [[ ${(tP)MATCH} != *special* ]]
+ then
+ # Set $arg and update $res.
+ case ${(tP)MATCH} in
+ (*array*|*assoc*)
+ words=( ${(P)MATCH} )
+ ;;
+ ("")
+ # not set
+ words=( )
+ ;;
+ (*)
+ # scalar, presumably
+ if [[ $zsyh_user_options[shwordsplit] == on ]]; then
+ words=( ${(P)=MATCH} )
+ else
+ words=( ${(P)MATCH} )
+ fi
+ ;;
+ esac
+ reply=( "${words[@]}" )
+ else
+ return 1
+ fi
+ }
+ }
+}
+
+# $1 is the offset of $4 from the parent buffer. Added to the returned highlights.
+# $2 is the initial braces_stack (for a closing paren).
+# $3 is 1 if $4 contains the end of $BUFFER, else 0.
+# $4 is the buffer to highlight.
+# Returns:
+# $REPLY: $buf[REPLY] is the last character parsed.
+# $reply is an array of region_highlight additions.
+# exit code is 0 if the braces_stack is empty, 1 otherwise.
+_zsh_highlight_main_highlighter_highlight_list()
+{
+ integer start_pos end_pos=0 buf_offset=$1 has_end=$3
+ # alias_style is the style to apply to an alias once $#in_alias == 0
+ # Usually 'alias' but set to 'unknown-token' if any word expanded from
+ # the alias would be highlighted as unknown-token
+ # param_style is analogous for parameter expansions
+ local alias_style param_style last_arg arg buf=$4 highlight_glob=true saw_assignment=false style
+ local in_array_assignment=false # true between 'a=(' and the matching ')'
+ # in_alias is an array of integers with each element equal to the number
+ # of shifts needed until arg=args[1] pops an arg from the next level up
+ # alias or from BUFFER.
+ # in_param is analogous for parameter expansions
+ integer in_param=0 len=$#buf
+ local -a in_alias match mbegin mend list_highlights
+ # seen_alias is a map of aliases already seen to avoid loops like alias a=b b=a
+ local -A seen_alias
+ # Pattern for parameter names
+ readonly parameter_name_pattern='([A-Za-z_][A-Za-z0-9_]*|[0-9]+)'
+ list_highlights=()
+
+ # "R" for round
+ # "Q" for square
+ # "Y" for curly
+ # "T" for [[ ]]
+ # "S" for $( ), =( ), <( ), >( )
+ # "D" for do/done
+ # "$" for 'end' (matches 'foreach' always; also used with cshjunkiequotes in repeat/while)
+ # "?" for 'if'/'fi'; also checked by 'elif'/'else'
+ # ":" for 'then'
+ local braces_stack=$2
+
+ # State machine
+ #
+ # The states are:
+ # - :start: Command word
+ # - :start_of_pipeline: Start of a 'pipeline' as defined in zshmisc(1).
+ # Only valid when :start: is present
+ # - :sudo_opt: A leading-dash option to a precommand, whether it takes an
+ # argument or not. (Example: sudo's "-u" or "-i".)
+ # - :sudo_arg: The argument to a precommand's leading-dash option,
+ # when given as a separate word; i.e., "foo" in "-u foo" (two
+ # words) but not in "-ufoo" (one word).
+ # Note: :sudo_opt: and :sudo_arg: are used for any precommand
+ # declared in ${precommand_options}, not just for sudo(8).
+ # The naming is historical.
+ # - :regular: "Not a command word", and command delimiters are permitted.
+ # Mainly used to detect premature termination of commands.
+ # - :always: The word 'always' in the «{ foo } always { bar }» syntax.
+ #
+ # When the kind of a word is not yet known, $this_word / $next_word may contain
+ # multiple states. For example, after "sudo -i", the next word may be either
+ # another --flag or a command name, hence the state would include both ':start:'
+ # and ':sudo_opt:'.
+ #
+ # The tokens are always added with both leading and trailing colons to serve as
+ # word delimiters (an improvised array); [[ $x == *':foo:'* ]] and x=${x//:foo:/}
+ # will DTRT regardless of how many elements or repetitions $x has.
+ #
+ # Handling of redirections: upon seeing a redirection token, we must stall
+ # the current state --- that is, the value of $this_word --- for two iterations
+ # (one for the redirection operator, one for the word following it representing
+ # the redirection target). Therefore, we set $in_redirection to 2 upon seeing a
+ # redirection operator, decrement it each iteration, and stall the current state
+ # when it is non-zero. Thus, upon reaching the next word (the one that follows
+ # the redirection operator and target), $this_word will still contain values
+ # appropriate for the word immediately following the word that preceded the
+ # redirection operator.
+ #
+ # The "the previous word was a redirection operator" state is not communicated
+ # to the next iteration via $next_word/$this_word as usual, but via
+ # $in_redirection. The value of $next_word from the iteration that processed
+ # the operator is discarded.
+ #
+ # $in_redirection is currently used for:
+ # - comments
+ # - aliases
+ # - redirections
+ # - parameter elision in command position
+ # - 'repeat' loops
+ #
+ local this_word next_word=':start::start_of_pipeline:'
+ integer in_redirection
+ # Processing buffer
+ local proc_buf="$buf"
+ local -a args
+ if [[ $zsyh_user_options[interactivecomments] == on ]]; then
+ args=(${(zZ+c+)buf})
+ else
+ args=(${(z)buf})
+ fi
+
+ # Special case: $(<*) isn't globbing.
+ if [[ $braces_stack == 'S' ]] && (( $+args[3] && ! $+args[4] )) && [[ $args[3] == $'\x29' ]] &&
+ [[ $args[1] == *'<'* ]] && _zsh_highlight_main__is_redirection $args[1]; then
+ highlight_glob=false
+ fi
+
+ while (( $#args )); do
+ last_arg=$arg
+ arg=$args[1]
+ shift args
+ if (( $#in_alias )); then
+ (( in_alias[1]-- ))
+ # Remove leading 0 entries
+ in_alias=($in_alias[$in_alias[(i)<1->],-1])
+ if (( $#in_alias == 0 )); then
+ seen_alias=()
+ # start_pos and end_pos are of the alias (previous $arg) here
+ _zsh_highlight_main_add_region_highlight $start_pos $end_pos $alias_style
+ else
+ # We can't unset keys that contain special characters (] \ and some others).
+ # More details: https://www.zsh.org/workers/43269
+ (){
+ local alias_name
+ for alias_name in ${(k)seen_alias[(R)<$#in_alias->]}; do
+ seen_alias=("${(@kv)seen_alias[(I)^$alias_name]}")
+ done
+ }
+ fi
+ fi
+ if (( in_param )); then
+ (( in_param-- ))
+ if (( in_param == 0 )); then
+ # start_pos and end_pos are of the '$foo' word (previous $arg) here
+ _zsh_highlight_main_add_region_highlight $start_pos $end_pos $param_style
+ param_style=""
+ fi
+ fi
+
+ # Initialize this_word and next_word.
+ if (( in_redirection == 0 )); then
+ this_word=$next_word
+ next_word=':regular:'
+ elif (( !in_param )); then
+ # Stall $next_word.
+ (( --in_redirection ))
+ fi
+
+ # Initialize per-"simple command" [zshmisc(1)] variables:
+ #
+ # $style how to highlight $arg
+ # $in_array_assignment boolean flag for "between '(' and ')' of array assignment"
+ # $highlight_glob boolean flag for "'noglob' is in effect"
+ # $saw_assignment boolean flag for "was preceded by an assignment"
+ #
+ style=unknown-token
+ if [[ $this_word == *':start:'* ]]; then
+ in_array_assignment=false
+ if [[ $arg == 'noglob' ]]; then
+ highlight_glob=false
+ fi
+ fi
+
+ if (( $#in_alias == 0 && in_param == 0 )); then
+ # Compute the new $start_pos and $end_pos, skipping over whitespace in $buf.
+ [[ "$proc_buf" = (#b)(#s)(''([ $'\t']|[\\]$'\n')#)(?|)* ]]
+ # The first, outer parenthesis
+ integer offset="${#match[1]}"
+ (( start_pos = end_pos + offset ))
+ (( end_pos = start_pos + $#arg ))
+
+ # The zsh lexer considers ';' and newline to be the same token, so
+ # ${(z)} converts all newlines to semicolons. Convert them back here to
+ # make later processing simpler.
+ [[ $arg == ';' && ${match[3]} == $'\n' ]] && arg=$'\n'
+
+ # Compute the new $proc_buf. We advance it
+ # (chop off characters from the beginning)
+ # beyond what end_pos points to, by skipping
+ # as many characters as end_pos was advanced.
+ #
+ # end_pos was advanced by $offset (via start_pos)
+ # and by $#arg. Note the `start_pos=$end_pos`
+ # below.
+ #
+ # As for the [,len]. We could use [,len-start_pos+offset]
+ # here, but to make it easier on eyes, we use len and
+ # rely on the fact that Zsh simply handles that. The
+ # length of proc_buf is len-start_pos+offset because
+ # we're chopping it to match current start_pos, so its
+ # length matches the previous value of start_pos.
+ #
+ # Why [,-1] is slower than [,length] isn't clear.
+ proc_buf="${proc_buf[offset + $#arg + 1,len]}"
+ fi
+
+ # Handle the INTERACTIVE_COMMENTS option.
+ #
+ # We use the (Z+c+) flag so the entire comment is presented as one token in $arg.
+ if [[ $zsyh_user_options[interactivecomments] == on && $arg[1] == $histchars[3] ]]; then
+ if [[ $this_word == *(':regular:'|':start:')* ]]; then
+ style=comment
+ else
+ style=unknown-token # prematurely terminated
+ fi
+ _zsh_highlight_main_add_region_highlight $start_pos $end_pos $style
+ # Stall this arg
+ in_redirection=1
+ continue
+ fi
+
+ if [[ $this_word == *':start:'* ]] && ! (( in_redirection )); then
+ # Expand aliases.
+ # An alias is ineligible for expansion while it's being expanded (see #652/#653).
+ _zsh_highlight_main__type "$arg" "$(( ! ${+seen_alias[$arg]} ))"
+ local res="$REPLY"
+ if [[ $res == "alias" ]]; then
+ # Mark insane aliases as unknown-token (cf. #263).
+ if [[ $arg == ?*=* ]]; then
+ _zsh_highlight_main_add_region_highlight $start_pos $end_pos unknown-token
+ continue
+ fi
+ seen_alias[$arg]=$#in_alias
+ _zsh_highlight_main__resolve_alias $arg
+ local -a alias_args
+ # Elision is desired in case alias x=''
+ if [[ $zsyh_user_options[interactivecomments] == on ]]; then
+ alias_args=(${(zZ+c+)REPLY})
+ else
+ alias_args=(${(z)REPLY})
+ fi
+ args=( $alias_args $args )
+ if (( $#in_alias == 0 )); then
+ alias_style=alias
+ else
+ # Transfer the count of this arg to the new element about to be appended.
+ (( in_alias[1]-- ))
+ fi
+ # Add one because we will in_alias[1]-- on the next loop iteration so
+ # this iteration should be considered in in_alias as well
+ in_alias=( $(($#alias_args + 1)) $in_alias )
+ (( in_redirection++ )) # Stall this arg
+ continue
+ else
+ _zsh_highlight_main_highlighter_expand_path $arg
+ _zsh_highlight_main__type "$REPLY" 0
+ res="$REPLY"
+ fi
+ fi
+
+ # Analyse the current word.
+ if _zsh_highlight_main__is_redirection $arg ; then
+ if (( in_redirection == 1 )); then
+ # Two consecutive redirection operators is an error.
+ _zsh_highlight_main_add_region_highlight $start_pos $end_pos unknown-token
+ else
+ in_redirection=2
+ _zsh_highlight_main_add_region_highlight $start_pos $end_pos redirection
+ fi
+ continue
+ elif [[ $arg == '{'${~parameter_name_pattern}'}' ]] && _zsh_highlight_main__is_redirection $args[1]; then
+ # named file descriptor: {foo}>&2
+ in_redirection=3
+ _zsh_highlight_main_add_region_highlight $start_pos $end_pos named-fd
+ continue
+ fi
+
+ # Expand parameters.
+ if (( ! in_param )) && _zsh_highlight_main_highlighter__try_expand_parameter "$arg"; then
+ # That's not entirely correct --- if the parameter's value happens to be a reserved
+ # word, the parameter expansion will be highlighted as a reserved word --- but that
+ # incorrectness is outweighed by the usability improvement of permitting the use of
+ # parameters that refer to commands, functions, and builtins.
+ () {
+ local -a words; words=( "${reply[@]}" )
+ if (( $#words == 0 )) && (( ! in_redirection )); then
+ # Parameter elision is happening
+ (( ++in_redirection ))
+ _zsh_highlight_main_add_region_highlight $start_pos $end_pos comment
+ continue
+ else
+ (( in_param = 1 + $#words ))
+ args=( $words $args )
+ arg=$args[1]
+ _zsh_highlight_main__type "$arg" 0
+ res=$REPLY
+ fi
+ }
+ fi
+
+ # Parse the sudo command line
+ if (( ! in_redirection )); then
+ if [[ $this_word == *':sudo_opt:'* ]]; then
+ if [[ -n $flags_with_argument ]] &&
+ {
+ # Trenary
+ if [[ -n $flags_sans_argument ]]
+ then [[ $arg == '-'[$flags_sans_argument]#[$flags_with_argument] ]]
+ else [[ $arg == '-'[$flags_with_argument] ]]
+ fi
+ } then
+ # Flag that requires an argument
+ this_word=${this_word//:start:/}
+ next_word=':sudo_arg:'
+ elif [[ -n $flags_with_argument ]] &&
+ {
+ # Trenary
+ if [[ -n $flags_sans_argument ]]
+ then [[ $arg == '-'[$flags_sans_argument]#[$flags_with_argument]* ]]
+ else [[ $arg == '-'[$flags_with_argument]* ]]
+ fi
+ } then
+ # Argument attached in the same word
+ this_word=${this_word//:start:/}
+ next_word+=':start:'
+ next_word+=':sudo_opt:'
+ elif [[ -n $flags_sans_argument ]] &&
+ [[ $arg == '-'[$flags_sans_argument]# ]]; then
+ # Flag that requires no argument
+ this_word=':sudo_opt:'
+ next_word+=':start:'
+ next_word+=':sudo_opt:'
+ elif [[ -n $flags_solo ]] &&
+ {
+ # Trenary
+ if [[ -n $flags_sans_argument ]]
+ then [[ $arg == '-'[$flags_sans_argument]#[$flags_solo]* ]]
+ else [[ $arg == '-'[$flags_solo]* ]]
+ fi
+ } then
+ # Solo flags
+ this_word=':sudo_opt:'
+ next_word=':regular:' # no :start:, nor :sudo_opt: since we don't know whether the solo flag takes an argument or not
+ elif [[ $arg == '-'* ]]; then
+ # Unknown flag. We don't know whether it takes an argument or not,
+ # so modify $next_word as we do for flags that require no argument.
+ # With that behaviour, if the flag in fact takes no argument we'll
+ # highlight the inner command word correctly, and if it does take an
+ # argument we'll highlight the command word correctly if the argument
+ # was given in the same shell word as the flag (as in '-uphy1729' or
+ # '--user=phy1729' without spaces).
+ this_word=':sudo_opt:'
+ next_word+=':start:'
+ next_word+=':sudo_opt:'
+ else
+ # Not an option flag; nothing to do. (If the command line is
+ # syntactically valid, ${this_word//:sudo_opt:/} should be
+ # non-empty now.)
+ this_word=${this_word//:sudo_opt:/}
+ fi
+ elif [[ $this_word == *':sudo_arg:'* ]]; then
+ next_word+=':sudo_opt:'
+ next_word+=':start:'
+ fi
+ fi
+
+ # The Great Fork: is this a command word? Is this a non-command word?
+ if [[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_COMMANDSEPARATOR:#"$arg"} ]] &&
+ [[ $braces_stack != *T* || $arg != ('||'|'&&') ]]; then
+
+ # First, determine the style of the command separator itself.
+ if _zsh_highlight_main__stack_pop T || _zsh_highlight_main__stack_pop Q; then
+ # Missing closing square bracket(s)
+ style=unknown-token
+ elif $in_array_assignment; then
+ case $arg in
+ # Literal newlines are just fine.
+ ($'\n') style=commandseparator;;
+ # Semicolons are parsed the same way as literal newlines. Nevertheless,
+ # highlight them as errors since they're probably unintended. Compare
+ # issue #691.
+ (';') style=unknown-token;;
+ # Other command separators aren't allowed.
+ (*) style=unknown-token;;
+ esac
+ elif [[ $this_word == *':regular:'* ]]; then
+ style=commandseparator
+ elif [[ $this_word == *':start:'* ]] && [[ $arg == $'\n' ]]; then
+ style=commandseparator
+ elif [[ $this_word == *':start:'* ]] && [[ $arg == ';' ]] && (( $#in_alias )); then
+ style=commandseparator
+ else
+ # Empty commands (semicolon follows nothing) are valid syntax.
+ # However, in interactive use they are likely to be erroneous;
+ # therefore, we highlight them as errors.
+ #
+ # Alias definitions are exempted from this check to allow multiline aliases
+ # with explicit (redundant) semicolons: «alias foo=$'bar;\nbaz'» (issue #677).
+ #
+ # See also #691 about possibly changing the style used here.
+ style=unknown-token
+ fi
+
+ # Second, determine the style of next_word.
+ if [[ $arg == $'\n' ]] && $in_array_assignment; then
+ # literal newline inside an array assignment
+ next_word=':regular:'
+ elif [[ $arg == ';' ]] && $in_array_assignment; then
+ # literal semicolon inside an array assignment
+ next_word=':regular:'
+ else
+ next_word=':start:'
+ highlight_glob=true
+ saw_assignment=false
+ (){
+ local alias_name
+ for alias_name in ${(k)seen_alias[(R)<$#in_alias->]}; do
+ # We can't unset keys that contain special characters (] \ and some others).
+ # More details: https://www.zsh.org/workers/43269
+ seen_alias=("${(@kv)seen_alias[(I)^$alias_name]}")
+ done
+ }
+ if [[ $arg != '|' && $arg != '|&' ]]; then
+ next_word+=':start_of_pipeline:'
+ fi
+ fi
+
+ elif ! (( in_redirection)) && [[ $this_word == *':always:'* && $arg == 'always' ]]; then
+ # try-always construct
+ style=reserved-word # de facto a reserved word, although not de jure
+ highlight_glob=true
+ saw_assignment=false
+ next_word=':start::start_of_pipeline:' # only left brace is allowed, apparently
+ elif ! (( in_redirection)) && [[ $this_word == *':start:'* ]]; then # $arg is the command word
+ if (( ${+precommand_options[$arg]} )) && _zsh_highlight_main__is_runnable $arg; then
+ style=precommand
+ () {
+ set -- "${(@s.:.)precommand_options[$arg]}"
+ flags_with_argument=$1
+ flags_sans_argument=$2
+ flags_solo=$3
+ }
+ next_word=${next_word//:regular:/}
+ next_word+=':sudo_opt:'
+ next_word+=':start:'
+ if [[ $arg == 'exec' || $arg == 'env' ]]; then
+ # To allow "exec 2>&1;" and "env | grep" where there's no command word
+ next_word+=':regular:'
+ fi
+ else
+ case $res in
+ (reserved) # reserved word
+ style=reserved-word
+ # Match braces and handle special cases.
+ case $arg in
+ (time|nocorrect)
+ next_word=${next_word//:regular:/}
+ next_word+=':start:'
+ ;;
+ ($'\x7b')
+ braces_stack='Y'"$braces_stack"
+ ;;
+ ($'\x7d')
+ # We're at command word, so no need to check $right_brace_is_recognised_everywhere
+ _zsh_highlight_main__stack_pop 'Y' reserved-word
+ if [[ $style == reserved-word ]]; then
+ next_word+=':always:'
+ fi
+ ;;
+ ($'\x5b\x5b')
+ braces_stack='T'"$braces_stack"
+ ;;
+ ('do')
+ braces_stack='D'"$braces_stack"
+ ;;
+ ('done')
+ _zsh_highlight_main__stack_pop 'D' reserved-word
+ ;;
+ ('if')
+ braces_stack=':?'"$braces_stack"
+ ;;
+ ('then')
+ _zsh_highlight_main__stack_pop ':' reserved-word
+ ;;
+ ('elif')
+ if [[ ${braces_stack[1]} == '?' ]]; then
+ braces_stack=':'"$braces_stack"
+ else
+ style=unknown-token
+ fi
+ ;;
+ ('else')
+ if [[ ${braces_stack[1]} == '?' ]]; then
+ :
+ else
+ style=unknown-token
+ fi
+ ;;
+ ('fi')
+ _zsh_highlight_main__stack_pop '?'
+ ;;
+ ('foreach')
+ braces_stack='$'"$braces_stack"
+ ;;
+ ('end')
+ _zsh_highlight_main__stack_pop '$' reserved-word
+ ;;
+ ('repeat')
+ # skip the repeat-count word
+ in_redirection=2
+ # The redirection mechanism assumes $this_word describes the word
+ # following the redirection. Make it so.
+ #
+ # That word can be a command word with shortloops (`repeat 2 ls`)
+ # or a command separator (`repeat 2; ls` or `repeat 2; do ls; done`).
+ #
+ # The repeat-count word will be handled like a redirection target.
+ this_word=':start::regular:'
+ ;;
+ ('!')
+ if [[ $this_word != *':start_of_pipeline:'* ]]; then
+ style=unknown-token
+ else
+ # '!' reserved word at start of pipeline; style already set above
+ fi
+ ;;
+ esac
+ if $saw_assignment && [[ $style != unknown-token ]]; then
+ style=unknown-token
+ fi
+ ;;
+ ('suffix alias')
+ style=suffix-alias
+ ;;
+ ('global alias')
+ style=global-alias
+ ;;
+ (alias) :;;
+ (builtin) style=builtin
+ [[ $arg == $'\x5b' ]] && braces_stack='Q'"$braces_stack"
+ ;;
+ (function) style=function;;
+ (command) style=command;;
+ (hashed) style=hashed-command;;
+ (none) if (( ! in_param )) && _zsh_highlight_main_highlighter_check_assign; then
+ _zsh_highlight_main_add_region_highlight $start_pos $end_pos assign
+ local i=$(( arg[(i)=] + 1 ))
+ saw_assignment=true
+ if [[ $arg[i] == '(' ]]; then
+ in_array_assignment=true
+ _zsh_highlight_main_add_region_highlight start_pos+i-1 start_pos+i reserved-word
+ else
+ # assignment to a scalar parameter.
+ # (For array assignments, the command doesn't start until the ")" token.)
+ #
+ # Discard :start_of_pipeline:, if present, as '!' is not valid
+ # after assignments.
+ next_word+=':start:'
+ if (( i <= $#arg )); then
+ () {
+ local highlight_glob=false
+ [[ $zsyh_user_options[globassign] == on ]] && highlight_glob=true
+ _zsh_highlight_main_highlighter_highlight_argument $i
+ }
+ fi
+ fi
+ continue
+ elif (( ! in_param )) &&
+ [[ $arg[0,1] = $histchars[0,1] ]] && (( $#arg[0,2] == 2 )); then
+ style=history-expansion
+ elif (( ! in_param )) &&
+ [[ $arg[0,1] == $histchars[2,2] ]]; then
+ style=history-expansion
+ elif (( ! in_param )) &&
+ ! $saw_assignment &&
+ [[ $arg[1,2] == '((' ]]; then
+ # Arithmetic evaluation.
+ #
+ # Note: prior to zsh-5.1.1-52-g4bed2cf (workers/36669), the ${(z)...}
+ # splitter would only output the '((' token if the matching '))' had
+ # been typed. Therefore, under those versions of zsh, BUFFER="(( 42"
+ # would be highlighted as an error until the matching "))" are typed.
+ #
+ # We highlight just the opening parentheses, as a reserved word; this
+ # is how [[ ... ]] is highlighted, too.
+ _zsh_highlight_main_add_region_highlight $start_pos $((start_pos + 2)) reserved-word
+ if [[ $arg[-2,-1] == '))' ]]; then
+ _zsh_highlight_main_add_region_highlight $((end_pos - 2)) $end_pos reserved-word
+ fi
+ continue
+ elif (( ! in_param )) &&
+ [[ $arg == '()' ]]; then
+ # anonymous function
+ style=reserved-word
+ elif (( ! in_param )) &&
+ ! $saw_assignment &&
+ [[ $arg == $'\x28' ]]; then
+ # subshell
+ style=reserved-word
+ braces_stack='R'"$braces_stack"
+ elif (( ! in_param )) &&
+ [[ $arg == $'\x29' ]]; then
+ # end of subshell or command substitution
+ if _zsh_highlight_main__stack_pop 'S'; then
+ REPLY=$start_pos
+ reply=($list_highlights)
+ return 0
+ fi
+ _zsh_highlight_main__stack_pop 'R' reserved-word
+ else
+ if _zsh_highlight_main_highlighter_check_path $arg 1; then
+ style=$REPLY
+ else
+ style=unknown-token
+ fi
+ fi
+ ;;
+ (*) _zsh_highlight_main_add_region_highlight $start_pos $end_pos arg0_$res
+ continue
+ ;;
+ esac
+ fi
+ if [[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_CONTROL_FLOW:#"$arg"} ]]; then
+ next_word=':start::start_of_pipeline:'
+ fi
+ elif _zsh_highlight_main__is_global_alias "$arg"; then # $arg is a global alias that isn't in command position
+ style=global-alias
+ else # $arg is a non-command word
+ case $arg in
+ ($'\x29')
+ # subshell or end of array assignment
+ if $in_array_assignment; then
+ _zsh_highlight_main_add_region_highlight $start_pos $end_pos assign
+ _zsh_highlight_main_add_region_highlight $start_pos $end_pos reserved-word
+ in_array_assignment=false
+ next_word+=':start:'
+ continue
+ elif (( in_redirection )); then
+ style=unknown-token
+ else
+ if _zsh_highlight_main__stack_pop 'S'; then
+ REPLY=$start_pos
+ reply=($list_highlights)
+ return 0
+ fi
+ _zsh_highlight_main__stack_pop 'R' reserved-word
+ fi
+ ;;
+ ($'\x28\x29')
+ # possibly a function definition
+ if (( in_redirection )) || $in_array_assignment; then
+ style=unknown-token
+ else
+ if [[ $zsyh_user_options[multifuncdef] == on ]] || false # TODO: or if the previous word was a command word
+ then
+ next_word+=':start::start_of_pipeline:'
+ fi
+ style=reserved-word
+ fi
+ ;;
+ (*) if false; then
+ elif [[ $arg = $'\x7d' ]] && $right_brace_is_recognised_everywhere; then
+ # Parsing rule: {
+ #
+ # Additionally, `tt(})' is recognized in any position if neither the
+ # tt(IGNORE_BRACES) option nor the tt(IGNORE_CLOSE_BRACES) option is set.
+ if (( in_redirection )) || $in_array_assignment; then
+ style=unknown-token
+ else
+ _zsh_highlight_main__stack_pop 'Y' reserved-word
+ if [[ $style == reserved-word ]]; then
+ next_word+=':always:'
+ fi
+ fi
+ elif [[ $arg[0,1] = $histchars[0,1] ]] && (( $#arg[0,2] == 2 )); then
+ style=history-expansion
+ elif [[ $arg == $'\x5d\x5d' ]] && _zsh_highlight_main__stack_pop 'T' reserved-word; then
+ :
+ elif [[ $arg == $'\x5d' ]] && _zsh_highlight_main__stack_pop 'Q' builtin; then
+ :
+ else
+ _zsh_highlight_main_highlighter_highlight_argument 1 $(( 1 != in_redirection ))
+ continue
+ fi
+ ;;
+ esac
+ fi
+ _zsh_highlight_main_add_region_highlight $start_pos $end_pos $style
+ done
+ (( $#in_alias )) && in_alias=() _zsh_highlight_main_add_region_highlight $start_pos $end_pos $alias_style
+ (( in_param == 1 )) && in_param=0 _zsh_highlight_main_add_region_highlight $start_pos $end_pos $param_style
+ [[ "$proc_buf" = (#b)(#s)(([[:space:]]|\\$'\n')#) ]]
+ REPLY=$(( end_pos + ${#match[1]} - 1 ))
+ reply=($list_highlights)
+ return $(( $#braces_stack > 0 ))
+}
+
+# Check if $arg is variable assignment
+_zsh_highlight_main_highlighter_check_assign()
+{
+ setopt localoptions extended_glob
+ [[ $arg == [[:alpha:]_][[:alnum:]_]#(|\[*\])(|[+])=* ]] ||
+ [[ $arg == [0-9]##(|[+])=* ]]
+}
+
+_zsh_highlight_main_highlighter_highlight_path_separators()
+{
+ local pos style_pathsep
+ style_pathsep=$1_pathseparator
+ reply=()
+ [[ -z "$ZSH_HIGHLIGHT_STYLES[$style_pathsep]" || "$ZSH_HIGHLIGHT_STYLES[$1]" == "$ZSH_HIGHLIGHT_STYLES[$style_pathsep]" ]] && return 0
+ for (( pos = start_pos; $pos <= end_pos; pos++ )) ; do
+ if [[ $BUFFER[pos] == / ]]; then
+ reply+=($((pos - 1)) $pos $style_pathsep)
+ fi
+ done
+}
+
+# Check if $1 is a path.
+# If yes, return 0 and in $REPLY the style to use.
+# Else, return non-zero (and the contents of $REPLY is undefined).
+#
+# $2 should be non-zero iff we're in command position.
+_zsh_highlight_main_highlighter_check_path()
+{
+ _zsh_highlight_main_highlighter_expand_path "$1"
+ local expanded_path="$REPLY" tmp_path
+ integer in_command_position=$2
+
+ if [[ $zsyh_user_options[autocd] == on ]]; then
+ integer autocd=1
+ else
+ integer autocd=0
+ fi
+
+ if (( in_command_position )); then
+ # ### Currently, this value is never returned: either it's overwritten
+ # ### below, or the return code is non-zero
+ REPLY=arg0
+ else
+ REPLY=path
+ fi
+
+ if [[ ${1[1]} == '=' && $1 == ??* && ${1[2]} != $'\x28' && $zsyh_user_options[equals] == 'on' && $expanded_path[1] != '/' ]]; then
+ REPLY=unknown-token # will error out if executed
+ return 0
+ fi
+
+ [[ -z $expanded_path ]] && return 1
+
+ # Check if this is a blacklisted path
+ if [[ $expanded_path[1] == / ]]; then
+ tmp_path=$expanded_path
+ else
+ tmp_path=$PWD/$expanded_path
+ fi
+ tmp_path=$tmp_path:a
+
+ while [[ $tmp_path != / ]]; do
+ [[ -n ${(M)ZSH_HIGHLIGHT_DIRS_BLACKLIST:#$tmp_path} ]] && return 1
+ tmp_path=$tmp_path:h
+ done
+
+ if (( in_command_position )); then
+ if [[ -x $expanded_path ]]; then
+ if (( autocd )); then
+ if [[ -d $expanded_path ]]; then
+ REPLY=autodirectory
+ fi
+ return 0
+ elif [[ ! -d $expanded_path ]]; then
+ # ### This seems unreachable for the current callers
+ return 0
+ fi
+ fi
+ else
+ if [[ -L $expanded_path || -e $expanded_path ]]; then
+ return 0
+ fi
+ fi
+
+ # Search the path in CDPATH
+ if [[ $expanded_path != /* ]] && (( autocd || ! in_command_position )); then
+ # TODO: When we've dropped support for pre-5.0.6 zsh, use the *(Y1) glob qualifier here.
+ local cdpath_dir
+ for cdpath_dir in $cdpath ; do
+ if [[ -d "$cdpath_dir/$expanded_path" && -x "$cdpath_dir/$expanded_path" ]]; then
+ if (( in_command_position && autocd )); then
+ REPLY=autodirectory
+ fi
+ return 0
+ fi
+ done
+ fi
+
+ # If dirname($1) doesn't exist, neither does $1.
+ [[ ! -d ${expanded_path:h} ]] && return 1
+
+ # If this word ends the buffer, check if it's the prefix of a valid path.
+ if (( has_end && (len == end_pos) )) &&
+ (( ! $#in_alias )) &&
+ [[ $WIDGET != zle-line-finish ]]; then
+ # TODO: When we've dropped support for pre-5.0.6 zsh, use the *(Y1) glob qualifier here.
+ local -a tmp
+ if (( in_command_position )); then
+ # We include directories even when autocd is enabled, because those
+ # directories might contain executable files: e.g., BUFFER="/bi" en route
+ # to typing "/bin/sh".
+ tmp=( ${expanded_path}*(N-*,N-/) )
+ else
+ tmp=( ${expanded_path}*(N) )
+ fi
+ (( ${+tmp[1]} )) && REPLY=path_prefix && return 0
+ fi
+
+ # It's not a path.
+ return 1
+}
+
+# Highlight an argument and possibly special chars in quotes starting at $1 in $arg
+# This command will at least highlight $1 to end_pos with the default style
+# If $2 is set to 0, the argument cannot be highlighted as an option.
+#
+# This function currently assumes it's never called for the command word.
+_zsh_highlight_main_highlighter_highlight_argument()
+{
+ local base_style=default i=$1 option_eligible=${2:-1} path_eligible=1 ret start style
+ local -a highlights
+
+ local -a match mbegin mend
+ local MATCH; integer MBEGIN MEND
+
+ case "$arg[i]" in
+ '%')
+ if [[ $arg[i+1] == '?' ]]; then
+ (( i += 2 ))
+ fi
+ ;;
+ '-')
+ if (( option_eligible )); then
+ if [[ $arg[i+1] == - ]]; then
+ base_style=double-hyphen-option
+ else
+ base_style=single-hyphen-option
+ fi
+ path_eligible=0
+ fi
+ ;;
+ '=')
+ if [[ $arg[i+1] == $'\x28' ]]; then
+ (( i += 2 ))
+ _zsh_highlight_main_highlighter_highlight_list $(( start_pos + i - 1 )) S $has_end $arg[i,-1]
+ ret=$?
+ (( i += REPLY ))
+ highlights+=(
+ $(( start_pos + $1 - 1 )) $(( start_pos + i )) process-substitution
+ $(( start_pos + $1 - 1 )) $(( start_pos + $1 + 1 )) process-substitution-delimiter
+ $reply
+ )
+ if (( ret == 0 )); then
+ highlights+=($(( start_pos + i - 1 )) $(( start_pos + i )) process-substitution-delimiter)
+ fi
+ fi
+ esac
+
+ # This loop is a hot path. Keep it fast!
+ (( --i ))
+ while (( ++i <= $#arg )); do
+ i=${arg[(ib.i.)[\\\'\"\`\$\<\>\*\?]]}
+ case "$arg[$i]" in
+ "") break;;
+ "\\") (( i += 1 )); continue;;
+ "'")
+ _zsh_highlight_main_highlighter_highlight_single_quote $i
+ (( i = REPLY ))
+ highlights+=($reply)
+ ;;
+ '"')
+ _zsh_highlight_main_highlighter_highlight_double_quote $i
+ (( i = REPLY ))
+ highlights+=($reply)
+ ;;
+ '`')
+ _zsh_highlight_main_highlighter_highlight_backtick $i
+ (( i = REPLY ))
+ highlights+=($reply)
+ ;;
+ '$')
+ if [[ $arg[i+1] != "'" ]]; then
+ path_eligible=0
+ fi
+ if [[ $arg[i+1] == "'" ]]; then
+ _zsh_highlight_main_highlighter_highlight_dollar_quote $i
+ (( i = REPLY ))
+ highlights+=($reply)
+ continue
+ elif [[ $arg[i+1] == $'\x28' ]]; then
+ if [[ $arg[i+2] == $'\x28' ]] && _zsh_highlight_main_highlighter_highlight_arithmetic $i; then
+ # Arithmetic expansion
+ (( i = REPLY ))
+ highlights+=($reply)
+ continue
+ fi
+ start=$i
+ (( i += 2 ))
+ _zsh_highlight_main_highlighter_highlight_list $(( start_pos + i - 1 )) S $has_end $arg[i,-1]
+ ret=$?
+ (( i += REPLY ))
+ highlights+=(
+ $(( start_pos + start - 1)) $(( start_pos + i )) command-substitution-unquoted
+ $(( start_pos + start - 1)) $(( start_pos + start + 1)) command-substitution-delimiter-unquoted
+ $reply
+ )
+ if (( ret == 0 )); then
+ highlights+=($(( start_pos + i - 1)) $(( start_pos + i )) command-substitution-delimiter-unquoted)
+ fi
+ continue
+ fi
+ while [[ $arg[i+1] == [=~#+'^'] ]]; do
+ (( i += 1 ))
+ done
+ if [[ $arg[i+1] == [*@#?$!-] ]]; then
+ (( i += 1 ))
+ fi;;
+ [\<\>])
+ if [[ $arg[i+1] == $'\x28' ]]; then # \x28 = open paren
+ start=$i
+ (( i += 2 ))
+ _zsh_highlight_main_highlighter_highlight_list $(( start_pos + i - 1 )) S $has_end $arg[i,-1]
+ ret=$?
+ (( i += REPLY ))
+ highlights+=(
+ $(( start_pos + start - 1)) $(( start_pos + i )) process-substitution
+ $(( start_pos + start - 1)) $(( start_pos + start + 1 )) process-substitution-delimiter
+ $reply
+ )
+ if (( ret == 0 )); then
+ highlights+=($(( start_pos + i - 1)) $(( start_pos + i )) process-substitution-delimiter)
+ fi
+ continue
+ fi
+ ;|
+ *)
+ if $highlight_glob &&
+ [[ $zsyh_user_options[multios] == on || $in_redirection -eq 0 ]] &&
+ [[ ${arg[$i]} =~ ^[*?] || ${arg:$i-1} =~ ^\<[0-9]*-[0-9]*\> ]]; then
+ highlights+=($(( start_pos + i - 1 )) $(( start_pos + i + $#MATCH - 1)) globbing)
+ (( i += $#MATCH - 1 ))
+ path_eligible=0
+ else
+ continue
+ fi
+ ;;
+ esac
+ done
+
+ if (( path_eligible )); then
+ if (( in_redirection )) && [[ $last_arg == *['<>']['&'] && $arg[$1,-1] == (<0->|p|-) ]]; then
+ if [[ $arg[$1,-1] == (p|-) ]]; then
+ base_style=redirection
+ else
+ base_style=numeric-fd
+ fi
+ # This function is currently never called for the command word, so $2 is hard-coded as 0.
+ elif _zsh_highlight_main_highlighter_check_path $arg[$1,-1] 0; then
+ base_style=$REPLY
+ _zsh_highlight_main_highlighter_highlight_path_separators $base_style
+ highlights+=($reply)
+ fi
+ fi
+
+ highlights=($(( start_pos + $1 - 1 )) $end_pos $base_style $highlights)
+ _zsh_highlight_main_add_many_region_highlights $highlights
+}
+
+# Quote Helper Functions
+#
+# $arg is expected to be set to the current argument
+# $start_pos is expected to be set to the start of $arg in $BUFFER
+# $1 is the index in $arg which starts the quote
+# $REPLY is returned as the end of quote index in $arg
+# $reply is returned as an array of region_highlight additions
+
+# Highlight single-quoted strings
+_zsh_highlight_main_highlighter_highlight_single_quote()
+{
+ local arg1=$1 i q=\' style
+ i=$arg[(ib:arg1+1:)$q]
+ reply=()
+
+ if [[ $zsyh_user_options[rcquotes] == on ]]; then
+ while [[ $arg[i+1] == "'" ]]; do
+ reply+=($(( start_pos + i - 1 )) $(( start_pos + i + 1 )) rc-quote)
+ (( i++ ))
+ i=$arg[(ib:i+1:)$q]
+ done
+ fi
+
+ if [[ $arg[i] == "'" ]]; then
+ style=single-quoted-argument
+ else
+ # If unclosed, i points past the end
+ (( i-- ))
+ style=single-quoted-argument-unclosed
+ fi
+ reply=($(( start_pos + arg1 - 1 )) $(( start_pos + i )) $style $reply)
+ REPLY=$i
+}
+
+# Highlight special chars inside double-quoted strings
+_zsh_highlight_main_highlighter_highlight_double_quote()
+{
+ local -a breaks match mbegin mend saved_reply
+ local MATCH; integer last_break=$(( start_pos + $1 - 1 )) MBEGIN MEND
+ local i j k ret style
+ reply=()
+
+ for (( i = $1 + 1 ; i <= $#arg ; i += 1 )) ; do
+ (( j = i + start_pos - 1 ))
+ (( k = j + 1 ))
+ case "$arg[$i]" in
+ ('"') break;;
+ ('`') saved_reply=($reply)
+ _zsh_highlight_main_highlighter_highlight_backtick $i
+ (( i = REPLY ))
+ reply=($saved_reply $reply)
+ continue
+ ;;
+ ('$') style=dollar-double-quoted-argument
+ # Look for an alphanumeric parameter name.
+ if [[ ${arg:$i} =~ ^([A-Za-z_][A-Za-z0-9_]*|[0-9]+) ]] ; then
+ (( k += $#MATCH )) # highlight the parameter name
+ (( i += $#MATCH )) # skip past it
+ elif [[ ${arg:$i} =~ ^[{]([A-Za-z_][A-Za-z0-9_]*|[0-9]+)[}] ]] ; then
+ (( k += $#MATCH )) # highlight the parameter name and braces
+ (( i += $#MATCH )) # skip past it
+ elif [[ $arg[i+1] == '$' ]]; then
+ # $$ - pid
+ (( k += 1 )) # highlight both dollar signs
+ (( i += 1 )) # don't consider the second one as introducing another parameter expansion
+ elif [[ $arg[i+1] == [-#*@?] ]]; then
+ # $#, $*, $@, $?, $- - like $$ above
+ (( k += 1 )) # highlight both dollar signs
+ (( i += 1 )) # don't consider the second one as introducing another parameter expansion
+ elif [[ $arg[i+1] == $'\x28' ]]; then
+ saved_reply=($reply)
+ if [[ $arg[i+2] == $'\x28' ]] && _zsh_highlight_main_highlighter_highlight_arithmetic $i; then
+ # Arithmetic expansion
+ (( i = REPLY ))
+ reply=($saved_reply $reply)
+ continue
+ fi
+
+ breaks+=( $last_break $(( start_pos + i - 1 )) )
+ (( i += 2 ))
+ _zsh_highlight_main_highlighter_highlight_list $(( start_pos + i - 1 )) S $has_end $arg[i,-1]
+ ret=$?
+ (( i += REPLY ))
+ last_break=$(( start_pos + i ))
+ reply=(
+ $saved_reply
+ $j $(( start_pos + i )) command-substitution-quoted
+ $j $(( j + 2 )) command-substitution-delimiter-quoted
+ $reply
+ )
+ if (( ret == 0 )); then
+ reply+=($(( start_pos + i - 1 )) $(( start_pos + i )) command-substitution-delimiter-quoted)
+ fi
+ continue
+ else
+ continue
+ fi
+ ;;
+ "\\") style=back-double-quoted-argument
+ if [[ \\\`\"\$${histchars[1]} == *$arg[$i+1]* ]]; then
+ (( k += 1 )) # Color following char too.
+ (( i += 1 )) # Skip parsing the escaped char.
+ else
+ continue
+ fi
+ ;;
+ ($histchars[1]) # ! - may be a history expansion
+ if [[ $arg[i+1] != ('='|$'\x28'|$'\x7b'|[[:blank:]]) ]]; then
+ style=history-expansion
+ else
+ continue
+ fi
+ ;;
+ *) continue ;;
+
+ esac
+ reply+=($j $k $style)
+ done
+
+ if [[ $arg[i] == '"' ]]; then
+ style=double-quoted-argument
+ else
+ # If unclosed, i points past the end
+ (( i-- ))
+ style=double-quoted-argument-unclosed
+ fi
+ (( last_break != start_pos + i )) && breaks+=( $last_break $(( start_pos + i )) )
+ saved_reply=($reply)
+ reply=()
+ for 1 2 in $breaks; do
+ (( $1 != $2 )) && reply+=($1 $2 $style)
+ done
+ reply+=($saved_reply)
+ REPLY=$i
+}
+
+# Highlight special chars inside dollar-quoted strings
+_zsh_highlight_main_highlighter_highlight_dollar_quote()
+{
+ local -a match mbegin mend
+ local MATCH; integer MBEGIN MEND
+ local i j k style
+ local AA
+ integer c
+ reply=()
+
+ for (( i = $1 + 2 ; i <= $#arg ; i += 1 )) ; do
+ (( j = i + start_pos - 1 ))
+ (( k = j + 1 ))
+ case "$arg[$i]" in
+ "'") break;;
+ "\\") style=back-dollar-quoted-argument
+ for (( c = i + 1 ; c <= $#arg ; c += 1 )); do
+ [[ "$arg[$c]" != ([0-9xXuUa-fA-F]) ]] && break
+ done
+ AA=$arg[$i+1,$c-1]
+ # Matching for HEX and OCT values like \0xA6, \xA6 or \012
+ if [[ "$AA" =~ "^(x|X)[0-9a-fA-F]{1,2}"
+ || "$AA" =~ "^[0-7]{1,3}"
+ || "$AA" =~ "^u[0-9a-fA-F]{1,4}"
+ || "$AA" =~ "^U[0-9a-fA-F]{1,8}"
+ ]]; then
+ (( k += $#MATCH ))
+ (( i += $#MATCH ))
+ else
+ if (( $#arg > $i+1 )) && [[ $arg[$i+1] == [xXuU] ]]; then
+ # \x not followed by hex digits is probably an error
+ style=unknown-token
+ fi
+ (( k += 1 )) # Color following char too.
+ (( i += 1 )) # Skip parsing the escaped char.
+ fi
+ ;;
+ *) continue ;;
+
+ esac
+ reply+=($j $k $style)
+ done
+
+ if [[ $arg[i] == "'" ]]; then
+ style=dollar-quoted-argument
+ else
+ # If unclosed, i points past the end
+ (( i-- ))
+ style=dollar-quoted-argument-unclosed
+ fi
+ reply=($(( start_pos + $1 - 1 )) $(( start_pos + i )) $style $reply)
+ REPLY=$i
+}
+
+# Highlight backtick substitutions
+_zsh_highlight_main_highlighter_highlight_backtick()
+{
+ # buf is the contents of the backticks with a layer of backslashes removed.
+ # last is the index of arg for the start of the string to be copied into buf.
+ # It is either one past the beginning backtick or one past the last backslash.
+ # offset is a count of consumed \ (the delta between buf and arg).
+ # offsets is an array indexed by buf offset of when the delta between buf and arg changes.
+ # It is sparse, so search backwards to the last value
+ local buf highlight style=back-quoted-argument-unclosed style_end
+ local -i arg1=$1 end_ i=$1 last offset=0 start subshell_has_end=0
+ local -a highlight_zone highlights offsets
+ reply=()
+
+ last=$(( arg1 + 1 ))
+ # Remove one layer of backslashes and find the end
+ while i=$arg[(ib:i+1:)[\\\\\`]]; do # find the next \ or `
+ if (( i > $#arg )); then
+ buf=$buf$arg[last,i]
+ offsets[i-arg1-offset]='' # So we never index past the end
+ (( i-- ))
+ subshell_has_end=$(( has_end && (start_pos + i == len) ))
+ break
+ fi
+
+ if [[ $arg[i] == '\' ]]; then
+ (( i++ ))
+ # POSIX XCU 2.6.3
+ if [[ $arg[i] == ('$'|'`'|'\') ]]; then
+ buf=$buf$arg[last,i-2]
+ (( offset++ ))
+ # offsets is relative to buf, so adjust by -arg1
+ offsets[i-arg1-offset]=$offset
+ else
+ buf=$buf$arg[last,i-1]
+ fi
+ else # it's an unquoted ` and this is the end
+ style=back-quoted-argument
+ style_end=back-quoted-argument-delimiter
+ buf=$buf$arg[last,i-1]
+ offsets[i-arg1-offset]='' # So we never index past the end
+ break
+ fi
+ last=$i
+ done
+
+ _zsh_highlight_main_highlighter_highlight_list 0 '' $subshell_has_end $buf
+
+ # Munge the reply to account for removed backslashes
+ for start end_ highlight in $reply; do
+ start=$(( start_pos + arg1 + start + offsets[(Rb:start:)?*] ))
+ end_=$(( start_pos + arg1 + end_ + offsets[(Rb:end_:)?*] ))
+ highlights+=($start $end_ $highlight)
+ if [[ $highlight == back-quoted-argument-unclosed && $style == back-quoted-argument ]]; then
+ # An inner backtick command substitution is unclosed, but this level is closed
+ style_end=unknown-token
+ fi
+ done
+
+ reply=(
+ $(( start_pos + arg1 - 1 )) $(( start_pos + i )) $style
+ $(( start_pos + arg1 - 1 )) $(( start_pos + arg1 )) back-quoted-argument-delimiter
+ $highlights
+ )
+ if (( $#style_end )); then
+ reply+=($(( start_pos + i - 1)) $(( start_pos + i )) $style_end)
+ fi
+ REPLY=$i
+}
+
+# Highlight special chars inside arithmetic expansions
+_zsh_highlight_main_highlighter_highlight_arithmetic()
+{
+ local -a saved_reply
+ local style
+ integer i j k paren_depth ret
+ reply=()
+
+ for (( i = $1 + 3 ; i <= end_pos - start_pos ; i += 1 )) ; do
+ (( j = i + start_pos - 1 ))
+ (( k = j + 1 ))
+ case "$arg[$i]" in
+ [\'\"\\@{}])
+ style=unknown-token
+ ;;
+ '(')
+ (( paren_depth++ ))
+ continue
+ ;;
+ ')')
+ if (( paren_depth )); then
+ (( paren_depth-- ))
+ continue
+ fi
+ [[ $arg[i+1] == ')' ]] && { (( i++ )); break; }
+ # Special case ) at the end of the buffer to avoid flashing command substitution for a character
+ (( has_end && (len == k) )) && break
+ # This is a single paren and there are no open parens, so this isn't an arithmetic expansion
+ return 1
+ ;;
+ '`')
+ saved_reply=($reply)
+ _zsh_highlight_main_highlighter_highlight_backtick $i
+ (( i = REPLY ))
+ reply=($saved_reply $reply)
+ continue
+ ;;
+ '$' )
+ if [[ $arg[i+1] == $'\x28' ]]; then
+ saved_reply=($reply)
+ if [[ $arg[i+2] == $'\x28' ]] && _zsh_highlight_main_highlighter_highlight_arithmetic $i; then
+ # Arithmetic expansion
+ (( i = REPLY ))
+ reply=($saved_reply $reply)
+ continue
+ fi
+
+ (( i += 2 ))
+ _zsh_highlight_main_highlighter_highlight_list $(( start_pos + i - 1 )) S $has_end $arg[i,end_pos]
+ ret=$?
+ (( i += REPLY ))
+ reply=(
+ $saved_reply
+ $j $(( start_pos + i )) command-substitution-quoted
+ $j $(( j + 2 )) command-substitution-delimiter-quoted
+ $reply
+ )
+ if (( ret == 0 )); then
+ reply+=($(( start_pos + i - 1 )) $(( start_pos + i )) command-substitution-delimiter)
+ fi
+ continue
+ else
+ continue
+ fi
+ ;;
+ ($histchars[1]) # ! - may be a history expansion
+ if [[ $arg[i+1] != ('='|$'\x28'|$'\x7b'|[[:blank:]]) ]]; then
+ style=history-expansion
+ else
+ continue
+ fi
+ ;;
+ *)
+ continue
+ ;;
+
+ esac
+ reply+=($j $k $style)
+ done
+
+ if [[ $arg[i] != ')' ]]; then
+ # If unclosed, i points past the end
+ (( i-- ))
+ fi
+ style=arithmetic-expansion
+ reply=($(( start_pos + $1 - 1)) $(( start_pos + i )) arithmetic-expansion $reply)
+ REPLY=$i
+}
+
+
+# Called with a single positional argument.
+# Perform filename expansion (tilde expansion) on the argument and set $REPLY to the expanded value.
+#
+# Does not perform filename generation (globbing).
+_zsh_highlight_main_highlighter_expand_path()
+{
+ (( $# == 1 )) || print -r -- >&2 "zsh-syntax-highlighting: BUG: _zsh_highlight_main_highlighter_expand_path: called without argument"
+
+ # The $~1 syntax normally performs filename generation, but not when it's on the right-hand side of ${x:=y}.
+ setopt localoptions nonomatch
+ unset REPLY
+ : ${REPLY:=${(Q)${~1}}}
+}
+
+# -------------------------------------------------------------------------------------------------
+# Main highlighter initialization
+# -------------------------------------------------------------------------------------------------
+
+_zsh_highlight_main__precmd_hook() {
+ # Unset the WARN_NESTED_VAR option, taking care not to error if the option
+ # doesn't exist (zsh older than zsh-5.3.1-test-2).
+ setopt localoptions
+ if eval '[[ -o warnnestedvar ]]' 2>/dev/null; then
+ unsetopt warnnestedvar
+ fi
+
+ _zsh_highlight_main__command_type_cache=()
+}
+
+autoload -Uz add-zsh-hook
+if add-zsh-hook precmd _zsh_highlight_main__precmd_hook 2>/dev/null; then
+ # Initialize command type cache
+ typeset -gA _zsh_highlight_main__command_type_cache
+else
+ print -r -- >&2 'zsh-syntax-highlighting: Failed to load add-zsh-hook. Some speed optimizations will not be used.'
+ # Make sure the cache is unset
+ unset _zsh_highlight_main__command_type_cache
+fi
+typeset -ga ZSH_HIGHLIGHT_DIRS_BLACKLIST
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/abspath-in-command-position1.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/abspath-in-command-position1.zsh
new file mode 100644
index 0000000..cfc12a5
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/abspath-in-command-position1.zsh
@@ -0,0 +1,35 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'/'
+
+expected_region_highlight=(
+ '1 1 path_prefix' # /
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/abspath-in-command-position1b.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/abspath-in-command-position1b.zsh
new file mode 100644
index 0000000..88fe60c
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/abspath-in-command-position1b.zsh
@@ -0,0 +1,36 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+setopt autocd
+BUFFER=$'/'
+
+expected_region_highlight=(
+ '1 1 autodirectory' # /
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/abspath-in-command-position2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/abspath-in-command-position2.zsh
new file mode 100644
index 0000000..5033d2c
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/abspath-in-command-position2.zsh
@@ -0,0 +1,35 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'/bi'
+
+expected_region_highlight=(
+ '1 3 path_prefix' # /bi
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/abspath-in-command-position3.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/abspath-in-command-position3.zsh
new file mode 100644
index 0000000..415e316
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/abspath-in-command-position3.zsh
@@ -0,0 +1,37 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'/bin; /bin'
+
+expected_region_highlight=(
+ '1 4 unknown-token' # /bin (in middle)
+ '5 5 commandseparator' # ;
+ '7 10 path_prefix' # /bin (at end)
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/abspath-in-command-position3b.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/abspath-in-command-position3b.zsh
new file mode 100644
index 0000000..0e65c98
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/abspath-in-command-position3b.zsh
@@ -0,0 +1,38 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+setopt autocd
+BUFFER=$'/bin; /bin'
+
+expected_region_highlight=(
+ '1 4 autodirectory' # /bin (in middle)
+ '5 5 commandseparator' # ;
+ '7 10 autodirectory' # /bin (at end)
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/abspath-in-command-position4.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/abspath-in-command-position4.zsh
new file mode 100644
index 0000000..9e935bf
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/abspath-in-command-position4.zsh
@@ -0,0 +1,35 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'/bin/s'
+
+expected_region_highlight=(
+ '1 6 path_prefix' # /bin/s
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/abspath-in-command-position5.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/abspath-in-command-position5.zsh
new file mode 100644
index 0000000..e428b1a
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/abspath-in-command-position5.zsh
@@ -0,0 +1,35 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'/bin/sh'
+
+expected_region_highlight=(
+ '1 7 command' # /bin/sh
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-assignment1.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-assignment1.zsh
new file mode 100644
index 0000000..0c101c8
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-assignment1.zsh
@@ -0,0 +1,38 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+# Issue #263 (more-pathological case): aliases[x=y]=z works; the ${(z)} splitter considers
+# that a single word; but it's not looked up as an alias. Hence, highlight it as an error.
+aliases[x=y]='lorem ipsum dolor sit amet'
+BUFFER='x=y ls'
+
+expected_region_highlight=(
+ "1 3 unknown-token" # x=y
+ "5 6 default" # ls
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-basic.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-basic.zsh
new file mode 100644
index 0000000..7af8b7c
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-basic.zsh
@@ -0,0 +1,35 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+alias foo="echo hello world"
+BUFFER="foo"
+
+expected_region_highlight+=(
+ "1 3 alias" # foo
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-brackets.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-brackets.zsh
new file mode 100644
index 0000000..ede6c9a
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-brackets.zsh
@@ -0,0 +1,41 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2021 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+# Have to use cat here as it must be a command that exists.
+# Otherwise, the test would fail with the first token being recognized
+# as an "unknown-token".
+alias ]=cat
+
+BUFFER='] /'
+
+expected_region_highlight=(
+ '1 1 alias' # ]
+ '3 3 path' # /
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-command-substitution.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-command-substitution.zsh
new file mode 100644
index 0000000..a7b77df
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-command-substitution.zsh
@@ -0,0 +1,37 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2019 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+# Alias must be at least 4 characters to test the regression
+# cf. 139ea2b189819c43cc251825981c116959b15cc3
+alias foobar='echo "$(echo foobar)"'
+BUFFER='foobar'
+
+expected_region_highlight=(
+ "1 6 alias" # foobar
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-comment1.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-comment1.zsh
new file mode 100644
index 0000000..bae7ef6
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-comment1.zsh
@@ -0,0 +1,37 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+# see alias-comment2.zsh and comment-followed.zsh
+setopt interactivecomments
+alias x=$'# foo\npwd'
+BUFFER='x'
+
+expected_region_highlight=(
+ '1 1 alias' # x
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-comment2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-comment2.zsh
new file mode 100644
index 0000000..5a49822
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-comment2.zsh
@@ -0,0 +1,37 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+# see alias-comment1.zsh
+setopt NO_interactivecomments
+alias x=$'# foo\npwd'
+BUFFER='x'
+
+expected_region_highlight=(
+ '1 1 unknown-token' # x (#)
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-complex.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-complex.zsh
new file mode 100644
index 0000000..5ad7c0a
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-complex.zsh
@@ -0,0 +1,38 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+alias x='echo && ls; >'
+
+BUFFER='x file echo'
+
+expected_region_highlight=(
+ '1 1 alias' # x
+ '3 6 default' # file
+ '8 11 builtin' # echo
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-empty.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-empty.zsh
new file mode 100644
index 0000000..535fccc
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-empty.zsh
@@ -0,0 +1,38 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+alias x=''
+
+BUFFER='x echo foo'
+
+expected_region_highlight=(
+ '1 1 alias' # x
+ '3 6 builtin' # echo
+ '8 10 default' # foo
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-eponymous1.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-eponymous1.zsh
new file mode 100644
index 0000000..2642e14
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-eponymous1.zsh
@@ -0,0 +1,36 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2019 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+alias ls='command ls'
+
+BUFFER='ls'
+
+expected_region_highlight=(
+ "1 2 alias" # ls
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-eponymous2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-eponymous2.zsh
new file mode 100644
index 0000000..dcd8565
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-eponymous2.zsh
@@ -0,0 +1,36 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2019 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+alias ls=tmp tmp='command ls'
+
+BUFFER='ls'
+
+expected_region_highlight=(
+ "1 2 alias" # ls
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-in-cmdsubst.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-in-cmdsubst.zsh
new file mode 100644
index 0000000..b3cf777
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-in-cmdsubst.zsh
@@ -0,0 +1,43 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2019 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+alias p='print -r --'
+
+BUFFER=$'s=$(p foo)'
+
+expected_region_highlight=(
+ '1 10 assign' # s=$(p foo)
+ '3 10 default' # $(p foo)
+ '3 10 command-substitution-unquoted' # $(p foo)
+ '3 4 command-substitution-delimiter-unquoted' # $(
+ '5 5 alias' # p
+ '7 9 default' # foo
+ '10 10 command-substitution-delimiter-unquoted' # )
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-loop.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-loop.zsh
new file mode 100644
index 0000000..83992db
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-loop.zsh
@@ -0,0 +1,44 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+function b() {} # beware of ALIAS_FUNC_DEF
+alias a=b b=c c=b
+
+BUFFER='a foo; :'
+
+expected_region_highlight=(
+ # An alias is ineligible for expansion whilst it's being expanded.
+ # Therefore, the "b" in the expansion of the alias "c" is not considered
+ # as an alias.
+ '1 1 alias' # a
+ '3 5 default' # foo
+ '6 6 commandseparator' # ;
+ '8 8 builtin' # :
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-loop2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-loop2.zsh
new file mode 100644
index 0000000..29e04ac
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-loop2.zsh
@@ -0,0 +1,35 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+alias ls="ls"
+BUFFER="ls"
+
+expected_region_highlight+=(
+ "1 2 alias" # ls
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-nested-precommand.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-nested-precommand.zsh
new file mode 100644
index 0000000..6d4172b
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-nested-precommand.zsh
@@ -0,0 +1,43 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+alias a=b b=sudo
+sudo(){}
+
+BUFFER='a -u phy1729 echo; :'
+
+expected_region_highlight=(
+ '1 1 alias' # a
+ '3 4 single-hyphen-option' # -u
+ '6 12 default' # phy1729
+ '14 17 builtin' # echo
+ '18 18 commandseparator' # ;
+ '20 20 builtin' # :
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-nested.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-nested.zsh
new file mode 100644
index 0000000..b24b496
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-nested.zsh
@@ -0,0 +1,40 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+alias a=b b=:
+
+BUFFER='a foo; :'
+
+expected_region_highlight=(
+ '1 1 alias' # a
+ '3 5 default' # foo
+ '6 6 commandseparator' # ;
+ '8 8 builtin' # :
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-parameter.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-parameter.zsh
new file mode 100644
index 0000000..21bc6b3
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-parameter.zsh
@@ -0,0 +1,38 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+alias '$foo'='echo alias'
+local foo; foo=(echo param)
+
+BUFFER='$foo'
+
+expected_region_highlight=(
+ '1 4 alias' # $foo
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-precommand-option-argument1.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-precommand-option-argument1.zsh
new file mode 100644
index 0000000..2d1f35c
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-precommand-option-argument1.zsh
@@ -0,0 +1,42 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+# See also param-precommand-option-argument1.zsh
+alias sudo_u='sudo -u'
+sudo(){}
+
+BUFFER='sudo_u phy1729 echo foo'
+
+expected_region_highlight=(
+ '1 6 alias' # sudo_u
+ '8 14 default' # phy1729
+ '17 19 command "issue #540"' # echo (not builtin)
+ '21 23 default' # foo
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-precommand-option-argument2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-precommand-option-argument2.zsh
new file mode 100644
index 0000000..fbc6eec
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-precommand-option-argument2.zsh
@@ -0,0 +1,42 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+alias sudo_b='sudo -b'
+alias sudo_b_u='sudo_b -u'
+sudo(){}
+
+BUFFER='sudo_b_u phy1729 echo foo'
+
+expected_region_highlight=(
+ '1 8 alias' # sudo_b_u
+ '10 16 default' # phy1729
+ '18 21 command "issue #540"' # echo (not builtin)
+ '23 25 default' # foo
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-precommand-option-argument3.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-precommand-option-argument3.zsh
new file mode 100644
index 0000000..373f12b
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-precommand-option-argument3.zsh
@@ -0,0 +1,42 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2019 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+# See also param-precommand-option-argument3.zsh
+alias sudo_u='sudo -u'
+sudo(){}
+
+BUFFER='sudo_u phy1729 ls foo'
+
+expected_region_highlight=(
+ '1 6 alias' # sudo_u
+ '8 14 default' # phy1729
+ '16 17 command' # ls
+ '19 21 default' # foo
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-precommand-option-argument4.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-precommand-option-argument4.zsh
new file mode 100644
index 0000000..d47dccb
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-precommand-option-argument4.zsh
@@ -0,0 +1,42 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+alias sudo_b='sudo -b'
+alias sudo_b_u='sudo_b -u'
+sudo(){}
+
+BUFFER='sudo_b_u phy1729 ls foo'
+
+expected_region_highlight=(
+ '1 8 alias' # sudo_b_u
+ '10 16 default' # phy1729
+ '18 19 command' # ls
+ '21 23 default' # foo
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-quoted.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-quoted.zsh
new file mode 100644
index 0000000..e42e2f0
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-quoted.zsh
@@ -0,0 +1,39 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) YYYY zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+alias a=: ls='ls -l'
+BUFFER='"a" foo; \ls'
+
+expected_region_highlight=(
+ '1 3 unknown-token' # "a"
+ '5 7 default' # foo
+ '8 8 commandseparator' # ;
+ '10 12 command' # \ls
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-redirect.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-redirect.zsh
new file mode 100644
index 0000000..acc3dcb
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-redirect.zsh
@@ -0,0 +1,38 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+alias x=\>
+BUFFER='x foo echo bar'
+
+expected_region_highlight=(
+ '1 1 alias' # x
+ '3 5 default' # foo
+ '7 10 builtin' # echo
+ '12 14 default' # bar
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-reuse1.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-reuse1.zsh
new file mode 100644
index 0000000..1fd61a0
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-reuse1.zsh
@@ -0,0 +1,39 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+alias a=: b='a | a'
+
+BUFFER='b | b'
+
+expected_region_highlight=(
+ '1 1 alias' # b
+ '3 3 commandseparator' # |
+ '5 5 alias' # b
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-reuse2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-reuse2.zsh
new file mode 100644
index 0000000..37251fb
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-reuse2.zsh
@@ -0,0 +1,39 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+alias a=: b='a && a'
+
+BUFFER='b && b'
+
+expected_region_highlight=(
+ '1 1 alias' # b
+ '3 4 commandseparator' # &&
+ '6 6 alias' # b
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-reuse3.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-reuse3.zsh
new file mode 100644
index 0000000..5d7150a
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-reuse3.zsh
@@ -0,0 +1,39 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+alias a=: b='a; a'
+
+BUFFER='b; b'
+
+expected_region_highlight=(
+ '1 1 alias' # b
+ '2 2 commandseparator' # ;
+ '4 4 alias' # b
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-reuse4.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-reuse4.zsh
new file mode 100644
index 0000000..7ad7038
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-reuse4.zsh
@@ -0,0 +1,42 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+alias a=: b='a $(a)'
+
+BUFFER='b $(b)'
+
+expected_region_highlight=(
+ '1 1 alias' # b
+ '3 6 default' # $(b)
+ '3 6 command-substitution-unquoted' # $(b)
+ '3 4 command-substitution-delimiter-unquoted' # $(
+ '5 5 alias' # b
+ '6 6 command-substitution-delimiter-unquoted' # )
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-reuse5.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-reuse5.zsh
new file mode 100644
index 0000000..881401b
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-reuse5.zsh
@@ -0,0 +1,43 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+alias a=: b='a < <(a)'
+
+BUFFER='b < <(b)'
+
+expected_region_highlight=(
+ '1 1 alias' # b
+ '3 3 redirection' # <
+ '5 8 default' # <(b)
+ '5 8 process-substitution' # <(b)
+ '5 6 process-substitution-delimiter' # <(
+ '7 7 alias' # b
+ '8 8 process-substitution-delimiter' # )
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-self.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-self.zsh
new file mode 100644
index 0000000..c6f12b1
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-self.zsh
@@ -0,0 +1,38 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+alias echo='echo foo'
+
+BUFFER='echo bar'
+
+expected_region_highlight=(
+ '1 4 alias' # echo
+ '6 8 default' # bar
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-self2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-self2.zsh
new file mode 100644
index 0000000..fd6ae03
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-self2.zsh
@@ -0,0 +1,37 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+alias cat='cat | cat'
+
+BUFFER='cat'
+
+expected_region_highlight=(
+ '1 3 alias' # cat
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-to-dir.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-to-dir.zsh
new file mode 100644
index 0000000..30390d4
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-to-dir.zsh
@@ -0,0 +1,36 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+alias x=/
+BUFFER=$'x'
+
+expected_region_highlight=(
+ '1 1 unknown-token' # x (/)
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-to-dir1b.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-to-dir1b.zsh
new file mode 100644
index 0000000..62ec521
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-to-dir1b.zsh
@@ -0,0 +1,37 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+setopt autocd
+alias x=/
+BUFFER=$'x'
+
+expected_region_highlight=(
+ '1 1 alias' # x
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-unknown-token1.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-unknown-token1.zsh
new file mode 100644
index 0000000..9c996bf
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-unknown-token1.zsh
@@ -0,0 +1,37 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2019 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+alias a=b b=foo
+
+BUFFER='a '
+
+expected_region_highlight=(
+ '1 1 unknown-token' # a
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-unknown-token2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-unknown-token2.zsh
new file mode 100644
index 0000000..ab9facd
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias-unknown-token2.zsh
@@ -0,0 +1,37 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2019 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+alias a='() { ls "$@" ; foo }'
+
+BUFFER='a '
+
+expected_region_highlight=(
+ '1 1 unknown-token' # a
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias.zsh
new file mode 100644
index 0000000..4cafa80
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/alias.zsh
@@ -0,0 +1,53 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+alias alias1="ls"
+alias -s alias2="echo"
+function alias1() {} # to check that it's highlighted as an alias, not as a function
+
+BUFFER='x.alias2; alias1; alias2'
+
+# Set expected_region_highlight as a function of zsh version.
+#
+# Highlight of suffix alias requires zsh-5.1.1 or newer; see issue #126,
+# and commit 36403 to zsh itself. Therefore, check if the requisite zsh
+# functionality is present, and skip verifying suffix-alias highlighting
+# if it isn't.
+expected_region_highlight=()
+if zmodload -e zsh/parameter || [[ "$(type -w x.alias2)" == *suffix* ]]; then
+ expected_region_highlight+=(
+ "1 8 suffix-alias" # x.alias2
+ )
+fi
+expected_region_highlight+=(
+ "9 9 commandseparator" # ;
+ "11 16 alias" # alias1
+ "17 17 commandseparator" # ;
+ "19 24 unknown-token" # alias2
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/always1.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/always1.zsh
new file mode 100644
index 0000000..ae40a72
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/always1.zsh
@@ -0,0 +1,41 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='{ ls } always { pwd }'
+
+expected_region_highlight=(
+ '1 1 reserved-word' # {
+ '3 4 command' # ls
+ '6 6 reserved-word' # }
+ '8 13 reserved-word' # always
+ '15 15 reserved-word' # {
+ '17 19 builtin' # pwd
+ '21 21 reserved-word' # }
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/always2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/always2.zsh
new file mode 100644
index 0000000..991137c
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/always2.zsh
@@ -0,0 +1,43 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'{\nls\n} always { pwd }'
+
+expected_region_highlight=(
+ '1 1 reserved-word' # {
+ '2 2 commandseparator' # \n
+ '3 4 command' # ls
+ '5 5 commandseparator' # \n
+ '6 6 reserved-word' # }
+ '8 13 reserved-word' # always
+ '15 15 reserved-word' # {
+ '17 19 builtin' # pwd
+ '21 21 reserved-word' # }
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/always3.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/always3.zsh
new file mode 100644
index 0000000..d41beeb
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/always3.zsh
@@ -0,0 +1,43 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+setopt ignorebraces
+BUFFER='echo { foo } always { bar }'
+
+expected_region_highlight=(
+ '1 4 builtin' # echo
+ '6 6 default' # {
+ '8 10 default' # foo
+ '12 12 default' # }
+ '14 19 default' # always
+ '21 21 default' # {
+ '23 25 default' # bar
+ '27 27 default' # }
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/anonymous-function.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/anonymous-function.zsh
new file mode 100644
index 0000000..9d67fb1
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/anonymous-function.zsh
@@ -0,0 +1,44 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='() echo hello; () { echo world } "argument"'
+
+expected_region_highlight=(
+ "1 2 reserved-word" # ()
+ "4 7 builtin" # echo
+ "9 13 default" # hello
+ "14 14 commandseparator" # ;
+ "16 17 reserved-word" # ()
+ "19 19 reserved-word" # {
+ "21 24 builtin" # echo
+ "26 30 default" # world
+ "32 32 reserved-word" # }
+ "34 43 default" # "argument"
+ "34 43 double-quoted-argument" # "argument"
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arg0-colon.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arg0-colon.zsh
new file mode 100644
index 0000000..8955bd2
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arg0-colon.zsh
@@ -0,0 +1,35 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=''\''x: /'
+
+expected_region_highlight=(
+ '1 5 unknown-token' # \'x: /
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arith-cmdsubst-mess.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arith-cmdsubst-mess.zsh
new file mode 100644
index 0000000..82268ac
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arith-cmdsubst-mess.zsh
@@ -0,0 +1,46 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$': $((ls); (ls))'
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 15 default' # $((ls); (ls))
+ '3 15 command-substitution-unquoted' # $((ls); (ls))
+ '3 4 command-substitution-delimiter-unquoted' # $(
+ '5 5 reserved-word' # (
+ '6 7 command' # ls
+ '8 8 reserved-word' # )
+ '9 9 commandseparator' # ;
+ '11 11 reserved-word' # (
+ '12 13 command' # ls
+ '14 14 reserved-word' # )
+ '15 15 command-substitution-delimiter-unquoted' # )
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arith1.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arith1.zsh
new file mode 100644
index 0000000..0462f73
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arith1.zsh
@@ -0,0 +1,37 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$': $(( 6 * 9 ))'
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 14 default' # $(( 6 * 9 ))
+ '3 14 arithmetic-expansion' # $(( 6 * 9 ))
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arith2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arith2.zsh
new file mode 100644
index 0000000..af981d7
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arith2.zsh
@@ -0,0 +1,38 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$': "$(( 6 * 9 ))"'
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 16 default' # "$(( 6 * 9 ))"
+ '3 16 double-quoted-argument' # "$(( 6 * 9 ))"
+ '4 15 arithmetic-expansion' # $(( 6 * 9 ))
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-command-substitution.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-command-substitution.zsh
new file mode 100644
index 0000000..07db0fb
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-command-substitution.zsh
@@ -0,0 +1,42 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$': $(( $(echo 2) + 2 ))'
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 22 default' # $(( $(echo 2) + 2 ))
+ '3 22 arithmetic-expansion' # $(( $(echo 2) + 2 ))
+ '7 15 command-substitution-quoted' # $(echo 2)
+ '7 8 command-substitution-delimiter-quoted' # $(
+ '9 12 builtin' # echo
+ '14 14 default' # 2
+ '15 15 command-substitution-delimiter' # )
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-doubled-parens.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-doubled-parens.zsh
new file mode 100644
index 0000000..d582d67
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-doubled-parens.zsh
@@ -0,0 +1,37 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$': $(( ((42)) ))'
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 15 default' # $(( ((42)) ))
+ '3 15 arithmetic-expansion' # $(( ((42)) ))
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-empty.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-empty.zsh
new file mode 100644
index 0000000..bd75996
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-empty.zsh
@@ -0,0 +1,39 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$': "foo"$(())"bar"'
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 17 default' # "foo"$(())"bar"
+ '3 7 double-quoted-argument' # "foo"
+ '8 12 arithmetic-expansion' # $(())
+ '13 17 double-quoted-argument' # "bar"
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-evaluation.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-evaluation.zsh
new file mode 100644
index 0000000..e0eb6e7
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-evaluation.zsh
@@ -0,0 +1,40 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+# Must be at command word, since the word following 'if' isn't currently considered
+# a command word (issue #207).
+#
+# An opening '((' without matching '))' is highlighted correctly under zsh-5.1.1-52-g4bed2cf
+# or newer, only (issue #188).
+BUFFER='(( x == 42 ))'
+
+expected_region_highlight=(
+ "1 2 reserved-word" # ((
+ "12 13 reserved-word" # ))
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-hist-expn.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-hist-expn.zsh
new file mode 100644
index 0000000..79af723
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-hist-expn.zsh
@@ -0,0 +1,38 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$': $(( \!\! ))'
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 11 default' # $(( !! ))
+ '3 11 arithmetic-expansion' # $(( !! ))
+ '7 8 history-expansion "issue #713"' # !!
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-invalid-chars.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-invalid-chars.zsh
new file mode 100644
index 0000000..9ace438
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-invalid-chars.zsh
@@ -0,0 +1,39 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$': $(( 0 * 1\'\'000 ))'
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 19 default' # $(( 0 * 1\'\'000 ))
+ '3 19 arithmetic-expansion' # $(( 0 * 1\'\'000 ))
+ '12 12 unknown-token' # \'
+ '13 13 unknown-token' # \'
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-multiplication.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-multiplication.zsh
new file mode 100644
index 0000000..65df0c9
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-multiplication.zsh
@@ -0,0 +1,39 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$': foo*$(( 42 * 1729 ))*bar'
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 26 default' # foo*$(( 42 * 1729 ))*bar
+ '6 6 globbing' # *
+ '7 22 arithmetic-expansion' # $(( 42 * 1729 ))
+ '23 23 globbing' # *
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-nested.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-nested.zsh
new file mode 100644
index 0000000..d734cd3
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-nested.zsh
@@ -0,0 +1,38 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$': $(( $(( 1 + 2 )) * 3 ))'
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 25 default' # $(( $(( 1 + 2 )) * 3 ))
+ '3 25 arithmetic-expansion' # $(( $(( 1 + 2 )) * 3 ))
+ '7 18 arithmetic-expansion' # $(( 1 + 2 ))
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-quoted.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-quoted.zsh
new file mode 100644
index 0000000..917ddf7
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-quoted.zsh
@@ -0,0 +1,38 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$': "$(( 1 + 1 ))"'
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 16 default' # "$(( 1 + 1 ))"
+ '3 16 double-quoted-argument' # "$(( 1 + 1 ))"
+ '4 15 arithmetic-expansion' # $(( 1 + 1 ))
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-unclosed.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-unclosed.zsh
new file mode 100644
index 0000000..aa4eac7
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-unclosed.zsh
@@ -0,0 +1,37 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$': $(( 1'
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 7 default' # $(( 1
+ '3 7 arithmetic-expansion' # $(( 1
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-unfinished.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-unfinished.zsh
new file mode 100644
index 0000000..916c3da
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/arithmetic-unfinished.zsh
@@ -0,0 +1,41 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$': $(( 1729 )'
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 12 default' # $(( 1729 )
+ '3 12 arithmetic-expansion' # $(( 1729 )
+)
+
+if [[ ${(z):-'$('} == '$( ' ]]; then # ignore zsh 5.0.8 bug
+ expected_region_highlight[2]='3 13 default' # $(( 1729 )
+fi
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/array-cmdsep1.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/array-cmdsep1.zsh
new file mode 100644
index 0000000..2fd55c0
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/array-cmdsep1.zsh
@@ -0,0 +1,45 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2019 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'a=( foo | bar )'
+bar(){}
+
+expected_region_highlight=(
+ '1 3 assign' # a=(
+ '3 3 reserved-word' # (
+ '5 7 default' # foo
+ '9 9 unknown-token' # |
+ # zsh reports a parse error at this point. Nevertheless, we test how we
+ # highlight the remainder of $BUFFER. Currently we recover by treating the pipe
+ # as a command separator. That's not the only reasonable behaviour, though; if
+ # we change the behaviour, we should adjust the following expectations accordingly.
+ '11 13 function' # bar
+ '15 15 unknown-token' # )
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/array-cmdsep2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/array-cmdsep2.zsh
new file mode 100644
index 0000000..0bda676
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/array-cmdsep2.zsh
@@ -0,0 +1,41 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2019 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'a=( foo ; bar )'
+
+expected_region_highlight=(
+ '1 3 assign' # a=(
+ '3 3 reserved-word' # (
+ '5 7 default' # foo
+ '9 9 unknown-token' # ; (not commandseparator; see highlighter source code)
+ '11 13 default' # bar
+ '15 15 assign' # )
+ '15 15 reserved-word' # )
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/array-cmdsep3.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/array-cmdsep3.zsh
new file mode 100644
index 0000000..b4b3687
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/array-cmdsep3.zsh
@@ -0,0 +1,41 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2019 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'a=( foo \n bar )'
+
+expected_region_highlight=(
+ '1 3 assign' # a=(
+ '3 3 reserved-word' # (
+ '5 7 default' # foo
+ '9 9 commandseparator' # \n
+ '11 13 default' # bar
+ '15 15 assign' # )
+ '15 15 reserved-word' # )
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-append.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-append.zsh
new file mode 100644
index 0000000..feb68e5
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-append.zsh
@@ -0,0 +1,39 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='a+=(lorem ipsum)'
+
+expected_region_highlight=(
+ "1 4 assign" # a+=(
+ "4 4 reserved-word" # (
+ "5 9 default" # lorem
+ "11 15 default" # ipsum
+ "16 16 assign" # )
+ "16 16 reserved-word" # )
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-argv.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-argv.zsh
new file mode 100644
index 0000000..ec5acc2
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-argv.zsh
@@ -0,0 +1,38 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+touch foo
+BUFFER='42=foo 43+=bar'
+
+expected_region_highlight=(
+ "1 6 assign" # 42=foo
+ "4 6 path" # foo
+ "8 14 assign" # 43+=bar
+ "12 14 default" # bar
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-array.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-array.zsh
new file mode 100644
index 0000000..ef0a666
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-array.zsh
@@ -0,0 +1,41 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='(A=(hello world))'
+
+expected_region_highlight=(
+ "1 1 reserved-word" # (
+ "2 4 assign" # A=(
+ "4 4 reserved-word" # (
+ "5 9 default" # hello
+ "11 15 default" # world
+ "16 16 assign" # )
+ "16 16 reserved-word" # )
+ "17 17 reserved-word" # )
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-array2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-array2.zsh
new file mode 100644
index 0000000..2d48721
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-array2.zsh
@@ -0,0 +1,40 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='A=(hello world) ls'
+
+expected_region_highlight=(
+ "1 3 assign" # A=(
+ "3 3 reserved-word" # (
+ "4 8 default" # hello
+ "10 14 default" # world
+ "15 15 assign" # )
+ "15 15 reserved-word" # )
+ "17 18 command" # ls
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-array3.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-array3.zsh
new file mode 100644
index 0000000..5eb645e
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-array3.zsh
@@ -0,0 +1,41 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='A=(hello world) b=42'
+
+expected_region_highlight=(
+ "1 3 assign" # A=(
+ "3 3 reserved-word" # (
+ "4 8 default" # hello
+ "10 14 default" # world
+ "15 15 assign" # )
+ "15 15 reserved-word" # )
+ "17 20 assign" # b=42
+ "19 20 default" # 42
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-invalid-command.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-invalid-command.zsh
new file mode 100644
index 0000000..557327e
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-invalid-command.zsh
@@ -0,0 +1,37 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'x=y nosuchcommand'
+
+expected_region_highlight=(
+ '1 3 assign' # x=y
+ '3 3 default' # y
+ '5 17 unknown-token' # nosuchcommand
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-not-array.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-not-array.zsh
new file mode 100644
index 0000000..651ab80
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-not-array.zsh
@@ -0,0 +1,36 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='a=foo( bar ) :'
+
+expected_region_highlight=(
+ '1 12 assign' # a=foo( bar )
+ '3 12 default' # foo( bar )
+ '14 14 builtin' # :
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-not-array2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-not-array2.zsh
new file mode 100644
index 0000000..dfda106
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-not-array2.zsh
@@ -0,0 +1,36 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='a=foo\( :'
+
+expected_region_highlight=(
+ '1 7 assign' # a=foo\(
+ '3 7 default' # foo\(
+ '9 9 builtin' # :
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-quoted-cmdsubst.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-quoted-cmdsubst.zsh
new file mode 100644
index 0000000..d4a62df
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-quoted-cmdsubst.zsh
@@ -0,0 +1,45 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'x="$(ls x y z)"'
+
+expected_region_highlight=(
+ '1 15 assign' # x="$(ls x y z)"
+ '3 15 default' # "$(ls x y z)"
+ '3 3 double-quoted-argument' # "
+ '15 15 double-quoted-argument' # "
+ '4 14 command-substitution-quoted' # $(ls x y z)
+ '4 5 command-substitution-delimiter-quoted' # $(
+ '6 7 command' # ls
+ '9 9 default' # x
+ '11 11 default' # y
+ '13 13 default' # z
+ '14 14 command-substitution-delimiter-quoted' # )
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-semicolon.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-semicolon.zsh
new file mode 100644
index 0000000..f748c94
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-semicolon.zsh
@@ -0,0 +1,39 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='A=1; echo hello world'
+
+expected_region_highlight=(
+ "1 3 assign" # A=1
+ "3 3 default" # 1
+ "4 4 commandseparator" # ;
+ "6 9 builtin" # echo
+ "11 15 default" # hello
+ "17 21 default" # world
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-subshell.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-subshell.zsh
new file mode 100644
index 0000000..2022889
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-subshell.zsh
@@ -0,0 +1,37 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='(A=1)'
+
+expected_region_highlight=(
+ "1 1 reserved-word" # (
+ "2 4 assign" # A=1
+ "4 4 default" # 1
+ "5 5 reserved-word" # )
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-value-quote1.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-value-quote1.zsh
new file mode 100644
index 0000000..b6d04fe
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-value-quote1.zsh
@@ -0,0 +1,37 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'s="foo\'bar"'
+
+expected_region_highlight=(
+ '1 11 assign' # s="foo'bar"
+ '3 11 default' # "foo'bar"
+ '3 11 double-quoted-argument' # "foo'bar"
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-value-quote2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-value-quote2.zsh
new file mode 100644
index 0000000..3c5f93b
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign-value-quote2.zsh
@@ -0,0 +1,37 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'s="foo \'\' bar"'
+
+expected_region_highlight=(
+ '1 14 assign' # s="foo '' bar"
+ '3 14 default' # "foo '' bar"
+ '3 14 double-quoted-argument' # "foo '' bar"
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign.zsh
new file mode 100644
index 0000000..c6e8532
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assign.zsh
@@ -0,0 +1,42 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='A=1 b=("foo" bar)'
+
+expected_region_highlight=(
+ "1 3 assign" # A=1
+ "3 3 default" # 1
+ "5 7 assign" # b=(
+ "7 7 reserved-word" # (
+ "8 12 default" # "foo"
+ "8 12 double-quoted-argument" # "foo"
+ "14 16 default" # bar
+ "17 17 assign" # )
+ "17 17 reserved-word" # )
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assignment-before-resword1.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assignment-before-resword1.zsh
new file mode 100644
index 0000000..b271d4a
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assignment-before-resword1.zsh
@@ -0,0 +1,40 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2017 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'foo=bar { :; }'
+
+expected_region_highlight=(
+ '1 7 assign' # foo=bar
+ '5 7 default' # bar
+ '9 9 unknown-token' # {
+ '11 11 builtin' # :
+ '12 12 commandseparator' # ;
+ '14 14 reserved-word' # }
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assignment-before-resword2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assignment-before-resword2.zsh
new file mode 100644
index 0000000..247e41e
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assignment-before-resword2.zsh
@@ -0,0 +1,40 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2017 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'foo=bar ( :; )'
+
+expected_region_highlight=(
+ '1 7 assign' # foo=bar
+ '5 7 default' # bar
+ '9 9 unknown-token' # (
+ '11 11 builtin' # :
+ '12 12 commandseparator' # ;
+ '14 14 unknown-token' # )
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assignment-before-resword3.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assignment-before-resword3.zsh
new file mode 100644
index 0000000..5204189
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assignment-before-resword3.zsh
@@ -0,0 +1,37 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2017 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'foo=bar (( foo ))'
+
+expected_region_highlight=(
+ '1 7 assign' # foo=bar
+ '5 7 default' # bar
+ '9 17 unknown-token' # (( foo ))
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assignment-before-resword4.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assignment-before-resword4.zsh
new file mode 100644
index 0000000..cc3d523
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assignment-before-resword4.zsh
@@ -0,0 +1,40 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2017 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'foo=bar [[ -n foo ]]'
+
+expected_region_highlight=(
+ '1 7 assign' # foo=bar
+ '5 7 default' # bar
+ '9 10 unknown-token' # [[
+ '12 13 single-hyphen-option' # -n
+ '15 17 default' # foo
+ '19 20 reserved-word' # ]]
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assignment-before-resword5.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assignment-before-resword5.zsh
new file mode 100644
index 0000000..33f1ed1
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assignment-before-resword5.zsh
@@ -0,0 +1,38 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2017 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'foo=bar \! :'
+
+expected_region_highlight=(
+ '1 7 assign' # foo=bar
+ '5 7 default' # bar
+ '9 9 unknown-token' # \!
+ '11 11 builtin' # :
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assignment-quoted.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assignment-quoted.zsh
new file mode 100644
index 0000000..18638ad
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/assignment-quoted.zsh
@@ -0,0 +1,37 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'1="foo"'
+
+expected_region_highlight=(
+ '1 7 assign' # 1="foo"
+ '3 7 default' # "foo"
+ '3 7 double-quoted-argument' # "foo"
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/back-quoted-argument.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/back-quoted-argument.zsh
new file mode 100644
index 0000000..d504a2c
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/back-quoted-argument.zsh
@@ -0,0 +1,58 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='echo `echo \`42\`` "is `echo equal` to" `echo 6 times 9'
+
+expected_region_highlight=(
+ "1 4 builtin" # echo
+ "6 18 default" # `echo \`42\``
+ "6 18 back-quoted-argument" # `echo \`42\``
+ "6 6 back-quoted-argument-delimiter" # `
+ "7 10 builtin" # echo
+ "12 17 default" # \`42\`
+ "12 17 back-quoted-argument" # \`42\`
+ "12 13 back-quoted-argument-delimiter" # \`
+ "14 15 unknown-token" # 42
+ "16 17 back-quoted-argument-delimiter" # \`
+ "18 18 back-quoted-argument-delimiter" # `
+ "20 39 default" # "is `echo equal` to"
+ "20 39 double-quoted-argument" # "is `echo equal` to"
+ "24 35 back-quoted-argument" # `echo equal`
+ "24 24 back-quoted-argument-delimiter" # `
+ "25 28 builtin" # echo
+ "30 34 default" # equal
+ "35 35 back-quoted-argument-delimiter" # `
+ "41 55 default" # `echo 6 times 9
+ "41 55 back-quoted-argument-unclosed" # `echo 6 times 9
+ "41 41 back-quoted-argument-delimiter" # `
+ "42 45 builtin" # echo
+ "47 47 default" # 6
+ "49 53 default" # times
+ "55 55 default" # 9
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/back-quoted-open.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/back-quoted-open.zsh
new file mode 100644
index 0000000..f188d81
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/back-quoted-open.zsh
@@ -0,0 +1,41 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+touch foo
+BUFFER=$': `ls fo'
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 8 default' # `ls fo
+ '3 8 back-quoted-argument-unclosed' # `ls fo
+ '3 3 back-quoted-argument-delimiter' # `
+ '4 5 command' # ls
+ '7 8 path_prefix' # fo
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/backslash-continuation.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/backslash-continuation.zsh
new file mode 100644
index 0000000..ebcf2e1
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/backslash-continuation.zsh
@@ -0,0 +1,35 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+PREBUFFER=$'echo \\\n'
+BUFFER='noglob'
+
+expected_region_highlight=(
+ "1 6 default" # 'noglob' highlighted as a string, not as a precomand
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/backslash-continuation2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/backslash-continuation2.zsh
new file mode 100644
index 0000000..9e2ca62
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/backslash-continuation2.zsh
@@ -0,0 +1,37 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'echo foo\\\nbar"baz"'
+
+expected_region_highlight=(
+ '1 4 builtin' # echo
+ '6 18 default "issue #705"' # foo\\\nbar"baz"
+ '14 18 double-quoted-argument "issue #705"' # "baz"
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/backslash-space.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/backslash-space.zsh
new file mode 100644
index 0000000..0d8a63c
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/backslash-space.zsh
@@ -0,0 +1,39 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'echo \\ \'foo\' ; ls'
+
+expected_region_highlight=(
+ '1 4 builtin' # echo
+ '6 12 default' # \ \'foo\'
+ '8 12 single-quoted-argument' # 'foo'
+ '14 14 commandseparator' # ;
+ '16 17 command' # ls
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/backslash.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/backslash.zsh
new file mode 100644
index 0000000..ea0977f
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/backslash.zsh
@@ -0,0 +1,34 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'\\'
+
+expected_region_highlight=(
+ '1 1 unknown-token' # \\
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/bang-assign-array.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/bang-assign-array.zsh
new file mode 100644
index 0000000..a54cf2d
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/bang-assign-array.zsh
@@ -0,0 +1,42 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'foo=(bar abaz) \! ls'
+
+expected_region_highlight=(
+ '1 5 assign' # foo=(
+ '5 5 reserved-word' # (
+ '6 8 default' # bar
+ '10 13 default' # abaz
+ '14 14 assign' # )
+ '14 14 reserved-word' # )
+ '16 16 unknown-token' # \!
+ '18 19 command' # ls
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/bang-assign-scalar.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/bang-assign-scalar.zsh
new file mode 100644
index 0000000..e919050
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/bang-assign-scalar.zsh
@@ -0,0 +1,38 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'foo=bar \! ls'
+
+expected_region_highlight=(
+ '1 7 assign' # foo=bar
+ '5 7 default' # bar
+ '9 9 unknown-token' # \!
+ '11 12 command' # ls
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/bang-pipeline.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/bang-pipeline.zsh
new file mode 100644
index 0000000..fef25f1
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/bang-pipeline.zsh
@@ -0,0 +1,39 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'\! ls | \! ls'
+
+expected_region_highlight=(
+ '1 1 reserved-word' # \!
+ '3 4 command' # ls
+ '6 6 commandseparator' # |
+ '8 8 unknown-token' # \!
+ '10 11 command' # ls
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/block-assignment-no-command.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/block-assignment-no-command.zsh
new file mode 100644
index 0000000..ec52c98
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/block-assignment-no-command.zsh
@@ -0,0 +1,38 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2022 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'{ a=42 }'
+
+expected_region_highlight=(
+ '1 1 reserved-word' # {
+ '3 6 assign' # a=42
+ '5 6 default' # 42
+ '8 8 reserved word "issue #854"' # }
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/braces1.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/braces1.zsh
new file mode 100644
index 0000000..3c5b1f0
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/braces1.zsh
@@ -0,0 +1,41 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'() { echo }\n}'
+# no special setopts
+
+expected_region_highlight=(
+ '1 2 reserved-word' # ()
+ '4 4 reserved-word' # {
+ '6 9 builtin' # echo
+ '11 11 reserved-word' # }
+ '12 12 commandseparator' # \n
+ '13 13 unknown-token' # }
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/braces2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/braces2.zsh
new file mode 100644
index 0000000..a3ea7c9
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/braces2.zsh
@@ -0,0 +1,41 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'() { echo }\n}'
+setopt ignorebraces
+
+expected_region_highlight=(
+ '1 2 reserved-word' # ()
+ '4 4 reserved-word' # {
+ '6 9 builtin' # echo
+ '11 11 default' # }
+ '12 12 commandseparator' # \n
+ '13 13 reserved-word' # }
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-matching1.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-matching1.zsh
new file mode 100644
index 0000000..7cc6de5
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-matching1.zsh
@@ -0,0 +1,38 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='[[ -n foo ]]'
+
+expected_region_highlight=(
+ '1 2 reserved-word' # [[
+ '4 5 single-hyphen-option' # -n
+ '7 9 default' # foo
+ '11 12 reserved-word' # ]]
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-matching2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-matching2.zsh
new file mode 100644
index 0000000..19c7f0d
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-matching2.zsh
@@ -0,0 +1,38 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='[ -n foo ]'
+
+expected_region_highlight=(
+ '1 1 builtin' # [
+ '3 4 single-hyphen-option' # -n
+ '6 8 default' # foo
+ '10 10 builtin' # ]
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch1.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch1.zsh
new file mode 100644
index 0000000..5e6e80f
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch1.zsh
@@ -0,0 +1,39 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='() { echo foo )'
+
+expected_region_highlight=(
+ '1 2 reserved-word' # ()
+ '4 4 reserved-word' # {
+ '6 9 builtin' # echo
+ '11 13 default' # foo
+ '15 15 unknown-token' # )
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch10-if-negative.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch10-if-negative.zsh
new file mode 100644
index 0000000..9d0b53c
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch10-if-negative.zsh
@@ -0,0 +1,42 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2017 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='elif true; then echo two; fi'
+
+expected_region_highlight=(
+ '1 4 unknown-token' # elif
+ '6 9 builtin' # true
+ '10 10 commandseparator' # ;
+ '12 15 unknown-token' # then
+ '17 20 builtin' # echo
+ '22 24 default' # two
+ '25 25 commandseparator' # ;
+ '27 28 unknown-token' # fi
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch2.zsh
new file mode 100644
index 0000000..2d98ac2
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch2.zsh
@@ -0,0 +1,39 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='() ( echo foo }'
+
+expected_region_highlight=(
+ '1 2 reserved-word' # ()
+ '4 4 reserved-word' # (
+ '6 9 builtin' # echo
+ '11 13 default' # foo
+ '15 15 unknown-token' # }
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch3.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch3.zsh
new file mode 100644
index 0000000..e33040a
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch3.zsh
@@ -0,0 +1,36 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='echo )'
+
+expected_region_highlight=(
+ '1 4 builtin' # echo
+ '6 6 unknown-token' # )
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch4.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch4.zsh
new file mode 100644
index 0000000..a9b15dc
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch4.zsh
@@ -0,0 +1,36 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='echo }'
+
+expected_region_highlight=(
+ '1 4 builtin' # echo
+ '6 6 unknown-token' # }
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch5.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch5.zsh
new file mode 100644
index 0000000..21e8bb2
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch5.zsh
@@ -0,0 +1,37 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='echo { }'
+
+expected_region_highlight=(
+ '1 4 builtin' # echo
+ '6 6 default' # {
+ '8 8 unknown-token' # }
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch6.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch6.zsh
new file mode 100644
index 0000000..9df8388
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch6.zsh
@@ -0,0 +1,40 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='(repeat 1; do)'
+
+expected_region_highlight=(
+ '1 1 reserved-word' # (
+ '2 7 reserved-word' # repeat
+ '9 9 default' # 1
+ '10 10 commandseparator' # ;
+ '12 13 reserved-word' # do
+ '14 14 unknown-token' # )
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch7.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch7.zsh
new file mode 100644
index 0000000..1caa936
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch7.zsh
@@ -0,0 +1,45 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2012 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='for n in *; do echo $n; end'
+
+expected_region_highlight=(
+ '1 3 reserved-word' # for
+ '5 5 default' # n
+ '7 8 default' # in
+ '10 10 default' # *
+ '10 10 globbing' # *
+ '11 11 commandseparator' # ;
+ '13 14 reserved-word' # do
+ '16 19 builtin' # echo
+ '21 22 default' # $n
+ '23 23 commandseparator' # ;
+ '25 27 unknown-token' # end
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch8-if-positive.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch8-if-positive.zsh
new file mode 100644
index 0000000..d6838f0
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch8-if-positive.zsh
@@ -0,0 +1,53 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2017 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='if false; then echo one; elif true; then echo two; else echo three; fi'
+
+expected_region_highlight=(
+ '1 2 reserved-word' # if
+ '4 8 builtin' # false
+ '9 9 commandseparator' # ;
+ '11 14 reserved-word' # then
+ '16 19 builtin' # echo
+ '21 23 default' # one
+ '24 24 commandseparator' # ;
+ '26 29 reserved-word' # elif
+ '31 34 builtin' # true
+ '35 35 commandseparator' # ;
+ '37 40 reserved-word' # then
+ '42 45 builtin' # echo
+ '47 49 default' # two
+ '50 50 commandseparator' # ;
+ '52 55 reserved-word' # else
+ '57 60 builtin' # echo
+ '62 66 default' # three
+ '67 67 commandseparator' # ;
+ '69 70 reserved-word' # fi
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch8.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch8.zsh
new file mode 100644
index 0000000..07a42e3
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch8.zsh
@@ -0,0 +1,38 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='(ls&)'
+
+expected_region_highlight=(
+ '1 1 reserved-word' # (
+ '2 3 command' # ls
+ '4 4 commandseparator' # &
+ '5 5 reserved-word' # )
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch9-if-positive.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch9-if-positive.zsh
new file mode 100644
index 0000000..87c1ba7
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-mismatch9-if-positive.zsh
@@ -0,0 +1,42 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2017 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='if false; then echo one; fi'
+
+expected_region_highlight=(
+ '1 2 reserved-word' # if
+ '4 8 builtin' # false
+ '9 9 commandseparator' # ;
+ '11 14 reserved-word' # then
+ '16 19 builtin' # echo
+ '21 23 default' # one
+ '24 24 commandseparator' # ;
+ '26 27 reserved-word' # fi
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-premature-termination.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-premature-termination.zsh
new file mode 100644
index 0000000..fa813da
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/brackets-premature-termination.zsh
@@ -0,0 +1,40 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='[[ -n foo; echo ]]'
+
+expected_region_highlight=(
+ '1 2 reserved-word' # [[
+ '4 5 single-hyphen-option' # -n
+ '7 9 default' # foo
+ '10 10 unknown-token' # ;
+ '12 15 builtin' # echo
+ '17 18 default' # ]]
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/cdpath-abspath.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/cdpath-abspath.zsh
new file mode 100644
index 0000000..64707b2
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/cdpath-abspath.zsh
@@ -0,0 +1,38 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+cdpath=( $PWD )
+mkdir foo foo/bar
+
+BUFFER="/foo"
+
+expected_region_highlight=(
+ '1 4 unknown-token' # x (/)
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/cmdpos-elision-partial.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/cmdpos-elision-partial.zsh
new file mode 100644
index 0000000..6eda0d7
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/cmdpos-elision-partial.zsh
@@ -0,0 +1,44 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+# Test elision of some, but not all of the words
+# See issue #667 for the case of eliding all words
+local -a x; x=(sudo "")
+
+sudo(){}
+BUFFER=$'$x -u phy1729 ls'
+
+expected_region_highlight=(
+ '1 2 precommand' # $x
+ # The "" is elided. If it weren't elided, the «ls» would be highlighted as an ordinary argument.
+ '4 5 single-hyphen-option' # -u
+ '7 13 default' # phy1729
+ '15 16 command' # ls
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/command-substitution-adjacent.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/command-substitution-adjacent.zsh
new file mode 100644
index 0000000..3d5c0b9
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/command-substitution-adjacent.zsh
@@ -0,0 +1,45 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2019 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='echo "$(echo)$(echo)'
+
+expected_region_highlight=(
+ '1 4 builtin' # echo
+ '6 20 default' # "$(echo)$(echo)
+ '6 6 double-quoted-argument-unclosed' # "
+ '7 13 command-substitution-quoted' # $(echo)
+ '7 8 command-substitution-delimiter-quoted' # $(
+ '9 12 builtin' # echo
+ '13 13 command-substitution-delimiter-quoted' # )
+ '14 20 command-substitution-quoted' # $(echo)
+ '14 15 command-substitution-delimiter-quoted' # $(
+ '16 19 builtin' # echo
+ '20 20 command-substitution-delimiter-quoted' # )
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/command-substitution-in-assignment.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/command-substitution-in-assignment.zsh
new file mode 100644
index 0000000..fafda49
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/command-substitution-in-assignment.zsh
@@ -0,0 +1,42 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'foo=$(echo bar) :'
+
+expected_region_highlight=(
+ '1 15 assign' # foo=$(echo bar)
+ '5 15 default' # $(echo bar)
+ '5 15 command-substitution-unquoted' # $(echo bar)
+ '5 6 command-substitution-delimiter-unquoted' # $(
+ '7 10 builtin' # echo
+ '12 14 default' # bar
+ '15 15 command-substitution-delimiter-unquoted' # )
+ '17 17 builtin' # :
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/command-substitution-unclosed.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/command-substitution-unclosed.zsh
new file mode 100644
index 0000000..3229dfc
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/command-substitution-unclosed.zsh
@@ -0,0 +1,45 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$': foo$(echo bar'
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 15 default' # foo$(echo bar
+ '6 15 command-substitution-unquoted' # $(echo bar
+ '6 7 command-substitution-delimiter-unquoted' # $(
+ '8 11 builtin' # echo
+ '13 15 default' # bar
+)
+
+if [[ ${(z):-'$('} == '$( ' ]]; then # ignore zsh 5.0.8 bug
+ expected_region_highlight[2]='3 16 default' # foo$(echo bar
+ expected_region_highlight[3]='6 16 command-substitution-unquoted' # $(echo bar
+fi
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/commandseparator.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/commandseparator.zsh
new file mode 100644
index 0000000..f504847
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/commandseparator.zsh
@@ -0,0 +1,38 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=':; pwd &! ls'
+
+expected_region_highlight=(
+ "1 1 builtin" # :
+ "2 2 commandseparator" # ;
+ "4 6 builtin" # pwd
+ "8 9 commandseparator" # &!
+ "11 12 command" # ls
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/comment-followed.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/comment-followed.zsh
new file mode 100644
index 0000000..044f283
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/comment-followed.zsh
@@ -0,0 +1,39 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+# see alias-comment1.zsh
+setopt interactivecomments
+BUFFER=$'# foo\ntrue'
+
+expected_region_highlight=(
+ '1 5 comment' # # foo
+ '6 6 commandseparator' # \n
+ '7 10 builtin' # true
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/comment-leading.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/comment-leading.zsh
new file mode 100644
index 0000000..b4c9910
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/comment-leading.zsh
@@ -0,0 +1,36 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+setopt interactive_comments
+
+BUFFER='# echo foo'
+
+expected_region_highlight=(
+ "1 10 comment" # # echo foo
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/comment-off.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/comment-off.zsh
new file mode 100644
index 0000000..0381bdb
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/comment-off.zsh
@@ -0,0 +1,38 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+unsetopt interactive_comments
+
+BUFFER='# echo foo'
+
+expected_region_highlight=(
+ "1 1 unknown-token" # #
+ "3 6 default" # " echo foo"
+ "8 10 default" # " echo foo"
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/comments.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/comments.zsh
new file mode 100644
index 0000000..f3cc57e
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/comments.zsh
@@ -0,0 +1,39 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+setopt interactive_comments
+
+BUFFER='echo "foo #bar" #baz # quux'
+
+expected_region_highlight=(
+ "1 4 builtin" # echo
+ "6 15 default" # "foo #bar"
+ "6 15 double-quoted-argument" # "foo #bar"
+ "17 27 comment" # #baz # quux
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/commmand-parameter.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/commmand-parameter.zsh
new file mode 100644
index 0000000..48d20ba
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/commmand-parameter.zsh
@@ -0,0 +1,45 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+local x=/usr/bin/env
+local y=sudo
+local -a z; z=(zsh -f)
+sudo(){}
+
+BUFFER='$x "argument"; $y; $z'
+
+expected_region_highlight=(
+ "1 2 command" # $x
+ "4 13 default" # "argument"
+ "4 13 double-quoted-argument" # "argument"
+ "14 14 commandseparator" # ;
+ "16 17 precommand" # $y (sudo)
+ "18 18 unknown-token" # ;
+ "20 21 command" # $z - 'zsh' being the command
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/control-flow.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/control-flow.zsh
new file mode 100644
index 0000000..a610bdc
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/control-flow.zsh
@@ -0,0 +1,57 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='while if echo Hello; then ls /; else ls; fi; do stat "x"; done; repeat 10 ls'
+
+expected_region_highlight+=(
+ "1 5 reserved-word" # while
+ "7 8 reserved-word" # if
+ "10 13 builtin" # echo
+ "15 19 default" # Hello
+ "20 20 commandseparator" # ;
+ "22 25 reserved-word" # then
+ "27 28 command" # ls
+ "30 30 path" # /
+ "31 31 commandseparator" # ;
+ "33 36 reserved-word" # else
+ "38 39 command" # ls
+ "40 40 commandseparator" # ;
+ "42 43 reserved-word" # fi
+ "44 44 commandseparator" # ;
+ "46 47 reserved-word" # do
+ "49 52 command" # stat
+ "54 56 default" # "x"
+ "54 56 double-quoted-argument" # "x"
+ "57 57 commandseparator" # ;
+ "59 62 reserved-word" # done
+ "63 63 commandseparator" # ;
+ "65 70 reserved-word" # repeat
+ "72 73 default" # 10
+ "75 76 command" # ls
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/control-flow2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/control-flow2.zsh
new file mode 100644
index 0000000..acf99e1
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/control-flow2.zsh
@@ -0,0 +1,40 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='repeat 42; do ls; done'
+
+expected_region_highlight+=(
+ "1 6 reserved-word" # repeat
+ "8 9 default" # 42
+ "10 10 commandseparator" # ;
+ "12 13 reserved-word" # do
+ "15 16 command" # ls
+ "17 17 commandseparator" # ;
+ "19 22 reserved-word" # done
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/control-flow3.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/control-flow3.zsh
new file mode 100644
index 0000000..58f507f
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/control-flow3.zsh
@@ -0,0 +1,39 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='repeat 42; ls; pwd'
+
+expected_region_highlight+=(
+ "1 6 reserved-word" # repeat
+ "8 9 default" # 42
+ "10 10 commandseparator" # ;
+ "12 13 command" # ls
+ "14 14 commandseparator" # ;
+ "16 18 builtin" # pwd
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/cthulhu.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/cthulhu.zsh
new file mode 100644
index 0000000..c8119a8
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/cthulhu.zsh
@@ -0,0 +1,70 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+# 0000000 0 01111111111222222 222233333 3 333344 4 4 444444555555555 5 6 6666 6 6 6667777777777888 8 8 88888999 9 9999 9 9 00 00 0000001111
+# 1234567 8 90123456789012345 678901234 5 678901 2 3 456789012345678 9 0 1234 5 6 7890123456789012 3 4 56789012 3 4567 8 9 01 23 4567890123
+BUFFER=$'echo Ph\\\'ng`echo lui "mg"\\`echo lw\\\'nafh \\\\\\`echo Cthu"lhu\\\\\\` R\\\\\'ly$(echo eh wag\\\\\\`echo h\\\'nag\\\\\\`\'l\' fht)agn`'
+
+expected_region_highlight=(
+ '1 4 builtin' # echo
+ '6 113 default' # Ph\'ng`echo lui "mg"\`echo lw\'nafh \\\`echo Cthu"lhu\\\` R\\'ly$(echo eh wag\\\`echo h\'nag\\\`'l' fht)agn`
+ '12 113 back-quoted-argument' # `echo lui "mg"\`echo lw\'nafh \\\`echo Cthu"lhu\\\` R\\'ly$(echo eh wag\\\`echo h\'nag\\\`'l' fht)agn`
+ '12 12 back-quoted-argument-delimiter' # `
+ '13 16 builtin' # echo
+ '18 20 default' # lui
+ '22 112 default' # "mg"\`echo lw\'nafh \\\`echo Cthu"lhu\\\` R\\'ly$(echo eh wag\\\`echo h\'nag\\\`'l' fht)agn
+ '22 25 double-quoted-argument' # "mg"
+ '26 112 back-quoted-argument-unclosed' # \`echo lw\'nafh \\\`echo Cthu"lhu\\\` R\\'ly$(echo eh wag\\\`echo h\'nag\\\`'l' fht)agn
+ '26 27 back-quoted-argument-delimiter' # \`
+ '28 31 builtin' # echo
+ '33 40 default' # lw\'nafh
+ '42 62 default' # \\\`echo Cthu"lhu\\\`
+ '42 62 back-quoted-argument' # \\\`echo Cthu"lhu\\\`
+ '42 45 back-quoted-argument-delimiter' # \\\`
+ '46 49 builtin' # echo
+ '51 58 default' # Cthu"lhu
+ '55 58 double-quoted-argument-unclosed' # "lhu
+ '59 62 back-quoted-argument-delimiter' # \\\`
+ '64 112 default' # R\\'ly$(echo eh wag\\\`echo h\'nag\\\`'l' fht)agn
+ '70 109 command-substitution-unquoted' # $(echo eh wag\\\`echo h\'nag\\\`'l' fht)
+ '70 71 command-substitution-delimiter-unquoted' # $(
+ '72 75 builtin' # echo
+ '77 78 default' # eh
+ '80 104 default' # wag\\\`echo h\'nag\\\`'l'
+ '83 101 back-quoted-argument' # \\\`echo h\'nag\\\`
+ '83 86 back-quoted-argument-delimiter' # \\\`
+ '87 90 builtin' # echo
+ '92 97 default' # h\'nag
+ '98 101 back-quoted-argument-delimiter' # \\\`
+ '102 104 single-quoted-argument' # 'l'
+ '106 108 default' # fht
+ '109 109 command-substitution-delimiter-unquoted' # )
+ '113 113 unknown-token' # `
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/dinbrack1.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/dinbrack1.zsh
new file mode 100644
index 0000000..e2279d6
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/dinbrack1.zsh
@@ -0,0 +1,41 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'[[ foo && bar || baz ]]'
+
+expected_region_highlight=(
+ '1 2 reserved-word' # [[
+ '4 6 default' # foo
+ '8 9 default' # &&
+ '11 13 default' # bar
+ '15 16 default' # ||
+ '18 20 default' # baz
+ '22 23 reserved-word' # ]]
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/dirs_blacklist.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/dirs_blacklist.zsh
new file mode 100644
index 0000000..2d0222f
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/dirs_blacklist.zsh
@@ -0,0 +1,40 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+mkdir foo
+touch foo/bar
+BUFFER=": foo/bar $PWD/foo foo/b"
+ZSH_HIGHLIGHT_DIRS_BLACKLIST=($PWD/foo $PWD/bar)
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 9 default' # foo/bar
+ "11 $(( 14 + $#PWD )) default" # $PWD/foo
+ "$(( 16 + $#PWD )) $(( 20 + $#PWD )) default" # foo/b
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/dollar-dollar.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/dollar-dollar.zsh
new file mode 100644
index 0000000..e3f387c
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/dollar-dollar.zsh
@@ -0,0 +1,39 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=': "$$ $$foo"'
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 12 default' # "$$ $$foo"
+ '3 12 double-quoted-argument' # "$$ $$foo"
+ '4 5 dollar-double-quoted-argument' # $$
+ '7 8 dollar-double-quoted-argument' # $$
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/dollar-noise.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/dollar-noise.zsh
new file mode 100644
index 0000000..9bb11bd
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/dollar-noise.zsh
@@ -0,0 +1,42 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=': "$- $# $* $@ $?"'
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 18 default' # "$- $# $* $@ $?"
+ '3 18 double-quoted-argument' # "$- $# $* $@ $?"
+ '4 5 dollar-double-quoted-argument' # $-
+ '7 8 dollar-double-quoted-argument' # $#
+ '10 11 dollar-double-quoted-argument' # $*
+ '13 14 dollar-double-quoted-argument' # $@
+ '16 17 dollar-double-quoted-argument' # $?
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/dollar-paren.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/dollar-paren.zsh
new file mode 100644
index 0000000..2bbcef1
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/dollar-paren.zsh
@@ -0,0 +1,49 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=': "$(:)" "foo$(:)bar'
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 8 default' # "$(:)"
+ '3 3 double-quoted-argument' # "$(:)"
+ '8 8 double-quoted-argument' # "$(:)"
+ '4 7 command-substitution-quoted' # $(:)
+ '4 5 command-substitution-delimiter-quoted' # $(
+ '6 6 builtin' # :
+ '7 7 command-substitution-delimiter-quoted' # )
+ '10 20 default' # "foo$(:)bar
+ '10 13 double-quoted-argument-unclosed' # "foo
+ '18 20 double-quoted-argument-unclosed' # bar
+ '14 17 command-substitution-quoted' # $(:)
+ '14 15 command-substitution-delimiter-quoted' # $(
+ '16 16 builtin' # :
+ '17 17 command-substitution-delimiter-quoted' # )
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/dollar-quoted.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/dollar-quoted.zsh
new file mode 100644
index 0000000..081a365
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/dollar-quoted.zsh
@@ -0,0 +1,38 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=": \$'*' 'foo'"
+
+expected_region_highlight=(
+ "1 1 builtin" # :
+ "3 6 default" # $'*'
+ "3 6 dollar-quoted-argument" # $'*' - not a glob
+ "8 12 default" # 'foo'
+ "8 12 single-quoted-argument" # 'foo'
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/dollar-quoted2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/dollar-quoted2.zsh
new file mode 100644
index 0000000..ed7428b
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/dollar-quoted2.zsh
@@ -0,0 +1,39 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=": \$'foo\xbar\udeadbeef\uzzzz'"
+
+expected_region_highlight=(
+ "1 1 builtin" # :
+ "3 29 default" # $'foo\xbar\udeadbeef\uzzzz'
+ "3 29 dollar-quoted-argument" # $'foo\xbar\udeadbeef\uzzzz'
+ "8 11 back-dollar-quoted-argument" # \xba
+ "13 18 back-dollar-quoted-argument" # \dead
+ "23 24 unknown-token" # \u
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/dollar-quoted3.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/dollar-quoted3.zsh
new file mode 100644
index 0000000..365f351
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/dollar-quoted3.zsh
@@ -0,0 +1,39 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+# Similar to double-quoted2.zsh
+# This test checks that the '1' gets highlighted correctly. Do not append to the BUFFER.
+BUFFER=": \$'\xa1"
+
+expected_region_highlight=(
+ "1 1 builtin" # :
+ "3 8 default" # $'\xa1
+ "3 8 dollar-quoted-argument-unclosed" # $'\xa1
+ "5 8 back-dollar-quoted-argument" # \xa1
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/double-hyphen-option.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/double-hyphen-option.zsh
new file mode 100644
index 0000000..e5cacd3
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/double-hyphen-option.zsh
@@ -0,0 +1,35 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='hello --world'
+
+expected_region_highlight=(
+ "1 5 unknown-token" # hello
+ "7 13 double-hyphen-option" # --world
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/double-quoted.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/double-quoted.zsh
new file mode 100644
index 0000000..0a4336c
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/double-quoted.zsh
@@ -0,0 +1,42 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=': "foo$bar:\`:\":\$:'
+BUFFER+=\\\\:\"
+
+expected_region_highlight=(
+ "1 1 builtin" # :
+ "3 24 default" # "foo$bar:\`:\":\$:\\:"
+ "3 24 double-quoted-argument" # "foo$bar:\`:\":\$:\\:"
+ "7 10 dollar-double-quoted-argument" # $bar
+ "12 13 back-double-quoted-argument" # \`
+ "15 16 back-double-quoted-argument" # \$
+ "18 19 back-double-quoted-argument" # \"
+ "21 22 back-double-quoted-argument" # \\
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/double-quoted2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/double-quoted2.zsh
new file mode 100644
index 0000000..c400e54
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/double-quoted2.zsh
@@ -0,0 +1,39 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+# Similar to dollar-quoted3.zsh
+# This test checks that the 'r' gets highlighted correctly. Do not append to the BUFFER.
+BUFFER=': "foo$bar'
+
+expected_region_highlight=(
+ "1 1 builtin" # :
+ "3 10 default" # "foo$bar
+ "3 10 double-quoted-argument-unclosed" # "foo$bar
+ "7 10 dollar-double-quoted-argument" # $bar
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/double-quoted3.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/double-quoted3.zsh
new file mode 100644
index 0000000..86e3ced
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/double-quoted3.zsh
@@ -0,0 +1,42 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=': "$" "$42foo"'
+BUFFER+=\ \"\\\'\\x\"
+
+expected_region_highlight=(
+ "1 1 builtin" # :
+ "3 5 default" # "$"
+ "3 5 double-quoted-argument" # "$"
+ "7 14 default" # "$42foo"
+ "7 14 double-quoted-argument" # "$42foo"
+ "8 10 dollar-double-quoted-argument" # $42
+ "16 21 default" # "\'\x"
+ "16 21 double-quoted-argument" # "\'\x" - \' and \x are not escape sequences
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/double-quoted4.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/double-quoted4.zsh
new file mode 100644
index 0000000..c59d5d8
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/double-quoted4.zsh
@@ -0,0 +1,37 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=': "${foo}bar"'
+
+expected_region_highlight=(
+ "1 1 builtin" # :
+ "3 13 default" # "${foo}bar"
+ "3 13 double-quoted-argument" # "${foo}bar"
+ "4 9 dollar-double-quoted-argument" # ${foo}
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/empty-command-newline.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/empty-command-newline.zsh
new file mode 100644
index 0000000..4b7b35c
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/empty-command-newline.zsh
@@ -0,0 +1,39 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2019 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+# Newline after semicolon isn't unknown-token
+BUFFER=$':;\n:'
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '2 2 commandseparator' # ;
+ '3 3 commandseparator' # \n
+ '4 4 builtin' # :
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/empty-command.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/empty-command.zsh
new file mode 100644
index 0000000..5831464
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/empty-command.zsh
@@ -0,0 +1,36 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='echo; ;'
+
+expected_region_highlight=(
+ "1 4 builtin" # echo
+ "5 5 commandseparator" # ;
+ "7 7 unknown-token" # ;
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/empty-command2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/empty-command2.zsh
new file mode 100644
index 0000000..dcb4e6f
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/empty-command2.zsh
@@ -0,0 +1,39 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+# Same test data and expectations as empty-command.zsh; the only difference is:
+touch ';'
+
+BUFFER='echo; ;'
+
+expected_region_highlight=(
+ "1 4 builtin" # echo
+ "5 5 commandseparator" # ;
+ "7 7 unknown-token" # ;
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/empty-line.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/empty-line.zsh
new file mode 100644
index 0000000..a4d6685
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/empty-line.zsh
@@ -0,0 +1,36 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'\\\n; ls'
+
+expected_region_highlight=(
+ '3 3 unknown-token' # ;
+ '5 6 command' # ls
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/equals1.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/equals1.zsh
new file mode 100644
index 0000000..77f46e8
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/equals1.zsh
@@ -0,0 +1,36 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$': =ls'
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 5 path' # =ls
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/equals2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/equals2.zsh
new file mode 100644
index 0000000..bd59ff7
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/equals2.zsh
@@ -0,0 +1,38 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+unsetopt equals
+
+BUFFER=$': =nosuchcommand'
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 16 default' # =nosuchcommand
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/equals3.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/equals3.zsh
new file mode 100644
index 0000000..8c10789
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/equals3.zsh
@@ -0,0 +1,36 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$': =nosuchcommand'
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 16 unknown-token' # =nosuchcommand
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/equals4.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/equals4.zsh
new file mode 100644
index 0000000..28bc214
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/equals4.zsh
@@ -0,0 +1,36 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$': ='
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 3 default' # =
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/escaped-single-quote.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/escaped-single-quote.zsh
new file mode 100644
index 0000000..4b2fe4b
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/escaped-single-quote.zsh
@@ -0,0 +1,38 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$': \'foo\'\\\'\'bar\'' # <<<: 'foo'\''bar'>>>
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 14 default' # 'foo'\''bar'
+ '3 7 single-quoted-argument' # 'foo'
+ '10 14 single-quoted-argument' # 'bar'
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/exec-redirection1.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/exec-redirection1.zsh
new file mode 100644
index 0000000..78a0c62
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/exec-redirection1.zsh
@@ -0,0 +1,38 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='exec {foo}>&/tmp ls'
+
+expected_region_highlight=(
+ "1 4 precommand" # exec
+ "6 10 named-fd" # {foo}
+ "11 12 redirection" # >&
+ "13 16 path" # /tmp
+ "18 19 command" # ls
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/fd-target-not-filename.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/fd-target-not-filename.zsh
new file mode 100644
index 0000000..5c3cd08
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/fd-target-not-filename.zsh
@@ -0,0 +1,40 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+touch 2
+
+BUFFER=$'echo foo>&2'
+
+expected_region_highlight=(
+ '1 4 builtin' # echo
+ '6 8 default' # foo
+ '9 10 redirection' # >&
+ '11 11 numeric-fd' # 2 (not path)
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/function-altsyntax.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/function-altsyntax.zsh
new file mode 100644
index 0000000..0f9a833
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/function-altsyntax.zsh
@@ -0,0 +1,45 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+# Define named and anonymous function using the alternative syntax
+BUFFER=$'function f { pwd }; function { pwd }'
+
+expected_region_highlight=(
+ '1 8 reserved-word' # function
+ '10 10 default' # f
+ '12 12 reserved-word "issue #237"' # {
+ '14 16 command "issue #237"' # pwd
+ '18 18 reserved-word "issue #237"' # }
+ '19 19 commandseparator' # ;
+ '21 28 reserved-word' # function
+ '30 30 reserved-word "issue #237"' # {
+ '32 34 command "issue #237"' # pwd
+ '36 36 reserved-word "issue #237"' # }
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/function-named1.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/function-named1.zsh
new file mode 100644
index 0000000..c962ddb
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/function-named1.zsh
@@ -0,0 +1,44 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='f() pwd; f() { balanced braces }'
+
+expected_region_highlight=(
+ '1 1 TBD "issue #223"' # f
+ '2 3 reserved-word' # ()
+ '5 7 builtin' # pwd
+ '8 8 commandseparator' # ;
+ '10 10 TBD "issue #223"' # f
+ '11 12 reserved-word' # ()
+ '14 14 reserved-word' # {
+ '16 23 unknown-token' # balanced
+ '25 30 default' # braces
+ '32 32 reserved-word' # }
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/function-named2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/function-named2.zsh
new file mode 100644
index 0000000..e12fce6
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/function-named2.zsh
@@ -0,0 +1,39 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='f g h () pwd'
+
+expected_region_highlight=(
+ '1 1 TBD "issue #223"' # f
+ '3 3 TBD "issue #223"' # g
+ '5 5 TBD "issue #223"' # h
+ '7 8 reserved-word' # ()
+ '10 12 builtin' # pwd
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/function.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/function.zsh
new file mode 100644
index 0000000..b1be853
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/function.zsh
@@ -0,0 +1,42 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+cd() {
+ builtin cd "$@"
+}
+ls() {
+ command ls "$@"
+}
+BUFFER='cd;ls'
+
+expected_region_highlight=(
+ "1 2 function" # cd
+ "3 3 commandseparator" # ;
+ "4 5 function" # ls
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/glob.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/glob.zsh
new file mode 100644
index 0000000..2ff1022
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/glob.zsh
@@ -0,0 +1,41 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=': foo* bar? *baz qux\?'
+
+expected_region_highlight=(
+ "1 1 builtin" # :
+ "3 6 default" # foo*
+ "6 6 globbing" # *
+ "8 11 default" # bar?
+ "11 11 globbing" # ?
+ "13 16 default" # *baz
+ "13 13 globbing" # *
+ "18 22 default" # qux\?
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/global-alias1.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/global-alias1.zsh
new file mode 100644
index 0000000..0022de3
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/global-alias1.zsh
@@ -0,0 +1,38 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+alias -g foo=bar
+
+BUFFER=$'foo foo'
+
+expected_region_highlight=(
+ '1 3 global-alias' # foo
+ '5 7 global-alias' # foo
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/globs-with-quoting.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/globs-with-quoting.zsh
new file mode 100644
index 0000000..d7d74bc
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/globs-with-quoting.zsh
@@ -0,0 +1,43 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$': "foo"*\'bar\'?"baz?"<17-29>"qu*ux"'
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 34 default' # "foo"*'bar'?"baz?"<17-29>"qu*ux"
+ '3 7 double-quoted-argument' # "foo"
+ '8 8 globbing' # *
+ '9 13 single-quoted-argument' # 'bar'
+ '14 14 globbing' # ?
+ '15 20 double-quoted-argument' # "baz?"
+ '21 27 globbing' # <17-29>
+ '28 34 double-quoted-argument' # "qu*ux"
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/hashed-command.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/hashed-command.zsh
new file mode 100644
index 0000000..2983ef8
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/hashed-command.zsh
@@ -0,0 +1,35 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+hash zsh_syntax_highlighting_hash=/doesnotexist
+BUFFER='zsh_syntax_highlighting_hash'
+
+expected_region_highlight=(
+ "1 28 hashed-command 'zsh/parameter cannot distinguish between hashed and command'"
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/history-double-quoted-escaped.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/history-double-quoted-escaped.zsh
new file mode 100644
index 0000000..7807cc0
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/history-double-quoted-escaped.zsh
@@ -0,0 +1,38 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='echo "Hello\!"'
+
+expected_region_highlight=(
+ '1 4 builtin' # echo
+ '6 14 default' # "Hello\!"
+ '6 14 double-quoted-argument' # "Hello\!"
+ '12 13 back-double-quoted-argument' # \!
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/history-double-quoted-followed.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/history-double-quoted-followed.zsh
new file mode 100644
index 0000000..6421ced
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/history-double-quoted-followed.zsh
@@ -0,0 +1,39 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=': !!= "!!="'
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 4 history-expansion "issue #713"' # !!
+ '7 11 default' # "!!="
+ '7 11 double-quoted-argument' # "!!="
+ '8 9 history-expansion "issue #713' # !!
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/history-double-quoted-no.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/history-double-quoted-no.zsh
new file mode 100644
index 0000000..e082dbc
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/history-double-quoted-no.zsh
@@ -0,0 +1,37 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='echo "foo != bar !{baz}"'
+
+expected_region_highlight=(
+ '1 4 builtin' # echo
+ '6 24 default' # "foo != bar !{baz}"
+ '6 24 double-quoted-argument' # "foo != bar !{baz}" - no history expansions
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/history-double-quoted-unescaped.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/history-double-quoted-unescaped.zsh
new file mode 100644
index 0000000..cfe6a11
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/history-double-quoted-unescaped.zsh
@@ -0,0 +1,38 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='echo "Hello!"'
+
+expected_region_highlight=(
+ '1 4 builtin' # echo
+ '6 13 default' # "Hello!"
+ '6 13 double-quoted-argument' # "Hello!"
+ '12 12 history-expansion' # !
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/history-double-quoted-yes.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/history-double-quoted-yes.zsh
new file mode 100644
index 0000000..e963c3b
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/history-double-quoted-yes.zsh
@@ -0,0 +1,38 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='echo "foo !bar"'
+
+expected_region_highlight=(
+ '1 4 builtin' # echo
+ '6 15 default' # "foo !bar"
+ '6 15 double-quoted-argument' # "foo !bar"
+ '11 11 history-expansion' # !
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/history-expansion.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/history-expansion.zsh
new file mode 100644
index 0000000..05e20fc
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/history-expansion.zsh
@@ -0,0 +1,39 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='!foo bar !baz ! ; !'
+
+expected_region_highlight=(
+ "1 4 history-expansion" # !foo
+ "6 8 default" # bar
+ "10 13 history-expansion" # !baz
+ "15 15 default" # !
+ "17 17 commandseparator" # ;
+ "19 19 reserved-word" # !
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/history-expansion2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/history-expansion2.zsh
new file mode 100644
index 0000000..386d0df
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/history-expansion2.zsh
@@ -0,0 +1,34 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='^foo^bar'
+
+expected_region_highlight=(
+ "1 8 history-expansion" # ^foo^bar
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/inheritance.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/inheritance.zsh
new file mode 100644
index 0000000..e851ca3
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/inheritance.zsh
@@ -0,0 +1,40 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+_zsh_highlight_add_highlight()
+{
+ region_highlight+=("$1 $2 ${(j.,.)argv[3,-1]}")
+}
+
+BUFFER='type'
+
+expected_region_highlight=(
+ '1 4 builtin,arg0' # type
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/jobsubst-isnt-glob.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/jobsubst-isnt-glob.zsh
new file mode 100644
index 0000000..3a7e325
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/jobsubst-isnt-glob.zsh
@@ -0,0 +1,37 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018.9958 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$': %? %?foo'
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 4 default' # %?
+ '6 10 default' # %?foo
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/jobsubst-isnt-glob2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/jobsubst-isnt-glob2.zsh
new file mode 100644
index 0000000..51930bf
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/jobsubst-isnt-glob2.zsh
@@ -0,0 +1,37 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$': foo%?bar'
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 10 default' # foo%?bar
+ '7 7 globbing' # ?
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/loop-newline.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/loop-newline.zsh
new file mode 100644
index 0000000..d39ee11
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/loop-newline.zsh
@@ -0,0 +1,40 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2019 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'for i in \\\n; do done'
+
+expected_region_highlight=(
+ '1 3 reserved-word' # for
+ '5 5 default' # i
+ '7 8 default' # in
+ '12 12 commandseparator' # ;
+ '14 15 reserved-word' # do
+ '17 20 reserved-word' # done
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/meta-no-eval1.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/meta-no-eval1.zsh
new file mode 100644
index 0000000..bb04077
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/meta-no-eval1.zsh
@@ -0,0 +1,49 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$': $(kill -9 $$) ${:-$(kill -9 $$)}'
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 15 default' # $(kill -9 $$)
+ '3 15 command-substitution-unquoted' # $(kill -9 $$)
+ '3 4 command-substitution-delimiter-unquoted' # $(
+ '5 8 builtin' # kill
+ '10 11 single-hyphen-option' # -9
+ '13 14 default' # $$
+ '15 15 command-substitution-delimiter-unquoted' # )
+ '17 34 default' # ${:-$(kill -9 $$)}
+ '21 33 command-substitution-unquoted' # $(kill -9 $$)
+ '21 22 command-substitution-delimiter-unquoted' # $(
+ '23 26 builtin' # kill
+ '28 29 single-hyphen-option' # -9
+ '31 32 default' # $$
+ '33 33 command-substitution-delimiter-unquoted' # )
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/meta-no-eval2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/meta-no-eval2.zsh
new file mode 100644
index 0000000..61ef089
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/meta-no-eval2.zsh
@@ -0,0 +1,40 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+# We aren't testing how this is highlighted; we're testing that it's not
+# evaluated. If it gets evaluated, the test suite will die.
+BUFFER=$': /(e*exit 42*)'
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 15 default' # /(e*exit 42*)
+ '6 6 globbing' # *
+ '14 14 globbing' # *
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/multiline-array-assignment1.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/multiline-array-assignment1.zsh
new file mode 100644
index 0000000..8906cfd
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/multiline-array-assignment1.zsh
@@ -0,0 +1,41 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'foo=(\nbar) env'
+
+expected_region_highlight=(
+ '1 5 assign' # foo=(
+ '5 5 reserved-word' # (
+ '6 6 commandseparator' # \n
+ '7 9 default' # bar
+ '10 10 assign' # )
+ '10 10 reserved-word' # )
+ '12 14 precommand' # env
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/multiline-string.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/multiline-string.zsh
new file mode 100644
index 0000000..0127b4b
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/multiline-string.zsh
@@ -0,0 +1,37 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+PREBUFFER=$'echo "foo1\n'
+BUFFER='foo2" ./'
+
+expected_region_highlight=(
+ "1 5 default" # 'foo2"'
+ "1 5 double-quoted-argument" # 'foo2"'
+ "7 8 path" # './'
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/multiline-string2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/multiline-string2.zsh
new file mode 100644
index 0000000..3a90dce
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/multiline-string2.zsh
@@ -0,0 +1,36 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'echo \'foo1\n'
+
+expected_region_highlight=(
+ "1 4 builtin" # echo
+ "6 11 default" # 'foo1\n
+ "6 11 single-quoted-argument-unclosed" # 'foo1\n
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/multios-negates-globbing.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/multios-negates-globbing.zsh
new file mode 100644
index 0000000..7ece670
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/multios-negates-globbing.zsh
@@ -0,0 +1,39 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+unsetopt multios
+
+BUFFER=$'cat < *'
+
+expected_region_highlight=(
+ '1 3 command' # cat
+ '5 5 redirection' # <
+ '7 7 default' # * - not globbing
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/multios-negates-globbing2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/multios-negates-globbing2.zsh
new file mode 100644
index 0000000..b6db983
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/multios-negates-globbing2.zsh
@@ -0,0 +1,38 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'cat < *'
+
+expected_region_highlight=(
+ '1 3 command' # cat
+ '5 5 redirection' # <
+ '7 7 default' # *
+ '7 7 globbing' # *
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/multiple-quotes.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/multiple-quotes.zsh
new file mode 100644
index 0000000..dabf70c
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/multiple-quotes.zsh
@@ -0,0 +1,42 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2017 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$': \'foo\'bar"baz$quux/foo\\\\bar"baz$\'quux\\nfoo\\001bar\'baz'
+
+expected_region_highlight=(
+ "1 1 builtin" # :
+ "3 54 default" # 'foo'bar"baz$quux/foo\\bar"baz$'quux\nfoo\001'baz
+ "3 7 single-quoted-argument" # 'foo'
+ "11 29 double-quoted-argument" #"baz
+ "15 19 dollar-double-quoted-argument" # $quux
+ "24 25 back-double-quoted-argument" # \\
+ "33 51 dollar-quoted-argument" # $'quux\nfoo\001bar'
+ "39 40 back-dollar-quoted-argument" # \n
+ "44 47 back-dollar-quoted-argument" # \001
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/multiple-redirections.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/multiple-redirections.zsh
new file mode 100644
index 0000000..1545c1b
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/multiple-redirections.zsh
@@ -0,0 +1,46 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='id bob | grep java | sort | uniq | tail | head'
+
+expected_region_highlight=(
+ "1 2 command" # ps
+ "4 6 default" # aux
+ "8 8 commandseparator" # |
+ "10 13 command" # grep
+ "15 18 default" # java
+ "20 20 commandseparator" # |
+ "22 25 command" # sort
+ "27 27 commandseparator" # |
+ "29 32 command" # uniq
+ "34 34 commandseparator" # |
+ "36 39 command" # tail
+ "41 41 commandseparator" # |
+ "43 46 command" # head
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/noglob-alias.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/noglob-alias.zsh
new file mode 100644
index 0000000..2f96445
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/noglob-alias.zsh
@@ -0,0 +1,36 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+alias x=command
+BUFFER='x ls'
+
+expected_region_highlight=(
+ "1 1 alias" # x
+ "3 4 command" # ls
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/noglob-always.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/noglob-always.zsh
new file mode 100644
index 0000000..6d55048
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/noglob-always.zsh
@@ -0,0 +1,45 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'{ noglob echo * } always { echo * }'
+
+expected_region_highlight=(
+ '1 1 reserved-word' # {
+ '3 8 precommand' # noglob
+ '10 13 builtin' # echo
+ '15 15 default' # *
+ '17 17 reserved-word' # }
+ '19 24 reserved-word' # always
+ '26 26 reserved-word' # {
+ '28 31 builtin' # echo
+ '33 33 default' # *
+ '33 33 globbing' # *
+ '35 35 reserved-word' # }
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/noglob1.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/noglob1.zsh
new file mode 100644
index 0000000..1857db0
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/noglob1.zsh
@@ -0,0 +1,38 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=':; noglob echo *'
+
+expected_region_highlight=(
+ "1 1 builtin" # :
+ "2 2 commandseparator" # ;
+ "4 9 precommand" # noglob
+ "11 14 builtin" # echo
+ "16 16 default" # *
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/noglob2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/noglob2.zsh
new file mode 100644
index 0000000..3b4fcd7
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/noglob2.zsh
@@ -0,0 +1,40 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='noglob echo *; echo *'
+
+expected_region_highlight=(
+ "1 6 precommand" # noglob
+ "8 11 builtin" # echo
+ "13 13 default" # *
+ "14 14 commandseparator" # ;
+ "16 19 builtin" # echo
+ "21 21 default" # *
+ "21 21 globbing" # *
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/noglob3.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/noglob3.zsh
new file mode 100644
index 0000000..c404aaa
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/noglob3.zsh
@@ -0,0 +1,38 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+touch \*
+
+BUFFER='noglob echo *'
+
+expected_region_highlight=(
+ "1 6 precommand" # noglob
+ "8 11 builtin" # echo
+ "13 13 path" # *
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/noglob4.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/noglob4.zsh
new file mode 100644
index 0000000..cc7065f
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/noglob4.zsh
@@ -0,0 +1,45 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'noglob cat <(print -r -- *)'
+
+expected_region_highlight=(
+ '1 6 precommand' # noglob
+ '8 10 command' # cat
+ '12 27 default' # <(print -r -- *)
+ '12 27 process-substitution' # <(print -r -- *)
+ '12 13 process-substitution-delimiter' # <(
+ '14 18 builtin' # print
+ '20 21 single-hyphen-option' # -r
+ '23 24 double-hyphen-option' # --
+ '26 26 default' # *
+ '26 26 globbing' # *
+ '27 27 process-substitution-delimiter' # )
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/null-exec.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/null-exec.zsh
new file mode 100644
index 0000000..be1e306
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/null-exec.zsh
@@ -0,0 +1,38 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'exec >/dev/null;'
+
+expected_region_highlight=(
+ '1 4 precommand' # exec
+ '6 6 redirection' # >
+ '7 15 path' # /dev/null
+ '16 16 commandseparator' # ;
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/null-exec2-printenv.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/null-exec2-printenv.zsh
new file mode 100644
index 0000000..59a2cef
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/null-exec2-printenv.zsh
@@ -0,0 +1,38 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2021 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'env | grep $needle'
+
+expected_region_highlight=(
+ '1 3 precommand' # env
+ '5 5 commandseparator' # |
+ '7 10 command' # grep
+ '12 18 default' # $needle
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/number_range-glob.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/number_range-glob.zsh
new file mode 100644
index 0000000..c840951
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/number_range-glob.zsh
@@ -0,0 +1,42 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2017 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='print <-> x<->y <foo2-3>'
+
+expected_region_highlight=(
+ '1 5 builtin' # print
+ '7 9 default' # <->
+ '7 9 globbing' # <->
+ '11 15 default' # x<->y
+ '12 14 globbing' # <->
+ '17 17 redirection' # <
+ '18 23 default' # foo2-3 (the filename)
+ '24 24 redirection' # >
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/off-by-one.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/off-by-one.zsh
new file mode 100644
index 0000000..872143a
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/off-by-one.zsh
@@ -0,0 +1,40 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+alias a=:
+f() {}
+
+BUFFER='a;f;'
+
+expected_region_highlight=(
+ "1 1 alias" # a
+ "2 2 commandseparator" # ;
+ "3 3 function" # f
+ "4 4 commandseparator" # ;
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/opt-shwordsplit1.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/opt-shwordsplit1.zsh
new file mode 100644
index 0000000..4a7689b
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/opt-shwordsplit1.zsh
@@ -0,0 +1,40 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+setopt shwordsplit
+local EDITOR='ed -s'
+
+ed() { command ed "$@" }
+
+BUFFER=$'$EDITOR'
+
+expected_region_highlight=(
+ '1 7 function' # $EDITOR
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/optimized-cmdsubst-input.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/optimized-cmdsubst-input.zsh
new file mode 100644
index 0000000..ca55ef8
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/optimized-cmdsubst-input.zsh
@@ -0,0 +1,43 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+# See getoutput() and getoutputfile() in zsh's C source code.
+
+BUFFER=$': $(<*)'
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 7 default' # $(<*)
+ '3 7 command-substitution-unquoted' # $(<*)
+ '3 4 command-substitution-delimiter-unquoted' # $(
+ '5 5 redirection' # <
+ '6 6 default' # * - not globbing!
+ '7 7 command-substitution-delimiter-unquoted' # )
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/option-dollar-quote-isnt-filename.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/option-dollar-quote-isnt-filename.zsh
new file mode 100644
index 0000000..897a02e
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/option-dollar-quote-isnt-filename.zsh
@@ -0,0 +1,39 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$': -$\'n\''
+
+touch ./-n
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 7 single-hyphen-option' # -$'n'
+ '4 7 dollar-quoted-argument' # $'n'
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/option-path_dirs.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/option-path_dirs.zsh
new file mode 100644
index 0000000..0300c7e
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/option-path_dirs.zsh
@@ -0,0 +1,44 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+if [[ $OSTYPE == msys ]]; then
+ skip_test='Cannot chmod +x in msys2'
+else
+ setopt PATH_DIRS
+ mkdir -p foo/bar
+ touch foo/bar/testing-issue-228
+ chmod +x foo/bar/testing-issue-228
+ path+=( "$PWD"/foo )
+
+ BUFFER='bar/testing-issue-228'
+
+ expected_region_highlight=(
+ "1 21 command" # bar/testing-issue-228
+ )
+fi
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/option-with-quotes.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/option-with-quotes.zsh
new file mode 100644
index 0000000..6286f03
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/option-with-quotes.zsh
@@ -0,0 +1,37 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$': --user="phy1729"'
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 18 double-hyphen-option' # --user="phy1729"
+ '10 18 double-quoted-argument' # "phy1729"
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/order-path-after-dollar.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/order-path-after-dollar.zsh
new file mode 100644
index 0000000..773c183
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/order-path-after-dollar.zsh
@@ -0,0 +1,38 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+touch '$foo'
+BUFFER=': $foo \$foo'
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 6 default' # $foo - if we add a "unquoted parameter expansion" style then this expectation should change
+ '8 12 path' # \$foo
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/order-path-before-globbing.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/order-path-before-globbing.zsh
new file mode 100644
index 0000000..8456b18
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/order-path-before-globbing.zsh
@@ -0,0 +1,39 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2017 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+touch '*'
+BUFFER=': * \*'
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 3 default' # *
+ '3 3 globbing' # *
+ '5 6 path' # \*
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/param-positional-in-array-append.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/param-positional-in-array-append.zsh
new file mode 100644
index 0000000..bd39e02
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/param-positional-in-array-append.zsh
@@ -0,0 +1,39 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+# This used to be an infinite loop.
+
+BUFFER=$'l+=( $1'
+
+expected_region_highlight=(
+ '1 4 assign' # l+=(
+ '4 4 reserved-word' # (
+ '6 7 default' # $1
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/param-precommand-option-argument1.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/param-precommand-option-argument1.zsh
new file mode 100644
index 0000000..84cf03a
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/param-precommand-option-argument1.zsh
@@ -0,0 +1,42 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+# See also alias-precommand-option-argument1.zsh
+local -a sudo_u; sudo_u=(sudo -u)
+sudo(){}
+
+BUFFER='$sudo_u phy1729 echo foo'
+
+expected_region_highlight=(
+ '1 7 precommand' # $sudo_u
+ '9 15 default' # phy1729
+ '18 20 command "issue #540"' # echo (not builtin)
+ '22 24 default' # foo
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/param-precommand-option-argument3.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/param-precommand-option-argument3.zsh
new file mode 100644
index 0000000..9a8dde2
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/param-precommand-option-argument3.zsh
@@ -0,0 +1,42 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+# See also alias-precommand-option-argument3.zsh
+local -a sudo_u; sudo_u=(sudo -u)
+sudo(){}
+
+BUFFER='$sudo_u phy1729 ls foo'
+
+expected_region_highlight=(
+ '1 7 precommand' # sudo_u
+ '9 15 default' # phy1729
+ '17 18 command' # ls
+ '20 22 default' # foo
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/parameter-elision-command-word.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/parameter-elision-command-word.zsh
new file mode 100644
index 0000000..25f649a
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/parameter-elision-command-word.zsh
@@ -0,0 +1,36 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='$x ls'
+
+expected_region_highlight=(
+ '1 2 comment' # $x
+ '4 5 command' # ls
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/parameter-expansion-shwordsplit.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/parameter-expansion-shwordsplit.zsh
new file mode 100644
index 0000000..0bf6f4c
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/parameter-expansion-shwordsplit.zsh
@@ -0,0 +1,38 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2021 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+setopt sh_word_split
+local foo='echo foo'
+
+BUFFER='$foo'
+
+expected_region_highlight=(
+ '1 4 builtin' # $foo
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/parameter-expansion-untokenized1.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/parameter-expansion-untokenized1.zsh
new file mode 100644
index 0000000..8b8b5e4
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/parameter-expansion-untokenized1.zsh
@@ -0,0 +1,38 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+local x="()"
+
+BUFFER=$'$x ls'
+
+expected_region_highlight=(
+ '1 2 unknown-token' # $x
+ '4 5 command' # ls
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/parameter-expansion-untokenized2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/parameter-expansion-untokenized2.zsh
new file mode 100644
index 0000000..d23a1f2
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/parameter-expansion-untokenized2.zsh
@@ -0,0 +1,38 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+local x="^foo^bar"
+
+BUFFER=$'$x ls'
+
+expected_region_highlight=(
+ '1 2 unknown-token' # $x
+ '4 5 default' # ls
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/parameter-star.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/parameter-star.zsh
new file mode 100644
index 0000000..2311be0
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/parameter-star.zsh
@@ -0,0 +1,40 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2017 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='() { : $* }'
+
+# This tests that $* isn't highlighted as a glob.
+# If we ever add a "unquoted parameter" style, the expectation may change.
+expected_region_highlight=(
+ "1 2 reserved-word" # ()
+ "4 4 reserved-word" # {
+ "6 6 builtin" # :
+ "8 9 default" # $*
+ "11 11 reserved-word" # }
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/parameter-to-global-alias.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/parameter-to-global-alias.zsh
new file mode 100644
index 0000000..63f95da
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/parameter-to-global-alias.zsh
@@ -0,0 +1,42 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+if type global_alias >/dev/null; then
+ skip_test="Test is written on the assumption that 'global_alias' is not a valid command name, but that assumption does not hold"
+ return 0
+fi
+alias -g global_alias=y
+local s=global_alias
+
+BUFFER=$'$s'
+
+expected_region_highlight=(
+ '1 2 unknown-token' # $s
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/parameter-value-contains-command-position1.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/parameter-value-contains-command-position1.zsh
new file mode 100644
index 0000000..05ea1bf
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/parameter-value-contains-command-position1.zsh
@@ -0,0 +1,38 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+local foobar='x=$(ls)'
+
+BUFFER=$'$foobar'
+
+expected_region_highlight=(
+ # Used to highlight the "ba" as 'command' because the 'ls' showed through; issues #670 and #674
+ '1 7 unknown-token' # $foobar (not an assignment)
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/parameter-value-contains-command-position2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/parameter-value-contains-command-position2.zsh
new file mode 100644
index 0000000..5042e89
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/parameter-value-contains-command-position2.zsh
@@ -0,0 +1,38 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+local y='x=$(ls)'
+
+BUFFER=$'$y'
+
+expected_region_highlight=(
+ # Used to trigger a "BUG" message on stderr - issues #670 and #674
+ '1 2 unknown-token' # $y (not an assignment)
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/pasted-quotes.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/pasted-quotes.zsh
new file mode 100644
index 0000000..f37f21b
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/pasted-quotes.zsh
@@ -0,0 +1,38 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2013 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$': \'foo\'bar"baz"'
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 15 default' # \'foo\'bar"baz"
+ '3 7 single-quoted-argument' # \'foo\'
+ '11 15 double-quoted-argument' # "baz"
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-broken-symlink.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-broken-symlink.zsh
new file mode 100644
index 0000000..baebee3
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-broken-symlink.zsh
@@ -0,0 +1,41 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+if [[ $OSTYPE == msys ]]; then
+ skip_test='Cannot create symlinks in msys2'
+else
+ ln -s /nonexistent broken-symlink
+ BUFFER=': broken-symlink'
+ CURSOR=5 # to make path_prefix ineligible
+
+ expected_region_highlight=(
+ "1 1 builtin" # :
+ "3 16 path" # broken-symlink
+ )
+fi
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-dollared-word.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-dollared-word.zsh
new file mode 100644
index 0000000..99055da
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-dollared-word.zsh
@@ -0,0 +1,45 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+if [[ $OSTYPE == msys ]]; then
+ skip_test='Cannot chmod +x in msys2' # cargo culted from option-path_dirs.zsh
+else
+ mkdir kappa
+ touch kappa.exe
+ chmod +x kappa.exe
+ cd kappa
+
+ BUFFER='$PWD.exe; ${PWD}.exe'
+
+ expected_region_highlight=(
+ "1 8 unknown-token" # $PWD.exe - not eval'd; issue #328
+ "9 9 commandseparator" # ;
+ "11 20 unknown-token" # ${PWD}.exe
+ )
+fi
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-dollared-word2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-dollared-word2.zsh
new file mode 100644
index 0000000..f404d5d
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-dollared-word2.zsh
@@ -0,0 +1,37 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+local lambda="''"
+touch \$lambda
+BUFFER=': \$lambda'
+
+expected_region_highlight=(
+ "1 1 builtin" # :
+ "3 10 path" # \$lambda
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-dollared-word3.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-dollared-word3.zsh
new file mode 100644
index 0000000..ec981b1
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-dollared-word3.zsh
@@ -0,0 +1,40 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+# «/usr» at this point would be highlighted as path_prefix; so should
+# a parameter that expands to an equivalent string be highlighted.
+#
+# More complicated parameter substitutions aren't eval'd; issue #328.
+BUFFER='$PWD; ${PWD}'
+
+expected_region_highlight=(
+ "1 4 unknown-token" # $PWD (without AUTO_CD)
+ "5 5 commandseparator" # ;
+ "7 12 path_prefix" # ${PWD}
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-dollared-word3b.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-dollared-word3b.zsh
new file mode 100644
index 0000000..72a2f7c
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-dollared-word3b.zsh
@@ -0,0 +1,38 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+setopt autocd
+BUFFER=$'$PWD; ${PWD}'
+
+expected_region_highlight=(
+ '1 4 autodirectory' # $PWD
+ '5 5 commandseparator' # ;
+ '7 12 autodirectory' # ${PWD}
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-dollared-word4.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-dollared-word4.zsh
new file mode 100644
index 0000000..e29182c
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-dollared-word4.zsh
@@ -0,0 +1,36 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+# This tests for a regression during development of issue #328: an interim version
+# of that branch failed that test with "Bail out! output on stderr".
+BUFFER='${'
+
+expected_region_highlight=(
+ "1 2 unknown-token" # ${
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-mixed-quoting.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-mixed-quoting.zsh
new file mode 100644
index 0000000..cbd0b38
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-mixed-quoting.zsh
@@ -0,0 +1,39 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+touch foo
+
+BUFFER=$': \'f\'oo'
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 7 path' # \'f\'oo
+ '3 5 single-quoted-argument' # \'f\'
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-separators.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-separators.zsh
new file mode 100644
index 0000000..52749b7
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-separators.zsh
@@ -0,0 +1,53 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+# ZSH_HIGHLIGHT_STYLES is empty in tests. The path-separator code however compares its values.
+# Make sure the relevant ones are set to something.
+ZSH_HIGHLIGHT_STYLES[path_pathseparator]=set
+ZSH_HIGHLIGHT_STYLES[path_prefix_pathseparator]=set
+
+mkdir A
+touch A/mu
+BUFFER='ls /bin/ / A/mu A/m'
+
+expected_region_highlight=(
+ "1 2 command" # ls
+ "4 8 path" # /bin/
+ "4 4 path_pathseparator" # /
+ "8 8 path_pathseparator" # /
+
+ "10 10 path" # /
+ "10 10 path_pathseparator" # /
+
+ "12 15 path" # A/mu
+ "13 13 path_pathseparator" # /
+
+ "17 19 path_prefix" # A/m
+ "18 18 path_prefix_pathseparator" # /
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-separators2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-separators2.zsh
new file mode 100644
index 0000000..bc885a0
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-separators2.zsh
@@ -0,0 +1,40 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+# ZSH_HIGHLIGHT_STYLES is empty in tests. The path-separator code however compares its values.
+# For this test, make sure both these styles are set and identical:
+ZSH_HIGHLIGHT_STYLES[path]=value
+ZSH_HIGHLIGHT_STYLES[path_pathseparator]=value
+
+BUFFER='ls /bin/'
+
+expected_region_highlight=(
+ "1 2 command" # ls
+ "4 8 path" # /bin/
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-space.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-space.zsh
new file mode 100644
index 0000000..87cc22f
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-space.zsh
@@ -0,0 +1,37 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+mkdir A
+touch "A/mu with spaces"
+BUFFER='ls A/mu\ with\ spaces'
+
+expected_region_highlight=(
+ "1 2 command" # ls
+ "4 21 path" # A/mu\ with\ spaces
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-tilde-home.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-tilde-home.zsh
new file mode 100644
index 0000000..8b1c680
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-tilde-home.zsh
@@ -0,0 +1,36 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+HOME="."
+BUFFER='ls ~'
+
+expected_region_highlight=(
+ "1 2 command" # ls
+ "4 4 path" # ~
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-tilde-home2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-tilde-home2.zsh
new file mode 100644
index 0000000..3f7b820
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-tilde-home2.zsh
@@ -0,0 +1,37 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+HOME="/nonexistent"
+BUFFER='ls ~'
+
+expected_region_highlight=(
+ "1 2 command" # ls
+ "4 4 default" # ~
+)
+
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-tilde-home3.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-tilde-home3.zsh
new file mode 100644
index 0000000..5c076e8
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-tilde-home3.zsh
@@ -0,0 +1,36 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+HOME="."
+BUFFER='ls \~'
+
+expected_region_highlight=(
+ "1 2 command" # ls
+ "4 5 default" # \~
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-tilde-named.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-tilde-named.zsh
new file mode 100644
index 0000000..335b3fd
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path-tilde-named.zsh
@@ -0,0 +1,39 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+mkdir mydir
+touch mydir/path-tilde-named.test
+hash -d D=mydir
+
+BUFFER='ls ~D/path-tilde-named.test'
+
+expected_region_highlight=(
+ "1 2 command" # ls
+ "4 27 path" # ~D/path-tilde-named.test
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path.zsh
new file mode 100644
index 0000000..d387eff
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path.zsh
@@ -0,0 +1,37 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+mkdir A
+touch A/mu
+BUFFER='ls A/mu'
+
+expected_region_highlight=(
+ "1 2 command" # ls
+ "4 7 path" # A/mu
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path_prefix.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path_prefix.zsh
new file mode 100644
index 0000000..3303bfb
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path_prefix.zsh
@@ -0,0 +1,38 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+# Assumes that '/bin/sh' exists and '/bin/s' does not exist.
+# Related to path_prefix2.zsh
+
+BUFFER='ls /bin/s'
+
+expected_region_highlight=(
+ "1 2 command" # ls
+ "4 9 path_prefix" # /bin/s
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path_prefix2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path_prefix2.zsh
new file mode 100644
index 0000000..4f40f7e
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path_prefix2.zsh
@@ -0,0 +1,39 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+# Assumes that '/bin/sh' exists and '/bin/s' does not exist.
+# Related to path_prefix.zsh
+
+BUFFER='ls /bin/s'
+WIDGET=zle-line-finish
+
+expected_region_highlight=(
+ "1 2 command" # ls
+ "4 9 default" # /bin/s
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path_prefix3.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path_prefix3.zsh
new file mode 100644
index 0000000..9f34f94
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/path_prefix3.zsh
@@ -0,0 +1,38 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+# Assumes that '/bin/sh' exists and '/bin/s' does not exist.
+# Related to path_prefix.zsh
+
+PREBUFFER=$'ls \\\n'
+BUFFER='/bin/s'
+
+expected_region_highlight=(
+ '1 6 path_prefix' # /bin/s
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/plain-file-in-command-position.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/plain-file-in-command-position.zsh
new file mode 100644
index 0000000..141ffac
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/plain-file-in-command-position.zsh
@@ -0,0 +1,39 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+touch foo
+chmod -x foo
+BUFFER=$'./foo; ./foo'
+
+expected_region_highlight=(
+ '1 5 unknown-token' # ./foo (in middle)
+ '6 6 commandseparator' # ;
+ '8 12 unknown-token' # ./foo (at end)
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand-killing1.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand-killing1.zsh
new file mode 100644
index 0000000..7598346
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand-killing1.zsh
@@ -0,0 +1,40 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+hash sudo=false
+touch foo
+
+BUFFER='sudo -e ./foo'
+
+expected_region_highlight=(
+ '1 4 precommand' # sudo
+ '6 7 single-hyphen-option' # -e
+ '9 13 path' # ./foo
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand-killing2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand-killing2.zsh
new file mode 100644
index 0000000..bc6fc86
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand-killing2.zsh
@@ -0,0 +1,39 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+hash sudo=false
+
+BUFFER='sudo -e /does/not/exist'
+
+expected_region_highlight=(
+ '1 4 precommand' # sudo
+ '6 7 single-hyphen-option' # -e
+ '9 23 default' # /does/not/exist
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand-then-assignment.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand-then-assignment.zsh
new file mode 100644
index 0000000..f0bb75f
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand-then-assignment.zsh
@@ -0,0 +1,37 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2019 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'nice x=y ls'
+
+expected_region_highlight=(
+ '1 4 precommand' # nice
+ '6 8 unknown-token "issue #641.5"' # x=y
+ '10 11 default "issue #641.5 (fallout)"' # ls
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand-type1.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand-type1.zsh
new file mode 100644
index 0000000..4ce817c
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand-type1.zsh
@@ -0,0 +1,61 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2019 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+# Test the behaviour of a builtin that exists as a command as well.
+# The spaces in $BUFFER are to align precommand-type*.zsh test files.
+BUFFER=$'test ; builtin test ; builtin command test ; nice test '
+
+# Our expectations assumes that a 'test' external command exists (in addition
+# to the 'test' builtin). Let's verify that, using the EQUALS option (which
+# is on by default). If there's no 'test' command, the expansion will fail,
+# diagnose a message on stdout, and the harness will detect a failure.
+#
+# This seems to work on all platforms, insofar as no one ever reported a bug
+# about their system not having a 'test' binary in PATH. That said, if someone
+# ever does see this test fail for this reason, we should explicitly create
+# a 'test' executable in cwd and 'rehash'.
+: =test
+
+expected_region_highlight=(
+ '1 4 builtin' # test
+ '7 7 commandseparator' # ;
+
+ '9 15 precommand' # builtin
+ '17 20 builtin' # test
+ '23 23 commandseparator' # ;
+
+ '25 31 precommand' # builtin
+ '33 39 precommand' # command
+ '41 44 command "issue #608"' # test
+ '47 47 commandseparator' # ;
+
+ '49 52 precommand' # nice
+ '54 57 command "issue #608"' # test
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand-type2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand-type2.zsh
new file mode 100644
index 0000000..bf75f4b
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand-type2.zsh
@@ -0,0 +1,55 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2019 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+# Test the behaviour of a builtin that does not exist as a command.
+# The spaces in $BUFFER are to align precommand-type*.zsh test files.
+BUFFER=$'zstyle; builtin zstyle; builtin command zstyle; nice zstyle'
+
+# Verify that no $^path/zstyle(N) binary exists.
+if (disable zstyle; type zstyle >/dev/null); then
+ echo >&2 "precommand-type2: error: 'zstyle' exists not only as a builtin"
+fi
+
+expected_region_highlight=(
+ '1 6 builtin' # zstyle
+ '7 7 commandseparator' # ;
+
+ '9 15 precommand' # builtin
+ '17 22 builtin' # zstyle
+ '23 23 commandseparator' # ;
+
+ '25 31 precommand' # builtin
+ '33 39 precommand' # command
+ '41 46 unknown-token "issue #608"' # zstyle
+ '47 47 commandseparator' # ;
+
+ '49 52 precommand' # nice
+ '54 59 unknown-token "issue #608"' # zstyle
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand-type3.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand-type3.zsh
new file mode 100644
index 0000000..7fc7e4c
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand-type3.zsh
@@ -0,0 +1,55 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2019 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+# Test an external command that does not exist as a builtin.
+# The spaces in $BUFFER are to align precommand-type*.zsh test files.
+BUFFER=$'ls ; builtin ls ; builtin command ls ; nice ls '
+
+# Verify that the 'ls' command isn't shadowed.
+if [[ $(type -w ls) != "ls: command" ]]; then
+ echo >&2 "precommand-type3: error: the 'ls' command is shadowed (or possibly missing altogether)"
+fi
+
+expected_region_highlight=(
+ '1 2 command' # ls
+ '7 7 commandseparator' # ;
+
+ '9 15 precommand' # builtin
+ '17 18 unknown-token "issue #608"' # ls
+ '23 23 commandseparator' # ;
+
+ '25 31 precommand' # builtin
+ '33 39 precommand' # command
+ '41 42 command' # ls
+ '47 47 commandseparator' # ;
+
+ '49 52 precommand' # nice
+ '54 55 command' # ls
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand-uninstalled.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand-uninstalled.zsh
new file mode 100644
index 0000000..03c8a75
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand-uninstalled.zsh
@@ -0,0 +1,44 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+# Simulate sudo not being installed.
+#
+# The 'hash' step is because, if sudo _really_ isn't installed, 'unhash sudo'
+# would error out and break the test.
+hash sudo=/usr/bin/env && unhash sudo
+
+local PATH
+
+BUFFER=$'sudo ls'
+
+expected_region_highlight=(
+ '1 4 unknown-token' # sudo
+ '6 7 default' # ls - not 'command', since sudo isn't installed
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand-unknown-option.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand-unknown-option.zsh
new file mode 100644
index 0000000..6baf9ff
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand-unknown-option.zsh
@@ -0,0 +1,43 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+sudo(){}
+
+BUFFER='sudo -ux ls; sudo -x ls'
+
+expected_region_highlight=(
+ '1 4 precommand' # sudo
+ '6 8 single-hyphen-option' # -ux
+ '10 11 command' # ls
+ '12 12 commandseparator' # ;
+ '14 17 precommand' # sudo
+ '19 20 single-hyphen-option' # -x
+ '22 23 command' # ls
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand.zsh
new file mode 100644
index 0000000..a03b331
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand.zsh
@@ -0,0 +1,36 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=': command zzzzzz'
+
+expected_region_highlight=(
+ "1 1 builtin" # :
+ "3 9 default" # not precommand
+ "11 16 default" # not unknown-token (since 'zzzzzz' is not a command)
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand2.zsh
new file mode 100644
index 0000000..75dceab
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand2.zsh
@@ -0,0 +1,36 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='command -v ls'
+
+expected_region_highlight=(
+ "1 7 precommand" # command
+ "9 10 single-hyphen-option" # -v
+ "12 13 command" # ls
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand3.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand3.zsh
new file mode 100644
index 0000000..f8b0c78
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand3.zsh
@@ -0,0 +1,41 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='nice -n10 ls; nice -n 10 ls'
+
+expected_region_highlight=(
+ "1 4 precommand" # nice
+ "6 9 single-hyphen-option" # -n10
+ "11 12 command" # ls
+ "13 13 commandseparator" # ;
+ "15 18 precommand" # nice
+ "20 21 single-hyphen-option" # -n
+ "23 24 default" # 10
+ "26 27 command" # ls
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand4.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand4.zsh
new file mode 100644
index 0000000..b9e6119
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/precommand4.zsh
@@ -0,0 +1,39 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+doas(){}
+BUFFER=$'doas -nu phy1729 ls'
+
+expected_region_highlight=(
+ '1 4 precommand' # doas
+ '6 8 single-hyphen-option' # -nu
+ '10 16 default' # phy1729
+ '18 19 command' # ls
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/prefix-redirection.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/prefix-redirection.zsh
new file mode 100644
index 0000000..a0f0ed5
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/prefix-redirection.zsh
@@ -0,0 +1,42 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='>/tmp >/tmp command echo >/tmp foo'
+
+expected_region_highlight=(
+ "1 1 redirection" # >
+ "2 5 path" # /tmp
+ "7 7 redirection" # >
+ "8 11 path" # /tmp
+ "13 19 precommand" # command
+ "21 24 builtin" # echo
+ "26 26 redirection" # >
+ "27 30 path" # /tmp
+ "32 34 default" # foo
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/process-substitution-after-redirection.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/process-substitution-after-redirection.zsh
new file mode 100644
index 0000000..2d58016
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/process-substitution-after-redirection.zsh
@@ -0,0 +1,46 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2017, 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'< <(pwd) > >(nl)'
+
+expected_region_highlight=(
+ '1 1 redirection' # <
+ '3 8 default' # <(pwd)
+ '3 8 process-substitution' # <(pwd)
+ '3 4 process-substitution-delimiter' # <(
+ '5 7 builtin' # pwd
+ '8 8 process-substitution-delimiter' # )
+ '10 10 redirection' # >
+ '12 16 default' # >(nl)
+ '12 16 process-substitution' # >(nl)
+ '12 13 process-substitution-delimiter' # >(
+ '14 15 command' # nl
+ '16 16 process-substitution-delimiter' # )
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/process-substitution-redirection-isnt-globbing.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/process-substitution-redirection-isnt-globbing.zsh
new file mode 100644
index 0000000..f8dbd6b
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/process-substitution-redirection-isnt-globbing.zsh
@@ -0,0 +1,41 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$': =(<foo)'
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 9 default' # =(<foo)
+ '3 9 process-substitution' # =(<foo)
+ '3 4 process-substitution-delimiter' # =(
+ '5 5 redirection' # <foo
+ '6 8 default' # foo
+ '9 9 process-substitution-delimiter' # )
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/process-substitution.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/process-substitution.zsh
new file mode 100644
index 0000000..2660034
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/process-substitution.zsh
@@ -0,0 +1,43 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$': --foo=<(echo bar) "<(:)"'
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 19 double-hyphen-option' # --foo=<(echo bar)
+ '9 19 process-substitution' # <(echo bar)
+ '9 10 process-substitution-delimiter' # <(
+ '11 14 builtin' # echo
+ '16 18 default' # bar
+ '19 19 process-substitution-delimiter' # )
+ '21 26 default' # "<(:)"
+ '21 26 double-quoted-argument' # "<(:)"
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/process-substitution2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/process-substitution2.zsh
new file mode 100644
index 0000000..cc55090
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/process-substitution2.zsh
@@ -0,0 +1,51 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='echo =(:) a=(:) =(echo foo'
+
+expected_region_highlight=(
+ '1 4 builtin' # echo
+ '6 9 default' # =(:)
+ '6 9 process-substitution' # =(:)
+ '6 7 process-substitution-delimiter' # =(
+ '8 8 builtin' # :
+ '9 9 process-substitution-delimiter' # )
+ '11 15 default' # a=(:)
+ '17 26 default' # =(echo foo
+ '17 26 process-substitution' # =(echo foo
+ '17 18 process-substitution-delimiter' # =(
+ '19 22 builtin' # echo
+ '24 26 default' # foo
+)
+
+if [[ ${(z):-'$('} == '$( ' ]]; then # ignore zsh 5.0.8 bug
+ expected_region_highlight[8]='17 27 default' # =(echo foo
+ expected_region_highlight[9]='17 27 process-substitution' # =(echo foo
+fi
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/quoted-command-substitution-empty.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/quoted-command-substitution-empty.zsh
new file mode 100644
index 0000000..daf3738
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/quoted-command-substitution-empty.zsh
@@ -0,0 +1,44 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='echo "foo$( '
+
+expected_region_highlight=(
+ '1 4 builtin' # echo
+ '6 12 default' # "foo$(
+ '6 9 double-quoted-argument-unclosed' # "foo
+ '10 12 command-substitution-quoted' # $(
+ '10 11 command-substitution-delimiter-quoted' # $(
+)
+
+if [[ ${(z):-'$('} == '$( ' ]]; then # ignore zsh 5.0.8 bug
+ expected_region_highlight[2]='6 13 default' # "foo$(
+ expected_region_highlight[4]='10 13 command-substitution-quoted' # $(
+fi
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/quoted-redirection-in-command-word.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/quoted-redirection-in-command-word.zsh
new file mode 100644
index 0000000..b1a79e1
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/quoted-redirection-in-command-word.zsh
@@ -0,0 +1,37 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'">" foo ls'
+
+expected_region_highlight=(
+ '1 3 unknown-token' # ">" - not "redirection"
+ '5 7 default' # foo
+ '9 10 default' # ls - not "command"
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/rc-quotes.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/rc-quotes.zsh
new file mode 100644
index 0000000..8cd427a
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/rc-quotes.zsh
@@ -0,0 +1,39 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2017 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+setopt RC_QUOTES
+
+BUFFER=": 'foo''bar'baz"
+
+expected_region_highlight=(
+ "1 1 builtin" # :
+ "3 15 default" # 'foo''bar'baz
+ "3 12 single-quoted-argument" # 'foo''bar'
+ "7 8 rc-quote" # ''
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection-all.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection-all.zsh
new file mode 100644
index 0000000..e8ffb5d
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection-all.zsh
@@ -0,0 +1,95 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2024 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$': <foo 9<foo <>foo 9<>foo >foo 9>foo >|foo >\!foo >>foo >>|foo >>\!foo <<<foo <&9 >&9 <&- >&- <&p >&p >&foo &>foo >&|foo >&\!foo &>|foo &>\!foo >>&foo &>>foo >>&|foo >>&\!foo &>>|foo &>>\!foo'
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 3 redirection' # <
+ '4 6 default' # foo
+ '8 9 redirection' # 9<
+ '10 12 default' # foo
+ '14 15 redirection' # <>
+ '16 18 default' # foo
+ '20 22 redirection' # 9<>
+ '23 25 default' # foo
+ '27 27 redirection' # >
+ '28 30 default' # foo
+ '32 33 redirection' # 9>
+ '34 36 default' # foo
+ '38 39 redirection' # >|
+ '40 42 default' # foo
+ '44 45 redirection' # >\!
+ '46 48 default' # foo
+ '50 51 redirection' # >>
+ '52 54 default' # foo
+ '56 58 redirection' # >>|
+ '59 61 default' # foo
+ '63 65 redirection' # >>\!
+ '66 68 default' # foo
+ '70 72 redirection' # <<<
+ '73 75 default' # foo
+ '77 78 redirection' # <&
+ '79 79 numeric-fd' # 9
+ '81 82 redirection' # >&
+ '83 83 numeric-fd' # 9
+ '85 86 redirection' # <&
+ '87 87 redirection' # -
+ '89 90 redirection' # >&
+ '91 91 redirection' # -
+ '93 94 redirection' # <&
+ '95 95 redirection' # p
+ '97 98 redirection' # >&
+ '99 99 redirection' # p
+ '101 102 redirection' # >&
+ '103 105 default' # foo
+ '107 108 redirection' # &>
+ '109 111 default' # foo
+ '113 115 redirection' # >&|
+ '116 118 default' # foo
+ '120 122 redirection' # >&\!
+ '123 125 default' # foo
+ '127 129 redirection' # &>|
+ '130 132 default' # foo
+ '134 136 redirection' # &>\!
+ '137 139 default' # foo
+ '141 143 redirection' # >>&
+ '144 146 default' # foo
+ '148 150 redirection' # &>>
+ '151 153 default' # foo
+ '155 158 redirection' # >>&|
+ '159 161 default' # foo
+ '163 166 redirection' # >>&\!
+ '167 169 default' # foo
+ '171 174 redirection' # &>>|
+ '175 177 default' # foo
+ '179 182 redirection' # &>>\!
+ '183 185 default' # foo
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection-comment.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection-comment.zsh
new file mode 100644
index 0000000..a019100
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection-comment.zsh
@@ -0,0 +1,38 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2017 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+setopt interactive_comments
+
+BUFFER=': <<#foo'
+
+expected_region_highlight=(
+ "1 1 builtin" # :
+ "3 4 redirection" # <<
+ "5 8 comment" # #foo
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection-from-param.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection-from-param.zsh
new file mode 100644
index 0000000..42ae638
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection-from-param.zsh
@@ -0,0 +1,40 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+touch file
+local fn=$PWD/file
+
+BUFFER=$'<$fn cat'
+
+expected_region_highlight=(
+ '1 1 redirection' # <
+ '2 4 path' # $fn
+ '6 8 command' # cat
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection-in-cmdsubst.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection-in-cmdsubst.zsh
new file mode 100644
index 0000000..ed5eaef
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection-in-cmdsubst.zsh
@@ -0,0 +1,41 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$': $(<foo)'
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 9 default' # $(<foo)
+ '3 9 command-substitution-unquoted' # $(<foo)
+ '3 4 command-substitution-delimiter-unquoted' # $(
+ '5 5 redirection' # <
+ '6 8 default' # foo
+ '9 9 command-substitution-delimiter-unquoted' # )
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection-inhibits-elision.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection-inhibits-elision.zsh
new file mode 100644
index 0000000..c0ca267
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection-inhibits-elision.zsh
@@ -0,0 +1,38 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'<$foo cat cat'
+
+expected_region_highlight=(
+ '1 1 redirection' # <
+ '2 5 default' # $foo
+ '7 9 command' # cat
+ '11 13 default' # cat
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection-is-not-option.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection-is-not-option.zsh
new file mode 100644
index 0000000..671f21e
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection-is-not-option.zsh
@@ -0,0 +1,38 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$': > -x >> --yy'
+
+expected_region_highlight=(
+ '1 1 builtin' # :
+ '3 3 redirection' # >
+ '5 6 default' # -x
+ '8 9 redirection' # >>
+ '11 14 default' # --yy
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection-special-cases.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection-special-cases.zsh
new file mode 100644
index 0000000..733cf6b
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection-special-cases.zsh
@@ -0,0 +1,44 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2019 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+# See xpandredir() in the zsh source.
+
+BUFFER=$'cat <&p; exec {myfd}>&-'
+
+expected_region_highlight=(
+ '1 3 command' # cat
+ '5 6 redirection' # <&
+ '7 7 redirection' # p
+ '8 8 commandseparator' # ;
+ '10 13 precommand' # exec
+ '15 20 named-fd' # {myfd}
+ '21 22 redirection' # >&
+ '23 23 redirection' # -
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection.zsh
new file mode 100644
index 0000000..6a25971
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection.zsh
@@ -0,0 +1,39 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+# Redirection before and after the command word are implemented differently; test both.
+BUFFER='<<<foo echo >>&!bar'
+
+expected_region_highlight=(
+ "1 3 redirection" # <<<
+ "4 6 default" # foo
+ "8 11 builtin" # echo
+ "13 16 redirection" # >>&!
+ "17 19 default" # bar
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection2.zsh
new file mode 100644
index 0000000..d44c8e7
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection2.zsh
@@ -0,0 +1,41 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='ls >(wc) | nl'
+
+expected_region_highlight=(
+ "1 2 command" # ls
+ "4 8 default" # >(wc)
+ "4 8 process-substitution" # >(wc)
+ "4 5 process-substitution-delimiter" # >(
+ "6 7 command" # wc
+ "8 8 process-substitution-delimiter" # )
+ "10 10 commandseparator" # |
+ "12 13 command" # nl
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection3.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection3.zsh
new file mode 100644
index 0000000..bf062cf
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/redirection3.zsh
@@ -0,0 +1,42 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2017 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=': >>>; : <>\<<<<EOF'
+
+expected_region_highlight=(
+ "1 1 builtin" # :
+ "3 4 redirection" # >>
+ "5 5 unknown-token" # >
+ "6 6 commandseparator" # ;
+ "8 8 builtin" # :
+ "10 11 redirection" # <>
+ "12 13 default" # \<
+ "14 16 redirection" # <<<
+ "17 19 default" # EOF
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/reserved-word.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/reserved-word.zsh
new file mode 100644
index 0000000..aca3796
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/reserved-word.zsh
@@ -0,0 +1,38 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='repeat "1" do done'
+
+expected_region_highlight=(
+ "1 6 reserved-word" # repeat
+ "8 10 default" # "1"
+ "8 10 double-quoted-argument" # "1"
+ "12 13 reserved-word" # do
+ "15 18 reserved-word" # done
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/simple-command.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/simple-command.zsh
new file mode 100644
index 0000000..8bb41fd
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/simple-command.zsh
@@ -0,0 +1,34 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='ls'
+
+expected_region_highlight=(
+ "1 2 command" # ls
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/simple-redirection.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/simple-redirection.zsh
new file mode 100644
index 0000000..fb06f19
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/simple-redirection.zsh
@@ -0,0 +1,38 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='id bob | grep java'
+
+expected_region_highlight=(
+ "1 2 command" # ps
+ "4 6 default" # aux
+ "8 8 commandseparator" # |
+ "10 13 command" # grep
+ "15 18 default" # java
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/subshell.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/subshell.zsh
new file mode 100644
index 0000000..c068013
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/subshell.zsh
@@ -0,0 +1,51 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='tar cf - * | (cd /target; tar xfp -) | { cat }'
+
+expected_region_highlight=(
+ "1 3 command" # tar
+ "5 6 default" # cf
+ "8 8 single-hyphen-option" # -
+ "10 10 default" # *
+ "10 10 globbing" # *
+ "12 12 commandseparator" # |
+ "14 14 reserved-word" # (
+ "15 16 builtin" # cd
+ "18 24 default" # /target
+ "25 25 commandseparator" # ;
+ "27 29 command" # tar
+ "31 33 default" # xfp
+ "35 35 single-hyphen-option" # -
+ "36 36 reserved-word" # )
+ "38 38 commandseparator" # |
+ "40 40 reserved-word" # {
+ "42 44 command" # cat
+ "46 46 reserved-word" # }
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/sudo-command.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/sudo-command.zsh
new file mode 100644
index 0000000..941349a
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/sudo-command.zsh
@@ -0,0 +1,54 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+sudo(){}
+
+# Tests three codepaths:
+# * -i (no argument)
+# * -C3 (pasted argument)
+# * -u otheruser (non-pasted argument)
+BUFFER='sudo -C3 -u otheruser -i ls /; sudo ; sudo -u ; sudo notacommand'
+
+expected_region_highlight=(
+ "1 4 precommand" # sudo
+ "6 8 single-hyphen-option" # -C3
+ "10 11 single-hyphen-option" # -u
+ "13 21 default" # otheruser
+ "23 24 single-hyphen-option" # -i
+ "26 27 command" # ls
+ "29 29 path" # /
+ "30 30 commandseparator" # ;
+ "32 35 precommand" # sudo
+ "37 37 unknown-token" # ;, error because empty command
+ "39 42 precommand" # sudo
+ "44 45 single-hyphen-option" # -u
+ "47 47 unknown-token" # ;, error because incomplete command
+ "49 52 precommand" # sudo
+ "54 64 unknown-token" # notacommand - doesn't falls back to "not a command word" codepath
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/sudo-comment.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/sudo-comment.zsh
new file mode 100644
index 0000000..74cd905
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/sudo-comment.zsh
@@ -0,0 +1,39 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+sudo(){}
+
+setopt interactive_comments
+BUFFER='sudo -u # comment'
+
+expected_region_highlight=(
+ "1 4 precommand" # sudo
+ "6 7 single-hyphen-option" # -u
+ "9 17 unknown-token" # "# comment" - error because argument missed
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/sudo-longopt.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/sudo-longopt.zsh
new file mode 100644
index 0000000..ef768bf
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/sudo-longopt.zsh
@@ -0,0 +1,38 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+hash sudo='false'
+BUFFER='sudo --askpass ls'
+
+expected_region_highlight=(
+ '1 4 precommand' # sudo
+ '6 14 double-hyphen-option' # --askpass
+ '16 17 command' # ls (we don't know whether --askpass takes an argument)
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/sudo-redirection.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/sudo-redirection.zsh
new file mode 100644
index 0000000..c675d7d
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/sudo-redirection.zsh
@@ -0,0 +1,48 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+sudo(){}
+
+BUFFER='sudo -u >/tmp otheruser ls; sudo ls; sudo -i ls'
+
+expected_region_highlight=(
+ "1 4 precommand" # sudo
+ "6 7 single-hyphen-option" # -u
+ "9 9 redirection" # >
+ "10 13 path" # /tmp
+ "15 23 default" # otheruser
+ "25 26 command" # ls
+ "27 27 commandseparator" # ;
+ "29 32 precommand" # sudo
+ "34 35 command" # ls
+ "36 36 commandseparator" # ;
+ "38 41 precommand" # sudo
+ "43 44 single-hyphen-option" # -i
+ "46 47 command" # ls
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/sudo-redirection2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/sudo-redirection2.zsh
new file mode 100644
index 0000000..23ada53
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/sudo-redirection2.zsh
@@ -0,0 +1,41 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+sudo(){}
+
+BUFFER='sudo >/tmp -u otheruser ls'
+
+expected_region_highlight=(
+ "1 4 precommand" # sudo
+ "6 6 redirection" # >
+ "7 10 path" # /tmp
+ "12 13 single-hyphen-option" # -u
+ "15 23 default" # otheruser
+ "25 26 command" # ls
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/sudo-redirection3.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/sudo-redirection3.zsh
new file mode 100644
index 0000000..80e55b5
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/sudo-redirection3.zsh
@@ -0,0 +1,41 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+sudo(){}
+
+BUFFER='sudo 2>./. -u otheruser ls'
+
+expected_region_highlight=(
+ "1 4 precommand" # sudo
+ "6 7 redirection" # 2>
+ "8 10 path" # ./. # a 3-character path, for alignment with sudo-redirection2.zsh
+ "12 13 single-hyphen-option" # -u
+ "15 23 default" # otheruser
+ "25 26 command" # ls
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/tilde-command-word.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/tilde-command-word.zsh
new file mode 100644
index 0000000..67c996c
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/tilde-command-word.zsh
@@ -0,0 +1,37 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+hash -d D=/usr/bin
+
+BUFFER='~D/env foo'
+
+expected_region_highlight=(
+ "1 6 command" # ~D/env [= /usr/bin/env
+ "8 10 default" # foo
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/time-and-nocorrect1.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/time-and-nocorrect1.zsh
new file mode 100644
index 0000000..fb398ed
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/time-and-nocorrect1.zsh
@@ -0,0 +1,39 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2019 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'time ls; nocorrect ls'
+
+expected_region_highlight=(
+ '1 4 reserved-word' # time
+ '6 7 command' # ls
+ '8 8 commandseparator' # ;
+ '10 18 reserved-word' # nocorrect
+ '20 21 command' # ls
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/time-and-nocorrect2.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/time-and-nocorrect2.zsh
new file mode 100644
index 0000000..5549ee9
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/time-and-nocorrect2.zsh
@@ -0,0 +1,40 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2019 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER=$'time ls; nocorrect ls'
+alias time=':' nocorrect=':'
+
+expected_region_highlight=(
+ '1 4 alias' # time
+ '6 7 default' # ls
+ '8 8 commandseparator' # ;
+ '10 18 alias' # nocorrect
+ '20 21 default' # ls
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/unbackslash.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/unbackslash.zsh
new file mode 100644
index 0000000..c8dfbd4
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/unbackslash.zsh
@@ -0,0 +1,34 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='\sh'
+
+expected_region_highlight=(
+ "1 3 command" # \sh (runs 'sh', bypassing aliases)
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/unknown-command.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/unknown-command.zsh
new file mode 100644
index 0000000..e71faec
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/unknown-command.zsh
@@ -0,0 +1,34 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='azertyuiop'
+
+expected_region_highlight=(
+ "1 10 unknown-token" # azertyuiop
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/vanilla-newline.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/vanilla-newline.zsh
new file mode 100644
index 0000000..bd60ad4
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/vanilla-newline.zsh
@@ -0,0 +1,39 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+PREBUFFER=$'echo foo; echo bar\n\n\n'
+BUFFER=' echo baz; echo qux'
+
+expected_region_highlight=(
+ "2 5 builtin" # echo
+ "7 9 default" # baz
+ "10 10 commandseparator" # semicolon
+ "12 15 builtin" # echo
+ "17 19 default" # qux
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/vi-linewise-mode.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/vi-linewise-mode.zsh
new file mode 100644
index 0000000..7003c49
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/main/test-data/vi-linewise-mode.zsh
@@ -0,0 +1,43 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+# See issue #267 for the magic numbers
+BUFFER=$'foo foo\nbar bar'
+REGION_ACTIVE=2
+CURSOR=4
+MARK=12
+
+expected_region_highlight=(
+ "1 3 unknown-token" # foo
+ "5 7 default" # foo
+ "8 8 commandseparator" # \n
+ "9 11 unknown-token" # bar
+ "13 15 default" # bar
+ "1 15 standout" # foo foo\nbar bar
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/pattern/README.md b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/pattern/README.md
new file mode 120000
index 0000000..5ff00e6
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/pattern/README.md
@@ -0,0 +1 @@
+../../docs/highlighters/pattern.md \ No newline at end of file
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/pattern/pattern-highlighter.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/pattern/pattern-highlighter.zsh
new file mode 100644
index 0000000..e0422d0
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/pattern/pattern-highlighter.zsh
@@ -0,0 +1,60 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+
+# List of keyword and color pairs.
+typeset -gA ZSH_HIGHLIGHT_PATTERNS
+
+# Whether the pattern highlighter should be called or not.
+_zsh_highlight_highlighter_pattern_predicate()
+{
+ _zsh_highlight_buffer_modified
+}
+
+# Pattern syntax highlighting function.
+_zsh_highlight_highlighter_pattern_paint()
+{
+ setopt localoptions extendedglob
+ local pattern
+ for pattern in ${(k)ZSH_HIGHLIGHT_PATTERNS}; do
+ _zsh_highlight_pattern_highlighter_loop "$BUFFER" "$pattern"
+ done
+}
+
+_zsh_highlight_pattern_highlighter_loop()
+{
+ # This does *not* do its job syntactically, sorry.
+ local buf="$1" pat="$2"
+ local -a match mbegin mend
+ local MATCH; integer MBEGIN MEND
+ if [[ "$buf" == (#b)(*)(${~pat})* ]]; then
+ region_highlight+=("$((mbegin[2] - 1)) $mend[2] $ZSH_HIGHLIGHT_PATTERNS[$pat], memo=zsh-syntax-highlighting")
+ "$0" "$match[1]" "$pat"; return $?
+ fi
+}
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/pattern/test-data/rm-rf.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/pattern/test-data/rm-rf.zsh
new file mode 100644
index 0000000..2f76929
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/pattern/test-data/rm-rf.zsh
@@ -0,0 +1,36 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red')
+
+BUFFER='rm -rf /'
+
+expected_region_highlight=(
+ "1 8 fg=white,bold,bg=red" # rm -rf /
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/regexp/README.md b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/regexp/README.md
new file mode 120000
index 0000000..9f2522d
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/regexp/README.md
@@ -0,0 +1 @@
+../../docs/highlighters/regexp.md \ No newline at end of file
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/regexp/regexp-highlighter.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/regexp/regexp-highlighter.zsh
new file mode 100644
index 0000000..0d43aac
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/regexp/regexp-highlighter.zsh
@@ -0,0 +1,62 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2010-2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+
+# List of keyword and color pairs.
+typeset -gA ZSH_HIGHLIGHT_REGEXP
+
+# Whether the pattern highlighter should be called or not.
+_zsh_highlight_highlighter_regexp_predicate()
+{
+ _zsh_highlight_buffer_modified
+}
+
+# Pattern syntax highlighting function.
+_zsh_highlight_highlighter_regexp_paint()
+{
+ setopt localoptions extendedglob
+ local pattern
+ for pattern in ${(k)ZSH_HIGHLIGHT_REGEXP}; do
+ _zsh_highlight_regexp_highlighter_loop "$BUFFER" "$pattern"
+ done
+}
+
+_zsh_highlight_regexp_highlighter_loop()
+{
+ local buf="$1" pat="$2"
+ integer OFFSET=0
+ local MATCH; integer MBEGIN MEND
+ local -a match mbegin mend
+ while true; do
+ [[ "$buf" =~ "$pat" ]] || return;
+ region_highlight+=("$((MBEGIN - 1 + OFFSET)) $((MEND + OFFSET)) $ZSH_HIGHLIGHT_REGEXP[$pat], memo=zsh-syntax-highlighting")
+ buf="$buf[$(($MEND+1)),-1]"
+ OFFSET=$((MEND+OFFSET));
+ done
+}
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/regexp/test-data/complex.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/regexp/test-data/complex.zsh
new file mode 100644
index 0000000..4e0089b
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/regexp/test-data/complex.zsh
@@ -0,0 +1,37 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+ZSH_HIGHLIGHT_REGEXP+=('[0-9\+\-]+' 'fg=white,bold,bg=red')
+
+BUFFER='echo 1+9-3 7+2'
+
+expected_region_highlight=(
+ "6 10 fg=white,bold,bg=red"
+ "12 14 fg=white,bold,bg=red"
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/regexp/test-data/subexpression.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/regexp/test-data/subexpression.zsh
new file mode 100644
index 0000000..308cb41
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/regexp/test-data/subexpression.zsh
@@ -0,0 +1,36 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2018 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+BUFFER='ls foo'
+ZSH_HIGHLIGHT_REGEXP=('(^| )(ls|cd)($| )' 'fg=green')
+
+expected_region_highlight=(
+ '1 3 fg=green' # "ls "
+)
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/regexp/test-data/word-boundary.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/regexp/test-data/word-boundary.zsh
new file mode 100644
index 0000000..1f4f666
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/regexp/test-data/word-boundary.zsh
@@ -0,0 +1,42 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+if zmodload zsh/pcre 2>/dev/null; then
+ setopt RE_MATCH_PCRE
+
+ ZSH_HIGHLIGHT_REGEXP+=('\bsudo\b' 'fg=white,bold,bg=red')
+
+ BUFFER='sudo ls'
+
+ expected_region_highlight=(
+ "1 4 fg=white,bold,bg=red"
+ )
+else
+ skip_test='Test requires zsh/pcre'
+fi
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/root/README.md b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/root/README.md
new file mode 120000
index 0000000..ca6799d
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/root/README.md
@@ -0,0 +1 @@
+../../docs/highlighters/root.md \ No newline at end of file
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/root/root-highlighter.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/root/root-highlighter.zsh
new file mode 100644
index 0000000..3718c44
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/highlighters/root/root-highlighter.zsh
@@ -0,0 +1,44 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+
+# Define default styles.
+: ${ZSH_HIGHLIGHT_STYLES[root]:=standout}
+
+# Whether the root highlighter should be called or not.
+_zsh_highlight_highlighter_root_predicate()
+{
+ _zsh_highlight_buffer_modified
+}
+
+# root highlighting function.
+_zsh_highlight_highlighter_root_paint()
+{
+ if (( EUID == 0 )) { _zsh_highlight_add_highlight 0 $#BUFFER root }
+}
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/after1-smaller.png b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/after1-smaller.png
new file mode 100644
index 0000000..768294c
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/after1-smaller.png
Binary files differ
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/after1.png b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/after1.png
new file mode 100644
index 0000000..ea378d3
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/after1.png
Binary files differ
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/after2-smaller.png b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/after2-smaller.png
new file mode 100644
index 0000000..8b5b1f8
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/after2-smaller.png
Binary files differ
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/after2.png b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/after2.png
new file mode 100644
index 0000000..ddcbfad
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/after2.png
Binary files differ
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/after3-smaller.png b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/after3-smaller.png
new file mode 100644
index 0000000..d6aaa7b
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/after3-smaller.png
Binary files differ
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/after3.png b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/after3.png
new file mode 100644
index 0000000..7a0af88
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/after3.png
Binary files differ
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/after4-smaller.png b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/after4-smaller.png
new file mode 100644
index 0000000..fc946cf
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/after4-smaller.png
Binary files differ
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/before1-smaller.png b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/before1-smaller.png
new file mode 100644
index 0000000..b29551e
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/before1-smaller.png
Binary files differ
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/before1.png b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/before1.png
new file mode 100644
index 0000000..80c6f54
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/before1.png
Binary files differ
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/before2-smaller.png b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/before2-smaller.png
new file mode 100644
index 0000000..991a716
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/before2-smaller.png
Binary files differ
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/before2.png b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/before2.png
new file mode 100644
index 0000000..48cfc32
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/before2.png
Binary files differ
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/before3-smaller.png b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/before3-smaller.png
new file mode 100644
index 0000000..e525c6d
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/before3-smaller.png
Binary files differ
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/before3.png b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/before3.png
new file mode 100644
index 0000000..40c3601
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/before3.png
Binary files differ
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/before4-smaller.png b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/before4-smaller.png
new file mode 100644
index 0000000..2dbd058
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/before4-smaller.png
Binary files differ
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/preview-smaller.png b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/preview-smaller.png
new file mode 100644
index 0000000..6fb84d1
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/preview-smaller.png
Binary files differ
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/preview.png b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/preview.png
new file mode 100644
index 0000000..545cc51
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/images/preview.png
Binary files differ
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/release.md b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/release.md
new file mode 100644
index 0000000..f8565e8
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/release.md
@@ -0,0 +1,21 @@
+# Release procedure (for developers):
+
+- Ensure every `is-at-least` invocation passes a stable zsh release's version number as the first argument
+- For minor (A.B.0) releases:
+ - Check whether the release uses any not-yet-released zsh features
+- Check open issues and outstanding pull requests
+- Confirm `make test` passes
+ - check with multiple zsh versions
+ (easiest to check GitHub Actions: https://github.com/zsh-users/zsh-syntax-highlighting/actions)
+- Update changelog.md
+ `tig --abbrev=12 --abbrev-commit 0.4.1..upstream/master`
+- Make sure there are no local commits and that `git status` is clean;
+ Remove `-dev` suffix from `./.version`;
+ Commit that using `git commit -m "Tag version $(<.version)." .version`;
+ Tag it using `git tag -s -m "Tag version $(<.version)" $(<.version)`;
+ Increment `./.version` and restore the `-dev` suffix;
+ Commit that using `git commit -C b5c30ae52638e81a38fe5329081c5613d7bd6ca5 .version`.
+- Push with `git push && git push --tags`
+- Notify downstreams (OS packages)
+ - anitya should autodetect the tag
+- Update /topic on IRC
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/tests/README.md b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/tests/README.md
new file mode 100644
index 0000000..eefeb54
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/tests/README.md
@@ -0,0 +1,124 @@
+zsh-syntax-highlighting / tests
+===============================
+
+Utility scripts for testing zsh-syntax-highlighting highlighters.
+
+The tests harness expects the highlighter directory to contain a `test-data`
+directory with test data files.
+See the [main highlighter](../highlighters/main/test-data) for examples.
+
+Tests should set the following variables:
+
+1.
+Each test should define the string `$BUFFER` that is to be highlighted and the
+array parameter `$expected_region_highlight`.
+The value of that parameter is a list of strings of the form `"$i $j $style"`.
+or `"$i $j $style $todo"`.
+Each string specifies the highlighting that `$BUFFER[$i,$j]` should have;
+that is, `$i` and `$j` specify a range, 1-indexed, inclusive of both endpoints.
+`$style` is a key of `$ZSH_HIGHLIGHT_STYLES`.
+If `$todo` exists, the test point is marked as TODO (the failure of that test
+point will not fail the test), and `$todo` is used as the explanation.
+
+2.
+If a test sets `$skip_test` to a non-empty string, the test will be skipped
+with the provided string as the reason.
+
+3.
+If a test sets `$fail_test` to a non-empty string, the test will be skipped
+with the provided string as the reason.
+
+4.
+If a test sets `unsorted=1` the order of highlights in `$expected_region_highlight`
+need not match the order in `$region_highlight`.
+
+5.
+Normally, tests fail if `$expected_region_highlight` and `$region_highlight`
+have different numbers of elements. To mark this check as expected to fail,
+tests may set `$expected_mismatch` to an explanation string (like `$todo`);
+this is useful when the only difference between actual and expected is that actual
+has some additional, superfluous elements. This check is skipped if the
+`$todo` component is present in any regular test point.
+
+**Note**: `$region_highlight` uses the same `"$i $j $style"` syntax but
+interprets the indexes differently.
+
+**Note**: Tests are run with `setopt NOUNSET WARN_CREATE_GLOBAL`, so any
+variables the test creates must be declared local.
+
+**Isolation**: Each test is run in a separate subshell, so any variables,
+aliases, functions, etc., it defines will be visible to the tested code (that
+computes `$region_highlight`), but will not affect subsequent tests. The
+current working directory of tests is set to a newly-created empty directory,
+which is automatically cleaned up after the test exits. For example:
+
+```zsh
+setopt PATH_DIRS
+mkdir -p foo/bar
+touch foo/bar/testing-issue-228
+chmod +x foo/bar/testing-issue-228
+path+=( "$PWD"/foo )
+
+BUFFER='bar/testing-issue-228'
+
+expected_region_highlight=(
+ "1 21 command" # bar/testing-issue-228
+)
+```
+
+
+Writing new tests
+-----------------
+
+An experimental tool is available to generate test files:
+
+```zsh
+zsh -f tests/generate.zsh 'ls -x' acme newfile
+```
+
+This generates a `highlighters/acme/test-data/newfile.zsh` test file based on
+the current highlighting of the given `$BUFFER` (in this case, `ls -x`).
+
+_This tool is experimental._ Its interface may change. In particular it may
+grow ways to set `$PREBUFFER` to inject free-form code into the generated file.
+
+
+Highlighting test
+-----------------
+
+[`test-highlighting.zsh`](tests/test-highlighting.zsh) tests the correctness of
+the highlighting. Usage:
+
+```zsh
+zsh test-highlighting.zsh <HIGHLIGHTER NAME>
+```
+
+All tests may be run with
+
+```zsh
+make test
+```
+
+which will run all highlighting tests and report results in [TAP format][TAP].
+By default, the results of all tests will be printed; to show only "interesting"
+results (tests that failed but were expected to succeed, or vice-versa), run
+`make quiet-test` (or `make test QUIET=y`).
+
+[TAP]: https://testanything.org/
+
+
+Performance test
+----------------
+
+[`test-perfs.zsh`](tests/test-perfs.zsh) measures the time spent doing the
+highlighting. Usage:
+
+```zsh
+zsh test-perfs.zsh <HIGHLIGHTER NAME>
+```
+
+All tests may be run with
+
+```zsh
+make perf
+```
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/tests/edit-failed-tests b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/tests/edit-failed-tests
new file mode 100755
index 0000000..e3a7668
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/tests/edit-failed-tests
@@ -0,0 +1,40 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+type perl sponge >/dev/null || { print -ru2 -- "$0: This script requires perl(1) and sponge(1) [from moreutils]"; exit 1; }
+
+local editor=( "${(@Q)${(z)${VISUAL:-${EDITOR:-vi}}}}" )
+() {
+ > "$2" perl -nE '$highlighter = $1 if /^Running test (\S*)/; say "highlighters/${highlighter}/test-data/$1.zsh" if /^## (\S*)/' "$1"
+ >>"$2" echo ""
+ >>"$2" cat <"$1"
+ "${editor[@]}" -- "$2"
+} =(${MAKE:-make} quiet-test) =(:)
+# TODO: tee(1) the quiet-test output to /dev/tty as it's happening, with colors.
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/tests/generate.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/tests/generate.zsh
new file mode 100755
index 0000000..5696020
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/tests/generate.zsh
@@ -0,0 +1,117 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2016 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+emulate -LR zsh
+setopt localoptions extendedglob
+
+# Required for add-zle-hook-widget.
+zmodload zsh/zle
+
+# Argument parsing.
+if (( $# * $# - 7 * $# + 12 )) || [[ $1 == -* ]]; then
+ print -r -- >&2 "$0: usage: $0 BUFFER HIGHLIGHTER BASENAME [PREAMBLE]"
+ print -r -- >&2 ""
+ print -r -- >&2 "Generate highlighters/HIGHLIGHTER/test-data/BASENAME.zsh based on the"
+ print -r -- >&2 "current highlighting of BUFFER, using the setup code PREAMBLE."
+ exit 1
+fi
+buffer=$1
+ZSH_HIGHLIGHT_HIGHLIGHTERS=( $2 )
+fname=${0:A:h:h}/highlighters/$2/test-data/${3%.zsh}.zsh
+preamble=${4:-""}
+
+# Load the main script.
+. ${0:A:h:h}/zsh-syntax-highlighting.zsh
+
+# Overwrite _zsh_highlight_add_highlight so we get the key itself instead of the style
+_zsh_highlight_add_highlight()
+{
+ region_highlight+=("$1 $2 $3")
+}
+
+
+# Copyright block
+year="`LC_ALL=C date +%Y`"
+if ! { read -q "?Set copyright year to $year? " } always { echo "" }; then
+ year="YYYY"
+fi
+<$0 sed -n -e '1,/^$/p' | sed -e "s/2[0-9][0-9][0-9]/${year}/" > $fname
+# Assumes stdout is line-buffered
+git add -- $fname
+exec > >(tee -a $fname)
+
+# Preamble
+if [[ -n $preamble ]]; then
+ print -rl -- "$preamble" ""
+fi
+
+# Buffer
+print -n 'BUFFER='
+if [[ $buffer != (#s)[$'\t -~']#(#e) ]]; then
+ print -r -- ${(qqqq)buffer}
+else
+ print -r -- ${(qq)buffer}
+fi
+echo ""
+
+# Expectations
+print 'expected_region_highlight=('
+() {
+ local i
+ local PREBUFFER
+ local BUFFER
+
+ PREBUFFER=""
+ BUFFER="$buffer"
+ region_highlight=()
+ eval $(
+ exec 3>&1 >/dev/null
+ typeset -r __tests_tmpdir="$(mktemp -d)"
+ {
+ # Use a subshell to ensure $__tests_tmpdir, which is to be rm -rf'd, won't be modified.
+ (cd -- "$__tests_tmpdir" && eval $preamble && _zsh_highlight && typeset -p region_highlight >&3)
+ : # workaround zsh bug workers/45305 with respect to the $(…) subshell we're in
+ } always {
+ rm -rf -- ${__tests_tmpdir}
+ }
+ )
+
+ for ((i=1; i<=${#region_highlight}; i++)); do
+ local -a highlight_zone; highlight_zone=( ${(z)region_highlight[$i]} )
+ integer start=$highlight_zone[1] end=$highlight_zone[2]
+ if (( start < end )) # region_highlight ranges are half-open
+ then
+ (( --end )) # convert to closed range, like expected_region_highlight
+ (( ++start, ++end )) # region_highlight is 0-indexed; expected_region_highlight is 1-indexed
+ fi
+ printf " %s # %s\n" ${(qq):-"$start $end $highlight_zone[3]"} ${${(qqqq)BUFFER[start,end]}[3,-2]}
+ done
+}
+print ')'
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/tests/tap-colorizer.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/tests/tap-colorizer.zsh
new file mode 100755
index 0000000..f3dc84e
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/tests/tap-colorizer.zsh
@@ -0,0 +1,71 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015, 2017 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+# This is a stdin-to-stdout filter that takes TAP output (such as 'make test')
+# on stdin and passes it, colorized, to stdout.
+
+emulate -LR zsh
+
+if [[ ! -t 1 ]] ; then
+ exec cat
+fi
+
+while read -r line;
+do
+ case $line in
+ # comment (filename header) or plan
+ (#* | <->..<->)
+ print -nP %F{blue}
+ ;;
+ # SKIP
+ (*# SKIP*)
+ print -nP %F{yellow}
+ ;;
+ # XPASS
+ (ok*# TODO*)
+ print -nP %F{red}
+ ;;
+ # XFAIL
+ (not ok*# TODO*)
+ print -nP %F{yellow}
+ ;;
+ # FAIL
+ (not ok*)
+ print -nP %F{red}
+ ;;
+ # PASS
+ (ok*)
+ print -nP %F{green}
+ ;;
+ esac
+ print -nr - "$line"
+ print -nP %f
+ echo "" # newline
+done
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/tests/tap-filter b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/tests/tap-filter
new file mode 100755
index 0000000..f9aa604
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/tests/tap-filter
@@ -0,0 +1,47 @@
+#!/usr/bin/env perl
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# vim: ft=perl sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+# This is a stdin-to-stdout filter that takes TAP output (such as 'make test')
+# on stdin and deletes lines pertaining to expected results.
+#
+# More specifically, if any of the test points in a test file either failed but
+# was expected to pass, or passed but was expected to fail, then emit that test
+# file's output; else, elide that test file's output.
+
+use v5.10.0;
+use warnings;
+use strict;
+
+undef $/; # slurp mode
+print for
+ grep { /^ok.*# TODO/m or /^not ok(?!.*# TODO)/m or /^Bail out!/m }
+ # Split on plan lines and remove them from the output. (To keep them,
+ # use the lookahead syntax, «(?=…)», to make the match zero-length.)
+ split /^\d+\.\.\d+$/m,
+ <STDIN>;
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/tests/test-highlighting.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/tests/test-highlighting.zsh
new file mode 100755
index 0000000..8b564a8
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/tests/test-highlighting.zsh
@@ -0,0 +1,291 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2010-2017 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+
+setopt NO_UNSET WARN_CREATE_GLOBAL
+
+# Required for add-zle-hook-widget.
+zmodload zsh/zle
+
+local -r root=${0:h:h}
+local -a anon_argv; anon_argv=("$@")
+
+(){
+set -- "${(@)anon_argv}"
+# Check an highlighter was given as argument.
+[[ -n "$1" ]] || {
+ echo >&2 "Bail out! You must provide the name of a valid highlighter as argument."
+ exit 2
+}
+
+# Check the highlighter is valid.
+[[ -f $root/highlighters/$1/$1-highlighter.zsh ]] || {
+ echo >&2 "Bail out! Could not find highlighter ${(qq)1}."
+ exit 2
+}
+
+# Check the highlighter has test data.
+[[ -d $root/highlighters/$1/test-data ]] || {
+ echo >&2 "Bail out! Highlighter ${(qq)1} has no test data."
+ exit 2
+}
+
+# Set up results_filter
+local results_filter
+if [[ ${QUIET-} == y ]]; then
+ if type -w perl >/dev/null; then
+ results_filter=$root/tests/tap-filter
+ else
+ echo >&2 "Bail out! quiet mode not supported: perl not found"; exit 2
+ fi
+else
+ results_filter=cat
+fi
+[[ -n $results_filter ]] || { echo >&2 "Bail out! BUG setting \$results_filter"; exit 2 }
+
+# Load the main script.
+# While here, test that it doesn't eat aliases.
+print > >($results_filter | $root/tests/tap-colorizer.zsh) -r -- "# global (driver) tests"
+print > >($results_filter | $root/tests/tap-colorizer.zsh) -r -- "1..1"
+alias -- +plus=plus
+alias -- _other=other
+local original_alias_dash_L_output="$(alias -L)"
+. $root/zsh-syntax-highlighting.zsh
+if [[ $original_alias_dash_L_output == $(alias -L) ]]; then
+ print -r -- "ok 1 # 'alias -- +foo=bar' is preserved"
+else
+ print -r -- "not ok 1 # 'alias -- +foo=bar' is preserved"
+ exit 1
+fi > >($results_filter | $root/tests/tap-colorizer.zsh)
+
+# Overwrite _zsh_highlight_add_highlight so we get the key itself instead of the style
+_zsh_highlight_add_highlight()
+{
+ region_highlight+=("$1 $2 $3")
+}
+
+# Activate the highlighter.
+ZSH_HIGHLIGHT_HIGHLIGHTERS=($1)
+
+# In zsh<5.3, 'typeset -p arrayvar' emits two lines, so we use this wrapper instead.
+typeset_p() {
+ for 1 ; do
+ if [[ ${(tP)1} == *array* ]]; then
+ print -r -- "$1=( ${(@qqqqP)1} )"
+ else
+ print -r -- "$1=${(qqqqP)1}"
+ fi
+ done
+}
+
+# Escape # as ♯ and newline as ↵ they are illegal in the 'description' part of TAP output
+# The string to escape is «"$@"»; the result is returned in $REPLY.
+tap_escape() {
+ local s="${(j. .)@}"
+ REPLY="${${s//'#'/♯}//$'\n'/↵}"
+}
+
+# Runs a highlighting test
+# $1: data file
+run_test_internal() {
+
+ local tests_tempdir="$1"; shift
+ local srcdir="$PWD"
+ builtin cd -q -- "$tests_tempdir" || { echo >&2 "Bail out! On ${(qq)1}: cd failed: $?"; return 1 }
+
+ # Load the data and prepare checking it.
+ local BUFFER CURSOR MARK PENDING PREBUFFER REGION_ACTIVE WIDGET REPLY skip_test fail_test unsorted=0
+ local expected_mismatch
+ local skip_mismatch
+ local -a expected_region_highlight region_highlight
+
+ local ARG="$1"
+ local RETURN=""
+ () {
+ setopt localoptions
+
+ # WARNING: The remainder of this anonymous function will run with the test's options in effect
+ if { ! . "$srcdir"/"$ARG" } || (( $#fail_test )); then
+ print -r -- "1..1"
+ print -r -- "## ${ARG:t:r}"
+ tap_escape $fail_test; fail_test=$REPLY
+ print -r -- "not ok 1 - failed setup: $fail_test"
+ return ${RETURN:=0}
+ fi
+
+ (( $#skip_test )) && {
+ print -r -- "1..0 # SKIP $skip_test"
+ print -r -- "## ${ARG:t:r}"
+ return ${RETURN:=0}
+ }
+
+ # Check the data declares $PREBUFFER or $BUFFER.
+ [[ -z $PREBUFFER && -z $BUFFER ]] && { echo >&2 "Bail out! On ${(qq)ARG}: Either 'PREBUFFER' or 'BUFFER' must be declared and non-blank"; return ${RETURN:=1}; }
+ [[ $PREBUFFER == (''|*$'\n') ]] || { echo >&2 "Bail out! On ${(qq)ARG}: PREBUFFER=${(qqqq)PREBUFFER} doesn't end with a newline"; return ${RETURN:=1}; }
+
+ # Set sane defaults for ZLE variables
+ : ${CURSOR=$#BUFFER} ${PENDING=0} ${WIDGET=z-sy-h-test-harness-test-widget}
+
+ # Process the data.
+ _zsh_highlight
+ }; [[ -z $RETURN ]] || return $RETURN
+ unset ARG
+
+ integer print_expected_and_actual=0
+
+ if (( unsorted )); then
+ region_highlight=("${(@n)region_highlight}")
+ expected_region_highlight=("${(@n)expected_region_highlight}")
+ fi
+
+ # Print the plan line, and some comments for human readers
+ echo "1..$(( $#expected_region_highlight + 1))"
+ echo "## ${1:t:r}" # note: tests/edit-failed-tests looks for the "##" emitted by this line
+ [[ -n $PREBUFFER ]] && printf '# %s\n' "$(typeset_p PREBUFFER)"
+ [[ -n $BUFFER ]] && printf '# %s\n' "$(typeset_p BUFFER)"
+
+ local i
+ for ((i=1; i<=$#expected_region_highlight; i++)); do
+ local -a expected_highlight_zone; expected_highlight_zone=( ${(z)expected_region_highlight[i]} )
+ integer exp_start=$expected_highlight_zone[1] exp_end=$expected_highlight_zone[2]
+ local todo=
+ if (( $+expected_highlight_zone[4] )); then
+ todo="# TODO $expected_highlight_zone[4]"
+ skip_mismatch="cardinality check disabled whilst regular test points are expected to fail"
+ fi
+ if ! (( $+region_highlight[i] )); then
+ print -r -- "not ok $i - unmatched expectation ($exp_start $exp_end $expected_highlight_zone[3])" \
+ "${skip_mismatch:+"# TODO ${(qqq)skip_mismatch}"}"
+ if [[ -z $skip_mismatch ]]; then (( ++print_expected_and_actual )); fi
+ continue
+ fi
+ local -a highlight_zone; highlight_zone=( ${(z)region_highlight[i]} )
+ integer start=$(( highlight_zone[1] + 1 )) end=$highlight_zone[2]
+ local desc="[$start,$end] «${BUFFER[$start,$end]}»"
+ tap_escape $desc; desc=$REPLY
+ if
+ [[ $start != $exp_start ]] ||
+ [[ $end != $exp_end ]] ||
+ [[ ${highlight_zone[3]%,} != ${expected_highlight_zone[3]} ]] # remove the comma that's before the memo field
+ then
+ print -r -- "not ok $i - $desc - expected ($exp_start $exp_end ${(qqq)expected_highlight_zone[3]}), observed ($start $end ${(qqq)highlight_zone[3]}). $todo"
+ if [[ -z $todo ]]; then (( ++print_expected_and_actual )); fi
+ else
+ print -r -- "ok $i - $desc${todo:+ - }$todo"
+ fi
+ unset expected_highlight_zone
+ unset exp_start exp_end
+ unset todo
+ unset highlight_zone
+ unset start end
+ unset desc
+ done
+
+ # If both $skip_mismatch and $expected_mismatch are set, that means the test
+ # has some XFail test points, _and_ explicitly sets $expected_mismatch as
+ # well. Explicit settings should have priority, so we ignore $skip_mismatch
+ # if $expected_mismatch is set.
+ if [[ -n $skip_mismatch && -z $expected_mismatch ]]; then
+ tap_escape $skip_mismatch; skip_mismatch=$REPLY
+ print "ok $i - cardinality check" "# SKIP $skip_mismatch"
+ else
+ local todo
+ if [[ -n $expected_mismatch ]]; then
+ tap_escape $expected_mismatch; expected_mismatch=$REPLY
+ todo="# TODO $expected_mismatch"
+ fi
+ if (( $#expected_region_highlight == $#region_highlight )); then
+ print -r -- "ok $i - cardinality check${todo:+ - }$todo"
+ else
+ local details
+ details+="have $#expected_region_highlight expectations and $#region_highlight region_highlight entries: "
+ details+="«$(typeset_p expected_region_highlight)» «$(typeset_p region_highlight)»"
+ tap_escape $details; details=$REPLY
+ print -r -- "not ok $i - cardinality check - $details${todo:+ - }$todo"
+ if [[ -z $todo ]]; then (( ++print_expected_and_actual )); fi
+ fi
+ fi
+ if (( print_expected_and_actual )); then
+ () {
+ local -a left_column right_column
+ left_column=( "expected_region_highlight" "${(qq)expected_region_highlight[@]}" )
+ right_column=( "region_highlight" "${(qq)region_highlight[@]}" )
+ integer difference=$(( $#right_column - $#left_column ))
+ repeat $difference do left_column+=(.); done
+ paste \
+ =(print -rC1 -- $left_column) \
+ =(print -rC1 -- $right_column) \
+ | if type column >/dev/null; then column -t -s $'\t'; else cat; fi \
+ | sed 's/^/# /'
+ }
+ fi
+}
+
+# Run a single test file. The exit status is 1 if the test harness had
+# an error and 0 otherwise. The exit status does not depend on whether
+# test points succeeded or failed.
+run_test() {
+ # Do not combine the declaration and initialization: «local x="$(false)"» does not set $?.
+ local __tests_tempdir
+ __tests_tempdir="$(mktemp -d)" && [[ -d $__tests_tempdir ]] || {
+ echo >&2 "Bail out! mktemp failed"; return 1
+ }
+ typeset -r __tests_tempdir # don't allow tests to override the variable that we will 'rm -rf' later on
+
+ {
+ # Use a subshell to isolate tests from each other.
+ # (So tests can alter global shell state using 'cd', 'hash', etc)
+ {
+ # These braces are so multios don't come into play.
+ { (run_test_internal "$__tests_tempdir" "$@") 3>&1 >&2 2>&3 } | grep \^
+ local ret=$pipestatus[1] stderr=$pipestatus[2]
+ if (( ! stderr )); then
+ # stdout will become stderr
+ echo "Bail out! On ${(qq)1}: output on stderr"; return 1
+ else
+ return $ret
+ fi
+ } 3>&1 >&2 2>&3
+ } always {
+ rm -rf -- "$__tests_tempdir"
+ }
+}
+
+# Process each test data file in test data directory.
+integer something_failed=0
+ZSH_HIGHLIGHT_STYLES=()
+local data_file
+for data_file in $root/highlighters/$1/test-data/*.zsh; do
+ run_test "$data_file" | tee >($results_filter | $root/tests/tap-colorizer.zsh) | grep -v '^not ok.*# TODO' | grep -Eq '^not ok|^ok.*# TODO' && (( something_failed=1 ))
+ (( $pipestatus[1] )) && exit 2
+done
+
+exit $something_failed
+}
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/tests/test-perfs.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/tests/test-perfs.zsh
new file mode 100755
index 0000000..aa139aa
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/tests/test-perfs.zsh
@@ -0,0 +1,103 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2010-2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+
+# Required for add-zle-hook-widget.
+zmodload zsh/zle
+
+# Check an highlighter was given as argument.
+[[ -n "$1" ]] || {
+ echo >&2 "Bail out! You must provide the name of a valid highlighter as argument."
+ exit 2
+}
+
+# Check the highlighter is valid.
+[[ -f ${0:h:h}/highlighters/$1/$1-highlighter.zsh ]] || {
+ echo >&2 "Bail out! Could not find highlighter ${(qq)1}."
+ exit 2
+}
+
+# Check the highlighter has test data.
+[[ -d ${0:h:h}/highlighters/$1/test-data ]] || {
+ echo >&2 "Bail out! Highlighter ${(qq)1} has no test data."
+ exit 2
+}
+
+# Load the main script.
+typeset -a region_highlight
+. ${0:h:h}/zsh-syntax-highlighting.zsh
+
+# Activate the highlighter.
+ZSH_HIGHLIGHT_HIGHLIGHTERS=($1)
+
+# Runs a highlighting test
+# $1: data file
+run_test_internal() {
+ local -a highlight_zone
+
+ local tests_tempdir="$1"; shift
+ local srcdir="$PWD"
+ builtin cd -q -- "$tests_tempdir" || { echo >&2 "Bail out! cd failed: $?"; return 1 }
+
+ # Load the data and prepare checking it.
+ PREBUFFER= BUFFER= ;
+ . "$srcdir"/"$1"
+
+ # Check the data declares $PREBUFFER or $BUFFER.
+ [[ -z $PREBUFFER && -z $BUFFER ]] && { echo >&2 "Bail out! Either 'PREBUFFER' or 'BUFFER' must be declared and non-blank"; return 1; }
+
+ # Set $? for _zsh_highlight
+ true && _zsh_highlight
+}
+
+run_test() {
+ # Do not combine the declaration and initialization: «local x="$(false)"» does not set $?.
+ local __tests_tempdir
+ __tests_tempdir="$(mktemp -d)" && [[ -d $__tests_tempdir ]] || {
+ echo >&2 "Bail out! mktemp failed"; return 1
+ }
+ typeset -r __tests_tempdir # don't allow tests to override the variable that we will 'rm -rf' later on
+
+ {
+ (run_test_internal "$__tests_tempdir" "$@")
+ } always {
+ rm -rf -- "$__tests_tempdir"
+ }
+}
+
+# Process each test data file in test data directory.
+local data_file
+TIMEFMT="%*Es"
+{ time (for data_file in ${0:h:h}/highlighters/$1/test-data/*.zsh; do
+ run_test "$data_file"
+ (( $pipestatus[1] )) && exit 2
+done) } 2>&1 || exit $?
+
+exit 0
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/tests/test-zprof.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/tests/test-zprof.zsh
new file mode 100755
index 0000000..ada1618
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/tests/test-zprof.zsh
@@ -0,0 +1,78 @@
+#!/usr/bin/env zsh
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2010-2015 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+# Load the main script.
+typeset -a region_highlight
+. ${0:h:h}/zsh-syntax-highlighting.zsh
+
+# Activate the highlighter.
+ZSH_HIGHLIGHT_HIGHLIGHTERS=(main)
+
+source_file=0.7.1:highlighters/$1/$1-highlighter.zsh
+
+# Runs a highlighting test
+# $1: data file
+run_test_internal() {
+ setopt interactivecomments
+
+ local -a highlight_zone
+
+ local tests_tempdir="$1"; shift
+ local srcdir="$PWD"
+ builtin cd -q -- "$tests_tempdir" || { echo >&2 "Bail out! cd failed: $?"; return 1 }
+
+ # Load the data and prepare checking it.
+ PREBUFFER=
+ BUFFER=$(cd -- "$srcdir" && git cat-file blob $source_file)
+ expected_region_highlight=()
+
+ zmodload zsh/zprof
+ zprof -c
+ # Set $? for _zsh_highlight
+ true && _zsh_highlight
+ zprof
+}
+
+run_test() {
+ # Do not combine the declaration and initialization: «local x="$(false)"» does not set $?.
+ local __tests_tempdir
+ __tests_tempdir="$(mktemp -d)" && [[ -d $__tests_tempdir ]] || {
+ echo >&2 "Bail out! mktemp failed"; return 1
+ }
+ typeset -r __tests_tempdir # don't allow tests to override the variable that we will 'rm -rf' later on
+
+ {
+ (run_test_internal "$__tests_tempdir" "$@")
+ } always {
+ rm -rf -- "$__tests_tempdir"
+ }
+}
+
+run_test
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.plugin.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.plugin.zsh
new file mode 100644
index 0000000..f2456ae
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.plugin.zsh
@@ -0,0 +1,2 @@
+0=${(%):-%N}
+source ${0:A:h}/zsh-syntax-highlighting.zsh
diff --git a/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
new file mode 100644
index 0000000..4295c93
--- /dev/null
+++ b/dots/zsh/.config/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
@@ -0,0 +1,587 @@
+# -------------------------------------------------------------------------------------------------
+# Copyright (c) 2010-2020 zsh-syntax-highlighting contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted
+# provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this list of conditions
+# and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice, this list of
+# conditions and the following disclaimer in the documentation and/or other materials provided
+# with the distribution.
+# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
+# may be used to endorse or promote products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# -------------------------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# -------------------------------------------------------------------------------------------------
+
+# First of all, ensure predictable parsing.
+typeset zsh_highlight__aliases="$(builtin alias -Lm '[^+]*')"
+# In zsh <= 5.2, aliases that begin with a plus sign ('alias -- +foo=42')
+# are emitted by `alias -L` without a '--' guard, so they don't round trip.
+#
+# Hence, we exclude them from unaliasing:
+builtin unalias -m '[^+]*'
+
+# Set $0 to the expected value, regardless of functionargzero.
+0=${(%):-%N}
+if true; then
+ # $0 is reliable
+ typeset -g ZSH_HIGHLIGHT_VERSION=$(<"${0:A:h}"/.version)
+ typeset -g ZSH_HIGHLIGHT_REVISION=$(<"${0:A:h}"/.revision-hash)
+ if [[ $ZSH_HIGHLIGHT_REVISION == \$Format:* ]]; then
+ # When running from a source tree without 'make install', $ZSH_HIGHLIGHT_REVISION
+ # would be set to '$Format:%H$' literally. That's an invalid value, and obtaining
+ # the valid value (via `git rev-parse HEAD`, as Makefile does) might be costly, so:
+ ZSH_HIGHLIGHT_REVISION=HEAD
+ fi
+fi
+
+# This function takes a single argument F and returns True iff F is an autoload stub.
+_zsh_highlight__function_is_autoload_stub_p() {
+ if zmodload -e zsh/parameter; then
+ #(( ${+functions[$1]} )) &&
+ [[ "$functions[$1]" == *"builtin autoload -X"* ]]
+ else
+ #[[ $(type -wa -- "$1") == *'function'* ]] &&
+ [[ "${${(@f)"$(which -- "$1")"}[2]}" == $'\t'$histchars[3]' undefined' ]]
+ fi
+ # Do nothing here: return the exit code of the if.
+}
+
+# Return True iff the argument denotes a function name.
+_zsh_highlight__is_function_p() {
+ if zmodload -e zsh/parameter; then
+ (( ${+functions[$1]} ))
+ else
+ [[ $(type -wa -- "$1") == *'function'* ]]
+ fi
+}
+
+# This function takes a single argument F and returns True iff F denotes the
+# name of a callable function. A function is callable if it is fully defined
+# or if it is marked for autoloading and autoloading it at the first call to it
+# will succeed. In particular, if F has been marked for autoloading
+# but is not available in $fpath, then calling this function on F will return False.
+#
+# See users/21671 https://www.zsh.org/cgi-bin/mla/redirect?USERNUMBER=21671
+_zsh_highlight__function_callable_p() {
+ if _zsh_highlight__is_function_p "$1" &&
+ ! _zsh_highlight__function_is_autoload_stub_p "$1"
+ then
+ # Already fully loaded.
+ return 0 # true
+ else
+ # "$1" is either an autoload stub, or not a function at all.
+ #
+ # Use a subshell to avoid affecting the calling shell.
+ #
+ # We expect 'autoload +X' to return non-zero if it fails to fully load
+ # the function.
+ ( autoload -U +X -- "$1" 2>/dev/null )
+ return $?
+ fi
+}
+
+# -------------------------------------------------------------------------------------------------
+# Core highlighting update system
+# -------------------------------------------------------------------------------------------------
+
+# Use workaround for bug in ZSH?
+# zsh-users/zsh@48cadf4 https://www.zsh.org/mla/workers/2017/msg00034.html
+autoload -Uz is-at-least
+if is-at-least 5.4; then
+ typeset -g zsh_highlight__pat_static_bug=false
+else
+ typeset -g zsh_highlight__pat_static_bug=true
+fi
+
+# Array declaring active highlighters names.
+typeset -ga ZSH_HIGHLIGHT_HIGHLIGHTERS
+
+# Update ZLE buffer syntax highlighting.
+#
+# Invokes each highlighter that needs updating.
+# This function is supposed to be called whenever the ZLE state changes.
+_zsh_highlight()
+{
+ # Store the previous command return code to restore it whatever happens.
+ local ret=$?
+ # Make it read-only. Can't combine this with the previous line when POSIX_BUILTINS may be set.
+ typeset -r ret
+
+ # $region_highlight should be predefined, either by zle or by the test suite's mock (non-special) array.
+ (( ${+region_highlight[@]} )) || {
+ echo >&2 'zsh-syntax-highlighting: error: $region_highlight is not defined'
+ echo >&2 'zsh-syntax-highlighting: (Check whether zsh-syntax-highlighting was installed according to the instructions.)'
+ return $ret
+ }
+
+ # Probe the memo= feature, once.
+ (( ${+zsh_highlight__memo_feature} )) || {
+ region_highlight+=( " 0 0 fg=red, memo=zsh-syntax-highlighting" )
+ case ${region_highlight[-1]} in
+ ("0 0 fg=red")
+ # zsh 5.8 or earlier
+ integer -gr zsh_highlight__memo_feature=0
+ ;;
+ ("0 0 fg=red memo=zsh-syntax-highlighting")
+ # zsh 5.9 or later
+ integer -gr zsh_highlight__memo_feature=1
+ ;;
+ (" 0 0 fg=red, memo=zsh-syntax-highlighting") ;&
+ (*)
+ # We can get here in two ways:
+ #
+ # 1. When not running as a widget. In that case, $region_highlight is
+ # not a special variable (= one with custom getter/setter functions
+ # written in C) but an ordinary one, so the third case pattern matches
+ # and we fall through to this block. (The test suite uses this codepath.)
+ #
+ # 2. When running under a future version of zsh that will have changed
+ # the serialization of $region_highlight elements from their underlying
+ # C structs, so that none of the previous case patterns will match.
+ #
+ # In either case, fall back to a version check.
+ if is-at-least 5.9; then
+ integer -gr zsh_highlight__memo_feature=1
+ else
+ integer -gr zsh_highlight__memo_feature=0
+ fi
+ ;;
+ esac
+ region_highlight[-1]=()
+ }
+
+ # Reset region_highlight to build it from scratch
+ if (( zsh_highlight__memo_feature )); then
+ region_highlight=( "${(@)region_highlight:#*memo=zsh-syntax-highlighting*}" )
+ else
+ # Legacy codepath. Not very interoperable with other plugins (issue #418).
+ region_highlight=()
+ fi
+
+ # Remove all highlighting in isearch, so that only the underlining done by zsh itself remains.
+ # For details see FAQ entry 'Why does syntax highlighting not work while searching history?'.
+ # This disables highlighting during isearch (for reasons explained in README.md) unless zsh is new enough
+ # and doesn't have the pattern matching bug
+ if [[ $WIDGET == zle-isearch-update ]] && { $zsh_highlight__pat_static_bug || ! (( $+ISEARCHMATCH_ACTIVE )) }; then
+ return $ret
+ fi
+
+ # Before we 'emulate -L', save the user's options
+ local -A zsyh_user_options
+ if zmodload -e zsh/parameter; then
+ zsyh_user_options=("${(kv)options[@]}")
+ else
+ local canonical_options onoff option raw_options
+ raw_options=(${(f)"$(emulate -R zsh; set -o)"})
+ canonical_options=(${${${(M)raw_options:#*off}%% *}#no} ${${(M)raw_options:#*on}%% *})
+ for option in "${canonical_options[@]}"; do
+ [[ -o $option ]]
+ case $? in
+ (0) zsyh_user_options+=($option on);;
+ (1) zsyh_user_options+=($option off);;
+ (*) # Can't happen, surely?
+ echo "zsh-syntax-highlighting: warning: '[[ -o $option ]]' returned $?"
+ ;;
+ esac
+ done
+ fi
+ typeset -r zsyh_user_options
+
+ emulate -L zsh
+ setopt localoptions warncreateglobal nobashrematch
+ local REPLY # don't leak $REPLY into global scope
+
+ # Do not highlight if there are more than 300 chars in the buffer. It's most
+ # likely a pasted command or a huge list of files in that case..
+ [[ -n ${ZSH_HIGHLIGHT_MAXLENGTH:-} ]] && [[ $#BUFFER -gt $ZSH_HIGHLIGHT_MAXLENGTH ]] && return $ret
+
+ # Do not highlight if there are pending inputs (copy/paste).
+ (( KEYS_QUEUED_COUNT > 0 )) && return $ret
+ (( PENDING > 0 )) && return $ret
+
+ {
+ local cache_place
+ local -a region_highlight_copy
+
+ # Select which highlighters in ZSH_HIGHLIGHT_HIGHLIGHTERS need to be invoked.
+ local highlighter; for highlighter in $ZSH_HIGHLIGHT_HIGHLIGHTERS; do
+
+ # eval cache place for current highlighter and prepare it
+ cache_place="_zsh_highlight__highlighter_${highlighter}_cache"
+ typeset -ga ${cache_place}
+
+ # If highlighter needs to be invoked
+ if ! type "_zsh_highlight_highlighter_${highlighter}_predicate" >&/dev/null; then
+ echo "zsh-syntax-highlighting: warning: disabling the ${(qq)highlighter} highlighter as it has not been loaded" >&2
+ # TODO: use ${(b)} rather than ${(q)} if supported
+ ZSH_HIGHLIGHT_HIGHLIGHTERS=( ${ZSH_HIGHLIGHT_HIGHLIGHTERS:#${highlighter}} )
+ elif "_zsh_highlight_highlighter_${highlighter}_predicate"; then
+
+ # save a copy, and cleanup region_highlight
+ region_highlight_copy=("${region_highlight[@]}")
+ region_highlight=()
+
+ # Execute highlighter and save result
+ {
+ "_zsh_highlight_highlighter_${highlighter}_paint"
+ } always {
+ : ${(AP)cache_place::="${region_highlight[@]}"}
+ }
+
+ # Restore saved region_highlight
+ region_highlight=("${region_highlight_copy[@]}")
+
+ fi
+
+ # Use value form cache if any cached
+ region_highlight+=("${(@P)cache_place}")
+
+ done
+
+ # Re-apply zle_highlight settings
+
+ # region
+ () {
+ (( REGION_ACTIVE )) || return
+ integer min max
+ if (( MARK > CURSOR )) ; then
+ min=$CURSOR max=$MARK
+ else
+ min=$MARK max=$CURSOR
+ fi
+ if (( REGION_ACTIVE == 1 )); then
+ [[ $KEYMAP = vicmd ]] && (( max++ ))
+ elif (( REGION_ACTIVE == 2 )); then
+ local needle=$'\n'
+ # CURSOR and MARK are 0 indexed between letters like region_highlight
+ # Do not include the newline in the highlight
+ (( min = ${BUFFER[(Ib:min:)$needle]} ))
+ (( max = ${BUFFER[(ib:max:)$needle]} - 1 ))
+ fi
+ _zsh_highlight_apply_zle_highlight region standout "$min" "$max"
+ }
+
+ # yank / paste (zsh-5.1.1 and newer)
+ (( $+YANK_ACTIVE )) && (( YANK_ACTIVE )) && _zsh_highlight_apply_zle_highlight paste standout "$YANK_START" "$YANK_END"
+
+ # isearch
+ (( $+ISEARCHMATCH_ACTIVE )) && (( ISEARCHMATCH_ACTIVE )) && _zsh_highlight_apply_zle_highlight isearch underline "$ISEARCHMATCH_START" "$ISEARCHMATCH_END"
+
+ # suffix
+ (( $+SUFFIX_ACTIVE )) && (( SUFFIX_ACTIVE )) && _zsh_highlight_apply_zle_highlight suffix bold "$SUFFIX_START" "$SUFFIX_END"
+
+
+ return $ret
+
+
+ } always {
+ typeset -g _ZSH_HIGHLIGHT_PRIOR_BUFFER="$BUFFER"
+ typeset -gi _ZSH_HIGHLIGHT_PRIOR_CURSOR=$CURSOR
+ }
+}
+
+# Apply highlighting based on entries in the zle_highlight array.
+# This function takes four arguments:
+# 1. The exact entry (no patterns) in the zle_highlight array:
+# region, paste, isearch, or suffix
+# 2. The default highlighting that should be applied if the entry is unset
+# 3. and 4. Two integer values describing the beginning and end of the
+# range. The order does not matter.
+_zsh_highlight_apply_zle_highlight() {
+ local entry="$1" default="$2"
+ integer first="$3" second="$4"
+
+ # read the relevant entry from zle_highlight
+ #
+ # ### In zsh≥5.0.8 we'd use ${(b)entry}, but we support older zsh's, so we don't
+ # ### add (b). The only effect is on the failure mode for callers that violate
+ # ### the precondition.
+ local region="${zle_highlight[(r)${entry}:*]-}"
+
+ if [[ -z "$region" ]]; then
+ # entry not specified at all, use default value
+ region=$default
+ else
+ # strip prefix
+ region="${region#${entry}:}"
+
+ # no highlighting when set to the empty string or to 'none'
+ if [[ -z "$region" ]] || [[ "$region" == none ]]; then
+ return
+ fi
+ fi
+
+ integer start end
+ if (( first < second )); then
+ start=$first end=$second
+ else
+ start=$second end=$first
+ fi
+ region_highlight+=("$start $end $region, memo=zsh-syntax-highlighting")
+}
+
+
+# -------------------------------------------------------------------------------------------------
+# API/utility functions for highlighters
+# -------------------------------------------------------------------------------------------------
+
+# Array used by highlighters to declare user overridable styles.
+typeset -gA ZSH_HIGHLIGHT_STYLES
+
+# Whether the command line buffer has been modified or not.
+#
+# Returns 0 if the buffer has changed since _zsh_highlight was last called.
+_zsh_highlight_buffer_modified()
+{
+ [[ "${_ZSH_HIGHLIGHT_PRIOR_BUFFER:-}" != "$BUFFER" ]]
+}
+
+# Whether the cursor has moved or not.
+#
+# Returns 0 if the cursor has moved since _zsh_highlight was last called.
+_zsh_highlight_cursor_moved()
+{
+ [[ -n $CURSOR ]] && [[ -n ${_ZSH_HIGHLIGHT_PRIOR_CURSOR-} ]] && (($_ZSH_HIGHLIGHT_PRIOR_CURSOR != $CURSOR))
+}
+
+# Add a highlight defined by ZSH_HIGHLIGHT_STYLES.
+#
+# Should be used by all highlighters aside from 'pattern' (cf. ZSH_HIGHLIGHT_PATTERN).
+# Overwritten in tests/test-highlighting.zsh when testing.
+_zsh_highlight_add_highlight()
+{
+ local -i start end
+ local highlight
+ start=$1
+ end=$2
+ shift 2
+ for highlight; do
+ if (( $+ZSH_HIGHLIGHT_STYLES[$highlight] )); then
+ region_highlight+=("$start $end $ZSH_HIGHLIGHT_STYLES[$highlight], memo=zsh-syntax-highlighting")
+ break
+ fi
+ done
+}
+
+# -------------------------------------------------------------------------------------------------
+# Setup functions
+# -------------------------------------------------------------------------------------------------
+
+# Helper for _zsh_highlight_bind_widgets
+# $1 is name of widget to call
+_zsh_highlight_call_widget()
+{
+ builtin zle "$@" &&
+ _zsh_highlight
+}
+
+# Decide whether to use the zle-line-pre-redraw codepath (colloquially known as
+# "feature/redrawhook", after the topic branch's name) or the legacy "bind all
+# widgets" codepath.
+#
+# We use the new codepath under two conditions:
+#
+# 1. If it's available, which we check by testing for add-zle-hook-widget's availability.
+#
+# 2. If zsh has the memo= feature, which is required for interoperability reasons.
+# See issues #579 and #735, and the issues referenced from them.
+#
+# We check this with a plain version number check, since a functional check,
+# as done by _zsh_highlight, can only be done from inside a widget
+# function — a catch-22.
+if is-at-least 5.9 && _zsh_highlight__function_callable_p add-zle-hook-widget
+then
+ autoload -U add-zle-hook-widget
+ _zsh_highlight__zle-line-finish() {
+ # Reset $WIDGET since the 'main' highlighter depends on it.
+ #
+ # Since $WIDGET is declared by zle as read-only in this function's scope,
+ # a nested function is required in order to shadow its built-in value;
+ # see "User-defined widgets" in zshall.
+ () {
+ local -h -r WIDGET=zle-line-finish
+ _zsh_highlight
+ }
+ }
+ _zsh_highlight__zle-line-pre-redraw() {
+ # Set $? to 0 for _zsh_highlight. Without this, subsequent
+ # zle-line-pre-redraw hooks won't run, since add-zle-hook-widget happens to
+ # call us with $? == 1 in the common case.
+ true && _zsh_highlight "$@"
+ }
+ _zsh_highlight_bind_widgets(){}
+ if [[ -o zle ]]; then
+ add-zle-hook-widget zle-line-pre-redraw _zsh_highlight__zle-line-pre-redraw
+ add-zle-hook-widget zle-line-finish _zsh_highlight__zle-line-finish
+ fi
+else
+ # Rebind all ZLE widgets to make them invoke _zsh_highlights.
+ _zsh_highlight_bind_widgets()
+ {
+ setopt localoptions noksharrays
+ typeset -F SECONDS
+ local prefix=orig-s$SECONDS-r$RANDOM # unique each time, in case we're sourced more than once
+
+ # Load ZSH module zsh/zleparameter, needed to override user defined widgets.
+ zmodload zsh/zleparameter 2>/dev/null || {
+ print -r -- >&2 'zsh-syntax-highlighting: failed loading zsh/zleparameter.'
+ return 1
+ }
+
+ # Override ZLE widgets to make them invoke _zsh_highlight.
+ local -U widgets_to_bind
+ widgets_to_bind=(${${(k)widgets}:#(.*|run-help|which-command|beep|set-local-history|yank|yank-pop)})
+
+ # Always wrap special zle-line-finish widget. This is needed to decide if the
+ # current line ends and special highlighting logic needs to be applied.
+ # E.g. remove cursor imprint, don't highlight partial paths, ...
+ widgets_to_bind+=(zle-line-finish)
+
+ # Always wrap special zle-isearch-update widget to be notified of updates in isearch.
+ # This is needed because we need to disable highlighting in that case.
+ widgets_to_bind+=(zle-isearch-update)
+
+ local cur_widget
+ for cur_widget in $widgets_to_bind; do
+ case ${widgets[$cur_widget]:-""} in
+
+ # Already rebound event: do nothing.
+ user:_zsh_highlight_widget_*);;
+
+ # The "eval"'s are required to make $cur_widget a closure: the value of the parameter at function
+ # definition time is used.
+ #
+ # We can't use ${0/_zsh_highlight_widget_} because these widgets are always invoked with
+ # NO_function_argzero, regardless of the option's setting here.
+
+ # User defined widget: override and rebind old one with prefix "orig-".
+ user:*) zle -N $prefix-$cur_widget ${widgets[$cur_widget]#*:}
+ eval "_zsh_highlight_widget_${(q)prefix}-${(q)cur_widget}() { _zsh_highlight_call_widget ${(q)prefix}-${(q)cur_widget} -- \"\$@\" }"
+ zle -N $cur_widget _zsh_highlight_widget_$prefix-$cur_widget;;
+
+ # Completion widget: override and rebind old one with prefix "orig-".
+ completion:*) zle -C $prefix-$cur_widget ${${(s.:.)widgets[$cur_widget]}[2,3]}
+ eval "_zsh_highlight_widget_${(q)prefix}-${(q)cur_widget}() { _zsh_highlight_call_widget ${(q)prefix}-${(q)cur_widget} -- \"\$@\" }"
+ zle -N $cur_widget _zsh_highlight_widget_$prefix-$cur_widget;;
+
+ # Builtin widget: override and make it call the builtin ".widget".
+ builtin) eval "_zsh_highlight_widget_${(q)prefix}-${(q)cur_widget}() { _zsh_highlight_call_widget .${(q)cur_widget} -- \"\$@\" }"
+ zle -N $cur_widget _zsh_highlight_widget_$prefix-$cur_widget;;
+
+ # Incomplete or nonexistent widget: Bind to z-sy-h directly.
+ *)
+ if [[ $cur_widget == zle-* ]] && (( ! ${+widgets[$cur_widget]} )); then
+ _zsh_highlight_widget_${cur_widget}() { :; _zsh_highlight }
+ zle -N $cur_widget _zsh_highlight_widget_$cur_widget
+ else
+ # Default: unhandled case.
+ print -r -- >&2 "zsh-syntax-highlighting: unhandled ZLE widget ${(qq)cur_widget}"
+ print -r -- >&2 "zsh-syntax-highlighting: (This is sometimes caused by doing \`bindkey <keys> ${(q-)cur_widget}\` without creating the ${(qq)cur_widget} widget with \`zle -N\` or \`zle -C\`.)"
+ fi
+ esac
+ done
+ }
+fi
+
+# Load highlighters from directory.
+#
+# Arguments:
+# 1) Path to the highlighters directory.
+_zsh_highlight_load_highlighters()
+{
+ setopt localoptions noksharrays bareglobqual
+
+ # Check the directory exists.
+ [[ -d "$1" ]] || {
+ print -r -- >&2 "zsh-syntax-highlighting: highlighters directory ${(qq)1} not found."
+ return 1
+ }
+
+ # Load highlighters from highlighters directory and check they define required functions.
+ local highlighter highlighter_dir
+ for highlighter_dir ($1/*/(/)); do
+ highlighter="${highlighter_dir:t}"
+ [[ -f "$highlighter_dir${highlighter}-highlighter.zsh" ]] &&
+ . "$highlighter_dir${highlighter}-highlighter.zsh"
+ if type "_zsh_highlight_highlighter_${highlighter}_paint" &> /dev/null &&
+ type "_zsh_highlight_highlighter_${highlighter}_predicate" &> /dev/null;
+ then
+ # New (0.5.0) function names
+ elif type "_zsh_highlight_${highlighter}_highlighter" &> /dev/null &&
+ type "_zsh_highlight_${highlighter}_highlighter_predicate" &> /dev/null;
+ then
+ # Old (0.4.x) function names
+ if false; then
+ # TODO: only show this warning for plugin authors/maintainers, not for end users
+ print -r -- >&2 "zsh-syntax-highlighting: warning: ${(qq)highlighter} highlighter uses deprecated entry point names; please ask its maintainer to update it: https://github.com/zsh-users/zsh-syntax-highlighting/issues/329"
+ fi
+ # Make it work.
+ eval "_zsh_highlight_highlighter_${(q)highlighter}_paint() { _zsh_highlight_${(q)highlighter}_highlighter \"\$@\" }"
+ eval "_zsh_highlight_highlighter_${(q)highlighter}_predicate() { _zsh_highlight_${(q)highlighter}_highlighter_predicate \"\$@\" }"
+ else
+ print -r -- >&2 "zsh-syntax-highlighting: ${(qq)highlighter} highlighter should define both required functions '_zsh_highlight_highlighter_${highlighter}_paint' and '_zsh_highlight_highlighter_${highlighter}_predicate' in ${(qq):-"$highlighter_dir${highlighter}-highlighter.zsh"}."
+ fi
+ done
+}
+
+
+# -------------------------------------------------------------------------------------------------
+# Setup
+# -------------------------------------------------------------------------------------------------
+
+# Try binding widgets.
+_zsh_highlight_bind_widgets || {
+ print -r -- >&2 'zsh-syntax-highlighting: failed binding ZLE widgets, exiting.'
+ return 1
+}
+
+# Resolve highlighters directory location.
+_zsh_highlight_load_highlighters "${ZSH_HIGHLIGHT_HIGHLIGHTERS_DIR:-${${0:A}:h}/highlighters}" || {
+ print -r -- >&2 'zsh-syntax-highlighting: failed loading highlighters, exiting.'
+ return 1
+}
+
+# Reset scratch variables when commandline is done.
+_zsh_highlight_preexec_hook()
+{
+ typeset -g _ZSH_HIGHLIGHT_PRIOR_BUFFER=
+ typeset -gi _ZSH_HIGHLIGHT_PRIOR_CURSOR=
+}
+autoload -Uz add-zsh-hook
+add-zsh-hook preexec _zsh_highlight_preexec_hook 2>/dev/null || {
+ print -r -- >&2 'zsh-syntax-highlighting: failed loading add-zsh-hook.'
+ }
+
+# Load zsh/parameter module if available
+zmodload zsh/parameter 2>/dev/null || true
+
+# Initialize the array of active highlighters if needed.
+[[ $#ZSH_HIGHLIGHT_HIGHLIGHTERS -eq 0 ]] && ZSH_HIGHLIGHT_HIGHLIGHTERS=(main)
+
+if (( $+X_ZSH_HIGHLIGHT_DIRS_BLACKLIST )); then
+ print >&2 'zsh-syntax-highlighting: X_ZSH_HIGHLIGHT_DIRS_BLACKLIST is deprecated. Please use ZSH_HIGHLIGHT_DIRS_BLACKLIST.'
+ ZSH_HIGHLIGHT_DIRS_BLACKLIST=($X_ZSH_HIGHLIGHT_DIRS_BLACKLIST)
+ unset X_ZSH_HIGHLIGHT_DIRS_BLACKLIST
+fi
+
+# Restore the aliases we unned
+eval "$zsh_highlight__aliases"
+builtin unset zsh_highlight__aliases
+
+# Set $?.
+true
diff --git a/dots/zsh/.config/zsh/setup/aliases.zsh b/dots/zsh/.config/zsh/setup/aliases.zsh
new file mode 100755
index 0000000..73b09b3
--- /dev/null
+++ b/dots/zsh/.config/zsh/setup/aliases.zsh
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+#-- <git> --
+alias gc="git checkout"
+alias gcb="git checkout -b"
+alias gcm="git commit -m"
+alias ga="git add"
+alias gaa="git add ."
+alias gpl="git pull"
+alias gps="git push"
+alias gr="git rebase"
+alias gss="git status"
+alias gsa="git stash"
+alias gsr="git stash pop"
+alias gl="git log --oneline"
+#-- </git> --
+
+#-- <misc> --
+alias fuckuctl="journalctl --user -fu"
+alias fuckctl="journalctl -fu"
+
+alias ..="cd .."
+#-- </misc> --
+
+#-- <neovim> --
+alias vim="nvim"
+#-- </neovim> --
diff --git a/dots/zsh/.config/zsh/setup/device.zsh b/dots/zsh/.config/zsh/setup/device.zsh
new file mode 100755
index 0000000..d3f8c4b
--- /dev/null
+++ b/dots/zsh/.config/zsh/setup/device.zsh
@@ -0,0 +1,30 @@
+#!/bin/zsh
+
+source log.sh "setup/device.zsh"
+
+#-- <os_init> --
+platform="$(platform.sh)"
+platform_setup="$ZDOTDIR/$platform"
+init_platform="$platform_setup/init.zsh"
+if [ ! -d "$platform_setup" ]; then
+ log ERROR "misconfigured platform $platform: $platform_setup is not a directory"
+ exit 1
+fi
+if [ -e "$init_platform" ]; then
+ log DEBUG "executing $init_platform"
+ . "$init_platform"
+else
+ log DEBUG "no platform-specific init for $platform at $init_platform"
+fi
+#-- </os_init> --
+
+#-- <machine_init> --
+machine="$(system_name.sh)"
+machine_init="$platform_setup/$machine.zsh"
+if [ -e "$machine_init" ]; then
+ log DEBUG "executing $platform.$machine $machine_init"
+ . "$machine_init"
+else
+ log WARN "no machine-specific init for $platform.$machine at $machine_init"
+fi
+#-- </machine_init> --
diff --git a/dots/zsh/.config/zsh/setup/gpg.zsh.j2 b/dots/zsh/.config/zsh/setup/gpg.zsh.j2
new file mode 100755
index 0000000..4ffb38f
--- /dev/null
+++ b/dots/zsh/.config/zsh/setup/gpg.zsh.j2
@@ -0,0 +1,23 @@
+#!/bin/zsh
+
+
+# -- <gpg> --
+KEY_ID="{{ pgp.id }}"
+gpg -k "$KEY_ID" >/dev/null 2>&1 || gpg --import "$HOME/.pubkey"
+
+cp $HOME/scripts/pinentry.sh /tmp/pinentry
+
+
+export PINENTRY_USER_DATA="${PINENTRY_USER_DATA:-PINENTRY_USE_TTY}"
+if [ "$SSH_CLIENT" ]; then
+ export PINENTRY_USER_DATA=PINENTRY_USE_CURSES
+ exit 0
+fi
+
+# yubikey!
+unset SSH_AGENT_PID
+export GPG_TTY=$(tty)
+export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
+gpgconf --launch gpg-agent
+gpg-connect-agent updatestartuptty /bye > /dev/null
+# -- </gpg> --
diff --git a/dots/zsh/.config/zsh/setup/history.zsh b/dots/zsh/.config/zsh/setup/history.zsh
new file mode 100755
index 0000000..ea8ab9c
--- /dev/null
+++ b/dots/zsh/.config/zsh/setup/history.zsh
@@ -0,0 +1,14 @@
+#!/bin/zsh
+
+HISTSIZE=2000000
+SAVEHIST=$HISTSIZE
+: ${HISTFILE=$ZDOTDIR/zsh_history}
+
+setopt EXTENDED_HISTORY # Write the history file in the ':start:elapsed;command' format.
+setopt HIST_EXPIRE_DUPS_FIRST # Expire a duplicate event first when trimming history.
+setopt HIST_FIND_NO_DUPS # Do not display a previously found event.
+setopt HIST_IGNORE_ALL_DUPS # Delete an old recorded event if a new event is a duplicate.
+setopt HIST_IGNORE_DUPS # Do not record an event that was just recorded again.
+setopt HIST_IGNORE_SPACE # Do not record an event starting with a space.
+setopt HIST_SAVE_NO_DUPS # Do not write a duplicate event to the history file.
+setopt SHARE_HISTORY # Share history between all sessions.
diff --git a/dots/zsh/.config/zsh/setup/misc.zsh b/dots/zsh/.config/zsh/setup/misc.zsh
new file mode 100755
index 0000000..f301dcc
--- /dev/null
+++ b/dots/zsh/.config/zsh/setup/misc.zsh
@@ -0,0 +1,11 @@
+#!/bin/zsh
+
+backward-kill-dir () {
+ local WORDCHARS=${WORDCHARS/\/}
+ zle backward-kill-word
+ zle -f kill
+}
+zle -N backward-kill-dir
+bindkey '^[^?' backward-kill-dir
+
+bindkey \^K kill-line
diff --git a/dots/zsh/.config/zsh/setup/tools.zsh b/dots/zsh/.config/zsh/setup/tools.zsh
new file mode 100755
index 0000000..fd66b63
--- /dev/null
+++ b/dots/zsh/.config/zsh/setup/tools.zsh
@@ -0,0 +1,20 @@
+#!/bin/zsh
+
+#-- <mise> --
+eval "$(mise activate zsh)"
+#-- </mise> --
+
+#-- <zoxide> --
+eval "$(zoxide init --cmd z zsh)"
+alias cd="z"
+#-- </zoxide> --
+
+#-- <starship> --
+eval "$(starship init zsh)"
+#-- </starship> --
+
+#-- <zsh_enhancements> --
+export ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=#626262,underline'
+source "$ZDOTDIR/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh"
+source "$ZDOTDIR/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh"
+#-- </zsh_enhancements> --
diff --git a/dots/zsh/.hushlogin b/dots/zsh/.hushlogin
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/dots/zsh/.hushlogin
diff --git a/dots/zsh/.zshenv b/dots/zsh/.zshenv
new file mode 100644
index 0000000..bc00d69
--- /dev/null
+++ b/dots/zsh/.zshenv
@@ -0,0 +1 @@
+ZDOTDIR=${XDG_CONFIG_HOME:-$HOME/.config}/zsh