@ 260802.2

200426.1 · 36c995dad7a8bd843a3e6d5fdfc8c1deffe770ee

initial commit

This brings over mostly everything from my old $HOME-only repository. I remove some unused scripts. This commit does not include work-related stuff, which will be encrypted and added in a subsequent commit.

This also does not include my SSH configuration. There's nothing particularly sensitive in it, but it seems prudent to encrypt that too.

reading declarations

.Xdefaults

new file mode 100755@@ -0,0 +1,87 @@+#!mouse cursor settings--------------------------------+#Xcursor.theme: Vanilla-DMZ-AA+# +#!urxvt settings---------------------------------------+#URxvt.iconFile: /usr/share/icons/Tango/32x32/apps/gnome-terminal.png+#URxvt.transparent: true+#URxvt.background: #000000+#URxvt.foreground: white+#URxvt.cursorColor: gray+#URxvt.underlineColor: gray+#URxvt.font: xft:dina:pixelsize=16:antialias=false+#URxvt.boldFont: xft:dina:bold:size=14;antialias=false+#URxvt.scrollBar_right: true+#URxvt.scrollstyle: plain+#!URxvt.url-launcher: /usr/bin/chromium+#URxvt.url-select.launcher: /usr/bin/chromium+#URxvt.colorUL: #4682B4+#URxvt.perl-ext-common: default,matcher,url-select+#URxvt.matcher.button: 1+#URxvt.underlineURLs:    true+#URxvt.keysym.M-u:       perl:url-select:select_next+# +#!terminal color settings------------------------------+#*foreground:     rgb:dd/dd/dd+#*background:     rgb:22/22/22+#!black+#*color0:         rgb:19/19/19+#*color8:         rgb:25/25/25+#!red+#*color1:         rgb:80/32/32+#*color9:         rgb:98/2b/2b+#!green+#*color2:         rgb:5b/76/2f+#*color10:        rgb:89/b8/3f+#!brown/yellow+#*color3:         rgb:aa/99/43+#*color11:        rgb:ef/ef/60+#!blue+#*color4:         rgb:32/4c/80+#*color12:        rgb:2b/4f/98+#!magenta+#*color5:         rgb:70/6c/9a+#*color13:        rgb:82/6a/b1+#!cyan+#*color6:         rgb:92/b1/9e+#*color14:        rgb:a1/cd/cd+#!white+#*color7:         rgb:ff/ff/ff+#*color15:        rgb:dd/dd/dd+++#URxvt*font: xft:Bitstream Vera Sans Mono:pixelsize=12+#URxvt*font: xft:Monospace:pixelsize=14+#URxvt*depth: 32+#URxvt*foreground: white+#URxvt*saveLines: 65535+#URxvt*scrollBar: false+#URxvt*background: black+++#URxvt*background: rgba:0000/0000/0000/cccc+#URxvt*transparent: true+#URxvt*shading: 50+#URxvt*tint: red+#URxvt*inheritPixmap: true+#URxvt*borderLess: true+#URxvt*geometry: 124x24 +0+0+#URxvt*foreground: black++#Mrxvt.smoothResize: True+##Mrxvt.opacity: 10+#Mrxvt.showMenu: False+#Mrxvt.autohideTabbar: True+#Mrxvt.scrollBar: False+#Mrxvt.saveLines: 65535+#Mrxvt.foreground: white+#Mrxvt.cursorColor: yellow+#Mrxvt.cursorBlink: False+#Mrxvt.xft: True+#Mrxvt.xftFont: Bitstream Vera Sans Mono+#Mrxvt.xftSize: 9+#Mrxvt.Antialias: True+#Mrxvt.xftHinting: True+#Mrxvt.xftAutoHint: True+#Mrxvt.xftGlobalAdvance: True+#Mrxvt.xftPFont: Bitstream Vera Sans+#Mrxvt.xftPSize: 8

.aliasrc

new file mode 100644@@ -0,0 +1,121 @@+# vim: ft=sh sw=2 ts=2 sts=2++if [ -f ~/.systemd.sh ]; then+    . ~/.systemd.sh+fi++# Aliases.++if is-mac; then+  alias ls='ls -G'+  alias l='ls -lhG'+else+  alias ls='ls -N --color=auto --group-directories-first'+  alias l='ls -lhN'+fi++alias y='yay'+alias p="ps axo pid,cmd | sed 's/^\\s*\\([0-9]\\+\\)\\s\\+/\\1\\t/g' | grep -v grep | grep"+alias b="bpython2"+alias diff="colordiff"+alias less="less -R"+alias sqlite3="sqlite3 -column -nullvalue 'NULL' -header"+alias rd="regex-debug"+alias clr="echo -ne '\\033[0m'"+alias j="ledger"+alias ports='lsof -iTCP -sTCP:LISTEN -n -P'+alias N='nh terminal -d "$PWD" -e tmux new'+alias image='feh -dFZ'+alias mpv="mpv --keep-open=yes"++alias g="git"+alias gs="g status"+alias gp="g push home master && g push origin master"+alias gpt="g push home master --tags && g push origin master --tags"+alias gy="g diffy | less -RFX"++alias grep="grep --color=auto"+alias egrep="egrep --color=auto"+alias fgrep="fgrep --color=auto"++# Alias for filtering output of cargo crev to only contain the dependencies+# in the main crate root.+alias crev-verify="cargo crev verify | rg --color never -Ff <(cargo tree --no-dev-dependencies --no-indent | cut -d' ' -f1)"++# Temporary work-around to get colors working.+alias cargo="TERM=xterm cargo"++# Functions.+man() {+  env \+    LESS_TERMCAP_mb=$(printf "\\e[1;31m") \+    LESS_TERMCAP_md=$(printf "\\e[1;31m") \+    LESS_TERMCAP_me=$(printf "\\e[0m") \+    LESS_TERMCAP_se=$(printf "\\e[0m") \+    LESS_TERMCAP_so=$(printf "\\e[1;44;33m") \+    LESS_TERMCAP_ue=$(printf "\\e[0m") \+    LESS_TERMCAP_us=$(printf "\\e[0;32m") \+    man "$@"+}++paths() {+  echo "$1" | sed 's/:/\n/g'+}++nh() {+  nohup "$@" > /dev/null 2>&1 &+}++ssh_reagent() {+  for agent in /tmp/ssh-*/agent.*; do+    export SSH_AUTH_SOCK="$agent"+    if ssh-add -L > /dev/null 2>&1; then+      return+    fi+    unset SSH_AUTH_SOCK+  done+  echo "No valid SSH forwarding socket found." >&2+  exit 1+}++mkcd() {+  mkdir -p "$1" && cd "$1" || exit+}++prependpath() {+  paths="$1"+  toadd="$2"+  case ":$paths:" in+    *:"$toadd":*)+      echo "$paths"+      ;;+    *)+      echo "$toadd${paths:+:$paths}"+      ;;+  esac+}++appendpath() {+  paths="$1"+  toadd="$2"+  case ":$paths:" in+    *:"$toadd":*)+      echo "$paths"+      ;;+    *)+      echo "${paths:+$paths:}$toadd"+      ;;+  esac+}++rgf() {+  regex=+  args=+  for v in "$@"; do+    case $v in+      -*) args+="$v" ;;+      *) regex="$v" ;;+    esac+  done+  rg --files $args | rg "$regex"+}

.bash_profile

new file mode 100644@@ -0,0 +1,9 @@+# vim: ft=sh sw=2 ts=2 sts=2++. "$HOME/.bashrc"++if cmd-exists startx; then+  if [[ -z "$DISPLAY" ]] && [[ "$XDG_VTNR" = 1 ]] && [[ -z "$TMUX" ]]; then+    exec ssh-agent startx "$HOME/.config/ag/startup/wingo.xinitrc"+  fi+fi

.bashrc

new file mode 100755@@ -0,0 +1,60 @@+# Check for an interactive session+[ -z "$PS1" ] && return++# Define aliases and generic shell variables.+[[ -f ~/.pathrc ]] && . ~/.pathrc+[[ -f ~/.aliasrc ]] && . ~/.aliasrc+[[ -f ~/.envrc ]] && . ~/.envrc++# Setup umask.+umask 0002++# Disable beeping.+setterm --blength 0 > /dev/null 2>&1+# Dunno what this does.+stty -ixon++# Various completion and history settings.+set +o ignoreeof+complete -cf sudo+complete -cf man+if complete | grep -q '_rg rg'; then+  complete -r rg+fi+shopt -s histappend+if ! is-mac; then+  shopt -s direxpand+fi++# Setup LS_COLORS.+if command -v dircolors > /dev/null 2>&1; then+  source <(dircolors)+fi++# Configure basic prompt.+ps0() {+  cmd="$(history 1 | cut -d' ' -f2- | xargs -0 echo)"+  cwd="$(pwd)"+  title="${cwd/#$HOME/\~}"+  if [ -n "$cmd" ]; then+    title+=" - $cmd"+  fi+  echo -n -e "\\e]0;$title\\007"+}++prompt_command() {+  if is-mac; then+    return+  fi+  cwd="$PWD"+  title="${cwd/#$HOME/\~}"+  echo -n -e "\\e]0;$title\\007"+}++PS0="\$(ps0)"+PS1="\$(ps1)"+PS1="[\\u@\\h \\W] "+PROMPT_COMMAND="prompt_command"+export PS0 PS1 PROMPT_COMMAND++[ -f ~/.fzf.bash ] && source ~/.fzf.bash

.colordiffrc

new file mode 100644@@ -0,0 +1 @@+color_patches=yes

.config/.gitignore

new file mode 100644@@ -0,0 +1,23 @@+/Unknown Organization+/baloofilerc+/coc+/dconf+/dolphinrc+/gohead+/google-chrome+/gtk-2.0+/gtk-3.0+/guvcview2+/htop+/hub+/knfsshare+/konsolerc+/libreoffice+/mimeapps.list+/mirage+/nitrogen+/okularpartrc+/okularrc+/pulse+/wingo+/zoomus.conf

.config/ag/startup/wingo-frink.xinitrc

new file mode 100755@@ -0,0 +1,24 @@+#!/bin/sh++( xrdb $HOME/.Xresources+  xsetroot -cursor_name left_ptr+  setxkbmap -option terminate:ctrl_alt_bksp+  xset r rate 200+  xset b 0+  xmodmap $HOME/.xmodmaprc+  xbindkeys -f $HOME/.xbindkeysrc+  numlockx on+  dpms-settings+  xset m 1 1+  xinput --set-prop 'Logitech Anywhere MX' 'libinput Accel Speed' -0.75+  xinput --set-prop 'pointer:Logitech MX Anywhere 2' 'libinput Accel Speed' -0.75+) &++media+video left middle right+nitrogen --restore+# (sleep 2 && compton --backend glx --vsync opengl-swc) &+gkrellm &+dunst &++exec bash -c '(dbus-launch run-wingo ; (while true; do sleep 1000; done))'

.config/ag/startup/wingo-jaguar.xinitrc

new file mode 100755@@ -0,0 +1,24 @@+#!/bin/sh++( xrdb $HOME/.Xresources+  xsetroot -cursor_name left_ptr+  setxkbmap -option terminate:ctrl_alt_bksp+  xset r rate 200+  xset b 0+  xmodmap $HOME/.xmodmaprc+  xbindkeys+  numlockx on+  dpms-settings+  no-blanking+  xset m 2 1+) &++sleep 2+video tv+nitrogen --restore+compton --backend glx --vsync opengl-swc &+gkrellm &+idesk &+no-blanking-loop &++exec bash -c '(dbus-launch run-wingo ; (while true; do sleep 1000; done))'

.config/ag/startup/wingo-krusty.xinitrc

new file mode 100755@@ -0,0 +1,26 @@+#!/bin/sh++(+  xrdb $HOME/.Xresources+  xsetroot -cursor_name left_ptr+  setxkbmap -option terminate:ctrl_alt_bksp+  xset r rate 200+  xset b 0+  xmodmap $HOME/.xmodmaprc+  xbindkeys -f $HOME/.xbindkeysrc+  numlockx on+  dpms-settings+  autobright+  system76-darter-set-kbd-backlight+  system76-darter-configure-touchpad+) &++nitrogen --restore+(+  sleep 0.3+  video laptop+  dunst &+  nm-applet &+  gkrellm &+) &+exec bash -c '(dbus-launch run-wingo ; (while true; do sleep 1000; done))'

.config/ag/startup/wingo-leopard.xinitrc

new file mode 100755@@ -0,0 +1,30 @@+#!/bin/sh++( xrdb $HOME/.Xresources+  xsetroot -cursor_name left_ptr+  setxkbmap -option terminate:ctrl_alt_bksp+  xset r rate 200+  xset b 0+  xmodmap $HOME/.xmodmaprc+  xbindkeys+  numlockx on+  dpms-settings+  no-blanking+  xset m 3 1+) &++sleep 2+video tv+nitrogen --restore+# compton --backend glx --vsync opengl --vsync-aggressive &+gkrellm &+idesk &+no-blanking-loop &+dunst &+media &++#if [ -z "$(ls /m)" ]; then+#  media >> $HOME/data/log/media.log 2>&1 &+#fi++exec bash -c '(dbus-launch run-wingo ; (while true; do sleep 1000; done))'

.config/ag/startup/wingo-liger.xinitrc

new file mode 100755@@ -0,0 +1,23 @@+#!/bin/sh++( xrdb $HOME/.Xresources+  xsetroot -cursor_name left_ptr+  setxkbmap -option terminate:ctrl_alt_bksp+  xset r rate 200+  xset b 0+  xmodmap $HOME/.xmodmaprc+  xbindkeys -f $HOME/.xbindkeysrc+  numlockx on+  dpms-settings+  xset m 1 1+) &++video left middle right+nitrogen --restore+(sleep 1 && video left middle right) &+compton --backend glx --vsync opengl-swc &+gkrellm &+kmix --keepvisibility &++exec bash -c '(dbus-launch run-wingo ; (while true; do sleep 1000; done))'+

.config/ag/startup/wingo-monty.xinitrc

new file mode 100755@@ -0,0 +1,28 @@+#!/bin/sh++dunst &+( xrdb $HOME/.Xresources+  xsetroot -cursor_name left_ptr+  setxkbmap -option terminate:ctrl_alt_bksp+  xset r rate 200+  xset b 0+  xmodmap $HOME/.xmodmaprc+  xbindkeys -f $HOME/.xbindkeysrc+  numlockx on+  dpms-settings+  xset m 2 1+  autobright+) &++nitrogen --restore+compton --backend glx --vsync opengl-swc &+(+  sleep 0.1+  video laptop+  kmix --keepvisibility &+  nm-applet &+  # wicd-client --tray &+  gkrellm &+) &++exec bash -c '(dbus-launch run-wingo ; (while true; do sleep 1000; done))'

.config/ag/startup/wingo-ocelot.xinitrc

new file mode 100755@@ -0,0 +1,25 @@+#!/bin/sh++( xrdb $HOME/.Xresources+  xsetroot -cursor_name left_ptr+  setxkbmap -option terminate:ctrl_alt_bksp+  xset r rate 200+  xset b 0+  xmodmap $HOME/.xmodmaprc+  xbindkeys -f $HOME/.xbindkeysrc-media+  numlockx on+  dpms-settings+  no-blanking+  xset m 2 1+) &++video one+nitrogen --restore+compton --vsync drm &+gkrellm &+rox -p default++no-blanking-loop &++exec bash -c '(dbus-launch run-wingo ; (while true; do sleep 1000; done))'+

.config/ag/startup/wingo-serval.xinitrc

new file mode 100755@@ -0,0 +1,30 @@+#!/bin/sh++dunst &+( xrdb $HOME/.Xresources+  xsetroot -cursor_name left_ptr+  setxkbmap -option terminate:ctrl_alt_bksp+  xset r rate 200+  xset b 0+  xmodmap $HOME/.xmodmaprc+  xbindkeys -f $HOME/.xbindkeysrc+  numlockx on+  dpms-settings+  xset m 1 1+  xinput --set-prop 'Logitech Anywhere MX' 'libinput Accel Speed' -0.75+  xinput --set-prop 'pointer:Logitech MX Anywhere 2' 'libinput Accel Speed' -0.75+) &++video left middle right+nitrogen --restore+(sleep 1 && video left middle right) &+restart-xcompmgr &+gkrellm &+kmix --keepvisibility &++if [ -n "$SSH_AGENT_PID" ]; then+  ssh-add+fi++exec bash -c '(dbus-launch run-wingo ; (while true; do sleep 1000; done))'+

.config/ag/startup/wingo-tiger.xinitrc

new file mode 100755@@ -0,0 +1,27 @@+#!/bin/sh++dunst &+( xrdb $HOME/.Xresources+  xsetroot -cursor_name left_ptr+  setxkbmap -option terminate:ctrl_alt_bksp+  xset r rate 200+  xset b 0+  xmodmap $HOME/.xmodmaprc+  xbindkeys -f $HOME/.xbindkeysrc+  numlockx on+  dpms-settings+  xset m 2 1+  autobright+) &++nitrogen --restore+compton --backend glx --vsync opengl-swc &+(+  sleep 0.1+  video laptop+  kmix --keepvisibility &+  wicd-client --tray &+  gkrellm &+) &++exec bash -c '(dbus-launch run-wingo ; (while true; do sleep 1000; done))'

.config/ag/startup/wingo-turtle.xinitrc

new file mode 100755@@ -0,0 +1,33 @@+#!/bin/sh++dunst &+( xrdb $HOME/.Xresources+  xsetroot -cursor_name left_ptr+  setxkbmap -option terminate:ctrl_alt_bksp+  xset r rate 200+  xset b 0+  xmodmap $HOME/.xmodmaprc+  xbindkeys -f $HOME/.xbindkeysrc-turtle+  numlockx on+  dpms-settings+  xset m 2 1+  autobright+) &++xinput set-prop 'SynPS/2 Synaptics TouchPad' 'libinput Tapping Enabled' 1+nitrogen --restore+compton --backend glx --vsync opengl-swc &+(+  sleep 0.1+  video laptop+  kmix --keepvisibility &+  nm-applet &+) &++# This runs the global keyboard shortcut listened for KDE.+# In other words, this gives us nice volume controls.+# kglobalaccel5 &++# exec dbus-launch run-wingo+# exec bash -c '(/home/kait/.gox11/bin/wingo && cat)'+exec bash -c 'run-wingo && cat'

.config/ag/startup/wingo-wiggum.xinitrc

new file mode 100755@@ -0,0 +1,27 @@+#!/bin/sh++( xrdb $HOME/.Xresources+  xsetroot -cursor_name left_ptr+  setxkbmap -option terminate:ctrl_alt_bksp+  xset r rate 200+  xset b 0+  xmodmap $HOME/.xmodmaprc+  xbindkeys+  numlockx on+  dpms-settings+  no-blanking+  xset m 3 1+) &++sleep 2+# (sleep 1 && video tv) &+video tv+nitrogen --restore+gkrellm &+idesk &+no-blanking-loop &+dunst &+nm-applet &+kmix --keepvisibility &++exec bash -c '(dbus-launch run-wingo ; (while true; do sleep 1000; done))'

.config/ag/startup/wingo.xinitrc

new file mode 100755@@ -0,0 +1,28 @@+#!/bin/sh++# vim: ft=sh sw=2 ts=2 sts=2++base="$HOME/.config/ag/startup"+case "$(hostname)" in+  Turtle)+    exec "$base/wingo-turtle.xinitrc"+    ;;+  Leopard)+    exec "$base/wingo-leopard.xinitrc"+    ;;+  Jaguar)+    exec "$base/wingo-jaguar.xinitrc"+    ;;+  monty)+    exec "$base/wingo-monty.xinitrc"+    ;;+  krusty)+    exec "$base/wingo-krusty.xinitrc"+    ;;+  frink)+    exec "$base/wingo-frink.xinitrc"+    ;;+  wiggum)+    exec "$base/wingo-wiggum.xinitrc"+    ;;+esac

.config/alacritty/alacritty.yml

new file mode 100644@@ -0,0 +1,391 @@+# Configuration for Alacritty, the GPU enhanced terminal emulator+++# Any items in the `env` entry below will be added as+# environment variables. Some entries may override variables+# set by alacritty it self.+env:+  # TERM env customization.+  #+  # If this property is not set, alacritty will set it to xterm-256color.+  #+  # Note that some xterm terminfo databases don't declare support for italics.+  # You can verify this by checking for the presence of `smso` and `sitm` in+  # `infocmp xterm-256color`.+  TERM: xterm-256color++window:+  # Window dimensions in character columns and lines+  # Falls back to size specified by window manager if set to 0x0.+  # (changes require restart)+  dimensions:+    columns: 0+    lines: 0++  # Adds this many blank pixels of padding around the window+  # Units are physical pixels; this is not DPI aware.+  # (change requires restart)+  padding:+    x: 2+    y: 2++  # Window decorations+  # Setting this to false will result in window without borders and title bar.+  decorations: full++# Display tabs using this many cells (changes require restart)+# tabspaces: 4++# When true, bold text is drawn using the bright variant of colors.+draw_bold_text_with_bright_colors: true++# Font configuration (changes require restart)+#+# Important font attributes like antialiasing, subpixel aa, and hinting can be+# controlled through fontconfig. Specifically, the following attributes should+# have an effect:+#+# * hintstyle+# * antialias+# * lcdfilter+# * rgba+#+# For instance, if you wish to disable subpixel antialiasing, you might set the+# rgba property to "none". If you wish to completely disable antialiasing, you+# can set antialias to false.+#+# Please see these resources for more information on how to use fontconfig+#+# * https://wiki.archlinux.org/index.php/font_configuration#Fontconfig_configuration+# * file:///usr/share/doc/fontconfig/fontconfig-user.html+font:+  # The normal (roman) font face to use.+  normal:+    family: 'Hack Nerd Font' # should be "Menlo" or something on macOS.+    # Style can be specified to pick a specific face.+    # style: Regular++  # The bold font face+  bold:+    family: 'Hack Nerd Font' # should be "Menlo" or something on macOS.+    # Style can be specified to pick a specific face.+    # style: Bold++  # The italic font face+  italic:+    family: 'Hack Nerd Font' # should be "Menlo" or something on macOS.+    # Style can be specified to pick a specific face.+    # style: Italic++  # Point size of the font+  size: 11.0++  # Offset is the extra space around each character. offset.y can be thought of+  # as modifying the linespacing, and offset.x as modifying the letter spacing.+  offset:+    x: 0+    y: 0++  # Glyph offset determines the locations of the glyphs within their cells with+  # the default being at the bottom. Increase the x offset to move the glyph to+  # the right, increase the y offset to move the glyph upward.+  glyph_offset:+    x: 0+    y: 0++  # OS X only: use thin stroke font rendering. Thin strokes are suitable+  # for retina displays, but for non-retina you probably want this set to+  # false.+  use_thin_strokes: true++# Use custom cursor colors. If true, display the cursor in the cursor.foreground+# and cursor.background colors, otherwise invert the colors of the cursor.+# custom_cursor_colors: false++# Colors+colors:+  # Default colors+  primary:+    background: '0xffffff'+    foreground: '0x000000'++  # Colors the cursor will use if `custom_cursor_colors` is true+  cursor:+    text: '0xffffff'+    cursor: '0x000000'++  # Normal colors+  normal:+    black:   '0x000000'+    red:     '0xb21818'+    green:   '0x18b218'+    yellow:  '0xb26818'+    blue:    '0x1818b2'+    magenta: '0xb218b2'+    cyan:    '0x18b2b2'+    white:   '0xb2b2b2'++  # Bright colors+  bright:+    black:   '0x686868'+    red:     '0xff5454'+    green:   '0x00aa00'+    yellow:  '0xffa061'+    blue:    '0x5454ff'+    magenta: '0xff64ff'+    cyan:    '0x54ffff'+    white:   '0xffffff'++  # Dim colors (Optional)+  dim:+    black:   '0x000000'+    red:     '0xb21818'+    green:   '0x18b218'+    yellow:  '0xb26818'+    blue:    '0x1818b2'+    magenta: '0xb218b2'+    cyan:    '0x18b2b2'+    white:   '0xb2b2b2'++# Visual Bell+#+# Any time the BEL code is received, Alacritty "rings" the visual bell. Once+# rung, the terminal background will be set to white and transition back to the+# default background color. You can control the rate of this transition by+# setting the `duration` property (represented in milliseconds). You can also+# configure the transition function by setting the `animation` property.+#+# Possible values for `animation`+# `Ease`+# `EaseOut`+# `EaseOutSine`+# `EaseOutQuad`+# `EaseOutCubic`+# `EaseOutQuart`+# `EaseOutQuint`+# `EaseOutExpo`+# `EaseOutCirc`+# `Linear`+#+# To completely disable the visual bell, set its duration to 0.+#+visual_bell:+  animation: EaseOutExpo+  duration: 0++# Background opacity+background_opacity: 1.0++# Mouse bindings+#+# Currently doesn't support modifiers. Both the `mouse` and `action` fields must+# be specified.+#+# Values for `mouse`:+# - Middle+# - Left+# - Right+# - Numeric identifier such as `5`+#+# Values for `action`:+# - Paste+# - PasteSelection+# - Copy (TODO)+mouse_bindings:+  - { mouse: Middle, action: PasteSelection }++mouse:+  hide_when_typing: true++  # Click settings+  #+  # The `double_click` and `triple_click` settings control the time+  # alacritty should wait for accepting multiple clicks as one double+  # or triple click.+  double_click: { threshold: 300 }+  triple_click: { threshold: 300 }++  # Faux Scrollback+  #+  # The `faux_scrollback_lines` setting controls the number+  # of lines the terminal should scroll when the alternate+  # screen buffer is active. This is used to allow mouse+  # scrolling for applications like `man`.+  #+  # To disable this completely, set `faux_scrollback_lines` to 0.+  faux_scrolling_lines: 5++selection:+  semantic_escape_chars: ",│`|:\"' ()[]{}<>"++dynamic_title: true++# hide_cursor_when_typing: true+++# Style of the cursor+#+# Values for 'cursor_style':+# - Block+# - Underline+# - Beam+cursor:+  style: Block++# Live config reload (changes require restart)+live_config_reload: true++# Shell+#+# You can set shell.program to the path of your favorite shell, e.g. /bin/fish.+# Entries in shell.args are passed unmodified as arguments to the shell.+#+# shell:+#   program: /bin/bash+#   args:+#     - --login++# Key bindings+#+# Each binding is defined as an object with some properties. Most of the+# properties are optional. All of the alphabetical keys should have a letter for+# the `key` value such as `V`. Function keys are probably what you would expect+# as well (F1, F2, ..). The number keys above the main keyboard are encoded as+# `Key1`, `Key2`, etc. Keys on the number pad are encoded `Number1`, `Number2`,+# etc.  These all match the glutin::VirtualKeyCode variants.+#+# A list with all available `key` names can be found here:+# https://docs.rs/glutin/*/glutin/enum.VirtualKeyCode.html#variants+#+# Possible values for `mods`+# `Command`, `Super` refer to the super/command/windows key+# `Control` for the control key+# `Shift` for the Shift key+# `Alt` and `Option` refer to alt/option+#+# mods may be combined with a `|`. For example, requiring control and shift+# looks like:+#+# mods: Control|Shift+#+# The parser is currently quite sensitive to whitespace and capitalization -+# capitalization must match exactly, and piped items must not have whitespace+# around them.+#+# Either an `action`, `chars`, or `command` field must be present.+#   `action` must be one of `Paste`, `PasteSelection`, `Copy`, or `Quit`.+#   `chars` writes the specified string every time that binding is activated.+#     These should generally be escape sequences, but they can be configured to+#     send arbitrary strings of bytes.+#   `command` must be a map containing a `program` string, and `args` array of+#     strings. For example:+#     - { ... , command: { program: "alacritty", args: ["-e", "vttest"] } }+#+# Want to add a binding (e.g. "PageUp") but are unsure what the X sequence+# (e.g. "\x1b[5~") is? Open another terminal (like xterm) without tmux,+# then run `showkey -a` to get the sequence associated to a key combination.+key_bindings:+  # - { key: N,        mods: Control|Shift,    command: { program: "alacritty" } }+  - { key: V,        mods: Control|Shift,    action: Paste               }+  - { key: C,        mods: Control|Shift,    action: Copy                }+  - { key: Q,        mods: Command, action: Quit                         }+  - { key: W,        mods: Command, action: Quit                         }+  - { key: Insert,   mods: Shift,   action: PasteSelection               }+  - { key: Key0,     mods: Control, action: ResetFontSize                }+  - { key: Equals,   mods: Control, action: IncreaseFontSize             }+  - { key: Subtract, mods: Control, action: DecreaseFontSize             }+  - { key: Home,                    chars: "\x1bOH",   mode: AppCursor   }+  - { key: Home,                    chars: "\x1b[H",   mode: ~AppCursor  }+  - { key: End,                     chars: "\x1bOF",   mode: AppCursor   }+  - { key: End,                     chars: "\x1b[F",   mode: ~AppCursor  }+  - { key: PageUp,   mods: Shift,   chars: "\x1b[5;2~"                   }+  - { key: PageUp,   mods: Control, chars: "\x1b[5;5~"                   }+  - { key: PageUp,                  chars: "\x1b[5~"                     }+  - { key: PageDown, mods: Shift,   chars: "\x1b[6;2~"                   }+  - { key: PageDown, mods: Control, chars: "\x1b[6;5~"                   }+  - { key: PageDown,                chars: "\x1b[6~"                     }+  - { key: Tab,      mods: Shift,   chars: "\x1b[Z"                      }+  - { key: Back,                    chars: "\x7f"                        }+  - { key: Back,     mods: Alt,     chars: "\x1b\x7f"                    }+  - { key: Insert,                  chars: "\x1b[2~"                     }+  - { key: Delete,                  chars: "\x1b[3~"                     }+  - { key: Left,     mods: Shift,   chars: "\x1b[1;2D"                   }+  - { key: Left,     mods: Control, chars: "\x1b[1;5D"                   }+  - { key: Left,     mods: Alt,     chars: "\x1b[1;3D"                   }+  - { key: Left,                    chars: "\x1b[D",   mode: ~AppCursor  }+  - { key: Left,                    chars: "\x1bOD",   mode: AppCursor   }+  - { key: Right,    mods: Shift,   chars: "\x1b[1;2C"                   }+  - { key: Right,    mods: Control, chars: "\x1b[1;5C"                   }+  - { key: Right,    mods: Alt,     chars: "\x1b[1;3C"                   }+  - { key: Right,                   chars: "\x1b[C",   mode: ~AppCursor  }+  - { key: Right,                   chars: "\x1bOC",   mode: AppCursor   }+  - { key: Up,       mods: Shift,   chars: "\x1b[1;2A"                   }+  - { key: Up,       mods: Control, chars: "\x1b[1;5A"                   }+  - { key: Up,       mods: Alt,     chars: "\x1b[1;3A"                   }+  - { key: Up,                      chars: "\x1b[A",   mode: ~AppCursor  }+  - { key: Up,                      chars: "\x1bOA",   mode: AppCursor   }+  - { key: Down,     mods: Shift,   chars: "\x1b[1;2B"                   }+  - { key: Down,     mods: Control, chars: "\x1b[1;5B"                   }+  - { key: Down,     mods: Alt,     chars: "\x1b[1;3B"                   }+  - { key: Down,                    chars: "\x1b[B",   mode: ~AppCursor  }+  - { key: Down,                    chars: "\x1bOB",   mode: AppCursor   }+  - { key: F1,                      chars: "\x1bOP"                      }+  - { key: F2,                      chars: "\x1bOQ"                      }+  - { key: F3,                      chars: "\x1bOR"                      }+  - { key: F4,                      chars: "\x1bOS"                      }+  - { key: F5,                      chars: "\x1b[15~"                    }+  - { key: F6,                      chars: "\x1b[17~"                    }+  - { key: F7,                      chars: "\x1b[18~"                    }+  - { key: F8,                      chars: "\x1b[19~"                    }+  - { key: F9,                      chars: "\x1b[20~"                    }+  - { key: F10,                     chars: "\x1b[21~"                    }+  - { key: F11,                     chars: "\x1b[23~"                    }+  - { key: F12,                     chars: "\x1b[24~"                    }+  - { key: F1,       mods: Shift,   chars: "\x1b[1;2P"                   }+  - { key: F2,       mods: Shift,   chars: "\x1b[1;2Q"                   }+  - { key: F3,       mods: Shift,   chars: "\x1b[1;2R"                   }+  - { key: F4,       mods: Shift,   chars: "\x1b[1;2S"                   }+  - { key: F5,       mods: Shift,   chars: "\x1b[15;2~"                  }+  - { key: F6,       mods: Shift,   chars: "\x1b[17;2~"                  }+  - { key: F7,       mods: Shift,   chars: "\x1b[18;2~"                  }+  - { key: F8,       mods: Shift,   chars: "\x1b[19;2~"                  }+  - { key: F9,       mods: Shift,   chars: "\x1b[20;2~"                  }+  - { key: F10,      mods: Shift,   chars: "\x1b[21;2~"                  }+  - { key: F11,      mods: Shift,   chars: "\x1b[23;2~"                  }+  - { key: F12,      mods: Shift,   chars: "\x1b[24;2~"                  }+  - { key: F1,       mods: Control, chars: "\x1b[1;5P"                   }+  - { key: F2,       mods: Control, chars: "\x1b[1;5Q"                   }+  - { key: F3,       mods: Control, chars: "\x1b[1;5R"                   }+  - { key: F4,       mods: Control, chars: "\x1b[1;5S"                   }+  - { key: F5,       mods: Control, chars: "\x1b[15;5~"                  }+  - { key: F6,       mods: Control, chars: "\x1b[17;5~"                  }+  - { key: F7,       mods: Control, chars: "\x1b[18;5~"                  }+  - { key: F8,       mods: Control, chars: "\x1b[19;5~"                  }+  - { key: F9,       mods: Control, chars: "\x1b[20;5~"                  }+  - { key: F10,      mods: Control, chars: "\x1b[21;5~"                  }+  - { key: F11,      mods: Control, chars: "\x1b[23;5~"                  }+  - { key: F12,      mods: Control, chars: "\x1b[24;5~"                  }+  - { key: F1,       mods: Alt,     chars: "\x1b[1;6P"                   }+  - { key: F2,       mods: Alt,     chars: "\x1b[1;6Q"                   }+  - { key: F3,       mods: Alt,     chars: "\x1b[1;6R"                   }+  - { key: F4,       mods: Alt,     chars: "\x1b[1;6S"                   }+  - { key: F5,       mods: Alt,     chars: "\x1b[15;6~"                  }+  - { key: F6,       mods: Alt,     chars: "\x1b[17;6~"                  }+  - { key: F7,       mods: Alt,     chars: "\x1b[18;6~"                  }+  - { key: F8,       mods: Alt,     chars: "\x1b[19;6~"                  }+  - { key: F9,       mods: Alt,     chars: "\x1b[20;6~"                  }+  - { key: F10,      mods: Alt,     chars: "\x1b[21;6~"                  }+  - { key: F11,      mods: Alt,     chars: "\x1b[23;6~"                  }+  - { key: F12,      mods: Alt,     chars: "\x1b[24;6~"                  }+  - { key: F1,       mods: Super,   chars: "\x1b[1;3P"                   }+  - { key: F2,       mods: Super,   chars: "\x1b[1;3Q"                   }+  - { key: F3,       mods: Super,   chars: "\x1b[1;3R"                   }+  - { key: F4,       mods: Super,   chars: "\x1b[1;3S"                   }+  - { key: F5,       mods: Super,   chars: "\x1b[15;3~"                  }+  - { key: F6,       mods: Super,   chars: "\x1b[17;3~"                  }+  - { key: F7,       mods: Super,   chars: "\x1b[18;3~"                  }+  - { key: F8,       mods: Super,   chars: "\x1b[19;3~"                  }+  - { key: F9,       mods: Super,   chars: "\x1b[20;3~"                  }+  - { key: F10,      mods: Super,   chars: "\x1b[21;3~"                  }+  - { key: F11,      mods: Super,   chars: "\x1b[23;3~"                  }+  - { key: F12,      mods: Super,   chars: "\x1b[24;3~"                  }

.config/alacritty/jaguar.yml

new file mode 100644@@ -0,0 +1,391 @@+# Configuration for Alacritty, the GPU enhanced terminal emulator+++# Any items in the `env` entry below will be added as+# environment variables. Some entries may override variables+# set by alacritty it self.+env:+  # TERM env customization.+  #+  # If this property is not set, alacritty will set it to xterm-256color.+  #+  # Note that some xterm terminfo databases don't declare support for italics.+  # You can verify this by checking for the presence of `smso` and `sitm` in+  # `infocmp xterm-256color`.+  TERM: xterm-256color++window:+  # Window dimensions in character columns and lines+  # Falls back to size specified by window manager if set to 0x0.+  # (changes require restart)+  dimensions:+    columns: 0+    lines: 0++  # Adds this many blank pixels of padding around the window+  # Units are physical pixels; this is not DPI aware.+  # (change requires restart)+  padding:+    x: 2+    y: 2++  # Window decorations+  # Setting this to false will result in window without borders and title bar.+  decorations: full++# Display tabs using this many cells (changes require restart)+# tabspaces: 4++# When true, bold text is drawn using the bright variant of colors.+draw_bold_text_with_bright_colors: true++# Font configuration (changes require restart)+#+# Important font attributes like antialiasing, subpixel aa, and hinting can be+# controlled through fontconfig. Specifically, the following attributes should+# have an effect:+#+# * hintstyle+# * antialias+# * lcdfilter+# * rgba+#+# For instance, if you wish to disable subpixel antialiasing, you might set the+# rgba property to "none". If you wish to completely disable antialiasing, you+# can set antialias to false.+#+# Please see these resources for more information on how to use fontconfig+#+# * https://wiki.archlinux.org/index.php/font_configuration#Fontconfig_configuration+# * file:///usr/share/doc/fontconfig/fontconfig-user.html+font:+  # The normal (roman) font face to use.+  normal:+    family: 'Hack Nerd Font' # should be "Menlo" or something on macOS.+    # Style can be specified to pick a specific face.+    # style: Regular++  # The bold font face+  bold:+    family: 'Hack Nerd Font' # should be "Menlo" or something on macOS.+    # Style can be specified to pick a specific face.+    # style: Bold++  # The italic font face+  italic:+    family: 'Hack Nerd Font' # should be "Menlo" or something on macOS.+    # Style can be specified to pick a specific face.+    # style: Italic++  # Point size of the font+  size: 18.0++  # Offset is the extra space around each character. offset.y can be thought of+  # as modifying the linespacing, and offset.x as modifying the letter spacing.+  offset:+    x: 0+    y: 0++  # Glyph offset determines the locations of the glyphs within their cells with+  # the default being at the bottom. Increase the x offset to move the glyph to+  # the right, increase the y offset to move the glyph upward.+  glyph_offset:+    x: 0+    y: 0++  # OS X only: use thin stroke font rendering. Thin strokes are suitable+  # for retina displays, but for non-retina you probably want this set to+  # false.+  use_thin_strokes: true++# Use custom cursor colors. If true, display the cursor in the cursor.foreground+# and cursor.background colors, otherwise invert the colors of the cursor.+# custom_cursor_colors: false++# Colors+colors:+  # Default colors+  primary:+    background: '0xffffff'+    foreground: '0x000000'++  # Colors the cursor will use if `custom_cursor_colors` is true+  cursor:+    text: '0xffffff'+    cursor: '0x000000'++  # Normal colors+  normal:+    black:   '0x000000'+    red:     '0xb21818'+    green:   '0x18b218'+    yellow:  '0xb26818'+    blue:    '0x1818b2'+    magenta: '0xb218b2'+    cyan:    '0x18b2b2'+    white:   '0xb2b2b2'++  # Bright colors+  bright:+    black:   '0x686868'+    red:     '0xff5454'+    green:   '0x00aa00'+    yellow:  '0xffa061'+    blue:    '0x5454ff'+    magenta: '0xff64ff'+    cyan:    '0x54ffff'+    white:   '0xffffff'++  # Dim colors (Optional)+  dim:+    black:   '0x000000'+    red:     '0xb21818'+    green:   '0x18b218'+    yellow:  '0xb26818'+    blue:    '0x1818b2'+    magenta: '0xb218b2'+    cyan:    '0x18b2b2'+    white:   '0xb2b2b2'++# Visual Bell+#+# Any time the BEL code is received, Alacritty "rings" the visual bell. Once+# rung, the terminal background will be set to white and transition back to the+# default background color. You can control the rate of this transition by+# setting the `duration` property (represented in milliseconds). You can also+# configure the transition function by setting the `animation` property.+#+# Possible values for `animation`+# `Ease`+# `EaseOut`+# `EaseOutSine`+# `EaseOutQuad`+# `EaseOutCubic`+# `EaseOutQuart`+# `EaseOutQuint`+# `EaseOutExpo`+# `EaseOutCirc`+# `Linear`+#+# To completely disable the visual bell, set its duration to 0.+#+visual_bell:+  animation: EaseOutExpo+  duration: 0++# Background opacity+background_opacity: 1.0++# Mouse bindings+#+# Currently doesn't support modifiers. Both the `mouse` and `action` fields must+# be specified.+#+# Values for `mouse`:+# - Middle+# - Left+# - Right+# - Numeric identifier such as `5`+#+# Values for `action`:+# - Paste+# - PasteSelection+# - Copy (TODO)+mouse_bindings:+  - { mouse: Middle, action: PasteSelection }++mouse:+  hide_when_typing: true++  # Click settings+  #+  # The `double_click` and `triple_click` settings control the time+  # alacritty should wait for accepting multiple clicks as one double+  # or triple click.+  double_click: { threshold: 300 }+  triple_click: { threshold: 300 }++  # Faux Scrollback+  #+  # The `faux_scrollback_lines` setting controls the number+  # of lines the terminal should scroll when the alternate+  # screen buffer is active. This is used to allow mouse+  # scrolling for applications like `man`.+  #+  # To disable this completely, set `faux_scrollback_lines` to 0.+  faux_scrolling_lines: 5++selection:+  semantic_escape_chars: ",│`|:\"' ()[]{}<>"++dynamic_title: true++# hide_cursor_when_typing: true+++# Style of the cursor+#+# Values for 'cursor_style':+# - Block+# - Underline+# - Beam+cursor:+  style: Block++# Live config reload (changes require restart)+live_config_reload: true++# Shell+#+# You can set shell.program to the path of your favorite shell, e.g. /bin/fish.+# Entries in shell.args are passed unmodified as arguments to the shell.+#+# shell:+#   program: /bin/bash+#   args:+#     - --login++# Key bindings+#+# Each binding is defined as an object with some properties. Most of the+# properties are optional. All of the alphabetical keys should have a letter for+# the `key` value such as `V`. Function keys are probably what you would expect+# as well (F1, F2, ..). The number keys above the main keyboard are encoded as+# `Key1`, `Key2`, etc. Keys on the number pad are encoded `Number1`, `Number2`,+# etc.  These all match the glutin::VirtualKeyCode variants.+#+# A list with all available `key` names can be found here:+# https://docs.rs/glutin/*/glutin/enum.VirtualKeyCode.html#variants+#+# Possible values for `mods`+# `Command`, `Super` refer to the super/command/windows key+# `Control` for the control key+# `Shift` for the Shift key+# `Alt` and `Option` refer to alt/option+#+# mods may be combined with a `|`. For example, requiring control and shift+# looks like:+#+# mods: Control|Shift+#+# The parser is currently quite sensitive to whitespace and capitalization -+# capitalization must match exactly, and piped items must not have whitespace+# around them.+#+# Either an `action`, `chars`, or `command` field must be present.+#   `action` must be one of `Paste`, `PasteSelection`, `Copy`, or `Quit`.+#   `chars` writes the specified string every time that binding is activated.+#     These should generally be escape sequences, but they can be configured to+#     send arbitrary strings of bytes.+#   `command` must be a map containing a `program` string, and `args` array of+#     strings. For example:+#     - { ... , command: { program: "alacritty", args: ["-e", "vttest"] } }+#+# Want to add a binding (e.g. "PageUp") but are unsure what the X sequence+# (e.g. "\x1b[5~") is? Open another terminal (like xterm) without tmux,+# then run `showkey -a` to get the sequence associated to a key combination.+key_bindings:+  # - { key: N,        mods: Control|Shift,    command: { program: "alacritty" } }+  - { key: V,        mods: Control|Shift,    action: Paste               }+  - { key: C,        mods: Control|Shift,    action: Copy                }+  - { key: Q,        mods: Command, action: Quit                         }+  - { key: W,        mods: Command, action: Quit                         }+  - { key: Insert,   mods: Shift,   action: PasteSelection               }+  - { key: Key0,     mods: Control, action: ResetFontSize                }+  - { key: Equals,   mods: Control, action: IncreaseFontSize             }+  - { key: Subtract, mods: Control, action: DecreaseFontSize             }+  - { key: Home,                    chars: "\x1bOH",   mode: AppCursor   }+  - { key: Home,                    chars: "\x1b[H",   mode: ~AppCursor  }+  - { key: End,                     chars: "\x1bOF",   mode: AppCursor   }+  - { key: End,                     chars: "\x1b[F",   mode: ~AppCursor  }+  - { key: PageUp,   mods: Shift,   chars: "\x1b[5;2~"                   }+  - { key: PageUp,   mods: Control, chars: "\x1b[5;5~"                   }+  - { key: PageUp,                  chars: "\x1b[5~"                     }+  - { key: PageDown, mods: Shift,   chars: "\x1b[6;2~"                   }+  - { key: PageDown, mods: Control, chars: "\x1b[6;5~"                   }+  - { key: PageDown,                chars: "\x1b[6~"                     }+  - { key: Tab,      mods: Shift,   chars: "\x1b[Z"                      }+  - { key: Back,                    chars: "\x7f"                        }+  - { key: Back,     mods: Alt,     chars: "\x1b\x7f"                    }+  - { key: Insert,                  chars: "\x1b[2~"                     }+  - { key: Delete,                  chars: "\x1b[3~"                     }+  - { key: Left,     mods: Shift,   chars: "\x1b[1;2D"                   }+  - { key: Left,     mods: Control, chars: "\x1b[1;5D"                   }+  - { key: Left,     mods: Alt,     chars: "\x1b[1;3D"                   }+  - { key: Left,                    chars: "\x1b[D",   mode: ~AppCursor  }+  - { key: Left,                    chars: "\x1bOD",   mode: AppCursor   }+  - { key: Right,    mods: Shift,   chars: "\x1b[1;2C"                   }+  - { key: Right,    mods: Control, chars: "\x1b[1;5C"                   }+  - { key: Right,    mods: Alt,     chars: "\x1b[1;3C"                   }+  - { key: Right,                   chars: "\x1b[C",   mode: ~AppCursor  }+  - { key: Right,                   chars: "\x1bOC",   mode: AppCursor   }+  - { key: Up,       mods: Shift,   chars: "\x1b[1;2A"                   }+  - { key: Up,       mods: Control, chars: "\x1b[1;5A"                   }+  - { key: Up,       mods: Alt,     chars: "\x1b[1;3A"                   }+  - { key: Up,                      chars: "\x1b[A",   mode: ~AppCursor  }+  - { key: Up,                      chars: "\x1bOA",   mode: AppCursor   }+  - { key: Down,     mods: Shift,   chars: "\x1b[1;2B"                   }+  - { key: Down,     mods: Control, chars: "\x1b[1;5B"                   }+  - { key: Down,     mods: Alt,     chars: "\x1b[1;3B"                   }+  - { key: Down,                    chars: "\x1b[B",   mode: ~AppCursor  }+  - { key: Down,                    chars: "\x1bOB",   mode: AppCursor   }+  - { key: F1,                      chars: "\x1bOP"                      }+  - { key: F2,                      chars: "\x1bOQ"                      }+  - { key: F3,                      chars: "\x1bOR"                      }+  - { key: F4,                      chars: "\x1bOS"                      }+  - { key: F5,                      chars: "\x1b[15~"                    }+  - { key: F6,                      chars: "\x1b[17~"                    }+  - { key: F7,                      chars: "\x1b[18~"                    }+  - { key: F8,                      chars: "\x1b[19~"                    }+  - { key: F9,                      chars: "\x1b[20~"                    }+  - { key: F10,                     chars: "\x1b[21~"                    }+  - { key: F11,                     chars: "\x1b[23~"                    }+  - { key: F12,                     chars: "\x1b[24~"                    }+  - { key: F1,       mods: Shift,   chars: "\x1b[1;2P"                   }+  - { key: F2,       mods: Shift,   chars: "\x1b[1;2Q"                   }+  - { key: F3,       mods: Shift,   chars: "\x1b[1;2R"                   }+  - { key: F4,       mods: Shift,   chars: "\x1b[1;2S"                   }+  - { key: F5,       mods: Shift,   chars: "\x1b[15;2~"                  }+  - { key: F6,       mods: Shift,   chars: "\x1b[17;2~"                  }+  - { key: F7,       mods: Shift,   chars: "\x1b[18;2~"                  }+  - { key: F8,       mods: Shift,   chars: "\x1b[19;2~"                  }+  - { key: F9,       mods: Shift,   chars: "\x1b[20;2~"                  }+  - { key: F10,      mods: Shift,   chars: "\x1b[21;2~"                  }+  - { key: F11,      mods: Shift,   chars: "\x1b[23;2~"                  }+  - { key: F12,      mods: Shift,   chars: "\x1b[24;2~"                  }+  - { key: F1,       mods: Control, chars: "\x1b[1;5P"                   }+  - { key: F2,       mods: Control, chars: "\x1b[1;5Q"                   }+  - { key: F3,       mods: Control, chars: "\x1b[1;5R"                   }+  - { key: F4,       mods: Control, chars: "\x1b[1;5S"                   }+  - { key: F5,       mods: Control, chars: "\x1b[15;5~"                  }+  - { key: F6,       mods: Control, chars: "\x1b[17;5~"                  }+  - { key: F7,       mods: Control, chars: "\x1b[18;5~"                  }+  - { key: F8,       mods: Control, chars: "\x1b[19;5~"                  }+  - { key: F9,       mods: Control, chars: "\x1b[20;5~"                  }+  - { key: F10,      mods: Control, chars: "\x1b[21;5~"                  }+  - { key: F11,      mods: Control, chars: "\x1b[23;5~"                  }+  - { key: F12,      mods: Control, chars: "\x1b[24;5~"                  }+  - { key: F1,       mods: Alt,     chars: "\x1b[1;6P"                   }+  - { key: F2,       mods: Alt,     chars: "\x1b[1;6Q"                   }+  - { key: F3,       mods: Alt,     chars: "\x1b[1;6R"                   }+  - { key: F4,       mods: Alt,     chars: "\x1b[1;6S"                   }+  - { key: F5,       mods: Alt,     chars: "\x1b[15;6~"                  }+  - { key: F6,       mods: Alt,     chars: "\x1b[17;6~"                  }+  - { key: F7,       mods: Alt,     chars: "\x1b[18;6~"                  }+  - { key: F8,       mods: Alt,     chars: "\x1b[19;6~"                  }+  - { key: F9,       mods: Alt,     chars: "\x1b[20;6~"                  }+  - { key: F10,      mods: Alt,     chars: "\x1b[21;6~"                  }+  - { key: F11,      mods: Alt,     chars: "\x1b[23;6~"                  }+  - { key: F12,      mods: Alt,     chars: "\x1b[24;6~"                  }+  - { key: F1,       mods: Super,   chars: "\x1b[1;3P"                   }+  - { key: F2,       mods: Super,   chars: "\x1b[1;3Q"                   }+  - { key: F3,       mods: Super,   chars: "\x1b[1;3R"                   }+  - { key: F4,       mods: Super,   chars: "\x1b[1;3S"                   }+  - { key: F5,       mods: Super,   chars: "\x1b[15;3~"                  }+  - { key: F6,       mods: Super,   chars: "\x1b[17;3~"                  }+  - { key: F7,       mods: Super,   chars: "\x1b[18;3~"                  }+  - { key: F8,       mods: Super,   chars: "\x1b[19;3~"                  }+  - { key: F9,       mods: Super,   chars: "\x1b[20;3~"                  }+  - { key: F10,      mods: Super,   chars: "\x1b[21;3~"                  }+  - { key: F11,      mods: Super,   chars: "\x1b[23;3~"                  }+  - { key: F12,      mods: Super,   chars: "\x1b[24;3~"                  }

.config/alacritty/tiger-big.yml

new file mode 100644@@ -0,0 +1,391 @@+# Configuration for Alacritty, the GPU enhanced terminal emulator+++# Any items in the `env` entry below will be added as+# environment variables. Some entries may override variables+# set by alacritty it self.+env:+  # TERM env customization.+  #+  # If this property is not set, alacritty will set it to xterm-256color.+  #+  # Note that some xterm terminfo databases don't declare support for italics.+  # You can verify this by checking for the presence of `smso` and `sitm` in+  # `infocmp xterm-256color`.+  TERM: xterm-256color++window:+  # Window dimensions in character columns and lines+  # Falls back to size specified by window manager if set to 0x0.+  # (changes require restart)+  dimensions:+    columns: 0+    lines: 0++  # Adds this many blank pixels of padding around the window+  # Units are physical pixels; this is not DPI aware.+  # (change requires restart)+  padding:+    x: 2+    y: 2++  # Window decorations+  # Setting this to false will result in window without borders and title bar.+  decorations: full++# Display tabs using this many cells (changes require restart)+# tabspaces: 4++# When true, bold text is drawn using the bright variant of colors.+draw_bold_text_with_bright_colors: true++# Font configuration (changes require restart)+#+# Important font attributes like antialiasing, subpixel aa, and hinting can be+# controlled through fontconfig. Specifically, the following attributes should+# have an effect:+#+# * hintstyle+# * antialias+# * lcdfilter+# * rgba+#+# For instance, if you wish to disable subpixel antialiasing, you might set the+# rgba property to "none". If you wish to completely disable antialiasing, you+# can set antialias to false.+#+# Please see these resources for more information on how to use fontconfig+#+# * https://wiki.archlinux.org/index.php/font_configuration#Fontconfig_configuration+# * file:///usr/share/doc/fontconfig/fontconfig-user.html+font:+  # The normal (roman) font face to use.+  normal:+    family: 'Hack Nerd Font' # should be "Menlo" or something on macOS.+    # Style can be specified to pick a specific face.+    # style: Regular++  # The bold font face+  bold:+    family: 'Hack Nerd Font' # should be "Menlo" or something on macOS.+    # Style can be specified to pick a specific face.+    # style: Bold++  # The italic font face+  italic:+    family: 'Hack Nerd Font' # should be "Menlo" or something on macOS.+    # Style can be specified to pick a specific face.+    # style: Italic++  # Point size of the font+  size: 24.0++  # Offset is the extra space around each character. offset.y can be thought of+  # as modifying the linespacing, and offset.x as modifying the letter spacing.+  offset:+    x: 0+    y: 0++  # Glyph offset determines the locations of the glyphs within their cells with+  # the default being at the bottom. Increase the x offset to move the glyph to+  # the right, increase the y offset to move the glyph upward.+  glyph_offset:+    x: 0+    y: 0++  # OS X only: use thin stroke font rendering. Thin strokes are suitable+  # for retina displays, but for non-retina you probably want this set to+  # false.+  use_thin_strokes: true++# Use custom cursor colors. If true, display the cursor in the cursor.foreground+# and cursor.background colors, otherwise invert the colors of the cursor.+# custom_cursor_colors: false++# Colors+colors:+  # Default colors+  primary:+    background: '0xffffff'+    foreground: '0x000000'++  # Colors the cursor will use if `custom_cursor_colors` is true+  cursor:+    text: '0xffffff'+    cursor: '0x000000'++  # Normal colors+  normal:+    black:   '0x000000'+    red:     '0xb21818'+    green:   '0x18b218'+    yellow:  '0xb26818'+    blue:    '0x1818b2'+    magenta: '0xb218b2'+    cyan:    '0x18b2b2'+    white:   '0xb2b2b2'++  # Bright colors+  bright:+    black:   '0x686868'+    red:     '0xff5454'+    green:   '0x00aa00'+    yellow:  '0xffa061'+    blue:    '0x5454ff'+    magenta: '0xff64ff'+    cyan:    '0x54ffff'+    white:   '0xffffff'++  # Dim colors (Optional)+  dim:+    black:   '0x000000'+    red:     '0xb21818'+    green:   '0x18b218'+    yellow:  '0xb26818'+    blue:    '0x1818b2'+    magenta: '0xb218b2'+    cyan:    '0x18b2b2'+    white:   '0xb2b2b2'++# Visual Bell+#+# Any time the BEL code is received, Alacritty "rings" the visual bell. Once+# rung, the terminal background will be set to white and transition back to the+# default background color. You can control the rate of this transition by+# setting the `duration` property (represented in milliseconds). You can also+# configure the transition function by setting the `animation` property.+#+# Possible values for `animation`+# `Ease`+# `EaseOut`+# `EaseOutSine`+# `EaseOutQuad`+# `EaseOutCubic`+# `EaseOutQuart`+# `EaseOutQuint`+# `EaseOutExpo`+# `EaseOutCirc`+# `Linear`+#+# To completely disable the visual bell, set its duration to 0.+#+visual_bell:+  animation: EaseOutExpo+  duration: 0++# Background opacity+background_opacity: 1.0++# Mouse bindings+#+# Currently doesn't support modifiers. Both the `mouse` and `action` fields must+# be specified.+#+# Values for `mouse`:+# - Middle+# - Left+# - Right+# - Numeric identifier such as `5`+#+# Values for `action`:+# - Paste+# - PasteSelection+# - Copy (TODO)+mouse_bindings:+  - { mouse: Middle, action: PasteSelection }++mouse:+  hide_when_typing: true++  # Click settings+  #+  # The `double_click` and `triple_click` settings control the time+  # alacritty should wait for accepting multiple clicks as one double+  # or triple click.+  double_click: { threshold: 300 }+  triple_click: { threshold: 300 }++  # Faux Scrollback+  #+  # The `faux_scrollback_lines` setting controls the number+  # of lines the terminal should scroll when the alternate+  # screen buffer is active. This is used to allow mouse+  # scrolling for applications like `man`.+  #+  # To disable this completely, set `faux_scrollback_lines` to 0.+  faux_scrolling_lines: 5++selection:+  semantic_escape_chars: ",│`|:\"' ()[]{}<>"++dynamic_title: true++# hide_cursor_when_typing: true+++# Style of the cursor+#+# Values for 'cursor_style':+# - Block+# - Underline+# - Beam+cursor:+  style: Block++# Live config reload (changes require restart)+live_config_reload: true++# Shell+#+# You can set shell.program to the path of your favorite shell, e.g. /bin/fish.+# Entries in shell.args are passed unmodified as arguments to the shell.+#+# shell:+#   program: /bin/bash+#   args:+#     - --login++# Key bindings+#+# Each binding is defined as an object with some properties. Most of the+# properties are optional. All of the alphabetical keys should have a letter for+# the `key` value such as `V`. Function keys are probably what you would expect+# as well (F1, F2, ..). The number keys above the main keyboard are encoded as+# `Key1`, `Key2`, etc. Keys on the number pad are encoded `Number1`, `Number2`,+# etc.  These all match the glutin::VirtualKeyCode variants.+#+# A list with all available `key` names can be found here:+# https://docs.rs/glutin/*/glutin/enum.VirtualKeyCode.html#variants+#+# Possible values for `mods`+# `Command`, `Super` refer to the super/command/windows key+# `Control` for the control key+# `Shift` for the Shift key+# `Alt` and `Option` refer to alt/option+#+# mods may be combined with a `|`. For example, requiring control and shift+# looks like:+#+# mods: Control|Shift+#+# The parser is currently quite sensitive to whitespace and capitalization -+# capitalization must match exactly, and piped items must not have whitespace+# around them.+#+# Either an `action`, `chars`, or `command` field must be present.+#   `action` must be one of `Paste`, `PasteSelection`, `Copy`, or `Quit`.+#   `chars` writes the specified string every time that binding is activated.+#     These should generally be escape sequences, but they can be configured to+#     send arbitrary strings of bytes.+#   `command` must be a map containing a `program` string, and `args` array of+#     strings. For example:+#     - { ... , command: { program: "alacritty", args: ["-e", "vttest"] } }+#+# Want to add a binding (e.g. "PageUp") but are unsure what the X sequence+# (e.g. "\x1b[5~") is? Open another terminal (like xterm) without tmux,+# then run `showkey -a` to get the sequence associated to a key combination.+key_bindings:+  # - { key: N,        mods: Control|Shift,    command: { program: "alacritty" } }+  - { key: V,        mods: Control|Shift,    action: Paste               }+  - { key: C,        mods: Control|Shift,    action: Copy                }+  - { key: Q,        mods: Command, action: Quit                         }+  - { key: W,        mods: Command, action: Quit                         }+  - { key: Insert,   mods: Shift,   action: PasteSelection               }+  - { key: Key0,     mods: Control, action: ResetFontSize                }+  - { key: Equals,   mods: Control, action: IncreaseFontSize             }+  - { key: Subtract, mods: Control, action: DecreaseFontSize             }+  - { key: Home,                    chars: "\x1bOH",   mode: AppCursor   }+  - { key: Home,                    chars: "\x1b[H",   mode: ~AppCursor  }+  - { key: End,                     chars: "\x1bOF",   mode: AppCursor   }+  - { key: End,                     chars: "\x1b[F",   mode: ~AppCursor  }+  - { key: PageUp,   mods: Shift,   chars: "\x1b[5;2~"                   }+  - { key: PageUp,   mods: Control, chars: "\x1b[5;5~"                   }+  - { key: PageUp,                  chars: "\x1b[5~"                     }+  - { key: PageDown, mods: Shift,   chars: "\x1b[6;2~"                   }+  - { key: PageDown, mods: Control, chars: "\x1b[6;5~"                   }+  - { key: PageDown,                chars: "\x1b[6~"                     }+  - { key: Tab,      mods: Shift,   chars: "\x1b[Z"                      }+  - { key: Back,                    chars: "\x7f"                        }+  - { key: Back,     mods: Alt,     chars: "\x1b\x7f"                    }+  - { key: Insert,                  chars: "\x1b[2~"                     }+  - { key: Delete,                  chars: "\x1b[3~"                     }+  - { key: Left,     mods: Shift,   chars: "\x1b[1;2D"                   }+  - { key: Left,     mods: Control, chars: "\x1b[1;5D"                   }+  - { key: Left,     mods: Alt,     chars: "\x1b[1;3D"                   }+  - { key: Left,                    chars: "\x1b[D",   mode: ~AppCursor  }+  - { key: Left,                    chars: "\x1bOD",   mode: AppCursor   }+  - { key: Right,    mods: Shift,   chars: "\x1b[1;2C"                   }+  - { key: Right,    mods: Control, chars: "\x1b[1;5C"                   }+  - { key: Right,    mods: Alt,     chars: "\x1b[1;3C"                   }+  - { key: Right,                   chars: "\x1b[C",   mode: ~AppCursor  }+  - { key: Right,                   chars: "\x1bOC",   mode: AppCursor   }+  - { key: Up,       mods: Shift,   chars: "\x1b[1;2A"                   }+  - { key: Up,       mods: Control, chars: "\x1b[1;5A"                   }+  - { key: Up,       mods: Alt,     chars: "\x1b[1;3A"                   }+  - { key: Up,                      chars: "\x1b[A",   mode: ~AppCursor  }+  - { key: Up,                      chars: "\x1bOA",   mode: AppCursor   }+  - { key: Down,     mods: Shift,   chars: "\x1b[1;2B"                   }+  - { key: Down,     mods: Control, chars: "\x1b[1;5B"                   }+  - { key: Down,     mods: Alt,     chars: "\x1b[1;3B"                   }+  - { key: Down,                    chars: "\x1b[B",   mode: ~AppCursor  }+  - { key: Down,                    chars: "\x1bOB",   mode: AppCursor   }+  - { key: F1,                      chars: "\x1bOP"                      }+  - { key: F2,                      chars: "\x1bOQ"                      }+  - { key: F3,                      chars: "\x1bOR"                      }+  - { key: F4,                      chars: "\x1bOS"                      }+  - { key: F5,                      chars: "\x1b[15~"                    }+  - { key: F6,                      chars: "\x1b[17~"                    }+  - { key: F7,                      chars: "\x1b[18~"                    }+  - { key: F8,                      chars: "\x1b[19~"                    }+  - { key: F9,                      chars: "\x1b[20~"                    }+  - { key: F10,                     chars: "\x1b[21~"                    }+  - { key: F11,                     chars: "\x1b[23~"                    }+  - { key: F12,                     chars: "\x1b[24~"                    }+  - { key: F1,       mods: Shift,   chars: "\x1b[1;2P"                   }+  - { key: F2,       mods: Shift,   chars: "\x1b[1;2Q"                   }+  - { key: F3,       mods: Shift,   chars: "\x1b[1;2R"                   }+  - { key: F4,       mods: Shift,   chars: "\x1b[1;2S"                   }+  - { key: F5,       mods: Shift,   chars: "\x1b[15;2~"                  }+  - { key: F6,       mods: Shift,   chars: "\x1b[17;2~"                  }+  - { key: F7,       mods: Shift,   chars: "\x1b[18;2~"                  }+  - { key: F8,       mods: Shift,   chars: "\x1b[19;2~"                  }+  - { key: F9,       mods: Shift,   chars: "\x1b[20;2~"                  }+  - { key: F10,      mods: Shift,   chars: "\x1b[21;2~"                  }+  - { key: F11,      mods: Shift,   chars: "\x1b[23;2~"                  }+  - { key: F12,      mods: Shift,   chars: "\x1b[24;2~"                  }+  - { key: F1,       mods: Control, chars: "\x1b[1;5P"                   }+  - { key: F2,       mods: Control, chars: "\x1b[1;5Q"                   }+  - { key: F3,       mods: Control, chars: "\x1b[1;5R"                   }+  - { key: F4,       mods: Control, chars: "\x1b[1;5S"                   }+  - { key: F5,       mods: Control, chars: "\x1b[15;5~"                  }+  - { key: F6,       mods: Control, chars: "\x1b[17;5~"                  }+  - { key: F7,       mods: Control, chars: "\x1b[18;5~"                  }+  - { key: F8,       mods: Control, chars: "\x1b[19;5~"                  }+  - { key: F9,       mods: Control, chars: "\x1b[20;5~"                  }+  - { key: F10,      mods: Control, chars: "\x1b[21;5~"                  }+  - { key: F11,      mods: Control, chars: "\x1b[23;5~"                  }+  - { key: F12,      mods: Control, chars: "\x1b[24;5~"                  }+  - { key: F1,       mods: Alt,     chars: "\x1b[1;6P"                   }+  - { key: F2,       mods: Alt,     chars: "\x1b[1;6Q"                   }+  - { key: F3,       mods: Alt,     chars: "\x1b[1;6R"                   }+  - { key: F4,       mods: Alt,     chars: "\x1b[1;6S"                   }+  - { key: F5,       mods: Alt,     chars: "\x1b[15;6~"                  }+  - { key: F6,       mods: Alt,     chars: "\x1b[17;6~"                  }+  - { key: F7,       mods: Alt,     chars: "\x1b[18;6~"                  }+  - { key: F8,       mods: Alt,     chars: "\x1b[19;6~"                  }+  - { key: F9,       mods: Alt,     chars: "\x1b[20;6~"                  }+  - { key: F10,      mods: Alt,     chars: "\x1b[21;6~"                  }+  - { key: F11,      mods: Alt,     chars: "\x1b[23;6~"                  }+  - { key: F12,      mods: Alt,     chars: "\x1b[24;6~"                  }+  - { key: F1,       mods: Super,   chars: "\x1b[1;3P"                   }+  - { key: F2,       mods: Super,   chars: "\x1b[1;3Q"                   }+  - { key: F3,       mods: Super,   chars: "\x1b[1;3R"                   }+  - { key: F4,       mods: Super,   chars: "\x1b[1;3S"                   }+  - { key: F5,       mods: Super,   chars: "\x1b[15;3~"                  }+  - { key: F6,       mods: Super,   chars: "\x1b[17;3~"                  }+  - { key: F7,       mods: Super,   chars: "\x1b[18;3~"                  }+  - { key: F8,       mods: Super,   chars: "\x1b[19;3~"                  }+  - { key: F9,       mods: Super,   chars: "\x1b[20;3~"                  }+  - { key: F10,      mods: Super,   chars: "\x1b[21;3~"                  }+  - { key: F11,      mods: Super,   chars: "\x1b[23;3~"                  }+  - { key: F12,      mods: Super,   chars: "\x1b[24;3~"                  }

.config/alacritty/tiger.yml

new file mode 100644@@ -0,0 +1,391 @@+# Configuration for Alacritty, the GPU enhanced terminal emulator+++# Any items in the `env` entry below will be added as+# environment variables. Some entries may override variables+# set by alacritty it self.+env:+  # TERM env customization.+  #+  # If this property is not set, alacritty will set it to xterm-256color.+  #+  # Note that some xterm terminfo databases don't declare support for italics.+  # You can verify this by checking for the presence of `smso` and `sitm` in+  # `infocmp xterm-256color`.+  TERM: xterm-256color++window:+  # Window dimensions in character columns and lines+  # Falls back to size specified by window manager if set to 0x0.+  # (changes require restart)+  dimensions:+    columns: 0+    lines: 0++  # Adds this many blank pixels of padding around the window+  # Units are physical pixels; this is not DPI aware.+  # (change requires restart)+  padding:+    x: 2+    y: 2++  # Window decorations+  # Setting this to false will result in window without borders and title bar.+  decorations: full++# Display tabs using this many cells (changes require restart)+# tabspaces: 4++# When true, bold text is drawn using the bright variant of colors.+draw_bold_text_with_bright_colors: true++# Font configuration (changes require restart)+#+# Important font attributes like antialiasing, subpixel aa, and hinting can be+# controlled through fontconfig. Specifically, the following attributes should+# have an effect:+#+# * hintstyle+# * antialias+# * lcdfilter+# * rgba+#+# For instance, if you wish to disable subpixel antialiasing, you might set the+# rgba property to "none". If you wish to completely disable antialiasing, you+# can set antialias to false.+#+# Please see these resources for more information on how to use fontconfig+#+# * https://wiki.archlinux.org/index.php/font_configuration#Fontconfig_configuration+# * file:///usr/share/doc/fontconfig/fontconfig-user.html+font:+  # The normal (roman) font face to use.+  normal:+    family: 'Hack Nerd Font' # should be "Menlo" or something on macOS.+    # Style can be specified to pick a specific face.+    # style: Regular++  # The bold font face+  bold:+    family: 'Hack Nerd Font' # should be "Menlo" or something on macOS.+    # Style can be specified to pick a specific face.+    # style: Bold++  # The italic font face+  italic:+    family: 'Hack Nerd Font' # should be "Menlo" or something on macOS.+    # Style can be specified to pick a specific face.+    # style: Italic++  # Point size of the font+  size: 8.0++  # Offset is the extra space around each character. offset.y can be thought of+  # as modifying the linespacing, and offset.x as modifying the letter spacing.+  offset:+    x: 0+    y: 0++  # Glyph offset determines the locations of the glyphs within their cells with+  # the default being at the bottom. Increase the x offset to move the glyph to+  # the right, increase the y offset to move the glyph upward.+  glyph_offset:+    x: 0+    y: 0++  # OS X only: use thin stroke font rendering. Thin strokes are suitable+  # for retina displays, but for non-retina you probably want this set to+  # false.+  use_thin_strokes: true++# Use custom cursor colors. If true, display the cursor in the cursor.foreground+# and cursor.background colors, otherwise invert the colors of the cursor.+# custom_cursor_colors: false++# Colors+colors:+  # Default colors+  primary:+    background: '0xffffff'+    foreground: '0x000000'++  # Colors the cursor will use if `custom_cursor_colors` is true+  cursor:+    text: '0xffffff'+    cursor: '0x000000'++  # Normal colors+  normal:+    black:   '0x000000'+    red:     '0xb21818'+    green:   '0x18b218'+    yellow:  '0xb26818'+    blue:    '0x1818b2'+    magenta: '0xb218b2'+    cyan:    '0x18b2b2'+    white:   '0xb2b2b2'++  # Bright colors+  bright:+    black:   '0x686868'+    red:     '0xff5454'+    green:   '0x00aa00'+    yellow:  '0xffa061'+    blue:    '0x5454ff'+    magenta: '0xff64ff'+    cyan:    '0x54ffff'+    white:   '0xffffff'++  # Dim colors (Optional)+  dim:+    black:   '0x000000'+    red:     '0xb21818'+    green:   '0x18b218'+    yellow:  '0xb26818'+    blue:    '0x1818b2'+    magenta: '0xb218b2'+    cyan:    '0x18b2b2'+    white:   '0xb2b2b2'++# Visual Bell+#+# Any time the BEL code is received, Alacritty "rings" the visual bell. Once+# rung, the terminal background will be set to white and transition back to the+# default background color. You can control the rate of this transition by+# setting the `duration` property (represented in milliseconds). You can also+# configure the transition function by setting the `animation` property.+#+# Possible values for `animation`+# `Ease`+# `EaseOut`+# `EaseOutSine`+# `EaseOutQuad`+# `EaseOutCubic`+# `EaseOutQuart`+# `EaseOutQuint`+# `EaseOutExpo`+# `EaseOutCirc`+# `Linear`+#+# To completely disable the visual bell, set its duration to 0.+#+visual_bell:+  animation: EaseOutExpo+  duration: 0++# Background opacity+background_opacity: 1.0++# Mouse bindings+#+# Currently doesn't support modifiers. Both the `mouse` and `action` fields must+# be specified.+#+# Values for `mouse`:+# - Middle+# - Left+# - Right+# - Numeric identifier such as `5`+#+# Values for `action`:+# - Paste+# - PasteSelection+# - Copy (TODO)+mouse_bindings:+  - { mouse: Middle, action: PasteSelection }++mouse:+  hide_when_typing: true++  # Click settings+  #+  # The `double_click` and `triple_click` settings control the time+  # alacritty should wait for accepting multiple clicks as one double+  # or triple click.+  double_click: { threshold: 300 }+  triple_click: { threshold: 300 }++  # Faux Scrollback+  #+  # The `faux_scrollback_lines` setting controls the number+  # of lines the terminal should scroll when the alternate+  # screen buffer is active. This is used to allow mouse+  # scrolling for applications like `man`.+  #+  # To disable this completely, set `faux_scrollback_lines` to 0.+  faux_scrolling_lines: 5++selection:+  semantic_escape_chars: ",│`|:\"' ()[]{}<>"++dynamic_title: true++# hide_cursor_when_typing: true+++# Style of the cursor+#+# Values for 'cursor_style':+# - Block+# - Underline+# - Beam+cursor:+  style: Block++# Live config reload (changes require restart)+live_config_reload: true++# Shell+#+# You can set shell.program to the path of your favorite shell, e.g. /bin/fish.+# Entries in shell.args are passed unmodified as arguments to the shell.+#+# shell:+#   program: /bin/bash+#   args:+#     - --login++# Key bindings+#+# Each binding is defined as an object with some properties. Most of the+# properties are optional. All of the alphabetical keys should have a letter for+# the `key` value such as `V`. Function keys are probably what you would expect+# as well (F1, F2, ..). The number keys above the main keyboard are encoded as+# `Key1`, `Key2`, etc. Keys on the number pad are encoded `Number1`, `Number2`,+# etc.  These all match the glutin::VirtualKeyCode variants.+#+# A list with all available `key` names can be found here:+# https://docs.rs/glutin/*/glutin/enum.VirtualKeyCode.html#variants+#+# Possible values for `mods`+# `Command`, `Super` refer to the super/command/windows key+# `Control` for the control key+# `Shift` for the Shift key+# `Alt` and `Option` refer to alt/option+#+# mods may be combined with a `|`. For example, requiring control and shift+# looks like:+#+# mods: Control|Shift+#+# The parser is currently quite sensitive to whitespace and capitalization -+# capitalization must match exactly, and piped items must not have whitespace+# around them.+#+# Either an `action`, `chars`, or `command` field must be present.+#   `action` must be one of `Paste`, `PasteSelection`, `Copy`, or `Quit`.+#   `chars` writes the specified string every time that binding is activated.+#     These should generally be escape sequences, but they can be configured to+#     send arbitrary strings of bytes.+#   `command` must be a map containing a `program` string, and `args` array of+#     strings. For example:+#     - { ... , command: { program: "alacritty", args: ["-e", "vttest"] } }+#+# Want to add a binding (e.g. "PageUp") but are unsure what the X sequence+# (e.g. "\x1b[5~") is? Open another terminal (like xterm) without tmux,+# then run `showkey -a` to get the sequence associated to a key combination.+key_bindings:+  # - { key: N,        mods: Control|Shift,    command: { program: "alacritty" } }+  - { key: V,        mods: Control|Shift,    action: Paste               }+  - { key: C,        mods: Control|Shift,    action: Copy                }+  - { key: Q,        mods: Command, action: Quit                         }+  - { key: W,        mods: Command, action: Quit                         }+  - { key: Insert,   mods: Shift,   action: PasteSelection               }+  - { key: Key0,     mods: Control, action: ResetFontSize                }+  - { key: Equals,   mods: Control, action: IncreaseFontSize             }+  - { key: Subtract, mods: Control, action: DecreaseFontSize             }+  - { key: Home,                    chars: "\x1bOH",   mode: AppCursor   }+  - { key: Home,                    chars: "\x1b[H",   mode: ~AppCursor  }+  - { key: End,                     chars: "\x1bOF",   mode: AppCursor   }+  - { key: End,                     chars: "\x1b[F",   mode: ~AppCursor  }+  - { key: PageUp,   mods: Shift,   chars: "\x1b[5;2~"                   }+  - { key: PageUp,   mods: Control, chars: "\x1b[5;5~"                   }+  - { key: PageUp,                  chars: "\x1b[5~"                     }+  - { key: PageDown, mods: Shift,   chars: "\x1b[6;2~"                   }+  - { key: PageDown, mods: Control, chars: "\x1b[6;5~"                   }+  - { key: PageDown,                chars: "\x1b[6~"                     }+  - { key: Tab,      mods: Shift,   chars: "\x1b[Z"                      }+  - { key: Back,                    chars: "\x7f"                        }+  - { key: Back,     mods: Alt,     chars: "\x1b\x7f"                    }+  - { key: Insert,                  chars: "\x1b[2~"                     }+  - { key: Delete,                  chars: "\x1b[3~"                     }+  - { key: Left,     mods: Shift,   chars: "\x1b[1;2D"                   }+  - { key: Left,     mods: Control, chars: "\x1b[1;5D"                   }+  - { key: Left,     mods: Alt,     chars: "\x1b[1;3D"                   }+  - { key: Left,                    chars: "\x1b[D",   mode: ~AppCursor  }+  - { key: Left,                    chars: "\x1bOD",   mode: AppCursor   }+  - { key: Right,    mods: Shift,   chars: "\x1b[1;2C"                   }+  - { key: Right,    mods: Control, chars: "\x1b[1;5C"                   }+  - { key: Right,    mods: Alt,     chars: "\x1b[1;3C"                   }+  - { key: Right,                   chars: "\x1b[C",   mode: ~AppCursor  }+  - { key: Right,                   chars: "\x1bOC",   mode: AppCursor   }+  - { key: Up,       mods: Shift,   chars: "\x1b[1;2A"                   }+  - { key: Up,       mods: Control, chars: "\x1b[1;5A"                   }+  - { key: Up,       mods: Alt,     chars: "\x1b[1;3A"                   }+  - { key: Up,                      chars: "\x1b[A",   mode: ~AppCursor  }+  - { key: Up,                      chars: "\x1bOA",   mode: AppCursor   }+  - { key: Down,     mods: Shift,   chars: "\x1b[1;2B"                   }+  - { key: Down,     mods: Control, chars: "\x1b[1;5B"                   }+  - { key: Down,     mods: Alt,     chars: "\x1b[1;3B"                   }+  - { key: Down,                    chars: "\x1b[B",   mode: ~AppCursor  }+  - { key: Down,                    chars: "\x1bOB",   mode: AppCursor   }+  - { key: F1,                      chars: "\x1bOP"                      }+  - { key: F2,                      chars: "\x1bOQ"                      }+  - { key: F3,                      chars: "\x1bOR"                      }+  - { key: F4,                      chars: "\x1bOS"                      }+  - { key: F5,                      chars: "\x1b[15~"                    }+  - { key: F6,                      chars: "\x1b[17~"                    }+  - { key: F7,                      chars: "\x1b[18~"                    }+  - { key: F8,                      chars: "\x1b[19~"                    }+  - { key: F9,                      chars: "\x1b[20~"                    }+  - { key: F10,                     chars: "\x1b[21~"                    }+  - { key: F11,                     chars: "\x1b[23~"                    }+  - { key: F12,                     chars: "\x1b[24~"                    }+  - { key: F1,       mods: Shift,   chars: "\x1b[1;2P"                   }+  - { key: F2,       mods: Shift,   chars: "\x1b[1;2Q"                   }+  - { key: F3,       mods: Shift,   chars: "\x1b[1;2R"                   }+  - { key: F4,       mods: Shift,   chars: "\x1b[1;2S"                   }+  - { key: F5,       mods: Shift,   chars: "\x1b[15;2~"                  }+  - { key: F6,       mods: Shift,   chars: "\x1b[17;2~"                  }+  - { key: F7,       mods: Shift,   chars: "\x1b[18;2~"                  }+  - { key: F8,       mods: Shift,   chars: "\x1b[19;2~"                  }+  - { key: F9,       mods: Shift,   chars: "\x1b[20;2~"                  }+  - { key: F10,      mods: Shift,   chars: "\x1b[21;2~"                  }+  - { key: F11,      mods: Shift,   chars: "\x1b[23;2~"                  }+  - { key: F12,      mods: Shift,   chars: "\x1b[24;2~"                  }+  - { key: F1,       mods: Control, chars: "\x1b[1;5P"                   }+  - { key: F2,       mods: Control, chars: "\x1b[1;5Q"                   }+  - { key: F3,       mods: Control, chars: "\x1b[1;5R"                   }+  - { key: F4,       mods: Control, chars: "\x1b[1;5S"                   }+  - { key: F5,       mods: Control, chars: "\x1b[15;5~"                  }+  - { key: F6,       mods: Control, chars: "\x1b[17;5~"                  }+  - { key: F7,       mods: Control, chars: "\x1b[18;5~"                  }+  - { key: F8,       mods: Control, chars: "\x1b[19;5~"                  }+  - { key: F9,       mods: Control, chars: "\x1b[20;5~"                  }+  - { key: F10,      mods: Control, chars: "\x1b[21;5~"                  }+  - { key: F11,      mods: Control, chars: "\x1b[23;5~"                  }+  - { key: F12,      mods: Control, chars: "\x1b[24;5~"                  }+  - { key: F1,       mods: Alt,     chars: "\x1b[1;6P"                   }+  - { key: F2,       mods: Alt,     chars: "\x1b[1;6Q"                   }+  - { key: F3,       mods: Alt,     chars: "\x1b[1;6R"                   }+  - { key: F4,       mods: Alt,     chars: "\x1b[1;6S"                   }+  - { key: F5,       mods: Alt,     chars: "\x1b[15;6~"                  }+  - { key: F6,       mods: Alt,     chars: "\x1b[17;6~"                  }+  - { key: F7,       mods: Alt,     chars: "\x1b[18;6~"                  }+  - { key: F8,       mods: Alt,     chars: "\x1b[19;6~"                  }+  - { key: F9,       mods: Alt,     chars: "\x1b[20;6~"                  }+  - { key: F10,      mods: Alt,     chars: "\x1b[21;6~"                  }+  - { key: F11,      mods: Alt,     chars: "\x1b[23;6~"                  }+  - { key: F12,      mods: Alt,     chars: "\x1b[24;6~"                  }+  - { key: F1,       mods: Super,   chars: "\x1b[1;3P"                   }+  - { key: F2,       mods: Super,   chars: "\x1b[1;3Q"                   }+  - { key: F3,       mods: Super,   chars: "\x1b[1;3R"                   }+  - { key: F4,       mods: Super,   chars: "\x1b[1;3S"                   }+  - { key: F5,       mods: Super,   chars: "\x1b[15;3~"                  }+  - { key: F6,       mods: Super,   chars: "\x1b[17;3~"                  }+  - { key: F7,       mods: Super,   chars: "\x1b[18;3~"                  }+  - { key: F8,       mods: Super,   chars: "\x1b[19;3~"                  }+  - { key: F9,       mods: Super,   chars: "\x1b[20;3~"                  }+  - { key: F10,      mods: Super,   chars: "\x1b[21;3~"                  }+  - { key: F11,      mods: Super,   chars: "\x1b[23;3~"                  }+  - { key: F12,      mods: Super,   chars: "\x1b[24;3~"                  }

.config/alacritty/work-laptop.yml

new file mode 100644@@ -0,0 +1,391 @@+# Configuration for Alacritty, the GPU enhanced terminal emulator+++# Any items in the `env` entry below will be added as+# environment variables. Some entries may override variables+# set by alacritty it self.+env:+  # TERM env customization.+  #+  # If this property is not set, alacritty will set it to xterm-256color.+  #+  # Note that some xterm terminfo databases don't declare support for italics.+  # You can verify this by checking for the presence of `smso` and `sitm` in+  # `infocmp xterm-256color`.+  TERM: xterm-256color++window:+  # Window dimensions in character columns and lines+  # Falls back to size specified by window manager if set to 0x0.+  # (changes require restart)+  dimensions:+    columns: 0+    lines: 0++  # Adds this many blank pixels of padding around the window+  # Units are physical pixels; this is not DPI aware.+  # (change requires restart)+  padding:+    x: 2+    y: 2++  # Window decorations+  # Setting this to false will result in window without borders and title bar.+  decorations: full++# Display tabs using this many cells (changes require restart)+# tabspaces: 4++# When true, bold text is drawn using the bright variant of colors.+draw_bold_text_with_bright_colors: true++# Font configuration (changes require restart)+#+# Important font attributes like antialiasing, subpixel aa, and hinting can be+# controlled through fontconfig. Specifically, the following attributes should+# have an effect:+#+# * hintstyle+# * antialias+# * lcdfilter+# * rgba+#+# For instance, if you wish to disable subpixel antialiasing, you might set the+# rgba property to "none". If you wish to completely disable antialiasing, you+# can set antialias to false.+#+# Please see these resources for more information on how to use fontconfig+#+# * https://wiki.archlinux.org/index.php/font_configuration#Fontconfig_configuration+# * file:///usr/share/doc/fontconfig/fontconfig-user.html+font:+  # The normal (roman) font face to use.+  normal:+    family: 'Hack' # should be "Menlo" or something on macOS.+    # Style can be specified to pick a specific face.+    # style: Regular++  # The bold font face+  bold:+    family: 'Hack' # should be "Menlo" or something on macOS.+    # Style can be specified to pick a specific face.+    # style: Bold++  # The italic font face+  italic:+    family: 'Hack' # should be "Menlo" or something on macOS.+    # Style can be specified to pick a specific face.+    # style: Italic++  # Point size of the font+  size: 11.0++  # Offset is the extra space around each character. offset.y can be thought of+  # as modifying the linespacing, and offset.x as modifying the letter spacing.+  offset:+    x: 0+    y: 0++  # Glyph offset determines the locations of the glyphs within their cells with+  # the default being at the bottom. Increase the x offset to move the glyph to+  # the right, increase the y offset to move the glyph upward.+  glyph_offset:+    x: 0+    y: 0++  # OS X only: use thin stroke font rendering. Thin strokes are suitable+  # for retina displays, but for non-retina you probably want this set to+  # false.+  use_thin_strokes: true++# Use custom cursor colors. If true, display the cursor in the cursor.foreground+# and cursor.background colors, otherwise invert the colors of the cursor.+# custom_cursor_colors: false++# Colors+colors:+  # Default colors+  primary:+    background: '0xffffff'+    foreground: '0x000000'++  # Colors the cursor will use if `custom_cursor_colors` is true+  cursor:+    text: '0xffffff'+    cursor: '0x000000'++  # Normal colors+  normal:+    black:   '0x000000'+    red:     '0xb21818'+    green:   '0x18b218'+    yellow:  '0xb26818'+    blue:    '0x1818b2'+    magenta: '0xb218b2'+    cyan:    '0x18b2b2'+    white:   '0xb2b2b2'++  # Bright colors+  bright:+    black:   '0x686868'+    red:     '0xff5454'+    green:   '0x00aa00'+    yellow:  '0xffa061'+    blue:    '0x5454ff'+    magenta: '0xff64ff'+    cyan:    '0x54ffff'+    white:   '0xffffff'++  # Dim colors (Optional)+  dim:+    black:   '0x000000'+    red:     '0xb21818'+    green:   '0x18b218'+    yellow:  '0xb26818'+    blue:    '0x1818b2'+    magenta: '0xb218b2'+    cyan:    '0x18b2b2'+    white:   '0xb2b2b2'++# Visual Bell+#+# Any time the BEL code is received, Alacritty "rings" the visual bell. Once+# rung, the terminal background will be set to white and transition back to the+# default background color. You can control the rate of this transition by+# setting the `duration` property (represented in milliseconds). You can also+# configure the transition function by setting the `animation` property.+#+# Possible values for `animation`+# `Ease`+# `EaseOut`+# `EaseOutSine`+# `EaseOutQuad`+# `EaseOutCubic`+# `EaseOutQuart`+# `EaseOutQuint`+# `EaseOutExpo`+# `EaseOutCirc`+# `Linear`+#+# To completely disable the visual bell, set its duration to 0.+#+visual_bell:+  animation: EaseOutExpo+  duration: 0++# Background opacity+background_opacity: 1.0++# Mouse bindings+#+# Currently doesn't support modifiers. Both the `mouse` and `action` fields must+# be specified.+#+# Values for `mouse`:+# - Middle+# - Left+# - Right+# - Numeric identifier such as `5`+#+# Values for `action`:+# - Paste+# - PasteSelection+# - Copy (TODO)+mouse_bindings:+  - { mouse: Middle, action: PasteSelection }++mouse:+  hide_when_typing: true++  # Click settings+  #+  # The `double_click` and `triple_click` settings control the time+  # alacritty should wait for accepting multiple clicks as one double+  # or triple click.+  double_click: { threshold: 300 }+  triple_click: { threshold: 300 }++  # Faux Scrollback+  #+  # The `faux_scrollback_lines` setting controls the number+  # of lines the terminal should scroll when the alternate+  # screen buffer is active. This is used to allow mouse+  # scrolling for applications like `man`.+  #+  # To disable this completely, set `faux_scrollback_lines` to 0.+  faux_scrolling_lines: 5++selection:+  semantic_escape_chars: ",│`|:\"' ()[]{}<>"++dynamic_title: true++# hide_cursor_when_typing: true+++# Style of the cursor+#+# Values for 'cursor_style':+# - Block+# - Underline+# - Beam+cursor:+  style: Block++# Live config reload (changes require restart)+live_config_reload: true++# Shell+#+# You can set shell.program to the path of your favorite shell, e.g. /bin/fish.+# Entries in shell.args are passed unmodified as arguments to the shell.+#+# shell:+#   program: /bin/bash+#   args:+#     - --login++# Key bindings+#+# Each binding is defined as an object with some properties. Most of the+# properties are optional. All of the alphabetical keys should have a letter for+# the `key` value such as `V`. Function keys are probably what you would expect+# as well (F1, F2, ..). The number keys above the main keyboard are encoded as+# `Key1`, `Key2`, etc. Keys on the number pad are encoded `Number1`, `Number2`,+# etc.  These all match the glutin::VirtualKeyCode variants.+#+# A list with all available `key` names can be found here:+# https://docs.rs/glutin/*/glutin/enum.VirtualKeyCode.html#variants+#+# Possible values for `mods`+# `Command`, `Super` refer to the super/command/windows key+# `Control` for the control key+# `Shift` for the Shift key+# `Alt` and `Option` refer to alt/option+#+# mods may be combined with a `|`. For example, requiring control and shift+# looks like:+#+# mods: Control|Shift+#+# The parser is currently quite sensitive to whitespace and capitalization -+# capitalization must match exactly, and piped items must not have whitespace+# around them.+#+# Either an `action`, `chars`, or `command` field must be present.+#   `action` must be one of `Paste`, `PasteSelection`, `Copy`, or `Quit`.+#   `chars` writes the specified string every time that binding is activated.+#     These should generally be escape sequences, but they can be configured to+#     send arbitrary strings of bytes.+#   `command` must be a map containing a `program` string, and `args` array of+#     strings. For example:+#     - { ... , command: { program: "alacritty", args: ["-e", "vttest"] } }+#+# Want to add a binding (e.g. "PageUp") but are unsure what the X sequence+# (e.g. "\x1b[5~") is? Open another terminal (like xterm) without tmux,+# then run `showkey -a` to get the sequence associated to a key combination.+key_bindings:+  # - { key: N,        mods: Control|Shift,    command: { program: "alacritty" } }+  - { key: V,        mods: Control|Shift,    action: Paste               }+  - { key: C,        mods: Control|Shift,    action: Copy                }+  - { key: Q,        mods: Command, action: Quit                         }+  - { key: W,        mods: Command, action: Quit                         }+  - { key: Insert,   mods: Shift,   action: PasteSelection               }+  - { key: Key0,     mods: Control, action: ResetFontSize                }+  - { key: Equals,   mods: Control, action: IncreaseFontSize             }+  - { key: Subtract, mods: Control, action: DecreaseFontSize             }+  - { key: Home,                    chars: "\x1bOH",   mode: AppCursor   }+  - { key: Home,                    chars: "\x1b[H",   mode: ~AppCursor  }+  - { key: End,                     chars: "\x1bOF",   mode: AppCursor   }+  - { key: End,                     chars: "\x1b[F",   mode: ~AppCursor  }+  - { key: PageUp,   mods: Shift,   chars: "\x1b[5;2~"                   }+  - { key: PageUp,   mods: Control, chars: "\x1b[5;5~"                   }+  - { key: PageUp,                  chars: "\x1b[5~"                     }+  - { key: PageDown, mods: Shift,   chars: "\x1b[6;2~"                   }+  - { key: PageDown, mods: Control, chars: "\x1b[6;5~"                   }+  - { key: PageDown,                chars: "\x1b[6~"                     }+  - { key: Tab,      mods: Shift,   chars: "\x1b[Z"                      }+  - { key: Back,                    chars: "\x7f"                        }+  - { key: Back,     mods: Alt,     chars: "\x1b\x7f"                    }+  - { key: Insert,                  chars: "\x1b[2~"                     }+  - { key: Delete,                  chars: "\x1b[3~"                     }+  - { key: Left,     mods: Shift,   chars: "\x1b[1;2D"                   }+  - { key: Left,     mods: Control, chars: "\x1b[1;5D"                   }+  - { key: Left,     mods: Alt,     chars: "\x1b[1;3D"                   }+  - { key: Left,                    chars: "\x1b[D",   mode: ~AppCursor  }+  - { key: Left,                    chars: "\x1bOD",   mode: AppCursor   }+  - { key: Right,    mods: Shift,   chars: "\x1b[1;2C"                   }+  - { key: Right,    mods: Control, chars: "\x1b[1;5C"                   }+  - { key: Right,    mods: Alt,     chars: "\x1b[1;3C"                   }+  - { key: Right,                   chars: "\x1b[C",   mode: ~AppCursor  }+  - { key: Right,                   chars: "\x1bOC",   mode: AppCursor   }+  - { key: Up,       mods: Shift,   chars: "\x1b[1;2A"                   }+  - { key: Up,       mods: Control, chars: "\x1b[1;5A"                   }+  - { key: Up,       mods: Alt,     chars: "\x1b[1;3A"                   }+  - { key: Up,                      chars: "\x1b[A",   mode: ~AppCursor  }+  - { key: Up,                      chars: "\x1bOA",   mode: AppCursor   }+  - { key: Down,     mods: Shift,   chars: "\x1b[1;2B"                   }+  - { key: Down,     mods: Control, chars: "\x1b[1;5B"                   }+  - { key: Down,     mods: Alt,     chars: "\x1b[1;3B"                   }+  - { key: Down,                    chars: "\x1b[B",   mode: ~AppCursor  }+  - { key: Down,                    chars: "\x1bOB",   mode: AppCursor   }+  - { key: F1,                      chars: "\x1bOP"                      }+  - { key: F2,                      chars: "\x1bOQ"                      }+  - { key: F3,                      chars: "\x1bOR"                      }+  - { key: F4,                      chars: "\x1bOS"                      }+  - { key: F5,                      chars: "\x1b[15~"                    }+  - { key: F6,                      chars: "\x1b[17~"                    }+  - { key: F7,                      chars: "\x1b[18~"                    }+  - { key: F8,                      chars: "\x1b[19~"                    }+  - { key: F9,                      chars: "\x1b[20~"                    }+  - { key: F10,                     chars: "\x1b[21~"                    }+  - { key: F11,                     chars: "\x1b[23~"                    }+  - { key: F12,                     chars: "\x1b[24~"                    }+  - { key: F1,       mods: Shift,   chars: "\x1b[1;2P"                   }+  - { key: F2,       mods: Shift,   chars: "\x1b[1;2Q"                   }+  - { key: F3,       mods: Shift,   chars: "\x1b[1;2R"                   }+  - { key: F4,       mods: Shift,   chars: "\x1b[1;2S"                   }+  - { key: F5,       mods: Shift,   chars: "\x1b[15;2~"                  }+  - { key: F6,       mods: Shift,   chars: "\x1b[17;2~"                  }+  - { key: F7,       mods: Shift,   chars: "\x1b[18;2~"                  }+  - { key: F8,       mods: Shift,   chars: "\x1b[19;2~"                  }+  - { key: F9,       mods: Shift,   chars: "\x1b[20;2~"                  }+  - { key: F10,      mods: Shift,   chars: "\x1b[21;2~"                  }+  - { key: F11,      mods: Shift,   chars: "\x1b[23;2~"                  }+  - { key: F12,      mods: Shift,   chars: "\x1b[24;2~"                  }+  - { key: F1,       mods: Control, chars: "\x1b[1;5P"                   }+  - { key: F2,       mods: Control, chars: "\x1b[1;5Q"                   }+  - { key: F3,       mods: Control, chars: "\x1b[1;5R"                   }+  - { key: F4,       mods: Control, chars: "\x1b[1;5S"                   }+  - { key: F5,       mods: Control, chars: "\x1b[15;5~"                  }+  - { key: F6,       mods: Control, chars: "\x1b[17;5~"                  }+  - { key: F7,       mods: Control, chars: "\x1b[18;5~"                  }+  - { key: F8,       mods: Control, chars: "\x1b[19;5~"                  }+  - { key: F9,       mods: Control, chars: "\x1b[20;5~"                  }+  - { key: F10,      mods: Control, chars: "\x1b[21;5~"                  }+  - { key: F11,      mods: Control, chars: "\x1b[23;5~"                  }+  - { key: F12,      mods: Control, chars: "\x1b[24;5~"                  }+  - { key: F1,       mods: Alt,     chars: "\x1b[1;6P"                   }+  - { key: F2,       mods: Alt,     chars: "\x1b[1;6Q"                   }+  - { key: F3,       mods: Alt,     chars: "\x1b[1;6R"                   }+  - { key: F4,       mods: Alt,     chars: "\x1b[1;6S"                   }+  - { key: F5,       mods: Alt,     chars: "\x1b[15;6~"                  }+  - { key: F6,       mods: Alt,     chars: "\x1b[17;6~"                  }+  - { key: F7,       mods: Alt,     chars: "\x1b[18;6~"                  }+  - { key: F8,       mods: Alt,     chars: "\x1b[19;6~"                  }+  - { key: F9,       mods: Alt,     chars: "\x1b[20;6~"                  }+  - { key: F10,      mods: Alt,     chars: "\x1b[21;6~"                  }+  - { key: F11,      mods: Alt,     chars: "\x1b[23;6~"                  }+  - { key: F12,      mods: Alt,     chars: "\x1b[24;6~"                  }+  - { key: F1,       mods: Super,   chars: "\x1b[1;3P"                   }+  - { key: F2,       mods: Super,   chars: "\x1b[1;3Q"                   }+  - { key: F3,       mods: Super,   chars: "\x1b[1;3R"                   }+  - { key: F4,       mods: Super,   chars: "\x1b[1;3S"                   }+  - { key: F5,       mods: Super,   chars: "\x1b[15;3~"                  }+  - { key: F6,       mods: Super,   chars: "\x1b[17;3~"                  }+  - { key: F7,       mods: Super,   chars: "\x1b[18;3~"                  }+  - { key: F8,       mods: Super,   chars: "\x1b[19;3~"                  }+  - { key: F9,       mods: Super,   chars: "\x1b[20;3~"                  }+  - { key: F10,      mods: Super,   chars: "\x1b[21;3~"                  }+  - { key: F11,      mods: Super,   chars: "\x1b[23;3~"                  }+  - { key: F12,      mods: Super,   chars: "\x1b[24;3~"                  }

.config/dunst/dunstrc

new file mode 100644@@ -0,0 +1,418 @@+[global]+    ### Display ###++    # Which monitor should the notifications be displayed on.+    monitor = 0++    # Display notification on focused monitor.  Possible modes are:+    #   mouse: follow mouse pointer+    #   keyboard: follow window with keyboard focus+    #   none: don't follow anything+    #+    # "keyboard" needs a window manager that exports the+    # _NET_ACTIVE_WINDOW property.+    # This should be the case for almost all modern window managers.+    #+    # If this option is set to mouse or keyboard, the monitor option+    # will be ignored.+    follow = mouse++    # The geometry of the window:+    #   [{width}]x{height}[+/-{x}+/-{y}]+    # The geometry of the message window.+    # The height is measured in number of notifications everything else+    # in pixels.  If the width is omitted but the height is given+    # ("-geometry x2"), the message window expands over the whole screen+    # (dmenu-like).  If width is 0, the window expands to the longest+    # message displayed.  A positive x is measured from the left, a+    # negative from the right side of the screen.  Y is measured from+    # the top and down respectively.+    # The width can be negative.  In this case the actual width is the+    # screen width minus the width defined in within the geometry option.+    #geometry = "300x5-30+20"+    #geometry = "800x5+30-20"+    geometry = "0x5+30-20"++    # Show how many messages are currently hidden (because of geometry).+    indicate_hidden = yes++    # Shrink window if it's smaller than the width.  Will be ignored if+    # width is 0.+    shrink = no++    # The transparency of the window.  Range: [0; 100].+    # This option will only work if a compositing window manager is+    # present (e.g. xcompmgr, compiz, etc.).+    transparency = 0++    # The height of the entire notification.  If the height is smaller+    # than the font height and padding combined, it will be raised+    # to the font height and padding.+    notification_height = 0++    # Draw a line of "separator_height" pixel height between two+    # notifications.+    # Set to 0 to disable.+    separator_height = 2++    # Padding between text and separator.+    padding = 8++    # Horizontal padding.+    horizontal_padding = 8++    # Defines width in pixels of frame around the notification window.+    # Set to 0 to disable.+    frame_width = 3++    # Defines color of the frame around the notification window.+    frame_color = "#aaaaaa"++    # Define a color for the separator.+    # possible values are:+    #  * auto: dunst tries to find a color fitting to the background;+    #  * foreground: use the same color as the foreground;+    #  * frame: use the same color as the frame;+    #  * anything else will be interpreted as a X color.+    separator_color = frame++    # Sort messages by urgency.+    sort = yes++    # Don't remove messages, if the user is idle (no mouse or keyboard input)+    # for longer than idle_threshold seconds.+    # Set to 0 to disable.+    # A client can set the 'transient' hint to bypass this. See the rules+    # section for how to disable this if necessary+    idle_threshold = 30++    ### Text ###++    # font = Ubuntuo Mono 16+    font = Hack Nerd Font 16++    # The spacing between lines.  If the height is smaller than the+    # font height, it will get raised to the font height.+    line_height = 0++    # Possible values are:+    # full: Allow a small subset of html markup in notifications:+    #        <b>bold</b>+    #        <i>italic</i>+    #        <s>strikethrough</s>+    #        <u>underline</u>+    #+    #        For a complete reference see+    #        <http://developer.gnome.org/pango/stable/PangoMarkupFormat.html>.+    #+    # strip: This setting is provided for compatibility with some broken+    #        clients that send markup even though it's not enabled on the+    #        server. Dunst will try to strip the markup but the parsing is+    #        simplistic so using this option outside of matching rules for+    #        specific applications *IS GREATLY DISCOURAGED*.+    #+    # no:    Disable markup parsing, incoming notifications will be treated as+    #        plain text. Dunst will not advertise that it has the body-markup+    #        capability if this is set as a global setting.+    #+    # It's important to note that markup inside the format option will be parsed+    # regardless of what this is set to.+    markup = full++    # The format of the message.  Possible variables are:+    #   %a  appname+    #   %s  summary+    #   %b  body+    #   %i  iconname (including its path)+    #   %I  iconname (without its path)+    #   %p  progress value if set ([  0%] to [100%]) or nothing+    #   %n  progress value if set without any extra characters+    #   %%  Literal %+    # Markup is allowed+    format = "<b>%s</b>\n%b"++    # Alignment of message text.+    # Possible values are "left", "center" and "right".+    alignment = left++    # Show age of message if message is older than show_age_threshold+    # seconds.+    # Set to -1 to disable.+    show_age_threshold = 60++    # Split notifications into multiple lines if they don't fit into+    # geometry.+    word_wrap = yes++    # When word_wrap is set to no, specify where to make an ellipsis in long lines.+    # Possible values are "start", "middle" and "end".+    ellipsize = middle++    # Ignore newlines '\n' in notifications.+    ignore_newline = no++    # Stack together notifications with the same content+    stack_duplicates = true++    # Hide the count of stacked notifications with the same content+    hide_duplicate_count = false++    # Display indicators for URLs (U) and actions (A).+    show_indicators = yes++    ### Icons ###++    # Align icons left/right/off+    icon_position = left++    # Scale larger icons down to this size, set to 0 to disable+    max_icon_size = 32++    # Paths to default icons.+    # icon_path = /usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/+    icon_path = /usr/share/icons/Adwaita/32x32/status/:/usr/share/icons/Adwaita/32x32/devices/++    ### History ###++    # Should a notification popped up from history be sticky or timeout+    # as if it would normally do.+    sticky_history = yes++    # Maximum amount of notifications kept in history+    history_length = 20++    ### Misc/Advanced ###++    # dmenu path.+    dmenu = /usr/bin/dmenu -p dunst:++    # Browser for opening urls in context menu.+    browser = /usr/bin/firefox -new-tab++    # Always run rule-defined scripts, even if the notification is suppressed+    always_run_script = true++    # Define the title of the windows spawned by dunst+    title = Dunst++    # Define the class of the windows spawned by dunst+    class = Dunst++    # Print a notification on startup.+    # This is mainly for error detection, since dbus (re-)starts dunst+    # automatically after a crash.+    startup_notification = false++    # Manage dunst's desire for talking+    # Can be one of the following values:+    #  crit: Critical features. Dunst aborts+    #  warn: Only non-fatal warnings+    #  mesg: Important Messages+    #  info: all unimportant stuff+    # debug: all less than unimportant stuff+    verbosity = mesg++    # Define the corner radius of the notification window+    # in pixel size. If the radius is 0, you have no rounded+    # corners.+    # The radius will be automatically lowered if it exceeds half of the+    # notification height to avoid clipping text and/or icons.+    corner_radius = 0++    ### Legacy++    # Use the Xinerama extension instead of RandR for multi-monitor support.+    # This setting is provided for compatibility with older nVidia drivers that+    # do not support RandR and using it on systems that support RandR is highly+    # discouraged.+    #+    # By enabling this setting dunst will not be able to detect when a monitor+    # is connected or disconnected which might break follow mode if the screen+    # layout changes.+    force_xinerama = false++    ### mouse++    # Defines action of mouse event+    # Possible values are:+    # * none: Don't do anything.+    # * do_action: If the notification has exactly one action, or one is marked as default,+    #              invoke it. If there are multiple and no default, open the context menu.+    # * close_current: Close current notification.+    # * close_all: Close all notifications.+    mouse_left_click = close_current+    mouse_middle_click = do_action+    mouse_right_click = close_all++# Experimental features that may or may not work correctly. Do not expect them+# to have a consistent behaviour across releases.+[experimental]+    # Calculate the dpi to use on a per-monitor basis.+    # If this setting is enabled the Xft.dpi value will be ignored and instead+    # dunst will attempt to calculate an appropriate dpi value for each monitor+    # using the resolution and physical size. This might be useful in setups+    # where there are multiple screens with very different dpi values.+    per_monitor_dpi = false++[shortcuts]++    # Shortcuts are specified as [modifier+][modifier+]...key+    # Available modifiers are "ctrl", "mod1" (the alt-key), "mod2",+    # "mod3" and "mod4" (windows-key).+    # Xev might be helpful to find names for keys.++    # Close notification.+    close = ctrl+space++    # Close all notifications.+    close_all = ctrl+shift+space++    # Redisplay last message(s).+    # On the US keyboard layout "grave" is normally above TAB and left+    # of "1". Make sure this key actually exists on your keyboard layout,+    # e.g. check output of 'xmodmap -pke'+    history = ctrl+grave++    # Context menu.+    context = ctrl+shift+period++[urgency_low]+    # IMPORTANT: colors have to be defined in quotation marks.+    # Otherwise the "#" and following would be interpreted as a comment.+    background = "#dfdcdf"+    foreground = "#000000"+    timeout = 5+    # Icon for notifications with low urgency, uncomment to enable+    #icon = /path/to/icon++[urgency_normal]+    background = "#dfdcdf"+    foreground = "#000000"+    timeout = 5+    # Icon for notifications with normal urgency, uncomment to enable+    #icon = /path/to/icon++[urgency_critical]+    background = "#900000"+    foreground = "#ffffff"+    frame_color = "#ff0000"+    timeout = 0+    # Icon for notifications with critical urgency, uncomment to enable+    #icon = /path/to/icon++# Every section that isn't one of the above is interpreted as a rules to+# override settings for certain messages.+#+# Messages can be matched by+#    appname (discouraged, see desktop_entry)+#    body+#    category+#    desktop_entry+#    icon+#    match_transient+#    msg_urgency+#    stack_tag+#    summary+#+# and you can override the+#    background+#    foreground+#    format+#    frame_color+#    fullscreen+#    new_icon+#    set_stack_tag+#    set_transient+#    timeout+#    urgency+#+# Shell-like globbing will get expanded.+#+# Instead of the appname filter, it's recommended to use the desktop_entry filter.+# GLib based applications export their desktop-entry name. In comparison to the appname,+# the desktop-entry won't get localized.+#+# SCRIPTING+# You can specify a script that gets run when the rule matches by+# setting the "script" option.+# The script will be called as follows:+#   script appname summary body icon urgency+# where urgency can be "LOW", "NORMAL" or "CRITICAL".+#+# NOTE: if you don't want a notification to be displayed, set the format+# to "".+# NOTE: It might be helpful to run dunst -print in a terminal in order+# to find fitting options for rules.++# Disable the transient hint so that idle_threshold cannot be bypassed from the+# client+#[transient_disable]+#    match_transient = yes+#    set_transient = no+#+# Make the handling of transient notifications more strict by making them not+# be placed in history.+#[transient_history_ignore]+#    match_transient = yes+#    history_ignore = yes++# fullscreen values+# show: show the notifications, regardless if there is a fullscreen window opened+# delay: displays the new notification, if there is no fullscreen window active+#        If the notification is already drawn, it won't get undrawn.+# pushback: same as delay, but when switching into fullscreen, the notification will get+#           withdrawn from screen again and will get delayed like a new notification+#[fullscreen_delay_everything]+#    fullscreen = delay+#[fullscreen_show_critical]+#    msg_urgency = critical+#    fullscreen = show++#[espeak]+#    summary = "*"+#    script = dunst_espeak.sh++#[script-test]+#    summary = "*script*"+#    script = dunst_test.sh++#[ignore]+#    # This notification will not be displayed+#    summary = "foobar"+#    format = ""++#[history-ignore]+#    # This notification will not be saved in history+#    summary = "foobar"+#    history_ignore = yes++#[skip-display]+#    # This notification will not be displayed, but will be included in the history+#    summary = "foobar"+#    skip_display = yes++#[signed_on]+#    appname = Pidgin+#    summary = "*signed on*"+#    urgency = low+#+#[signed_off]+#    appname = Pidgin+#    summary = *signed off*+#    urgency = low+#+#[says]+#    appname = Pidgin+#    summary = *says*+#    urgency = critical+#+#[twitter]+#    appname = Pidgin+#    summary = *twitter.com*+#    urgency = normal+#+#[stack-volumes]+#    appname = "some_volume_notifiers"+#    set_stack_tag = "volume"+#+# vim: ft=cfg

.config/highlight/langDefs/sml.lang

new file mode 100644@@ -0,0 +1,31 @@+-- Language definition generated by lang2to3++Description="Standard ML"++Keywords={+  { Id=1,+    List={"abstraction", "abstype", "and", "andalso", "as", "before", "case", "datatype", "else", "end", "eqtype", "exception", "do", "fn", "fun", "functor", "handle", "if", "in", "include", "infix", "infixr", "let", "local", "nonfix", "of", "op", "open", "orelse", "overload", "raise", "rec", "sharing", "sig", "signature", "struct", "structure", "then", "type", "val", "where", "while", "with", "withtype", "o", "true", "false", "", "Bool", "String", "Int", "Real", "Word", "Char", "StringCvt", "Word8", "List", "ListPair", "Vector", "TextIO", "BinIO", "div", "mod"},+  },+  { Id=2,+    List={"bool", "string", "int", "real", "word"},+  },+  { Id=4,+    Regex=[[(\w+)\s*\(]],+  },+}++Strings={+  Delimiter=[["]],+}++Comments = {+  { Block = true, Nested = false,+    Delimiter = { [[\(\*]], [[\*\)]] }+  }+}++IgnoreCase=false++Operators=[[\(|\)|\[|\]|\{|\}|\,|\;|\:|\&|\<|\>|\!|\=|\/|\*|\%|\+|\-|\'|\.]]++--FIXME no default escchar param: regex(\\\d{3}|\\x\p{XDigit}{2}|\\[ntvbrfa\\\?'"])

.config/highlight/themes/bclear.theme

new file mode 100644@@ -0,0 +1,22 @@+-- Theme generated by vim2theme++Description = "vim bclear"++Default	= { Colour="#323232" }+Canvas	= { Colour="#ffffff" }+Number	= { Colour="#1094a0" }+Escape	= { Colour="#dc6816" }+String	= { Colour="#1094a0" }+BlockComment	= { Colour="#969696" }+StringPreProc = String+LineComment   = BlockComment+Operator      = Default+LineNum      = BlockComment+PreProcessor      = { Colour="#69c73a" }++Keywords = {+  { Colour="#3b6ac8" },+  { Colour="#a00050" },+  { Colour="#00a150" },+  { Colour="#c73a69" },+}

.config/mpv/mpv.conf

new file mode 100644@@ -0,0 +1,4 @@+sub-auto=all+sub-file-paths=Subs:subs+af=dynaudnorm=g=7+demuxer-max-bytes=1500MiB

.config/nvim/coc-settings.json

new file mode 100644@@ -0,0 +1,12 @@+{+  "diagnostic.virtualText": false,+  "diagnostic.joinMessageLines": true,+  "diagnostic.checkCurrentLine": true,+  "diagnostic.messageTarget": "float",+  "diagnostic.level": "information",+  "suggest.autoTrigger": "none",+  "signature.enable": false,+  "coc.preferences.snippets.enable": false,+  "rust-analyzer.diagnostics.enable": false,+  "rust-analyzer.serverPath": "/home/andrew/bin/rust-analyzer-wrapper"+}

.config/nvim/colors/summerfruit256.vim

new file mode 100644@@ -0,0 +1,323 @@+" Vim color file+" Maintainer: Martin Baeuml <baeuml@gmail.com>+" Last Change: 2008-02-09+"+" This color file is a modification of the "summerfruit" color scheme by Armin Ronacher+" so that it can be used on 88- and 256-color xterms. The colors are translated+" using Henry So's programmatic approximation of gui colors from his "desert256"+" color scheme.+"+" I removed the "italic" option and the background color from+" comment-coloring because that looks odd on my console.+"+" The original "summerfruit" color scheme and "desert256" are available from vim.org.++set background=light+if version > 580+    " no guarantees for version 5.8 and below, but this makes it stop+    " complaining+    hi clear+    if exists("syntax_on")+        syntax reset+    endif+endif+let g:colors_name="summerfruit256"++if has("gui_running") || &t_Co == 88 || &t_Co == 256+    " functions {{{+    " returns an approximate grey index for the given grey level+    fun <SID>grey_number(x)+        if &t_Co == 88+            if a:x < 23+                return 0+            elseif a:x < 69+                return 1+            elseif a:x < 103+                return 2+            elseif a:x < 127+                return 3+            elseif a:x < 150+                return 4+            elseif a:x < 173+                return 5+            elseif a:x < 196+                return 6+            elseif a:x < 219+                return 7+            elseif a:x < 243+                return 8+            else+                return 9+            endif+        else+            if a:x < 14+                return 0+            else+                let l:n = (a:x - 8) / 10+                let l:m = (a:x - 8) % 10+                if l:m < 5+                    return l:n+                else+                    return l:n + 1+                endif+            endif+        endif+    endfun++    " returns the actual grey level represented by the grey index+    fun <SID>grey_level(n)+        if &t_Co == 88+            if a:n == 0+                return 0+            elseif a:n == 1+                return 46+            elseif a:n == 2+                return 92+            elseif a:n == 3+                return 115+            elseif a:n == 4+                return 139+            elseif a:n == 5+                return 162+            elseif a:n == 6+                return 185+            elseif a:n == 7+                return 208+            elseif a:n == 8+                return 231+            else+                return 255+            endif+        else+            if a:n == 0+                return 0+            else+                return 8 + (a:n * 10)+            endif+        endif+    endfun++    " returns the palette index for the given grey index+    fun <SID>grey_color(n)+        if &t_Co == 88+            if a:n == 0+                return 16+            elseif a:n == 9+                return 79+            else+                return 79 + a:n+            endif+        else+            if a:n == 0+                return 16+            elseif a:n == 25+                return 231+            else+                return 231 + a:n+            endif+        endif+    endfun++    " returns an approximate color index for the given color level+    fun <SID>rgb_number(x)+        if &t_Co == 88+            if a:x < 69+                return 0+            elseif a:x < 172+                return 1+            elseif a:x < 230+                return 2+            else+                return 3+            endif+        else+            if a:x < 75+                return 0+            else+                let l:n = (a:x - 55) / 40+                let l:m = (a:x - 55) % 40+                if l:m < 20+                    return l:n+                else+                    return l:n + 1+                endif+            endif+        endif+    endfun++    " returns the actual color level for the given color index+    fun <SID>rgb_level(n)+        if &t_Co == 88+            if a:n == 0+                return 0+            elseif a:n == 1+                return 139+            elseif a:n == 2+                return 205+            else+                return 255+            endif+        else+            if a:n == 0+                return 0+            else+                return 55 + (a:n * 40)+            endif+        endif+    endfun++    " returns the palette index for the given R/G/B color indices+    fun <SID>rgb_color(x, y, z)+        if &t_Co == 88+            return 16 + (a:x * 16) + (a:y * 4) + a:z+        else+            return 16 + (a:x * 36) + (a:y * 6) + a:z+        endif+    endfun++    " returns the palette index to approximate the given R/G/B color levels+    fun <SID>color(r, g, b)+        " get the closest grey+        let l:gx = <SID>grey_number(a:r)+        let l:gy = <SID>grey_number(a:g)+        let l:gz = <SID>grey_number(a:b)++        " get the closest color+        let l:x = <SID>rgb_number(a:r)+        let l:y = <SID>rgb_number(a:g)+        let l:z = <SID>rgb_number(a:b)++        if l:gx == l:gy && l:gy == l:gz+            " there are two possibilities+            let l:dgr = <SID>grey_level(l:gx) - a:r+            let l:dgg = <SID>grey_level(l:gy) - a:g+            let l:dgb = <SID>grey_level(l:gz) - a:b+            let l:dgrey = (l:dgr * l:dgr) + (l:dgg * l:dgg) + (l:dgb * l:dgb)+            let l:dr = <SID>rgb_level(l:gx) - a:r+            let l:dg = <SID>rgb_level(l:gy) - a:g+            let l:db = <SID>rgb_level(l:gz) - a:b+            let l:drgb = (l:dr * l:dr) + (l:dg * l:dg) + (l:db * l:db)+            if l:dgrey < l:drgb+                " use the grey+                return <SID>grey_color(l:gx)+            else+                " use the color+                return <SID>rgb_color(l:x, l:y, l:z)+            endif+        else+            " only one possibility+            return <SID>rgb_color(l:x, l:y, l:z)+        endif+    endfun++    " returns the palette index to approximate the 'rrggbb' hex string+    fun <SID>rgb(rgb)+        let l:r = ("0x" . strpart(a:rgb, 0, 2)) + 0+        let l:g = ("0x" . strpart(a:rgb, 2, 2)) + 0+        let l:b = ("0x" . strpart(a:rgb, 4, 2)) + 0++        return <SID>color(l:r, l:g, l:b)+    endfun++    " sets the highlighting for the given group+    fun <SID>X(group, fg, bg, attr)+        if a:fg != ""+            exec "hi " . a:group . " guifg=#" . a:fg . " ctermfg=" . <SID>rgb(a:fg)+        endif+        if a:bg != ""+            exec "hi " . a:group . " guibg=#" . a:bg . " ctermbg=" . <SID>rgb(a:bg)+        endif+        if a:attr != ""+            exec "hi " . a:group . " gui=" . a:attr . " cterm=" . a:attr+        endif+    endfun+    " }}}++    " Global+    call <SID>X("Normal", "000000", "ffffff", "")+    " call <SID>X("NonText", "438ec3", "b7dce8", "")++    " Search+    call <SID>X("Search", "800000", "ffae00", "")+    call <SID>X("IncSearch", "800000", "ffae00", "")++    " Interface Elements+    call <SID>X("StatusLine", "ffffff", "43c464", "bold")+    call <SID>X("StatusLineNC", "9bd4a9", "51b069", "")+    call <SID>X("VertSplit", "3687a2", "3687a2", "")+    call <SID>X("Folded", "3c78a2", "c3daea", "")+    call <SID>X("IncSearch", "708090", "f0e68c", "")+    call <SID>X("Pmenu", "000000", "e8ebff", "")+    call <SID>X("PmenuSel", "ffffff", "000000", "")+    call <SID>X("SignColumn", "", "", "")+    call <SID>X("CursorLine", "", "c0d9eb", "")+    " call <SID>X("LineNr", "eeeeee", "438ec3", "bold")+    call <SID>X("MatchParen", "", "", "")++    " Specials+    call <SID>X("Todo", "e50808", "dbf3cd", "bold")+    call <SID>X("Title", "000000", "", "")+    call <SID>X("Special", "fd8900", "", "")++    " Syntax Elements+    call <SID>X("String", "0086d2", "", "")+    call <SID>X("Constant", "0086d2", "", "")+    call <SID>X("Number", "0086f7", "", "")+    call <SID>X("Statement", "fb660a", "", "")+    call <SID>X("Function", "ff0086", "", "")+    call <SID>X("PreProc", "ff0007", "", "")+    call <SID>X("Comment", "22a21f", "", "bold")+    call <SID>X("Type", "70796b", "", "")+    call <SID>X("Error", "ffffff", "d40000", "")+    call <SID>X("Identifier", "ff0086", "", "")+    call <SID>X("Label", "ff0086", "", "")++    " Python Highlighting+    call <SID>X("pythonCoding", "ff0086", "", "")+    call <SID>X("pythonRun", "ff0086", "", "")+    call <SID>X("pythonBuiltinObj", "2b6ba2", "", "")+    call <SID>X("pythonBuiltinFunc", "2b6ba2", "", "")+    call <SID>X("pythonException", "ee0000", "", "")+    call <SID>X("pythonExClass", "66cd66", "", "")+    call <SID>X("pythonSpaceError", "", "", "")+    call <SID>X("pythonDocTest", "2f5f49", "", "")+    call <SID>X("pythonDocTest2", "3b916a", "", "")+    call <SID>X("pythonFunction", "ee0000", "", "")+    call <SID>X("pythonClass", "ff0086", "", "")++    " HTML Highlighting+    call <SID>X("htmlTag", "00bdec", "", "")+    call <SID>X("htmlEndTag", "00bdec", "", "")+    call <SID>X("htmlSpecialTagName", "4aa04a", "", "")+    call <SID>X("htmlTagName", "4aa04a", "", "")+    call <SID>X("htmlTagN", "4aa04a", "", "")++    " Jinja Highlighting+    call <SID>X("jinjaTagBlock", "ff0007", "fbf4c7", "bold")+    call <SID>X("jinjaVarBlock", "ff0007", "fbf4c7", "")+    call <SID>X("jinjaString", "0086d2", "fbf4c7", "")+    call <SID>X("jinjaNumber", "bf0945", "fbf4c7", "bold")+    call <SID>X("jinjaStatement", "fb660a", "fbf4c7", "bold")+    call <SID>X("jinjaComment", "008800", "002300", "italic")+    call <SID>X("jinjaFilter", "ff0086", "fbf4c7", "")+    call <SID>X("jinjaRaw", "aaaaaa", "fbf4c7", "")+    call <SID>X("jinjaOperator", "ffffff", "fbf4c7", "")+    call <SID>X("jinjaVariable", "92cd35", "fbf4c7", "")+    call <SID>X("jinjaAttribute", "dd7700", "fbf4c7", "")+    call <SID>X("jinjaSpecial", "008ffd", "fbf4c7", "")++    " delete functions {{{+    delf <SID>X+    delf <SID>rgb+    delf <SID>color+    delf <SID>rgb_color+    delf <SID>rgb_level+    delf <SID>rgb_number+    delf <SID>grey_color+    delf <SID>grey_level+    delf <SID>grey_number+    " }}}+endif++" vim: set fdl=0 fdm=marker:+

.config/nvim/include/autos.vim

new file mode 100644@@ -0,0 +1,8 @@+" Strip trailing whitespace on every save.+fun! StripTrailingWhitespace()+  let l = line(".")+  let c = col(".")+  %s/\s\+$//e+  call cursor(l, c)+endfun+autocmd BufWritePre * :call StripTrailingWhitespace()

.config/nvim/include/comment.vim

new file mode 100644@@ -0,0 +1,26 @@+" Some quick hacks to automatically insert line-by-line comments of highlighted+" source code. This requires that the Comment and EndComment variables are set,+" usually via include/lang.vim.++if !exists("b:Comment")+    let b:Comment="" | let b:EndComment=""+endif++fun! RegexLiteral(str)+    return escape(a:str, "*$.^/")+endfun++fun! CommentLines()+    if b:Comment != ""+        exe ":s/^\\(\\s*\\)/\\1".escape(b:Comment, '/')." /e"+        exe ":s/$/ ".escape(b:EndComment, '/')."/e"+    endif+endfun++fun! UncommentLines()+    exe ":s/^\\(\\s*\\)".RegexLiteral(b:Comment)."\\s*/\\1/e"+    exe ":s/\\s*".RegexLiteral(b:EndComment)."\\s*$//e"+endfun++noremap ,, :call CommentLines()<CR>+noremap ,. :call UncommentLines()<CR>

.config/nvim/include/keybinds.vim

new file mode 100644@@ -0,0 +1,46 @@+" Convenience for inserting a newline from normal mode.+noremap Q :put=''<CR>++" Hitting escape twice should clear any search highlights.+nnoremap <ESC><ESC> :nohlsearch<CR>++" CTRL-S saves current buffer. Muscle memory from Windows years ago.+noremap <C-s> :w<CR>+inoremap <C-s> <ESC>l:w<CR>++" Keybindings for invoking 'par' to reflow text.+" 'f' is for reflowing to shorter lines, usually for commit messages.+" 'g' is for standard 79 columns with 4 space tabs.+" 'h' is like 'g', except it's for 8 space tabs. (e.g., Go.)+vnoremap <Leader>f !par T4 'B=.,?_A_a' 71qr<CR>+nmap <Leader>f <S-v><Leader>f+vnoremap <Leader>g !par T4 'B=.,?_A_a' 79qr<CR>+nmap <Leader>g <S-v><Leader>g+vnoremap <Leader>h !par T8 'B=.,?_A_a' 79qr<CR>+nmap <Leader>h <S-v><Leader>h++" Convenience keybinding for writing the current date.+noremap <Leader>d :read !date +"\%B \%-d, \%Y"<CR>++" Writer dividers equivalence to the length of the previous line.+fun! Divider(char)+  let len = strlen(getline('.'))+  call append('.', repeat(a:char, len))+  normal j+endfun+noremap <Leader>= :call Divider('=')<CR>+noremap <Leader>- :call Divider('-')<CR>+noremap <Leader>~ :call Divider('~')<CR>++" Shortcut for reloading neovim config.+noremap <F2> :source ~/.vimrc<CR>+" Shortcut for enabling text mode.+noremap <F12> :source ~/.vim/text.vim<CR>++" Shortcut for writing current file with 'sudo'.+command! W w !sudo tee % > /dev/null++" fzf entrypoint.+nmap <Leader>e :Files<CR>+" ripgrep entrypoint.+nmap <Leader>r :Rg<CR>

.config/nvim/include/lang.vim

new file mode 100644@@ -0,0 +1,163 @@+au FileType rust runtime! include/lang/rust.vim++au FileType go runtime! include/lang/go.vim++au FileType ledger+  \ let b:Comment=";"+  \ | let b:EndComment=""+  \ | runtime! include/spacing/four.vim++au FileType wini+  \ let b:Comment="#"+  \ | let b:EndComment=""+  \ | runtime! include/spacing/two.vim++au FileType conf+  \ let b:Comment="#"+  \ | let b:EndComment=""+  \ | runtime! include/spacing/two.vim+  \ | set indentexpr=+  \ | set smartindent++au FileType toml+  \ let b:Comment="#"+  \ | let b:EndComment=""+  \ | runtime! include/spacing/two.vim+  \ | set indentexpr=+  \ | set smartindent++au FileType yaml+  \ let b:Comment="#"+  \ | let b:EndComment=""+  \ | runtime! include/spacing/two.vim+  \ | set indentexpr=+  \ | set smartindent++au FileType java+  \ let b:Comment="//"+  \ | let b:EndComment=""+  \ | runtime! include/spacing/four.vim++au FileType javascript+  \ let b:Comment="/*"+  \ | let b:EndComment="*/"+  \ | runtime! include/spacing/two.vim++au FileType c+  \ let b:Comment="/*"+  \ | let b:EndComment="*/"+  \ | runtime! include/spacing/four.vim++au FileType cpp+  \ let b:Comment="//"+  \ | let b:EndComment=""+  \ | runtime! include/spacing/four.vim++au FileType nginx+  \ let b:Comment="#"+  \ | let b:EndComment=""+  \ | runtime! include/spacing/four.vim+  \ | set smartindent++au FileType tex+  \ let &mp="clear; pdflatex %"+  \ | let b:Comment="%"+  \ | let b:EndComment=""++au FileType lua+  \ let &mp="clear; lua %"+  \ | let &efm="lua: %f:%l:%m,%-G%.%#"+  \ | let b:Comment="--"+  \ | let b:EndComment=""++au FileType python+  \ let &mp="clear; python2 %"+  \ | let &efm='%A %#File "%f"\, line %l\,%.%#,%-GTrace%.%#,%C %.%#,%Z%m,%-G%.%#'+  \ | let b:Comment="#"+  \ | let b:EndComment=""+  \ | runtime! include/spacing/four.vim++au FileType php+  \ let b:Comment="//"+  \ | let b:EndComment=""+  \ | runtime! include/spacing/two.vim++" Make PHP use smartindent dammit!+" (This is so HTML indenting is sane.)+au BufRead,BufNewFile *.html set smartindent+au BufRead,BufNewFile *.php set smartindent+au BufRead,BufNewFile *.jgr set smartindent++au FileType haskell+  \ let &mp="clear; ghc --make %"+  \ | let &efm='%f:%l:%c:'+  \ | let b:Comment="--"+  \ | let b:EndComment=""+  \ | set smartindent++au FileType cabal+  \ let b:Comment="--"+  \ | let b:EndComment=""+  \ | set smartindent++au FileType sml+  \ let &mp="ledit -x -h ~/.ledit/mosml mosml -P full %"+  \ | let b:Comment="(*"+  \ | let b:EndComment="*)"++au FileType lisp+  \ let b:Comment=";"+  \ | let b:EndComment=""++au FileType sh+  \ let b:Comment="#"+  \ | let b:EndComment=""+  \ | runtime! include/spacing/two.vim++au FileType zsh+  \ let b:Comment="#"+  \ | let b:EndComment=""+  \ | runtime! include/spacing/two.vim++au FileType utln+  \ let &mp="clear; validate-utlnx %"+  \ | let &efm='%f\, line %#%l:%m'+  \ | let b:Comment="(X:"+  \ | let b:EndComment=")"+  \ | set smartindent++au FileType mako+  \ let b:Comment="<%doc>"+  \ | let b:EndComment="</%doc>"+  \ | set smartindent++au FileType crontab+  \ let b:Comment="#"+  \ | let b:EndComment=""++au FileType conf+  \ let b:Comment="#"+  \ | let b:EndComment=""++au FileType make+  \ let b:Comment="#"+  \ | let b:EndComment=""++au FileType html+  \ let b:Comment="<!--"+  \ | let b:EndComment="-->"++au BufEnter *.html setlocal smartindent+au BufEnter *.tpl setlocal smartindent++au FileType htmldjango+  \ let b:Comment="{% comment %}"+  \ | let b:EndComment="{% endcomment %}"++au FileType css+  \ let b:Comment="/*"+  \ | let b:EndComment="*/"++au FileType vim+  \ let b:Comment='"'+  \ | let b:EndComment=""

.config/nvim/include/lang/go.vim

new file mode 100644@@ -0,0 +1,13 @@+let b:Comment="//"+let b:EndComment=""+runtime! include/spacing/eight.vim+setlocal noexpandtab+setlocal colorcolumn=100+noremap <Leader>i :GoImports<CR>++let g:gofmt_command="goimports"+let g:go_jump_to_error = 0+let g:go_autodetect_gopath = 0+let g:go_template_autocreate = 0+let g:go_def_mode='gopls'+let g:go_def_mapping_enabled = 1

.config/nvim/include/lang/rust.vim

new file mode 100644@@ -0,0 +1,44 @@+" For custom commenting functions.+let b:Comment="//"+let b:EndComment=""++" Four space indents.+runtime! include/spacing/four.vim++" Make syntax highlighting more efficient.+syntax sync fromstart++" 'recommended style' uses 99-column lines. No thanks.+let g:rust_recommended_style = 0++" Always run rustfmt is applicable and always use stable.+let g:rustfmt_autosave_if_config_present = 1+let g:rustfmt_command = "rustfmt +stable"++" Make CTRL-T work correctly with goto-definition.+setlocal tagfunc=CocTagFunc++nmap <Leader>gt <Plug>(coc-type-definition)+nmap <Leader>gre <Plug>(coc-references)+nmap <Leader>grn <Plug>(coc-rename)+nmap <Leader>gd <Plug>(coc-diagnostic-info)+nmap <Leader>gp <Plug>(coc-diagnostic-prev)+nmap <Leader>gn <Plug>(coc-diagnostic-next)++" Trigger auto-completion with C-space.+inoremap <silent><expr> <c-space> coc#refresh()+" Make <TAB> select next completion and Shift-<TAB> to select previous.+function! s:check_back_space() abort+  let col = col('.') - 1+  return !col || getline('.')[col - 1]  =~ '\s'+endfunction+inoremap <silent><expr> <TAB>+  \ pumvisible() ? "\<C-n>" :+  \ <SID>check_back_space() ? "\<TAB>" :+  \ coc#refresh()+inoremap <silent><expr> <S-TAB>+  \ pumvisible() ? "\<C-p>" :+  \ <SID>check_back_space() ? "\<S-TAB>" :+  \ coc#refresh()+" Make <CR> confirm completion.+inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<CR>"

.config/nvim/include/options.vim

new file mode 100644@@ -0,0 +1,35 @@+" Show line numbers.+set number++" Always expand tabs to spaces.+set expandtab++" Keep a buffer around even when abandoned.+" Without this, jump-to-definition in LSP clients seems to complain if the+" file hasn't been saved. In other words, let us go to other buffers even if+" the current one isn't saved.+set hidden++" This causes neovim to use the system clipboard for all yanking operations,+" instead of needing to use the '+' or '*' registers explicitly.+set clipboard+=unnamedplus++" There's no need to do syntax highlighting past this many columns. The default+" of 3000 is a bit and degrades performance.+set synmaxcol=200++" While typing a search, start highlighting results.+set incsearch++" When scrolling, always keep the cursor N lines from the edges.+set scrolloff=10++" By default, use two space indents and don't wrap automatically.+set textwidth=0+runtime! include/spacing/two.vim++" Don't switch window focus when using HTTP client.+let g:http_client_focus_output_window=0++" Don't conceal things in markup languages.+let g:pandoc#syntax#conceal#use = 0

.config/nvim/include/plugins.vim

new file mode 100644@@ -0,0 +1,86 @@+call plug#begin(stdpath('data') . '/plugged')++" The standard Rust vim plugin. There's quite a bit of overlap with LSPs here,+" but it has useful settings for indentation and what not.+Plug 'rust-lang/rust.vim'++" Bulk renaming of files in vim.+Plug 'qpkorr/vim-renamer'++" TOML syntax support.+Plug 'cespare/vim-toml'++" Go plugin.+Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' }++" FZF plugin for fuzzy searching files.+Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }+Plug 'junegunn/fzf.vim'++" For autowrapping function declarations.+Plug 'FooSoft/vim-argwrap'+nnoremap <silent> \q :ArgWrap<CR>+let g:argwrap_tail_comma = 1++" Install common neovim LSP client configurations.+" Plug 'neovim/nvim-lsp'+" TODO: There appears to currently be a bug where nvim-lsp always reports a+" syntax error at the bottom of a Rust source file. So use COC for now.+Plug 'neoclide/coc.nvim', {'branch': 'release'}++" This plugin is used to configure how nvim-lsp displays errors/diagnostics.+" TODO: Since we're using COC for now, we don't need this.+" Plug 'haorenW1025/diagnostic-nvim'+" let g:diagnostic_insert_delay = 1+" let g:diagnostic_enable_virtual_text = 1++" We use ALE for Go, because it supports additional linting tools.+Plug 'dense-analysis/ale'+let g:ale_linters = {+      \ 'go': ['gofmt', 'golint', 'go vet', 'go build', 'gosimple']+      \ }+let g:ale_lint_on_enter = 1+let g:ale_lint_on_filetype_changed = 1+let g:ale_lint_on_save = 1+let g:ale_lint_on_text_changed = 'never'+let g:ale_lint_on_insert_leave = 0+let g:ale_completion_enabled = 0+" N.B. This is the default value, but it serves as a reminder that vim+" on Ubuntu 18.04 is broken. Namely, the cursor disappears on any line+" that echos an error message in the status bar. The way to fix this is to+" install an updated version of vim:+"+"     sudo add-apt-repository ppa:jonathonf/vim+"     sudo apt-get update+"     sudo apt-get upgrade+"+" Presumably this doesn't impact neovim, since we use the latest pre-release.+let g:ale_echo_cursor = 1++" This must be called before importing any Lua modules added above.+call plug#end()++" Configure Rust LSP plugin.+" This apparently must be here, before ftdetect loads lang-specific settings.+"+" TODO: There appears to currently be a bug where nvim-lsp always reports a+" syntax error at the bottom of a Rust source file. So use COC for now.+" lua <<EOF+" -- local lsp = require 'nvim_lsp'+" -- lsp.rust_analyzer.setup({+" -- })+" require'nvim_lsp'.rust_analyzer.setup{+" --  on_attach = require'diagnostic'.on_attach,+" }+" --  settings = {+" --    ["rust-analyzer"] = {+" --      checkOnSave = {+" --        enable = true;+" --      },+" --      diagnostics = {+" --        enable = false;+" --      }+" --    }+" --  }+" --}+" EOF

.config/nvim/include/spacing/eight.vim

new file mode 100644@@ -0,0 +1,3 @@+setlocal tabstop=8+setlocal shiftwidth=8+setlocal softtabstop=8

.config/nvim/include/spacing/four.vim

new file mode 100644@@ -0,0 +1,3 @@+setlocal tabstop=4+setlocal shiftwidth=4+setlocal softtabstop=4

.config/nvim/include/spacing/text.vim

new file mode 100644@@ -0,0 +1,3 @@+runtime! include/spacing/two.vim+setlocal textwidth=79+setlocal smartindent

.config/nvim/include/spacing/tridactyl.vim

new file mode 100644@@ -0,0 +1,4 @@+runtime! include/spacing/text.vim+set binary+set noeol+set expandtab

.config/nvim/include/spacing/two.vim

new file mode 100644@@ -0,0 +1,3 @@+setlocal tabstop=2+setlocal shiftwidth=2+setlocal softtabstop=2

.config/nvim/include/style.vim

new file mode 100644@@ -0,0 +1,9 @@+" Force neovim to emit true colors.+set termguicolors+" Colors a vertical bar at the given column.+set colorcolumn=80+" Because dark backgrounds suck. Also, using a naturally light colorscheme+" with a dark background ends up looking pretty bad.+set background=light+" Beautiful theme.+colorscheme summerfruit256

.config/nvim/include/windows.vim

new file mode 100644@@ -0,0 +1,25 @@+function! WinMove(key) +  let l:curwin = winnr()+  exec "wincmd " . a:key+  if (l:curwin == winnr()) "we havent moved+    let l:curview = winsaveview()+    if match(a:key, '[jk]') > -1 "were we going up/down+      wincmd s+    else +      wincmd v+    endif+    call winrestview(l:curview)+    exec "wincmd " . a:key+    call winrestview(l:curview)+  endif+endfunction+ +map <C-W>h    :call WinMove('h')<cr>+map <C-W>k    :call WinMove('k')<cr>+map <C-W>l    :call WinMove('l')<cr>+map <C-W>j    :call WinMove('j')<cr>++map <C-left>  :wincmd <<cr>+map <C-right> :wincmd ><cr>+map <C-up>    :wincmd +<cr>+map <C-down>  :wincmd -<cr>

.config/nvim/init.vim

new file mode 100644@@ -0,0 +1,11 @@+" Install plugins first. We may configure plugins for specific languages later.+runtime! include/plugins.vim+" This is next because it sets language specific variables.+runtime! include/lang.vim++runtime! include/autos.vim+runtime! include/comment.vim+runtime! include/keybinds.vim+runtime! include/options.vim+runtime! include/style.vim+runtime! include/windows.vim

.config/tridactyl/rustdoc-condensed.js

new file mode 100644@@ -0,0 +1,69 @@+(function() {+  // This function forces rustdoc to collapse documentation for all items,+  // except for the methods defined in an impl block and the primary type's+  // declaration. This is the most natural view IMO, since it provides the+  // primary type along with an easy to scan overview of available methods.+  //+  // rustdoc does seemingly have user settings that purport to make this the+  // default, but I could never cause them to work in a reliably consistent+  // way. This is especially useful when writing documents, where you commonly+  // want to refresh and look at the docs for the specific item you're working+  // on. This mini-script will automatically scroll to and expand the currently+  // selected method.+  //+  // I used the tridactyl Firefox extension to bind this script to `,z` with+  // the following in my tridactylrc:+  //+  //     bind ,z composite jsb tri.native.run('cat path/to/rustdoc-condensed.js') | js -p eval(JS_ARG.content)++  // get the currently selected doc item from URL's hash fragment+  // e.g., in `struct.BStr.html#method.words`, this returns `method.words`.+  function getPageId() {+    var id = document.location.href.split("#")[1];+    if (id) {+      return id.split("?")[0].split("&")[0];+    }+    return null;+  }++  // collapse everything, with an extra click in case things are partially+  // collapased already+  const toggleAll = document.getElementById('toggle-all-docs');+  if (toggleAll.className.indexOf('will-expand') > -1) {+    toggleAll.click();+  }+  toggleAll.click();++  // re-expand primary impls+  const impls = document.getElementsByClassName('impl');+  for (let i = 0; i < impls.length; i++) {+    // but don't expand every impl, just the ones on this type+    if (!/^impl(-\d+)?$/.test(impls[i].id)) {+      continue;+    }++    const toggles = impls[i].getElementsByClassName('collapse-toggle');+    for (let j = 0; j < toggles.length; j++) {+      // If it's already expanded, then let it be. In newer versions of+      // rustdoc, collapsing everything doesn't collapse the methods, so we+      // don't need to do anything.+      if (toggles[j].innerText == '[−]') {+        continue;+      }+      toggles[j].click();+    }+  }++  // expand type declaration docs+  const main = document.getElementById('main');+  const wrapper = document.getElementsByClassName('toggle-wrapper')[0];+  wrapper.getElementsByTagName('a')[0].click();++  // re-expand specific method declaration, and scroll to it+  const pageId = getPageId();+  if (pageId !== null) {+    const method = document.getElementById(pageId);+    method.getElementsByClassName('collapse-toggle')[0].click();+    method.scrollIntoView();+  }+})()

.config/tridactyl/tridactylrc

new file mode 100644@@ -0,0 +1,56 @@+" vim: filetype=vim++" This wipes all existing settings. This means that if a setting in this file+" is removed, then it will return to default. In other words, this file serves+" as an enforced single point of truth for Tridactyl's configuration.+sanitize tridactyllocal tridactylsync++" Just use a blank page for new tab. It would be nicer to use the standard+" Firefox homepage, but Tridactyl doesn't support this yet.+set newtab about:blank++" Use neovim in tmux for editor.+set editorcmd terminal -e tmux -u new nvim -S /home/andrew/.config/nvim/include/spacing/tridactyl.vim++" Ctrl-F should use the browser's native 'find' functionality.+unbind <C-f>++" But also support Tridactyl search too.+bind / fillcmdline find+bind ? fillcmdline find -?+bind n findnext 1+bind N findnext -1+" Remove search highlighting.+bind ,<Space> nohlsearch+" Use sensitive case. Smart case would be nice here, but it doesn't work.+set findcase sensitive++" Smooth scrolling, yes please. This is still a bit janky in Tridactyl.+" ... actually, it's just too janky. Disable it. Sigh.+set smoothscroll false++" The default jump of 10 is a bit much.+bind j scrollline 5+bind k scrollline -5++" K and J should move between tabs. x should close them.+bind J tabprev+bind K tabnext+bind x tabclose++" For opening videos in mpv.+" bind zv hint -W exclaim mpv+bind zv composite js document.location.href | exclaim_quiet mpv --loop++" Don't run Tridactyl on some web sites because it doesn't work well, or+" because the web site has its own keybindings.+autocmd DocStart mail.google.com mode ignore+autocmd DocStart meet.google.com mode ignore+autocmd DocStart discordapp.com mode ignore++" Sometimes the status bar in the bottom left corner overlaps the Tridactyl+" command line, so set an option to move the status bar to the right.+guiset_quiet hoverlink right++" Set up some shortcuts for running custom scripts.+bind zz composite jsb tri.native.run('cat /home/andrew/.config/tridactyl/rustdoc-condensed.js') | js -p eval(JS_ARG.content)

.envrc

new file mode 100644@@ -0,0 +1,58 @@+# vim: ft=sh sw=2 ts=2 sts=2++# Various settings.+export EDITOR="vim"+export MOST_EDITOR="$EDITOR"+export MANPAGER="less -R"+export MANPATH="$HOME/man:"+export XDG_DATA_HOME="$HOME/.local/share"+export XDG_CONFIG_HOME="$HOME/.config"+export XDG_CACHE_HOME="$HOME/.cache"+# shellcheck disable=SC2155+export GPG_TTY="$(tty)"+export SHELLCHECK_OPTS="-e SC2086 -e SC2016 -e SC2046 -e SC1090 -e SC2001 -e SC2236"+export QT_QPA_PLATFORMTHEME=qt5ct+export MAKEOPTS="-j12"+export PYTHONDONTWRITEBYTECODE=1++# Looks like GOPATH has gone the way of the do-do.+unset GOPATH++# Set config path for ripgrep.+if is-cygwin; then+    RIPGREP_CONFIG_PATH=C:/cygwin/home/andrew/.ripgreprc+else+    RIPGREP_CONFIG_PATH="$HOME/.ripgreprc"+fi+export RIPGREP_CONFIG_PATH++# Set config for fzf.+export FZF_DEFAULT_COMMAND="rg --files"+export FZF_DEFAULT_OPTS="+    --height 40% --border+    --bind 'tab:down' --bind 'btab:up' --bind 'ctrl-s:toggle'+"++# Considered harmful by https://wiki.archlinux.org/index.php/Locale+export LC_ALL=++# Personal variables.+export LOG="$HOME/data/log"+export EMAIL="jamslam@gmail.com"+export PUBPATH="$HOME/data/pubs"+export BROWSER="google-chrome"+export MOVIES="$HOME/media/movies/sd"+export MOVIESHD="$HOME/media/movies/hd"+export TV="$HOME/media/tv"+export MUSIC="$HOME/media/music"++# Ledger vars.+export LEDGER_FILE=/m/data/home/finance/accounts.ldg+export LEDGER_PRICE_DB=/m/data/home/finance/pricedb.ldg+export FIN_CONFIG=/m/data/home/finance/config.toml++# Mac specific overrides.+if is-mac; then+  # Our TERM is typically tmux-256color. macOS doesn't seem to recognize it.+  export TERM=xterm+fi

.gitconfig.default

new file mode 100644@@ -0,0 +1,27 @@+[user]+  email = jamslam@gmail.com+  name = Andrew Gallant+  signingkey = jamslam@gmail.com+[rerere]+  enabled = true+[commit]+  gpgsign = true+[tag]+  forceSignAnnotated = true+[merge]+  ff = only+[pull]+  rebase = true+[rebase]+  autoSquash = true+[absorb]+  maxStack = 50+[alias]+  pushf = push --force-with-lease+  diffy = difftool --no-prompt --trust-exit-code --extcmd 'icdiff -N -U3'+  amend = commit -a --amend -C HEAD+  co = checkout+[url "git@github.com:"]+  insteadOf = https://github.com/+[gui]+	gcwarning = false

.gitignore

new file mode 100644@@ -0,0 +1,55 @@+# Because I'm paranoid and because I want to see untracked files, I maintain+# an exhaustive gitignore list. This also makes searching my home directory+# with ripgrep convenient, since it won't descend into most directories.++# top-level hidden files/directories+/.Xauthority+/.aws+/.bash_history+/.cache+/.cargo+/.debug+/.docker+/.fzf*+/.gist+/.gitconfig+/.git-old+/.gkrellm2+/.gmrun_history+/.gnupg+/.gox11+/.laptop+/.lesshst+/.local+/.mozilla+/.old+/.password-store+/.pki+/.pythonhist+/.pyx11+/.qgrep+/.rustup+/.sane+/.thumbnails+/.tig_history+/.vim-cache+/.viminfo+/.wmWeatherReports+/.zcompdump+/.zoom+/.zsh_history++# top-level directories+/Desktop+/Downloads+/clones+/code+/data+/go+/man+/rust+/tmp+/work++# Files we always want to ignore+.netrwhist

.gmrunrc

new file mode 100644@@ -0,0 +1,50 @@+# gmrun configuration file+# gmrun is (C) Mihai Bazon, <mishoo@infoiasi.ro>+# GPL v2.0 applies++# Set terminal+Terminal = lxterminal+TermExec = ${Terminal} -e+AlwaysInTerm = ssh telnet ftp lynx mc vi vim pine centericq perldoc man cmus++# Set window geometry (except height)+Width = 400+Top = 450+# Left = 2360 ++# History size+History = 999999999++# Shows last history line selected when invoked+ShowLast = 1++# Show files starting with '.'+# Default is 0 (off), set it to 1 if you want "hidden" files to show up+# in the completion window+ShowDotFiles = 1++# Timeout (in milliseconds) after which gmrun will simulate a TAB press+# Set this to NULL if don't like this feature.+TabTimeout = 0++# URL handlers+# If the entered text is "http://www.google.com" then:+#   - %u gets replaced with the whole URL ("http://www.google.com")+#   - %s gets replaced with "//www.google.com".  This is useful for URL-s+#     like "man:printf" --> %s will get replaced with "printf"+# URL_http = mozilla -remote "openURL(%u, new-window)"+# URL_http = /home/andrew/bin/chrome "openURL(%u, new-window)"+URL_http = google-chrome --new-window %s+URL_mailto = mozilla -remote "mailto(%s)"+URL_man = ${TermExec} 'man -P "less -R" %s'+URL_info = ${TermExec} 'info %s'+URL_pd = ${TermExec} 'perldoc %s'+URL_file = nautilus %s+URL_readme = ${TermExec} 'less /usr/share/doc/%s/README'+URL_info = ${TermExec} 'info %s'+URL_sh = sh -c '%s'++# extension handlers+EXT:doc,rtf = libreoffice -writer %s+EXT:txt,cc,cpp,h,java,html,htm,epl,tex,latex,js,css,xml,xsl,am = vim %s+EXT:pdf,ps = okular %s

.ideskrc

new file mode 100644@@ -0,0 +1,43 @@+table Config+  FontName: gothic+  FontSize: 14+  FontColor: #FFFFFF+  ToolTip.FontSize: 14+  ToolTip.FontName: gothic+  ToolTip.ForeColor: #0000FF+  ToolTip.BackColor: #FFFFFF+  ToolTip.CaptionOnHover: true+  ToolTip.CaptionPlacement: Right+  Locked: false+  Transparency: 0+  Shadow: true+  ShadowColor: #000000+  ShadowX: 1+  ShadowY: 1+  Bold: true+  ClickDelay: 300+  IconSnap: true+  SnapWidth: 100+  SnapHeight: 100+  SnapOrigin: BottomRight+  SnapShadow: false+  SnapShadowTrans: 200+  CaptionOnHover: false+  CaptionPlacement: bottom+  FillStyle: fillinvert+  Background.Delay: 0+  Background.Source: None+  Background.File: None+  Background.Mode: Center+  Background.Color: #C2CCFF+end++table Actions+  Lock: control right doubleClk+  Reload: middle doubleClk+  Drag: left hold+  EndDrag: left singleClk+  Execute[0]: left doubleClk+  Execute[1]: right doubleClk+end+

.idesktop/movies.lnk

new file mode 100644@@ -0,0 +1,8 @@+table Icon+  Caption: movies+  Icon: /usr/share/icons/oxygen/base/64x64/places/folder-blue.png+  X: 402+  Y: 0+  Command[0]: dolphin /m/media/movies+end+

.idesktop/stage.lnk

new file mode 100644@@ -0,0 +1,8 @@+table Icon+  Caption: stage+  Icon: /usr/share/icons/oxygen/base/64x64/places/folder-blue.png+  X: 202+  Y: 0+  Command[0]: dolphin /m/media/stage+end+

.idesktop/tv.lnk

new file mode 100644@@ -0,0 +1,8 @@+table Icon+  Caption: tv+  Icon: /usr/share/icons/oxygen/base/64x64/places/folder-blue.png+  X: 302+  Y: 0+  Command[0]: dolphin /m/media/tv+end+

.inputrc

new file mode 100644@@ -0,0 +1,14 @@+"\e[A": history-search-backward+"\e[B": history-search-forward+set show-all-if-ambiguous on+# set completion-ignore-case on+set mark-symlinked-directories on++# mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving+"\e[1;5C": forward-word+"\e[1;5D": backward-word+"\e[5C": forward-word+"\e[5D": backward-word+"\e\e[C": forward-word+"\e\e[D": backward-word+

.pathrc

new file mode 100644@@ -0,0 +1,45 @@+# vim: ft=sh sw=2 ts=2 sts=2++prependpath() {+  paths="$1"+  toadd="$2"+  case ":$paths:" in+    *:"$toadd":*)+      echo "$paths"+      ;;+    *)+      echo "$toadd${paths:+:$paths}"+      ;;+  esac+}++# Set the Cargo installation directory.+CARGO_INSTALL_ROOT="$HOME/.local/cargo"++# Setup PATH.+# shellcheck disable=SC2123+PATH=""+# System paths.+PATH="$(prependpath "$PATH" /sbin)"+PATH="$(prependpath "$PATH" /bin)"+PATH="$(prependpath "$PATH" /usr/sbin)"+PATH="$(prependpath "$PATH" /usr/bin)"+PATH="$(prependpath "$PATH" /usr/bin/core_perl)"+PATH="$(prependpath "$PATH" /usr/bin/vendor_perl)"+PATH="$(prependpath "$PATH" /usr/local/sbin)"+PATH="$(prependpath "$PATH" /usr/local/bin)"+PATH="$(prependpath "$PATH" /usr/local/go/bin)"+# Home specific paths.+PATH="$(prependpath "$PATH" "$HOME/.local/bin")"+PATH="$(prependpath "$PATH" "$HOME/.gem/ruby/2.5.0/bin")"+PATH="$(prependpath "$PATH" "$HOME/go/bin")"+PATH="$(prependpath "$PATH" "$CARGO_INSTALL_ROOT/bin")"+PATH="$(prependpath "$PATH" "$HOME/.cargo/bin")"+# My paths.+PATH="$(prependpath "$PATH" "$HOME/bin")"+PATH="$(prependpath "$PATH" "$HOME/bin/x86_64")"+PATH="$(prependpath "$PATH" "$HOME/rust/ripgrep/target/release")"+PATH="$(prependpath "$PATH" "$HOME/rust/ripgrep/target/release/examples")"+PATH="$(prependpath "$PATH" "$HOME/rust/xsv/target/release")"++export PATH CARGO_INSTALL_ROOT

.ripgreprc

new file mode 100644@@ -0,0 +1,8 @@+#--max-columns=500+--max-columns-preview+--colors=match:bg:0xff,0x7f,0x00+--colors=match:fg:white+--colors=line:none+--colors=line:fg:magenta+--colors=path:fg:green+--type-add=got:*_test.go

.ssh/.gitignore

new file mode 100644@@ -0,0 +1,3 @@+/authorized_keys+/keys+/known_hosts

.ssh/rc

new file mode 100755@@ -0,0 +1,10 @@+#!/bin/bash++# Find a valid SSH_AUTH_SOCK and symlink it to a known location. Once it's+# at a known location, other applications like tmux can pick it up and+# automatically reconnect to the correct agent.+for agent in /tmp/ssh-*/agent.*; do+  if SSH_AUTH_SOCK="$agent" ssh-add -L > /dev/null 2>&1; then+    ln -sf "$agent" /tmp/andrew_ssh_auth_sock+  fi+done

.systemd.sh

new file mode 100644@@ -0,0 +1,79 @@+# vim: ft=sh sw=2 ts=2 sts=2++# simplified systemd command, for instance+# "sudo systemctl stop xxx" - > "0.stop xxx"+if ! cmd-exists systemd-notify || ! systemd-notify --booted;+then  # for not systemd+    0.start() {+        sudo rc.d start "$@"+    }++    0.restart() {+        sudo rc.d restart "$@"+    }++    0.stop() {+        sudo rc.d stop "$@"+    }+else+    0.reboot() {+        systemctl reboot "$@"+    }++    0.off() {+        systemctl poweroff "$@"+    }++    # start systemd service+    0.start() {+        sudo systemctl start "$@"+    }+    # restart systemd service+    0.restart() {+        sudo systemctl restart "$@"+    }+    # stop systemd service+    0.stop() {+        sudo systemctl stop "$@"+    }+    # enable systemd service+    0.enable() {+        sudo systemctl enable "$@"+    }+    # disable a systemd service+    0.disable() {+        sudo systemctl disable "$@"+    }+    # show the status of a service+    0.status() {+        systemctl status "$@"+    }+    # reload a service configuration+    0.reload() {+        sudo systemctl --system daemon-reload+    }+    # list all running service+    0.list() {+        systemctl+    }+    # list all failed service+    0.failed () {+        systemctl --failed+    }+    # list all systemd available unit files+    0.list-files() {+        systemctl list-unit-files+    }+    # check the log+    0.log() {+        sudo journalctl --follow --this-boot "$@"+    }+    # show wants+    0.wants() {+        systemctl show -p "Wants" $1.target+    }+    # analyze the system+    0.analyze() {+        systemd-analyze "$@"+    }+fi

.tmux.conf

new file mode 100644@@ -0,0 +1,93 @@+# Use Ctrl-A instead of Ctrl-B.+set -g prefix C-a+unbind C-b+bind C-a send-prefix++# Disable the status bar. The window title is sufficient.+set -g status off++# Automatically renumber windows when one is killed.+set -g renumber-windows on++# Use 256 colors.+# set -g default-terminal "xterm-256color"+set -g default-terminal "tmux-256color"+# This is to make tmux support truecolor. neovim suggested it via checkhealth.+set-option -sa terminal-overrides ',*-256color:RGB'++# Set history limit ridiculously high.+set -g history-limit 1073741824++# Don't add any delay for pressing the escape key.+# Without this, vim becomes *really* annoying to use.+# The default is 500ms. Reduce it substantially.+set -g escape-time 20++# Set the appropriate title.+set -g set-titles on+# set -g set-titles-string "#(pwd)"++# Always use vim keybindings.+set -g mode-keys vi++# Start window numbering at 1.+set -g base-index 1++# Convenient config reloading.+bind r source-file "$HOME/.tmux.conf"++# Switch back and forth between windows, screen-style.+bind a last-window+bind C-a last-window++# When opening a new window, use the CWD.+unbind c+bind c new-window -c "#{pane_current_path}"++# Use saner splitting commands.+unbind %+unbind '"'+bind h split-window -h -c "#{pane_current_path}"+bind v split-window -v -c "#{pane_current_path}"++# Use '"' to list windows, like in Screen.+# Leave tmux's 'w' binding though.+# Also, support tmux 2.5, which has different `choose-tree` defaults.+if-shell 'tmux -V | grep "tmux 2.5"' 'bind "\"" choose-tree -u' 'bind "\"" choose-tree -s'+if-shell 'tmux -V | grep "tmux 2.5"' 'bind w choose-tree -u' 'bind w choose-tree -w'++# Nicer shortcuts for toggling between layouts.+unbind z+unbind Z+bind z select-layout even-vertical+bind Z select-layout even-horizontal++# Vim copying.+unbind -T copy-mode-vi v+unbind -T copy-mode-vi y+bind -T copy-mode-vi v send -X begin-selection+bind -T copy-mode-vi C-v send -X rectangle-toggle+bind -T copy-mode-vi y send -X copy-selection++# Make it easier to enter copy-mode.+bind -T root S-Up copy-mode \; send -X scroll-up+bind -T root S-Down copy-mode \; send -X scroll-down+bind -T root S-PageUp copy-mode \; send -X halfpage-up+bind -T root S-PageDown copy-mode \; send -X halfpage-down++# Don't be so overeager with paging.+bind -T copy-mode-vi S-PageUp send -X halfpage-up+bind -T copy-mode-vi S-PageDown send -X halfpage-down+bind -T copy-mode-vi PageUp send -X halfpage-up+bind -T copy-mode-vi PageDown send -X halfpage-down++# Renumber session automatically.+set-hook -g session-created "run-shell $HOME/bin/tmux-cleanup \; run-shell $HOME/bin/tmux-renumber-sessions"+set-hook -g session-closed "run-shell $HOME/bin/tmux-cleanup \; run-shell $HOME/bin/tmux-renumber-sessions"++# Open a new terminal in the CWD.+bind C-n run-shell -b "$HOME/bin/terminal -d #{pane_current_path} -e tmux -u new -c #{pane_current_path} zsh"++# set -g update-environment "SSH_ASKPASS SSH_AGENT_PID SSH_CONNECTION"+# setenv -g SSH_AUTH_SOCK "/tmp/andrew_ssh_auth_sock"+# if-shell 'ls /tmp/andrew_ssh_auth_sock' 'setenv -g SSH_AUTH_SOCK "/tmp/andrew_ssh_auth_sock"'

.vim/.gitignore

new file mode 100644@@ -0,0 +1,2 @@+/plugged+/view

.vim/colors/bespin.vim

new file mode 100644@@ -0,0 +1,102 @@+" Vim color file+" Converted from Textmate theme Bespin using Coloration v0.2.5 (http://github.com/sickill/coloration)++set background=dark+highlight clear++if exists("syntax_on")+  syntax reset+endif++let g:colors_name = "Bespin"++hi Cursor  guifg=NONE guibg=#a7a7a7 gui=NONE+hi Visual  guifg=NONE guibg=#4c4a49 gui=NONE+hi CursorLine  guifg=NONE guibg=#2e2823 gui=NONE+hi CursorColumn  guifg=NONE guibg=#2e2823 gui=NONE+hi LineNr  guifg=#71685d guibg=#28211c gui=NONE+hi VertSplit  guifg=#443c35 guibg=#443c35 gui=NONE+hi MatchParen  guifg=#5ea6ea guibg=NONE gui=NONE+hi StatusLine  guifg=#baae9e guibg=#443c35 gui=bold+hi StatusLineNC  guifg=#baae9e guibg=#443c35 gui=NONE+hi Pmenu  guifg=#937121 guibg=NONE gui=NONE+hi PmenuSel  guifg=NONE guibg=#4c4a49 gui=NONE+hi IncSearch  guifg=NONE guibg=#41434a gui=NONE+hi Search  guifg=NONE guibg=#41434a gui=NONE+hi Directory  guifg=#cf6a4c guibg=NONE gui=NONE+hi Folded  guifg=#666666 guibg=#28211c gui=NONE++hi Normal  guifg=#baae9e guibg=#28211c gui=NONE+hi Boolean  guifg=#cf6a4c guibg=NONE gui=NONE+hi Character  guifg=#cf6a4c guibg=NONE gui=NONE+hi Comment  guifg=#666666 guibg=NONE gui=italic+hi Conditional  guifg=#5ea6ea guibg=NONE gui=NONE+hi Constant  guifg=#cf6a4c guibg=NONE gui=NONE+hi Define  guifg=#5ea6ea guibg=NONE gui=NONE+hi ErrorMsg  guifg=NONE guibg=NONE gui=NONE+hi WarningMsg  guifg=NONE guibg=NONE gui=NONE+hi Float  guifg=#cf6a4c guibg=NONE gui=NONE+hi Function  guifg=#937121 guibg=NONE gui=NONE+hi Identifier  guifg=#f9ee98 guibg=NONE gui=NONE+hi Keyword  guifg=#5ea6ea guibg=NONE gui=NONE+hi Label  guifg=#54be0d guibg=NONE gui=NONE+hi NonText  guifg=#5e5955 guibg=#2e2823 gui=NONE+hi Number  guifg=#cf6a4c guibg=NONE gui=NONE+hi Operator  guifg=#5ea6ea guibg=NONE gui=NONE+hi PreProc  guifg=#5ea6ea guibg=NONE gui=NONE+hi Special  guifg=#baae9e guibg=NONE gui=NONE+hi SpecialKey  guifg=#5e5955 guibg=#2e2823 gui=NONE+hi Statement  guifg=#5ea6ea guibg=NONE gui=NONE+hi StorageClass  guifg=#f9ee98 guibg=NONE gui=NONE+hi String  guifg=#54be0d guibg=NONE gui=NONE+hi Tag  guifg=#5ea6ea guibg=NONE gui=NONE+hi Title  guifg=#baae9e guibg=NONE gui=bold+hi Todo  guifg=#666666 guibg=NONE gui=inverse,bold,italic+hi Type  guifg=#937121 guibg=NONE gui=NONE+hi Underlined  guifg=NONE guibg=NONE gui=underline+hi rubyClass  guifg=#5ea6ea guibg=NONE gui=NONE+hi rubyFunction  guifg=#937121 guibg=NONE gui=NONE+hi rubyInterpolationDelimiter  guifg=NONE guibg=NONE gui=NONE+hi rubySymbol  guifg=#cf6a4c guibg=NONE gui=NONE+hi rubyConstant  guifg=#9b859d guibg=NONE gui=NONE+hi rubyStringDelimiter  guifg=#54be0d guibg=NONE gui=NONE+hi rubyBlockParameter  guifg=#7587a6 guibg=NONE gui=NONE+hi rubyInstanceVariable  guifg=#7587a6 guibg=NONE gui=NONE+hi rubyInclude  guifg=#5ea6ea guibg=NONE gui=NONE+hi rubyGlobalVariable  guifg=#7587a6 guibg=NONE gui=NONE+hi rubyRegexp  guifg=#e9c062 guibg=NONE gui=NONE+hi rubyRegexpDelimiter  guifg=#e9c062 guibg=NONE gui=NONE+hi rubyEscape  guifg=#cf6a4c guibg=NONE gui=NONE+hi rubyControl  guifg=#5ea6ea guibg=NONE gui=NONE+hi rubyClassVariable  guifg=#7587a6 guibg=NONE gui=NONE+hi rubyOperator  guifg=#5ea6ea guibg=NONE gui=NONE+hi rubyException  guifg=#5ea6ea guibg=NONE gui=NONE+hi rubyPseudoVariable  guifg=#7587a6 guibg=NONE gui=NONE+hi rubyRailsUserClass  guifg=#9b859d guibg=NONE gui=NONE+hi rubyRailsARAssociationMethod  guifg=#dad085 guibg=NONE gui=NONE+hi rubyRailsARMethod  guifg=#dad085 guibg=NONE gui=NONE+hi rubyRailsRenderMethod  guifg=#dad085 guibg=NONE gui=NONE+hi rubyRailsMethod  guifg=#dad085 guibg=NONE gui=NONE+hi erubyDelimiter  guifg=NONE guibg=NONE gui=NONE+hi erubyComment  guifg=#666666 guibg=NONE gui=italic+hi erubyRailsMethod  guifg=#dad085 guibg=NONE gui=NONE+hi htmlTag  guifg=#ac885b guibg=NONE gui=NONE+hi htmlEndTag  guifg=#ac885b guibg=NONE gui=NONE+hi htmlTagName  guifg=#ac885b guibg=NONE gui=NONE+hi htmlArg  guifg=#ac885b guibg=NONE gui=NONE+hi htmlSpecialChar  guifg=#cf6a4c guibg=NONE gui=NONE+hi javaScriptFunction  guifg=#f9ee98 guibg=NONE gui=NONE+hi javaScriptRailsFunction  guifg=#dad085 guibg=NONE gui=NONE+hi javaScriptBraces  guifg=NONE guibg=NONE gui=NONE+hi yamlKey  guifg=#5ea6ea guibg=NONE gui=NONE+hi yamlAnchor  guifg=#7587a6 guibg=NONE gui=NONE+hi yamlAlias  guifg=#7587a6 guibg=NONE gui=NONE+hi yamlDocumentHeader  guifg=#54be0d guibg=NONE gui=NONE+hi cssURL  guifg=#7587a6 guibg=NONE gui=NONE+hi cssFunctionName  guifg=#dad085 guibg=NONE gui=NONE+hi cssColor  guifg=#cf6a4c guibg=NONE gui=NONE+hi cssPseudoClassId  guifg=#937121 guibg=NONE gui=NONE+hi cssClassName  guifg=#937121 guibg=NONE gui=NONE+hi cssValueLength  guifg=#cf6a4c guibg=NONE gui=NONE+hi cssCommonAttr  guifg=#cf6a4c guibg=NONE gui=NONE+hi cssBraces  guifg=NONE guibg=NONE gui=NONE

.vim/colors/desertink.vim

new file mode 100644@@ -0,0 +1,340 @@+" Vim color file+"+" Name:   desertink.vim+" Author: Markus Koller <markus-koller@gmx.ch>+"+" Note:   Only works in GUI and 88/256 color terminals+"+" This is a version of the default desert colorscheme with a+" darker background and more colorful foreground colors.+"+" It also adds highlighting for folds, diffs, line numbers,+" signcolumn, completion menus, and cursor line/column.++" The colors are automatically converted for 88/256 color terminals,+" adapted from http://www.vim.org/scripts/script.php?script_id=1243+"+" You can find the latest version at https://github.com/toupeira/desertink.vim+" and see a screenshot at http://i.imgur.com/DZ35F.png+"++set background=dark+if version > 580+  " no guarantees for version 5.8 and below, but this makes it stop+  " complaining+  hi clear+  if exists("syntax_on")+    syntax reset+  endif+endif+let g:colors_name="desertink"++if has("gui_running") || &t_Co == 88 || &t_Co == 256+  " functions {{{+  " returns an approximate grey index for the given grey level+  fun! <SID>grey_number(x)+    if &t_Co == 88+      if a:x < 23+        return 0+      elseif a:x < 69+        return 1+      elseif a:x < 103+        return 2+      elseif a:x < 127+        return 3+      elseif a:x < 150+        return 4+      elseif a:x < 173+        return 5+      elseif a:x < 196+        return 6+      elseif a:x < 219+        return 7+      elseif a:x < 243+        return 8+      else+        return 9+      endif+    else+      if a:x < 14+        return 0+      else+        let l:n = (a:x - 8) / 10+        let l:m = (a:x - 8) % 10+        if l:m < 5+          return l:n+        else+          return l:n + 1+        endif+      endif+    endif+  endfun++  " returns the actual grey level represented by the grey index+  fun! <SID>grey_level(n)+    if &t_Co == 88+      if a:n == 0+        return 0+      elseif a:n == 1+        return 46+      elseif a:n == 2+        return 92+      elseif a:n == 3+        return 115+      elseif a:n == 4+        return 139+      elseif a:n == 5+        return 162+      elseif a:n == 6+        return 185+      elseif a:n == 7+        return 208+      elseif a:n == 8+        return 231+      else+        return 255+      endif+    else+      if a:n == 0+        return 0+      else+        return 8 + (a:n * 10)+      endif+    endif+  endfun++  " returns the palette index for the given grey index+  fun! <SID>grey_color(n)+    if &t_Co == 88+      if a:n == 0+        return 16+      elseif a:n == 9+        return 79+      else+        return 79 + a:n+      endif+    else+      if a:n == 0+        return 16+      elseif a:n == 25+        return 231+      else+        return 231 + a:n+      endif+    endif+  endfun++  " returns an approximate color index for the given color level+  fun! <SID>rgb_number(x)+    if &t_Co == 88+      if a:x < 69+        return 0+      elseif a:x < 172+        return 1+      elseif a:x < 230+        return 2+      else+        return 3+      endif+    else+      if a:x < 75+        return 0+      else+        let l:n = (a:x - 55) / 40+        let l:m = (a:x - 55) % 40+        if l:m < 20+          return l:n+        else+          return l:n + 1+        endif+      endif+    endif+  endfun++  " returns the actual color level for the given color index+  fun! <SID>rgb_level(n)+    if &t_Co == 88+      if a:n == 0+        return 0+      elseif a:n == 1+        return 139+      elseif a:n == 2+        return 205+      else+        return 255+      endif+    else+      if a:n == 0+        return 0+      else+        return 55 + (a:n * 40)+      endif+    endif+  endfun++  " returns the palette index for the given R/G/B color indices+  fun! <SID>rgb_color(x, y, z)+    if &t_Co == 88+      return 16 + (a:x * 16) + (a:y * 4) + a:z+    else+      return 16 + (a:x * 36) + (a:y * 6) + a:z+    endif+  endfun++  " returns the palette index to approximate the given R/G/B color levels+  fun! <SID>color(r, g, b)+    " get the closest grey+    let l:gx = <SID>grey_number(a:r)+    let l:gy = <SID>grey_number(a:g)+    let l:gz = <SID>grey_number(a:b)++    " get the closest color+    let l:x = <SID>rgb_number(a:r)+    let l:y = <SID>rgb_number(a:g)+    let l:z = <SID>rgb_number(a:b)++    if l:gx == l:gy && l:gy == l:gz+      " there are two possibilities+      let l:dgr = <SID>grey_level(l:gx) - a:r+      let l:dgg = <SID>grey_level(l:gy) - a:g+      let l:dgb = <SID>grey_level(l:gz) - a:b+      let l:dgrey = (l:dgr * l:dgr) + (l:dgg * l:dgg) + (l:dgb * l:dgb)+      let l:dr = <SID>rgb_level(l:gx) - a:r+      let l:dg = <SID>rgb_level(l:gy) - a:g+      let l:db = <SID>rgb_level(l:gz) - a:b+      let l:drgb = (l:dr * l:dr) + (l:dg * l:dg) + (l:db * l:db)+      if l:dgrey < l:drgb+        " use the grey+        return <SID>grey_color(l:gx)+      else+        " use the color+        return <SID>rgb_color(l:x, l:y, l:z)+      endif+    else+      " only one possibility+      return <SID>rgb_color(l:x, l:y, l:z)+    endif+  endfun++  " returns the palette index to approximate the 'rrggbb' hex string+  fun! <SID>rgb(rgb)+    if a:rgb == "ffffff"+      return 15+    endif++    let l:r = ("0x" . strpart(a:rgb, 0, 2)) + 0+    let l:g = ("0x" . strpart(a:rgb, 2, 2)) + 0+    let l:b = ("0x" . strpart(a:rgb, 4, 2)) + 0++    return <SID>color(l:r, l:g, l:b)+  endfun++  " sets the highlighting for the given group, add optional fg, bg and attr+  " values to override the terminal settings+  fun! <SID>X(group, fg, bg, attr, ...)+    let l:ctermfg   = (a:0 > 0 && a:1 != "") ? a:1 : <SID>rgb(a:fg)+    let l:ctermbg   = (a:0 > 1 && a:2 != "") ? a:2 : <SID>rgb(a:bg)+    let l:ctermattr = (a:0 > 2 && a:3 != "") ? a:3 : a:attr++    if a:fg != ""+      exec "hi " . a:group . " guifg=#" . a:fg . " ctermfg=" . l:ctermfg+    endif+    if a:bg != ""+      exec "hi " . a:group . " guibg=#" . a:bg . " ctermbg=" . l:ctermbg+    endif+    if a:attr != ""+      exec "hi " . a:group . " gui=" . a:attr+    endif+    if l:ctermattr != ""+      exec "hi " . a:group . " cterm=" . l:ctermattr+    endif+  endfun+  " }}}++  call <SID>X("Normal", "ffffff", "222222", "")+  call <SID>X("NonText", "addbe7", "3D3D3D", "bold")++  " highlight groups+  "CursorIM+  "Directory+  "WildMenu+  "Menu+  "Scrollbar+  "Tooltip++  call <SID>X("Cursor", "708090", "f0e68c", "")++  " setting a background color for the cursor line can hide+  " other background colors such as Error and ErrorMsg+	"call <SID>X("CursorLine", "", "333333", "", "", "235", "none")+  "call <SID>X("CursorColumn", "", "333333", "", "", "235")++  " use only bold for the cursorline to avoid covering the background+  hi clear CursorLine+  hi clear CursorColumn+  hi CursorLine cterm=bold gui=bold+  hi CursorColumn cterm=bold gui=bold++  call <SID>X("StatusLine", "c2bfa5", "000000", "reverse", "231", "", "bold,reverse")+  call <SID>X("StatusLineNC", "c2bfa5", "7f7f7f", "reverse", "231")++  call <SID>X("Question", "00ff7f", "", "bold")+  call <SID>X("Error", "ffffff", "913d3b", "bold")+  call <SID>X("ErrorMsg", "ffffff", "913d3b", "bold")+  call <SID>X("ModeMsg", "daa520", "", "")+  call <SID>X("MoreMsg", "00ff7f", "", "bold")+  call <SID>X("Ignore", "666666", "", "")+  call <SID>X("Todo", "f9f747", "d75f00", "bold")+  call <SID>X("VertSplit", "c2bfa5", "7f7f7f", "reverse")++  call <SID>X("LineNr", "444444", "1a1a1a", "", "239")++  call <SID>X("Folded", "ffa500", "333333", "bold")+  call <SID>X("FoldColumn", "d2b48c", "222222", "")+  call <SID>X("SignColumn", "", "2a2a2a", "", "", "236")++  call <SID>X("Search", "ffffff", "6b8e23", "bold")+  call <SID>X("IncSearch", "ffffff", "3a663a", "bold")++  call <SID>X("SpecialKey", "9acd32", "", "")++  call <SID>X("Title", "cd5c5c", "", "")+  call <SID>X("Visual", "ffffff", "2e5e73", "bold")+  call <SID>X("VisualNOS", "cccccc", "2e5e73", "underline")+  call <SID>X("WarningMsg", "fa8072", "", "")+  call <SID>X("MatchParen", "", "606060", "bold")++  call <SID>X("DiffAdd", "", "242448", "", "", "17")+  call <SID>X("DiffChange", "", "59244a", "", "", "53")+  call <SID>X("DiffDelete", "", "407680", "", "", "24")+  call <SID>X("DiffText", "", "b34793", "")++  call <SID>X("Pmenu", "eeeeee", "444444", "")+  call <SID>X("PmenuSel", "ffffff", "555555", "bold")+  call <SID>X("PmenuSbar", "", "666666", "")+  call <SID>X("PmenuThumb", "", "606060", "")++  " syntax highlighting groups+  call <SID>X("Comment", "87ceeb", "", "")+  call <SID>X("Constant", "ff8080", "", "")+  call <SID>X("Identifier", "98fb98", "", "none")+  call <SID>X("Statement", "f0e260", "", "bold")+  call <SID>X("PreProc", "cd5c5c", "", "bold")+  call <SID>X("Type", "91b365", "", "bold")+  call <SID>X("Special", "ffc266", "", "")+  "Underlined++  " delete functions {{{+  delf <SID>X+  delf <SID>rgb+  delf <SID>color+  delf <SID>rgb_color+  delf <SID>rgb_level+  delf <SID>rgb_number+  delf <SID>grey_color+  delf <SID>grey_level+  delf <SID>grey_number+  " }}}+endif++" vim: set fdl=0 fdm=marker:

.vim/colors/hemisu.vim

new file mode 100644@@ -0,0 +1,215 @@+" hemisu.vim - Vim color scheme+" ----------------------------------------------------------+" Author:   Noah Frederick (http://noahfrederick.com/)+" Version:  3.4+" License:  Creative Commons Attribution-NonCommercial+"           3.0 Unported License       (see README.md)+" ----------------------------------------------------------++" Setup ----------------------------------------------------{{{+" Reset syntax highlighting+hi clear+if exists("syntax_on")+  syntax reset+endif++" Declare theme name+let g:colors_name = "hemisu"++"}}}+" The Colors -----------------------------------------------{{{+" Define reusable colors+let s:black            = { "gui": "#000000", "cterm": "16"  }+let s:white            = { "gui": "#FFFFFF", "cterm": "231" }+let s:almostWhite      = { "gui": "#EEEEEE", "cterm": "255" }+let s:almostBlack      = { "gui": "#111111", "cterm": "233" }+let s:middleDarkGrey   = { "gui": "#777777", "cterm": "241" }+let s:middleLightGrey  = { "gui": "#999999", "cterm": "246" }+let s:lightGrey        = { "gui": "#BBBBBB", "cterm": "249" }+let s:darkGrey         = { "gui": "#444444", "cterm": "238" }++let s:darkPink         = { "gui": "#63001C", "cterm": "88"  }+let s:middleDarkPink   = { "gui": "#FF0055", "cterm": "197" }+let s:middleLightPink  = { "gui": "#D65E76", "cterm": "167" }+let s:lightPink        = { "gui": "#FFAFAF", "cterm": "217" }++let s:darkBlue         = { "gui": "#005F87", "cterm": "24"  }+let s:middleDarkBlue   = { "gui": "#538192", "cterm": "24"  }+let s:middleLightBlue  = { "gui": "#9FD3E6", "cterm": "116" }+let s:lightBlue        = { "gui": "#CBE4EE", "cterm": "195" }++let s:darkGreen        = { "gui": "#5F5F00", "cterm": "58"  }+let s:middleDarkGreen  = { "gui": "#739200", "cterm": "64"  }+let s:middleLightGreen = { "gui": "#B1D631", "cterm": "149" }+let s:lightGreen       = { "gui": "#BBFFAA", "cterm": "157" }++let s:darkTan          = { "gui": "#503D15", "cterm": "52"  }+let s:lightTan         = { "gui": "#ECE1C8", "cterm": "230" }++" Assign to semantic categories based on background color+if &background == "dark"+  " Dark theme+  let s:bg         = s:black+  let s:norm       = s:almostWhite+  let s:comment    = s:middleDarkGrey+  let s:dimmed     = s:middleLightGrey+  let s:subtle     = s:darkGrey+  let s:faint      = s:almostBlack+  let s:accent1    = s:middleLightBlue+  let s:accent2    = s:middleLightGreen+  let s:accent3    = s:lightGreen+  let s:accent4    = s:lightTan+  let s:normRed    = s:middleLightPink+  let s:normGreen  = s:middleLightGreen+  let s:normBlue   = s:middleLightBlue+  let s:faintRed   = s:darkPink+  let s:faintGreen = s:darkGreen+  let s:faintBlue  = s:darkBlue+else+  " Light theme+  let s:bg         = s:white+  let s:norm       = s:almostBlack+  let s:comment    = s:middleLightGrey+  let s:dimmed     = s:middleDarkGrey+  let s:subtle     = s:lightGrey+  let s:faint      = s:almostWhite+  let s:accent1    = s:middleDarkBlue+  let s:accent2    = s:middleDarkGreen+  let s:accent3    = s:middleDarkPink+  let s:accent4    = s:darkTan+  let s:normRed    = s:middleDarkPink+  let s:normGreen  = s:middleDarkGreen+  let s:normBlue   = s:middleDarkBlue+  let s:faintRed   = s:lightPink+  let s:faintGreen = s:lightGreen+  let s:faintBlue  = s:lightBlue+endif++"}}}+" Utility Function -----------------------------------------{{{+function! s:h(group, style)+  execute "highlight" a:group+        \ "guifg="   (has_key(a:style, "fg")    ? a:style.fg.gui   : "NONE")+        \ "guibg="   (has_key(a:style, "bg")    ? a:style.bg.gui   : "NONE")+        \ "guisp="   (has_key(a:style, "sp")    ? a:style.sp.gui   : "NONE")+        \ "gui="     (has_key(a:style, "gui")   ? a:style.gui      : "NONE")+        \ "ctermfg=" (has_key(a:style, "fg")    ? a:style.fg.cterm : "NONE")+        \ "ctermbg=" (has_key(a:style, "bg")    ? a:style.bg.cterm : "NONE")+        \ "cterm="   (has_key(a:style, "cterm") ? a:style.cterm    : "NONE")+endfunction++"}}}+" Highlights - Vim >= 7 ------------------------------------{{{+if version >= 700+  call s:h("CursorLine",  { "bg": s:faint })+  call s:h("MatchParen",  { "fg": s:accent1, "bg": s:faint, "gui": "bold" })+  call s:h("Pmenu",       { "bg": s:faint })+  call s:h("PmenuThumb",  { "bg": s:norm })+  call s:h("PmenuSBar",   { "bg": s:subtle })+  call s:h("PmenuSel",    { "bg": s:faintBlue })+  call s:h("ColorColumn", { "bg": s:faintRed })+  call s:h("SpellBad",    { "sp": s:normRed, "gui": "undercurl" })+  call s:h("SpellCap",    { "sp": s:accent1, "gui": "undercurl" })+  call s:h("SpellRare",   { "sp": s:normGreen, "gui": "undercurl" })+  call s:h("SpellLocal",  { "sp": s:accent4, "gui": "undercurl" })+  hi! link CursorColumn	CursorLine++  " Use background for cterm Spell*, which does not support undercurl+  execute "hi! SpellBad   ctermbg=" s:faintRed.cterm+  execute "hi! SpellCap   ctermbg=" s:faintBlue.cterm+  execute "hi! SpellRare  ctermbg=" s:faintGreen.cterm+  execute "hi! SpellLocal ctermbg=" s:faint.cterm+endif++"}}}+" Highlights - UI ------------------------------------------{{{+call s:h("Normal",       { "fg": s:norm, "bg": s:bg })+call s:h("NonText",      { "fg": s:subtle })+call s:h("Cursor",       { "fg": s:bg, "bg": s:accent3 })+call s:h("Visual",       { "bg": s:faintBlue })+call s:h("IncSearch",    { "bg": s:faintBlue })+call s:h("Search",       { "bg": s:faintGreen })+call s:h("StatusLine",   { "fg": s:norm, "bg": s:faint, "gui": "bold", "cterm": "bold" })+call s:h("StatusLineNC", { "fg": s:dimmed, "bg": s:faint })+call s:h("SignColumn",   { "fg": s:norm })+call s:h("VertSplit",    { "fg": s:subtle, "bg": s:faint })+call s:h("TabLine",      { "fg": s:dimmed, "bg": s:faint })+call s:h("TabLineSel",   { "gui": "bold", "cterm": "bold" })+call s:h("Folded",       { "fg": s:comment, "bg": s:faint })+call s:h("Directory",    { "fg": s:accent1 })+call s:h("Title",        { "fg": s:accent4, "gui": "bold", "cterm": "bold" })+call s:h("ErrorMsg",     { "bg": s:faintRed })+call s:h("DiffAdd",      { "bg": s:faintGreen })+call s:h("DiffChange",   { "bg": s:faintRed })+call s:h("DiffDelete",   { "fg": s:normRed, "bg": s:faintRed })+call s:h("DiffText",     { "bg": s:faintRed, "gui": "bold", "cterm": "bold" })+call s:h("User1",        { "fg": s:bg, "bg": s:normGreen })+call s:h("User2",        { "fg": s:bg, "bg": s:normRed })+call s:h("User3",        { "fg": s:bg, "bg": s:normBlue })+hi! link WildMenu     IncSearch+hi! link FoldColumn   SignColumn+hi! link WarningMsg   ErrorMsg+hi! link MoreMsg      Title+hi! link Question     MoreMsg+hi! link ModeMsg      MoreMsg+hi! link TabLineFill  StatusLineNC+hi! link LineNr       NonText+hi! link SpecialKey   NonText++"}}}+" Highlights - Generic Syntax ------------------------------{{{+call s:h("Delimiter",  { "fg": s:dimmed })+call s:h("Comment",    { "fg": s:comment, "gui": "italic" })+call s:h("Underlined", { "fg": s:accent1, "gui": "underline", "cterm": "underline" })+call s:h("Type",       { "fg": s:accent3 })+call s:h("String",     { "fg": s:accent2 })+call s:h("Keyword",    { "fg": s:accent2, "gui": "bold", "cterm": "bold" })+call s:h("Todo",       { "fg": s:normRed, "gui": "bold", "cterm": "bold" })+call s:h("Function",   { "gui": "bold", "cterm": "bold" })+hi! link Identifier  Function+hi! link Statement   Type+hi! link Constant    Directory+hi! link Number      Constant+hi! link Special     Constant+hi! link PreProc     Constant+hi! link Error       ErrorMsg++"}}}+" Highlights - HTML ----------------------------------------{{{+hi! link htmlLink    Underlined+hi! link htmlTag     Type+hi! link htmlEndTag  htmlTag++"}}}+" Highlights - CSS -----------------------------------------{{{+hi! link cssBraces      Delimiter+hi! link cssSelectorOp  cssBraces+hi! link cssClassName   Normal++"}}}+" Highlights - Markdown ------------------------------------{{{+hi! link mkdListItem  mkdDelimiter++"}}}+" Highlights - Shell ---------------------------------------{{{+hi! link shOperator  Delimiter+hi! link shCaseBar   Delimiter++"}}}+" Highlights - JavaScript ----------------------------------{{{+hi! link javaScriptValue   Constant+hi! link javaScriptNull    Constant+hi! link javaScriptBraces  Normal++"}}}+" Highlights - Help ----------------------------------------{{{+hi! link helpExample         String+hi! link helpHeadline        Title+hi! link helpSectionDelim    Comment+hi! link helpHyperTextEntry  Statement+hi! link helpHyperTextJump   Underlined+hi! link helpURL             Underlined++"}}}++" vim: fdm=marker:sw=2:sts=2:et

.vim/colors/neverland-darker.vim

new file mode 100644@@ -0,0 +1,196 @@+" Vim color file - neverland-darker.vim+" Eyes are sober, this is the plan+" I'm sitting in a car heading Neverland+" Author: Magnus Woldrich <trapd00r@trapd00r.se>++set background=dark+hi clear++if version > 580+    " no guarantees for version 5.8 and below, but this makes it stop+    " complaining+    if exists("syntax_on")+        syntax reset+    endif+endif+let g:colors_name="neverland-darker"++hi Normal          guifg=#ffd7ff guibg=#080808+set background=dark++hi Boolean         guifg=#af5fff+hi Character       guifg=#afaf5f+hi Number          guifg=#0087ff+hi String          guifg=#d7af5f+hi Conditional     guifg=#ff0000               gui=bold+hi Constant        guifg=#87af00               gui=bold+hi Cursor          guifg=#afd787 guibg=#dadada+hi Debug           guifg=#ffd7ff               gui=bold+hi Define          guifg=#5fd7ff+hi Delimiter       guifg=#626262++hi DiffAdd                       guibg=#005f87+hi DiffChange      guifg=#d7afaf guibg=#4e4e4e+hi DiffDelete      guifg=#d70087 guibg=#5f005f+hi DiffText                      guibg=#878787 gui=bold++hi Directory       guifg=#87ff00               gui=bold+hi Error           guifg=#ffafff guibg=#87005f+hi ErrorMsg        guifg=#ff00af guibg=#000000 gui=bold+hi Exception       guifg=#87ff00               gui=bold+hi Float           guifg=#af5fff+hi FoldColumn      guifg=#5f87af guibg=#000000+hi Folded          guifg=#5f87af guibg=#000000+hi Function        guifg=#87ff00+hi Identifier      guifg=#afd75f+hi Ignore          guifg=#808080 guibg=#080808+hi IncSearch       guifg=#d7ffaf guibg=#000000++hi Keyword         guifg=#87afff               gui=bold+hi Label           guifg=#ffffaf               gui=none+hi Macro           guifg=#d7ffaf+hi SpecialKey      guifg=#5fd7ff++hi MatchParen      guifg=#ff0000 guibg=#1c1c1c gui=bold+hi ModeMsg         guifg=#ffaf5f+hi MoreMsg         guifg=#ffaf5f+hi Operator        guifg=#afd700++" complete menu+hi Pmenu           guifg=#5fd7ff guibg=#262626+hi PmenuSel                      guibg=#262626+hi PmenuSbar                     guibg=#262626+hi PmenuThumb      guifg=#5fd7ff++hi PreCondit       guifg=#87ff00               gui=bold+hi PreProc         guifg=#ffafd7+hi Question        guifg=#5fd7ff+hi Repeat          guifg=#d7005f               gui=bold+hi Search          guifg=#1c1c1c guibg=#ffd787++" marks column+hi SignColumn      guifg=#87ff00 guibg=#262626+hi SpecialChar     guifg=#d7005f               gui=bold+hi SpecialComment  guifg=#8a8a8a               gui=bold+hi Special         guifg=#5fd7ff guibg=#080808+hi SpecialKey      guifg=#8a8a8a++hi Statement       guifg=#d78700               gui=bold+hi StatusLine      guifg=#121212 guibg=#af8700+hi StatusLineNC    guifg=#080808 guibg=#878700+hi StorageClass    guifg=#ff8700+hi Structure       guifg=#5fd7ff+hi Tag             guifg=#d7005f+hi Title           guifg=#5faf5f+hi Todo            guifg=#d70000 guibg=#080808 gui=bold++hi Typedef         guifg=#5fd7ff+hi Type            guifg=#d75f00               gui=none+hi Underlined      guifg=#87af00               gui=none++hi VertSplit       guifg=#808080 guibg=#080808 gui=bold+hi VisualNOS                     guibg=#444444+hi Visual                        guibg=#262626+hi WarningMsg      guifg=#0000ff guibg=#444444 gui=bold+hi WildMenu        guifg=#5fd7ff guibg=#000000++hi Comment         guifg=#af875f+hi CursorLine                    guibg=#121212 gui=none+hi CursorColumn                  guibg=#080808+hi LineNr          guifg=#626262 guibg=#080808+hi NonText         guifg=#080808 guibg=#080808++hi TabLine         guifg=#878700 guibg=#080808+hi TabLineFill     guifg=#080808 guibg=#121212+hi TabLineSel      guifg=#ffd700 guibg=#1c1c1c++if &t_Co > 255+   hi Normal          ctermfg=225 ctermbg=232+   set background=dark++   hi Boolean         ctermfg=135+   hi Character       ctermfg=143+   hi Number          ctermfg=33+   hi String          ctermfg=179+   hi Conditional     ctermfg=196               cterm=bold+   hi Constant        ctermfg=106               cterm=bold+   hi Cursor          ctermfg=150 ctermbg=253+   hi Debug           ctermfg=225               cterm=bold+   hi Define          ctermfg=81+   hi Delimiter       ctermfg=241++   hi DiffAdd                     ctermbg=24+   hi DiffChange      ctermfg=181 ctermbg=239+   hi DiffDelete      ctermfg=162 ctermbg=53+   hi DiffText                    ctermbg=102   cterm=bold++   hi Directory       ctermfg=118               cterm=bold+   hi Error           ctermfg=219 ctermbg=89+   hi ErrorMsg        ctermfg=199 ctermbg=16    cterm=bold+   hi Exception       ctermfg=118               cterm=bold+   hi Float           ctermfg=135+   hi FoldColumn      ctermfg=67  ctermbg=16+   hi Folded          ctermfg=67  ctermbg=16+   hi Function        ctermfg=118+   hi Identifier      ctermfg=149+   hi Ignore          ctermfg=244 ctermbg=232+   hi IncSearch       ctermfg=193 ctermbg=16++   hi Keyword         ctermfg=111               cterm=bold+   hi Label           ctermfg=229               cterm=none+   hi Macro           ctermfg=193+   hi SpecialKey      ctermfg=81++   hi MatchParen      ctermfg=196 ctermbg=234   cterm=bold+   hi ModeMsg         ctermfg=215+   hi MoreMsg         ctermfg=215+   hi Operator        ctermfg=148++   " complete menu+   hi Pmenu           ctermfg=81  ctermbg=235+   hi PmenuSel                    ctermbg=235+   hi PmenuSbar                   ctermbg=235+   hi PmenuThumb      ctermfg=81++   hi PreCondit       ctermfg=118               cterm=bold+   hi PreProc         ctermfg=218+   hi Question        ctermfg=81+   hi Repeat          ctermfg=161               cterm=bold+   hi Search          ctermfg=234 ctermbg=222++   " marks column+   hi SignColumn      ctermfg=118 ctermbg=235+   hi SpecialChar     ctermfg=161               cterm=bold+   hi SpecialComment  ctermfg=245               cterm=bold+   hi Special         ctermfg=81  ctermbg=232+   hi SpecialKey      ctermfg=245++   hi Statement       ctermfg=172               cterm=bold+   hi StatusLine      ctermfg=233 ctermbg=136+   hi StatusLineNC    ctermfg=232 ctermbg=100+   hi StorageClass    ctermfg=208+   hi Structure       ctermfg=81+   hi Tag             ctermfg=161+   hi Title           ctermfg=71+   hi Todo            ctermfg=160 ctermbg=232   cterm=bold++   hi Typedef         ctermfg=81+   hi Type            ctermfg=166               cterm=none+   hi Underlined      ctermfg=106               cterm=none++   hi VertSplit       ctermfg=244 ctermbg=232   cterm=bold+   hi VisualNOS                   ctermbg=238+   hi Visual                      ctermbg=235+   hi WarningMsg      ctermfg=21  ctermbg=238   cterm=bold+   hi WildMenu        ctermfg=81  ctermbg=16++   hi Comment         ctermfg=137+   hi CursorLine                  ctermbg=233   cterm=none+   hi CursorColumn                ctermbg=232+   hi LineNr          ctermfg=241 ctermbg=232+   hi NonText         ctermfg=232 ctermbg=232++   hi TabLine         ctermfg=100 ctermbg=232+   hi TabLineFill     ctermfg=232 ctermbg=233+   hi TabLineSel      ctermfg=220 ctermbg=234+end

.vim/colors/neverland.vim

new file mode 100644@@ -0,0 +1,205 @@+" Vim color file - neverland.vim+" Eyes are sober, this is the plan+" I'm sitting in a car heading Neverland+" Author: Magnus Woldrich <trapd00r@trapd00r.se>+++" Set background first+set background=dark+hi clear++if version > 580+    " no guarantees for version 5.8 and below, but this makes it stop+    " complaining+    if exists("syntax_on")+        syntax reset+    endif+endif+let g:colors_name="neverland"++" Setting normal before any other highlight group is a good idea+hi Normal          guifg=#ffd7ff guibg=#121212++" background might have changed to 'light', so fix it+set background=dark++hi Boolean         guifg=#af5fff+hi Character       guifg=#afaf5f+hi Number          guifg=#0087ff+hi String          guifg=#d7af5f+hi Conditional     guifg=#ff0000               gui=bold+hi Constant        guifg=#87af00               gui=bold+hi Cursor          guifg=#afd787 guibg=#dadada+hi Debug           guifg=#ffd7ff               gui=bold+hi Define          guifg=#5fd7ff+hi Delimiter       guifg=#626262++hi DiffAdd                       guibg=#005f87+hi DiffChange      guifg=#d7afaf guibg=#4e4e4e+hi DiffDelete      guifg=#d70087 guibg=#5f005f+hi DiffText                      guibg=#878787 gui=bold++hi Directory       guifg=#87ff00               gui=bold+hi Error           guifg=#ffafff guibg=#87005f+hi ErrorMsg        guifg=#ff00af guibg=#000000 gui=bold+hi Exception       guifg=#87ff00               gui=bold+hi Float           guifg=#af5fff+hi FoldColumn      guifg=#5f87af guibg=#000000+hi Folded          guifg=#5f87af guibg=#000000+hi Function        guifg=#87ff00+hi Identifier      guifg=#afd75f+hi Ignore          guifg=#808080 guibg=#080808+hi IncSearch       guifg=#d7ffaf guibg=#000000++hi Keyword         guifg=#87afff               gui=bold+hi Label           guifg=#ffffaf               gui=none+hi Macro           guifg=#d7ffaf+hi SpecialKey      guifg=#5fd7ff++hi MatchParen      guifg=#ff0000 guibg=#1c1c1c gui=bold+hi ModeMsg         guifg=#ffaf5f+hi MoreMsg         guifg=#ffaf5f+hi Operator        guifg=#afd700++" complete menu+hi Pmenu           guifg=#5fd7ff guibg=#121212+hi PmenuSel                      guibg=#262626+hi PmenuSbar                     guibg=#080808+hi PmenuThumb      guifg=#5fd7ff++hi PreCondit       guifg=#87ff00               gui=bold+hi PreProc         guifg=#ffafd7+hi Question        guifg=#5fd7ff+hi Repeat          guifg=#d7005f               gui=bold+hi Search          guifg=#1c1c1c guibg=#ffd787++" marks column+hi SignColumn      guifg=#87ff00 guibg=#262626+hi SpecialChar     guifg=#d7005f               gui=bold+hi SpecialComment  guifg=#8a8a8a               gui=bold+hi Special         guifg=#5fd7ff guibg=#080808+hi SpecialKey      guifg=#8a8a8a++hi Statement       guifg=#d78700               gui=bold+hi StatusLine      guifg=#1c1c1c guibg=#af8700+hi StatusLineNC    guifg=#1c1c1c guibg=#878700+hi StorageClass    guifg=#ff8700+hi Structure       guifg=#5fd7ff+hi Tag             guifg=#d7005f+hi Title           guifg=#5faf5f+hi Todo            guifg=#d70000 guibg=#121212 gui=bold++hi Typedef         guifg=#5fd7ff+hi Type            guifg=#d75f00               gui=none+hi Underlined      guifg=#87af00               gui=none++hi VertSplit       guifg=#808080 guibg=#080808 gui=bold+hi VisualNOS                     guibg=#444444+hi Visual                        guibg=#262626+hi WarningMsg      guifg=#0000ff guibg=#444444 gui=bold+hi WildMenu        guifg=#5fd7ff guibg=#000000++hi Comment         guifg=#af875f+hi CursorLine                    guibg=#1c1c1c gui=none+hi CursorColumn                  guibg=#121212+hi LineNr          guifg=#626262 guibg=#121212+hi NonText         guifg=#121212 guibg=#121212++hi TabLine         guifg=#878700 guibg=#121212+hi TabLineFill     guifg=#121212 guibg=#121212+hi TabLineSel      guifg=#ffd700 guibg=#1c1c1c+++if &t_Co > 255+  " Setting normal before any other highlight group is a good idea+   hi Normal          ctermfg=225 ctermbg=233++   " background might have changed to 'light', so fix it+   set background=dark++   hi Boolean         ctermfg=135+   hi Character       ctermfg=143+   hi Number          ctermfg=33+   hi String          ctermfg=179+   hi Conditional     ctermfg=196               cterm=bold+   hi Constant        ctermfg=106               cterm=bold+   hi Cursor          ctermfg=150 ctermbg=253+   hi Debug           ctermfg=225               cterm=bold+   hi Define          ctermfg=81+   hi Delimiter       ctermfg=241++   hi DiffAdd                     ctermbg=24+   hi DiffChange      ctermfg=181 ctermbg=239+   hi DiffDelete      ctermfg=162 ctermbg=53+   hi DiffText                    ctermbg=102   cterm=bold++   hi Directory       ctermfg=118               cterm=bold+   hi Error           ctermfg=219 ctermbg=89+   hi ErrorMsg        ctermfg=199 ctermbg=16    cterm=bold+   hi Exception       ctermfg=118               cterm=bold+   hi Float           ctermfg=135+   hi FoldColumn      ctermfg=67  ctermbg=16+   hi Folded          ctermfg=67  ctermbg=16+   hi Function        ctermfg=118+   hi Identifier      ctermfg=149+   hi Ignore          ctermfg=244 ctermbg=232+   hi IncSearch       ctermfg=193 ctermbg=16++   hi Keyword         ctermfg=111               cterm=bold+   hi Label           ctermfg=229               cterm=none+   hi Macro           ctermfg=193+   hi SpecialKey      ctermfg=81++   hi MatchParen      ctermfg=196 ctermbg=234   cterm=bold+   hi ModeMsg         ctermfg=215+   hi MoreMsg         ctermfg=215+   hi Operator        ctermfg=148++   " complete menu+   hi Pmenu           ctermfg=81  ctermbg=233+   hi PmenuSel                    ctermbg=235+   hi PmenuSbar                   ctermbg=232+   hi PmenuThumb      ctermfg=81++   hi PreCondit       ctermfg=118               cterm=bold+   hi PreProc         ctermfg=218+   hi Question        ctermfg=81+   hi Repeat          ctermfg=161               cterm=bold+   hi Search          ctermfg=234 ctermbg=222++   " marks column+   hi SignColumn      ctermfg=118 ctermbg=235+   hi SpecialChar     ctermfg=161               cterm=bold+   hi SpecialComment  ctermfg=245               cterm=bold+   hi Special         ctermfg=81  ctermbg=232+   hi SpecialKey      ctermfg=245++   hi Statement       ctermfg=172               cterm=bold+   hi StatusLine      ctermfg=234 ctermbg=136+   hi StatusLineNC    ctermfg=234 ctermbg=100+   hi StorageClass    ctermfg=208+   hi Structure       ctermfg=81+   hi Tag             ctermfg=161+   hi Title           ctermfg=71+   hi Todo            ctermfg=160 ctermbg=233   cterm=bold++   hi Typedef         ctermfg=81+   hi Type            ctermfg=166               cterm=none+   hi Underlined      ctermfg=106               cterm=none++   hi VertSplit       ctermfg=244 ctermbg=232   cterm=bold+   hi VisualNOS                   ctermbg=238+   hi Visual                      ctermbg=235+   hi WarningMsg      ctermfg=21  ctermbg=238   cterm=bold+   hi WildMenu        ctermfg=81  ctermbg=16++   hi Comment         ctermfg=137+   hi CursorLine                  ctermbg=234   cterm=none+   hi CursorColumn                ctermbg=233+   hi LineNr          ctermfg=241 ctermbg=233+   hi NonText         ctermfg=233 ctermbg=233++   hi TabLine         ctermfg=100 ctermbg=233+   hi TabLineFill     ctermfg=233 ctermbg=233+   hi TabLineSel      ctermfg=220 ctermbg=234+end

.vim/colors/neverland2-darker.vim

new file mode 100644@@ -0,0 +1,200 @@+" Vim color file - neverland2-darker.vim+" Eyes are sober, this is the plan+" I'm sitting in a car heading Neverland+" Author: Magnus Woldrich <trapd00r@trapd00r.se>+++set background=dark+hi clear++if version > 580+    " no guarantees for version 5.8 and below, but this makes it stop+    " complaining+    if exists("syntax_on")+        syntax reset+    endif+endif+let g:colors_name="neverland2-dark"++hi Normal          guifg=#ffffff guibg=#080808+set background=dark++hi Boolean         guifg=#af5fff+hi Character       guifg=#afaf5f+hi Number          guifg=#0087ff+hi String          guifg=#d7af5f+hi Conditional     guifg=#ff0000               gui=bold+hi Constant        guifg=#af5fff               gui=bold+hi Cursor          guifg=#afd787 guibg=#dadada+hi Debug           guifg=#ffd7ff               gui=bold+hi Define          guifg=#5fd7ff+hi Delimiter       guifg=#626262++hi DiffAdd                       guibg=#080808+hi DiffChange      guifg=#d7afaf guibg=#1c1c1c+hi DiffDelete      guifg=#d70087 guibg=#080808+hi DiffText                      guibg=#080808 gui=bold++hi Directory       guifg=#87ff00               gui=bold+hi Error           guifg=#ffafff guibg=#080808+hi ErrorMsg        guifg=#ff00af guibg=#080808 gui=bold+hi Exception       guifg=#87ff00               gui=bold+hi Float           guifg=#af5fff+hi FoldColumn      guifg=#5f87af guibg=#000000+hi Folded          guifg=#5f87af guibg=#000000+hi Function        guifg=#ff005f " sub..+hi Identifier      guifg=#d75f00 " ..foo+hi Ignore          guifg=#808080 guibg=#080808+hi IncSearch       guifg=#d7ffaf guibg=#000000++hi Keyword         guifg=#5fafd7               gui=bold+hi Label           guifg=#ffffaf               gui=none+hi Macro           guifg=#d7ffaf+hi SpecialKey      guifg=#5fd7ff++hi MatchParen      guifg=#ff0000 guibg=#1c1c1c gui=bold+hi ModeMsg         guifg=#ffaf5f+hi MoreMsg         guifg=#ffaf5f+hi Operator        guifg=#00ff00++" complete menu+hi Pmenu           guifg=#5fd7ff guibg=#080808+hi PmenuSel                      guibg=#262626+hi PmenuSbar                     guibg=#080808+hi PmenuThumb      guifg=#5fd7ff++hi PreCondit       guifg=#87ff00               gui=bold+hi PreProc         guifg=#ffafd7+hi Question        guifg=#5fd7ff+hi Repeat          guifg=#d7005f               gui=bold+hi Search          guifg=#d70000 guibg=#080808++" marks column+hi SignColumn      guifg=#87ff00 guibg=#262626+hi SpecialChar     guifg=#d7005f               gui=bold+hi SpecialComment  guifg=#8a8a8a               gui=bold+hi Special         guifg=#5fd7ff guibg=#080808+hi SpecialKey      guifg=#8a8a8a++hi Statement       guifg=#ffff87               gui=bold " my...+hi StatusLine      guifg=#1c1c1c guibg=#af8700+hi StatusLineNC    guifg=#1c1c1c guibg=#878700+hi StorageClass    guifg=#ff8700+hi Structure       guifg=#5fd7ff+hi Tag             guifg=#d7005f+hi Title           guifg=#0000ff+hi Todo            guifg=#d70000 guibg=#080808 gui=bold++hi Typedef         guifg=#5fd7ff+hi Type            guifg=#5fd7ff               gui=none+hi Underlined      guifg=#808080               gui=underline++hi VertSplit       guifg=#808080 guibg=#080808 gui=bold+hi VisualNOS                     guibg=#444444+hi Visual                        guibg=#262626+hi WarningMsg      guifg=#0000ff guibg=#444444 gui=bold+hi WildMenu        guifg=#5fd7ff guibg=#000000++hi Comment         guifg=#87875f+hi CursorLine                    guibg=#1c1c1c gui=none+hi CursorColumn                  guibg=#1c1c1c+hi LineNr          guifg=#626262 guibg=#080808+hi NonText         guifg=#080808 guibg=#080808++hi TabLine         guifg=#878700 guibg=#080808+hi TabLineFill     guifg=#080808 guibg=#080808+hi TabLineSel      guifg=#ffd700 guibg=#1c1c1c++" Support for 256-color terminal+if &t_Co > 255+   hi Normal          ctermfg=256 ctermbg=232++   set background=dark+++   hi Boolean         ctermfg=135+   hi Character       ctermfg=143+   hi Number          ctermfg=33+   hi String          ctermfg=179+   hi Conditional     ctermfg=196               cterm=bold+   hi Constant        ctermfg=135               cterm=bold+   hi Cursor          ctermfg=150  ctermbg=253+   hi Debug           ctermfg=225               cterm=bold+   hi Define          ctermfg=81+   hi Delimiter       ctermfg=241++   hi DiffAdd                     ctermbg=232+   hi DiffChange      ctermfg=181 ctermbg=234+   hi DiffDelete      ctermfg=162 ctermbg=232+   hi DiffText                    ctermbg=232 cterm=bold++   hi Directory       ctermfg=118               cterm=bold+   hi Error           ctermfg=219 ctermbg=232+   hi ErrorMsg        ctermfg=199 ctermbg=232    cterm=bold+   hi Exception       ctermfg=118               cterm=bold+   hi Float           ctermfg=135+   hi FoldColumn      ctermfg=67  ctermbg=16+   hi Folded          ctermfg=67  ctermbg=16+   hi Function        ctermfg=197 " sub..+   hi Identifier      ctermfg=166 " ..foo+   hi Ignore          ctermfg=244 ctermbg=232+   hi IncSearch       ctermfg=193 ctermbg=16++   hi Keyword         ctermfg=74                cterm=bold+   hi Label           ctermfg=229               cterm=none+   hi Macro           ctermfg=193+   hi SpecialKey      ctermfg=81++   hi MatchParen      ctermfg=196  ctermbg=234 cterm=bold+   hi ModeMsg         ctermfg=215+   hi MoreMsg         ctermfg=215+   hi Operator        ctermfg=46++   " complete menu+   hi Pmenu           ctermfg=81  ctermbg=232+   hi PmenuSel                    ctermbg=235+   hi PmenuSbar                   ctermbg=232+   hi PmenuThumb      ctermfg=81++   hi PreCondit       ctermfg=118               cterm=bold+   hi PreProc         ctermfg=218+   hi Question        ctermfg=81+   hi Repeat          ctermfg=161               cterm=bold+   hi Search          ctermfg=160 ctermbg=232++   " marks column+   hi SignColumn      ctermfg=118 ctermbg=235+   hi SpecialChar     ctermfg=161               cterm=bold+   hi SpecialComment  ctermfg=245               cterm=bold+   hi Special         ctermfg=81  ctermbg=232+   hi SpecialKey      ctermfg=245++   hi Statement       ctermfg=228               cterm=bold " my...+   hi StatusLine      ctermfg=234 ctermbg=136+   hi StatusLineNC    ctermfg=234 ctermbg=100+   hi StorageClass    ctermfg=208+   hi Structure       ctermfg=81+   hi Tag             ctermfg=161+   hi Title           ctermfg=21+   hi Todo            ctermfg=160 ctermbg=232   cterm=bold++   hi Typedef         ctermfg=81+   hi Type            ctermfg=81                cterm=none+   hi Underlined      ctermfg=244               cterm=underline++   hi VertSplit       ctermfg=244 ctermbg=232   cterm=bold+   hi VisualNOS                   ctermbg=238+   hi Visual                      ctermbg=235+   hi WarningMsg      ctermfg=21 ctermbg=238   cterm=bold+   hi WildMenu        ctermfg=81  ctermbg=16++   hi Comment         ctermfg=101+   hi CursorLine                  ctermbg=234   cterm=none+   hi CursorColumn                ctermbg=234+   hi LineNr          ctermfg=241 ctermbg=232+   hi NonText         ctermfg=232 ctermbg=232++   hi TabLine         ctermfg=100 ctermbg=232+   hi TabLineFill     ctermfg=232 ctermbg=232+   hi TabLineSel      ctermfg=220 ctermbg=234+end

.vim/colors/neverland2.vim

new file mode 100644@@ -0,0 +1,197 @@+" Vim color file - neverland2.vim+" Eyes are sober, this is the plan+" I'm sitting in a car heading Neverland+" Author: Magnus Woldrich <trapd00r@trapd00r.se>++set background=dark+hi clear++if version > 580+    " no guarantees for version 5.8 and below, but this makes it stop+    " complaining+    if exists("syntax_on")+        syntax reset+    endif+endif+let g:colors_name="neverland2"++hi Normal          guifg=#ffffff guibg=#121212+set background=dark++hi Boolean         guifg=#af5fff+hi Character       guifg=#afaf5f+hi Number          guifg=#0087ff+hi String          guifg=#d7af5f+hi Conditional     guifg=#ff0000               gui=bold+hi Constant        guifg=#af5fff               gui=bold+hi Cursor          guifg=#afd787 guibg=#dadada+hi Debug           guifg=#ffd7ff               gui=bold+hi Define          guifg=#5fd7ff+hi Delimiter       guifg=#626262++hi DiffAdd                       guibg=#121212+hi DiffChange      guifg=#d7afaf guibg=#1c1c1c+hi DiffDelete      guifg=#d70087 guibg=#080808+hi DiffText                      guibg=#121212 gui=bold++hi Directory       guifg=#87ff00               gui=bold+hi Error           guifg=#ffafff guibg=#121212+hi ErrorMsg        guifg=#ff00af guibg=#121212 gui=bold+hi Exception       guifg=#87ff00               gui=bold+hi Float           guifg=#af5fff+hi FoldColumn      guifg=#5f87af guibg=#000000+hi Folded          guifg=#5f87af guibg=#000000+hi Function        guifg=#ff005f " sub..+hi Identifier      guifg=#d75f00 " ..foo+hi Ignore          guifg=#808080 guibg=#080808+hi IncSearch       guifg=#d7ffaf guibg=#000000++hi Keyword         guifg=#5fafd7               gui=bold+hi Label           guifg=#ffffaf               gui=none+hi Macro           guifg=#d7ffaf+hi SpecialKey      guifg=#5fd7ff++hi MatchParen      guifg=#ff0000 guibg=#1c1c1c gui=bold+hi ModeMsg         guifg=#ffaf5f+hi MoreMsg         guifg=#ffaf5f+hi Operator        guifg=#00ff00++" complete menu+hi Pmenu           guifg=#5fd7ff guibg=#121212+hi PmenuSel                      guibg=#262626+hi PmenuSbar                     guibg=#080808+hi PmenuThumb      guifg=#5fd7ff++hi PreCondit       guifg=#87ff00               gui=bold+hi PreProc         guifg=#ffafd7+hi Question        guifg=#5fd7ff+hi Repeat          guifg=#d7005f               gui=bold+hi Search          guifg=#d70000 guibg=#121212++" marks column+hi SignColumn      guifg=#87ff00 guibg=#262626+hi SpecialChar     guifg=#d7005f               gui=bold+hi SpecialComment  guifg=#8a8a8a               gui=bold+hi Special         guifg=#5fd7ff guibg=#080808+hi SpecialKey      guifg=#8a8a8a++hi Statement       guifg=#ffff87               gui=bold " my...+hi StatusLine      guifg=#1c1c1c guibg=#af8700+hi StatusLineNC    guifg=#1c1c1c guibg=#878700+hi StorageClass    guifg=#ff8700+hi Structure       guifg=#5fd7ff+hi Tag             guifg=#d7005f+hi Title           guifg=#0000ff+hi Todo            guifg=#d70000 guibg=#121212 gui=bold++hi Typedef         guifg=#5fd7ff+hi Type            guifg=#5fd7ff               gui=none+hi Underlined      guifg=#808080               gui=underline++hi VertSplit       guifg=#808080 guibg=#080808 gui=bold+hi VisualNOS                     guibg=#444444+hi Visual                        guibg=#262626+hi WarningMsg      guifg=#0000ff guibg=#444444 gui=bold+hi WildMenu        guifg=#5fd7ff guibg=#000000++hi Comment         guifg=#87875f+hi CursorLine                    guibg=#1c1c1c gui=none+hi CursorColumn                  guibg=#1c1c1c+hi LineNr          guifg=#626262 guibg=#121212+hi NonText         guifg=#121212 guibg=#121212++hi TabLine         guifg=#878700 guibg=#121212+hi TabLineFill     guifg=#121212 guibg=#121212+hi TabLineSel      guifg=#ffd700 guibg=#1c1c1c++" Support for 256-color terminal+if &t_Co > 255+   hi Normal          ctermfg=256 ctermbg=233+   set background=dark++   hi Boolean         ctermfg=135+   hi Character       ctermfg=143+   hi Number          ctermfg=33+   hi String          ctermfg=179+   hi Conditional     ctermfg=196               cterm=bold+   hi Constant        ctermfg=135               cterm=bold+   hi Cursor          ctermfg=150  ctermbg=253+   hi Debug           ctermfg=225               cterm=bold+   hi Define          ctermfg=81+   hi Delimiter       ctermfg=241++   hi DiffAdd                     ctermbg=233+   hi DiffChange      ctermfg=181 ctermbg=234+   hi DiffDelete      ctermfg=162 ctermbg=232+   hi DiffText                    ctermbg=233 cterm=bold++   hi Directory       ctermfg=118               cterm=bold+   hi Error           ctermfg=219 ctermbg=233+   hi ErrorMsg        ctermfg=199 ctermbg=233    cterm=bold+   hi Exception       ctermfg=118               cterm=bold+   hi Float           ctermfg=135+   hi FoldColumn      ctermfg=67  ctermbg=16+   hi Folded          ctermfg=67  ctermbg=16+   hi Function        ctermfg=197 " sub..+   hi Identifier      ctermfg=166 " ..foo+   hi Ignore          ctermfg=244 ctermbg=232+   hi IncSearch       ctermfg=193 ctermbg=16++   hi Keyword         ctermfg=74                cterm=bold+   hi Label           ctermfg=229               cterm=none+   hi Macro           ctermfg=193+   hi SpecialKey      ctermfg=81++   hi MatchParen      ctermfg=196  ctermbg=234 cterm=bold+   hi ModeMsg         ctermfg=215+   hi MoreMsg         ctermfg=215+   hi Operator        ctermfg=46++   " complete menu+   hi Pmenu           ctermfg=81  ctermbg=233+   hi PmenuSel                    ctermbg=235+   hi PmenuSbar                   ctermbg=232+   hi PmenuThumb      ctermfg=81++   hi PreCondit       ctermfg=118               cterm=bold+   hi PreProc         ctermfg=218+   hi Question        ctermfg=81+   hi Repeat          ctermfg=161               cterm=bold+   hi Search          ctermfg=160 ctermbg=233++   " marks column+   hi SignColumn      ctermfg=118 ctermbg=235+   hi SpecialChar     ctermfg=161               cterm=bold+   hi SpecialComment  ctermfg=245               cterm=bold+   hi Special         ctermfg=81  ctermbg=232+   hi SpecialKey      ctermfg=245++   hi Statement       ctermfg=228               cterm=bold " my...+   hi StatusLine      ctermfg=234 ctermbg=136+   hi StatusLineNC    ctermfg=234 ctermbg=100+   hi StorageClass    ctermfg=208+   hi Structure       ctermfg=81+   hi Tag             ctermfg=161+   hi Title           ctermfg=21+   hi Todo            ctermfg=160 ctermbg=233   cterm=bold++   hi Typedef         ctermfg=81+   hi Type            ctermfg=81                cterm=none+   hi Underlined      ctermfg=244               cterm=underline++   hi VertSplit       ctermfg=244 ctermbg=232   cterm=bold+   hi VisualNOS                   ctermbg=238+   hi Visual                      ctermbg=235+   hi WarningMsg      ctermfg=21 ctermbg=238   cterm=bold+   hi WildMenu        ctermfg=81  ctermbg=16++   hi Comment         ctermfg=101+   hi CursorLine                  ctermbg=234   cterm=none+   hi CursorColumn                ctermbg=234+   hi LineNr          ctermfg=241 ctermbg=233+   hi NonText         ctermfg=233 ctermbg=233++   hi TabLine         ctermfg=100 ctermbg=233+   hi TabLineFill     ctermfg=233 ctermbg=233+   hi TabLineSel      ctermfg=220 ctermbg=234+end

.vim/colors/solarized.vim

new file mode 100644@@ -0,0 +1,1117 @@+" Name:     Solarized vim colorscheme+" Author:   Ethan Schoonover <es@ethanschoonover.com>+" URL:      http://ethanschoonover.com/solarized+"           (see this url for latest release & screenshots)+" License:  OSI approved MIT license (see end of this file)+" Created:  In the middle of the night+" Modified: 2011 May 05+"+" Usage "{{{+"+" ---------------------------------------------------------------------+" ABOUT:+" ---------------------------------------------------------------------+" Solarized is a carefully designed selective contrast colorscheme with dual+" light and dark modes that runs in both GUI, 256 and 16 color modes.+"+" See the homepage above for screenshots and details.+"+" ---------------------------------------------------------------------+" OPTIONS:+" ---------------------------------------------------------------------+" See the "solarized.txt" help file included with this colorscheme (in the +" "doc" subdirectory) for information on options, usage, the Toggle Background +" function and more. If you have already installed Solarized, this is available +" from the Solarized menu and command line as ":help solarized"+"+" ---------------------------------------------------------------------+" INSTALLATION:+" ---------------------------------------------------------------------+" Two options for installation: manual or pathogen+"+" MANUAL INSTALLATION OPTION:+" ---------------------------------------------------------------------+"+" 1.  Download the solarized distribution (available on the homepage above)+"     and unarchive the file.+" 2.  Move `solarized.vim` to your `.vim/colors` directory.+" 3.  Move each of the files in each subdirectories to the corresponding .vim+"     subdirectory (e.g. autoload/togglebg.vim goes into your .vim/autoload +"     directory as .vim/autoload/togglebg.vim).+"+" RECOMMENDED PATHOGEN INSTALLATION OPTION:+" ---------------------------------------------------------------------+"+" 1.  Download and install Tim Pope's Pathogen from:+"     https://github.com/tpope/vim-pathogen+"+" 2.  Next, move or clone the `vim-colors-solarized` directory so that it is+"     a subdirectory of the `.vim/bundle` directory.+"+"     a. **clone with git:**+"+"       $ cd ~/.vim/bundle+"       $ git clone git://github.com/altercation/vim-colors-solarized.git+"+"     b. **or move manually into the pathogen bundle directory:**+"         In the parent directory of vim-colors-solarized:+"+"         $ mv vim-colors-solarized ~/.vim/bundle/+"+" MODIFY VIMRC:+"+" After either Option 1 or Option 2 above, put the following two lines in your+" .vimrc:+"+"     syntax enable+"     set background=dark+"     colorscheme solarized+"+" or, for the light background mode of Solarized:+"+"     syntax enable+"     set background=light+"     colorscheme solarized+"+" I like to have a different background in GUI and terminal modes, so I can use+" the following if-then. However, I find vim's background autodetection to be+" pretty good and, at least with MacVim, I can leave this background value+" assignment out entirely and get the same results.+"+"     if has('gui_running')+"       set background=light+"     else+"       set background=dark+"     endif+"+" See the Solarized homepage at http://ethanschoonover.com/solarized for+" screenshots which will help you select either the light or dark background.+"+" ---------------------------------------------------------------------+" COLOR VALUES+" ---------------------------------------------------------------------+" Download palettes and files from: http://ethanschoonover.com/solarized+"+" L\*a\*b values are canonical (White D65, Reference D50), other values are+" matched in sRGB space.+"+" SOLARIZED HEX     16/8 TERMCOL  XTERM/HEX   L*A*B      sRGB        HSB+" --------- ------- ---- -------  ----------- ---------- ----------- -----------+" base03    #002b36  8/4 brblack  234 #1c1c1c 15 -12 -12   0  43  54 193 100  21+" base02    #073642  0/4 black    235 #262626 20 -12 -12   7  54  66 192  90  26+" base01    #586e75 10/7 brgreen  240 #4e4e4e 45 -07 -07  88 110 117 194  25  46+" base00    #657b83 11/7 bryellow 241 #585858 50 -07 -07 101 123 131 195  23  51+" base0     #839496 12/6 brblue   244 #808080 60 -06 -03 131 148 150 186  13  59+" base1     #93a1a1 14/4 brcyan   245 #8a8a8a 65 -05 -02 147 161 161 180   9  63+" base2     #eee8d5  7/7 white    254 #d7d7af 92 -00  10 238 232 213  44  11  93+" base3     #fdf6e3 15/7 brwhite  230 #ffffd7 97  00  10 253 246 227  44  10  99+" yellow    #b58900  3/3 yellow   136 #af8700 60  10  65 181 137   0  45 100  71+" orange    #cb4b16  9/3 brred    166 #d75f00 50  50  55 203  75  22  18  89  80+" red       #dc322f  1/1 red      160 #d70000 50  65  45 220  50  47   1  79  86+" magenta   #d33682  5/5 magenta  125 #af005f 50  65 -05 211  54 130 331  74  83+" violet    #6c71c4 13/5 brmagenta 61 #5f5faf 50  15 -45 108 113 196 237  45  77+" blue      #268bd2  4/4 blue      33 #0087ff 55 -10 -45  38 139 210 205  82  82+" cyan      #2aa198  6/6 cyan      37 #00afaf 60 -35 -05  42 161 152 175  74  63+" green     #859900  2/2 green     64 #5f8700 60 -20  65 133 153   0  68 100  60+"+" ---------------------------------------------------------------------+" COLORSCHEME HACKING+" ---------------------------------------------------------------------+"+" Useful commands for testing colorschemes:+" :source $VIMRUNTIME/syntax/hitest.vim+" :help highlight-groups+" :help cterm-colors+" :help group-name+"+" Useful links for developing colorschemes:+" http://www.vim.org/scripts/script.php?script_id=2937+" http://vimcasts.org/episodes/creating-colorschemes-for-vim/+" http://www.frexx.de/xterm-256-notes/"+"+" }}}+" Environment Specific Overrides "{{{+" Allow or disallow certain features based on current terminal emulator or +" environment.++" Terminals that support italics+let s:terms_italic=[+            \"rxvt",+            \"gnome-terminal"+            \]+" For reference only, terminals are known to be incomptible.+" Terminals that are in neither list need to be tested.+let s:terms_noitalic=[+            \"iTerm.app",+            \"Apple_Terminal"+            \]+if has("gui_running")+    let s:terminal_italic=1 " TODO: could refactor to not require this at all+else+    let s:terminal_italic=0 " terminals will be guilty until proven compatible+    for term in s:terms_italic+        if $TERM_PROGRAM =~ term+            let s:terminal_italic=1+        endif+    endfor+endif++" }}}+" Default option values"{{{+" ---------------------------------------------------------------------+" s:options_list is used to autogenerate a list of all non-default options +" using "call SolarizedOptions()" or with the "Generate .vimrc commands" +" Solarized menu option. See the "Menus" section below for the function itself.+let s:options_list=[+            \'" this block of commands has been autogenerated by solarized.vim and',+            \'" includes the current, non-default Solarized option values.',+            \'" To use, place these commands in your .vimrc file (replacing any',+            \'" existing colorscheme commands). See also ":help solarized"',+            \'',+            \'" ------------------------------------------------------------------',+            \'" Solarized Colorscheme Config',+            \'" ------------------------------------------------------------------',+            \]+let s:colorscheme_list=[+            \'syntax enable',+            \'set background='.&background,+            \'colorscheme solarized',+            \]+let s:defaults_list=[+            \'" ------------------------------------------------------------------',+            \'',+            \'" The following items are available options, but do not need to be',+            \'" included in your .vimrc as they are currently set to their defaults.',+            \''+            \]+let s:lazycat_list=[+            \'" lazy method of appending this onto your .vimrc ":w! >> ~/.vimrc"',+            \'" ------------------------------------------------------------------',+            \]++function! s:SetOption(name,default)+    if type(a:default) == type(0)+        let l:wrap=''+        let l:ewrap=''+    else+        let l:wrap='"'+        let l:ewrap='\"'+    endif+    if !exists("g:solarized_".a:name) || g:solarized_{a:name}==a:default+        exe 'let g:solarized_'.a:name.'='.l:wrap.a:default.l:wrap.'"'+        exe 'call add(s:defaults_list, "\" let g:solarized_'.a:name.'='.l:ewrap.g:solarized_{a:name}.l:ewrap.'")'+    else+        exe 'call add(s:options_list,  "let g:solarized_'.a:name.'='.l:ewrap.g:solarized_{a:name}.l:ewrap.'    \"default value is '.a:default.'")'+    endif+endfunction++if ($TERM_PROGRAM ==? "apple_terminal" && &t_Co < 256)+    let s:solarized_termtrans_default = 1+else+    let s:solarized_termtrans_default = 0+endif+call s:SetOption("termtrans",s:solarized_termtrans_default)+call s:SetOption("degrade",0)+call s:SetOption("bold",1)+call s:SetOption("underline",1)+call s:SetOption("italic",1) " note that we need to override this later if the terminal doesn't support+call s:SetOption("termcolors",16)+call s:SetOption("contrast","normal")+call s:SetOption("visibility","normal")+call s:SetOption("diffmode","normal")+call s:SetOption("hitrail",0)+call s:SetOption("menu",1)++"}}}+" Colorscheme initialization "{{{+" ---------------------------------------------------------------------+hi clear+if exists("syntax_on")+  syntax reset+endif+let colors_name = "solarized"++"}}}+" GUI & CSApprox hexadecimal palettes"{{{+" ---------------------------------------------------------------------+"+" Set both gui and terminal color values in separate conditional statements+" Due to possibility that CSApprox is running (though I suppose we could just+" leave the hex values out entirely in that case and include only cterm colors)+" We also check to see if user has set solarized (force use of the+" neutral gray monotone palette component)+if (has("gui_running") && g:solarized_degrade == 0)+    let s:vmode       = "gui"+    let s:base03      = "#002b36"+    let s:base02      = "#073642"+    let s:base01      = "#586e75"+    let s:base00      = "#657b83"+    let s:base0       = "#839496"+    let s:base1       = "#93a1a1"+    let s:base2       = "#eee8d5"+    let s:base3       = "#fdf6e3"+    let s:yellow      = "#b58900"+    let s:orange      = "#cb4b16"+    let s:red         = "#dc322f"+    let s:magenta     = "#d33682"+    let s:violet      = "#6c71c4"+    let s:blue        = "#268bd2"+    let s:cyan        = "#2aa198"+    "let s:green       = "#859900" "original+    let s:green       = "#719e07" "experimental+elseif (has("gui_running") && g:solarized_degrade == 1)+    " These colors are identical to the 256 color mode. They may be viewed+    " while in gui mode via "let g:solarized_degrade=1", though this is not+    " recommened and is for testing only.+    let s:vmode       = "gui"+    let s:base03      = "#1c1c1c"+    let s:base02      = "#262626"+    let s:base01      = "#4e4e4e"+    let s:base00      = "#585858"+    let s:base0       = "#808080"+    let s:base1       = "#8a8a8a"+    let s:base2       = "#d7d7af"+    let s:base3       = "#ffffd7"+    let s:yellow      = "#af8700"+    let s:orange      = "#d75f00"+    let s:red         = "#af0000"+    let s:magenta     = "#af005f"+    let s:violet      = "#5f5faf"+    let s:blue        = "#0087ff"+    let s:cyan        = "#00afaf"+    let s:green       = "#5f8700"+elseif g:solarized_termcolors != 256 && &t_Co >= 16+    let s:vmode       = "cterm"+    let s:base03      = "8"+    let s:base02      = "0"+    let s:base01      = "10"+    let s:base00      = "11"+    let s:base0       = "12"+    let s:base1       = "14"+    let s:base2       = "7"+    let s:base3       = "15"+    let s:yellow      = "3"+    let s:orange      = "9"+    let s:red         = "1"+    let s:magenta     = "5"+    let s:violet      = "13"+    let s:blue        = "4"+    let s:cyan        = "6"+    let s:green       = "2"+elseif g:solarized_termcolors == 256+    let s:vmode       = "cterm"+    let s:base03      = "234"+    let s:base02      = "235"+    let s:base01      = "239"+    let s:base00      = "240"+    let s:base0       = "244"+    let s:base1       = "245"+    let s:base2       = "187"+    let s:base3       = "230"+    let s:yellow      = "136"+    let s:orange      = "166"+    let s:red         = "124"+    let s:magenta     = "125"+    let s:violet      = "61"+    let s:blue        = "33"+    let s:cyan        = "37"+    let s:green       = "64"+else+    let s:vmode       = "cterm"+    let s:bright      = "* term=bold cterm=bold"+"   let s:base03      = "0".s:bright+"   let s:base02      = "0"+"   let s:base01      = "2".s:bright+"   let s:base00      = "3".s:bright+"   let s:base0       = "4".s:bright+"   let s:base1       = "6".s:bright+"   let s:base2       = "7"+"   let s:base3       = "7".s:bright+"   let s:yellow      = "3"+"   let s:orange      = "1".s:bright+"   let s:red         = "1"+"   let s:magenta     = "5"+"   let s:violet      = "5".s:bright+"   let s:blue        = "4"+"   let s:cyan        = "6"+"   let s:green       = "2"+    let s:base03      = "DarkGray"      " 0*+    let s:base02      = "Black"         " 0+    let s:base01      = "LightGreen"    " 2*+    let s:base00      = "LightYellow"   " 3*+    let s:base0       = "LightBlue"     " 4*+    let s:base1       = "LightCyan"     " 6*+    let s:base2       = "LightGray"     " 7+    let s:base3       = "White"         " 7*+    let s:yellow      = "DarkYellow"    " 3+    let s:orange      = "LightRed"      " 1*+    let s:red         = "DarkRed"       " 1+    let s:magenta     = "DarkMagenta"   " 5+    let s:violet      = "LightMagenta"  " 5*+    let s:blue        = "DarkBlue"      " 4+    let s:cyan        = "DarkCyan"      " 6+    let s:green       = "DarkGreen"     " 2++endif+"}}}+" Formatting options and null values for passthrough effect "{{{+" ---------------------------------------------------------------------+    let s:none            = "NONE"+    let s:none            = "NONE"+    let s:t_none          = "NONE"+    let s:n               = "NONE"+    let s:c               = ",undercurl"+    let s:r               = ",reverse"+    let s:s               = ",standout"+    let s:ou              = ""+    let s:ob              = ""+"}}}+" Background value based on termtrans setting "{{{+" ---------------------------------------------------------------------+if (has("gui_running") || g:solarized_termtrans == 0)+    let s:back        = s:base03+else+    let s:back        = "NONE"+endif+"}}}+" Alternate light scheme "{{{+" ---------------------------------------------------------------------+if &background == "light"+    let s:temp03      = s:base03+    let s:temp02      = s:base02+    let s:temp01      = s:base01+    let s:temp00      = s:base00+    let s:base03      = s:base3+    let s:base02      = s:base2+    let s:base01      = s:base1+    let s:base00      = s:base0+    let s:base0       = s:temp00+    let s:base1       = s:temp01+    let s:base2       = s:temp02+    let s:base3       = s:temp03+    if (s:back != "NONE")+        let s:back    = s:base03+    endif+endif+"}}}+" Optional contrast schemes "{{{+" ---------------------------------------------------------------------+if g:solarized_contrast == "high"+    let s:base01      = s:base00+    let s:base00      = s:base0+    let s:base0       = s:base1+    let s:base1       = s:base2+    let s:base2       = s:base3+    let s:back        = s:back+endif+if g:solarized_contrast == "low"+    let s:back        = s:base02+    let s:ou          = ",underline"+endif+"}}}+" Overrides dependent on user specified values and environment "{{{+" ---------------------------------------------------------------------+if (g:solarized_bold == 0 || &t_Co == 8 )+    let s:b           = ""+    let s:bb          = ",bold"+else+    let s:b           = ",bold"+    let s:bb          = ""+endif++if g:solarized_underline == 0+    let s:u           = ""+else+    let s:u           = ",underline"+endif++if g:solarized_italic == 0 || s:terminal_italic == 0+    let s:i           = ""+else+    let s:i           = ",italic"+endif+"}}}+" Highlighting primitives"{{{+" ---------------------------------------------------------------------++exe "let s:bg_none      = ' ".s:vmode."bg=".s:none   ."'"+exe "let s:bg_back      = ' ".s:vmode."bg=".s:back   ."'"+exe "let s:bg_base03    = ' ".s:vmode."bg=".s:base03 ."'"+exe "let s:bg_base02    = ' ".s:vmode."bg=".s:base02 ."'"+exe "let s:bg_base01    = ' ".s:vmode."bg=".s:base01 ."'"+exe "let s:bg_base00    = ' ".s:vmode."bg=".s:base00 ."'"+exe "let s:bg_base0     = ' ".s:vmode."bg=".s:base0  ."'"+exe "let s:bg_base1     = ' ".s:vmode."bg=".s:base1  ."'"+exe "let s:bg_base2     = ' ".s:vmode."bg=".s:base2  ."'"+exe "let s:bg_base3     = ' ".s:vmode."bg=".s:base3  ."'"+exe "let s:bg_green     = ' ".s:vmode."bg=".s:green  ."'"+exe "let s:bg_yellow    = ' ".s:vmode."bg=".s:yellow ."'"+exe "let s:bg_orange    = ' ".s:vmode."bg=".s:orange ."'"+exe "let s:bg_red       = ' ".s:vmode."bg=".s:red    ."'"+exe "let s:bg_magenta   = ' ".s:vmode."bg=".s:magenta."'"+exe "let s:bg_violet    = ' ".s:vmode."bg=".s:violet ."'"+exe "let s:bg_blue      = ' ".s:vmode."bg=".s:blue   ."'"+exe "let s:bg_cyan      = ' ".s:vmode."bg=".s:cyan   ."'"++exe "let s:fg_none      = ' ".s:vmode."fg=".s:none   ."'"+exe "let s:fg_back      = ' ".s:vmode."fg=".s:back   ."'"+exe "let s:fg_base03    = ' ".s:vmode."fg=".s:base03 ."'"+exe "let s:fg_base02    = ' ".s:vmode."fg=".s:base02 ."'"+exe "let s:fg_base01    = ' ".s:vmode."fg=".s:base01 ."'"+exe "let s:fg_base00    = ' ".s:vmode."fg=".s:base00 ."'"+exe "let s:fg_base0     = ' ".s:vmode."fg=".s:base0  ."'"+exe "let s:fg_base1     = ' ".s:vmode."fg=".s:base1  ."'"+exe "let s:fg_base2     = ' ".s:vmode."fg=".s:base2  ."'"+exe "let s:fg_base3     = ' ".s:vmode."fg=".s:base3  ."'"+exe "let s:fg_green     = ' ".s:vmode."fg=".s:green  ."'"+exe "let s:fg_yellow    = ' ".s:vmode."fg=".s:yellow ."'"+exe "let s:fg_orange    = ' ".s:vmode."fg=".s:orange ."'"+exe "let s:fg_red       = ' ".s:vmode."fg=".s:red    ."'"+exe "let s:fg_magenta   = ' ".s:vmode."fg=".s:magenta."'"+exe "let s:fg_violet    = ' ".s:vmode."fg=".s:violet ."'"+exe "let s:fg_blue      = ' ".s:vmode."fg=".s:blue   ."'"+exe "let s:fg_cyan      = ' ".s:vmode."fg=".s:cyan   ."'"++exe "let s:fmt_none     = ' ".s:vmode."=NONE".          " term=NONE".    "'"+exe "let s:fmt_bold     = ' ".s:vmode."=NONE".s:b.      " term=NONE".s:b."'"+exe "let s:fmt_bldi     = ' ".s:vmode."=NONE".s:b.      " term=NONE".s:b."'"+exe "let s:fmt_undr     = ' ".s:vmode."=NONE".s:u.      " term=NONE".s:u."'"+exe "let s:fmt_undb     = ' ".s:vmode."=NONE".s:u.s:b.  " term=NONE".s:u.s:b."'"+exe "let s:fmt_undi     = ' ".s:vmode."=NONE".s:u.      " term=NONE".s:u."'"+exe "let s:fmt_uopt     = ' ".s:vmode."=NONE".s:ou.     " term=NONE".s:ou."'"+exe "let s:fmt_curl     = ' ".s:vmode."=NONE".s:c.      " term=NONE".s:c."'"+exe "let s:fmt_ital     = ' ".s:vmode."=NONE".s:i.      " term=NONE".s:i."'"+exe "let s:fmt_stnd     = ' ".s:vmode."=NONE".s:s.      " term=NONE".s:s."'"+exe "let s:fmt_revr     = ' ".s:vmode."=NONE".s:r.      " term=NONE".s:r."'"+exe "let s:fmt_revb     = ' ".s:vmode."=NONE".s:r.s:b.  " term=NONE".s:r.s:b."'"+" revbb (reverse bold for bright colors) is only set to actual bold in low +" color terminals (t_co=8, such as OS X Terminal.app) and should only be used +" with colors 8-15.+exe "let s:fmt_revbb    = ' ".s:vmode."=NONE".s:r.s:bb.   " term=NONE".s:r.s:bb."'"+exe "let s:fmt_revbbu   = ' ".s:vmode."=NONE".s:r.s:bb.s:u." term=NONE".s:r.s:bb.s:u."'"++if has("gui_running")+    exe "let s:sp_none      = ' guisp=".s:none   ."'"+    exe "let s:sp_back      = ' guisp=".s:back   ."'"+    exe "let s:sp_base03    = ' guisp=".s:base03 ."'"+    exe "let s:sp_base02    = ' guisp=".s:base02 ."'"+    exe "let s:sp_base01    = ' guisp=".s:base01 ."'"+    exe "let s:sp_base00    = ' guisp=".s:base00 ."'"+    exe "let s:sp_base0     = ' guisp=".s:base0  ."'"+    exe "let s:sp_base1     = ' guisp=".s:base1  ."'"+    exe "let s:sp_base2     = ' guisp=".s:base2  ."'"+    exe "let s:sp_base3     = ' guisp=".s:base3  ."'"+    exe "let s:sp_green     = ' guisp=".s:green  ."'"+    exe "let s:sp_yellow    = ' guisp=".s:yellow ."'"+    exe "let s:sp_orange    = ' guisp=".s:orange ."'"+    exe "let s:sp_red       = ' guisp=".s:red    ."'"+    exe "let s:sp_magenta   = ' guisp=".s:magenta."'"+    exe "let s:sp_violet    = ' guisp=".s:violet ."'"+    exe "let s:sp_blue      = ' guisp=".s:blue   ."'"+    exe "let s:sp_cyan      = ' guisp=".s:cyan   ."'"+else+    let s:sp_none      = ""+    let s:sp_back      = ""+    let s:sp_base03    = ""+    let s:sp_base02    = ""+    let s:sp_base01    = ""+    let s:sp_base00    = ""+    let s:sp_base0     = ""+    let s:sp_base1     = ""+    let s:sp_base2     = ""+    let s:sp_base3     = ""+    let s:sp_green     = ""+    let s:sp_yellow    = ""+    let s:sp_orange    = ""+    let s:sp_red       = ""+    let s:sp_magenta   = ""+    let s:sp_violet    = ""+    let s:sp_blue      = ""+    let s:sp_cyan      = ""+endif++"}}}+" Basic highlighting"{{{+" ---------------------------------------------------------------------+" note that link syntax to avoid duplicate configuration doesn't work with the+" exe compiled formats++exe "hi! Normal"         .s:fmt_none   .s:fg_base0  .s:bg_back++exe "hi! Comment"        .s:fmt_ital   .s:fg_base01 .s:bg_none+"       *Comment         any comment++exe "hi! Constant"       .s:fmt_none   .s:fg_cyan   .s:bg_none+"       *Constant        any constant+"        String          a string constant: "this is a string"+"        Character       a character constant: 'c', '\n'+"        Number          a number constant: 234, 0xff+"        Boolean         a boolean constant: TRUE, false+"        Float           a floating point constant: 2.3e10++exe "hi! Identifier"     .s:fmt_none   .s:fg_blue   .s:bg_none+"       *Identifier      any variable name+"        Function        function name (also: methods for classes)+"+exe "hi! Statement"      .s:fmt_none   .s:fg_green  .s:bg_none+"       *Statement       any statement+"        Conditional     if, then, else, endif, switch, etc.+"        Repeat          for, do, while, etc.+"        Label           case, default, etc.+"        Operator        "sizeof", "+", "*", etc.+"        Keyword         any other keyword+"        Exception       try, catch, throw++exe "hi! PreProc"        .s:fmt_none   .s:fg_orange .s:bg_none+"       *PreProc         generic Preprocessor+"        Include         preprocessor #include+"        Define          preprocessor #define+"        Macro           same as Define+"        PreCondit       preprocessor #if, #else, #endif, etc.++exe "hi! Type"           .s:fmt_none   .s:fg_yellow .s:bg_none+"       *Type            int, long, char, etc.+"        StorageClass    static, register, volatile, etc.+"        Structure       struct, union, enum, etc.+"        Typedef         A typedef++exe "hi! Special"        .s:fmt_none   .s:fg_red    .s:bg_none+"       *Special         any special symbol+"        SpecialChar     special character in a constant+"        Tag             you can use CTRL-] on this+"        Delimiter       character that needs attention+"        SpecialComment  special things inside a comment+"        Debug           debugging statements++exe "hi! Underlined"     .s:fmt_none   .s:fg_violet .s:bg_none+"       *Underlined      text that stands out, HTML links++exe "hi! Ignore"         .s:fmt_none   .s:fg_none   .s:bg_none+"       *Ignore          left blank, hidden  |hl-Ignore|++exe "hi! Error"          .s:fmt_bold   .s:fg_red    .s:bg_none+"       *Error           any erroneous construct++exe "hi! Todo"           .s:fmt_bold   .s:fg_magenta.s:bg_none+"       *Todo            anything that needs extra attention; mostly the+"                        keywords TODO FIXME and XXX+"+"}}}+" Extended highlighting "{{{+" ---------------------------------------------------------------------+if      (g:solarized_visibility=="high")+    exe "hi! SpecialKey" .s:fmt_revr   .s:fg_red    .s:bg_none+    exe "hi! NonText"    .s:fmt_bold   .s:fg_red    .s:bg_none+elseif  (g:solarized_visibility=="low")+    exe "hi! SpecialKey" .s:fmt_bold   .s:fg_base02 .s:bg_none+    exe "hi! NonText"    .s:fmt_bold   .s:fg_base02 .s:bg_none+else+    exe "hi! SpecialKey" .s:fmt_bold   .s:fg_base00 .s:bg_base02+    exe "hi! NonText"    .s:fmt_bold   .s:fg_base00 .s:bg_none+endif+exe "hi! StatusLine"     .s:fmt_none   .s:fg_base1  .s:bg_base02 .s:fmt_revbb+exe "hi! StatusLineNC"   .s:fmt_none   .s:fg_base00 .s:bg_base02 .s:fmt_revbb+exe "hi! Visual"         .s:fmt_none   .s:fg_base01 .s:bg_base03 .s:fmt_revbb+exe "hi! Directory"      .s:fmt_none   .s:fg_blue   .s:bg_none+exe "hi! ErrorMsg"       .s:fmt_revr   .s:fg_red    .s:bg_none+exe "hi! IncSearch"      .s:fmt_stnd   .s:fg_orange .s:bg_none+exe "hi! Search"         .s:fmt_revr   .s:fg_yellow .s:bg_none+exe "hi! MoreMsg"        .s:fmt_none   .s:fg_blue   .s:bg_none+exe "hi! ModeMsg"        .s:fmt_none   .s:fg_blue   .s:bg_none+exe "hi! LineNr"         .s:fmt_none   .s:fg_base01 .s:bg_base02+exe "hi! Question"       .s:fmt_bold   .s:fg_cyan   .s:bg_none+if ( has("gui_running") || &t_Co > 8 )+    exe "hi! VertSplit"  .s:fmt_none   .s:fg_base00 .s:bg_base00+else+    exe "hi! VertSplit"  .s:fmt_revbb  .s:fg_base00 .s:bg_base02+endif+exe "hi! Title"          .s:fmt_bold   .s:fg_orange .s:bg_none+exe "hi! VisualNOS"      .s:fmt_stnd   .s:fg_none   .s:bg_base02 .s:fmt_revbb+exe "hi! WarningMsg"     .s:fmt_bold   .s:fg_red    .s:bg_none+exe "hi! WildMenu"       .s:fmt_none   .s:fg_base2  .s:bg_base02 .s:fmt_revbb+exe "hi! Folded"         .s:fmt_undb   .s:fg_base0  .s:bg_base02  .s:sp_base03+exe "hi! FoldColumn"     .s:fmt_none   .s:fg_base0  .s:bg_base02+if      (g:solarized_diffmode=="high")+exe "hi! DiffAdd"        .s:fmt_revr   .s:fg_green  .s:bg_none+exe "hi! DiffChange"     .s:fmt_revr   .s:fg_yellow .s:bg_none+exe "hi! DiffDelete"     .s:fmt_revr   .s:fg_red    .s:bg_none+exe "hi! DiffText"       .s:fmt_revr   .s:fg_blue   .s:bg_none+elseif  (g:solarized_diffmode=="low")+exe "hi! DiffAdd"        .s:fmt_undr   .s:fg_green  .s:bg_none   .s:sp_green+exe "hi! DiffChange"     .s:fmt_undr   .s:fg_yellow .s:bg_none   .s:sp_yellow+exe "hi! DiffDelete"     .s:fmt_bold   .s:fg_red    .s:bg_none+exe "hi! DiffText"       .s:fmt_undr   .s:fg_blue   .s:bg_none   .s:sp_blue+else " normal+    if has("gui_running")+exe "hi! DiffAdd"        .s:fmt_bold   .s:fg_green  .s:bg_base02 .s:sp_green+exe "hi! DiffChange"     .s:fmt_bold   .s:fg_yellow .s:bg_base02 .s:sp_yellow+exe "hi! DiffDelete"     .s:fmt_bold   .s:fg_red    .s:bg_base02+exe "hi! DiffText"       .s:fmt_bold   .s:fg_blue   .s:bg_base02 .s:sp_blue+    else+exe "hi! DiffAdd"        .s:fmt_none   .s:fg_green  .s:bg_base02 .s:sp_green+exe "hi! DiffChange"     .s:fmt_none   .s:fg_yellow .s:bg_base02 .s:sp_yellow+exe "hi! DiffDelete"     .s:fmt_none   .s:fg_red    .s:bg_base02+exe "hi! DiffText"       .s:fmt_none   .s:fg_blue   .s:bg_base02 .s:sp_blue+    endif+endif+exe "hi! SignColumn"     .s:fmt_none   .s:fg_base0+exe "hi! Conceal"        .s:fmt_none   .s:fg_blue   .s:bg_none+exe "hi! SpellBad"       .s:fmt_curl   .s:fg_none   .s:bg_none    .s:sp_red+exe "hi! SpellCap"       .s:fmt_curl   .s:fg_none   .s:bg_none    .s:sp_violet+exe "hi! SpellRare"      .s:fmt_curl   .s:fg_none   .s:bg_none    .s:sp_cyan+exe "hi! SpellLocal"     .s:fmt_curl   .s:fg_none   .s:bg_none    .s:sp_yellow+exe "hi! Pmenu"          .s:fmt_none   .s:fg_base0  .s:bg_base02  .s:fmt_revbb+exe "hi! PmenuSel"       .s:fmt_none   .s:fg_base01 .s:bg_base2   .s:fmt_revbb+exe "hi! PmenuSbar"      .s:fmt_none   .s:fg_base2  .s:bg_base0   .s:fmt_revbb+exe "hi! PmenuThumb"     .s:fmt_none   .s:fg_base0  .s:bg_base03  .s:fmt_revbb+exe "hi! TabLine"        .s:fmt_undr   .s:fg_base0  .s:bg_base02  .s:sp_base0+exe "hi! TabLineFill"    .s:fmt_undr   .s:fg_base0  .s:bg_base02  .s:sp_base0+exe "hi! TabLineSel"     .s:fmt_undr   .s:fg_base01 .s:bg_base2   .s:sp_base0  .s:fmt_revbbu+exe "hi! CursorColumn"   .s:fmt_none   .s:fg_none   .s:bg_base02+exe "hi! CursorLine"     .s:fmt_uopt   .s:fg_none   .s:bg_base02  .s:sp_base1+exe "hi! ColorColumn"    .s:fmt_none   .s:fg_none   .s:bg_base02+exe "hi! Cursor"         .s:fmt_none   .s:fg_base03 .s:bg_base0+hi! link lCursor Cursor+exe "hi! MatchParen"     .s:fmt_bold   .s:fg_red    .s:bg_base01++"}}}+" vim syntax highlighting "{{{+" ---------------------------------------------------------------------+"exe "hi! vimLineComment" . s:fg_base01 .s:bg_none   .s:fmt_ital+"hi! link vimComment Comment+"hi! link vimLineComment Comment+hi! link vimVar Identifier+hi! link vimFunc Function+hi! link vimUserFunc Function+hi! link helpSpecial Special+hi! link vimSet Normal+hi! link vimSetEqual Normal+exe "hi! vimCommentString"  .s:fmt_none    .s:fg_violet .s:bg_none+exe "hi! vimCommand"        .s:fmt_none    .s:fg_yellow .s:bg_none+exe "hi! vimCmdSep"         .s:fmt_bold    .s:fg_blue   .s:bg_none+exe "hi! helpExample"       .s:fmt_none    .s:fg_base1  .s:bg_none+exe "hi! helpOption"        .s:fmt_none    .s:fg_cyan   .s:bg_none+exe "hi! helpNote"          .s:fmt_none    .s:fg_magenta.s:bg_none+exe "hi! helpVim"           .s:fmt_none    .s:fg_magenta.s:bg_none+exe "hi! helpHyperTextJump" .s:fmt_undr    .s:fg_blue   .s:bg_none+exe "hi! helpHyperTextEntry".s:fmt_none    .s:fg_green  .s:bg_none+exe "hi! vimIsCommand"      .s:fmt_none    .s:fg_base00 .s:bg_none+exe "hi! vimSynMtchOpt"     .s:fmt_none    .s:fg_yellow .s:bg_none+exe "hi! vimSynType"        .s:fmt_none    .s:fg_cyan   .s:bg_none+exe "hi! vimHiLink"         .s:fmt_none    .s:fg_blue   .s:bg_none+exe "hi! vimHiGroup"        .s:fmt_none    .s:fg_blue   .s:bg_none+exe "hi! vimGroup"          .s:fmt_undb    .s:fg_blue   .s:bg_none+"}}}+" diff highlighting "{{{+" ---------------------------------------------------------------------+hi! link diffAdded Statement+hi! link diffLine Identifier+"}}}+" git & gitcommit highlighting "{{{+"git+"exe "hi! gitDateHeader"+"exe "hi! gitIdentityHeader"+"exe "hi! gitIdentityKeyword"+"exe "hi! gitNotesHeader"+"exe "hi! gitReflogHeader"+"exe "hi! gitKeyword"+"exe "hi! gitIdentity"+"exe "hi! gitEmailDelimiter"+"exe "hi! gitEmail"+"exe "hi! gitDate"+"exe "hi! gitMode"+"exe "hi! gitHashAbbrev"+"exe "hi! gitHash"+"exe "hi! gitReflogMiddle"+"exe "hi! gitReference"+"exe "hi! gitStage"+"exe "hi! gitType"+"exe "hi! gitDiffAdded"+"exe "hi! gitDiffRemoved"+"gitcommit+"exe "hi! gitcommitSummary"      +exe "hi! gitcommitComment"      .s:fmt_ital     .s:fg_base01    .s:bg_none+hi! link gitcommitUntracked gitcommitComment+hi! link gitcommitDiscarded gitcommitComment+hi! link gitcommitSelected  gitcommitComment+exe "hi! gitcommitUnmerged"     .s:fmt_bold     .s:fg_green     .s:bg_none+exe "hi! gitcommitOnBranch"     .s:fmt_bold     .s:fg_base01    .s:bg_none+exe "hi! gitcommitBranch"       .s:fmt_bold     .s:fg_magenta   .s:bg_none+hi! link gitcommitNoBranch gitcommitBranch+exe "hi! gitcommitDiscardedType".s:fmt_none     .s:fg_red       .s:bg_none+exe "hi! gitcommitSelectedType" .s:fmt_none     .s:fg_green     .s:bg_none+"exe "hi! gitcommitUnmergedType"+"exe "hi! gitcommitType"+"exe "hi! gitcommitNoChanges"+"exe "hi! gitcommitHeader"+exe "hi! gitcommitHeader"       .s:fmt_none     .s:fg_base01    .s:bg_none+exe "hi! gitcommitUntrackedFile".s:fmt_bold     .s:fg_cyan      .s:bg_none+exe "hi! gitcommitDiscardedFile".s:fmt_bold     .s:fg_red       .s:bg_none+exe "hi! gitcommitSelectedFile" .s:fmt_bold     .s:fg_green     .s:bg_none+exe "hi! gitcommitUnmergedFile" .s:fmt_bold     .s:fg_yellow    .s:bg_none+exe "hi! gitcommitFile"         .s:fmt_bold     .s:fg_base0     .s:bg_none+hi! link gitcommitDiscardedArrow gitcommitDiscardedFile+hi! link gitcommitSelectedArrow  gitcommitSelectedFile+hi! link gitcommitUnmergedArrow  gitcommitUnmergedFile+"exe "hi! gitcommitArrow"+"exe "hi! gitcommitOverflow"+"exe "hi! gitcommitBlank"+" }}}+" html highlighting "{{{+" ---------------------------------------------------------------------+exe "hi! htmlTag"           .s:fmt_none .s:fg_base01 .s:bg_none+exe "hi! htmlEndTag"        .s:fmt_none .s:fg_base01 .s:bg_none+exe "hi! htmlTagN"          .s:fmt_bold .s:fg_base1  .s:bg_none+exe "hi! htmlTagName"       .s:fmt_bold .s:fg_blue   .s:bg_none+exe "hi! htmlSpecialTagName".s:fmt_ital .s:fg_blue   .s:bg_none+exe "hi! htmlArg"           .s:fmt_none .s:fg_base00 .s:bg_none+exe "hi! javaScript"        .s:fmt_none .s:fg_yellow .s:bg_none+"}}}+" perl highlighting "{{{+" ---------------------------------------------------------------------+exe "hi! perlHereDoc"    . s:fg_base1  .s:bg_back   .s:fmt_none+exe "hi! perlVarPlain"   . s:fg_yellow .s:bg_back   .s:fmt_none+exe "hi! perlStatementFileDesc". s:fg_cyan.s:bg_back.s:fmt_none++"}}}+" tex highlighting "{{{+" ---------------------------------------------------------------------+exe "hi! texStatement"   . s:fg_cyan   .s:bg_back   .s:fmt_none+exe "hi! texMathZoneX"   . s:fg_yellow .s:bg_back   .s:fmt_none+exe "hi! texMathMatcher" . s:fg_yellow .s:bg_back   .s:fmt_none+exe "hi! texMathMatcher" . s:fg_yellow .s:bg_back   .s:fmt_none+exe "hi! texRefLabel"    . s:fg_yellow .s:bg_back   .s:fmt_none+"}}}+" ruby highlighting "{{{+" ---------------------------------------------------------------------+exe "hi! rubyDefine"     . s:fg_base1  .s:bg_back   .s:fmt_bold+"rubyInclude+"rubySharpBang+"rubyAccess+"rubyPredefinedVariable+"rubyBoolean+"rubyClassVariable+"rubyBeginEnd+"rubyRepeatModifier+"hi! link rubyArrayDelimiter    Special  " [ , , ]+"rubyCurlyBlock  { , , }++"hi! link rubyClass             Keyword+"hi! link rubyModule            Keyword+"hi! link rubyKeyword           Keyword+"hi! link rubyOperator          Operator+"hi! link rubyIdentifier        Identifier+"hi! link rubyInstanceVariable  Identifier+"hi! link rubyGlobalVariable    Identifier+"hi! link rubyClassVariable     Identifier+"hi! link rubyConstant          Type+"}}}+" haskell syntax highlighting"{{{+" ---------------------------------------------------------------------+" For use with syntax/haskell.vim : Haskell Syntax File+" http://www.vim.org/scripts/script.php?script_id=3034+" See also Steffen Siering's github repository:+" http://github.com/urso/dotrc/blob/master/vim/syntax/haskell.vim+" ---------------------------------------------------------------------+"+" Treat True and False specially, see the plugin referenced above+let hs_highlight_boolean=1+" highlight delims, see the plugin referenced above+let hs_highlight_delimiters=1++exe "hi! cPreCondit". s:fg_orange.s:bg_none   .s:fmt_none++exe "hi! VarId"    . s:fg_blue   .s:bg_none   .s:fmt_none+exe "hi! ConId"    . s:fg_yellow .s:bg_none   .s:fmt_none+exe "hi! hsImport" . s:fg_magenta.s:bg_none   .s:fmt_none+exe "hi! hsString" . s:fg_base00 .s:bg_none   .s:fmt_none++exe "hi! hsStructure"        . s:fg_cyan   .s:bg_none   .s:fmt_none+exe "hi! hs_hlFunctionName"  . s:fg_blue   .s:bg_none+exe "hi! hsStatement"        . s:fg_cyan   .s:bg_none   .s:fmt_none+exe "hi! hsImportLabel"      . s:fg_cyan   .s:bg_none   .s:fmt_none+exe "hi! hs_OpFunctionName"  . s:fg_yellow .s:bg_none   .s:fmt_none+exe "hi! hs_DeclareFunction" . s:fg_orange .s:bg_none   .s:fmt_none+exe "hi! hsVarSym"           . s:fg_cyan   .s:bg_none   .s:fmt_none+exe "hi! hsType"             . s:fg_yellow .s:bg_none   .s:fmt_none+exe "hi! hsTypedef"          . s:fg_cyan   .s:bg_none   .s:fmt_none+exe "hi! hsModuleName"       . s:fg_green  .s:bg_none   .s:fmt_undr+exe "hi! hsModuleStartLabel" . s:fg_magenta.s:bg_none   .s:fmt_none+hi! link hsImportParams      Delimiter+hi! link hsDelimTypeExport   Delimiter+hi! link hsModuleStartLabel  hsStructure+hi! link hsModuleWhereLabel  hsModuleStartLabel++" following is for the haskell-conceal plugin+" the first two items don't have an impact, but better safe+exe "hi! hsNiceOperator"     . s:fg_cyan   .s:bg_none   .s:fmt_none+exe "hi! hsniceoperator"     . s:fg_cyan   .s:bg_none   .s:fmt_none++"}}}+" pandoc markdown syntax highlighting "{{{+" ---------------------------------------------------------------------++"PandocHiLink pandocNormalBlock+exe "hi! pandocTitleBlock"               .s:fg_blue   .s:bg_none   .s:fmt_none+exe "hi! pandocTitleBlockTitle"          .s:fg_blue   .s:bg_none   .s:fmt_bold+exe "hi! pandocTitleComment"             .s:fg_blue   .s:bg_none   .s:fmt_bold+exe "hi! pandocComment"                  .s:fg_base01 .s:bg_none   .s:fmt_ital+exe "hi! pandocVerbatimBlock"            .s:fg_yellow .s:bg_none   .s:fmt_none+hi! link pandocVerbatimBlockDeep         pandocVerbatimBlock+hi! link pandocCodeBlock                 pandocVerbatimBlock+hi! link pandocCodeBlockDelim            pandocVerbatimBlock+exe "hi! pandocBlockQuote"               .s:fg_blue   .s:bg_none   .s:fmt_none+exe "hi! pandocBlockQuoteLeader1"        .s:fg_blue   .s:bg_none   .s:fmt_none+exe "hi! pandocBlockQuoteLeader2"        .s:fg_cyan   .s:bg_none   .s:fmt_none+exe "hi! pandocBlockQuoteLeader3"        .s:fg_yellow .s:bg_none   .s:fmt_none+exe "hi! pandocBlockQuoteLeader4"        .s:fg_red    .s:bg_none   .s:fmt_none+exe "hi! pandocBlockQuoteLeader5"        .s:fg_base0  .s:bg_none   .s:fmt_none+exe "hi! pandocBlockQuoteLeader6"        .s:fg_base01 .s:bg_none   .s:fmt_none+exe "hi! pandocListMarker"               .s:fg_magenta.s:bg_none   .s:fmt_none+exe "hi! pandocListReference"            .s:fg_magenta.s:bg_none   .s:fmt_undr++" Definitions+" ---------------------------------------------------------------------+let s:fg_pdef = s:fg_violet+exe "hi! pandocDefinitionBlock"              .s:fg_pdef  .s:bg_none  .s:fmt_none+exe "hi! pandocDefinitionTerm"               .s:fg_pdef  .s:bg_none  .s:fmt_stnd+exe "hi! pandocDefinitionIndctr"             .s:fg_pdef  .s:bg_none  .s:fmt_bold+exe "hi! pandocEmphasisDefinition"           .s:fg_pdef  .s:bg_none  .s:fmt_ital+exe "hi! pandocEmphasisNestedDefinition"     .s:fg_pdef  .s:bg_none  .s:fmt_bldi+exe "hi! pandocStrongEmphasisDefinition"     .s:fg_pdef  .s:bg_none  .s:fmt_bold+exe "hi! pandocStrongEmphasisNestedDefinition"   .s:fg_pdef.s:bg_none.s:fmt_bldi+exe "hi! pandocStrongEmphasisEmphasisDefinition" .s:fg_pdef.s:bg_none.s:fmt_bldi+exe "hi! pandocStrikeoutDefinition"          .s:fg_pdef  .s:bg_none  .s:fmt_revr+exe "hi! pandocVerbatimInlineDefinition"     .s:fg_pdef  .s:bg_none  .s:fmt_none+exe "hi! pandocSuperscriptDefinition"        .s:fg_pdef  .s:bg_none  .s:fmt_none+exe "hi! pandocSubscriptDefinition"          .s:fg_pdef  .s:bg_none  .s:fmt_none++" Tables+" ---------------------------------------------------------------------+let s:fg_ptable = s:fg_blue+exe "hi! pandocTable"                        .s:fg_ptable.s:bg_none  .s:fmt_none+exe "hi! pandocTableStructure"               .s:fg_ptable.s:bg_none  .s:fmt_none+hi! link pandocTableStructureTop             pandocTableStructre+hi! link pandocTableStructureEnd             pandocTableStructre+exe "hi! pandocTableZebraLight"              .s:fg_ptable.s:bg_base03.s:fmt_none+exe "hi! pandocTableZebraDark"               .s:fg_ptable.s:bg_base02.s:fmt_none+exe "hi! pandocEmphasisTable"                .s:fg_ptable.s:bg_none  .s:fmt_ital+exe "hi! pandocEmphasisNestedTable"          .s:fg_ptable.s:bg_none  .s:fmt_bldi+exe "hi! pandocStrongEmphasisTable"          .s:fg_ptable.s:bg_none  .s:fmt_bold+exe "hi! pandocStrongEmphasisNestedTable"    .s:fg_ptable.s:bg_none  .s:fmt_bldi+exe "hi! pandocStrongEmphasisEmphasisTable"  .s:fg_ptable.s:bg_none  .s:fmt_bldi+exe "hi! pandocStrikeoutTable"               .s:fg_ptable.s:bg_none  .s:fmt_revr+exe "hi! pandocVerbatimInlineTable"          .s:fg_ptable.s:bg_none  .s:fmt_none+exe "hi! pandocSuperscriptTable"             .s:fg_ptable.s:bg_none  .s:fmt_none+exe "hi! pandocSubscriptTable"               .s:fg_ptable.s:bg_none  .s:fmt_none++" Headings+" ---------------------------------------------------------------------+let s:fg_phead = s:fg_orange+exe "hi! pandocHeading"                      .s:fg_phead .s:bg_none.s:fmt_bold+exe "hi! pandocHeadingMarker"                .s:fg_yellow.s:bg_none.s:fmt_bold+exe "hi! pandocEmphasisHeading"              .s:fg_phead .s:bg_none.s:fmt_bldi+exe "hi! pandocEmphasisNestedHeading"        .s:fg_phead .s:bg_none.s:fmt_bldi+exe "hi! pandocStrongEmphasisHeading"        .s:fg_phead .s:bg_none.s:fmt_bold+exe "hi! pandocStrongEmphasisNestedHeading"  .s:fg_phead .s:bg_none.s:fmt_bldi+exe "hi! pandocStrongEmphasisEmphasisHeading".s:fg_phead .s:bg_none.s:fmt_bldi+exe "hi! pandocStrikeoutHeading"             .s:fg_phead .s:bg_none.s:fmt_revr+exe "hi! pandocVerbatimInlineHeading"        .s:fg_phead .s:bg_none.s:fmt_bold+exe "hi! pandocSuperscriptHeading"           .s:fg_phead .s:bg_none.s:fmt_bold+exe "hi! pandocSubscriptHeading"             .s:fg_phead .s:bg_none.s:fmt_bold++" Links+" ---------------------------------------------------------------------+exe "hi! pandocLinkDelim"                .s:fg_base01 .s:bg_none   .s:fmt_none+exe "hi! pandocLinkLabel"                .s:fg_blue   .s:bg_none   .s:fmt_undr+exe "hi! pandocLinkText"                 .s:fg_blue   .s:bg_none   .s:fmt_undb+exe "hi! pandocLinkURL"                  .s:fg_base00 .s:bg_none   .s:fmt_undr+exe "hi! pandocLinkTitle"                .s:fg_base00 .s:bg_none   .s:fmt_undi+exe "hi! pandocLinkTitleDelim"           .s:fg_base01 .s:bg_none   .s:fmt_undi   .s:sp_base00+exe "hi! pandocLinkDefinition"           .s:fg_cyan   .s:bg_none   .s:fmt_undr   .s:sp_base00+exe "hi! pandocLinkDefinitionID"         .s:fg_blue   .s:bg_none   .s:fmt_bold+exe "hi! pandocImageCaption"             .s:fg_violet .s:bg_none   .s:fmt_undb+exe "hi! pandocFootnoteLink"             .s:fg_green  .s:bg_none   .s:fmt_undr+exe "hi! pandocFootnoteDefLink"          .s:fg_green  .s:bg_none   .s:fmt_bold+exe "hi! pandocFootnoteInline"           .s:fg_green  .s:bg_none   .s:fmt_undb+exe "hi! pandocFootnote"                 .s:fg_green  .s:bg_none   .s:fmt_none+exe "hi! pandocCitationDelim"            .s:fg_magenta.s:bg_none   .s:fmt_none+exe "hi! pandocCitation"                 .s:fg_magenta.s:bg_none   .s:fmt_none+exe "hi! pandocCitationID"               .s:fg_magenta.s:bg_none   .s:fmt_undr+exe "hi! pandocCitationRef"              .s:fg_magenta.s:bg_none   .s:fmt_none++" Main Styles+" ---------------------------------------------------------------------+exe "hi! pandocStyleDelim"               .s:fg_base01 .s:bg_none  .s:fmt_none+exe "hi! pandocEmphasis"                 .s:fg_base0  .s:bg_none  .s:fmt_ital+exe "hi! pandocEmphasisNested"           .s:fg_base0  .s:bg_none  .s:fmt_bldi+exe "hi! pandocStrongEmphasis"           .s:fg_base0  .s:bg_none  .s:fmt_bold+exe "hi! pandocStrongEmphasisNested"     .s:fg_base0  .s:bg_none  .s:fmt_bldi+exe "hi! pandocStrongEmphasisEmphasis"   .s:fg_base0  .s:bg_none  .s:fmt_bldi+exe "hi! pandocStrikeout"                .s:fg_base01 .s:bg_none  .s:fmt_revr+exe "hi! pandocVerbatimInline"           .s:fg_yellow .s:bg_none  .s:fmt_none+exe "hi! pandocSuperscript"              .s:fg_violet .s:bg_none  .s:fmt_none+exe "hi! pandocSubscript"                .s:fg_violet .s:bg_none  .s:fmt_none++exe "hi! pandocRule"                     .s:fg_blue   .s:bg_none  .s:fmt_bold+exe "hi! pandocRuleLine"                 .s:fg_blue   .s:bg_none  .s:fmt_bold+exe "hi! pandocEscapePair"               .s:fg_red    .s:bg_none  .s:fmt_bold+exe "hi! pandocCitationRef"              .s:fg_magenta.s:bg_none   .s:fmt_none+exe "hi! pandocNonBreakingSpace"         . s:fg_red   .s:bg_none  .s:fmt_revr+hi! link pandocEscapedCharacter          pandocEscapePair+hi! link pandocLineBreak                 pandocEscapePair++" Embedded Code+" ---------------------------------------------------------------------+exe "hi! pandocMetadataDelim"            .s:fg_base01 .s:bg_none   .s:fmt_none+exe "hi! pandocMetadata"                 .s:fg_blue   .s:bg_none   .s:fmt_none+exe "hi! pandocMetadataKey"              .s:fg_blue   .s:bg_none   .s:fmt_none+exe "hi! pandocMetadata"                 .s:fg_blue   .s:bg_none   .s:fmt_bold+hi! link pandocMetadataTitle             pandocMetadata++"}}}+" Utility autocommand "{{{+" ---------------------------------------------------------------------+" In cases where Solarized is initialized inside a terminal vim session and +" then transferred to a gui session via the command `:gui`, the gui vim process +" does not re-read the colorscheme (or .vimrc for that matter) so any `has_gui` +" related code that sets gui specific values isn't executed.+"+" Currently, Solarized sets only the cterm or gui values for the colorscheme +" depending on gui or terminal mode. It's possible that, if the following +" autocommand method is deemed excessively poor form, that approach will be +" used again and the autocommand below will be dropped.+"+" However it seems relatively benign in this case to include the autocommand +" here. It fires only in cases where vim is transferring from terminal to gui +" mode (detected with the script scope s:vmode variable). It also allows for +" other potential terminal customizations that might make gui mode suboptimal.+"+autocmd GUIEnter * if (s:vmode != "gui") | exe "colorscheme " . g:colors_name | endif+"}}}+" Highlight Trailing Space {{{+" Experimental: Different highlight when on cursorline+function! s:SolarizedHiTrail()+    if g:solarized_hitrail==0+        hi! clear solarizedTrailingSpace+    else+        syn match solarizedTrailingSpace "\s*$"+        exe "hi! solarizedTrailingSpace " .s:fmt_undr .s:fg_red .s:bg_none .s:sp_red+    endif+endfunction  +augroup SolarizedHiTrail+    autocmd!+    if g:solarized_hitrail==1+        autocmd! Syntax * call s:SolarizedHiTrail()+        autocmd! ColorScheme * if g:colors_name == "solarized" | call s:SolarizedHiTrail() | else | augroup! s:SolarizedHiTrail | endif+    endif+augroup END+" }}}+" Menus "{{{+" ---------------------------------------------------------------------+" Turn off Solarized menu by including the following assignment in your .vimrc:+"+"    let g:solarized_menu=0++function! s:SolarizedOptions()+    new "new buffer+    setf vim "vim filetype+    let failed = append(0, s:defaults_list)+    let failed = append(0, s:colorscheme_list)+    let failed = append(0, s:options_list)+    let failed = append(0, s:lazycat_list)+    0 "jump back to the top+endfunction+if !exists(":SolarizedOptions")+    command SolarizedOptions :call s:SolarizedOptions()+endif++function! SolarizedMenu()+    if exists("g:loaded_solarized_menu")+        try+            silent! aunmenu Solarized+        endtry+    endif+    let g:loaded_solarized_menu = 1++    if g:colors_name == "solarized" && g:solarized_menu != 0++        amenu &Solarized.&Contrast.&Low\ Contrast        :let g:solarized_contrast="low"       \| colorscheme solarized<CR>+        amenu &Solarized.&Contrast.&Normal\ Contrast     :let g:solarized_contrast="normal"    \| colorscheme solarized<CR>+        amenu &Solarized.&Contrast.&High\ Contrast       :let g:solarized_contrast="high"      \| colorscheme solarized<CR>+        an    &Solarized.&Contrast.-sep-                 <Nop>+        amenu &Solarized.&Contrast.&Help:\ Contrast      :help 'solarized_contrast'<CR>++        amenu &Solarized.&Visibility.&Low\ Visibility    :let g:solarized_visibility="low"     \| colorscheme solarized<CR>+        amenu &Solarized.&Visibility.&Normal\ Visibility :let g:solarized_visibility="normal"  \| colorscheme solarized<CR>+        amenu &Solarized.&Visibility.&High\ Visibility   :let g:solarized_visibility="high"    \| colorscheme solarized<CR>+        an    &Solarized.&Visibility.-sep-                 <Nop>+        amenu &Solarized.&Visibility.&Help:\ Visibility    :help 'solarized_visibility'<CR>++        amenu &Solarized.&Background.&Toggle\ Background :ToggleBG<CR>+        amenu &Solarized.&Background.&Dark\ Background   :set background=dark  \| colorscheme solarized<CR>+        amenu &Solarized.&Background.&Light\ Background  :set background=light \| colorscheme solarized<CR>+        an    &Solarized.&Background.-sep-               <Nop>+        amenu &Solarized.&Background.&Help:\ ToggleBG     :help togglebg<CR>++        if g:solarized_bold==0 | let l:boldswitch="On" | else | let l:boldswitch="Off" | endif+        exe "amenu &Solarized.&Styling.&Turn\\ Bold\\ ".l:boldswitch." :let g:solarized_bold=(abs(g:solarized_bold-1)) \\| colorscheme solarized<CR>"+        if g:solarized_italic==0 | let l:italicswitch="On" | else | let l:italicswitch="Off" | endif+        exe "amenu &Solarized.&Styling.&Turn\\ Italic\\ ".l:italicswitch." :let g:solarized_italic=(abs(g:solarized_italic-1)) \\| colorscheme solarized<CR>"+        if g:solarized_underline==0 | let l:underlineswitch="On" | else | let l:underlineswitch="Off" | endif+        exe "amenu &Solarized.&Styling.&Turn\\ Underline\\ ".l:underlineswitch." :let g:solarized_underline=(abs(g:solarized_underline-1)) \\| colorscheme solarized<CR>"++        amenu &Solarized.&Diff\ Mode.&Low\ Diff\ Mode    :let g:solarized_diffmode="low"     \| colorscheme solarized<CR>+        amenu &Solarized.&Diff\ Mode.&Normal\ Diff\ Mode :let g:solarized_diffmode="normal"  \| colorscheme solarized<CR>+        amenu &Solarized.&Diff\ Mode.&High\ Diff\ Mode   :let g:solarized_diffmode="high"    \| colorscheme solarized<CR>++        if g:solarized_hitrail==0 | let l:hitrailswitch="On" | else | let l:hitrailswitch="Off" | endif+        exe "amenu &Solarized.&Experimental.&Turn\\ Highlight\\ Trailing\\ Spaces\\ ".l:hitrailswitch." :let g:solarized_hitrail=(abs(g:solarized_hitrail-1)) \\| colorscheme solarized<CR>"+        an    &Solarized.&Experimental.-sep-               <Nop>+        amenu &Solarized.&Experimental.&Help:\ HiTrail    :help 'solarized_hitrail'<CR>++        an    &Solarized.-sep1-                          <Nop>++        amenu &Solarized.&Autogenerate\ options          :SolarizedOptions<CR>++        an    &Solarized.-sep2-                          <Nop>++        amenu &Solarized.&Help.&Solarized\ Help          :help solarized<CR>+        amenu &Solarized.&Help.&Toggle\ Background\ Help :help togglebg<CR>+        amenu &Solarized.&Help.&Removing\ This\ Menu     :help solarized-menu<CR>++        an 9999.77 &Help.&Solarized\ Colorscheme         :help solarized<CR>+        an 9999.78 &Help.&Toggle\ Background             :help togglebg<CR>+        an 9999.79 &Help.-sep3-                          <Nop>++    endif+endfunction++autocmd ColorScheme * if g:colors_name != "solarized" | silent! aunmenu Solarized | else | call SolarizedMenu() | endif++"}}}+" License "{{{+" ---------------------------------------------------------------------+"+" Copyright (c) 2011 Ethan Schoonover+"+" 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.+"+" vim:foldmethod=marker:foldlevel=0+"}}}

.vim/colors/summerfruit256.vim

new file mode 100644@@ -0,0 +1,322 @@+" Vim color file+" Maintainer: Martin Baeuml <baeuml@gmail.com>+" Last Change: 2008-02-09+"+" This color file is a modification of the "summerfruit" color scheme by Armin Ronacher+" so that it can be used on 88- and 256-color xterms. The colors are translated+" using Henry So's programmatic approximation of gui colors from his "desert256"+" color scheme.+"+" I removed the "italic" option and the background color from+" comment-coloring because that looks odd on my console.+"+" The original "summerfruit" color scheme and "desert256" are available from vim.org.++set background=light+if version > 580+    " no guarantees for version 5.8 and below, but this makes it stop+    " complaining+    hi clear+    if exists("syntax_on")+        syntax reset+    endif+endif+let g:colors_name="summerfruit256"++if has("gui_running") || &t_Co == 88 || &t_Co == 256+    " functions {{{+    " returns an approximate grey index for the given grey level+    fun <SID>grey_number(x)+        if &t_Co == 88+            if a:x < 23+                return 0+            elseif a:x < 69+                return 1+            elseif a:x < 103+                return 2+            elseif a:x < 127+                return 3+            elseif a:x < 150+                return 4+            elseif a:x < 173+                return 5+            elseif a:x < 196+                return 6+            elseif a:x < 219+                return 7+            elseif a:x < 243+                return 8+            else+                return 9+            endif+        else+            if a:x < 14+                return 0+            else+                let l:n = (a:x - 8) / 10+                let l:m = (a:x - 8) % 10+                if l:m < 5+                    return l:n+                else+                    return l:n + 1+                endif+            endif+        endif+    endfun++    " returns the actual grey level represented by the grey index+    fun <SID>grey_level(n)+        if &t_Co == 88+            if a:n == 0+                return 0+            elseif a:n == 1+                return 46+            elseif a:n == 2+                return 92+            elseif a:n == 3+                return 115+            elseif a:n == 4+                return 139+            elseif a:n == 5+                return 162+            elseif a:n == 6+                return 185+            elseif a:n == 7+                return 208+            elseif a:n == 8+                return 231+            else+                return 255+            endif+        else+            if a:n == 0+                return 0+            else+                return 8 + (a:n * 10)+            endif+        endif+    endfun++    " returns the palette index for the given grey index+    fun <SID>grey_color(n)+        if &t_Co == 88+            if a:n == 0+                return 16+            elseif a:n == 9+                return 79+            else+                return 79 + a:n+            endif+        else+            if a:n == 0+                return 16+            elseif a:n == 25+                return 231+            else+                return 231 + a:n+            endif+        endif+    endfun++    " returns an approximate color index for the given color level+    fun <SID>rgb_number(x)+        if &t_Co == 88+            if a:x < 69+                return 0+            elseif a:x < 172+                return 1+            elseif a:x < 230+                return 2+            else+                return 3+            endif+        else+            if a:x < 75+                return 0+            else+                let l:n = (a:x - 55) / 40+                let l:m = (a:x - 55) % 40+                if l:m < 20+                    return l:n+                else+                    return l:n + 1+                endif+            endif+        endif+    endfun++    " returns the actual color level for the given color index+    fun <SID>rgb_level(n)+        if &t_Co == 88+            if a:n == 0+                return 0+            elseif a:n == 1+                return 139+            elseif a:n == 2+                return 205+            else+                return 255+            endif+        else+            if a:n == 0+                return 0+            else+                return 55 + (a:n * 40)+            endif+        endif+    endfun++    " returns the palette index for the given R/G/B color indices+    fun <SID>rgb_color(x, y, z)+        if &t_Co == 88+            return 16 + (a:x * 16) + (a:y * 4) + a:z+        else+            return 16 + (a:x * 36) + (a:y * 6) + a:z+        endif+    endfun++    " returns the palette index to approximate the given R/G/B color levels+    fun <SID>color(r, g, b)+        " get the closest grey+        let l:gx = <SID>grey_number(a:r)+        let l:gy = <SID>grey_number(a:g)+        let l:gz = <SID>grey_number(a:b)++        " get the closest color+        let l:x = <SID>rgb_number(a:r)+        let l:y = <SID>rgb_number(a:g)+        let l:z = <SID>rgb_number(a:b)++        if l:gx == l:gy && l:gy == l:gz+            " there are two possibilities+            let l:dgr = <SID>grey_level(l:gx) - a:r+            let l:dgg = <SID>grey_level(l:gy) - a:g+            let l:dgb = <SID>grey_level(l:gz) - a:b+            let l:dgrey = (l:dgr * l:dgr) + (l:dgg * l:dgg) + (l:dgb * l:dgb)+            let l:dr = <SID>rgb_level(l:gx) - a:r+            let l:dg = <SID>rgb_level(l:gy) - a:g+            let l:db = <SID>rgb_level(l:gz) - a:b+            let l:drgb = (l:dr * l:dr) + (l:dg * l:dg) + (l:db * l:db)+            if l:dgrey < l:drgb+                " use the grey+                return <SID>grey_color(l:gx)+            else+                " use the color+                return <SID>rgb_color(l:x, l:y, l:z)+            endif+        else+            " only one possibility+            return <SID>rgb_color(l:x, l:y, l:z)+        endif+    endfun++    " returns the palette index to approximate the 'rrggbb' hex string+    fun <SID>rgb(rgb)+        let l:r = ("0x" . strpart(a:rgb, 0, 2)) + 0+        let l:g = ("0x" . strpart(a:rgb, 2, 2)) + 0+        let l:b = ("0x" . strpart(a:rgb, 4, 2)) + 0++        return <SID>color(l:r, l:g, l:b)+    endfun++    " sets the highlighting for the given group+    fun <SID>X(group, fg, bg, attr)+        if a:fg != ""+            exec "hi " . a:group . " guifg=#" . a:fg . " ctermfg=" . <SID>rgb(a:fg)+        endif+        if a:bg != ""+            exec "hi " . a:group . " guibg=#" . a:bg . " ctermbg=" . <SID>rgb(a:bg)+        endif+        if a:attr != ""+            exec "hi " . a:group . " gui=" . a:attr . " cterm=" . a:attr+        endif+    endfun+    " }}}++    " Global+    call <SID>X("Normal", "000000", "ffffff", "")+    " call <SID>X("NonText", "438ec3", "b7dce8", "") ++    " Search+    call <SID>X("Search", "800000", "ffae00", "")+    call <SID>X("IncSearch", "800000", "ffae00", "")++    " Interface Elements+    call <SID>X("StatusLine", "ffffff", "43c464", "bold")+    call <SID>X("StatusLineNC", "9bd4a9", "51b069", "")+    call <SID>X("VertSplit", "3687a2", "3687a2", "")+    call <SID>X("Folded", "3c78a2", "c3daea", "")+    call <SID>X("IncSearch", "708090", "f0e68c", "")+    call <SID>X("Pmenu", "ffffff", "cb2f27", "")+    call <SID>X("SignColumn", "", "", "")+    call <SID>X("CursorLine", "", "c0d9eb", "")+    " call <SID>X("LineNr", "eeeeee", "438ec3", "bold") +    call <SID>X("MatchParen", "", "", "")++    " Specials+    call <SID>X("Todo", "e50808", "dbf3cd", "bold")+    call <SID>X("Title", "000000", "", "")+    call <SID>X("Special", "fd8900", "", "")++    " Syntax Elements+    call <SID>X("String", "0086d2", "", "")+    call <SID>X("Constant", "0086d2", "", "")+    call <SID>X("Number", "0086f7", "", "")+    call <SID>X("Statement", "fb660a", "", "")+    call <SID>X("Function", "ff0086", "", "")+    call <SID>X("PreProc", "ff0007", "", "")+    call <SID>X("Comment", "22a21f", "", "bold")+    call <SID>X("Type", "70796b", "", "")+    call <SID>X("Error", "ffffff", "d40000", "")+    call <SID>X("Identifier", "ff0086", "", "")+    call <SID>X("Label", "ff0086", "", "")++    " Python Highlighting+    call <SID>X("pythonCoding", "ff0086", "", "")+    call <SID>X("pythonRun", "ff0086", "", "")+    call <SID>X("pythonBuiltinObj", "2b6ba2", "", "")+    call <SID>X("pythonBuiltinFunc", "2b6ba2", "", "")+    call <SID>X("pythonException", "ee0000", "", "")+    call <SID>X("pythonExClass", "66cd66", "", "")+    call <SID>X("pythonSpaceError", "", "", "")+    call <SID>X("pythonDocTest", "2f5f49", "", "")+    call <SID>X("pythonDocTest2", "3b916a", "", "")+    call <SID>X("pythonFunction", "ee0000", "", "")+    call <SID>X("pythonClass", "ff0086", "", "")++    " HTML Highlighting+    call <SID>X("htmlTag", "00bdec", "", "")+    call <SID>X("htmlEndTag", "00bdec", "", "")+    call <SID>X("htmlSpecialTagName", "4aa04a", "", "")+    call <SID>X("htmlTagName", "4aa04a", "", "")+    call <SID>X("htmlTagN", "4aa04a", "", "")++    " Jinja Highlighting+    call <SID>X("jinjaTagBlock", "ff0007", "fbf4c7", "bold")+    call <SID>X("jinjaVarBlock", "ff0007", "fbf4c7", "")+    call <SID>X("jinjaString", "0086d2", "fbf4c7", "")+    call <SID>X("jinjaNumber", "bf0945", "fbf4c7", "bold")+    call <SID>X("jinjaStatement", "fb660a", "fbf4c7", "bold")+    call <SID>X("jinjaComment", "008800", "002300", "italic")+    call <SID>X("jinjaFilter", "ff0086", "fbf4c7", "")+    call <SID>X("jinjaRaw", "aaaaaa", "fbf4c7", "")+    call <SID>X("jinjaOperator", "ffffff", "fbf4c7", "")+    call <SID>X("jinjaVariable", "92cd35", "fbf4c7", "")+    call <SID>X("jinjaAttribute", "dd7700", "fbf4c7", "")+    call <SID>X("jinjaSpecial", "008ffd", "fbf4c7", "")++    " delete functions {{{+    delf <SID>X+    delf <SID>rgb+    delf <SID>color+    delf <SID>rgb_color+    delf <SID>rgb_level+    delf <SID>rgb_number+    delf <SID>grey_color+    delf <SID>grey_level+    delf <SID>grey_number+    " }}}+endif++" vim: set fdl=0 fdm=marker:+

.vim/colors/zenburn.vim

new file mode 100644@@ -0,0 +1,425 @@+" Vim color file+" Maintainer:   Jani Nurminen <slinky@iki.fi>+" Last Change:  $Id: zenburn.vim,v 2.16 2010/10/24 10:55:30 slinky Exp slinky $+" URL:          http://slinky.imukuppi.org/zenburnpage/+" License:      GNU GPL <http://www.gnu.org/licenses/gpl.html>+"+" Nothing too fancy, just some alien fruit salad to keep you in the zone.+" This syntax file was designed to be used with dark environments and+" low light situations. Of course, if it works during a daybright office, go+" ahead :)+"+" Owes heavily to other Vim color files! With special mentions+" to "BlackDust", "Camo" and "Desert".+"+" To install, copy to ~/.vim/colors directory.+"+" Alternatively, you can use Vimball installation:+"     vim zenburn.vba+"     :so %+"     :q+"+" For details, see :help vimball+"+" After installation, use it with :colorscheme zenburn.+" See also :help syntax+"+" Credits:+"  - Jani Nurminen - original Zenburn, maintainer+"  - Steve Hall & Cream posse - higher-contrast Visual selection+"  - Kurt Maier - 256 color console coloring, low and high contrast toggle,+"                 bug fixing+"  - Charlie - spotted too bright StatusLine in non-high contrast mode+"  - Pablo Castellazzi - CursorLine fix for 256 color mode+"  - Tim Smith - force dark background+"  - John Gabriele - spotted bad Ignore-group handling+"  - Zac Thompson - spotted invisible NonText in low contrast mode+"  - Christophe-Marie Duquesne - suggested making a Vimball+"  - Andrew Wagner - noted the CursorColumn bug (guifg was unintentionally set),+"                    unify CursorColumn colour+"  - Martin Langasek - clarify the license, whitespace fixes+"  - Marcin Szamotulski - support autocomplete for Zenburn configuration+"    parameters+"+" CONFIGURABLE PARAMETERS:+"+" You can use the default (don't set any parameters), or you can+" set some parameters to tweak the Zenburn colours.+"+" To use them, put them into your .vimrc file before loading the color scheme,+" example:+"    let g:zenburn_high_Contrast=1+"    colors zenburn+"+" You can also do ":let g:zenburn" then hit Ctrl-d or Tab to scroll through the+" list of configurable parameters.+"+" * You can now set a darker background for bright environments. To activate, use:+"   contrast Zenburn, use:+"+"      let g:zenburn_high_Contrast = 1+"+" * For example, Vim help files uses the Ignore-group for the pipes in tags+"   like "|somelink.txt|". By default, the pipes are not visible, as they+"   map to Ignore group. If you wish to enable coloring of the Ignore group,+"   set the following parameter to 1. Warning, it might make some syntax files+"   look strange.+"+"      let g:zenburn_color_also_Ignore = 1+"+" * To get more contrast to the Visual selection, use+"+"      let g:zenburn_alternate_Visual = 1+"+" * To use alternate colouring for Error message, use+"+"      let g:zenburn_alternate_Error = 1+"+" * The new default for Include is a duller orange. To use the original+"   colouring for Include, use+"+"      let g:zenburn_alternate_Include = 1+"+" * Work-around to a Vim bug, it seems to misinterpret ctermfg and 234 and 237+"   as light values, and sets background to light for some people. If you have+"   this problem, use:+"+"      let g:zenburn_force_dark_Background = 1+"+" * By default the CursorColumn is of a lighter colour. I find it more readable+"   that way, but some people may want to align it with the darker CursorLine+"   color, for visual uniformity. To do so, use:+"+"      let g:zenburn_unified_CursorColumn = 1+"+"   Note: you can ignore this unless you use+"   ":set cursorline cursorcolumn", since otherwise the effect won't be+"   seen.+"+" NOTE:+"+" * To turn the parameter(s) back to defaults, use UNLET or set them to 0:+"+"      unlet g:zenburn_alternate_Include+"   or +"      let g:zenburn_alternate_Include = 0+"+"+" That's it, enjoy!+"+" TODO+"   - Visual alternate color is broken? Try GVim >= 7.0.66 if you have trouble+"   - IME colouring (CursorIM)++" Set defaults, but keep any parameters already set by the user+if ! exists("g:zenburn_high_Contrast")+    let g:zenburn_high_Contrast = 0+endif++if ! exists("g:zenburn_color_also_Ignore")+    let g:zenburn_color_also_Ignore = 0+endif++if ! exists("g:zenburn_alternate_Error")+    let g:zenburn_alternate_Error = 0+endif++if ! exists("g:zenburn_force_dark_Background")+    let g:zenburn_force_dark_Background = 0+endif++if ! exists("g:zenburn_alternate_Visual")+    let g:zenburn_alternate_Visual = 0+endif++if ! exists("g:zenburn_alternate_Include")+    let g:zenburn_alternate_Include = 0+endif++if ! exists("g:zenburn_unified_CursorColumn")+    let g:zenburn_unified_CursorColumn = 0+endif+" -----------------------------------------------++set background=dark+hi clear+if exists("syntax_on")+    syntax reset+endif+let g:colors_name="zenburn"++hi Boolean         guifg=#dca3a3+hi Character       guifg=#dca3a3 gui=bold+hi Comment         guifg=#7f9f7f gui=italic+hi Conditional     guifg=#f0dfaf gui=bold+hi Constant        guifg=#dca3a3 gui=bold+hi Cursor          guifg=#000d18 guibg=#8faf9f gui=bold+hi Debug           guifg=#bca3a3 gui=bold+hi Define          guifg=#ffcfaf gui=bold+hi Delimiter       guifg=#8f8f8f+hi DiffAdd         guifg=#709080 guibg=#313c36 gui=bold+hi DiffChange      guibg=#333333+hi DiffDelete      guifg=#333333 guibg=#464646+hi DiffText        guifg=#ecbcbc guibg=#41363c gui=bold+hi Directory       guifg=#dcdccc gui=bold+hi ErrorMsg        guifg=#80d4aa guibg=#2f2f2f gui=bold+hi Exception       guifg=#c3bf9f gui=bold+hi Float           guifg=#c0bed1+hi FoldColumn      guifg=#93b3a3 guibg=#3f4040+hi Folded          guifg=#93b3a3 guibg=#3f4040+hi Function        guifg=#efef8f+hi Identifier      guifg=#efdcbc+hi IncSearch       guibg=#f8f893 guifg=#385f38+hi Keyword         guifg=#f0dfaf gui=bold+hi Label           guifg=#dfcfaf gui=underline+hi LineNr          guifg=#9fafaf guibg=#262626+hi Macro           guifg=#ffcfaf gui=bold+hi ModeMsg         guifg=#ffcfaf gui=none+hi MoreMsg         guifg=#ffffff gui=bold+hi Number          guifg=#8cd0d3+hi Operator        guifg=#f0efd0+hi PreCondit       guifg=#dfaf8f gui=bold+hi PreProc         guifg=#ffcfaf gui=bold+hi Question        guifg=#ffffff gui=bold+hi Repeat          guifg=#ffd7a7 gui=bold+hi Search          guifg=#ffffe0 guibg=#284f28+hi SpecialChar     guifg=#dca3a3 gui=bold+hi SpecialComment  guifg=#82a282 gui=bold+hi Special         guifg=#cfbfaf+hi SpecialKey      guifg=#9ece9e+hi Statement       guifg=#e3ceab gui=none+hi StatusLine      guifg=#313633 guibg=#ccdc90+hi StatusLineNC    guifg=#2e3330 guibg=#88b090+hi StorageClass    guifg=#c3bf9f gui=bold+hi String          guifg=#cc9393+hi Structure       guifg=#efefaf gui=bold+hi Tag             guifg=#e89393 gui=bold+hi Title           guifg=#efefef gui=bold+hi Todo            guifg=#dfdfdf guibg=bg gui=bold+hi Typedef         guifg=#dfe4cf gui=bold+hi Type            guifg=#dfdfbf gui=bold+hi Underlined      guifg=#dcdccc gui=underline+hi VertSplit       guifg=#2e3330 guibg=#688060+hi VisualNOS       guifg=#333333 guibg=#f18c96 gui=bold,underline+hi WarningMsg      guifg=#ffffff guibg=#333333 gui=bold+hi WildMenu        guibg=#2c302d guifg=#cbecd0 gui=underline++hi SpellBad   guisp=#bc6c4c guifg=#dc8c6c+hi SpellCap   guisp=#6c6c9c guifg=#8c8cbc+hi SpellRare  guisp=#bc6c9c guifg=#bc8cbc+hi SpellLocal guisp=#7cac7c guifg=#9ccc9c++" Entering Kurt zone+if &t_Co > 255+    hi Boolean         ctermfg=181+    hi Character       ctermfg=181   cterm=bold+    hi Comment         ctermfg=108+    hi Conditional     ctermfg=223   cterm=bold+    hi Constant        ctermfg=181   cterm=bold+    hi Cursor          ctermfg=233   ctermbg=109     cterm=bold+    hi Debug           ctermfg=181   cterm=bold+    hi Define          ctermfg=223   cterm=bold+    hi Delimiter       ctermfg=245+    hi DiffAdd         ctermfg=66    ctermbg=237     cterm=bold+    hi DiffChange      ctermbg=236+    hi DiffDelete      ctermfg=236   ctermbg=238+    hi DiffText        ctermfg=217   ctermbg=237     cterm=bold+    hi Directory       ctermfg=188   cterm=bold+    hi ErrorMsg        ctermfg=115   ctermbg=236     cterm=bold+    hi Exception       ctermfg=249   cterm=bold+    hi Float           ctermfg=251+    hi FoldColumn      ctermfg=109   ctermbg=238+    hi Folded          ctermfg=109   ctermbg=238+    hi Function        ctermfg=228+    hi Identifier      ctermfg=223+    hi IncSearch       ctermbg=228   ctermfg=238+    hi Keyword         ctermfg=223   cterm=bold+    hi Label           ctermfg=187   cterm=underline+    hi LineNr          ctermfg=248   ctermbg=235+    hi Macro           ctermfg=223   cterm=bold+    hi ModeMsg         ctermfg=223   cterm=none+    hi MoreMsg         ctermfg=15    cterm=bold+    hi Number          ctermfg=116+    hi Operator        ctermfg=230+    hi PreCondit       ctermfg=180   cterm=bold+    hi PreProc         ctermfg=223   cterm=bold+    hi Question        ctermfg=15    cterm=bold+    hi Repeat          ctermfg=223   cterm=bold+    hi Search          ctermfg=230   ctermbg=236+    hi SpecialChar     ctermfg=181   cterm=bold+    hi SpecialComment  ctermfg=108   cterm=bold+    hi Special         ctermfg=181+    hi SpecialKey      ctermfg=151+    hi Statement       ctermfg=187   ctermbg=234     cterm=none+    hi StatusLine      ctermfg=236   ctermbg=186+    hi StatusLineNC    ctermfg=235   ctermbg=108+    hi StorageClass    ctermfg=249   cterm=bold+    hi String          ctermfg=174+    hi Structure       ctermfg=229   cterm=bold+    hi Tag             ctermfg=181   cterm=bold+    hi Title           ctermfg=7     ctermbg=234     cterm=bold+    hi Todo            ctermfg=108   ctermbg=234     cterm=bold+    hi Typedef         ctermfg=253   cterm=bold+    hi Type            ctermfg=187   cterm=bold+    hi Underlined      ctermfg=188   ctermbg=234     cterm=bold+    hi VertSplit       ctermfg=236   ctermbg=65+    hi VisualNOS       ctermfg=236   ctermbg=210     cterm=bold+    hi WarningMsg      ctermfg=15    ctermbg=236     cterm=bold+    hi WildMenu        ctermbg=236   ctermfg=194     cterm=bold++    " spellchecking, always "bright" background+    hi SpellLocal ctermfg=14  ctermbg=237+    hi SpellBad   ctermfg=9   ctermbg=237+    hi SpellCap   ctermfg=12  ctermbg=237+    hi SpellRare  ctermfg=13  ctermbg=237++    " pmenu+    hi PMenu      ctermfg=248  ctermbg=0+    hi PMenuSel   ctermfg=223 ctermbg=235++    if exists("g:zenburn_high_Contrast") && g:zenburn_high_Contrast+        hi Normal ctermfg=188 ctermbg=234+        hi NonText         ctermfg=238++        if exists("g:zenburn_color_also_Ignore") && g:zenburn_color_also_Ignore+            hi Ignore          ctermfg=238+        endif++        " hc mode, darker CursorLine, default 236+        hi CursorLine      ctermbg=233   cterm=none++        if exists("g:zenburn_unified_CursorColumn") && g:zenburn_unified_CursorColumn+            hi CursorColumn      ctermbg=233   cterm=none+        else+            hi CursorColumn      ctermbg=235   cterm=none+        endif+    else+        hi Normal ctermfg=188 ctermbg=237+        hi Cursor          ctermbg=109+        hi diffadd         ctermbg=237+        hi diffdelete      ctermbg=238+        hi difftext        ctermbg=237+        hi errormsg        ctermbg=237+        hi foldcolumn      ctermbg=238+        hi folded          ctermbg=238+        hi incsearch       ctermbg=228+        hi linenr          ctermbg=238+        hi search          ctermbg=238+        hi statement       ctermbg=237+        hi statusline      ctermbg=144+        hi statuslinenc    ctermbg=108+        hi title           ctermbg=237+        hi todo            ctermbg=237+        hi underlined      ctermbg=237+        hi vertsplit       ctermbg=65+        hi visualnos       ctermbg=210+        hi warningmsg      ctermbg=236+        hi wildmenu        ctermbg=236+        hi NonText         ctermfg=240++        if exists("g:zenburn_color_also_Ignore") && g:zenburn_color_also_Ignore+            hi Ignore          ctermfg=240+        endif+        +        " normal mode, lighter CursorLine+        hi CursorLine      ctermbg=238   cterm=none++        if exists("g:zenburn_unified_CursorColumn") && g:zenburn_unified_CursorColumn+            hi CursorColumn      ctermbg=238   cterm=none+        else+            hi CursorColumn      ctermbg=239   cterm=none+        endif+    endif++    if exists("g:zenburn_alternate_Error") && g:zenburn_alternate_Error+        " use more jumpy Error+        hi Error ctermfg=210 ctermbg=52 gui=bold+    else+        " default is something more zenburn-compatible+        hi Error ctermfg=228 ctermbg=95 gui=bold+    endif+endif++if exists("g:zenburn_force_dark_Background") && g:zenburn_force_dark_Background+    " Force dark background, because of a bug in VIM:  VIM sets background+    " automatically during "hi Normal ctermfg=X"; it misinterprets the high+    " value (234 or 237 above) as a light color, and wrongly sets background to+    " light.  See ":help highlight" for details.+    set background=dark+endif++if exists("g:zenburn_high_Contrast") && g:zenburn_high_Contrast+    " use new darker background+    hi Normal          guifg=#dcdccc guibg=#1f1f1f+    hi CursorLine      guibg=#121212 gui=bold+    if exists("g:zenburn_unified_CursorColumn") && g:zenburn_unified_CursorColumn+        hi CursorColumn    guibg=#121212 gui=bold+    else+        hi CursorColumn    guibg=#2b2b2b+    endif+    hi Pmenu           guibg=#242424 guifg=#ccccbc+    hi PMenuSel        guibg=#353a37 guifg=#ccdc90 gui=bold+    hi PmenuSbar       guibg=#2e3330 guifg=#000000+    hi PMenuThumb      guibg=#a0afa0 guifg=#040404+    hi MatchParen      guifg=#f0f0c0 guibg=#383838 gui=bold+    hi SignColumn      guifg=#9fafaf guibg=#181818 gui=bold+    hi TabLineFill     guifg=#cfcfaf guibg=#181818 gui=bold+    hi TabLineSel      guifg=#efefef guibg=#1c1c1b gui=bold+    hi TabLine         guifg=#b6bf98 guibg=#181818 gui=bold+    hi NonText         guifg=#404040 gui=bold+else+    " Original, lighter background+    hi Normal          guifg=#dcdccc guibg=#3f3f3f+    hi CursorLine      guibg=#434443+    if exists("g:zenburn_unified_CursorColumn") && g:zenburn_unified_CursorColumn+        hi CursorColumn    guibg=#434343+    else+        hi CursorColumn    guibg=#4f4f4f+    endif+    hi Pmenu           guibg=#2c2e2e guifg=#9f9f9f+    hi PMenuSel        guibg=#242424 guifg=#d0d0a0 gui=bold+    hi PmenuSbar       guibg=#2e3330 guifg=#000000+    hi PMenuThumb      guibg=#a0afa0 guifg=#040404+    hi MatchParen      guifg=#b2b2a0 guibg=#2e2e2e gui=bold+    hi SignColumn      guifg=#9fafaf guibg=#343434 gui=bold+    hi TabLineFill     guifg=#cfcfaf guibg=#353535 gui=bold+    hi TabLineSel      guifg=#efefef guibg=#3a3a39 gui=bold+    hi TabLine         guifg=#b6bf98 guibg=#353535 gui=bold+    hi NonText         guifg=#5b605e gui=bold+endif+++if exists("g:zenburn_alternate_Visual") && g:zenburn_alternate_Visual+    " Visual with more contrast, thanks to Steve Hall & Cream posse+    " gui=none fixes weird highlight problem in at least GVim 7.0.66, thanks to Kurt Maier+    hi Visual          guifg=#000000 guibg=#71d3b4 gui=none+    hi VisualNOS       guifg=#000000 guibg=#71d3b4 gui=none+else+    " use default visual+    hi Visual          guifg=#233323 guibg=#71d3b4 gui=none+    hi VisualNOS       guifg=#233323 guibg=#71d3b4 gui=none+endif++if exists("g:zenburn_alternate_Error") && g:zenburn_alternate_Error+    " use more jumpy Error+    hi Error        guifg=#e37170 guibg=#664040 gui=bold+else+    " default is something more zenburn-compatible+    hi Error        guifg=#e37170 guibg=#3d3535 gui=none+endif++if exists("g:zenburn_alternate_Include") && g:zenburn_alternate_Include+    " original setting+    hi Include      guifg=#ffcfaf gui=bold+else+    " new, less contrasted one+    hi Include      guifg=#dfaf8f gui=bold+endif++if exists("g:zenburn_color_also_Ignore") && g:zenburn_color_also_Ignore+    " color the Ignore groups+    " note: if you get strange coloring for your files, turn this off (unlet)+    hi Ignore guifg=#545a4f+endif++" TODO check for more obscure syntax groups that they're ok

.vim/doc/http-client.txt

new file mode 100644@@ -0,0 +1,146 @@+http-client.txt++       _      _    _                       _  _               _           ~+      | |    | |  | |                     | |(_)             | |          ~+      | |__  | |_ | |_  _ __  ______  ___ | | _   ___  _ __  | |_         ~+      | '_ \ | __|| __|| '_ \|______|/ __|| || | / _ \| '_ \ | __|        ~+      | | | || |_ | |_ | |_) |      | (__ | || ||  __/| | | || |_         ~+      |_| |_| \__| \__|| .__/        \___||_||_| \___||_| |_| \__|        ~+                       | |                                                ~+                       |_|                                                ~+++==============================================================================+CONTENTS                                                  |http-client-contents|++                     Introduction  |http-client-introduction|+                              Use  |http-client-use|+                    Configuration  |http-client-configuration|+                     Installation  |http-client-installation|++==============================================================================+Introduction                              *http-client* *http-client-introduction*++With vim-http-client, you can make HTTP calls from Vim with the HTTP format+you already know, rather than learning new command line tools fraught with+complex flags and escaped quotes. You can also parse the results right in+Vim, syntax highlighted the way you expect!++==============================================================================+Use                                                            *http-client-use*++Put your cursor anywhere in a newline-delimited block of text and hit+`<Leader>tt`. The text will be parsed and executed as a HTTP request, and its+results will appear in a split. You can also directly invoke the HTTP client+with :call HTTPClientDoRequest()<cr>. Here's the format of a request: >++    # Comments start with #.+    # First request.+    <method> <url>+    <header-name-1>: <header-value-1>+    <header-name-2>: <header-value-2>+    ...+    <header-name-n>: <header-value-n>+    <body>++    # Second request.+    <method> <url>+    <header-name-1>: <header-value-1>+    <header-name-2>: <header-value-2>+    ...+    <header-name-n>: <header-value-n>+    <body>++Depending on where you put your cursor, the first or second request will+execute. You can also substitute variables anywhere in the request: >++    # Second request.+    # :foo = bar+    # :asdf = 3+    POST http://httpbin.org/post+    { "data": ":foo" }++Each variable lives in a separate commented line. Variables beginning with :+are request variables only considered in the request block they live in.+Variables beginning with $ are global variables that affect all requests in+the entire buffer. Local variables always override global variables. >++    # $endpoint = http://httpbin.org++    GET $endpoint/get++    # :request_var = 3+    POST $endpoint/post++    GET $endpoint/resource++If you'd like to pass form-encoded data, set your body like this: >++    <key-1>=<value-1>+    <key-2>=<value-2>+    ...+    <key-n>=<value-n>++See `examples/examples.txt` for more examples.++The output appears in a new split. Syntax highlighting is interpreted from the+Content-Type header of the result. It currently supports XML, JSON, and HTML;+all others will get ft=text.++==============================================================================+Configuration                                        *http-client-configuration*+                                                     *g:http_client_bind_hotkey*+                                                         *g:http_client_json_ft*+                                                 *g:http_client_json_escape_utf*+                                                   *g:http_client_result_vsplit*++g:http_client_bind_hotkey (default 1)++Controls whether or not `<Leader>tt` will run the HTTP client.++g:http_client_json_ft (default 'javascript')++Sets the vim filetype when vim-http-client detects a JSON response. Though+JSON-specific syntax highlighting provides prettier highlighting than the+default Javascript highlighting, Javascript highlighting comes with Vim and is+therefore a safer default. Use this setting to configure the filetype to your+liking.++g:http_client_json_escape_utf (default 1)++By default json.dumps will escape any utf8 characters beyond ascii range. This+option (if set to 0) allows you to get the actual special characters instead+of \uxxxx encoded ones.++g:http_client_result_vsplit (default 1)++By default the request result appears in a vertical split. Setting this option+to 0 displays the result in a horizontal split.++g:http_client_focus_output_window (default 1)++By default the focus will go to the output window. If set to 0 the focus will+return to the window with request definitions.++==============================================================================+Installation                                          *http-client-installation*++vim-http-client requires Vim compiled with python support and the python+requests library.++To check if you have Python support, try: >++    vim --version | grep +python.++To check if you have the requests library, try: >++    python -c 'import requests'++If you get an error, try pip install requests to get the library. Many distros+ship Python support with Vim and the requests library with Python.++Once the two are installed, install the plugin into+~/.vim/plugin/http-client.vim or with your favorite Vim plugin manager.++==============================================================================+vim:tw=78:sw=4:ts=8:ft=help:norl:

.vim/doc/surround.txt

new file mode 100644@@ -0,0 +1,222 @@+*surround.txt*  Plugin for deleting, changing, and adding "surroundings"++Author:  Tim Pope <vimNOSPAM@tpope.info>        *surround-author*+License: Same terms as Vim itself (see |license|)++This plugin is only available if 'compatible' is not set.++INTRODUCTION                                    *surround*++This plugin is a tool for dealing with pairs of "surroundings."  Examples+of surroundings include parentheses, quotes, and HTML tags.  They are+closely related to what Vim refers to as |text-objects|.  Provided+are mappings to allow for removing, changing, and adding surroundings.++Details follow on the exact semantics, but first, consider the following+examples.  An asterisk (*) is used to denote the cursor position.++  Old text                  Command     New text ~+  "Hello *world!"           ds"         Hello world!+  [123+4*56]/2              cs])        (123+456)/2+  "Look ma, I'm *HTML!"     cs"<q>      <q>Look ma, I'm HTML!</q>+  if *x>3 {                 ysW(        if ( x>3 ) {+  my $str = *whee!;         vlllls'     my $str = 'whee!';++While a few features of this plugin will work in older versions of Vim,+Vim 7 is recommended for full functionality.++MAPPINGS                                        *surround-mappings*++Delete surroundings is *ds* .  The next character given determines the target+to delete.  The exact nature of the target is explained in |surround-targets|+but essentially it is the last character of a |text-object|.  This mapping+deletes the difference between the "i"nner object and "a"n object.  This is+easiest to understand with some examples:++  Old text                  Command     New text ~+  "Hello *world!"           ds"         Hello world!+  (123+4*56)/2              ds)         123+456/2+  <div>Yo!*</div>           dst         Yo!++Change surroundings is *cs* .  It takes two arguments, a target like with+|ds|, and a replacement.  Details about the second argument can be found+below in |surround-replacements|.  Once again, examples are in order.++  Old text                  Command     New text ~+  "Hello *world!"           cs"'        'Hello world!'+  "Hello *world!"           cs"<q>      <q>Hello world!</q>+  (123+4*56)/2              cs)]        [123+456]/2+  (123+4*56)/2              cs)[        [ 123+456 ]/2+  <div>Yo!*</div>           cst<p>      <p>Yo!</p>++*ys* takes a valid Vim motion or text object as the first object, and wraps+it using the second argument as with |cs|.  (Unfortunately there's no good+mnemonic for "ys".)++  Old text                  Command     New text ~+  Hello w*orld!             ysiw)       Hello (world)!++As a special case, *yss* operates on the current line, ignoring leading+whitespace.++  Old text                  Command     New text ~+      Hello w*orld!         yssB            {Hello world!}++There is also *yS* and *ySS* which indent the surrounded text and place it+on a line of its own.++In visual mode, a simple "s" with an argument wraps the selection.  This is+referred to as the *vS* mapping, although ordinarily there will be+additional keystrokes between the v and s.  In linewise visual mode, the+surroundings are placed on separate lines and indented.  In blockwise visual+mode, each line is surrounded.++A "gS" in visual mode, known as *vgS* , behaves similarly.  In linewise visual+mode, the automatic indenting is surpressed.  In blockwise visual mode, this+enables surrounding past the end of the like with 'virtualedit' set (there+seems to be no way in Vim Script to differentiate between a jagged end of line+selection and a virtual block selected past the end of the line, so two maps+were needed).++Additionally, there is a legacy "s" or *vs* mapping which is basically the+same as |vS|.  Due to popular demand of wanting to use "s" as Vim does to mean+replacing the selection (also available as "c"), this mapping is going away.+If you were one of these people and would like to disable "s" with the current+release, indicate this to surround.vim by assigning the "s" mapping to+something else.+>+  xmap <Leader>s <Plug>Vsurround+<+                                                *i_CTRL-G_s* *i_CTRL-G_S*+Finally, there is an experimental insert mode mapping on <C-G>s and <C-S>.+Beware that the latter won't work on terminals with flow control (if you+accidentally freeze your terminal, use <C-Q> to unfreeze it).  The mapping+inserts the specified surroundings and puts the cursor between them.  If,+immediately after the mapping and before the replacement, a second <C-S> or+carriage return is pressed, the prefix, cursor, and suffix will be placed on+three separate lines.  <C-G>S (not <C-G>s) also exhibits this behavior.++TARGETS                                         *surround-targets*++The |ds| and |cs| commands both take a target as their first argument.  The+possible targets are based closely on the |text-objects| provided by Vim.+In order for a target to work, the corresponding text object must be+supported in the version of Vim used (Vim 7 adds several text objects, and+thus is highly recommended).  All targets are currently just one character.++Eight punctuation marks, (, ), {, }, [, ], <, and >, represent themselves+and their counterparts.  If the opening mark is used, contained whitespace is+also trimmed.  The targets b, B, r, and a are aliases for ), }, ], and >+(the first two mirror Vim; the second two are completely arbitrary and+subject to change).++Three quote marks, ', ", `, represent themselves, in pairs.  They are only+searched for on the current line.++A t is a pair of HTML or XML tags.  See |tag-blocks| for details.  Remember+that you can specify a numerical argument if you want to get to a tag other+than the innermost one.++The letters w, W, and s correspond to a |word|, a |WORD|, and a |sentence|,+respectively.  These are special in that they have nothing to delete, and+used with |ds| they are a no-op.  With |cs|, one could consider them a+slight shortcut for ysi (cswb == ysiwb, more or less).++A p represents a |paragraph|.  This behaves similarly to w, W, and s above;+however, newlines are sometimes added and/or removed.++REPLACEMENTS                                    *surround-replacements*++A replacement argument is a single character, and is required by |cs|, |ys|,+and |vs|.  Undefined replacement characters (with the exception of alphabetic+characters) default to placing themselves at the beginning and end of the+destination, which can be useful for characters like / and |.++If either ), }, ], or > is used, the text is wrapped in the appropriate pair+of characters.  Similar behavior can be found with (, {, and [ (but not <),+which append an additional space to the inside.  Like with the targets above,+b, B, r, and a are aliases for ), }, ], and >.  To fulfill the common need for+code blocks in C-style languages, <C-}> (which is really <C-]>) adds braces on+lines separate from the content.++If t or < is used, Vim prompts for an HTML/XML tag to insert.  You may specify+attributes here and they will be stripped from the closing tag.  End your+input by pressing <CR> or >.  If <C-T> is used, the tags will appear on lines+by themselves.++A deprecated replacement of a LaTeX environment is provided on \ and l.  The+name of the environment and any arguments will be input from a prompt.  This+will be removed once a more fully functional customization system is+implemented.  The following shows the resulting environment from+csp\tabular}{lc<CR>+>+  \begin{tabular}{lc}+  \end{tabular}+<+CUSTOMIZING                                     *surround-customizing*++The following adds a potential replacement on "-" (ASCII 45) in PHP files.+(To determine the ASCII code to use, :echo char2nr("-")).  The carriage+return will be replaced by the original text.+>+  autocmd FileType php let b:surround_45 = "<?php \r ?>"+<+This can be used in a PHP file as in the following example.++  Old text                  Command     New text ~+  print "Hello *world!"     yss-        <?php print "Hello world!" ?>++Additionally, one can use a global variable for globally available+replacements.+>+  let g:surround_45 = "<% \r %>"+  let g:surround_61 = "<%= \r %>"+<+Advanced, experimental, and subject to change:  One can also prompt for+replacement text.  The syntax for this is to surround the replacement in pairs+of low numbered control characters.  If this sounds confusing, that's because+it is (but it makes the parsing easy).  Consider the following example for a+LaTeX environment on the "l" replacement.+>+  let g:surround_108 = "\\begin{\1environment: \1}\r\\end{\1\1}"+<+When this replacement is used,  the user is prompted with an "environment: "+prompt for input.  This input is inserted between each set of \1's.+Additional inputs up to \7 can be used.++Furthermore, one can specify a regular expression substitution to apply.+>+  let g:surround_108 = "\\begin{\1environment: \1}\r\\end{\1\r}.*\r\1}"+<+This will remove anything after the first } in the input when the text is+placed within the \end{} slot.  The first \r marks where the pattern begins,+and the second where the replacement text begins.++Here's a second example for creating an HTML <div>.  The substitution cleverly+prompts for an id, but only adds id="" if it is non-blank.  You may have to+read this one a few times slowly before you understand it.+>+  let g:surround_{char2nr("d")} = "<div\1id: \r..*\r id=\"&\"\1>\r</div>"+<+Inputting text replacements is a proof of concept at this point. The ugly,+unintuitive interface and the brevity of the documentation reflect this.++Finally, It is possible to always append a string to surroundings in insert+mode (and only insert mode).  This is useful with certain plugins and mappings+that allow you to jump to such markings.+>+  let g:surround_insert_tail = "<++>"+<+ISSUES                                          *surround-issues*++Vim could potentially get confused when deleting/changing occurs at the very+end of the line.  Please report any repeatable instances of this.++Do we need to use |inputsave()|/|inputrestore()| with the tag replacement?++Indenting is handled haphazardly.  Need to decide the most appropriate+behavior and implement it.  Right now one can do :let b:surround_indent = 1+(or the global equivalent) to enable automatic re-indenting by Vim via |=|;+should this be the default?++ vim:tw=78:ts=8:ft=help:norl:

.vim/eightspaces.vim

new file mode 100644@@ -0,0 +1,3 @@+setlocal tabstop=8+setlocal shiftwidth=8+setlocal softtabstop=8

.vim/extras/flow.vim

new file mode 100644@@ -0,0 +1,92 @@+syntax region  jsFlowDefinition     contained                        start=/:/    end=/\%(\s*[,=;)\n]\)\@=/ contains=@jsFlowCluster containedin=jsParen+syntax region  jsFlowArgumentDef    contained                        start=/:/    end=/\%(\s*[,)]\|=>\@!\)\@=/ contains=@jsFlowCluster+syntax region  jsFlowArray          contained matchgroup=jsFlowNoise start=/\[/   end=/\]/        contains=@jsFlowCluster+syntax region  jsFlowObject         contained matchgroup=jsFlowNoise start=/{/    end=/}/         contains=@jsFlowCluster+syntax region  jsFlowParens         contained matchgroup=jsFlowNoise start=/(/  end=/)/ contains=@jsFlowCluster+syntax match   jsFlowNoise          contained /[:;,<>]/+syntax keyword jsFlowType           contained boolean number string null void any mixed JSON array Function object array bool class+syntax keyword jsFlowTypeof         contained typeof skipempty skipempty nextgroup=jsFlowTypeCustom,jsFlowType+syntax match   jsFlowTypeCustom     contained /[0-9a-zA-Z_.]*/ skipwhite skipempty nextgroup=jsFlowGroup+syntax region  jsFlowGroup          contained matchgroup=jsFlowNoise start=/</ end=/>/ contains=@jsFlowCluster+syntax region  jsFlowArrowArguments contained matchgroup=jsFlowNoise start=/(/  end=/)\%(\s*=>\)\@=/ oneline skipwhite skipempty nextgroup=jsFlowArrow contains=@jsFlowCluster+syntax match   jsFlowArrow          contained /=>/ skipwhite skipempty nextgroup=jsFlowType,jsFlowTypeCustom,jsFlowParens+syntax match   jsFlowMaybe          contained /?/ skipwhite skipempty nextgroup=jsFlowType,jsFlowTypeCustom,jsFlowParens,jsFlowArrowArguments,jsFlowObject,jsFlowReturnObject+syntax match   jsFlowObjectKey      contained /[0-9a-zA-Z_$?]*\(\s*:\)\@=/ contains=jsFunctionKey,jsFlowMaybe skipwhite skipempty nextgroup=jsObjectValue containedin=jsObject+syntax match   jsFlowOrOperator     contained /|/ skipwhite skipempty nextgroup=@jsFlowCluster+syntax keyword jsFlowImportType     contained type skipwhite skipempty nextgroup=jsModuleAsterisk,jsModuleKeyword,jsModuleGroup+syntax match   jsFlowWildcard       contained /*/++syntax match   jsFlowReturn         contained /:\s*/ contains=jsFlowNoise skipwhite skipempty nextgroup=@jsFlowReturnCluster+syntax region  jsFlowReturnObject   contained matchgroup=jsFlowNoise start=/{/    end=/}/  contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturnOrOp+syntax region  jsFlowReturnArray    contained matchgroup=jsFlowNoise start=/\[/   end=/\]/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturnOrOp+syntax region  jsFlowReturnParens   contained matchgroup=jsFlowNoise start=/(/    end=/)/  contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturnOrOp+syntax match   jsFlowReturnKeyword  contained /\k\+/ contains=jsFlowType,jsFlowTypeCustom skipwhite skipempty nextgroup=jsFlowReturnGroup,jsFuncBlock,jsFlowReturnOrOp+syntax match   jsFlowReturnMaybe    contained /?/ skipwhite skipempty nextgroup=jsFlowReturnKeyword+syntax region  jsFlowReturnGroup    contained matchgroup=jsFlowNoise start=/</ end=/>/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturnOrOp+syntax match   jsFlowReturnOrOp     contained /\s*|\s*/ skipwhite skipempty nextgroup=@jsFlowReturnCluster+syntax match   jsFlowWildcardReturn contained /*/ skipwhite skipempty nextgroup=jsFuncBlock++syntax region  jsFlowFunctionGroup  contained matchgroup=jsFlowNoise start=/</ end=/>/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncArgs+syntax region  jsFlowClassGroup     contained matchgroup=jsFlowNoise start=/</ end=/>/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsClassBlock++syntax region  jsFlowTypeStatement                                   start=/type\%(\s\+\k\)\@=/    end=/=\@=/ contains=jsFlowTypeOperator oneline skipwhite skipempty nextgroup=jsFlowTypeValue keepend+syntax region  jsFlowTypeValue      contained                        start=/=/       end=/[;\n]/ contains=@jsExpression,jsFlowGroup,jsFlowMaybe+syntax match   jsFlowTypeOperator   contained /=/+syntax keyword jsFlowTypeKeyword    contained type++syntax keyword jsFlowDeclare                  declare skipwhite skipempty nextgroup=jsFlowTypeStatement,jsClassDefinition,jsStorageClass,jsFlowModule,jsFlowInterface+syntax match   jsFlowClassProperty  contained /\<[0-9a-zA-Z_$]*\>:\@=/ skipwhite skipempty nextgroup=jsFlowClassDef containedin=jsClassBlock+syntax region  jsFlowClassDef       contained start=/:/    end=/\%(\s*[,=;)\n]\)\@=/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsClassValue++syntax region  jsFlowModule         contained start=/module/ end=/{\@=/ skipempty skipempty nextgroup=jsFlowDeclareBlock contains=jsString+syntax region  jsFlowInterface      contained start=/interface/ end=/{\@=/ skipempty skipempty nextgroup=jsFlowInterfaceBlock contains=@jsFlowCluster+syntax region  jsFlowDeclareBlock   contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=jsFlowDeclare,jsFlowNoise++syntax region jsFlowInterfaceBlock  contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectMethodType,jsGenerator,jsComment,jsObjectStringKey,jsSpreadExpression,jsFlowNoise keepend++syntax cluster jsFlowReturnCluster            contains=jsFlowNoise,jsFlowReturnObject,jsFlowReturnArray,jsFlowReturnKeyword,jsFlowReturnGroup,jsFlowReturnMaybe,jsFlowReturnOrOp,jsFlowWildcardReturn+syntax cluster jsFlowCluster                  contains=jsFlowArray,jsFlowObject,jsFlowNoise,jsFlowTypeof,jsFlowType,jsFlowGroup,jsFlowArrowArguments,jsFlowMaybe,jsFlowParens,jsFlowOrOperator,jsFlowWildcard++if version >= 508 || !exists("did_javascript_syn_inits")+  if version < 508+    let did_javascript_syn_inits = 1+    command -nargs=+ HiLink hi link <args>+  else+    command -nargs=+ HiLink hi def link <args>+  endif+  HiLink jsFlowDefinition         PreProc+  HiLink jsFlowClassDef           jsFlowDefinition+  HiLink jsFlowArgumentDef        jsFlowDefinition+  HiLink jsFlowType               Type+  HiLink jsFlowTypeCustom         PreProc+  HiLink jsFlowTypeof             PreProc+  HiLink jsFlowArray              PreProc+  HiLink jsFlowObject             PreProc+  HiLink jsFlowParens             PreProc+  HiLink jsFlowGroup              PreProc+  HiLink jsFlowReturn             PreProc+  HiLink jsFlowReturnObject       jsFlowReturn+  HiLink jsFlowReturnArray        jsFlowArray+  HiLink jsFlowReturnParens       jsFlowParens+  HiLink jsFlowReturnGroup        jsFlowGroup+  HiLink jsFlowFunctionGroup      PreProc+  HiLink jsFlowClassGroup         PreProc+  HiLink jsFlowArrowArguments     PreProc+  HiLink jsFlowArrow              PreProc+  HiLink jsFlowTypeStatement      PreProc+  HiLink jsFlowTypeKeyword        PreProc+  HiLink jsFlowTypeOperator       PreProc+  HiLink jsFlowMaybe              PreProc+  HiLink jsFlowReturnMaybe        PreProc+  HiLink jsFlowClassProperty      jsClassProperty+  HiLink jsFlowDeclare            PreProc+  HiLink jsFlowModule             PreProc+  HiLink jsFlowInterface          PreProc+  HiLink jsFlowNoise              Noise+  HiLink jsFlowObjectKey          jsObjectKey+  HiLink jsFlowOrOperator         PreProc+  HiLink jsFlowReturnOrOp         jsFlowOrOperator+  HiLink jsFlowWildcard           PreProc+  HiLink jsFlowWildcardReturn     PreProc+  delcommand HiLink+endif

.vim/extras/jsdoc.vim

new file mode 100644@@ -0,0 +1,39 @@+"" syntax coloring for javadoc comments (HTML)+syntax region jsComment    matchgroup=jsComment start="/\*\s*"  end="\*/" contains=jsDocTags,jsCommentTodo,jsCvsTag,@jsHtml,@Spell fold++" tags containing a param+syntax match  jsDocTags         contained "@\(alias\|api\|augments\|borrows\|class\|constructs\|default\|defaultvalue\|emits\|exception\|exports\|extends\|fires\|kind\|link\|listens\|member\|member[oO]f\|mixes\|module\|name\|namespace\|requires\|template\|throws\|var\|variation\|version\)\>" skipwhite nextgroup=jsDocParam+" tags containing type and param+syntax match  jsDocTags         contained "@\(arg\|argument\|cfg\|param\|property\|prop\|typedef\)\>" skipwhite nextgroup=jsDocType+" tags containing type but no param+syntax match  jsDocTags         contained "@\(callback\|define\|enum\|external\|implements\|this\|type\|return\|returns\)\>" skipwhite nextgroup=jsDocTypeNoParam+" tags containing references+syntax match  jsDocTags         contained "@\(lends\|see\|tutorial\)\>" skipwhite nextgroup=jsDocSeeTag+" other tags (no extra syntax)+syntax match  jsDocTags         contained "@\(abstract\|access\|accessor\|author\|classdesc\|constant\|const\|constructor\|copyright\|deprecated\|desc\|description\|dict\|event\|example\|file\|file[oO]verview\|final\|function\|global\|ignore\|inheritDoc\|inner\|instance\|interface\|license\|localdoc\|method\|mixin\|nosideeffects\|override\|overview\|preserve\|private\|protected\|public\|readonly\|since\|static\|struct\|todo\|summary\|undocumented\|virtual\)\>"++syntax region jsDocType         contained matchgroup=jsDocTypeBrackets start="{" end="}" contains=jsDocTypeRecord oneline skipwhite nextgroup=jsDocParam+syntax match  jsDocType         contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" skipwhite nextgroup=jsDocParam+syntax region jsDocTypeRecord   contained start=/{/ end=/}/ contains=jsDocTypeRecord extend+syntax region jsDocTypeRecord   contained start=/\[/ end=/\]/ contains=jsDocTypeRecord extend+syntax region jsDocTypeNoParam  contained start="{" end="}" oneline+syntax match  jsDocTypeNoParam  contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+"+syntax match  jsDocParam        contained "\%(#\|\$\|-\|'\|\"\|{.\{-}}\|\w\|\.\|:\|\/\|\[.\{-}]\|=\)\+"+syntax region jsDocSeeTag       contained matchgroup=jsDocSeeTag start="{" end="}" contains=jsDocTags++if version >= 508 || !exists("did_javascript_syn_inits")+  if version < 508+    let did_javascript_syn_inits = 1+    command -nargs=+ HiLink hi link <args>+  else+    command -nargs=+ HiLink hi def link <args>+  endif+  HiLink jsDocTags              Special+  HiLink jsDocSeeTag            Function+  HiLink jsDocType              Type+  HiLink jsDocTypeBrackets      jsDocType+  HiLink jsDocTypeRecord        jsDocType+  HiLink jsDocTypeNoParam       Type+  HiLink jsDocParam             Label+  delcommand HiLink+endif

.vim/extras/ngdoc.vim

new file mode 100644@@ -0,0 +1,3 @@+syntax match  jsDocTags         contained /@\(link\|method[oO]f\|ngdoc\|ng[iI]nject\|restrict\)/ nextgroup=jsDocParam skipwhite+syntax match  jsDocType         contained "\%(#\|\$\|\w\|\"\|-\|\.\|:\|\/\)\+" nextgroup=jsDocParam skipwhite+syntax match  jsDocParam        contained "\%(#\|\$\|\w\|\"\|-\|\.\|:\|{\|}\|\/\|\[\|]\|=\)\+"

.vim/filetype.vim

new file mode 100644@@ -0,0 +1,65 @@+if exists("did_load_filetypes")+    finish+endif++augroup filetypedetect+  au! BufRead,BufNewFile+    \ *.go+    \ setfiletype go++  au! BufRead,BufNewFile+    \ *.rs+    \ setfiletype rust++  au! BufRead,BufNewFile+    \ *.hsc+    \ setfiletype haskell++  au! BufRead,BufNewFile+    \ *.t+    \ setfiletype lua++  au! BufRead,BufNewFile+    \ *.md+    \ setfiletype pandoc.markdown++  au! BufRead,BufNewFile+    \ *.mako+    \ setfiletype mako++  au! BufRead,BufNewFile+    \ *.wini+    \ setfiletype dosini++  au! BufRead,BufNewFile+    \ *.tpl+    \ setfiletype mako++  au! BufRead,BufNewFile+    \ *.h+    \ setfiletype c+  au! BufRead,BufNewFile+    \ *.imp,*.scm+    \ setfiletype lisp++  au! BufRead,BufNewFile+    \ *.grades+    \ setfiletype utln++  au! BufRead,BufNewFile+    \ mkfile*,*.mk+    \ setfiletype make++  au! BufRead,BufNewFile+    \ *.sig+    \ setfiletype sml++  au! BufRead,BufNew+    \ *.djt.html+    \ setfiletype htmldjango++  au! BufRead,BufNewFile+    \ *.tsv+    \ setfiletype tsv+augroup END+

.vim/fourspaces.vim

new file mode 100644@@ -0,0 +1,3 @@+setlocal tabstop=4+setlocal shiftwidth=4+setlocal softtabstop=4

.vim/ftplugin/dosini.vim

new file mode 100644@@ -0,0 +1,19 @@+" Vim filetype plugin file+" Language:         Configuration File (ini file) for MSDOS/MS Windows+" Maintainer:       Nikolai Weibull <now@bitwi.se>+" Latest Revision:  2008-07-09++if exists("b:did_ftplugin")+  finish+endif+let b:did_ftplugin = 1++let s:cpo_save = &cpo+set cpo&vim++let b:undo_ftplugin = "setl com< cms< fo<"++setlocal comments=:# commentstring=;\ %s formatoptions-=t formatoptions+=croql++let &cpo = s:cpo_save+unlet s:cpo_save

.vim/ftplugin/sml.vim

new file mode 100644@@ -0,0 +1,22 @@+if exists("loaded_matchit")+    let b:match_ignorecase=0+    let old = exists('b:match_words') ? b:match_words.',' : ''++     " 1) structure .. end+     " 2) let .. in .. end+     " 3) signature .. end+     " 3) local .. end+     " TODO+     let b:match_words =+     \  '\<\%(let\|local\|structure\|signature\)\>:\<in\>:\<end\>'++     " jump to next functions+     let b:match_words .=+     \  ',^\<fun\>:^\<and\|fun\|val\>:DOES_NOT_EXIST'++     " () [] {} <>+     " why do I have to add them ? Shouldn't they be default?+     let b:match_words .=+     \  ',(:),\[:\],{:},<:>'+endif+

.vim/indent/javascript.vim

new file mode 100644@@ -0,0 +1,365 @@+" Vim indent file+" Language: Javascript+" Maintainer: Chris Paul ( https://github.com/bounceme )+" URL: https://github.com/pangloss/vim-javascript+" Last Change: December 31, 2016++" Only load this indent file when no other was loaded.+if exists('b:did_indent')+  finish+endif+let b:did_indent = 1++" Now, set up our indentation expression and keys that trigger it.+setlocal indentexpr=GetJavascriptIndent()+setlocal autoindent nolisp nosmartindent+setlocal indentkeys+=0],0)++let b:undo_indent = 'setlocal indentexpr< smartindent< autoindent< indentkeys<'++" Only define the function once.+if exists('*GetJavascriptIndent')+  finish+endif++let s:cpo_save = &cpo+set cpo&vim++" Get shiftwidth value+if exists('*shiftwidth')+  function s:sw()+    return shiftwidth()+  endfunction+else+  function s:sw()+    return &sw+  endfunction+endif++" searchpair() wrapper+if has('reltime')+  function s:GetPair(start,end,flags,skip,time,...)+    return searchpair('\m'.a:start,'','\m'.a:end,a:flags,a:skip,max([prevnonblank(v:lnum) - 2000,0] + a:000),a:time)+  endfunction+else+  function s:GetPair(start,end,flags,skip,...)+    return searchpair('\m'.a:start,'','\m'.a:end,a:flags,a:skip,max([prevnonblank(v:lnum) - 1000,get(a:000,1)]))+  endfunction+endif++" Regex of syntax group names that are or delimit string or are comments.+let s:syng_strcom = 'string\|comment\|regex\|special\|doc\|template'+let s:syng_str = 'string\|template'+let s:syng_com = 'comment\|doc'+" Expression used to check whether we should skip a match with searchpair().+let s:skip_expr = "synIDattr(synID(line('.'),col('.'),0),'name') =~? '".s:syng_strcom."'"++function s:skip_func()+  if !s:free || search('\m`\|\*\/','nW',s:looksyn)+    let s:free = !eval(s:skip_expr)+    let s:looksyn = s:free ? line('.') : s:looksyn+    return !s:free+  endif+  let s:looksyn = line('.')+  return (search('\m[''"]\|\\$','nW',s:looksyn) || getline('.') =~ '\/\%<'.(col('.')+1).'c.\{-}\/') &&+        \ eval(s:skip_expr)+endfunction++function s:alternatePair(stop)+  let pos = getpos('.')[1:2]+  while search('\m[][(){}]','bW',a:stop)+    if !s:skip_func()+      let idx = stridx('])}',s:looking_at())+      if idx + 1+        if !s:GetPair(['\[','(','{'][idx], '])}'[idx],'bW','s:skip_func()',2000,a:stop)+          break+        endif+      else+        return+      endif+    endif+  endwhile+  call call('cursor',pos)+endfunction++function s:save_pos(f,...)+  let l:pos = getpos('.')[1:2]+  let ret = call(a:f,a:000)+  call call('cursor',l:pos)+  return ret+endfunction++function s:syn_at(l,c)+  return synIDattr(synID(a:l,a:c,0),'name')+endfunction++function s:looking_at()+  return getline('.')[col('.')-1]+endfunction++function s:token()+  return s:looking_at() =~ '\k' ? expand('<cword>') : s:looking_at()+endfunction++function s:b_token()+  if s:looking_at() =~ '\k'+    call search('\m\<','cbW')+  endif+  return search('\m\S','bW')+endfunction++function s:previous_token()+  let l:n = line('.')+  while s:b_token()+    if (s:looking_at() == '/' || line('.') != l:n && search('\m\/\/','nbW',+          \ line('.'))) && s:syn_at(line('.'),col('.')) =~? s:syng_com+      call search('\m\_[^/]\zs\/[/*]','bW')+    else+      return s:token()+    endif+  endwhile+  return ''+endfunction++function s:others(p)+  return "((line2byte(line('.')) + col('.')) <= ".(line2byte(a:p[0]) + a:p[1]).") || ".s:skip_expr+endfunction++function s:tern_skip(p)+  return s:GetPair('{','}','nbW',s:others(a:p),200,a:p[0]) > 0+endfunction++function s:tern_col(p)+  return s:GetPair('?',':\@<!::\@!','nbW',s:others(a:p)+        \ .' || s:tern_skip('.string(a:p).')',200,a:p[0]) > 0+endfunction++function s:label_col()+  let pos = getpos('.')[1:2]+  let [s:looksyn,s:free] = pos+  call s:alternatePair(0)+  if s:save_pos('s:IsBlock')+    let poss = getpos('.')[1:2]+    return call('cursor',pos) || !s:tern_col(poss)+  elseif s:looking_at() == ':'+    return !s:tern_col([0,0])+  endif+endfunction++" configurable regexes that define continuation lines, not including (, {, or [.+let s:opfirst = '^' . get(g:,'javascript_opfirst',+      \ '\%([<>=,?^%|*/&]\|\([-.:+]\)\1\@!\|!=\|in\%(stanceof\)\=\>\)')+let s:continuation = get(g:,'javascript_continuation',+      \ '\%([<=,.~!?/*^%|&:]\|+\@<!+\|-\@<!-\|=\@<!>\|\<\%(typeof\|delete\|void\|in\|instanceof\)\)') . '$'++function s:continues(ln,con)+  return !cursor(a:ln, match(' '.a:con,s:continuation)) &&+        \ eval((['s:syn_at(line("."),col(".")) !~? "regex"'] ++        \ repeat(['s:previous_token() != "."'],5) + [1])[+        \ index(split('/ typeof in instanceof void delete'),s:token())])+endfunction++" get the line of code stripped of comments and move cursor to the last+" non-comment char.+function s:Trim(ln)+  let pline = substitute(getline(a:ln),'\s*$','','')+  let l:max = max([match(pline,'.*[^/]\zs\/[/*]'),0])+  while l:max && s:syn_at(a:ln, strlen(pline)) =~? s:syng_com+    let pline = substitute(strpart(pline, 0, l:max),'\s*$','','')+    let l:max = max([match(pline,'.*[^/]\zs\/[/*]'),0])+  endwhile+  return cursor(a:ln,strlen(pline)) ? pline : pline+endfunction++" Find line above 'lnum' that isn't empty or in a comment+function s:PrevCodeLine(lnum)+  let l:n = prevnonblank(a:lnum)+  while l:n+    if getline(l:n) =~ '^\s*\/[/*]' +      if (stridx(getline(l:n),'`') > 0 || getline(l:n-1)[-1:] == '\') &&+            \ s:syn_at(l:n,1) =~? s:syng_str+        return l:n+      endif+      let l:n = prevnonblank(l:n-1)+    elseif s:syn_at(l:n,1) =~? s:syng_com+      let l:n = s:save_pos('eval',+            \ 'cursor('.l:n.',1) + search(''\m\/\*'',"bW")')+    else+      return l:n+    endif+  endwhile+endfunction++" Check if line 'lnum' has a balanced amount of parentheses.+function s:Balanced(lnum)+  let l:open = 0+  let l:line = getline(a:lnum)+  let pos = match(l:line, '[][(){}]', 0)+  while pos != -1+    if s:syn_at(a:lnum,pos + 1) !~? s:syng_strcom+      let l:open += match(' ' . l:line[pos],'[[({]')+      if l:open < 0+        return+      endif+    endif+    let pos = match(l:line, '[][(){}]', pos + 1)+  endwhile+  return !l:open+endfunction++function s:OneScope(lnum)+  let pline = s:Trim(a:lnum)+  let kw = 'else do'+  if pline[-1:] == ')' && s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0+    call s:previous_token()+    let kw = 'for if let while with'+    if index(split('await each'),s:token()) + 1+      call s:previous_token()+      let kw = 'for'+    endif+  endif+  return pline[-2:] == '=>' || index(split(kw),s:token()) + 1 &&+        \ s:save_pos('s:previous_token') != '.'+endfunction++" returns braceless levels started by 'i' and above lines * &sw. 'num' is the+" lineNr which encloses the entire context, 'cont' if whether line 'i' + 1 is+" a continued expression, which could have started in a braceless context+function s:iscontOne(i,num,cont)+  let [l:i, l:num, bL] = [a:i, a:num + !a:num, 0]+  let pind = a:num ? indent(l:num) + s:W : 0+  let ind = indent(l:i) + (a:cont ? 0 : s:W)+  while l:i >= l:num && (ind > pind || l:i == l:num)+    if indent(l:i) < ind && s:OneScope(l:i)+      let bL += s:W+      let l:i = line('.')+    elseif !a:cont || bL || ind < indent(a:i)+      break+    endif+    let ind = min([ind, indent(l:i)])+    let l:i = s:PrevCodeLine(l:i - 1)+  endwhile+  return bL+endfunction++" https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader+function s:IsBlock()+  if s:looking_at() == '{'+    let l:n = line('.')+    let char = s:previous_token()+    let syn = char =~ '[{>/]' ? s:syn_at(line('.'),col('.')-(char == '{')) : ''+    if syn =~? 'xml\|jsx'+      return char != '{'+    elseif char =~ '\k'+      return index(split('return const let import export yield default delete var await void typeof throw case new in instanceof')+            \ ,char) < (line('.') != l:n) || s:previous_token() == '.'+    elseif char == '>'+      return getline('.')[col('.')-2] == '=' || syn =~? '^jsflow'+    elseif char == ':'+      return getline('.')[col('.')-2] != ':' && s:label_col()+    endif+    return syn =~? 'regex' || char !~ '[-=~!<*+,/?^%|&([]'+  endif+endfunction++function GetJavascriptIndent()+  let b:js_cache = get(b:,'js_cache',[0,0,0])+  " Get the current line.+  call cursor(v:lnum,1)+  let l:line = getline('.')+  let syns = s:syn_at(v:lnum, 1)++  " start with strings,comments,etc.+  if syns =~? s:syng_com+    if l:line =~ '^\s*\*'+      return cindent(v:lnum)+    elseif l:line !~ '^\s*\/[/*]'+      return -1+    endif+  elseif syns =~? s:syng_str && l:line !~ '^[''"]'+    if b:js_cache[0] == v:lnum - 1 && s:Balanced(v:lnum-1)+      let b:js_cache[0] = v:lnum+    endif+    return -1+  endif+  let l:lnum = s:PrevCodeLine(v:lnum - 1)+  if !l:lnum+    return+  endif++  let l:line = substitute(l:line,'^\s*','','')+  if l:line[:1] == '/*'+    let l:line = substitute(l:line,'^\%(\/\*.\{-}\*\/\s*\)*','','')+  endif+  if l:line =~ '^\/[/*]'+    let l:line = ''+  endif++  " the containing paren, bracket, or curly. Many hacks for performance+  let idx = strlen(l:line) ? stridx('])}',l:line[0]) : -1+  if b:js_cache[0] >= l:lnum && b:js_cache[0] < v:lnum &&+        \ (b:js_cache[0] > l:lnum || s:Balanced(l:lnum))+    call call('cursor',b:js_cache[1:])+  else+    let [s:looksyn, s:free, top] = [v:lnum - 1, 1, (!indent(l:lnum) &&+          \ s:syn_at(l:lnum,1) !~? s:syng_str) * l:lnum]+    if idx + 1+      call s:GetPair(['\[','(','{'][idx], '])}'[idx],'bW','s:skip_func()',2000,top)+    elseif indent(v:lnum) && syns =~? 'block'+      call s:GetPair('{','}','bW','s:skip_func()',2000,top)+    else+      call s:alternatePair(top)+    endif+  endif++  if idx + 1 || l:line[:1] == '|}'+    if idx == 2 && search('\m\S','bW',line('.')) && s:looking_at() == ')'+      call s:GetPair('(',')','bW',s:skip_expr,200)+    endif+    return indent('.')+  endif++  let b:js_cache = [v:lnum] + (line('.') == v:lnum ? [0,0] : getpos('.')[1:2])+  let num = b:js_cache[1]++  let [s:W, isOp, bL, switch_offset] = [s:sw(),0,0,0]+  if !num || s:IsBlock()+    let pline = s:save_pos('s:Trim',l:lnum)+    if num && s:looking_at() == ')' && s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0+      let num = line('.')+      if s:previous_token() ==# 'switch' && s:previous_token() != '.'+        if &cino !~ ':' || !has('float')+          let switch_offset = s:W+        else+          let cinc = matchlist(&cino,'.*:\(-\)\=\([0-9.]*\)\(s\)\=\C')+          let switch_offset = float2nr(str2float(cinc[1].(strlen(cinc[2]) ? cinc[2] : strlen(cinc[3])))+                \ * (strlen(cinc[3]) ? s:W : 1))+        endif+        if pline[-1:] != '.' && l:line =~# '^\%(default\|case\)\>'+          return indent(num) + switch_offset+        endif+      endif+    endif+    if pline[-1:] !~ '[{;]'+      if pline =~# ':\@<!:$'+        call cursor(l:lnum,strlen(pline))+        let isOp = s:tern_col(b:js_cache[1:2])+      else+        let isOp = l:line =~# s:opfirst || s:continues(l:lnum,pline)+      endif+      let bL = s:iscontOne(l:lnum,num,isOp)+      let bL -= (bL && l:line[0] == '{') * s:W+    endif+  endif++  " main return+  if isOp+    return (num ? indent(num) : -s:W) + (s:W * 2) + switch_offset + bL+  elseif num+    return indent(num) + s:W + switch_offset + bL+  endif+  return bL+endfunction++let &cpo = s:cpo_save+unlet s:cpo_save

.vim/indent/php.vim

new file mode 100644@@ -0,0 +1,734 @@+" Vim indent file+" Language:	PHP+" Author:	John Wellesz <John.wellesz (AT) teaser (DOT) fr>+" URL:		http://www.2072productions.com/vim/indent/php.vim+" Last Change:	2010 Jully 26th+" Newsletter:	http://www.2072productions.com/?to=php-indent-for-vim-newsletter.php+" Version:	1.33+"+"+"  If you find a bug, please report it on GitHub:+"	http://github.com/2072/PHP-Indenting-for-VIm/issues+"  with an example of code that breaks the algorithm.+"+"+"	Thanks a lot for using this script.+"+"+" NOTE: This script must be used with PHP syntax ON and with the php syntax+"	script by Lutz Eymers (http://www.ipdienste.net/data/php.vim ) or with the+"	script by Peter Hodge (http://www.vim.org/scripts/script.php?script_id=1571 )+"	the later is bunbdled by default with Vim 7.+"+"+"	In the case you have syntax errors in your script such as HereDoc end+"	identifiers not at col 1 you'll have to indent your file 2 times (This+"	script will automatically put HereDoc end identifiers at col 1 if+"	they are followed by a ';').+"+"+" NOTE: If you are editing files in Unix file format and that (by accident)+"	there are '\r' before new lines, this script won't be able to proceed+"	correctly and will make many mistakes because it won't be able to match+"	'\s*$' correctly.+"	So you have to remove those useless characters first with a command like:+"+"	:%s /\r$//g+"+"	or simply 'let' the option PHP_removeCRwhenUnix to 1 and the script will+"	silently remove them when VIM load this script (at each bufread).+"+" Options: See :help php-indent for available options.+++if exists("b:did_indent")+    finish+endif+let b:did_indent = 1+++let php_sync_method = 0+++if exists("PHP_default_indenting")+    let b:PHP_default_indenting = PHP_default_indenting * &sw+else+    let b:PHP_default_indenting = 0+endif++if exists("PHP_BracesAtCodeLevel")+    let b:PHP_BracesAtCodeLevel = PHP_BracesAtCodeLevel+else+    let b:PHP_BracesAtCodeLevel = 0+endif+++if exists("PHP_autoformatcomment")+    let b:PHP_autoformatcomment = PHP_autoformatcomment+else+    let b:PHP_autoformatcomment = 1+endif++if exists("PHP_outdentphpescape")+    let b:PHP_outdentphpescape = PHP_outdentphpescape+else+    let b:PHP_outdentphpescape = 1+endif+++if exists("PHP_vintage_case_default_indent") && PHP_vintage_case_default_indent+    let b:PHP_vintage_case_default_indent = 1+else+    let b:PHP_vintage_case_default_indent = 0+endif++++let b:PHP_lastindented = 0+let b:PHP_indentbeforelast = 0+let b:PHP_indentinghuge = 0+let b:PHP_CurrentIndentLevel = b:PHP_default_indenting+let b:PHP_LastIndentedWasComment = 0+let b:PHP_InsideMultilineComment = 0+let b:InPHPcode = 0+let b:InPHPcode_checked = 0+let b:InPHPcode_and_script = 0+let b:InPHPcode_tofind = ""+let b:PHP_oldchangetick = b:changedtick+let b:UserIsTypingComment = 0+let b:optionsset = 0++setlocal nosmartindent+setlocal noautoindent+setlocal nocindent+setlocal nolisp++setlocal indentexpr=GetPhpIndent()+setlocal indentkeys=0{,0},0),:,!^F,o,O,e,*<Return>,=?>,=*/++++let s:searchpairflags = 'bWr'++if &fileformat == "unix" && exists("PHP_removeCRwhenUnix") && PHP_removeCRwhenUnix+    silent! %s/\r$//g+endif++if exists("*GetPhpIndent")+    call ResetPhpOptions()+    finish+endif++let s:endline= '\s*\%(//.*\|#.*\|/\*.*\*/\s*\)\=$'+" let s:PHP_startindenttag = '<?\%(.*?>\)\@!\|<script[^>]*>\%(.*<\/script>\)\@!' +let s:PHP_startindenttag = ''+++function! GetLastRealCodeLNum(startline) " {{{++    let lnum = a:startline++    if b:GetLastRealCodeLNum_ADD && b:GetLastRealCodeLNum_ADD == lnum + 1+	let lnum = b:GetLastRealCodeLNum_ADD+    endif++    let old_lnum = lnum++    while lnum > 1+	let lnum = prevnonblank(lnum)+	let lastline = getline(lnum)++	if b:InPHPcode_and_script && lastline =~ '?>\s*$'+	    let lnum = lnum - 1+	" elseif lastline =~ '^\s*?>.*<?\%(php\)\=\s*$' +	    " let lnum = lnum - 1 +	elseif lastline =~ '^\s*\%(//\|#\|/\*.*\*/\s*$\)'+	    let lnum = lnum - 1+	elseif lastline =~ '\*/\s*$'+	    call cursor(lnum, 1)+	    if lastline !~ '^\*/'+		call search('\*/', 'W')+	    endif+	    let lnum = searchpair('/\*', '', '\*/', s:searchpairflags, 'Skippmatch2()')++	    let lastline = getline(lnum)+	    if lastline =~ '^\s*/\*'+		let lnum = lnum - 1+	    else+		break+	    endif+++	elseif lastline =~? '\%(//\s*\|?>.*\)\@<!<?\%(php\)\=\s*$\|^\s*<script\>'++	    while lastline !~ '\(<?.*\)\@<!?>' && lnum > 1+		let lnum = lnum - 1+		let lastline = getline(lnum)+	    endwhile+	    if lastline =~ '^\s*?>'+		let lnum = lnum - 1+	    else+		break+	    endif+++	elseif lastline =~? '^\a\w*;\=$' && lastline !~? s:notPhpHereDoc+	    let tofind=substitute( lastline, '\(\a\w*\);\=', '<<<''\\=\1''\\=$', '')+	    while getline(lnum) !~? tofind && lnum > 1+		let lnum = lnum - 1+	    endwhile+	else+	    break+	endif+    endwhile++    " if lnum==1 && getline(lnum) !~ '<?' +	" let lnum=0 +    " endif ++    if b:InPHPcode_and_script && !b:InPHPcode+	let b:InPHPcode_and_script = 0+    endif++++    return lnum+endfunction " }}}++function! Skippmatch2()++    let line = getline(".")++   if line =~ '\%(".*\)\@<=/\*\%(.*"\)\@=' || line =~ '\%(\%(//\|#\).*\)\@<=/\*'+       return 1+   else+       return 0+   endif+endfun++function! Skippmatch()	" {{{+    let synname = synIDattr(synID(line("."), col("."), 0), "name")+    if synname == "Delimiter" || synname == "phpRegionDelimiter" || synname =~# "^phpParent" || synname == "phpArrayParens" || synname =~# '^php\%(Block\|Brace\)' || synname == "javaScriptBraces" || synname =~# "^phpComment" && b:UserIsTypingComment+	return 0+    else+	return 1+    endif+endfun " }}}++function! FindOpenBracket(lnum) " {{{+    call cursor(a:lnum, 1)+    return searchpair('{', '', '}', 'bW', 'Skippmatch()')+endfun " }}}++function! FindTheIfOfAnElse (lnum, StopAfterFirstPrevElse) " {{{++    if getline(a:lnum) =~# '^\s*}\s*else\%(if\)\=\>'+	let beforeelse = a:lnum+    else+	let beforeelse = GetLastRealCodeLNum(a:lnum - 1)+    endif++    if !s:level+	let s:iftoskip = 0+    endif++    if getline(beforeelse) =~# '^\s*\%(}\s*\)\=else\%(\s*if\)\@!\>'+	let s:iftoskip = s:iftoskip + 1+    endif++    if getline(beforeelse) =~ '^\s*}'+	let beforeelse = FindOpenBracket(beforeelse)++	if getline(beforeelse) =~ '^\s*{'+	    let beforeelse = GetLastRealCodeLNum(beforeelse - 1)+	endif+    endif+++    if !s:iftoskip && a:StopAfterFirstPrevElse && getline(beforeelse) =~# '^\s*\%([}]\s*\)\=else\%(if\)\=\>'+	return beforeelse+    endif++    if getline(beforeelse) !~# '^\s*if\>' && beforeelse>1 || s:iftoskip && beforeelse>1++	if s:iftoskip && getline(beforeelse) =~# '^\s*if\>'+	    let s:iftoskip = s:iftoskip - 1+	endif++	let s:level =  s:level + 1+	let beforeelse = FindTheIfOfAnElse(beforeelse, a:StopAfterFirstPrevElse)+    endif++    return beforeelse++endfunction " }}}++let s:defaultORcase = '^\s*\%(default\|case\).*:'++function! FindTheSwitchIndent (lnum) " {{{+++    let test = GetLastRealCodeLNum(a:lnum - 1)++    if test <= 1+	return indent(1) - &sw * b:PHP_vintage_case_default_indent+    end++    if getline(test) =~ '^\s*}'+	let test = FindOpenBracket(test)++	if getline(test) =~ '^\s*{'+	    let test = GetLastRealCodeLNum(GetLastRealCodeLNum(test - 1) - 1)+	endif+    endif++    if getline(test) =~# '^\s*switch\>'+	return indent(test)+    elseif getline(test) =~# s:defaultORcase+	return indent(test) - &sw * b:PHP_vintage_case_default_indent+    else+	return FindTheSwitchIndent(test)+    endif++endfunction "}}}+++function! IslinePHP (lnum, tofind) " {{{+    let cline = getline(a:lnum)++    if a:tofind==""+	let tofind = "^\\s*[\"']*\\s*\\zs\\S"+    else+	let tofind = a:tofind+    endif++    let tofind = tofind . '\c'++    let coltotest = match (cline, tofind) + 1++    let synname = synIDattr(synID(a:lnum, coltotest, 0), "name")++    if synname =~ '^php' || synname=="Delimiter" || synname =~? '^javaScript'+	return synname+    else+	return ""+    endif+endfunction " }}}++let s:notPhpHereDoc = '\%(break\|return\|continue\|exit\|else\)'+let s:blockstart = '\%(\%(\%(}\s*\)\=else\%(\s\+\)\=\)\=if\>\|else\>\|while\>\|switch\>\|case\>\|default\>\|for\%(each\)\=\>\|declare\>\|class\>\|interface\>\|abstract\>\|try\>\|catch\>\)'++let s:autoresetoptions = 0+if ! s:autoresetoptions+    let s:autoresetoptions = 1+endif++function! ResetPhpOptions()+    if ! b:optionsset && &filetype == "php"+	if b:PHP_autoformatcomment++	    setlocal comments=s1:/*,mb:*,ex:*/,://,:#++	    setlocal formatoptions-=t+	    setlocal formatoptions+=q+	    setlocal formatoptions+=r+	    setlocal formatoptions+=o+	    setlocal formatoptions+=w+	    setlocal formatoptions+=c+	    setlocal formatoptions+=b+	endif+	let b:optionsset = 1+    endif+endfunc++call ResetPhpOptions()++function! GetPhpIndent()++    let b:GetLastRealCodeLNum_ADD = 0++    let UserIsEditing=0+    if	b:PHP_oldchangetick != b:changedtick+	let b:PHP_oldchangetick = b:changedtick+	let UserIsEditing=1+    endif++    if b:PHP_default_indenting+	let b:PHP_default_indenting = g:PHP_default_indenting * &sw+    endif++    let cline = getline(v:lnum)++    if !b:PHP_indentinghuge && b:PHP_lastindented > b:PHP_indentbeforelast+	if b:PHP_indentbeforelast+	    let b:PHP_indentinghuge = 1+	    echom 'Large indenting detected, speed optimizations engaged (v1.33)'+	endif+	let b:PHP_indentbeforelast = b:PHP_lastindented+    endif++    if b:InPHPcode_checked && prevnonblank(v:lnum - 1) != b:PHP_lastindented+	if b:PHP_indentinghuge+	    echom 'Large indenting deactivated'+	    let b:PHP_indentinghuge = 0+	    let b:PHP_CurrentIndentLevel = b:PHP_default_indenting+	endif+	let b:PHP_lastindented = v:lnum+	let b:PHP_LastIndentedWasComment=0+	let b:PHP_InsideMultilineComment=0+	let b:PHP_indentbeforelast = 0++	let b:InPHPcode = 0+	let b:InPHPcode_checked = 0+	let b:InPHPcode_and_script = 0+	let b:InPHPcode_tofind = ""++    elseif v:lnum > b:PHP_lastindented+	let real_PHP_lastindented = b:PHP_lastindented+	let b:PHP_lastindented = v:lnum+    endif+++    if !b:InPHPcode_checked " {{{ One time check+	let b:InPHPcode_checked = 1++	let synname = ""+	if cline !~ '<?.*?>'+	    let synname = IslinePHP (prevnonblank(v:lnum), "")+	endif++	if synname!=""+	    if synname != "phpHereDoc" && synname != "phpHereDocDelimiter"+		let b:InPHPcode = 1+		let b:InPHPcode_tofind = ""++		if synname =~# "^phpComment"+		    let b:UserIsTypingComment = 1+		else+		    let b:UserIsTypingComment = 0+		endif++		if synname =~? '^javaScript'+		    let b:InPHPcode_and_script = 1+		endif++	    else+		let b:InPHPcode = 0+		let b:UserIsTypingComment = 0++		let lnum = v:lnum - 1+		while getline(lnum) !~? '<<<''\=\a\w*''\=$' && lnum > 1+		    let lnum = lnum - 1+		endwhile++		let b:InPHPcode_tofind = substitute( getline(lnum), '^.*<<<''\=\(\a\w*\)''\=$', '^\\s*\1;\\=$', '')+	    endif+	else+	    let b:InPHPcode = 0+	    let b:UserIsTypingComment = 0+	    let b:InPHPcode_tofind = '<?\%(.*?>\)\@!\|<script.*>'+	endif+    endif "!b:InPHPcode_checked }}}+++    " Test if we are indenting PHP code {{{+    let lnum = prevnonblank(v:lnum - 1)+    let last_line = getline(lnum)++    if b:InPHPcode_tofind!=""+	if cline =~? b:InPHPcode_tofind+	    let b:InPHPcode = 1+	    let b:InPHPcode_tofind = ""+	    let b:UserIsTypingComment = 0+	    if cline =~ '\*/'+		call cursor(v:lnum, 1)+		if cline !~ '^\*/'+		    call search('\*/', 'W')+		endif+		let lnum = searchpair('/\*', '', '\*/', s:searchpairflags, 'Skippmatch2()')++		let b:PHP_CurrentIndentLevel = b:PHP_default_indenting++		let b:PHP_LastIndentedWasComment = 0++		if cline =~ '^\s*\*/'+		    return indent(lnum) + 1+		else+		    return indent(lnum)+		endif++	    elseif cline =~? '<script\>'+		let b:InPHPcode_and_script = 1+		let b:GetLastRealCodeLNum_ADD = v:lnum+	    endif+	endif+    endif++    if b:InPHPcode++	if !b:InPHPcode_and_script && last_line =~ '\%(<?.*\)\@<!?>\%(.*<?\)\@!' && IslinePHP(lnum, '?>')=~"Delimiter"+	    if cline !~? s:PHP_startindenttag+		let b:InPHPcode = 0+		let b:InPHPcode_tofind = s:PHP_startindenttag+	    elseif cline =~? '<script\>'+		let b:InPHPcode_and_script = 1+	    endif++	elseif last_line =~? '<<<''\=\a\w*''\=$'+	    let b:InPHPcode = 0+	    let b:InPHPcode_tofind = substitute( last_line, '^.*<<<''\=\(\a\w*\)''\=$', '^\\s*\1;\\=$', '')++	elseif !UserIsEditing && cline =~ '^\s*/\*\%(.*\*/\)\@!' && getline(v:lnum + 1) !~ '^\s*\*'+	    let b:InPHPcode = 0+	    let b:InPHPcode_tofind = '\*/'++	elseif cline =~? '^\s*</script>'+	    let b:InPHPcode = 0+	    let b:InPHPcode_tofind = s:PHP_startindenttag+	endif+    endif " }}}+++    if !b:InPHPcode && !b:InPHPcode_and_script+	return -1+    endif++    " Indent successive // or # comment the same way the first is {{{+    if cline =~ '^\s*\%(//\|#\|/\*.*\*/\s*$\)'+	if b:PHP_LastIndentedWasComment == 1+	    return indent(real_PHP_lastindented)+	endif+	let b:PHP_LastIndentedWasComment = 1+    else+	let b:PHP_LastIndentedWasComment = 0+    endif " }}}++    " Indent multiline /* comments correctly {{{++    if b:PHP_InsideMultilineComment || b:UserIsTypingComment+	if cline =~ '^\s*\*\%(\/\)\@!'+	    if last_line =~ '^\s*/\*'+		return indent(lnum) + 1+	    else+		return indent(lnum)+	    endif+	else+	    let b:PHP_InsideMultilineComment = 0+	endif+    endif++    if !b:PHP_InsideMultilineComment && cline =~ '^\s*/\*' && cline !~ '\*/\s*$'+	if getline(v:lnum + 1) !~ '^\s*\*'+	    return -1+	endif+	let b:PHP_InsideMultilineComment = 1+    endif " }}}+++    " Things always indented at col 1 (PHP delimiter: <?, ?>, Heredoc end) {{{+    if cline =~# '^\s*<?' && cline !~ '?>' && b:PHP_outdentphpescape+	return 0+    endif++    if	cline =~ '^\s*?>' && cline !~# '<?' && b:PHP_outdentphpescape+	return 0+    endif++    if cline =~? '^\s*\a\w*;$\|^\a\w*$' && cline !~? s:notPhpHereDoc+	return 0+    endif " }}}++    let s:level = 0++    let lnum = GetLastRealCodeLNum(v:lnum - 1)++    let last_line = getline(lnum)+    let ind = indent(lnum)+    let endline= s:endline++    if ind==0 && b:PHP_default_indenting+	let ind = b:PHP_default_indenting+    endif++    if lnum == 0+	return b:PHP_default_indenting+    endif+++    if cline =~ '^\s*}\%(}}\)\@!'+	let ind = indent(FindOpenBracket(v:lnum))+	let b:PHP_CurrentIndentLevel = b:PHP_default_indenting+	return ind+    endif++    if cline =~ '^\s*\*/'+	call cursor(v:lnum, 1)+	if cline !~ '^\*/'+	    call search('\*/', 'W')+	endif+	let lnum = searchpair('/\*', '', '\*/', s:searchpairflags, 'Skippmatch2()')++	let b:PHP_CurrentIndentLevel = b:PHP_default_indenting++	if cline =~ '^\s*\*/'+	    return indent(lnum) + 1+	else+	    return indent(lnum)+	endif+    endif+++    if last_line =~ '[;}]'.endline && last_line !~ '^)' && last_line !~# s:defaultORcase+	if ind==b:PHP_default_indenting+	    return b:PHP_default_indenting+	elseif b:PHP_indentinghuge && ind==b:PHP_CurrentIndentLevel && cline !~# '^\s*\%(else\|\%(case\|default\).*:\|[})];\=\)' && last_line !~# '^\s*\%(\%(}\s*\)\=else\)' && getline(GetLastRealCodeLNum(lnum - 1))=~';'.endline+	    return b:PHP_CurrentIndentLevel+	endif+    endif++    let LastLineClosed = 0++    let terminated = '\%(;\%(\s*?>\)\=\|<<<''\=\a\w*''\=$\|^\s*}\)'.endline++    let unstated   = '\%(^\s*'.s:blockstart.'.*)\|\%(//.*\)\@<!\<e'.'lse\>\)'.endline++    if ind != b:PHP_default_indenting && cline =~# '^\s*else\%(if\)\=\>'+	let b:PHP_CurrentIndentLevel = b:PHP_default_indenting+	return indent(FindTheIfOfAnElse(v:lnum, 1))+    elseif cline =~# s:defaultORcase+	return FindTheSwitchIndent(v:lnum) + &sw * b:PHP_vintage_case_default_indent+    elseif cline =~ '^\s*)\=\s*{'+	let previous_line = last_line+	let last_line_num = lnum++	while last_line_num > 1++	    if previous_line =~ '^\s*\%(' . s:blockstart . '\|\%([a-zA-Z]\s*\)*function\)'++		let ind = indent(last_line_num)++		if  b:PHP_BracesAtCodeLevel+		    let ind = ind + &sw+		endif++		return ind+	    endif++	    let last_line_num = last_line_num - 1+	    let previous_line = getline(last_line_num)+	endwhile++    elseif last_line =~# unstated && cline !~ '^\s*);\='.endline+	let ind = ind + &sw+	return ind++    elseif (ind != b:PHP_default_indenting || last_line =~ '^)' ) && last_line =~ terminated+	let previous_line = last_line+	let last_line_num = lnum+	let LastLineClosed = 1++	while 1+	    if previous_line =~ '^\s*}'+		let last_line_num = FindOpenBracket(last_line_num)++		if getline(last_line_num) =~ '^\s*{'+		    let last_line_num = GetLastRealCodeLNum(last_line_num - 1)+		endif++		let previous_line = getline(last_line_num)++		continue+	    else++		if getline(last_line_num) =~# '^\s*else\%(if\)\=\>'+		    let last_line_num = FindTheIfOfAnElse(last_line_num, 0)+		    continue+		endif+++		let last_match = last_line_num++		let one_ahead_indent = indent(last_line_num)+		let last_line_num = GetLastRealCodeLNum(last_line_num - 1)+		let two_ahead_indent = indent(last_line_num)+		let after_previous_line = previous_line+		let previous_line = getline(last_line_num)+++		if previous_line =~# s:defaultORcase.'\|{'.endline+		    break+		endif++		if after_previous_line=~# '^\s*'.s:blockstart.'.*)'.endline && previous_line =~# '[;}]'.endline+		    break+		endif++		if one_ahead_indent == two_ahead_indent || last_line_num < 1+		    if previous_line =~# '\%(;\|^\s*}\)'.endline || last_line_num < 1+			break+		    endif+		endif+	    endif+	endwhile++	if indent(last_match) != ind+	    let ind = indent(last_match)+	    let b:PHP_CurrentIndentLevel = b:PHP_default_indenting++	    return ind+	endif+    endif++    let plinnum = GetLastRealCodeLNum(lnum - 1)+    let AntepenultimateLine = getline(plinnum)++    let last_line = substitute(last_line,"\\(//\\|#\\)\\(\\(\\([^\"']*\\([\"']\\)[^\"']*\\5\\)\\+[^\"']*$\\)\\|\\([^\"']*$\\)\\)",'','')+++    if ind == b:PHP_default_indenting+	if last_line =~ terminated+	    let LastLineClosed = 1+	endif+    endif++    if !LastLineClosed+++	if last_line =~# '[{(]'.endline || last_line =~? '\h\w*\s*(.*,$' && AntepenultimateLine !~ '[,(]'.endline++	    if !b:PHP_BracesAtCodeLevel || last_line !~# '^\s*{'+		let ind = ind + &sw+	    endif++	    if b:PHP_BracesAtCodeLevel || b:PHP_vintage_case_default_indent == 1+		let b:PHP_CurrentIndentLevel = ind++		return ind+	    endif++	elseif last_line =~ '\S\+\s*),'.endline+	    call cursor(lnum, 1)+	    call search('),'.endline, 'W')+	    let openedparent = searchpair('(', '', ')', 'bW', 'Skippmatch()')+	    if openedparent != lnum+		let ind = indent(openedparent)+	    endif+	+	elseif last_line =~ '^\s*'.s:blockstart+	    let ind = ind + &sw++++	elseif AntepenultimateLine =~ '\%(;\%(\s*?>\)\=\|<<<''\=\a\w*''\=$\|^\s*}\|{\)'.endline . '\|' . s:defaultORcase+	    let ind = ind + &sw+	endif++    endif++    if cline =~  '^\s*);\='+	let ind = ind - &sw+    endif++    let b:PHP_CurrentIndentLevel = ind+    return ind+endfunction

.vim/indent/sml.vim

new file mode 100644@@ -0,0 +1,217 @@+" Vim indent file+" Language:     SML+" Maintainer:	Saikat Guha <sg266@cornell.edu>+" 				Hubert Chao <hc85@cornell.edu>+" Original OCaml Version:+" 				Jean-Francois Yuen  <jfyuen@ifrance.com>+"               Mike Leary          <leary@nwlink.com>+"               Markus Mottl        <markus@oefai.at>+" OCaml URL:    http://www.oefai.at/~markus/vim/indent/ocaml.vim+" Last Change:  2003 Jan 04	- Adapted to SML+" 				2002 Nov 06 - Some fixes (JY)+"               2002 Oct 28 - Fixed bug with indentation of ']' (MM)+"               2002 Oct 22 - Major rewrite (JY)++" Only load this indent file when no other was loaded.+if exists("b:did_indent")+  finish+endif+let b:did_indent = 1++setlocal expandtab+setlocal indentexpr=GetSMLIndent()+setlocal indentkeys+=0=and,0=else,0=end,0=handle,0=if,0=in,0=let,0=then,0=val,0=fun,0=\|,0=*),0)+setlocal nolisp+setlocal nosmartindent+setlocal textwidth=80+setlocal shiftwidth=2++" Comment formatting+if (has("comments"))+  set comments=sr:(*,mb:*,ex:*)+  set fo=cqort+endif++" Only define the function once.+"if exists("*GetSMLIndent")+"finish+"endif++" Define some patterns:+let s:beflet = '^\s*\(initializer\|method\|try\)\|\(\<\(begin\|do\|else\|in\|then\|try\)\|->\|;\)\s*$'+let s:letpat = '^\s*\(let\|type\|module\|class\|open\|exception\|val\|include\|external\)\>'+let s:letlim = '\(\<\(sig\|struct\)\|;;\)\s*$'+let s:lim = '^\s*\(exception\|external\|include\|let\|module\|open\|type\|val\)\>'+let s:module = '\<\%(let\|sig\|struct\)\>'+let s:obj = '^\s*\(constraint\|inherit\|initializer\|method\|val\)\>\|\<\(object\|object\s*(.*)\)\s*$'+let s:type = '^\s*\%(let\|type\)\>.*='+let s:val = '^\s*\(val\|external\)\>.*:'++" Skipping pattern, for comments+function! s:SkipPattern(lnum, pat)+  let def = prevnonblank(a:lnum - 1)+  while def > 0 && getline(def) =~ a:pat+    let def = prevnonblank(def - 1)+  endwhile+  return def+endfunction++" Indent for ';;' to match multiple 'let'+function! s:GetInd(lnum, pat, lim)+  let llet = search(a:pat, 'bW')+  let old = indent(a:lnum)+  while llet > 0+    let old = indent(llet)+    let nb = s:SkipPattern(llet, '^\s*(\*.*\*)\s*$')+    if getline(nb) =~ a:lim+      return old+    endif+    let llet = search(a:pat, 'bW')+  endwhile+  return old+endfunction++" Indent pairs+function! s:FindPair(pstart, pmid, pend)+  call search(a:pend, 'bW')+"  return indent(searchpair(a:pstart, a:pmid, a:pend, 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"'))+  let lno = searchpair(a:pstart, a:pmid, a:pend, 'bW', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"')+  if lno == -1+	return indent(lno)+  else+	return col(".") - 1+  endif+endfunction++function! s:FindLet(pstart, pmid, pend)+  call search(a:pend, 'bW')+"  return indent(searchpair(a:pstart, a:pmid, a:pend, 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"'))+  let lno = searchpair(a:pstart, a:pmid, a:pend, 'bW', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"')+  let moduleLine = getline(lno)+  if lno == -1 || moduleLine =~ '^\s*\(fun\|structure\|signature\)\>'+	return indent(lno)+  else+	return col(".") - 1+  endif+endfunction++" Indent 'let'+"function! s:FindLet(pstart, pmid, pend)+"  call search(a:pend, 'bW')+"  return indent(searchpair(a:pstart, a:pmid, a:pend, 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment" || getline(".") =~ "^\\s*let\\>.*=.*\\<in\\s*$" || getline(prevnonblank(".") - 1) =~ "^\\s*let\\>.*=\\s*$\\|" . s:beflet'))+"endfunction++function! GetSMLIndent()+  " Find a non-blank line above the current line.+  let lnum = prevnonblank(v:lnum - 1)++  " At the start of the file use zero indent.+  if lnum == 0+    return 0+  endif++  let ind = indent(lnum)+  let lline = getline(lnum)++	" Return double 'shiftwidth' after lines matching:+	if lline =~ '^\s*|.*=>\s*$'+		return ind + &sw + &sw+	elseif lline =~ '^\s*val\>.*=\s*$'+		return ind + &sw+	endif++  let line = getline(v:lnum)++	" Indent lines starting with 'end' to matching module+	if line =~ '^\s*end\>'+		return s:FindLet(s:module, '', '\<end\>')++	" Match 'else' with 'if'+	elseif line =~ '^\s*else\>'+	  	if lline !~ '^\s*\(if\|else\|then\)\>'+				return s:FindPair('\<if\>', '', '\<then\>')+	  	else+		  return ind+		endif++	" Match 'then' with 'if'+	elseif line =~ '^\s*then\>'+  	if lline !~ '^\s*\(if\|else\|then\)\>'+		  return s:FindPair('\<if\>', '', '\<then\>')+	else+	  return ind+	endif++	" Indent if current line begins with ']'+	elseif line =~ '^\s*\]'+		return s:FindPair('\[','','\]')++  " Indent current line starting with 'in' to last matching 'let'+	elseif line =~ '^\s*in\>'+		let ind = s:FindLet('\<let\>','','\<in\>')++	" Indent from last matching module if line matches:+	elseif line =~ '^\s*\(fun\|val\|open\|structure\|and\|datatype\|type\|exception\)\>'+		cursor(lnum,1)+  		let lastModule = indent(searchpair(s:module, '', '\<end\>', 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"'))+		if lastModule == -1+			return 0+		else+			return lastModule + &sw+		endif++	" Indent lines starting with '|' from matching 'case', 'handle'+	elseif line =~ '^\s*|'+		" cursor(lnum,1)+		let lastSwitch = search('\<\(case\|handle\|fun\|datatype\)\>','bW')+		let switchLine = getline(lastSwitch)+		let switchLineIndent = indent(lastSwitch)+		if lline =~ '^\s*|'+		  return ind+		endif+		if switchLine =~ '\<case\>'+			return col(".") + 2+		elseif switchLine =~ '\<handle\>'+			return switchLineIndent + &sw+		elseif switchLine =~ '\<datatype\>'+			call search('=')+			return col(".") - 1+		else+			return switchLineIndent + 2+		endif+++  " Indent if last line ends with 'sig', 'struct', 'let', 'then', 'else',+  " 'in'+  elseif lline =~ '\<\(sig\|struct\|let\|in\|then\|else\)\s*$'+		let ind = ind + &sw++  " Indent if last line ends with 'of', align from 'case'+  elseif lline =~ '\<\(of\)\s*$'+		call search('\<case\>',"bW")+		let ind = col(".")+4++	" Indent if current line starts with 'of'+  elseif line =~ '^\s*of\>'+		call search('\<case\>',"bW")+		let ind = col(".")+1+++	" Indent if last line starts with 'fun', 'case', 'fn'+	elseif lline =~ '^\s*\(fun\|fn\|case\)\>'+		let ind = ind + &sw++	endif++	" Don't indent 'let' if last line started with 'fun', 'fn'+	if line =~ '^\s*let\>'+		if lline =~ '^\s*\(fun\|fn\)'+			let ind = ind - &sw+		endif+  endif++  return ind++endfunction++" vim:sw=2

.vim/javascript.vim

new file mode 100644@@ -0,0 +1,389 @@+" Vim syntax file+" Language:     JavaScript+" Maintainer:   vim-javascript community+" URL:          https://github.com/pangloss/vim-javascript++if !exists("main_syntax")+  if version < 600+    syntax clear+  elseif exists("b:current_syntax")+    finish+  endif+  let main_syntax = 'javascript'+endif++" Dollar sign is permitted anywhere in an identifier+if v:version > 704 || v:version == 704 && has('patch1142')+  syntax iskeyword @,48-57,_,192-255,$+else+  setlocal iskeyword+=$+endif++syntax sync fromstart+" TODO: Figure out what type of casing I need+" syntax case ignore+syntax case match++syntax match   jsNoise          /[:,\;\.]\{1}/+syntax match   jsFuncCall       /\k\+\%(\s*(\)\@=/+syntax match   jsParensError    /[)}\]]/++" Program Keywords+syntax keyword jsStorageClass   const var let skipwhite skipempty nextgroup=jsDestructuringBlock,jsDestructuringArray,jsVariableDef+syntax match   jsVariableDef    contained /\k\+/ skipwhite skipempty nextgroup=jsFlowDefinition+syntax keyword jsOperator       delete instanceof typeof void new in of skipwhite skipempty nextgroup=@jsExpression+syntax match   jsOperator       /[\!\|\&\+\-\<\>\=\%\/\*\~\^]\{1}/ skipwhite skipempty nextgroup=@jsExpression+syntax keyword jsBooleanTrue    true+syntax keyword jsBooleanFalse   false++" Modules+syntax keyword jsImport                       import skipwhite skipempty nextgroup=jsModuleAsterisk,jsModuleKeyword,jsModuleGroup,jsFlowImportType+syntax keyword jsExport                       export skipwhite skipempty nextgroup=@jsAll,jsModuleGroup,jsExportDefault,jsModuleAsterisk,jsModuleKeyword+syntax match   jsModuleKeyword      contained /\k\+/ skipwhite skipempty nextgroup=jsModuleAs,jsFrom,jsModuleComma+syntax keyword jsExportDefault      contained default skipwhite skipempty nextgroup=@jsExpression+syntax keyword jsExportDefaultGroup contained default skipwhite skipempty nextgroup=jsModuleAs,jsFrom,jsModuleComma+syntax match   jsModuleAsterisk     contained /\*/ skipwhite skipempty nextgroup=jsModuleKeyword,jsModuleAs,jsFrom+syntax keyword jsModuleAs           contained as skipwhite skipempty nextgroup=jsModuleKeyword,jsExportDefaultGroup+syntax keyword jsFrom               contained from skipwhite skipempty nextgroup=jsString+syntax match   jsModuleComma        contained /,/ skipwhite skipempty nextgroup=jsModuleKeyword,jsModuleAsterisk,jsModuleGroup++" Strings, Templates, Numbers+syntax region  jsString           start=+"+  skip=+\\\("\|$\)+  end=+"\|$+  contains=jsSpecial,@Spell extend+syntax region  jsString           start=+'+  skip=+\\\('\|$\)+  end=+'\|$+  contains=jsSpecial,@Spell extend+syntax region  jsTemplateString   start=+`+  skip=+\\\(`\|$\)+  end=+`+     contains=jsTemplateVar,jsSpecial extend+syntax match   jsTaggedTemplate   /\k\+\%(`\)\@=/ nextgroup=jsTemplateString+syntax match   jsNumber           /\<\d\+\%([eE][+-]\=\d\+\)\=\>\|\<0[bB][01]\+\>\|\<0[oO]\o\+\>\|\<0[xX]\x\+\>/+syntax keyword jsNumber           Infinity+syntax match   jsFloat            /\<\%(\d\+\.\d\+\|\d\+\.\|\.\d\+\)\%([eE][+-]\=\d\+\)\=\>/++" Regular Expressions+syntax match   jsSpecial          contained "\v\\%(0|\\x\x\{2\}\|\\u\x\{4\}\|\c[A-Z]|.)"+syntax region  jsTemplateVar      contained matchgroup=jsTemplateBraces start=+${+ end=+}+ contains=@jsExpression keepend+syntax region  jsRegexpCharClass  contained start=+\[+ skip=+\\.+ end=+\]++syntax match   jsRegexpBoundary   contained "\v%(\<@![\^$]|\\[bB])"+syntax match   jsRegexpBackRef    contained "\v\\[1-9][0-9]*"+syntax match   jsRegexpQuantifier contained "\v\\@<!%([?*+]|\{\d+%(,|,\d+)?})\??"+syntax match   jsRegexpOr         contained "\v\<@!\|"+syntax match   jsRegexpMod        contained "\v\(@<=\?[:=!>]"+syntax region  jsRegexpGroup      contained start="\\\@<!(" skip="\\.\|\[\(\\.\|[^]]\)*\]" end="\\\@<!)" contains=jsRegexpCharClass,@jsRegexpSpecial keepend+if v:version > 703 || v:version == 603 && has("patch1088")+  syntax region  jsRegexpString   start=+\%(\%(\%(return\|case\)\s\+\)\@50<=\|\%(\%([)\]"']\|\d\|\w\)\s*\)\@50<!\)/\(\*\|/\)\@!+ skip=+\\.\|\[\%(\\.\|[^]]\)*\]+ end=+/[gimy]\{,4}+ contains=jsRegexpCharClass,jsRegexpGroup,@jsRegexpSpecial oneline keepend extend+else+  syntax region  jsRegexpString   start=+\%(\%(\%(return\|case\)\s\+\)\@<=\|\%(\%([)\]"']\|\d\|\w\)\s*\)\@<!\)/\(\*\|/\)\@!+ skip=+\\.\|\[\%(\\.\|[^]]\)*\]+ end=+/[gimy]\{,4}+ contains=jsRegexpCharClass,jsRegexpGroup,@jsRegexpSpecial oneline keepend extend+endif+syntax cluster jsRegexpSpecial    contains=jsSpecial,jsRegexpBoundary,jsRegexpBackRef,jsRegexpQuantifier,jsRegexpOr,jsRegexpMod++" Objects+syntax match   jsObjectKey         contained /\<[0-9a-zA-Z_$]*\>\(\s*:\)\@=/ contains=jsFunctionKey skipwhite skipempty nextgroup=jsObjectValue+syntax match   jsObjectColon       contained /:/ skipwhite skipempty+syntax region  jsObjectKeyString   contained start=+"+  skip=+\\\("\|$\)+  end=+"\|$+  contains=jsSpecial,@Spell skipwhite skipempty nextgroup=jsObjectValue+syntax region  jsObjectKeyString   contained start=+'+  skip=+\\\('\|$\)+  end=+'\|$+  contains=jsSpecial,@Spell skipwhite skipempty nextgroup=jsObjectValue+syntax region  jsObjectKeyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression skipwhite skipempty nextgroup=jsObjectValue,jsFuncArgs extend+syntax match   jsObjectSeparator   contained /,/+syntax region  jsObjectValue       contained start=/:/ end=/\%(,\|}\)\@=/ contains=jsObjectColon,@jsExpression extend+syntax match   jsObjectFuncName    contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>[\r\n\t ]*(\@=/ skipwhite skipempty nextgroup=jsFuncArgs+syntax match   jsFunctionKey       contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\s*function\s*\)\@=/+syntax match   jsObjectMethodType  contained /\%(get\|set\)\%( \k\+\)\@=/ skipwhite skipempty nextgroup=jsObjectFuncName+syntax region  jsObjectStringKey   contained start=+"+  skip=+\\\("\|$\)+  end=+"\|$+  contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs,jsObjectValue+syntax region  jsObjectStringKey   contained start=+'+  skip=+\\\('\|$\)+  end=+'\|$+  contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs,jsObjectValue++exe 'syntax keyword jsNull      null             '.(exists('g:javascript_conceal_null')      ? 'conceal cchar='.g:javascript_conceal_null       : '')+exe 'syntax keyword jsReturn    return contained '.(exists('g:javascript_conceal_return')    ? 'conceal cchar='.g:javascript_conceal_return     : '').' skipwhite skipempty nextgroup=@jsExpression'+exe 'syntax keyword jsUndefined undefined        '.(exists('g:javascript_conceal_undefined') ? 'conceal cchar='.g:javascript_conceal_undefined  : '')+exe 'syntax keyword jsNan       NaN              '.(exists('g:javascript_conceal_NaN')       ? 'conceal cchar='.g:javascript_conceal_NaN        : '')+exe 'syntax keyword jsPrototype prototype        '.(exists('g:javascript_conceal_prototype') ? 'conceal cchar='.g:javascript_conceal_prototype  : '')+exe 'syntax keyword jsThis      this             '.(exists('g:javascript_conceal_this')      ? 'conceal cchar='.g:javascript_conceal_this       : '')+exe 'syntax keyword jsSuper     super  contained '.(exists('g:javascript_conceal_super')     ? 'conceal cchar='.g:javascript_conceal_super      : '')++" Statement Keywords+syntax match   jsBlockLabel              /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\s*:/    contains=jsNoise skipwhite skipempty nextgroup=jsBlock+syntax match   jsBlockLabelKey contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\%(\s*\%(;\|\n\)\)\@=/+syntax keyword jsStatement    contained with yield debugger+syntax keyword jsStatement    contained break continue skipwhite skipempty nextgroup=jsBlockLabelKey+syntax keyword jsConditional            if             skipwhite skipempty nextgroup=jsParenIfElse+syntax keyword jsConditional            else           skipwhite skipempty nextgroup=jsCommentMisc,jsIfElseBlock+syntax keyword jsConditional            switch         skipwhite skipempty nextgroup=jsParenSwitch+syntax keyword jsRepeat                 while for      skipwhite skipempty nextgroup=jsParenRepeat,jsForAwait+syntax keyword jsDo                     do             skipwhite skipempty nextgroup=jsRepeatBlock+syntax region  jsSwitchCase   contained matchgroup=jsLabel start=/\<\%(case\|default\)\>/ end=/:\@=/ contains=@jsExpression,jsLabel skipwhite skipempty nextgroup=jsSwitchColon keepend+syntax keyword jsTry                    try            skipwhite skipempty nextgroup=jsTryCatchBlock+syntax keyword jsFinally      contained finally        skipwhite skipempty nextgroup=jsFinallyBlock+syntax keyword jsCatch        contained catch          skipwhite skipempty nextgroup=jsParenCatch+syntax keyword jsException              throw+syntax keyword jsAsyncKeyword           async await+syntax match   jsSwitchColon   contained /:/            skipwhite skipempty nextgroup=jsSwitchBlock++" Keywords+syntax keyword jsGlobalObjects      Array Boolean Date Function Iterator Number Object Symbol Map WeakMap Set RegExp String Proxy Promise Buffer ParallelArray ArrayBuffer DataView Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray JSON Math console document window Intl Collator DateTimeFormat NumberFormat fetch+syntax keyword jsGlobalNodeObjects  module exports global process __dirname __filename+syntax match   jsGlobalNodeObjects  /\<require\>/ containedin=jsFuncCall+syntax keyword jsExceptions         Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError+syntax keyword jsBuiltins           decodeURI decodeURIComponent encodeURI encodeURIComponent eval isFinite isNaN parseFloat parseInt uneval+" DISCUSS: How imporant is this, really? Perhaps it should be linked to an error because I assume the keywords are reserved?+syntax keyword jsFutureKeys         abstract enum int short boolean interface byte long char final native synchronized float package throws goto private transient implements protected volatile double public++" DISCUSS: Should we really be matching stuff like this?+" DOM2 Objects+syntax keyword jsGlobalObjects  DOMImplementation DocumentFragment Document Node NodeList NamedNodeMap CharacterData Attr Element Text Comment CDATASection DocumentType Notation Entity EntityReference ProcessingInstruction+syntax keyword jsExceptions     DOMException++" DISCUSS: Should we really be matching stuff like this?+" DOM2 CONSTANT+syntax keyword jsDomErrNo       INDEX_SIZE_ERR DOMSTRING_SIZE_ERR HIERARCHY_REQUEST_ERR WRONG_DOCUMENT_ERR INVALID_CHARACTER_ERR NO_DATA_ALLOWED_ERR NO_MODIFICATION_ALLOWED_ERR NOT_FOUND_ERR NOT_SUPPORTED_ERR INUSE_ATTRIBUTE_ERR INVALID_STATE_ERR SYNTAX_ERR INVALID_MODIFICATION_ERR NAMESPACE_ERR INVALID_ACCESS_ERR+syntax keyword jsDomNodeConsts  ELEMENT_NODE ATTRIBUTE_NODE TEXT_NODE CDATA_SECTION_NODE ENTITY_REFERENCE_NODE ENTITY_NODE PROCESSING_INSTRUCTION_NODE COMMENT_NODE DOCUMENT_NODE DOCUMENT_TYPE_NODE DOCUMENT_FRAGMENT_NODE NOTATION_NODE++" DISCUSS: Should we really be special matching on these props?+" HTML events and internal variables+syntax keyword jsHtmlEvents     onblur onclick oncontextmenu ondblclick onfocus onkeydown onkeypress onkeyup onmousedown onmousemove onmouseout onmouseover onmouseup onresize++" Code blocks+syntax region  jsBracket                      matchgroup=jsBrackets            start=/\[/ end=/\]/ contains=@jsExpression,jsSpreadExpression extend fold+syntax region  jsParen                        matchgroup=jsParens              start=/(/  end=/)/  contains=@jsAll extend fold+syntax region  jsParenDecorator     contained matchgroup=jsParensDecorator     start=/(/  end=/)/  contains=@jsAll skipwhite skipempty nextgroup=jsCommentMisc extend fold+syntax region  jsParenIfElse        contained matchgroup=jsParensIfElse        start=/(/  end=/)/  contains=@jsAll skipwhite skipempty nextgroup=jsCommentMisc,jsIfElseBlock extend fold+syntax region  jsParenRepeat        contained matchgroup=jsParensRepeat        start=/(/  end=/)/  contains=@jsAll skipwhite skipempty nextgroup=jsCommentMisc,jsRepeatBlock extend fold+syntax region  jsParenSwitch        contained matchgroup=jsParensSwitch        start=/(/  end=/)/  contains=@jsAll skipwhite skipempty nextgroup=jsSwitchBlock extend fold+syntax region  jsParenCatch         contained matchgroup=jsParensCatch         start=/(/  end=/)/  skipwhite skipempty nextgroup=jsTryCatchBlock extend fold+syntax region  jsFuncArgs           contained matchgroup=jsFuncParens          start=/(/  end=/)/  contains=jsFuncArgCommas,jsComment,jsFuncArgExpression,jsDestructuringBlock,jsDestructuringArray,jsRestExpression,jsFlowArgumentDef skipwhite skipempty nextgroup=jsCommentFunction,jsFuncBlock,jsFlowReturn extend fold+syntax region  jsClassBlock         contained matchgroup=jsClassBraces         start=/{/  end=/}/  contains=jsClassFuncName,jsClassMethodType,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator,jsClassProperty,jsClassPropertyComputed,jsClassStringKey,jsAsyncKeyword,jsNoise extend fold+syntax region  jsFuncBlock          contained matchgroup=jsFuncBraces          start=/{/  end=/}/  contains=@jsAll,jsBlock extend fold+syntax region  jsIfElseBlock        contained matchgroup=jsIfElseBraces        start=/{/  end=/}/  contains=@jsAll,jsBlock extend fold+syntax region  jsTryCatchBlock      contained matchgroup=jsTryCatchBraces      start=/{/  end=/}/  contains=@jsAll,jsBlock skipwhite skipempty nextgroup=jsCatch,jsFinally extend fold+syntax region  jsFinallyBlock       contained matchgroup=jsFinallyBraces       start=/{/  end=/}/  contains=@jsAll,jsBlock extend fold+syntax region  jsSwitchBlock        contained matchgroup=jsSwitchBraces        start=/{/  end=/}/  contains=@jsAll,jsBlock,jsSwitchCase extend fold+syntax region  jsRepeatBlock        contained matchgroup=jsRepeatBraces        start=/{/  end=/}/  contains=@jsAll,jsBlock extend fold+syntax region  jsDestructuringBlock contained matchgroup=jsDestructuringBraces start=/{/  end=/}/  contains=jsDestructuringProperty,jsDestructuringAssignment,jsDestructuringNoise,jsDestructuringPropertyComputed,jsSpreadExpression,jsComment extend fold+syntax region  jsDestructuringArray contained matchgroup=jsDestructuringBraces start=/\[/ end=/\]/ contains=jsDestructuringPropertyValue,jsNoise,jsDestructuringProperty,jsSpreadExpression,jsComment extend fold+syntax region  jsObject             contained matchgroup=jsObjectBraces        start=/{/  end=/}/  contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectMethodType,jsGenerator,jsComment,jsObjectStringKey,jsSpreadExpression,jsDecorator,jsAsyncKeyword extend fold+syntax region  jsBlock                        matchgroup=jsBraces              start=/{/  end=/}/  contains=@jsAll,jsSpreadExpression extend fold+syntax region  jsModuleGroup        contained matchgroup=jsModuleBraces        start=/{/ end=/}/   contains=jsModuleKeyword,jsModuleComma,jsModuleAs,jsComment skipwhite skipempty nextgroup=jsFrom+syntax region  jsSpreadExpression   contained matchgroup=jsSpreadOperator      start=/\.\.\./ end=/[,}\]]\@=/ contains=@jsExpression+syntax region  jsRestExpression     contained matchgroup=jsRestOperator        start=/\.\.\./ end=/[,)]\@=/+syntax region  jsTernaryIf                    matchgroup=jsTernaryIfOperator   start=/?/  end=/\%(:\|[\}]\@=\)/  contains=@jsExpression extend skipwhite skipempty nextgroup=@jsExpression++syntax match   jsGenerator            contained /\*/ skipwhite skipempty nextgroup=jsFuncName,jsFuncArgs+syntax match   jsFuncName             contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>/ skipwhite skipempty nextgroup=jsFuncArgs,jsFlowFunctionGroup+syntax region  jsFuncArgExpression    contained matchgroup=jsFuncArgOperator start=/=/ end=/[,)]\@=/ contains=@jsExpression extend+syntax match   jsFuncArgCommas        contained ','+syntax keyword jsArguments            contained arguments+syntax keyword jsForAwait             contained await skipwhite skipempty nextgroup=jsParenRepeat++" Matches a single keyword argument with no parens+syntax match   jsArrowFuncArgs  /\k\+\s*\%(=>\)\@=/ skipwhite contains=jsFuncArgs skipwhite skipempty nextgroup=jsArrowFunction extend+" Matches a series of arguments surrounded in parens+syntax match   jsArrowFuncArgs  /([^()]*)\s*\(=>\)\@=/ contains=jsFuncArgs skipempty skipwhite nextgroup=jsArrowFunction extend++exe 'syntax match jsFunction /\<function\>/ skipwhite skipempty nextgroup=jsGenerator,jsFuncName,jsFuncArgs skipwhite '.(exists('g:javascript_conceal_function')       ? 'conceal cchar='.g:javascript_conceal_function : '')+exe 'syntax match jsArrowFunction /=>/      skipwhite skipempty nextgroup=jsFuncBlock,jsCommentFunction               '.(exists('g:javascript_conceal_arrow_function') ? 'conceal cchar='.g:javascript_conceal_arrow_function : '')+exe 'syntax match jsArrowFunction /()\s*\(=>\)\@=/   skipwhite skipempty nextgroup=jsArrowFunction                    '.(exists('g:javascript_conceal_noarg_arrow_function') ? 'conceal cchar='.g:javascript_conceal_noarg_arrow_function : '').(' contains=jsArrowFuncArgs')+exe 'syntax match jsArrowFunction /_\s*\(=>\)\@=/    skipwhite skipempty nextgroup=jsArrowFunction                    '.(exists('g:javascript_conceal_underscore_arrow_function') ? 'conceal cchar='.g:javascript_conceal_underscore_arrow_function : '')++" Classes+syntax keyword jsClassKeyword           contained class+syntax keyword jsExtendsKeyword         contained extends skipwhite skipempty nextgroup=@jsExpression+syntax match   jsClassNoise             contained /\./+syntax match   jsClassMethodType        contained /\%(get\|set\|static\)\%( \k\+\)\@=/ skipwhite skipempty nextgroup=jsAsyncKeyword,jsFuncName,jsClassProperty+syntax region  jsClassDefinition                  start=/\<class\>/ end=/\(\<extends\>\s\+\)\@<!{\@=/ contains=jsClassKeyword,jsExtendsKeyword,jsClassNoise,@jsExpression skipwhite skipempty nextgroup=jsCommentClass,jsClassBlock,jsFlowClassGroup+syntax match   jsClassProperty          contained /\<[0-9a-zA-Z_$]*\>\(\s*=\)\@=/ skipwhite skipempty nextgroup=jsClassValue+syntax region  jsClassValue             contained start=/=/ end=/\%(;\|}\|\n\)\@=/ contains=@jsExpression keepend+syntax region  jsClassPropertyComputed  contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression skipwhite skipempty nextgroup=jsFuncArgs,jsClassValue extend+syntax match   jsClassFuncName          contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\%(\s*(\)\@=/ skipwhite skipempty nextgroup=jsFuncArgs+syntax region  jsClassStringKey         contained start=+"+  skip=+\\\("\|$\)+  end=+"\|$+  contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs+syntax region  jsClassStringKey         contained start=+'+  skip=+\\\('\|$\)+  end=+'\|$+  contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs++" Destructuring+syntax match   jsDestructuringPropertyValue     contained /\<[0-9a-zA-Z_$]*\>/+syntax match   jsDestructuringProperty          contained /\<[0-9a-zA-Z_$]*\>\(\s*=\)\@=/ skipwhite skipempty nextgroup=jsDestructuringValue+syntax match   jsDestructuringAssignment        contained /\<[0-9a-zA-Z_$]*\>\(\s*:\)\@=/ skipwhite skipempty nextgroup=jsDestructuringValueAssignment+syntax region  jsDestructuringValue             contained start=/=/ end=/[,}\]]\@=/ contains=@jsExpression extend+syntax region  jsDestructuringValueAssignment   contained start=/:/ end=/[,}=]\@=/ contains=jsDestructuringPropertyValue,jsDestructuringBlock,jsNoise,jsDestructuringNoise skipwhite skipempty nextgroup=jsDestructuringValue extend+syntax match   jsDestructuringNoise             contained /[,\[\]]/+syntax region  jsDestructuringPropertyComputed  contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression skipwhite skipempty nextgroup=jsDestructuringValue,jsDestructuringNoise extend fold++" Comments+syntax keyword jsCommentTodo    contained TODO FIXME XXX TBD+syntax region  jsComment        start=/\/\// end=/$/ contains=jsCommentTodo,@Spell extend keepend+syntax region  jsComment        start=/\/\*/  end=/\*\// contains=jsCommentTodo,@Spell fold extend keepend+syntax region  jsEnvComment     start=/\%^#!/ end=/$/ display++" Specialized Comments - These are special comment regexes that are used in+" odd places that maintain the proper nextgroup functionality. It sucks we+" can't make jsComment a skippable type of group for nextgroup+syntax region  jsCommentFunction    contained start=/\/\// end=/$/    contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturn extend keepend+syntax region  jsCommentFunction    contained start=/\/\*/ end=/\*\// contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturn fold extend keepend+syntax region  jsCommentClass       contained start=/\/\// end=/$/    contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsClassBlock,jsFlowClassGroup extend keepend+syntax region  jsCommentClass       contained start=/\/\*/ end=/\*\// contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsClassBlock,jsFlowClassGroup fold extend keepend+syntax region  jsCommentMisc        contained start=/\/\// end=/$/    contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsBlock extend keepend+syntax region  jsCommentMisc        contained start=/\/\*/ end=/\*\// contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsBlock fold extend keepend++" Decorators+syntax match   jsDecorator                    /^\s*@/ nextgroup=jsDecoratorFunction+syntax match   jsDecoratorFunction  contained /[a-zA-Z_][a-zA-Z0-9_.]*/ nextgroup=jsParenDecorator++if exists("javascript_plugin_jsdoc")+  runtime extras/jsdoc.vim+  " NGDoc requires JSDoc+  if exists("javascript_plugin_ngdoc")+    runtime extras/ngdoc.vim+  endif+endif++if exists("javascript_plugin_flow")+  runtime extras/flow.vim+endif++syntax cluster jsExpression  contains=jsBracket,jsParen,jsObject,jsTernaryIf,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs,jsParensError,jsComment,jsArguments,jsThis,jsSuper,jsDo+syntax cluster jsAll         contains=@jsExpression,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsStatement,jsException,jsTry,jsAsyncKeyword,jsNoise,,jsBlockLabel++" Define the default highlighting.+" For version 5.7 and earlier: only when not done already+" For version 5.8 and later: only when an item doesn't have highlighting yet+if version >= 508 || !exists("did_javascript_syn_inits")+  if version < 508+    let did_javascript_syn_inits = 1+    command -nargs=+ HiLink hi link <args>+  else+    command -nargs=+ HiLink hi def link <args>+  endif+  HiLink jsComment              Comment+  HiLink jsEnvComment           PreProc+  HiLink jsParensIfElse         jsParens+  HiLink jsParensRepeat         jsParens+  HiLink jsParensSwitch         jsParens+  HiLink jsParensCatch          jsParens+  HiLink jsCommentTodo          Todo+  HiLink jsString               String+  HiLink jsObjectKeyString      String+  HiLink jsTemplateString       String+  HiLink jsObjectStringKey      String+  HiLink jsClassStringKey       String+  HiLink jsTaggedTemplate       StorageClass+  HiLink jsTernaryIfOperator    Operator+  HiLink jsRegexpString         String+  HiLink jsRegexpBoundary       SpecialChar+  HiLink jsRegexpQuantifier     SpecialChar+  HiLink jsRegexpOr             Conditional+  HiLink jsRegexpMod            SpecialChar+  HiLink jsRegexpBackRef        SpecialChar+  HiLink jsRegexpGroup          jsRegexpString+  HiLink jsRegexpCharClass      Character+  HiLink jsCharacter            Character+  HiLink jsPrototype            Special+  HiLink jsConditional          Conditional+  HiLink jsBranch               Conditional+  HiLink jsLabel                Label+  HiLink jsReturn               Statement+  HiLink jsRepeat               Repeat+  HiLink jsDo                   Repeat+  HiLink jsStatement            Statement+  HiLink jsException            Exception+  HiLink jsTry                  Exception+  HiLink jsFinally              Exception+  HiLink jsCatch                Exception+  HiLink jsAsyncKeyword         Keyword+  HiLink jsForAwait             Keyword+  HiLink jsArrowFunction        Type+  HiLink jsFunction             Type+  HiLink jsGenerator            jsFunction+  HiLink jsArrowFuncArgs        jsFuncArgs+  HiLink jsFuncName             Function+  HiLink jsClassFuncName        jsFuncName+  HiLink jsObjectFuncName       Function+  HiLink jsArguments            Special+  HiLink jsError                Error+  HiLink jsParensError          Error+  HiLink jsOperator             Operator+  HiLink jsOf                   Operator+  HiLink jsStorageClass         StorageClass+  HiLink jsClassKeyword         Keyword+  HiLink jsExtendsKeyword       Keyword+  HiLink jsThis                 Special+  HiLink jsSuper                Constant+  HiLink jsNan                  Number+  HiLink jsNull                 Type+  HiLink jsUndefined            Type+  HiLink jsNumber               Number+  HiLink jsFloat                Float+  HiLink jsBooleanTrue          Boolean+  HiLink jsBooleanFalse         Boolean+  HiLink jsObjectColon          jsNoise+  HiLink jsNoise                Noise+  HiLink jsBrackets             Noise+  HiLink jsParens               Noise+  HiLink jsBraces               Noise+  HiLink jsFuncBraces           Noise+  HiLink jsFuncParens           Noise+  HiLink jsClassBraces          Noise+  HiLink jsClassNoise           Noise+  HiLink jsIfElseBraces         Noise+  HiLink jsTryCatchBraces       Noise+  HiLink jsModuleBraces         Noise+  HiLink jsObjectBraces         Noise+  HiLink jsObjectSeparator      Noise+  HiLink jsFinallyBraces        Noise+  HiLink jsRepeatBraces         Noise+  HiLink jsSwitchBraces         Noise+  HiLink jsSpecial              Special+  HiLink jsTemplateVar          Special+  HiLink jsTemplateBraces       Noise+  HiLink jsGlobalObjects        Constant+  HiLink jsGlobalNodeObjects    Constant+  HiLink jsExceptions           Constant+  HiLink jsBuiltins             Constant+  HiLink jsImport               Include+  HiLink jsExport               Include+  HiLink jsExportDefault        StorageClass+  HiLink jsExportDefaultGroup   jsExportDefault+  HiLink jsModuleAs             Include+  HiLink jsModuleComma          jsNoise+  HiLink jsModuleAsterisk       Noise+  HiLink jsFrom                 Include+  HiLink jsDecorator            Special+  HiLink jsDecoratorFunction    Function+  HiLink jsParensDecorator      jsParens+  HiLink jsFuncArgOperator      jsFuncArgs+  HiLink jsClassProperty        jsObjectKey+  HiLink jsSpreadOperator       Operator+  HiLink jsRestOperator         Operator+  HiLink jsRestExpression       jsFuncArgs+  HiLink jsSwitchColon          Noise+  HiLink jsClassMethodType      Type+  HiLink jsObjectMethodType     Type+  HiLink jsClassDefinition      jsFuncName+  HiLink jsBlockLabel           Identifier+  HiLink jsBlockLabelKey        jsBlockLabel++  HiLink jsDestructuringBraces     Noise+  HiLink jsDestructuringProperty   jsFuncArgs+  HiLink jsDestructuringAssignment jsObjectKey+  HiLink jsDestructuringNoise      Noise++  HiLink jsCommentFunction      jsComment+  HiLink jsCommentClass         jsComment+  HiLink jsCommentMisc          jsComment++  HiLink jsDomErrNo             Constant+  HiLink jsDomNodeConsts        Constant+  HiLink jsDomElemAttrs         Label+  HiLink jsDomElemFuncs         PreProc++  HiLink jsHtmlEvents           Special+  HiLink jsHtmlElemAttrs        Label+  HiLink jsHtmlElemFuncs        PreProc++  HiLink jsCssStyles            Label++  delcommand HiLink+endif++" Define the htmlJavaScript for HTML syntax html.vim+syntax cluster  htmlJavaScript       contains=@jsAll+syntax cluster  javaScriptExpression contains=@jsAll++" Vim's default html.vim highlights all javascript as 'Special'+hi! def link javaScript              NONE++let b:current_syntax = "javascript"+if main_syntax == 'javascript'+  unlet main_syntax+endif

.vim/langvars.vim

new file mode 100644@@ -0,0 +1,187 @@+au FileType go+  \ let b:Comment="//"+  \ | let b:EndComment=""+  \ | let g:gofmt_command="goimports"+  \ | source ~/.vim/eightspaces.vim+  \ | setlocal noexpandtab+  \ | setlocal colorcolumn=100++au FileType rust+  \ let b:Comment="//"+  \ | let b:EndComment=""+  \ | let b:syntastic_mode="passive"+  \ | source ~/.vim/fourspaces.vim+  \ | syntax sync fromstart+  \ | noremap <buffer> gr :ALEFindReferences<CR>h+  \ | noremap <buffer> <C-]> :TagImposterAnticipateJump <Bar> ALEGoToDefinition<CR>+  " \ | noremap <buffer> <C-t> <C-o>h+  " \ | noremap <buffer> <C-]> :LspDefinition<CR>+  " \ | noremap <buffer> <C-]> :call LanguageClient#textDocument_definition()<CR>+  " \ | noremap <buffer> <C-t> <C-o>+  " \ | noremap <buffer> <C-]> :TagImposterAnticipateJump <Bar> ALEGoToDefinition<CR>++au FileType ledger+  \ let b:Comment=";"+  \ | let b:EndComment=""+  \ | source ~/.vim/fourspaces.vim++au FileType tsv+  \ source ~/.vim/tabs8.vim++au FileType wini+  \ let b:Comment="#"+  \ | let b:EndComment=""+  \ | source ~/.vim/twospaces.vim++au FileType conf+  \ let b:Comment="#"+  \ | let b:EndComment=""+  \ | source ~/.vim/twospaces.vim+  \ | set indentexpr=+  \ | set smartindent++au FileType toml+  \ let b:Comment="#"+  \ | let b:EndComment=""+  \ | source ~/.vim/twospaces.vim+  \ | set indentexpr=+  \ | set smartindent++au FileType yaml+  \ let b:Comment="#"+  \ | let b:EndComment=""+  \ | source ~/.vim/twospaces.vim+  \ | set indentexpr=+  \ | set smartindent++au FileType java+  \ let b:Comment="//"+  \ | let b:EndComment=""+  \ | source ~/.vim/fourspaces.vim++au FileType javascript+  \ let b:Comment="/*"+  \ | let b:EndComment="*/"+  \ | source ~/.vim/twospaces.vim++au FileType c+  \ let b:Comment="/*"+  \ | let b:EndComment="*/"+  \ | source ~/.vim/fourspaces.vim++au FileType cpp+  \ let b:Comment="//"+  \ | let b:EndComment=""+  \ | source ~/.vim/fourspaces.vim++au FileType nginx+  \ let b:Comment="#"+  \ | let b:EndComment=""+  \ | source ~/.vim/fourspaces.vim+  \ | set smartindent++au FileType tex+  \ let &mp="clear; pdflatex %"+  \ | let b:Comment="%"+  \ | let b:EndComment=""++au FileType lua+  \ let &mp="clear; lua %"+  \ | let &efm="lua: %f:%l:%m,%-G%.%#"+  \ | let b:Comment="--"+  \ | let b:EndComment=""++au FileType python+  \ let &mp="clear; python2 %"+  \ | let &efm='%A %#File "%f"\, line %l\,%.%#,%-GTrace%.%#,%C %.%#,%Z%m,%-G%.%#'+  \ | let b:Comment="#"+  \ | let b:EndComment=""+  \ | source ~/.vim/fourspaces.vim++au FileType php+  \ let b:Comment="//"+  \ | let b:EndComment=""+  \ | source ~/.vim/twospaces.vim++" Make PHP use smartindent dammit!+" (This is so HTML indenting is sane.)+au BufRead,BufNewFile *.html set smartindent+au BufRead,BufNewFile *.php set smartindent+au BufRead,BufNewFile *.jgr set smartindent++au FileType haskell+  \ let &mp="clear; ghc --make %"+  \ | let &efm='%f:%l:%c:'+  \ | let b:Comment="--"+  \ | let b:EndComment=""+  \ | set smartindent++au FileType cabal+  \ let b:Comment="--"+  \ | let b:EndComment=""+  \ | set smartindent++au FileType sml+  \ let &mp="ledit -x -h ~/.ledit/mosml mosml -P full %"+  \ | let b:Comment="(*"+  \ | let b:EndComment="*)"++au FileType vim+  \ let b:Comment='"'+  \ | let b:EndComment=""++au FileType lisp+  \ let b:Comment=";"+  \ | let b:EndComment=""++au FileType sh+  \ let b:Comment="#"+  \ | let b:EndComment=""+  \ | source ~/.vim/twospaces.vim++au FileType zsh+  \ let b:Comment="#"+  \ | let b:EndComment=""+  \ | source ~/.vim/twospaces.vim++au FileType utln+  \ let &mp="clear; validate-utlnx %"+  \ | let &efm='%f\, line %#%l:%m'+  \ | let b:Comment="(X:"+  \ | let b:EndComment=")"+  \ | set smartindent++au FileType mako+  \ let b:Comment="<%doc>"+  \ | let b:EndComment="</%doc>"+  \ | set smartindent++au FileType crontab+  \ let b:Comment="#"+  \ | let b:EndComment=""++au FileType conf+  \ let b:Comment="#"+  \ | let b:EndComment=""++au FileType make+  \ let b:Comment="#"+  \ | let b:EndComment=""++au FileType html+  \ let b:Comment="<!--"+  \ | let b:EndComment="-->"++au BufEnter *.html setlocal smartindent+au BufEnter *.tpl setlocal smartindent++au FileType htmldjango+  \ let b:Comment="{% comment %}"+  \ | let b:EndComment="{% endcomment %}"++au FileType css+  \ let b:Comment="/*"+  \ | let b:EndComment="*/"++" au BufEnter * filetype detect+

.vim/plugin/http_client.py

new file mode 100644@@ -0,0 +1,240 @@+import json+import re+import requests++from_cmdline = False+try:+    __file__+    from_cmdline = True+except NameError:+    pass++if not from_cmdline:+    import vim+++METHOD_REGEX = re.compile('^(GET|POST|DELETE|PUT|HEAD|OPTIONS|PATCH) (.*)$')+HEADER_REGEX = re.compile('^([^()<>@,;:\<>/\[\]?={}]+):\\s*(.*)$')+VAR_REGEX = re.compile('^# ?(:[^: ]+)\\s*=\\s*(.+)$')+GLOBAL_VAR_REGEX = re.compile('^# ?(\$[^$ ]+)\\s*=\\s*(.+)$')+FILE_REGEX = re.compile("!((?:file)|(?:(?:content)))\((.+)\)")+++def replace_vars(string, variables):+    for var, val in variables.items():+        string = string.replace(var, val)+    return string+++def is_comment(s):+    return s.startswith('#')+++def do_request(block, buf):+    variables = dict((m.groups() for m in (GLOBAL_VAR_REGEX.match(l) for l in buf) if m))+    variables.update(dict((m.groups() for m in (VAR_REGEX.match(l) for l in block) if m)))++    block = [line for line in block if not is_comment(line) and line.strip() != '']++    if len(block) == 0:+        print 'Request was empty.'+        return++    method_url = block.pop(0)+    method_url_match = METHOD_REGEX.match(method_url)+    if not method_url_match:+        print 'Could not find method or URL!'+        return++    method, url = method_url_match.groups()+    url = replace_vars(url, variables)++    headers = {}+    while len(block) > 0:+        header_match = HEADER_REGEX.match(block[0])+        if header_match:+            block.pop(0)+            header_name, header_value = header_match.groups()+            headers[header_name] = replace_vars(header_value, variables)+        else:+            break++    data = [ replace_vars(l, variables) for l in block ]+    files = None+    if all([ '=' in l for l in data ]):+      # Form data: separate entries into data dict, and files dict+      key_value_pairs = dict([ l.split('=', 1) for l in data ])+      def to_file(expr):+        type, arg = FILE_REGEX.match(expr).groups()+        arg = arg.replace('\\(', '(').replace('\\)', ')')+        return open(arg, 'rb') if type == 'file' else (arg)++      files = dict(map(lambda (k,v): (k, to_file(v)), filter(lambda (k,v): FILE_REGEX.match(v), key_value_pairs.items())))+      data = dict(filter(lambda (k,v): not FILE_REGEX.match(v), key_value_pairs.items()))+    else:+      # Straight data: just send it off as a string.+      data = '\n'.join(data)++    response = requests.request(method, url, headers=headers, data=data, files=files)+    content_type = response.headers.get('Content-Type', '').split(';')[0]++    response_body = response.text+    if content_type == 'application/json':+        try:+            response_body = json.dumps(+                json.loads(response.text), sort_keys=True, indent=2,+                separators=(',', ': '),+                ensure_ascii=vim.eval('g:http_client_json_escape_utf')=='1')+        except ValueError:+            pass++    display = (+        response_body.split('\n') ++        ['', '// status code: %s' % response.status_code] ++        ['// %s: %s' % (k, v) for k, v in response.headers.items()]+    )++    return display, content_type+++# Vim methods.++def vim_filetypes_by_content_type():+    return {+        'application/json': vim.eval('g:http_client_json_ft'),+        'application/xml': 'xml',+        'text/html': 'html'+    }++BUFFER_NAME = '__HTTP_Client_Response__'+++def find_block(buf, line_num):+    length = len(buf)+    is_buffer_terminator = lambda s: s.strip() == ''++    block_start = line_num+    while block_start > 0 and not is_buffer_terminator(buf[block_start]):+        block_start -= 1++    block_end = line_num+    while block_end < length and not is_buffer_terminator(buf[block_end]):+        block_end += 1++    return buf[block_start:block_end + 1]+++def open_scratch_buffer(contents, filetype):+    previous_window = vim.current.window+    existing_buffer_window_id = vim.eval('bufwinnr("%s")' % BUFFER_NAME)+    if existing_buffer_window_id == '-1':+        if vim.eval('g:http_client_result_vsplit') == '1':+            split_cmd = 'vsplit'+        else:+            split_cmd = 'split'+        vim.command('rightbelow %s %s' % (split_cmd, BUFFER_NAME))+        vim.command('setlocal buftype=nofile nospell')+    else:+        vim.command('%swincmd w' % existing_buffer_window_id)++    vim.command('set filetype=%s' % filetype)+    vim.current.buffer[:] = contents++    if vim.eval('g:http_client_focus_output_window') != '1':+        vim.current.window = previous_window+++def do_request_from_buffer():+    win = vim.current.window+    line_num = win.cursor[0] - 1+    block = find_block(win.buffer, line_num)+    result = do_request(block, win.buffer)+    if result:+        response, content_type = result+        vim_ft = vim_filetypes_by_content_type().get(content_type, 'text')+        open_scratch_buffer(response, vim_ft)+++# Tests.++def run_tests():+    import json++    def extract_json(resp):+        return json.loads(''.join([ l for l in resp[0] if not l.startswith('//') ]))++    def test(assertion, test):+        print 'Test %s: %s' % ('passed' if assertion else 'failed', test)+        if not assertion:+            raise AssertionError++    resp = extract_json(do_request([+        '# comment',+        '# :a=barf',+        'GET http://httpbin.org/headers',+        'X-Hey: :a',+        '# comment'+    ], []))+    test(resp['headers']['X-Hey'] == 'barf', 'Headers are passed with variable substitution.')++    resp = extract_json(do_request([+        '# :a = barf',+        'GET http://httpbin.org/get?data=:a'+    ], []))+    test(resp['args']['data'] == 'barf', 'GET data is passed with variable substitution.')++    resp = extract_json(do_request([+        'POST http://httpbin.org/post',+        'some data'+    ], []))+    test(resp['data'] == 'some data', 'POST data is passed with variable substitution.')++    resp = extract_json(do_request([+        'POST http://httpbin.org/post',+        'forma=a',+        'formb=b',+    ], []))+    test(resp['form']['forma'] == 'a', 'POST form data is passed.')++    resp = extract_json(do_request([+        'POST http://$global/post',+        'forma=a',+        'formb=b',+    ], [ '# $global = httpbin.org']))+    test(resp['form']['forma'] == 'a', 'Global variables are substituted.')++    import os+    from tempfile import NamedTemporaryFile++    SAMPLE_FILE_CONTENT = 'sample file content'++    temp_file = NamedTemporaryFile(delete = False)+    temp_file.write(SAMPLE_FILE_CONTENT)+    temp_file.close()+    resp = extract_json(do_request([+        'POST http://httpbin.org/post',+        'forma=a',+        'formb=b',+        "formc=!file(%s)" % temp_file.name,+    ], []))+    test(resp['files']['formc'] == SAMPLE_FILE_CONTENT, 'Files given as path are sent properly.')+    test(not 'formc' in resp['form'], 'File not included in form data.')+    os.unlink(temp_file.name)++    resp = extract_json(do_request([+        'POST http://httpbin.org/post',+        'forma=a',+        'formb=b',+        "formc=!content(%s)" % SAMPLE_FILE_CONTENT,+    ], []))+    test(resp['files']['formc'] == SAMPLE_FILE_CONTENT, 'Files given as content are sent properly.')++    resp = extract_json(do_request([+        'POST http://httpbin.org/post',+        "c=!content(foo \\(bar\\))",+    ], []))+    test(resp['files']['c'] == 'foo (bar)', 'Escaped parenthesis should be unescaped during request')+++if from_cmdline:+    run_tests()

.vim/plugin/http_client.vim

new file mode 100644@@ -0,0 +1,42 @@+let s:initialized_client = 0+let s:script_path = fnamemodify(resolve(expand('<sfile>:p')), ':h')++if !exists('http_client_bind_hotkey')+  let g:http_client_bind_hotkey = 1+endif++if !exists('http_client_json_ft')+  let g:http_client_json_ft = 'javascript'+endif++if !exists('http_client_json_escape_utf')+  let g:http_client_json_escape_utf = 1+endif++if !exists('http_client_result_vsplit')+  let g:http_client_result_vsplit = 1+endif++if !exists('http_client_focus_output_window')+  let g:http_client_focus_output_window = 1+endif++function! s:DoHTTPRequest()+  if !has('python')+    echo 'Error: this plugin requires vim compiled with python support.'+    finish+  endif++  if !s:initialized_client+    let s:initialized_client = 1+    execute 'pyfile ' . s:script_path . '/http_client.py'+  endif++  python do_request_from_buffer()+endfunction++command! -nargs=0 HTTPClientDoRequest call <SID>DoHTTPRequest()++if g:http_client_bind_hotkey+  silent! nnoremap <unique> <Leader>tt :HTTPClientDoRequest<cr>+endif

.vim/plugin/surround.vim

new file mode 100644@@ -0,0 +1,625 @@+" surround.vim - Surroundings+" Author:       Tim Pope <vimNOSPAM@tpope.org>+" Version:      1.90+" GetLatestVimScripts: 1697 1 :AutoInstall: surround.vim+"+" See surround.txt for help.  This can be accessed by doing+"+" :helptags ~/.vim/doc+" :help surround+"+" Licensed under the same terms as Vim itself.++" ============================================================================++" Exit quickly when:+" - this plugin was already loaded or disabled+" - when 'compatible' is set+if (exists("g:loaded_surround") && g:loaded_surround) || &cp+  finish+endif+let g:loaded_surround = 1++let s:cpo_save = &cpo+set cpo&vim++" Input functions {{{1++function! s:getchar()+  let c = getchar()+  if c =~ '^\d\+$'+    let c = nr2char(c)+  endif+  return c+endfunction++function! s:inputtarget()+  let c = s:getchar()+  while c =~ '^\d\+$'+    let c = c . s:getchar()+  endwhile+  if c == " "+    let c = c . s:getchar()+  endif+  if c =~ "\<Esc>\|\<C-C>\|\0"+    return ""+  else+    return c+  endif+endfunction++function! s:inputreplacement()+  "echo '-- SURROUND --'+  let c = s:getchar()+  if c == " "+    let c = c . s:getchar()+  endif+  if c =~ "\<Esc>" || c =~ "\<C-C>"+    return ""+  else+    return c+  endif+endfunction++function! s:beep()+  exe "norm! \<Esc>"+  return ""+endfunction++function! s:redraw()+  redraw+  return ""+endfunction++" }}}1++" Wrapping functions {{{1++function! s:extractbefore(str)+  if a:str =~ '\r'+    return matchstr(a:str,'.*\ze\r')+  else+    return matchstr(a:str,'.*\ze\n')+  endif+endfunction++function! s:extractafter(str)+  if a:str =~ '\r'+    return matchstr(a:str,'\r\zs.*')+  else+    return matchstr(a:str,'\n\zs.*')+  endif+endfunction++function! s:repeat(str,count)+  let cnt = a:count+  let str = ""+  while cnt > 0+    let str = str . a:str+    let cnt = cnt - 1+  endwhile+  return str+endfunction++function! s:fixindent(str,spc)+  let str = substitute(a:str,'\t',s:repeat(' ',&sw),'g')+  let spc = substitute(a:spc,'\t',s:repeat(' ',&sw),'g')+  let str = substitute(str,'\(\n\|\%^\).\@=','\1'.spc,'g')+  if ! &et+    let str = substitute(str,'\s\{'.&ts.'\}',"\t",'g')+  endif+  return str+endfunction++function! s:process(string)+  let i = 0+  while i < 7+    let i = i + 1+    let repl_{i} = ''+    let m = matchstr(a:string,nr2char(i).'.\{-\}\ze'.nr2char(i))+    if m != ''+      let m = substitute(strpart(m,1),'\r.*','','')+      let repl_{i} = input(substitute(m,':\s*$','','').': ')+    endif+  endwhile+  let s = ""+  let i = 0+  while i < strlen(a:string)+    let char = strpart(a:string,i,1)+    if char2nr(char) < 8+      let next = stridx(a:string,char,i+1)+      if next == -1+        let s = s . char+      else+        let insertion = repl_{char2nr(char)}+        let subs = strpart(a:string,i+1,next-i-1)+        let subs = matchstr(subs,'\r.*')+        while subs =~ '^\r.*\r'+          let sub = matchstr(subs,"^\r\\zs[^\r]*\r[^\r]*")+          let subs = strpart(subs,strlen(sub)+1)+          let r = stridx(sub,"\r")+          let insertion = substitute(insertion,strpart(sub,0,r),strpart(sub,r+1),'')+        endwhile+        let s = s . insertion+        let i = next+      endif+    else+      let s = s . char+    endif+    let i = i + 1+  endwhile+  return s+endfunction++function! s:wrap(string,char,type,...)+  let keeper = a:string+  let newchar = a:char+  let type = a:type+  let linemode = type ==# 'V' ? 1 : 0+  let special = a:0 ? a:1 : 0+  let before = ""+  let after  = ""+  if type ==# "V"+    let initspaces = matchstr(keeper,'\%^\s*')+  else+    let initspaces = matchstr(getline('.'),'\%^\s*')+  endif+  " Duplicate b's are just placeholders (removed)+  let pairs = "b()B{}r[]a<>"+  let extraspace = ""+  if newchar =~ '^ '+    let newchar = strpart(newchar,1)+    let extraspace = ' '+  endif+  let idx = stridx(pairs,newchar)+  if newchar == ' '+    let before = ''+    let after  = ''+  elseif exists("b:surround_".char2nr(newchar))+    let all    = s:process(b:surround_{char2nr(newchar)})+    let before = s:extractbefore(all)+    let after  =  s:extractafter(all)+  elseif exists("g:surround_".char2nr(newchar))+    let all    = s:process(g:surround_{char2nr(newchar)})+    let before = s:extractbefore(all)+    let after  =  s:extractafter(all)+  elseif newchar ==# "p"+    let before = "\n"+    let after  = "\n\n"+  elseif newchar =~# "[tT\<C-T><,]"+    let dounmapp = 0+    let dounmapb = 0+    if !maparg(">","c")+      let dounmapb= 1+      " Hide from AsNeeded+      exe "cn"."oremap > <CR>"+    endif+    let default = ""+    if newchar ==# "T"+      if !exists("s:lastdel")+        let s:lastdel = ""+      endif+      let default = matchstr(s:lastdel,'<\zs.\{-\}\ze>')+    endif+    let tag = input("<",default)+    echo "<".substitute(tag,'>*$','>','')+    if dounmapb+      silent! cunmap >+    endif+    if tag != ""+      let tag = substitute(tag,'>*$','','')+      let before = '<'.tag.'>'+      if tag =~ '/$'+        let after = ''+      else+        let after  = '</'.substitute(tag,' .*','','').'>'+      endif+      if newchar == "\<C-T>" || newchar == ","+        if type ==# "v" || type ==# "V"+          let before = before . "\n\t"+        endif+        if type ==# "v"+          let after  = "\n". after+        endif+      endif+    endif+  elseif newchar ==# 'l' || newchar == '\'+    " LaTeX+    let env = input('\begin{')+    let env = '{' . env+    let env = env . s:closematch(env)+    echo '\begin'.env+    if env != ""+      let before = '\begin'.env+      let after  = '\end'.matchstr(env,'[^}]*').'}'+    endif+    "if type ==# 'v' || type ==# 'V'+    "let before = before ."\n\t"+    "endif+    "if type ==# 'v'+    "let after  = "\n".initspaces.after+    "endif+  elseif newchar ==# 'f' || newchar ==# 'F'+    let fnc = input('function: ')+    if fnc != ""+      let before = substitute(fnc,'($','','').'('+      let after  = ')'+      if newchar ==# 'F'+        let before = before . ' '+        let after  = ' ' . after+      endif+    endif+  elseif idx >= 0+    let spc = (idx % 3) == 1 ? " " : ""+    let idx = idx / 3 * 3+    let before = strpart(pairs,idx+1,1) . spc+    let after  = spc . strpart(pairs,idx+2,1)+  elseif newchar == "\<C-[>" || newchar == "\<C-]>"+    let before = "{\n\t"+    let after  = "\n}"+  elseif newchar !~ '\a'+    let before = newchar+    let after  = newchar+  else+    let before = ''+    let after  = ''+  endif+  "let before = substitute(before,'\n','\n'.initspaces,'g')+  let after  = substitute(after ,'\n','\n'.initspaces,'g')+  "let after  = substitute(after,"\n\\s*\<C-U>\\s*",'\n','g')+  if type ==# 'V' || (special && type ==# "v")+    let before = substitute(before,' \+$','','')+    let after  = substitute(after ,'^ \+','','')+    if after !~ '^\n'+      let after  = initspaces.after+    endif+    if keeper !~ '\n$' && after !~ '^\n'+      let keeper = keeper . "\n"+    elseif keeper =~ '\n$' && after =~ '^\n'+      let after = strpart(after,1)+    endif+    if before !~ '\n\s*$'+      let before = before . "\n"+      if special+        let before = before . "\t"+      endif+    endif+  endif+  if type ==# 'V'+    let before = initspaces.before+  endif+  if before =~ '\n\s*\%$'+    if type ==# 'v'+      let keeper = initspaces.keeper+    endif+    let padding = matchstr(before,'\n\zs\s\+\%$')+    let before  = substitute(before,'\n\s\+\%$','\n','')+    let keeper = s:fixindent(keeper,padding)+  endif+  if type ==# 'V'+    let keeper = before.keeper.after+  elseif type =~ "^\<C-V>"+    " Really we should be iterating over the buffer+    let repl = substitute(before,'[\\~]','\\&','g').'\1'.substitute(after,'[\\~]','\\&','g')+    let repl = substitute(repl,'\n',' ','g')+    let keeper = substitute(keeper."\n",'\(.\{-\}\)\(\n\)',repl.'\n','g')+    let keeper = substitute(keeper,'\n\%$','','')+  else+    let keeper = before.extraspace.keeper.extraspace.after+  endif+  return keeper+endfunction++function! s:wrapreg(reg,char,...)+  let orig = getreg(a:reg)+  let type = substitute(getregtype(a:reg),'\d\+$','','')+  let special = a:0 ? a:1 : 0+  let new = s:wrap(orig,a:char,type,special)+  call setreg(a:reg,new,type)+endfunction+" }}}1++function! s:insert(...) " {{{1+  " Optional argument causes the result to appear on 3 lines, not 1+  "call inputsave()+  let linemode = a:0 ? a:1 : 0+  let char = s:inputreplacement()+  while char == "\<CR>" || char == "\<C-S>"+    " TODO: use total count for additional blank lines+    let linemode = linemode + 1+    let char = s:inputreplacement()+  endwhile+  "call inputrestore()+  if char == ""+    return ""+  endif+  "call inputsave()+  let cb_save = &clipboard+  set clipboard-=unnamed+  let reg_save = @@+  call setreg('"',"\r",'v')+  call s:wrapreg('"',char,linemode)+  " If line mode is used and the surrounding consists solely of a suffix,+  " remove the initial newline.  This fits a use case of mine but is a+  " little inconsistent.  Is there anyone that would prefer the simpler+  " behavior of just inserting the newline?+  if linemode && match(getreg('"'),'^\n\s*\zs.*') == 0+    call setreg('"',matchstr(getreg('"'),'^\n\s*\zs.*'),getregtype('"'))+  endif+  " This can be used to append a placeholder to the end+  if exists("g:surround_insert_tail")+    call setreg('"',g:surround_insert_tail,"a".getregtype('"'))+  endif+  "if linemode+  "call setreg('"',substitute(getreg('"'),'^\s\+','',''),'c')+  "endif+  if col('.') >= col('$')+    norm! ""p+  else+    norm! ""P+  endif+  if linemode+    call s:reindent()+  endif+  norm! `]+  call search('\r','bW')+  let @@ = reg_save+  let &clipboard = cb_save+  return "\<Del>"+endfunction " }}}1++function! s:reindent() " {{{1+  if exists("b:surround_indent") ? b:surround_indent : (exists("g:surround_indent") && g:surround_indent)+    silent norm! '[=']+  endif+endfunction " }}}1++function! s:dosurround(...) " {{{1+  let scount = v:count1+  let char = (a:0 ? a:1 : s:inputtarget())+  let spc = ""+  if char =~ '^\d\+'+    let scount = scount * matchstr(char,'^\d\+')+    let char = substitute(char,'^\d\+','','')+  endif+  if char =~ '^ '+    let char = strpart(char,1)+    let spc = 1+  endif+  if char == 'a'+    let char = '>'+  endif+  if char == 'r'+    let char = ']'+  endif+  let newchar = ""+  if a:0 > 1+    let newchar = a:2+    if newchar == "\<Esc>" || newchar == "\<C-C>" || newchar == ""+      return s:beep()+    endif+  endif+  let cb_save = &clipboard+  set clipboard-=unnamed+  let append = ""+  let original = getreg('"')+  let otype = getregtype('"')+  call setreg('"',"")+  let strcount = (scount == 1 ? "" : scount)+  if char == '/'+    exe 'norm! '.strcount.'[/d'.strcount.']/'+  else+    exe 'norm! d'.strcount.'i'.char+  endif+  let keeper = getreg('"')+  let okeeper = keeper " for reindent below+  if keeper == ""+    call setreg('"',original,otype)+    let &clipboard = cb_save+    return ""+  endif+  let oldline = getline('.')+  let oldlnum = line('.')+  if char ==# "p"+    call setreg('"','','V')+  elseif char ==# "s" || char ==# "w" || char ==# "W"+    " Do nothing+    call setreg('"','')+  elseif char =~ "[\"'`]"+    exe "norm! i \<Esc>d2i".char+    call setreg('"',substitute(getreg('"'),' ','',''))+  elseif char == '/'+    norm! "_x+    call setreg('"','/**/',"c")+    let keeper = substitute(substitute(keeper,'^/\*\s\=','',''),'\s\=\*$','','')+  else+    " One character backwards+    call search('.','bW')+    exe "norm! da".char+  endif+  let removed = getreg('"')+  let rem2 = substitute(removed,'\n.*','','')+  let oldhead = strpart(oldline,0,strlen(oldline)-strlen(rem2))+  let oldtail = strpart(oldline,  strlen(oldline)-strlen(rem2))+  let regtype = getregtype('"')+  if char =~# '[\[({<T]' || spc+    let keeper = substitute(keeper,'^\s\+','','')+    let keeper = substitute(keeper,'\s\+$','','')+  endif+  if col("']") == col("$") && col('.') + 1 == col('$')+    if oldhead =~# '^\s*$' && a:0 < 2+      let keeper = substitute(keeper,'\%^\n'.oldhead.'\(\s*.\{-\}\)\n\s*\%$','\1','')+    endif+    let pcmd = "p"+  else+    let pcmd = "P"+  endif+  if line('.') < oldlnum && regtype ==# "V"+    let pcmd = "p"+  endif+  call setreg('"',keeper,regtype)+  if newchar != ""+    call s:wrapreg('"',newchar)+  endif+  silent exe 'norm! ""'.pcmd.'`['+  if removed =~ '\n' || okeeper =~ '\n' || getreg('"') =~ '\n'+    call s:reindent()+  endif+  if getline('.') =~ '^\s\+$' && keeper =~ '^\s*\n'+    silent norm! cc+  endif+  call setreg('"',removed,regtype)+  let s:lastdel = removed+  let &clipboard = cb_save+  if newchar == ""+    silent! call repeat#set("\<Plug>Dsurround".char,scount)+  else+    silent! call repeat#set("\<Plug>Csurround".char.newchar,scount)+  endif+endfunction " }}}1++function! s:changesurround() " {{{1+  let a = s:inputtarget()+  if a == ""+    return s:beep()+  endif+  let b = s:inputreplacement()+  if b == ""+    return s:beep()+  endif+  call s:dosurround(a,b)+endfunction " }}}1++function! s:opfunc(type,...) " {{{1+  let char = s:inputreplacement()+  if char == ""+    return s:beep()+  endif+  let reg = '"'+  let sel_save = &selection+  let &selection = "inclusive"+  let cb_save  = &clipboard+  set clipboard-=unnamed+  let reg_save = getreg(reg)+  let reg_type = getregtype(reg)+  "call setreg(reg,"\n","c")+  let type = a:type+  if a:type == "char"+    silent exe 'norm! v`[o`]"'.reg.'y'+    let type = 'v'+  elseif a:type == "line"+    silent exe 'norm! `[V`]"'.reg.'y'+    let type = 'V'+  elseif a:type ==# "v" || a:type ==# "V" || a:type ==# "\<C-V>"+    let ve = &virtualedit+    if !(a:0 && a:1)+      set virtualedit=+    endif+    silent exe 'norm! gv"'.reg.'y'+    let &virtualedit = ve+  elseif a:type =~ '^\d\+$'+    let type = 'v'+    silent exe 'norm! ^v'.a:type.'$h"'.reg.'y'+    if mode() ==# 'v'+      norm! v+      return s:beep()+    endif+  else+    let &selection = sel_save+    let &clipboard = cb_save+    return s:beep()+  endif+  let keeper = getreg(reg)+  if type ==# "v" && a:type !=# "v"+    let append = matchstr(keeper,'\_s\@<!\s*$')+    let keeper = substitute(keeper,'\_s\@<!\s*$','','')+  endif+  call setreg(reg,keeper,type)+  call s:wrapreg(reg,char,a:0 && a:1)+  if type ==# "v" && a:type !=# "v" && append != ""+    call setreg(reg,append,"ac")+  endif+  silent exe 'norm! gv'.(reg == '"' ? '' : '"' . reg).'p`['+  if type ==# 'V' || (getreg(reg) =~ '\n' && type ==# 'v')+    call s:reindent()+  endif+  call setreg(reg,reg_save,reg_type)+  let &selection = sel_save+  let &clipboard = cb_save+  if a:type =~ '^\d\+$'+    silent! call repeat#set("\<Plug>Y".(a:0 && a:1 ? "S" : "s")."surround".char,a:type)+  endif+endfunction++function! s:opfunc2(arg)+  call s:opfunc(a:arg,1)+endfunction " }}}1++function! s:closematch(str) " {{{1+  " Close an open (, {, [, or < on the command line.+  let tail = matchstr(a:str,'.[^\[\](){}<>]*$')+  if tail =~ '^\[.\+'+    return "]"+  elseif tail =~ '^(.\+'+    return ")"+  elseif tail =~ '^{.\+'+    return "}"+  elseif tail =~ '^<.+'+    return ">"+  else+    return ""+  endif+endfunction " }}}1++nnoremap <silent> <Plug>Dsurround  :<C-U>call <SID>dosurround(<SID>inputtarget())<CR>+nnoremap <silent> <Plug>Csurround  :<C-U>call <SID>changesurround()<CR>+nnoremap <silent> <Plug>Yssurround :<C-U>call <SID>opfunc(v:count1)<CR>+nnoremap <silent> <Plug>YSsurround :<C-U>call <SID>opfunc2(v:count1)<CR>+" <C-U> discards the numerical argument but there's not much we can do with it+nnoremap <silent> <Plug>Ysurround  :<C-U>set opfunc=<SID>opfunc<CR>g@+nnoremap <silent> <Plug>YSurround  :<C-U>set opfunc=<SID>opfunc2<CR>g@+vnoremap <silent> <Plug>Vsurround  :<C-U>call <SID>opfunc(visualmode())<CR>+vnoremap <silent> <Plug>VSurround  :<C-U>call <SID>opfunc(visualmode(),visualmode() ==# 'V' ? 1 : 0)<CR>+vnoremap <silent> <Plug>VgSurround :<C-U>call <SID>opfunc(visualmode(),visualmode() ==# 'V' ? 0 : 1)<CR>+inoremap <silent> <Plug>Isurround  <C-R>=<SID>insert()<CR>+inoremap <silent> <Plug>ISurround  <C-R>=<SID>insert(1)<CR>++if !exists("g:surround_no_mappings") || ! g:surround_no_mappings+  nmap      ds   <Plug>Dsurround+  nmap      cs   <Plug>Csurround+  nmap      ys   <Plug>Ysurround+  nmap      yS   <Plug>YSurround+  nmap      yss  <Plug>Yssurround+  nmap      ySs  <Plug>YSsurround+  nmap      ySS  <Plug>YSsurround+  if !hasmapto("<Plug>Vsurround","v") && !hasmapto("<Plug>VSurround","v")+    if exists(":xmap")+      xmap  s    <Plug>Vsurround+    else+      vmap  s    <Plug>Vsurround+    endif+  endif+  if !hasmapto("<Plug>VSurround","v")+    if exists(":xmap")+      xmap  S    <Plug>VSurround+    else+      vmap  S    <Plug>VSurround+    endif+  endif+  if exists(":xmap")+    xmap    gS   <Plug>VgSurround+  else+    vmap    gS   <Plug>VgSurround+  endif+  if !hasmapto("<Plug>Isurround","i") && "" == mapcheck("<C-S>","i")+    imap    <C-S> <Plug>Isurround+  endif+  imap      <C-G>s <Plug>Isurround+  imap      <C-G>S <Plug>ISurround+  "Implemented internally instead+  "imap      <C-S><C-S> <Plug>ISurround+endif++let &cpo = s:cpo_save++" vim:set ft=vim sw=2 sts=2 et:

.vim/scripts.vim

new file mode 100644@@ -0,0 +1,7 @@+if did_filetype()+  finish+endif++if getline(1) =~ 'utln.*'+  setfiletype utln+endif

.vim/session-go.vim

new file mode 100644@@ -0,0 +1 @@+au BufWritePost *.go silent !ctags-go

.vim/session-rust.vim

new file mode 100644@@ -0,0 +1,2 @@+" au BufWritePost *.rs silent !ctags-rust > /dev/null 2>&1+" au BufWritePost *.rs !ctags-rust

.vim/syntax/javascript.vim

new file mode 100644@@ -0,0 +1,382 @@+" Vim syntax file+" Language:     JavaScript+" Maintainer:   vim-javascript community+" URL:          https://github.com/pangloss/vim-javascript++if !exists("main_syntax")+  if version < 600+    syntax clear+  elseif exists("b:current_syntax")+    finish+  endif+  let main_syntax = 'javascript'+endif++" Dollar sign is permitted anywhere in an identifier+if v:version > 704 || v:version == 704 && has('patch1142')+  syntax iskeyword @,48-57,_,192-255,$+else+  setlocal iskeyword+=$+endif++syntax sync fromstart+" TODO: Figure out what type of casing I need+" syntax case ignore+syntax case match++syntax match   jsNoise          /[:,\;\.]\{1}/+syntax match   jsFuncCall       /\k\+\%(\s*(\)\@=/+syntax match   jsParensError    /[)}\]]/++" Program Keywords+syntax keyword jsStorageClass   const var let skipwhite skipempty nextgroup=jsDestructuringBlock,jsDestructuringArray,jsVariableDef+syntax match   jsVariableDef    contained /\k\+/ skipwhite skipempty nextgroup=jsFlowDefinition+syntax keyword jsOperator       delete instanceof typeof void new in of skipwhite skipempty nextgroup=@jsExpression+syntax match   jsOperator       /[\!\|\&\+\-\<\>\=\%\/\*\~\^]\{1}/ skipwhite skipempty nextgroup=@jsExpression+syntax keyword jsBooleanTrue    true+syntax keyword jsBooleanFalse   false++" Modules+syntax keyword jsImport                       import skipwhite skipempty nextgroup=jsModuleAsterisk,jsModuleKeyword,jsModuleGroup,jsFlowImportType+syntax keyword jsExport                       export skipwhite skipempty nextgroup=@jsAll,jsModuleGroup,jsExportDefault,jsModuleAsterisk,jsModuleKeyword+syntax match   jsModuleKeyword      contained /\k\+/ skipwhite skipempty nextgroup=jsModuleAs,jsFrom,jsModuleComma+syntax keyword jsExportDefault      contained default skipwhite skipempty nextgroup=@jsExpression+syntax keyword jsExportDefaultGroup contained default skipwhite skipempty nextgroup=jsModuleAs,jsFrom,jsModuleComma+syntax match   jsModuleAsterisk     contained /\*/ skipwhite skipempty nextgroup=jsModuleKeyword,jsModuleAs,jsFrom+syntax keyword jsModuleAs           contained as skipwhite skipempty nextgroup=jsModuleKeyword,jsExportDefaultGroup+syntax keyword jsFrom               contained from skipwhite skipempty nextgroup=jsString+syntax match   jsModuleComma        contained /,/ skipwhite skipempty nextgroup=jsModuleKeyword,jsModuleAsterisk,jsModuleGroup++" Strings, Templates, Numbers+syntax region  jsString           start=+"+  skip=+\\\("\|$\)+  end=+"\|$+  contains=jsSpecial,@Spell extend+syntax region  jsString           start=+'+  skip=+\\\('\|$\)+  end=+'\|$+  contains=jsSpecial,@Spell extend+syntax region  jsTemplateString   start=+`+  skip=+\\\(`\|$\)+  end=+`+     contains=jsTemplateVar,jsSpecial extend+syntax match   jsTaggedTemplate   /\k\+\%(`\)\@=/ nextgroup=jsTemplateString+syntax match   jsNumber           /\<\d\+\%([eE][+-]\=\d\+\)\=\>\|\<0[bB][01]\+\>\|\<0[oO]\o\+\>\|\<0[xX]\x\+\>/+syntax keyword jsNumber           Infinity+syntax match   jsFloat            /\<\%(\d\+\.\d\+\|\d\+\.\|\.\d\+\)\%([eE][+-]\=\d\+\)\=\>/++" Regular Expressions+syntax match   jsSpecial          contained "\v\\%(0|\\x\x\{2\}\|\\u\x\{4\}\|\c[A-Z]|.)"+syntax region  jsTemplateVar      contained matchgroup=jsTemplateBraces start=+${+ end=+}+ contains=@jsExpression keepend+syntax region  jsRegexpCharClass  contained start=+\[+ skip=+\\.+ end=+\]++syntax match   jsRegexpBoundary   contained "\v%(\<@![\^$]|\\[bB])"+syntax match   jsRegexpBackRef    contained "\v\\[1-9][0-9]*"+syntax match   jsRegexpQuantifier contained "\v\\@<!%([?*+]|\{\d+%(,|,\d+)?})\??"+syntax match   jsRegexpOr         contained "\v\<@!\|"+syntax match   jsRegexpMod        contained "\v\(@<=\?[:=!>]"+syntax region  jsRegexpGroup      contained start="\\\@<!(" skip="\\.\|\[\(\\.\|[^]]\)*\]" end="\\\@<!)" contains=jsRegexpCharClass,@jsRegexpSpecial keepend+if v:version > 703 || v:version == 603 && has("patch1088")+  syntax region  jsRegexpString   start=+\%(\%(\%(return\|case\)\s\+\)\@50<=\|\%(\%([)\]"']\|\d\|\w\)\s*\)\@50<!\)/\(\*\|/\)\@!+ skip=+\\.\|\[\%(\\.\|[^]]\)*\]+ end=+/[gimy]\{,4}+ contains=jsRegexpCharClass,jsRegexpGroup,@jsRegexpSpecial oneline keepend extend+else+  syntax region  jsRegexpString   start=+\%(\%(\%(return\|case\)\s\+\)\@<=\|\%(\%([)\]"']\|\d\|\w\)\s*\)\@<!\)/\(\*\|/\)\@!+ skip=+\\.\|\[\%(\\.\|[^]]\)*\]+ end=+/[gimy]\{,4}+ contains=jsRegexpCharClass,jsRegexpGroup,@jsRegexpSpecial oneline keepend extend+endif+syntax cluster jsRegexpSpecial    contains=jsSpecial,jsRegexpBoundary,jsRegexpBackRef,jsRegexpQuantifier,jsRegexpOr,jsRegexpMod++" Objects+syntax match   jsObjectKey         contained /\<[0-9a-zA-Z_$]*\>\(\s*:\)\@=/ contains=jsFunctionKey skipwhite skipempty nextgroup=jsObjectValue+syntax match   jsObjectColon       contained /:/ skipwhite skipempty+syntax region  jsObjectKeyString   contained start=+"+  skip=+\\\("\|$\)+  end=+"\|$+  contains=jsSpecial,@Spell skipwhite skipempty nextgroup=jsObjectValue+syntax region  jsObjectKeyString   contained start=+'+  skip=+\\\('\|$\)+  end=+'\|$+  contains=jsSpecial,@Spell skipwhite skipempty nextgroup=jsObjectValue+syntax region  jsObjectKeyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression skipwhite skipempty nextgroup=jsObjectValue,jsFuncArgs extend+syntax match   jsObjectSeparator   contained /,/+syntax region  jsObjectValue       contained start=/:/ end=/\%(,\|}\)\@=/ contains=jsObjectColon,@jsExpression extend+syntax match   jsObjectFuncName    contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>[\r\n\t ]*(\@=/ skipwhite skipempty nextgroup=jsFuncArgs+syntax match   jsFunctionKey       contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\s*function\s*\)\@=/+syntax match   jsObjectMethodType  contained /\%(get\|set\)\%( \k\+\)\@=/ skipwhite skipempty nextgroup=jsObjectFuncName+syntax region  jsObjectStringKey   contained start=+"+  skip=+\\\("\|$\)+  end=+"\|$+  contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs,jsObjectValue+syntax region  jsObjectStringKey   contained start=+'+  skip=+\\\('\|$\)+  end=+'\|$+  contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs,jsObjectValue++exe 'syntax keyword jsNull      null             '.(exists('g:javascript_conceal_null')      ? 'conceal cchar='.g:javascript_conceal_null       : '')+exe 'syntax keyword jsReturn    return contained '.(exists('g:javascript_conceal_return')    ? 'conceal cchar='.g:javascript_conceal_return     : '').' skipwhite skipempty nextgroup=@jsExpression'+exe 'syntax keyword jsUndefined undefined        '.(exists('g:javascript_conceal_undefined') ? 'conceal cchar='.g:javascript_conceal_undefined  : '')+exe 'syntax keyword jsNan       NaN              '.(exists('g:javascript_conceal_NaN')       ? 'conceal cchar='.g:javascript_conceal_NaN        : '')+exe 'syntax keyword jsPrototype prototype        '.(exists('g:javascript_conceal_prototype') ? 'conceal cchar='.g:javascript_conceal_prototype  : '')+exe 'syntax keyword jsThis      this             '.(exists('g:javascript_conceal_this')      ? 'conceal cchar='.g:javascript_conceal_this       : '')+exe 'syntax keyword jsSuper     super  contained '.(exists('g:javascript_conceal_super')     ? 'conceal cchar='.g:javascript_conceal_super      : '')++" Statement Keywords+syntax match   jsBlockLabel              /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\s*:/    contains=jsNoise skipwhite skipempty nextgroup=jsBlock+syntax match   jsBlockLabelKey contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\%(\s*\%(;\|\n\)\)\@=/+syntax keyword jsStatement    contained with yield debugger+syntax keyword jsStatement    contained break continue skipwhite skipempty nextgroup=jsBlockLabelKey+syntax keyword jsConditional            if             skipwhite skipempty nextgroup=jsParenIfElse+syntax keyword jsConditional            else           skipwhite skipempty nextgroup=jsCommentMisc,jsIfElseBlock+syntax keyword jsConditional            switch         skipwhite skipempty nextgroup=jsParenSwitch+syntax keyword jsRepeat                 while for      skipwhite skipempty nextgroup=jsParenRepeat,jsForAwait+syntax keyword jsDo                     do             skipwhite skipempty nextgroup=jsRepeatBlock+syntax region  jsSwitchCase   contained matchgroup=jsLabel start=/\<\%(case\|default\)\>/ end=/:\@=/ contains=@jsExpression,jsLabel skipwhite skipempty nextgroup=jsSwitchColon keepend+syntax keyword jsTry                    try            skipwhite skipempty nextgroup=jsTryCatchBlock+syntax keyword jsFinally      contained finally        skipwhite skipempty nextgroup=jsFinallyBlock+syntax keyword jsCatch        contained catch          skipwhite skipempty nextgroup=jsParenCatch+syntax keyword jsException              throw+syntax keyword jsAsyncKeyword           async await+syntax match   jsSwitchColon   contained /:/            skipwhite skipempty nextgroup=jsSwitchBlock++" Keywords+syntax keyword jsGlobalObjects      Array Boolean Date Function Iterator Number Object Symbol Map WeakMap Set RegExp String Proxy Promise Buffer ParallelArray ArrayBuffer DataView Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray JSON Math console document window Intl Collator DateTimeFormat NumberFormat fetch+syntax keyword jsGlobalNodeObjects  module exports global process __dirname __filename+syntax match   jsGlobalNodeObjects  /\<require\>/ containedin=jsFuncCall+syntax keyword jsExceptions         Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError+syntax keyword jsBuiltins           decodeURI decodeURIComponent encodeURI encodeURIComponent eval isFinite isNaN parseFloat parseInt uneval+" DISCUSS: How imporant is this, really? Perhaps it should be linked to an error because I assume the keywords are reserved?+syntax keyword jsFutureKeys         abstract enum int short boolean interface byte long char final native synchronized float package throws goto private transient implements protected volatile double public++" DISCUSS: Should we really be matching stuff like this?+" DOM2 Objects+syntax keyword jsGlobalObjects  DOMImplementation DocumentFragment Document Node NodeList NamedNodeMap CharacterData Attr Element Text Comment CDATASection DocumentType Notation Entity EntityReference ProcessingInstruction+syntax keyword jsExceptions     DOMException++" DISCUSS: Should we really be matching stuff like this?+" DOM2 CONSTANT+syntax keyword jsDomErrNo       INDEX_SIZE_ERR DOMSTRING_SIZE_ERR HIERARCHY_REQUEST_ERR WRONG_DOCUMENT_ERR INVALID_CHARACTER_ERR NO_DATA_ALLOWED_ERR NO_MODIFICATION_ALLOWED_ERR NOT_FOUND_ERR NOT_SUPPORTED_ERR INUSE_ATTRIBUTE_ERR INVALID_STATE_ERR SYNTAX_ERR INVALID_MODIFICATION_ERR NAMESPACE_ERR INVALID_ACCESS_ERR+syntax keyword jsDomNodeConsts  ELEMENT_NODE ATTRIBUTE_NODE TEXT_NODE CDATA_SECTION_NODE ENTITY_REFERENCE_NODE ENTITY_NODE PROCESSING_INSTRUCTION_NODE COMMENT_NODE DOCUMENT_NODE DOCUMENT_TYPE_NODE DOCUMENT_FRAGMENT_NODE NOTATION_NODE++" DISCUSS: Should we really be special matching on these props?+" HTML events and internal variables+syntax keyword jsHtmlEvents     onblur onclick oncontextmenu ondblclick onfocus onkeydown onkeypress onkeyup onmousedown onmousemove onmouseout onmouseover onmouseup onresize++" Code blocks+syntax region  jsBracket                      matchgroup=jsBrackets            start=/\[/ end=/\]/ contains=@jsExpression,jsSpreadExpression extend fold+syntax region  jsParen                        matchgroup=jsParens              start=/(/  end=/)/  contains=@jsAll extend fold+syntax region  jsParenDecorator     contained matchgroup=jsParensDecorator     start=/(/  end=/)/  contains=@jsAll skipwhite skipempty nextgroup=jsCommentMisc extend fold+syntax region  jsParenIfElse        contained matchgroup=jsParensIfElse        start=/(/  end=/)/  contains=@jsAll skipwhite skipempty nextgroup=jsCommentMisc,jsIfElseBlock extend fold+syntax region  jsParenRepeat        contained matchgroup=jsParensRepeat        start=/(/  end=/)/  contains=@jsAll skipwhite skipempty nextgroup=jsCommentMisc,jsRepeatBlock extend fold+syntax region  jsParenSwitch        contained matchgroup=jsParensSwitch        start=/(/  end=/)/  contains=@jsAll skipwhite skipempty nextgroup=jsSwitchBlock extend fold+syntax region  jsParenCatch         contained matchgroup=jsParensCatch         start=/(/  end=/)/  skipwhite skipempty nextgroup=jsTryCatchBlock extend fold+syntax region  jsFuncArgs           contained matchgroup=jsFuncParens          start=/(/  end=/)/  contains=jsFuncArgCommas,jsComment,jsFuncArgExpression,jsDestructuringBlock,jsDestructuringArray,jsRestExpression,jsFlowArgumentDef skipwhite skipempty nextgroup=jsCommentFunction,jsFuncBlock,jsFlowReturn extend fold+syntax region  jsClassBlock         contained matchgroup=jsClassBraces         start=/{/  end=/}/  contains=jsClassFuncName,jsClassMethodType,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator,jsClassProperty,jsClassPropertyComputed,jsClassStringKey,jsAsyncKeyword,jsNoise extend fold+syntax region  jsFuncBlock          contained matchgroup=jsFuncBraces          start=/{/  end=/}/  contains=@jsAll,jsBlock extend fold+syntax region  jsIfElseBlock        contained matchgroup=jsIfElseBraces        start=/{/  end=/}/  contains=@jsAll,jsBlock extend fold+syntax region  jsTryCatchBlock      contained matchgroup=jsTryCatchBraces      start=/{/  end=/}/  contains=@jsAll,jsBlock skipwhite skipempty nextgroup=jsCatch,jsFinally extend fold+syntax region  jsFinallyBlock       contained matchgroup=jsFinallyBraces       start=/{/  end=/}/  contains=@jsAll,jsBlock extend fold+syntax region  jsSwitchBlock        contained matchgroup=jsSwitchBraces        start=/{/  end=/}/  contains=@jsAll,jsBlock,jsSwitchCase extend fold+syntax region  jsRepeatBlock        contained matchgroup=jsRepeatBraces        start=/{/  end=/}/  contains=@jsAll,jsBlock extend fold+syntax region  jsDestructuringBlock contained matchgroup=jsDestructuringBraces start=/{/  end=/}/  contains=jsDestructuringProperty,jsDestructuringAssignment,jsDestructuringNoise,jsDestructuringPropertyComputed,jsSpreadExpression,jsComment extend fold+syntax region  jsDestructuringArray contained matchgroup=jsDestructuringBraces start=/\[/ end=/\]/ contains=jsDestructuringPropertyValue,jsNoise,jsDestructuringProperty,jsSpreadExpression,jsComment extend fold+syntax region  jsObject             contained matchgroup=jsObjectBraces        start=/{/  end=/}/  contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectMethodType,jsGenerator,jsComment,jsObjectStringKey,jsSpreadExpression,jsDecorator,jsAsyncKeyword extend fold+syntax region  jsBlock                        matchgroup=jsBraces              start=/{/  end=/}/  contains=@jsAll,jsSpreadExpression extend fold+syntax region  jsModuleGroup        contained matchgroup=jsModuleBraces        start=/{/ end=/}/   contains=jsModuleKeyword,jsModuleComma,jsModuleAs,jsComment skipwhite skipempty nextgroup=jsFrom+syntax region  jsSpreadExpression   contained matchgroup=jsSpreadOperator      start=/\.\.\./ end=/[,}\]]\@=/ contains=@jsExpression+syntax region  jsRestExpression     contained matchgroup=jsRestOperator        start=/\.\.\./ end=/[,)]\@=/+syntax region  jsTernaryIf                    matchgroup=jsTernaryIfOperator   start=/?/  end=/\%(:\|[\}]\@=\)/  contains=@jsExpression extend skipwhite skipempty nextgroup=@jsExpression++syntax match   jsGenerator            contained /\*/ skipwhite skipempty nextgroup=jsFuncName,jsFuncArgs+syntax match   jsFuncName             contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>/ skipwhite skipempty nextgroup=jsFuncArgs,jsFlowFunctionGroup+syntax region  jsFuncArgExpression    contained matchgroup=jsFuncArgOperator start=/=/ end=/[,)]\@=/ contains=@jsExpression extend+syntax match   jsFuncArgCommas        contained ','+syntax keyword jsArguments            contained arguments+syntax keyword jsForAwait             contained await skipwhite skipempty nextgroup=jsParenRepeat++" Matches a single keyword argument with no parens+syntax match   jsArrowFuncArgs  /\k\+\s*\%(=>\)\@=/ skipwhite contains=jsFuncArgs skipwhite skipempty nextgroup=jsArrowFunction extend+" Matches a series of arguments surrounded in parens+syntax match   jsArrowFuncArgs  /([^()]*)\s*\(=>\)\@=/ contains=jsFuncArgs skipempty skipwhite nextgroup=jsArrowFunction extend++exe 'syntax match jsFunction /\<function\>/ skipwhite skipempty nextgroup=jsGenerator,jsFuncName,jsFuncArgs skipwhite '.(exists('g:javascript_conceal_function')       ? 'conceal cchar='.g:javascript_conceal_function : '')+exe 'syntax match jsArrowFunction /=>/      skipwhite skipempty nextgroup=jsFuncBlock,jsCommentFunction               '.(exists('g:javascript_conceal_arrow_function') ? 'conceal cchar='.g:javascript_conceal_arrow_function : '')+exe 'syntax match jsArrowFunction /()\s*\(=>\)\@=/   skipwhite skipempty nextgroup=jsArrowFunction                    '.(exists('g:javascript_conceal_noarg_arrow_function') ? 'conceal cchar='.g:javascript_conceal_noarg_arrow_function : '').(' contains=jsArrowFuncArgs')+exe 'syntax match jsArrowFunction /_\s*\(=>\)\@=/    skipwhite skipempty nextgroup=jsArrowFunction                    '.(exists('g:javascript_conceal_underscore_arrow_function') ? 'conceal cchar='.g:javascript_conceal_underscore_arrow_function : '')++" Classes+syntax keyword jsClassKeyword           contained class+syntax keyword jsExtendsKeyword         contained extends skipwhite skipempty nextgroup=@jsExpression+syntax match   jsClassNoise             contained /\./+syntax match   jsClassMethodType        contained /\%(get\|set\|static\)\%( \k\+\)\@=/ skipwhite skipempty nextgroup=jsAsyncKeyword,jsFuncName,jsClassProperty+syntax region  jsClassDefinition                  start=/\<class\>/ end=/\(\<extends\>\s\+\)\@<!{\@=/ contains=jsClassKeyword,jsExtendsKeyword,jsClassNoise,@jsExpression skipwhite skipempty nextgroup=jsCommentClass,jsClassBlock,jsFlowClassGroup+syntax match   jsClassProperty          contained /\<[0-9a-zA-Z_$]*\>\(\s*=\)\@=/ skipwhite skipempty nextgroup=jsClassValue+syntax region  jsClassValue             contained start=/=/ end=/\%(;\|}\|\n\)\@=/ contains=@jsExpression keepend+syntax region  jsClassPropertyComputed  contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression skipwhite skipempty nextgroup=jsFuncArgs,jsClassValue extend+syntax match   jsClassFuncName          contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\%(\s*(\)\@=/ skipwhite skipempty nextgroup=jsFuncArgs+syntax region  jsClassStringKey         contained start=+"+  skip=+\\\("\|$\)+  end=+"\|$+  contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs+syntax region  jsClassStringKey         contained start=+'+  skip=+\\\('\|$\)+  end=+'\|$+  contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs++" Destructuring+syntax match   jsDestructuringPropertyValue     contained /\<[0-9a-zA-Z_$]*\>/+syntax match   jsDestructuringProperty          contained /\<[0-9a-zA-Z_$]*\>\(\s*=\)\@=/ skipwhite skipempty nextgroup=jsDestructuringValue+syntax match   jsDestructuringAssignment        contained /\<[0-9a-zA-Z_$]*\>\(\s*:\)\@=/ skipwhite skipempty nextgroup=jsDestructuringValueAssignment+syntax region  jsDestructuringValue             contained start=/=/ end=/[,}\]]\@=/ contains=@jsExpression extend+syntax region  jsDestructuringValueAssignment   contained start=/:/ end=/[,}=]\@=/ contains=jsDestructuringPropertyValue,jsDestructuringBlock,jsNoise,jsDestructuringNoise skipwhite skipempty nextgroup=jsDestructuringValue extend+syntax match   jsDestructuringNoise             contained /[,\[\]]/+syntax region  jsDestructuringPropertyComputed  contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression skipwhite skipempty nextgroup=jsDestructuringValue,jsDestructuringNoise extend fold++" Comments+syntax keyword jsCommentTodo    contained TODO FIXME XXX TBD+syntax region  jsComment        start=/\/\// end=/$/ contains=jsCommentTodo,@Spell extend keepend+syntax region  jsComment        start=/\/\*/  end=/\*\// contains=jsCommentTodo,@Spell fold extend keepend+syntax region  jsEnvComment     start=/\%^#!/ end=/$/ display++" Specialized Comments - These are special comment regexes that are used in+" odd places that maintain the proper nextgroup functionality. It sucks we+" can't make jsComment a skippable type of group for nextgroup+syntax region  jsCommentFunction    contained start=/\/\// end=/$/    contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturn extend keepend+syntax region  jsCommentFunction    contained start=/\/\*/ end=/\*\// contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturn fold extend keepend+syntax region  jsCommentClass       contained start=/\/\// end=/$/    contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsClassBlock,jsFlowClassGroup extend keepend+syntax region  jsCommentClass       contained start=/\/\*/ end=/\*\// contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsClassBlock,jsFlowClassGroup fold extend keepend+syntax region  jsCommentMisc        contained start=/\/\// end=/$/    contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsBlock extend keepend+syntax region  jsCommentMisc        contained start=/\/\*/ end=/\*\// contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsBlock fold extend keepend++" Decorators+syntax match   jsDecorator                    /^\s*@/ nextgroup=jsDecoratorFunction+syntax match   jsDecoratorFunction  contained /[a-zA-Z_][a-zA-Z0-9_.]*/ nextgroup=jsParenDecorator++runtime extras/jsdoc.vim+runtime extras/ngdoc.vim++runtime extras/flow.vim++syntax cluster jsExpression  contains=jsBracket,jsParen,jsObject,jsTernaryIf,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs,jsParensError,jsComment,jsArguments,jsThis,jsSuper,jsDo+syntax cluster jsAll         contains=@jsExpression,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsStatement,jsException,jsTry,jsAsyncKeyword,jsNoise,,jsBlockLabel++" Define the default highlighting.+" For version 5.7 and earlier: only when not done already+" For version 5.8 and later: only when an item doesn't have highlighting yet+if version >= 508 || !exists("did_javascript_syn_inits")+  if version < 508+    let did_javascript_syn_inits = 1+    command -nargs=+ HiLink hi link <args>+  else+    command -nargs=+ HiLink hi def link <args>+  endif+  HiLink jsComment              Comment+  HiLink jsEnvComment           PreProc+  HiLink jsParensIfElse         jsParens+  HiLink jsParensRepeat         jsParens+  HiLink jsParensSwitch         jsParens+  HiLink jsParensCatch          jsParens+  HiLink jsCommentTodo          Todo+  HiLink jsString               String+  HiLink jsObjectKeyString      String+  HiLink jsTemplateString       String+  HiLink jsObjectStringKey      String+  HiLink jsClassStringKey       String+  HiLink jsTaggedTemplate       StorageClass+  HiLink jsTernaryIfOperator    Operator+  HiLink jsRegexpString         String+  HiLink jsRegexpBoundary       SpecialChar+  HiLink jsRegexpQuantifier     SpecialChar+  HiLink jsRegexpOr             Conditional+  HiLink jsRegexpMod            SpecialChar+  HiLink jsRegexpBackRef        SpecialChar+  HiLink jsRegexpGroup          jsRegexpString+  HiLink jsRegexpCharClass      Character+  HiLink jsCharacter            Character+  HiLink jsPrototype            Special+  HiLink jsConditional          Conditional+  HiLink jsBranch               Conditional+  HiLink jsLabel                Label+  HiLink jsReturn               Statement+  HiLink jsRepeat               Repeat+  HiLink jsDo                   Repeat+  HiLink jsStatement            Statement+  HiLink jsException            Exception+  HiLink jsTry                  Exception+  HiLink jsFinally              Exception+  HiLink jsCatch                Exception+  HiLink jsAsyncKeyword         Keyword+  HiLink jsForAwait             Keyword+  HiLink jsArrowFunction        Type+  HiLink jsFunction             Type+  HiLink jsGenerator            jsFunction+  HiLink jsArrowFuncArgs        jsFuncArgs+  HiLink jsFuncName             Function+  HiLink jsClassFuncName        jsFuncName+  HiLink jsObjectFuncName       Function+  HiLink jsArguments            Special+  HiLink jsError                Error+  HiLink jsParensError          Error+  HiLink jsOperator             Operator+  HiLink jsOf                   Operator+  HiLink jsStorageClass         StorageClass+  HiLink jsClassKeyword         Keyword+  HiLink jsExtendsKeyword       Keyword+  HiLink jsThis                 Special+  HiLink jsSuper                Constant+  HiLink jsNan                  Number+  HiLink jsNull                 Type+  HiLink jsUndefined            Type+  HiLink jsNumber               Number+  HiLink jsFloat                Float+  HiLink jsBooleanTrue          Boolean+  HiLink jsBooleanFalse         Boolean+  HiLink jsObjectColon          jsNoise+  HiLink jsNoise                Noise+  HiLink jsBrackets             Noise+  HiLink jsParens               Noise+  HiLink jsBraces               Noise+  HiLink jsFuncBraces           Noise+  HiLink jsFuncParens           Noise+  HiLink jsClassBraces          Noise+  HiLink jsClassNoise           Noise+  HiLink jsIfElseBraces         Noise+  HiLink jsTryCatchBraces       Noise+  HiLink jsModuleBraces         Noise+  HiLink jsObjectBraces         Noise+  HiLink jsObjectSeparator      Noise+  HiLink jsFinallyBraces        Noise+  HiLink jsRepeatBraces         Noise+  HiLink jsSwitchBraces         Noise+  HiLink jsSpecial              Special+  HiLink jsTemplateVar          Special+  HiLink jsTemplateBraces       Noise+  HiLink jsGlobalObjects        Constant+  HiLink jsGlobalNodeObjects    Constant+  HiLink jsExceptions           Constant+  HiLink jsBuiltins             Constant+  HiLink jsImport               Include+  HiLink jsExport               Include+  HiLink jsExportDefault        StorageClass+  HiLink jsExportDefaultGroup   jsExportDefault+  HiLink jsModuleAs             Include+  HiLink jsModuleComma          jsNoise+  HiLink jsModuleAsterisk       Noise+  HiLink jsFrom                 Include+  HiLink jsDecorator            Special+  HiLink jsDecoratorFunction    Function+  HiLink jsParensDecorator      jsParens+  HiLink jsFuncArgOperator      jsFuncArgs+  HiLink jsClassProperty        jsObjectKey+  HiLink jsSpreadOperator       Operator+  HiLink jsRestOperator         Operator+  HiLink jsRestExpression       jsFuncArgs+  HiLink jsSwitchColon          Noise+  HiLink jsClassMethodType      Type+  HiLink jsObjectMethodType     Type+  HiLink jsClassDefinition      jsFuncName+  HiLink jsBlockLabel           Identifier+  HiLink jsBlockLabelKey        jsBlockLabel++  HiLink jsDestructuringBraces     Noise+  HiLink jsDestructuringProperty   jsFuncArgs+  HiLink jsDestructuringAssignment jsObjectKey+  HiLink jsDestructuringNoise      Noise++  HiLink jsCommentFunction      jsComment+  HiLink jsCommentClass         jsComment+  HiLink jsCommentMisc          jsComment++  HiLink jsDomErrNo             Constant+  HiLink jsDomNodeConsts        Constant+  HiLink jsDomElemAttrs         Label+  HiLink jsDomElemFuncs         PreProc++  HiLink jsHtmlEvents           Special+  HiLink jsHtmlElemAttrs        Label+  HiLink jsHtmlElemFuncs        PreProc++  HiLink jsCssStyles            Label++  delcommand HiLink+endif++" Define the htmlJavaScript for HTML syntax html.vim+syntax cluster  htmlJavaScript       contains=@jsAll+syntax cluster  javaScriptExpression contains=@jsAll++" Vim's default html.vim highlights all javascript as 'Special'+hi! def link javaScript              NONE++let b:current_syntax = "javascript"+if main_syntax == 'javascript'+  unlet main_syntax+endif

.vim/syntax/mako.vim

new file mode 100644@@ -0,0 +1,86 @@+" Vim syntax file+" Language:     Mako+" Maintainer:   Armin Ronacher <armin.ronacher@active-4.com>+" URL:          http://lucumr.pocoo.org/+" Last Change:  2008 September 12+" Version:	0.6.1+"+" Thanks to Brine Rue <brian@lolapps.com> who noticed a bug in the+" delimiter handling.+"+" Known Limitations+"   the <%text> block does not have correct attributes++" For version 5.x: Clear all syntax items+" For version 6.x: Quit when a syntax file was already loaded+if version < 600+  syntax clear+elseif exists("b:current_syntax")+  finish+endif++if !exists("main_syntax")+  let main_syntax = "html"+endif++"Source the html syntax file+ru! syntax/html.vim+unlet b:current_syntax++"Put the python syntax file in @pythonTop+syn include @pythonTop syntax/python.vim++" End keywords+syn keyword makoEnd contained endfor endwhile endif endtry enddef++" Block rules+syn region makoLine matchgroup=makoDelim start=#^\s*%# end=#$# keepend contains=@pythonTop,makoEnd+syn region makoBlock matchgroup=makoDelim start=#<%!\?# end=#%># keepend contains=@pythonTop,makoEnd++" Variables+syn region makoNested start="{" end="}" transparent display contained contains=makoNested,@pythonTop+syn region makoVariable matchgroup=makoDelim start=#\${# end=#}# contains=makoNested,@pythonTop++" Comments+syn region makoComment start="^\s*##" end="$"+syn region makoDocComment matchgroup=makoDelim start="<%doc>" end="</%doc>" keepend++" Literal Blocks+syn region makoText matchgroup=makoDelim start="<%text[^>]*>" end="</%text>"++" Attribute Sublexing+syn match makoAttributeKey containedin=makoTag contained "[a-zA-Z_][a-zA-Z0-9_]*="+syn region makoAttributeValue containedin=makoTag contained start=/"/ skip=/\\"/ end=/"/+syn region makoAttributeValue containedin=MakoTag contained start=/'/ skip=/\\'/ end=/'/++" Tags+syn region makoTag matchgroup=makoDelim start="<%\(def\|call\|page\|include\|namespace\|inherit\)\>" end="/\?>"+syn match makoDelim "</%\(def\|call\|namespace\)>"++" Newline Escapes+syn match makoEscape /\\$/++" Default highlighting links+if version >= 508 || !exists("did_mako_syn_inits")+  if version < 508+    let did_mako_syn_inits = 1+    com -nargs=+ HiLink hi link <args>+  else+    com -nargs=+ HiLink hi def link <args>+  endif++  HiLink makoDocComment makoComment+  HiLink makoDefEnd makoDelim++  HiLink makoAttributeKey Type+  HiLink makoAttributeValue String+  HiLink makoText Normal+  HiLink makoDelim Preproc+  HiLink makoEnd Keyword+  HiLink makoComment Comment+  HiLink makoEscape Special++  delc HiLink+endif++let b:current_syntax = "eruby"

.vim/syntax/sml.vim

new file mode 100644@@ -0,0 +1,230 @@+" Vim syntax file+" Language:     SML+" Filenames:    *.sml *.sig+" Maintainers:  Markus Mottl            <markus.mottl@gmail.com>+"               Fabrizio Zeno Cornelli  <zeno@filibusta.crema.unimi.it>+" URL:          http://www.ocaml.info/vim/syntax/sml.vim+" Last Change:  2006 Oct 23 - Fixed character highlighting bug (MM)+"               2002 Jun 02 - Fixed small typo  (MM)+"               2001 Nov 20 - Fixed small highlighting bug with modules (MM)++" For version 5.x: Clear all syntax items+" For version 6.x: Quit when a syntax file was already loaded+if version < 600+  syntax clear+elseif exists("b:current_syntax")+  finish+endif++" SML is case sensitive.+syn case match++" lowercase identifier - the standard way to match+syn match    smlLCIdentifier /\<\(\l\|_\)\(\w\|'\)*\>/++syn match    smlKeyChar    "|"++" Errors+syn match    smlBraceErr   "}"+syn match    smlBrackErr   "\]"+syn match    smlParenErr   ")"+syn match    smlCommentErr "\*)"+syn match    smlThenErr    "\<then\>"++" Error-highlighting of "end" without synchronization:+" as keyword or as error (default)+if exists("sml_noend_error")+  syn match    smlKeyword    "\<end\>"+else+  syn match    smlEndErr     "\<end\>"+endif++" Some convenient clusters+syn cluster  smlAllErrs contains=smlBraceErr,smlBrackErr,smlParenErr,smlCommentErr,smlEndErr,smlThenErr++syn cluster  smlAENoParen contains=smlBraceErr,smlBrackErr,smlCommentErr,smlEndErr,smlThenErr++syn cluster  smlContained contains=smlTodo,smlPreDef,smlModParam,smlModParam1,smlPreMPRestr,smlMPRestr,smlMPRestr1,smlMPRestr2,smlMPRestr3,smlModRHS,smlFuncWith,smlFuncStruct,smlModTypeRestr,smlModTRWith,smlWith,smlWithRest,smlModType,smlFullMod+++" Enclosing delimiters+syn region   smlEncl transparent matchgroup=smlKeyword start="(" matchgroup=smlKeyword end=")" contains=ALLBUT,@smlContained,smlParenErr+syn region   smlEncl transparent matchgroup=smlKeyword start="{" matchgroup=smlKeyword end="}"  contains=ALLBUT,@smlContained,smlBraceErr+syn region   smlEncl transparent matchgroup=smlKeyword start="\[" matchgroup=smlKeyword end="\]" contains=ALLBUT,@smlContained,smlBrackErr+syn region   smlEncl transparent matchgroup=smlKeyword start="#\[" matchgroup=smlKeyword end="\]" contains=ALLBUT,@smlContained,smlBrackErr+++" Comments+syn region   smlComment start="(\*" end="\*)" contains=smlComment,smlTodo+syn keyword  smlTodo contained TODO FIXME XXX+++" let+syn region   smlEnd matchgroup=smlKeyword start="\<let\>" matchgroup=smlKeyword end="\<end\>" contains=ALLBUT,@smlContained,smlEndErr++" local+syn region   smlEnd matchgroup=smlKeyword start="\<local\>" matchgroup=smlKeyword end="\<end\>" contains=ALLBUT,@smlContained,smlEndErr++" abstype+syn region   smlNone matchgroup=smlKeyword start="\<abstype\>" matchgroup=smlKeyword end="\<end\>" contains=ALLBUT,@smlContained,smlEndErr++" begin+syn region   smlEnd matchgroup=smlKeyword start="\<begin\>" matchgroup=smlKeyword end="\<end\>" contains=ALLBUT,@smlContained,smlEndErr++" if+syn region   smlNone matchgroup=smlKeyword start="\<if\>" matchgroup=smlKeyword end="\<then\>" contains=ALLBUT,@smlContained,smlThenErr+++"" Modules++" "struct"+syn region   smlStruct matchgroup=smlModule start="\<struct\>" matchgroup=smlModule end="\<end\>" contains=ALLBUT,@smlContained,smlEndErr++" "sig"+syn region   smlSig matchgroup=smlModule start="\<sig\>" matchgroup=smlModule end="\<end\>" contains=ALLBUT,@smlContained,smlEndErr,smlModule+syn region   smlModSpec matchgroup=smlKeyword start="\<structure\>" matchgroup=smlModule end="\<\u\(\w\|'\)*\>" contained contains=@smlAllErrs,smlComment skipwhite skipempty nextgroup=smlModTRWith,smlMPRestr++" "open"+syn region   smlNone matchgroup=smlKeyword start="\<open\>" matchgroup=smlModule end="\<\u\(\w\|'\)*\(\.\u\(\w\|'\)*\)*\>" contains=@smlAllErrs,smlComment++" "structure" - somewhat complicated stuff ;-)+syn region   smlModule matchgroup=smlKeyword start="\<\(structure\|functor\)\>" matchgroup=smlModule end="\<\u\(\w\|'\)*\>" contains=@smlAllErrs,smlComment skipwhite skipempty nextgroup=smlPreDef+syn region   smlPreDef start="."me=e-1 matchgroup=smlKeyword end="\l\|="me=e-1 contained contains=@smlAllErrs,smlComment,smlModParam,smlModTypeRestr,smlModTRWith nextgroup=smlModPreRHS+syn region   smlModParam start="([^*]" end=")" contained contains=@smlAENoParen,smlModParam1+syn match    smlModParam1 "\<\u\(\w\|'\)*\>" contained skipwhite skipempty nextgroup=smlPreMPRestr++syn region   smlPreMPRestr start="."me=e-1 end=")"me=e-1 contained contains=@smlAllErrs,smlComment,smlMPRestr,smlModTypeRestr++syn region   smlMPRestr start=":" end="."me=e-1 contained contains=@smlComment skipwhite skipempty nextgroup=smlMPRestr1,smlMPRestr2,smlMPRestr3+syn region   smlMPRestr1 matchgroup=smlModule start="\ssig\s\=" matchgroup=smlModule end="\<end\>" contained contains=ALLBUT,@smlContained,smlEndErr,smlModule+syn region   smlMPRestr2 start="\sfunctor\(\s\|(\)\="me=e-1 matchgroup=smlKeyword end="->" contained contains=@smlAllErrs,smlComment,smlModParam skipwhite skipempty nextgroup=smlFuncWith+syn match    smlMPRestr3 "\w\(\w\|'\)*\(\.\w\(\w\|'\)*\)*" contained+syn match    smlModPreRHS "=" contained skipwhite skipempty nextgroup=smlModParam,smlFullMod+syn region   smlModRHS start="." end=".\w\|([^*]"me=e-2 contained contains=smlComment skipwhite skipempty nextgroup=smlModParam,smlFullMod+syn match    smlFullMod "\<\u\(\w\|'\)*\(\.\u\(\w\|'\)*\)*" contained skipwhite skipempty nextgroup=smlFuncWith++syn region   smlFuncWith start="([^*]"me=e-1 end=")" contained contains=smlComment,smlWith,smlFuncStruct+syn region   smlFuncStruct matchgroup=smlModule start="[^a-zA-Z]struct\>"hs=s+1 matchgroup=smlModule end="\<end\>" contains=ALLBUT,@smlContained,smlEndErr++syn match    smlModTypeRestr "\<\w\(\w\|'\)*\(\.\w\(\w\|'\)*\)*\>" contained+syn region   smlModTRWith start=":\s*("hs=s+1 end=")" contained contains=@smlAENoParen,smlWith+syn match    smlWith "\<\(\u\(\w\|'\)*\.\)*\w\(\w\|'\)*\>" contained skipwhite skipempty nextgroup=smlWithRest+syn region   smlWithRest start="[^)]" end=")"me=e-1 contained contains=ALLBUT,@smlContained++" "signature"+syn region   smlKeyword start="\<signature\>" matchgroup=smlModule end="\<\w\(\w\|'\)*\>" contains=smlComment skipwhite skipempty nextgroup=smlMTDef+syn match    smlMTDef "=\s*\w\(\w\|'\)*\>"hs=s+1,me=s++syn keyword  smlKeyword  and andalso case+syn keyword  smlKeyword  datatype else eqtype+syn keyword  smlKeyword  exception fn fun handle+syn keyword  smlKeyword  in infix infixl infixr+syn keyword  smlKeyword  match nonfix of orelse+syn keyword  smlKeyword  raise handle type+syn keyword  smlKeyword  val where while with withtype++syn keyword  smlType     bool char exn int list option+syn keyword  smlType     real string unit++syn keyword  smlOperator div mod not or quot rem++syn keyword  smlBoolean      true false+syn match    smlConstructor  "(\s*)"+syn match    smlConstructor  "\[\s*\]"+syn match    smlConstructor  "#\[\s*\]"+syn match    smlConstructor  "\u\(\w\|'\)*\>"++" Module prefix+syn match    smlModPath      "\u\(\w\|'\)*\."he=e-1++syn match    smlCharacter    +#"\\""\|#"."\|#"\\\d\d\d"++syn match    smlCharErr      +#"\\\d\d"\|#"\\\d"++syn region   smlString       start=+"+ skip=+\\\\\|\\"+ end=+"+++syn match    smlFunDef       "=>"+syn match    smlRefAssign    ":="+syn match    smlTopStop      ";;"+syn match    smlOperator     "\^"+syn match    smlOperator     "::"+syn match    smlAnyVar       "\<_\>"+syn match    smlKeyChar      "!"+syn match    smlKeyChar      ";"+syn match    smlKeyChar      "\*"+syn match    smlKeyChar      "="++syn match    smlNumber        "\<-\=\d\+\>"+syn match    smlNumber        "\<-\=0[x|X]\x\+\>"+syn match    smlReal          "\<-\=\d\+\.\d*\([eE][-+]\=\d\+\)\=[fl]\=\>"++" Synchronization+syn sync minlines=20+syn sync maxlines=500++syn sync match smlEndSync     grouphere  smlEnd     "\<begin\>"+syn sync match smlEndSync     groupthere smlEnd     "\<end\>"+syn sync match smlStructSync  grouphere  smlStruct  "\<struct\>"+syn sync match smlStructSync  groupthere smlStruct  "\<end\>"+syn sync match smlSigSync     grouphere  smlSig     "\<sig\>"+syn sync match smlSigSync     groupthere smlSig     "\<end\>"++" Define the default highlighting.+" For version 5.7 and earlier: only when not done already+" For version 5.8 and later: only when an item doesn't have highlighting yet+if version >= 508 || !exists("did_sml_syntax_inits")+  if version < 508+    let did_sml_syntax_inits = 1+    command -nargs=+ HiLink hi link <args>+  else+    command -nargs=+ HiLink hi def link <args>+  endif++  HiLink smlBraceErr     Error+  HiLink smlBrackErr     Error+  HiLink smlParenErr     Error++  HiLink smlCommentErr   Error++  HiLink smlEndErr       Error+  HiLink smlThenErr      Error++  HiLink smlCharErr      Error++  HiLink smlComment      Comment++  HiLink smlModPath      Include+  HiLink smlModule       Include+  HiLink smlModParam1    Include+  HiLink smlModType      Include+  HiLink smlMPRestr3     Include+  HiLink smlFullMod      Include+  HiLink smlModTypeRestr Include+  HiLink smlWith         Include+  HiLink smlMTDef        Include++  HiLink smlConstructor  Constant++  HiLink smlModPreRHS    Keyword+  HiLink smlMPRestr2     Keyword+  HiLink smlKeyword      Keyword+  HiLink smlFunDef       Keyword+  HiLink smlRefAssign    Keyword+  HiLink smlKeyChar      Keyword+  HiLink smlAnyVar       Keyword+  HiLink smlTopStop      Keyword+  HiLink smlOperator     Keyword++  HiLink smlBoolean      Boolean+  HiLink smlCharacter    Character+  HiLink smlNumber       Number+  HiLink smlReal         Float+  HiLink smlString       String+  HiLink smlType         Type+  HiLink smlTodo         Todo+  HiLink smlEncl         Keyword++  delcommand HiLink+endif++let b:current_syntax = "sml"++" vim: ts=8

.vim/text.vim

new file mode 100644@@ -0,0 +1,5 @@+setlocal tabstop=2+setlocal shiftwidth=2+setlocal softtabstop=2+setlocal textwidth=79+setlocal smartindent

.vim/tridactyl.vim

new file mode 100644@@ -0,0 +1,4 @@+source ~/.vim/text.vim+set binary+set noeol+set expandtab

.vim/twospaces.vim

new file mode 100644@@ -0,0 +1,3 @@+setlocal tabstop=2+setlocal shiftwidth=2+setlocal softtabstop=2

.vim/wincmds.vim

new file mode 100644@@ -0,0 +1,26 @@+function! WinMove(key) +  let l:curwin = winnr()+  exec "wincmd " . a:key+  if (l:curwin == winnr()) "we havent moved+    let l:curview = winsaveview()+    if match(a:key, '[jk]') > -1 "were we going up/down+      wincmd s+    else +      wincmd v+    endif+    call winrestview(l:curview)+    exec "wincmd " . a:key+    call winrestview(l:curview)+  endif+endfunction+ +map <C-W>h    :call WinMove('h')<cr>+map <C-W>k    :call WinMove('k')<cr>+map <C-W>l    :call WinMove('l')<cr>+map <C-W>j    :call WinMove('j')<cr>++map <C-left>  :wincmd <<cr>+map <C-right> :wincmd ><cr>+map <C-up>    :wincmd +<cr>+map <C-down>  :wincmd -<cr>+

.vimrc

new file mode 100755@@ -0,0 +1,286 @@+" set runtimepath^=~/.vim/bundle/rust.vim+set nocompatible+set t_Co=256++if $TERM == 'screen-256color'+  colorscheme ron+elseif $TERM == 'linux'+  colorscheme peachpuff+else+  colorscheme summerfruit256+  " let molokai_original=1+  " colorscheme molokai+endif++syntax on++set directory=$HOME/.vim/swapfiles+set synmaxcol=200+set incsearch+set showcmd+set number+set scrolloff=10+set hlsearch+set expandtab+set nosmartindent+set showmatch+set wildmode=list:longest,full+set wildmenu+set hidden+set mouse=a+set formatoptions=tcqrow+set shell=/bin/bash+set clipboard=unnamedplus " Use + register as unnamed register+set foldlevel=99+set spellcapcheck= " Have no need for this.+" Let modelines set things like indentexpr+if has("modelineexpr")+  set modelineexpr+endif+" set autochdir+if exists('+colorcolumn')+  set colorcolumn=80+endif++set tabstop=2+set shiftwidth=2+set softtabstop=2++" The vim latex plugin PKGBUILD says I need this+set grepprg=grep\ -nH\ $*+let g:tex_flavor = "latex"+let g:Tex_DefaultTargetFormat = "pdf"+let g:Tex_MultipleCompileFormats = "dvi,pdf"+let g:Tex_IgnoredWarnings =+      \ "Underfull\n" .+      \ "Overfull\n" .+      \ "specifier changed to\n" .+      \ "You have requested\n" .+      \ "Missing number, treated as zero.\n" .+      \ "There were undefined references\n" .+      \ "Citation %.%# undefined\n" .+      \ "LaTeX Font Warning:\n" .+      \ "Marginpar\n" .+      \ "Empty `thebibliography' environment\n"+let g:Tex_IgnoreLevel = 10+let g:Tex_GotoError = 0++" In case I want to use solarized+let g:solarized_termcolors=256++" Don't outdent PHP tags+let g:PHP_outdentphpescape = 0++" Umm. No.+let g:rust_recommended_style = 0+let g:rustfmt_autosave_if_config_present = 1+let g:rustfmt_command = "rustfmt +stable"++" Don't switch window focus when using HTTP client.+let g:http_client_focus_output_window=0++source ~/.vim/langvars.vim+source ~/.vim/wincmds.vim++filetype plugin indent on++if !exists("b:Comment")+    let b:Comment="" | let b:EndComment=""+endif++fun! RegexLiteral(str)+    return escape(a:str, "*$.^/")+endfun++fun! CommentLines()+    if b:Comment != ""+        exe ":s/^\\(\\s*\\)/\\1".escape(b:Comment, '/')." /e"+        exe ":s/$/ ".escape(b:EndComment, '/')."/e"+    endif+endfun++fun! UncommentLines()+    exe ":s/^\\(\\s*\\)".RegexLiteral(b:Comment)."\\s*/\\1/e"+    exe ":s/\\s*".RegexLiteral(b:EndComment)."\\s*$//e"+endfun++fun! GlobalReplace()+  normal! gv"ry+  let replacement = input("Replace " . @r . " with: ")+  if replacement != ""+    exe "%s/" . @r . "/" . replacement . "/g"+  endif+endfun++fun! Divider(char)+  let len = strlen(getline('.'))+  call append('.', repeat(a:char, len))+  normal j+endfun++fun! StripTrailingWhitespace()+  let l = line(".")+  let c = col(".")+  %s/\s\+$//e+  call cursor(l, c)+endfun++autocmd BufWritePre * :call StripTrailingWhitespace()++map Q :put=''<CR>+map <tab> :tabn<CR>+map <S-tab> :tabp<CR>+map <C-F4> :close<CR>+map <C-n> :tabnew<CR>+"map <Up> gk+"map <Down> gj+map <C-z> :sh<CR>+map <C-s> :w<CR>+map ,, :call CommentLines()<CR>+map ,. :call UncommentLines()<CR>+map ,r :call ReadReport105()<CR>>>Qkgq<CR><CR>+map <C-s> :w<CR><C-l>++map <F2> :source ~/.vimrc<CR>+map <F4> "ayy@a<CR>+map <F5> :w<CR>:make<CR>+map <F6> :filetype detect<CR>+map <F10> :syntax sync fromstart<CR>+map <F12> :source ~/.vim/text.vim<CR>++map \d :read !date +"\%B \%-d, \%Y"<CR>+map \= :call Divider('=')<CR>+map \- :call Divider('-')<CR>+map \~ :call Divider('~')<CR>+nmap \e :Files<CR>+nmap \r :Rg<CR>+vmap \f !par T4 B=.,?_A_a 71qr<CR>+nmap \f <S-v>\f+vmap \g !par T4 B=.,?_A_a 79qr<CR>+nmap \g <S-v>\g+vmap \h !par T8 B=.,?_A_a 79qr<CR>+nmap \h <S-v>\h+map \i :GoImports<CR>++nnoremap <silent> <ESC><ESC> :noh<CR>+vnoremap <silent> & :call GlobalReplace()<CR>+vnoremap * y/<C-R>"<CR>++imap <C-s> <ESC><C-s>+imap <F5> <ESC><F5>++" Use 'very magic' regexes by default. There appears to be no way to set this+" otherwise. 'very magic' basically means 'use extended regexes'.+"+" Turns out, I like plain 'magic', because it reduces the need to use escaping+" a lot more. Blech.+" nnoremap / /\v+" vnoremap / /\v++command! W w !sudo tee % > /dev/null++" Syntastic configuration.+let g:syntastic_python_checkers = ['flake8']+"let g:syntastic_python_pyflakes_exec = 'pyflakes-python2'+"let g:syntastic_python_flake8_exec = 'flake8-python2'+let g:syntastic_python_pyflakes_exec = 'pyflakes'+let g:syntastic_python_flake8_exec = 'flake8'+let g:syntastic_auto_loc_list = 0+let g:go_jump_to_error = 0+let g:go_autodetect_gopath = 0+let g:go_template_autocreate = 0+let g:go_def_mode='gopls'+let g:go_def_mapping_enabled = 1+" let g:syntastic_go_checkers = ['go', 'gofmt', 'golint', 'govet', 'errcheck']+let g:syntastic_go_checkers = []+let g:syntastic_rust_checkers = []+" let g:syntastic_rust_checkers = ['rustc']+" let g:syntastic_rust_rustc_args = '-Zparse-only'+" let g:syntastic_rust_checkers = []++" Pandoc/markdown config.+let g:pandoc#syntax#conceal#use = 0++" Plug config.+call plug#begin('~/.vim/plugged')++" Plug 'autozimu/LanguageClient-neovim', {+      " \ 'branch': 'next',+      " \ 'do': 'bash install.sh',+      " \ }+" let g:LanguageClient_serverCommands = {+      " \ 'rust': ['rustup', 'run', 'stable', 'rls'],+      " \ }++" Plug 'prabirshrestha/async.vim'+" Plug 'prabirshrestha/vim-lsp'+"+" if executable('rls')+  " au User lsp_setup call lsp#register_server({+        " \ 'name': 'rls',+        " \ 'cmd': {server_info->['rustup', 'run', 'stable', 'rls']},+        " \ 'whitelist': ['rust'],+        " \ })+" endif++" The standard Rust vim plugin. There's quite a bit of overlap with ALE here,+" but it has useful settings for indentation and what not.+Plug 'rust-lang/rust.vim'++" This permits easily manipulating the tag stack with a hack. See the Rust+" jump-to-definition key binding for an example.+Plug 'idbrii/vim-tagimposter'++" Bulk renaming of files in vim.+Plug 'qpkorr/vim-renamer'++" TOML syntax support.+Plug 'cespare/vim-toml'++" Go plugin.+Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' }++" Syntastic, which drives the Go plugin.+Plug 'vim-syntastic/syntastic'++" FZF plugin for fuzzy searching files.+Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }+Plug 'junegunn/fzf.vim'++" Kind of like Syntastic, but has language server support.+Plug 'dense-analysis/ale'+let g:ale_linters = {+      \ 'rust': ['cargo', 'rls'],+      \ 'go': ['gofmt', 'golint', 'go vet', 'go build', 'gosimple']+      \ }+let g:ale_rust_rls_executable = 'rust-analyzer'+" let g:ale_rust_rls_toolchain = 'stable'+let g:ale_rust_rls_config = {+      \ 'rust': { 'clippy_preference': 'off', 'feature_flags': {'lsp.diagnostics': 0} },+      \ 'feature_flags': { 'lsp.diagnostics': 0 }+      \ }+let g:ale_lint_on_enter = 1+let g:ale_lint_on_filetype_changed = 1+let g:ale_lint_on_save = 1+let g:ale_lint_on_text_changed = 'never'+let g:ale_lint_on_insert_leave = 0+let g:ale_completion_enabled = 0+let g:ale_rust_cargo_default_feature_behavior = 'all'+" N.B. This is the default value, but it serves as a reminder that vim+" on Ubuntu 18.04 is broken. Namely, the cursor disappears on any line+" that echos an error message in the status bar. The way to fix this is to+" install an updated version of vim:+"+"     sudo add-apt-repository ppa:jonathonf/vim+"     sudo apt-get update+"     sudo apt-get upgrade+let g:ale_echo_cursor = 1++" For autowrapping function declarations.+Plug 'FooSoft/vim-argwrap'+nnoremap <silent> \q :ArgWrap<CR>+let g:argwrap_tail_comma = 1++call plug#end()++filetype detect

.vimrc.less

new file mode 100644@@ -0,0 +1,9 @@+:map k <C-Y>+:map j <C-E>+:map <Up> k+:map <Down> j+:map <Left> :bp<CR>+:map <Right> :bn<CR>+:set cmdheight=2+:set shortmess=a+:map q :q!<CR>

.xbindkeys.noauto

new file mode 100644

.xbindkeysrc

new file mode 100644@@ -0,0 +1,83 @@+"video laptop"+  mod1 + mod4 + shift + v++"gmrun"+  mod4 + r++"lock"+  mod4 + l++"dolphin"+  mod4 + e++"terminal -e tmux -u new zsh"+  mod4 + t++"terminal -e tmux -u new zsh"+  mod4 + shift + t++"terminal-tmux-remote nas"+  mod4 + s++"terminal-tmux-remote frink"+  mod4 + h++"terminal -e ssh -A mac -t /usr/local/bin/tmux -u new -A -s remote"+  mod4 + m++"terminal-tmux-remote bs"+  mod4 + d++"terminal -e ssh -A kent -t clones/tmux/tmux -u new -A -s remote"+  mod4 + z++"terminal -e tmux -u new -A -s bpython bpython"+  mod4 + p++"terminal -e tmux -u new -A -s alsamixer alsamixer"+  mod4 + a++"firefox"+  mod4 + b++"firefox --private-window"+  mod4 + shift + b++"firefox --new-window http://gmail.com"+  mod4 + g++"sh /home/andrew/.config/ag/startup/common.xinitrc"+  mod1 + mod4 + shift + s++"ssh-add-keys"+  mod1 + mod4 + space++"pmsleep"+  XF86Launch1++"volume up"+  XF86AudioRaiseVolume++"volume down"+  XF86AudioLowerVolume++"volume mute"+  XF86AudioMute++"volume up"+  mod4 + Tab++"volume down"+  mod4 + shift + Tab++"volume mute"+  mod4 + grave++"brightness inc"+  XF86MonBrightnessUp++"brightness dec"+  XF86MonBrightnessDown++"toggle-tap-to-click"+  mod1 + mod4 + c

.xbindkeysrc.turtle

new file mode 100644@@ -0,0 +1,65 @@+"video laptop"+  mod1 + mod4 + shift + v++"gmrun"+  mod4 + r++"lock"+  mod4 + l++"dolphin"+  mod4 + e++"edit_textbuf"+  mod4 + shift + e++"qpdfview /home/andrew/tmp/exercises.pdf"+  mod4 + n++"zathura /home/andrew/data/misc/documents/latexsheet.pdf"+  control + mod1 + mod4 + l++"konsole -e bash"+  mod4 + t++"konsole -e 'ssh nas -t screen -RD'"+  mod4 + s++"konsole -e 'ssh -Y gopher -t screen -RD'"+  mod4 + d++"konsole -e 'ssh kent -t screen -RD'"+  mod4 + z++"konsole -e 'bash -c bpython2'"+  mod4 + p++"konsole -e 'bash -c pynfldb'"+  mod4 + shift + n++"konsole -e alsamixer"+  mod4 + a++"google-chrome"+  mod4 + b++"google-chrome --incognito"+  mod4 + shift + b++"google-chrome --new-window http://gmail.com"+  mod4 + g++"pmsleep"+  XF86Launch1++"sh /home/andrew/.config/ag/startup/common.xinitrc"+  mod1 + mod4 + shift + s++"volume mute"+  XF86AudioMute++"volume up"+  XF86AudioRaiseVolume++"volume down"+  XF86AudioLowerVolume

.xmodmaprc

new file mode 100644@@ -0,0 +1,15 @@+clear Lock+keycode 66 = Escape+keycode 104 = Return+add Lock = Scroll_Lock++! 29 = y, 32 = o, 36 = return, 44 = j, 52 = z+!keycode 52 = Return+!keycode 36 = z Z+!+!keycode 36 = Return+!keycode 52 = z Z++clear mod3+add Mod3 = Menu+

.zprofile

new file mode 100644@@ -0,0 +1,6 @@+if command -V startx 2>&1 > /dev/null; then+  if [[ -z "$DISPLAY" ]] && [[ "$XDG_VTNR" = 1 ]] && [[ -z "$TMUX" ]]; then+    . ~/.zshrc+    exec ssh-agent startx "$HOME/.config/ag/startup/wingo.xinitrc"+  fi+fi

.zsh-complete/_cargo

new file mode 100644@@ -0,0 +1,502 @@+#compdef cargo++# Source: https://github.com/robbyrussell/oh-my-zsh/blob/master/plugins/cargo/_cargo++typeset -A opt_args+autoload -U regexp-replace++_cargo() {++_arguments \+    '(- 1 *)'{-h,--help}'[show help message]' \+    '(- 1 *)'{-V,--version}'[show version information]' \+    '(- 1 *)'--list'[list installed commands]' \+    '(- 1 *)'--explain'[Run `rustc --explain CODE`]' \+    '(- 1 *)'{-v,--verbose}'[use verbose output]' \+    '(- 1 *)'--color'[colorization option]' \+    '(- 1 *)'--frozen'[Require Cargo.lock and cache are up to date]' \+    '(- 1 *)'--locked'[Require Cargo.lock is up to date]' \+    '1: :_cargo_cmds' \+    '*:: :->args'++case $state in+    args)+        case $words[1] in+            bench)+                _arguments \+                    '--features=[space separated feature list]' \+                    '--all-features[enable all available features]' \+                    '(-h, --help)'{-h,--help}'[show help message]' \+                    '(-j, --jobs)'{-j,--jobs}'[number of parallel jobs, defaults to # of CPUs]' \+                    "${command_scope_spec[@]}" \+                    '--manifest-path=[path to manifest]: :_files -/' \+                    '--no-default-features[do not build the default features]' \+                    '--no-run[compile but do not run]' \+                    '(-p,--package)'{-p=,--package=}'[package to run benchmarks for]:packages:_get_package_names' \+                    '--target=[target triple]' \+                    '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+                    '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+                    '--color=:colorization option:(auto always never)' \+                    ;;++            build)+                _arguments \+                    '--features=[space separated feature list]' \+                    '--all-features[enable all available features]' \+                    '(-h, --help)'{-h,--help}'[show help message]' \+                    '(-j, --jobs)'{-j,--jobs}'[number of parallel jobs, defaults to # of CPUs]' \+                    "${command_scope_spec[@]}" \+                    '--manifest-path=[path to manifest]: :_files -/' \+                    '--no-default-features[do not build the default features]' \+                    '(-p,--package)'{-p=,--package=}'[package to build]:packages:_get_package_names' \+                    '--release=[build in release mode]' \+                    '--target=[target triple]' \+                    '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+                    '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+                    '--color=:colorization option:(auto always never)' \+                    ;;++            clean)+                _arguments \+                    '(-h, --help)'{-h,--help}'[show help message]' \+                    '--manifest-path=[path to manifest]: :_files -/' \+                    '(-p,--package)'{-p=,--package=}'[package to clean]:packages:_get_package_names' \+                    '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+                    '--release[whether or not to clean release artifacts]' \+                    '--target=[target triple(default:all)]' \+                    '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+                    '--color=:colorization option:(auto always never)' \+                    ;;++            doc)+                _arguments \+                    '--features=[space separated feature list]' \+                    '--all-features[enable all available features]' \+                    '(-h, --help)'{-h,--help}'[show help message]' \+                    '(-j, --jobs)'{-j,--jobs}'[number of parallel jobs, defaults to # of CPUs]' \+                    '--manifest-path=[path to manifest]: :_files -/' \+                    '--no-deps[do not build docs for dependencies]' \+                    '--no-default-features[do not build the default features]' \+                    '--open[open docs in browser after the build]' \+                    '(-p, --package)'{-p,--package}'=[package to document]' \+                    '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+                    '--release[build artifacts in release mode, with optimizations]' \+                    '--target=[build for the target triple]' \+                    '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+                    '--color=:colorization option:(auto always never)' \+                    ;;++            fetch)+                _arguments \+                    '(-h, --help)'{-h,--help}'[show help message]' \+                    '--manifest-path=[path to manifest]: :_files -/' \+                    '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+                    '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+                    '--color=:colorization option:(auto always never)' \+                    ;;++            generate-lockfile)+                _arguments \+                    '(-h, --help)'{-h,--help}'[show help message]' \+                    '--manifest-path=[path to manifest]: :_files -/' \+                    '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+                    '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+                    '--color=:colorization option:(auto always never)' \+                    ;;++            git-checkout)+                _arguments \+                    '(-h, --help)'{-h,--help}'[show help message]' \+                    'q(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+                    '--reference=[REF]' \+                    '--url=[URL]' \+                    '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+                    '--color=:colorization option:(auto always never)' \+                    ;;++            help)+                _arguments \+                    '(-h, --help)'{-h,--help}'[show help message]' \+                    '*: :_cargo_cmds' \+                    ;;++            init)+                _arguments \+                    '--bin[use binary template]' \+                    '--vcs:initialize a new repo with a given VCS:(git hg none)' \+                    '(-h, --help)'{-h,--help}'[show help message]' \+                    '--name=[set the resulting package name]' \+                    '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+                    '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+                    '--color=:colorization option:(auto always never)' \+                    ;;++            install)+                _arguments \+                    '--bin=[only install the specified binary]' \+                    '--branch=[branch to use when installing from git]' \+                    '--color=:colorization option:(auto always never)' \+                    '--debug[build in debug mode instead of release mode]' \+                    '--example[install the specified example instead of binaries]' \+                    '--features=[space separated feature list]' \+                    '--all-features[enable all available features]' \+                    '--git=[URL from which to install the crate]' \+                    '(-h, --help)'{-h,--help}'[show help message]' \+                    '(-j, --jobs)'{-j,--jobs}'[number of parallel jobs, defaults to # of CPUs]' \+                    '--no-default-features[do not build the default features]' \+                    '--path=[local filesystem path to crate to install]' \+                    '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+                    '--rev=[specific commit to use when installing from git]' \+                    '--root=[directory to install packages into]' \+                    '--tag=[tag to use when installing from git]' \+                    '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+                    '--vers=[version to install from crates.io]' \+                    ;;++            locate-project)+                _arguments \+                    '(-h, --help)'{-h,--help}'[show help message]' \+                    '--manifest-path=[path to manifest]: :_files -/' \+                    ;;++            login)+                _arguments \+                    '(-h, --help)'{-h,--help}'[show help message]' \+                    '--host=[Host to set the token for]' \+                    '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+                    '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+                    '--color=:colorization option:(auto always never)' \+                    ;;++            metadata)+                _arguments \+                    '(-h, --help)'{-h,--help}'[show help message]' \+                    '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+                    '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+                    "--no-deps[output information only about the root package and don't fetch dependencies]" \+                    '--no-default-features[do not include the default feature]' \+                    '--manifest-path=[path to manifest]: :_files -/' \+                    '--features=[space separated feature list]' \+                    '--all-features[enable all available features]' \+                    '--format-version=[format version(default: 1)]' \+                    '--color=:colorization option:(auto always never)' \+                    ;;++            new)+                _arguments \+                    '--bin[use binary template]' \+                    '--vcs:initialize a new repo with a given VCS:(git hg none)' \+                    '(-h, --help)'{-h,--help}'[show help message]' \+                    '--name=[set the resulting package name]' \+                    '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+                    '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+                    '--color=:colorization option:(auto always never)' \+                    ;;++            owner)+                _arguments \+                    '(-a, --add)'{-a,--add}'[add owner LOGIN]' \+                    '(-h, --help)'{-h,--help}'[show help message]' \+                    '--index[registry index]' \+                    '(-l, --list)'{-l,--list}'[list owners of a crate]' \+                    '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+                    '(-r, --remove)'{-r,--remove}'[remove owner LOGIN]' \+                    '--token[API token to use when authenticating]' \+                    '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+                    '--color=:colorization option:(auto always never)' \+                    ;;++            package)+                _arguments \+                    '(-h, --help)'{-h,--help}'[show help message]' \+                    '(-l, --list)'{-l,--list}'[print files included in a package without making one]' \+                    '--manifest-path=[path to manifest]: :_files -/' \+                    '--no-metadata[ignore warnings about a lack of human-usable metadata]' \+                    '--no-verify[do not build to verify contents]' \+                    '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+                    '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+                    '--color=:colorization option:(auto always never)' \+                    ;;++            pkgid)+                _arguments \+                    '(-h, --help)'{-h,--help}'[show help message]' \+                    '--manifest-path=[path to manifest]: :_files -/' \+                    '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+                    '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+                    '--color=:colorization option:(auto always never)' \+                    ;;++            publish)+                _arguments \+                    '(-h, --help)'{-h,--help}'[show help message]' \+                    '--host=[Host to set the token for]' \+                    '--manifest-path=[path to manifest]: :_files -/' \+                    '--no-verify[Do not verify tarball until before publish]' \+                    '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+                    '--token[token to use when uploading]' \+                    '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+                    '--color=:colorization option:(auto always never)' \+                    ;;++            read-manifest)+                _arguments \+                    '(-h, --help)'{-h,--help}'[show help message]' \+                    '--manifest-path=[path to manifest]: :_files -/' \+                    '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+                    '--color=:colorization option:(auto always never)' \+                    ;;++            run)+                _arguments \+                    '--example=[name of the bin target]' \+                    '--features=[space separated feature list]' \+                    '--all-features[enable all available features]' \+                    '(-h, --help)'{-h,--help}'[show help message]' \+                    '(-j, --jobs)'{-j,--jobs}'[number of parallel jobs, defaults to # of CPUs]' \+                    '--manifest-path=[path to manifest]: :_files -/' \+                    '--bin=[name of the bin target]' \+                    '--no-default-features[do not build the default features]' \+                    '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+                    '--release=[build in release mode]' \+                    '--target=[target triple]' \+                    '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+                    '--color=:colorization option:(auto always never)' \+                    '*: :_normal' \+                    ;;++            rustc)+                _arguments \+                    '--color=:colorization option:(auto always never)' \+                    '--features=[features to compile for the package]' \+                    '--all-features[enable all available features]' \+                    '(-h, --help)'{-h,--help}'[show help message]' \+                    '(-j, --jobs)'{-j,--jobs}'=[number of parallel jobs, defaults to # of CPUs]' \+                    '--manifest-path=[path to the manifest to fetch dependencies for]' \+                    '--no-default-features[do not compile default features for the package]' \+                    '(-p, --package)'{-p,--package}'=[profile to compile for]' \+                    '--profile=[profile to build the selected target for]' \+                    '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+                    '--release[build artifacts in release mode, with optimizations]' \+                    '--target=[target triple which compiles will be for]' \+                    '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+                    "${command_scope_spec[@]}" \+                    ;;++            rustdoc)+                _arguments \+                    '--color=:colorization option:(auto always never)' \+                    '--features=[space-separated list of features to also build]' \+                    '--all-features[enable all available features]' \+                    '(-h, --help)'{-h,--help}'[show help message]' \+                    '(-j, --jobs)'{-j,--jobs}'=[number of parallel jobs, defaults to # of CPUs]' \+                    '--manifest-path=[path to the manifest to document]' \+                    '--no-default-features[do not build the `default` feature]' \+                    '--open[open the docs in a browser after the operation]' \+                    '(-p, --package)'{-p,--package}'=[package to document]' \+                    '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+                    '--release[build artifacts in release mode, with optimizations]' \+                    '--target=[build for the target triple]' \+                    '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+                    "${command_scope_spec[@]}" \+                    ;;++            search)+                _arguments \+                    '--color=:colorization option:(auto always never)' \+                    '(-h, --help)'{-h,--help}'[show help message]' \+                    '--host=[host of a registry to search in]' \+                    '--limit=[limit the number of results]' \+                    '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+                    '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+                    ;;++            test)+                _arguments \+                    '--features=[space separated feature list]' \+                    '--all-features[enable all available features]' \+                    '(-h, --help)'{-h,--help}'[show help message]' \+                    '(-j, --jobs)'{-j,--jobs}'[number of parallel jobs, defaults to # of CPUs]' \+                    '--manifest-path=[path to manifest]: :_files -/' \+                    '--test=[test name]: :_test_names' \+                    '--no-default-features[do not build the default features]' \+                    '--no-fail-fast[run all tests regardless of failure]' \+                    '--no-run[compile but do not run]' \+                    '(-p,--package)'{-p=,--package=}'[package to run tests for]:packages:_get_package_names' \+                    '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+                    '--release[build artifacts in release mode, with optimizations]' \+                    '--target=[target triple]' \+                    '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+                    '--color=:colorization option:(auto always never)' \+                    '1: :_test_names' \+                    ;;++            uninstall)+                _arguments \+                    '--bin=[only uninstall the binary NAME]' \+                    '--color=:colorization option:(auto always never)' \+                    '(-h, --help)'{-h,--help}'[show help message]' \+                    '(-q, --quiet)'{-q,--quiet}'[less output printed to stdout]' \+                    '--root=[directory to uninstall packages from]' \+                    '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+                    ;;++            update)+                _arguments \+                    '--aggressive=[force dependency update]' \+                    '(-h, --help)'{-h,--help}'[show help message]' \+                    '--manifest-path=[path to manifest]: :_files -/' \+                    '(-p,--package)'{-p=,--package=}'[package to update]:packages:__get_package_names' \+                    '--precise=[update single dependency to PRECISE]: :' \+                    '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+                    '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+                    '--color=:colorization option:(auto always never)' \+                    ;;++            verify-project)+                _arguments \+                    '(-h, --help)'{-h,--help}'[show help message]' \+                    '--manifest-path=[path to manifest]: :_files -/' \+                    '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+                    '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+                    '--color=:colorization option:(auto always never)' \+                    ;;++            version)+                _arguments \+                    '(-h, --help)'{-h,--help}'[show help message]' \+                    '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+                    '--color=:colorization option:(auto always never)' \+                    ;;++            yank)+                _arguments \+                    '(-h, --help)'{-h,--help}'[show help message]' \+                    '--index[registry index]' \+                    '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+                    '--token[API token to use when authenticating]' \+                    '--undo[undo a yank, putting a version back into the index]' \+                    '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+                    '--color=:colorization option:(auto always never)' \+                    '--vers[yank version]' \+                    ;;+        esac+        ;;+esac+}++_cargo_cmds(){+local -a commands;commands=(+'bench:execute all benchmarks of a local package'+'build:compile the current project'+'clean:remove generated artifacts'+'doc:build package documentation'+'fetch:fetch package dependencies'+'generate-lockfile:create lockfile'+'git-checkout:git checkout'+'help:get help for commands'+'init:create new project in current directory'+'install:install a Rust binary'+'locate-project:print "Cargo.toml" location'+'login:login to remote server'+'metadata:the metadata for a project in json'+'new:create a new project'+'owner:manage the owners of a crate on the registry'+'package:assemble local package into a distributable tarball'+'pkgid:print a fully qualified package specification'+'publish:upload package to the registry'+'read-manifest:print manifest in JSON format'+'run:run the main binary of the local package'+'rustc:compile a package and all of its dependencies'+'rustdoc:build documentation for a package'+'search:search packages on crates.io'+'test:execute all unit and tests of a local package'+'uninstall:remove a Rust binary'+'update:update dependencies'+'verify-project:check Cargo.toml'+'version:show version information'+'yank:remove pushed file from index'+)+_describe 'command' commands++}+++#FIXME: Disabled until fixed+#gets package names from the manifest file+_get_package_names()+{+}++#TODO:see if it makes sense to have 'locate-project' to have non-json output.+#strips package name from json stuff+_locate_manifest(){+local manifest=`cargo locate-project 2>/dev/null`+regexp-replace manifest '\{"root":"|"\}' ''+echo $manifest+}++# Extracts the values of "name" from the array given in $1 and shows them as+# command line options for completion+_get_names_from_array()+{+    local -a filelist;+    local manifest=$(_locate_manifest)+    if [[ -z $manifest ]]; then+        return 0+    fi++    local last_line+    local -a names;+    local in_block=false+    local block_name=$1+    names=()+    while read line+    do+        if [[ $last_line == "[[$block_name]]" ]]; then+            in_block=true+        else+            if [[ $last_line =~ '.*\[\[.*' ]]; then+                in_block=false+            fi+        fi++        if [[ $in_block == true ]]; then+            if [[ $line =~ '.*name.*=' ]]; then+                regexp-replace line '^.*name *= *|"' ""+                names+=$line+            fi+        fi++        last_line=$line+    done < $manifest+    _describe $block_name names++}++#Gets the test names from the manifest file+_test_names()+{+    _get_names_from_array "test"+}++#Gets the bench names from the manifest file+_benchmark_names()+{+    _get_names_from_array "bench"+}++# These flags are mutally exclusive specifiers for the scope of a command; as+# they are used in multiple places without change, they are expanded into the+# appropriate command's `_arguments` where appropriate.+set command_scope_spec+command_scope_spec=(+    '(--bin --example --test --lib)--bench=[benchmark name]: :_benchmark_names'+    '(--bench --bin --test --lib)--example=[example name]'+    '(--bench --example --test --lib)--bin=[binary name]'+    '(--bench --bin --example --test)--lib=[library name]'+    '(--bench --bin --example --lib)--test=[test name]'+)+++_cargo

.zsh-complete/_rg

new file mode 100644@@ -0,0 +1,638 @@+#compdef rg++##+# zsh completion function for ripgrep+#+# Run ci/test-complete after building to ensure that the options supported by+# this function stay in synch with the `rg` binary.+#+# For convenience, a completion reference guide is included at the bottom of+# this file.+#+# Originally based on code from the zsh-users project — see copyright notice+# below.++_rg() {+  local curcontext=$curcontext no='!' descr ret=1+  local -a context line state state_descr args tmp suf+  local -A opt_args++  # ripgrep has many options which negate the effect of a more common one — for+  # example, `--no-column` to negate `--column`, and `--messages` to negate+  # `--no-messages`. There are so many of these, and they're so infrequently+  # used, that some users will probably find it irritating if they're completed+  # indiscriminately, so let's not do that unless either the current prefix+  # matches one of those negation options or the user has the `complete-all`+  # style set. Note that this prefix check has to be updated manually to account+  # for all of the potential negation options listed below!+  if+    # We also want to list all of these options during testing+    [[ $_RG_COMPLETE_LIST_ARGS == (1|t*|y*) ]] ||+    # (--[imnp]* => --ignore*, --messages, --no-*, --pcre2-unicode)+    [[ $PREFIX$SUFFIX == --[imnp]* ]] ||+    zstyle -t ":complete:$curcontext:*" complete-all+  then+    no=+  fi++  # We make heavy use of argument groups here to prevent the option specs from+  # growing unwieldy. These aren't supported in zsh <5.4, though, so we'll strip+  # them out below if necessary. This makes the exclusions inaccurate on those+  # older versions, but oh well — it's not that big a deal+  args=(+    + '(exclusive)' # Misc. fully exclusive options+    '(: * -)'{-h,--help}'[display help information]'+    '(: * -)'{-V,--version}'[display version information]'+    '(: * -)'--pcre2-version'[print the version of PCRE2 used by ripgrep, if available]'++    + '(buffered)' # buffering options+    '--line-buffered[force line buffering]'+    $no"--no-line-buffered[don't force line buffering]"+    '--block-buffered[force block buffering]'+    $no"--no-block-buffered[don't force block buffering]"++    + '(case)' # Case-sensitivity options+    {-i,--ignore-case}'[search case-insensitively]'+    {-s,--case-sensitive}'[search case-sensitively]'+    {-S,--smart-case}'[search case-insensitively if pattern is all lowercase]'++    + '(context-a)' # Context (after) options+    '(context-c)'{-A+,--after-context=}'[specify lines to show after each match]:number of lines'++    + '(context-b)' # Context (before) options+    '(context-c)'{-B+,--before-context=}'[specify lines to show before each match]:number of lines'++    + '(context-c)' # Context (combined) options+    '(context-a context-b)'{-C+,--context=}'[specify lines to show before and after each match]:number of lines'++    + '(column)' # Column options+    '--column[show column numbers for matches]'+    $no"--no-column[don't show column numbers for matches]"++    + '(count)' # Counting options+    {-c,--count}'[only show count of matching lines for each file]'+    '--count-matches[only show count of individual matches for each file]'+    '--include-zero[include files with zero matches in summary]'++    + '(encoding)' # Encoding options+    {-E+,--encoding=}'[specify text encoding of files to search]: :_rg_encodings'+    $no'--no-encoding[use default text encoding]'++    + '(engine)' # Engine choice options+    '--engine=[select which regex engine to use]:when:((+      default\:"use default engine"+      pcre2\:"identical to --pcre2"+      auto\:"identical to --auto-hybrid-regex"+    ))'++    + file # File-input options+    '(1)*'{-f+,--file=}'[specify file containing patterns to search for]: :_files'++    + '(file-match)' # Files with/without match options+    '(stats)'{-l,--files-with-matches}'[only show names of files with matches]'+    '(stats)--files-without-match[only show names of files without matches]'++    + '(file-name)' # File-name options+    {-H,--with-filename}'[show file name for matches]'+    {-I,--no-filename}"[don't show file name for matches]"++    + '(file-system)' # File system options+    "--one-file-system[don't descend into directories on other file systems]"+    $no'--no-one-file-system[descend into directories on other file systems]'++    + '(fixed)' # Fixed-string options+    {-F,--fixed-strings}'[treat pattern as literal string instead of regular expression]'+    $no"--no-fixed-strings[don't treat pattern as literal string]"++    + '(follow)' # Symlink-following options+    {-L,--follow}'[follow symlinks]'+    $no"--no-follow[don't follow symlinks]"++    + glob # File-glob options+    '*'{-g+,--glob=}'[include/exclude files matching specified glob]:glob'+    '*--iglob=[include/exclude files matching specified case-insensitive glob]:glob'++    + '(glob-case-insensitive)' # File-glob case sensitivity options+    '--glob-case-insensitive[treat -g/--glob patterns case insensitively]'+    $no'--no-glob-case-insensitive[treat -g/--glob patterns case sensitively]'++    + '(heading)' # Heading options+    '(pretty-vimgrep)--heading[show matches grouped by file name]'+    "(pretty-vimgrep)--no-heading[don't show matches grouped by file name]"++    + '(hidden)' # Hidden-file options+    '--hidden[search hidden files and directories]'+    $no"--no-hidden[don't search hidden files and directories]"++    + '(hybrid)' # hybrid regex options+    '--auto-hybrid-regex[dynamically use PCRE2 if necessary]'+    $no"--no-auto-hybrid-regex[don't dynamically use PCRE2 if necessary]"++    + '(ignore)' # Ignore-file options+    "(--no-ignore-global --no-ignore-parent --no-ignore-vcs --no-ignore-dot)--no-ignore[don't respect ignore files]"+    $no'(--ignore-global --ignore-parent --ignore-vcs --ignore-dot)--ignore[respect ignore files]'++    + '(ignore-file-case-insensitive)' # Ignore-file case sensitivity options+    '--ignore-file-case-insensitive[process ignore files case insensitively]'+    $no'--no-ignore-file-case-insensitive[process ignore files case sensitively]'++    + '(ignore-exclude)' # Local exclude (ignore)-file options+    "--no-ignore-exclude[don't respect local exclude (ignore) files]"+    $no'--ignore-exclude[respect local exclude (ignore) files]'++    + '(ignore-global)' # Global ignore-file options+    "--no-ignore-global[don't respect global ignore files]"+    $no'--ignore-global[respect global ignore files]'++    + '(ignore-parent)' # Parent ignore-file options+    "--no-ignore-parent[don't respect ignore files in parent directories]"+    $no'--ignore-parent[respect ignore files in parent directories]'++    + '(ignore-vcs)' # VCS ignore-file options+    "--no-ignore-vcs[don't respect version control ignore files]"+    $no'--ignore-vcs[respect version control ignore files]'++    + '(require-git)' # git specific settings+    "--no-require-git[don't require git repository to respect gitignore rules]"+    $no'--require-git[require git repository to respect gitignore rules]'++    + '(ignore-dot)' # .ignore options+    "--no-ignore-dot[don't respect .ignore files]"+    $no'--ignore-dot[respect .ignore files]'++    + '(ignore-files)' # custom global ignore file options+    "--no-ignore-files[don't respect --ignore-file flags]"+    $no'--ignore-files[respect --ignore-file files]'++    + '(json)' # JSON options+    '--json[output results in JSON Lines format]'+    $no"--no-json[don't output results in JSON Lines format]"++    + '(line-number)' # Line-number options+    {-n,--line-number}'[show line numbers for matches]'+    {-N,--no-line-number}"[don't show line numbers for matches]"++    + '(line-terminator)' # Line-terminator options+    '--crlf[use CRLF as line terminator]'+    $no"--no-crlf[don't use CRLF as line terminator]"+    '(text)--null-data[use NUL as line terminator]'++    + '(max-columns-preview)' # max column preview options+    '--max-columns-preview[show preview for long lines (with -M)]'+    $no"--no-max-columns-preview[don't show preview for long lines (with -M)]"++    + '(max-depth)' # Directory-depth options+    '--max-depth=[specify max number of directories to descend]:number of directories'+    '!--maxdepth=:number of directories'++    + '(messages)' # Error-message options+    '(--no-ignore-messages)--no-messages[suppress some error messages]'+    $no"--messages[don't suppress error messages affected by --no-messages]"++    + '(messages-ignore)' # Ignore-error message options+    "--no-ignore-messages[don't show ignore-file parse error messages]"+    $no'--ignore-messages[show ignore-file parse error messages]'++    + '(mmap)' # mmap options+    '--mmap[search using memory maps when possible]'+    "--no-mmap[don't search using memory maps]"++    + '(multiline)' # Multiline options+    {-U,--multiline}'[permit matching across multiple lines]'+    $no'(multiline-dotall)--no-multiline[restrict matches to at most one line each]'++    + '(multiline-dotall)' # Multiline DOTALL options+    '(--no-multiline)--multiline-dotall[allow "." to match newline (with -U)]'+    $no"(--no-multiline)--no-multiline-dotall[don't allow \".\" to match newline (with -U)]"++    + '(only)' # Only-match options+    {-o,--only-matching}'[show only matching part of each line]'++    + '(passthru)' # Pass-through options+    '(--vimgrep)--passthru[show both matching and non-matching lines]'+    '!(--vimgrep)--passthrough'++    + '(pcre2)' # PCRE2 options+    {-P,--pcre2}'[enable matching with PCRE2]'+    $no'(pcre2-unicode)--no-pcre2[disable matching with PCRE2]'++    + '(pcre2-unicode)' # PCRE2 Unicode options+    $no'(--no-pcre2 --no-pcre2-unicode)--pcre2-unicode[enable PCRE2 Unicode mode (with -P)]'+    '(--no-pcre2 --pcre2-unicode)--no-pcre2-unicode[disable PCRE2 Unicode mode (with -P)]'++    + '(pre)' # Preprocessing options+    '(-z --search-zip)--pre=[specify preprocessor utility]:preprocessor utility:_command_names -e'+    $no'--no-pre[disable preprocessor utility]'++    + pre-glob # Preprocessing glob options+    '*--pre-glob[include/exclude files for preprocessing with --pre]'++    + '(pretty-vimgrep)' # Pretty/vimgrep display options+    '(heading)'{-p,--pretty}'[alias for --color=always --heading -n]'+    '(heading passthru)--vimgrep[show results in vim-compatible format]'++    + regexp # Explicit pattern options+    '(1 file)*'{-e+,--regexp=}'[specify pattern]:pattern'++    + '(replace)' # Replacement options+    {-r+,--replace=}'[specify string used to replace matches]:replace string'++    + '(sort)' # File-sorting options+    '(threads)--sort=[sort results in ascending order (disables parallelism)]:sort method:((+      none\:"no sorting"+      path\:"sort by file path"+      modified\:"sort by last modified time"+      accessed\:"sort by last accessed time"+      created\:"sort by creation time"+    ))'+    '(threads)--sortr=[sort results in descending order (disables parallelism)]:sort method:((+      none\:"no sorting"+      path\:"sort by file path"+      modified\:"sort by last modified time"+      accessed\:"sort by last accessed time"+      created\:"sort by creation time"+    ))'+    '!(threads)--sort-files[sort results by file path (disables parallelism)]'++    + '(stats)' # Statistics options+    '(--files file-match)--stats[show search statistics]'+    $no"--no-stats[don't show search statistics]"++    + '(text)' # Binary-search options+    {-a,--text}'[search binary files as if they were text]'+    "--binary[search binary files, don't print binary data]"+    $no"--no-binary[don't search binary files]"+    $no"(--null-data)--no-text[don't search binary files as if they were text]"++    + '(threads)' # Thread-count options+    '(sort)'{-j+,--threads=}'[specify approximate number of threads to use]:number of threads'++    + '(trim)' # Trim options+    '--trim[trim any ASCII whitespace prefix from each line]'+    $no"--no-trim[don't trim ASCII whitespace prefix from each line]"++    + type # Type options+    '*'{-t+,--type=}'[only search files matching specified type]: :_rg_types'+    '*--type-add=[add new glob for specified file type]: :->typespec'+    '*--type-clear=[clear globs previously defined for specified file type]: :_rg_types'+    # This should actually be exclusive with everything but other type options+    '(: *)--type-list[show all supported file types and their associated globs]'+    '*'{-T+,--type-not=}"[don't search files matching specified file type]: :_rg_types"++    + '(word-line)' # Whole-word/line match options+    {-w,--word-regexp}'[only show matches surrounded by word boundaries]'+    {-x,--line-regexp}'[only show matches surrounded by line boundaries]'++    + '(unicode)' # Unicode options+    $no'--unicode[enable Unicode mode]'+    '--no-unicode[disable Unicode mode]'++    + '(zip)' # Compression options+    '(--pre)'{-z,--search-zip}'[search in compressed files]'+    $no"--no-search-zip[don't search in compressed files]"++    + misc # Other options — no need to separate these at the moment+    '(-b --byte-offset)'{-b,--byte-offset}'[show 0-based byte offset for each matching line]'+    '--color=[specify when to use colors in output]:when:((+      never\:"never use colors"+      auto\:"use colors or not based on stdout, TERM, etc."+      always\:"always use colors"+      ansi\:"always use ANSI colors (even on Windows)"+    ))'+    '*--colors=[specify color and style settings]: :->colorspec'+    '--context-separator=[specify string used to separate non-continuous context lines in output]:separator'+    $no"--no-context-separator[don't print context separators]"+    '--debug[show debug messages]'+    '--trace[show more verbose debug messages]'+    '--dfa-size-limit=[specify upper size limit of generated DFA]:DFA size (bytes)'+    "(1 stats)--files[show each file that would be searched (but don't search)]"+    '*--ignore-file=[specify additional ignore file]:ignore file:_files'+    '(-v --invert-match)'{-v,--invert-match}'[invert matching]'+    '(-M --max-columns)'{-M+,--max-columns=}'[specify max length of lines to print]:number of bytes'+    '(-m --max-count)'{-m+,--max-count=}'[specify max number of matches per file]:number of matches'+    '--max-filesize=[specify size above which files should be ignored]:file size (bytes)'+    "--no-config[don't load configuration files]"+    '(-0 --null)'{-0,--null}'[print NUL byte after file names]'+    '--path-separator=[specify path separator to use when printing file names]:separator'+    '(-q --quiet)'{-q,--quiet}'[suppress normal output]'+    '--regex-size-limit=[specify upper size limit of compiled regex]:regex size (bytes)'+    '*'{-u,--unrestricted}'[reduce level of "smart" searching]'++    + operand # Operands+    '(--files --type-list file regexp)1: :_guard "^-*" pattern'+    '(--type-list)*: :_files'+  )++  # This is used with test-complete to verify that there are no options+  # listed in the help output that aren't also defined here+  [[ $_RG_COMPLETE_LIST_ARGS == (1|t*|y*) ]] && {+    print -rl - $args+    return 0+  }++  # Strip out argument groups where unsupported (see above)+  [[ $ZSH_VERSION == (4|5.<0-3>)(.*)# ]] &&+  args=( ${(@)args:#(#i)(+|[a-z0-9][a-z0-9_-]#|\([a-z0-9][a-z0-9_-]#\))} )++  _arguments -C -s -S : $args && ret=0++  case $state in+    colorspec)+      if [[ ${IPREFIX#--*=}$PREFIX == [^:]# ]]; then+        suf=( -qS: )+        tmp=(+          'column:specify coloring for column numbers'+          'line:specify coloring for line numbers'+          'match:specify coloring for match text'+          'path:specify coloring for file names'+        )+        descr='color/style type'+      elif [[ ${IPREFIX#--*=}$PREFIX == (column|line|match|path):[^:]# ]]; then+        suf=( -qS: )+        tmp=(+          'none:clear color/style for type'+          'bg:specify background color'+          'fg:specify foreground color'+          'style:specify text style'+        )+        descr='color/style attribute'+      elif [[ ${IPREFIX#--*=}$PREFIX == [^:]##:(bg|fg):[^:]# ]]; then+        tmp=( black blue green red cyan magenta yellow white )+        descr='color name or r,g,b'+      elif [[ ${IPREFIX#--*=}$PREFIX == [^:]##:style:[^:]# ]]; then+        tmp=( {,no}bold {,no}intense {,no}underline )+        descr='style name'+      else+        _message -e colorspec 'no more arguments'+      fi++      (( $#tmp )) && {+        compset -P '*:'+        _describe -t colorspec $descr tmp $suf && ret=0+      }+      ;;++    typespec)+      if compset -P '[^:]##:include:'; then+        _sequence -s , _rg_types && ret=0+      # @todo This bit in particular could be better, but it's a little+      # complex, and attempting to solve it seems to run us up against a crash+      # bug — zsh # 40362+      elif compset -P '[^:]##:'; then+        _message 'glob or include directive' && ret=1+      elif [[ ! -prefix *:* ]]; then+        _rg_types -qS : && ret=0+      fi+      ;;+  esac++  return ret+}++# Complete encodings+_rg_encodings() {+  local -a expl+  local -aU _encodings++  # This is impossible to read, but these encodings rarely if ever change, so it+  # probably doesn't matter. They are derived from the list given here:+  # https://encoding.spec.whatwg.org/#concept-encoding-get+  _encodings=(+    {{,us-}ascii,arabic,chinese,cyrillic,greek{,8},hebrew,korean}+    logical visual mac {,cs}macintosh x-mac-{cyrillic,roman,ukrainian}+    866 ibm{819,866} csibm866+    big5{,-hkscs} {cn-,cs}big5 x-x-big5+    cp{819,866,125{0..8}} x-cp125{0..8}+    csiso2022{jp,kr} csiso8859{6,8}{e,i}+    csisolatin{{1..6},9} csisolatin{arabic,cyrillic,greek,hebrew}+    ecma-{114,118} asmo-708 elot_928 sun_eu_greek+    euc-{jp,kr} x-euc-jp cseuckr cseucpkdfmtjapanese+    {,x-}gbk csiso58gb231280 gb18030 {,cs}gb2312 gb_2312{,-80} hz-gb-2312+    iso-2022-{cn,cn-ext,jp,kr}+    iso8859{,-}{{1..11},13,14,15}+    iso-8859-{{1..11},{6,8}-{e,i},13,14,15,16} iso_8859-{{1..9},15}+    iso_8859-{1,2,6,7}:1987 iso_8859-{3,4,5,8}:1988 iso_8859-9:1989+    iso-ir-{58,100,101,109,110,126,127,138,144,148,149,157}+    koi{,8,8-r,8-ru,8-u,8_r} cskoi8r+    ks_c_5601-{1987,1989} ksc{,_}5691 csksc56011987+    latin{1..6} l{{1..6},9}+    shift{-,_}jis csshiftjis {,x-}sjis ms_kanji ms932+    utf{,-}8 utf-16{,be,le} unicode-1-1-utf-8+    windows-{31j,874,949,125{0..8}} dos-874 tis-620 ansi_x3.4-1968+    x-user-defined auto none+  )++  _wanted encodings expl encoding compadd -a "$@" - _encodings+}++# Complete file types+_rg_types() {+  local -a expl+  local -aU _types++  _types=( ${(@)${(f)"$( _call_program types rg --type-list )"}%%:*} )++  _wanted types expl 'file type' compadd -a "$@" - _types+}++_rg "$@"++################################################################################+# ZSH COMPLETION REFERENCE+#+# For the convenience of developers who aren't especially familiar with zsh+# completion functions, a brief reference guide follows. This is in no way+# comprehensive; it covers just enough of the basic structure, syntax, and+# conventions to help someone make simple changes like adding new options. For+# more complete documentation regarding zsh completion functions, please see the+# following:+#+# * http://zsh.sourceforge.net/Doc/Release/Completion-System.html+# * https://github.com/zsh-users/zsh/blob/master/Etc/completion-style-guide+#+# OVERVIEW+#+# Most zsh completion functions are defined in terms of `_arguments`, which is a+# shell function that takes a series of argument specifications. The specs for+# `rg` are stored in an array, which is common for more complex functions; the+# elements of the array are passed to `_arguments` on invocation.+#+# ARGUMENT-SPECIFICATION SYNTAX+#+# The following is a contrived example of the argument specs for a simple tool:+#+#   '(: * -)'{-h,--help}'[display help information]'+#   '(-q -v --quiet --verbose)'{-q,--quiet}'[decrease output verbosity]'+#   '!(-q -v --quiet --verbose)--silent'+#   '(-q -v --quiet --verbose)'{-v,--verbose}'[increase output verbosity]'+#   '--color=[specify when to use colors]:when:(always never auto)'+#   '*:example file:_files'+#+# Although there may appear to be six specs here, there are actually nine; we+# use brace expansion to combine specs for options that go by multiple names,+# like `-q` and `--quiet`. This is customary, and ties in with the fact that zsh+# merges completion possibilities together when they have the same description.+#+# The first line defines the option `-h`/`--help`. With most tools, it isn't+# useful to complete anything after `--help` because it effectively overrides+# all others; the `(: * -)` at the beginning of the spec tells zsh not to+# complete any other operands (`:` and `*`) or options (`-`) after this one has+# been used. The `[...]` at the end associates a description with `-h`/`--help`;+# as mentioned, zsh will see the identical descriptions and merge these options+# together when offering completion possibilities.+#+# The next line defines `-q`/`--quiet`. Here we don't want to suppress further+# completions entirely, but we don't want to offer `-q` if `--quiet` has been+# given (since they do the same thing), nor do we want to offer `-v` (since it+# doesn't make sense to be quiet and verbose at the same time). We don't need to+# tell zsh not to offer `--quiet` a second time, since that's the default+# behaviour, but since this line expands to two specs describing `-q` *and*+# `--quiet` we do need to explicitly list all of them here.+#+# The next line defines a hidden option `--silent` — maybe it's a deprecated+# synonym for `--quiet`. The leading `!` indicates that zsh shouldn't offer this+# option during completion. The benefit of providing a spec for an option that+# shouldn't be completed is that, if someone *does* use it, we can correctly+# suppress completion of other options afterwards.+#+# The next line defines `-v`/`--verbose`; this works just like `-q`/`--quiet`.+#+# The next line defines `--color`. In this example, `--color` doesn't have a+# corresponding short option, so we don't need to use brace expansion. Further,+# there are no other options it's exclusive with (just itself), so we don't need+# to define those at the beginning. However, it does take a mandatory argument.+# The `=` at the end of `--color=` indicates that the argument may appear either+# like `--color always` or like `--color=always`; this is how most GNU-style+# command-line tools work. The corresponding short option would normally use `+`+# — for example, `-c+` would allow either `-c always` or `-calways`. For this+# option, the arguments are known ahead of time, so we can simply list them in+# parentheses at the end (`when` is used as the description for the argument).+#+# The last line defines an operand (a non-option argument). In this example, the+# operand can be used any number of times (the leading `*`), and it should be a+# file path, so we tell zsh to call the `_files` function to complete it. The+# `example file` in the middle is the description to use for this operand; we+# could use a space instead to accept the default provided by `_files`.+#+# GROUPING ARGUMENT SPECIFICATIONS+#+# Newer versions of zsh support grouping argument specs together. All specs+# following a `+` and then a group name are considered to be members of the+# named group. Grouping is useful mostly for organisational purposes; it makes+# the relationship between different options more obvious, and makes it easier+# to specify exclusions.+#+# We could rewrite our example above using grouping as follows:+#+#   '(: * -)'{-h,--help}'[display help information]'+#   '--color=[specify when to use colors]:when:(always never auto)'+#   '*:example file:_files'+#   + '(verbosity)'+#   {-q,--quiet}'[decrease output verbosity]'+#   '!--silent'+#   {-v,--verbose}'[increase output verbosity]'+#+# Here we take advantage of a useful feature of spec grouping — when the group+# name is surrounded by parentheses, as in `(verbosity)`, it tells zsh that all+# of the options in that group are exclusive with each other. As a result, we+# don't need to manually list out the exclusions at the beginning of each+# option.+#+# Groups can also be referred to by name in other argument specs; for example:+#+#   '(xyz)--aaa' '*: :_files'+#   + xyz --xxx --yyy --zzz+#+# Here we use the group name `xyz` to tell zsh that `--xxx`, `--yyy`, and+# `--zzz` are not to be completed after `--aaa`. This makes the exclusion list+# much more compact and reusable.+#+# CONVENTIONS+#+# zsh completion functions generally adhere to the following conventions:+#+# * Use two spaces for indentation+# * Combine specs for options with different names using brace expansion+# * In combined specs, list the short option first (as in `{-a,--text}`)+# * Use `+` or `=` as described above for options that take arguments+# * Provide a description for all options, option-arguments, and operands+# * Capitalise/punctuate argument descriptions as phrases, not complete+#   sentences — 'display help information', never 'Display help information.'+#   (but still capitalise acronyms and proper names)+# * Write argument descriptions as verb phrases — 'display x', 'enable y',+#   'use z'+# * Word descriptions to make it clear when an option expects an argument;+#   usually this is done with the word 'specify', as in 'specify x' or+#   'use specified x')+# * Write argument descriptions as tersely as possible — for example, articles+#   like 'a' and 'the' should be omitted unless it would be confusing+#+# Other conventions currently used by this function:+#+# * Order argument specs alphabetically by group name, then option name+# * Group options that are directly related, mutually exclusive, or frequently+#   referenced by other argument specs+# * Use only characters in the set [a-z0-9_-] in group names+# * Order exclusion lists as follows: short options, long options, groups+# * Use American English in descriptions+# * Use 'don't' in descriptions instead of 'do not'+# * Word descriptions for related options as similarly as possible. For example,+#   `--foo[enable foo]` and `--no-foo[disable foo]`, or `--foo[use foo]` and+#   `--no-foo[don't use foo]`+# * Word descriptions to make it clear when an option only makes sense with+#   another option, usually by adding '(with -x)' to the end+# * Don't quote strings or variables unnecessarily. When quotes are required,+#   prefer single-quotes to double-quotes+# * Prefix option specs with `$no` when the option serves only to negate the+#   behaviour of another option that must be provided explicitly by the user.+#   This prevents rarely used options from cluttering up the completion menu+################################################################################++# ------------------------------------------------------------------------------+# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users+# All rights reserved.+#+# Redistribution and use in source and binary forms, with or without+# modification, are permitted provided that the following conditions are met:+#     * Redistributions of source code must retain the above copyright+#       notice, this list of conditions and the following disclaimer.+#     * Redistributions in binary form must reproduce the above copyright+#       notice, this list of conditions and the following disclaimer in the+#       documentation and/or other materials provided with the distribution.+#     * Neither the name of the zsh-users nor the+#       names of its contributors may be used to endorse or promote products+#       derived from this software without specific prior written permission.+#+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.+# ------------------------------------------------------------------------------+# Description+# -----------+#+#  Completion script for ripgrep+#+# ------------------------------------------------------------------------------+# Authors+# -------+#+#  * arcizan <ghostrevery@gmail.com>+#  * MaskRay <i@maskray.me>+#+# ------------------------------------------------------------------------------++# Local Variables:+# mode: shell-script+# coding: utf-8-unix+# indent-tabs-mode: nil+# sh-indentation: 2+# sh-basic-offset: 2+# End:+# vim: ft=zsh sw=2 ts=2 et

.zshrc

new file mode 100644@@ -0,0 +1,213 @@+# Define aliases and generic shell variables.+[[ -f ~/.pathrc ]] && . ~/.pathrc+is-work && [[ -f ~/work/rc/pathrc ]] && . ~/work/rc/pathrc+[[ -f ~/.aliasrc ]] && . ~/.aliasrc+is-work && [[ -f ~/work/rc/aliasrc ]] && . ~/work/rc/aliasrc+[[ -f ~/.envrc ]] && . ~/.envrc+is-work && [[ -f ~/work/rc/envrc ]] && . ~/work/rc/envrc++# If on a work machine, use special initialization.+is-work && [[ -f ~/work/rc/zshrc ]] && . ~/work/rc/zshrc++# Setup umask.+if is-remote-old; then+  umask 0077+else+  umask 0002+fi++# Disable beeping.+setterm --blength 0 > /dev/null 2>&1+# Dunno what this does.+stty -ixon++# Don't remove a space before the pipe symbol.+ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&'++# Setup LS_COLORS.+if cmd-exists dircolors; then+  . <(dircolors)+fi++# Set fpath for custom completions.+fpath=(~/.zsh-complete $fpath)+if [[ -f /usr/local/share/zsh-completions ]]; then+  fpath=(/usr/local/share/zsh-completions $fpath)+fi++# Fix for slow git auto-completion. Based on an SO answer, but refined by dana.+# See: https://superuser.com/questions/458906/zsh-tab-completion-of-git-commands-is-very-slow-how-can-i-turn-it-off+__git_other_files() {+  if [[ "$PWD" = "$HOME" ]]; then+    local -a expl+    _wanted files expl 'other file' _files+  fi+}++# Initialize auto completion and expansion.+zstyle ':completion:*' completer _complete _prefix _files+zstyle ':completion:*' menu select=1+zstyle ':completion:*:descriptions' format 'completing %d:'+zstyle ':completion:*' group-name ''+autoload -Uz compinit+# Only check for changes to completion once a day. If you need to force a+# recheck, just delete ~/.zcompdump.+#+# Also, seemingly, work machines running Ubuntu always needs 'compinit' for+# this to work, so never do the optimization there.+if [[+    -f ~/.zcompdump+    && "$(date +'%j')" == "$(stat -c '%y' ~/.zcompdump | date +'%j')"+  ]]; then+  if is-work; then+    compinit+  else+    compinit -C+  fi+else+  compinit+fi++# Use Emacs keybindings for now.+bindkey -e++# 'Del' should delete the next char.+bindkey '\e[3~' delete-char+# CTRL-LEFT goes backward one word.+bindkey '\e[1;5D' backward-word+# CTRL-RIGHT goes forward one word.+bindkey '\e[1;5C' forward-word+# Home goes to beginning of line.+bindkey '\e[1~' beginning-of-line+# End goes to end of line.+bindkey '\e[4~' end-of-line+# SHIFT-TAB should go backwards during auto-completion.+bindkey '\e[Z' reverse-menu-complete++# Setup history paging. We bind UP/DOWN to a special variant of history+# searching that matches according to prefix (not just the first word).+# This will also move the cursor to the end of the line.+autoload -Uz history-search-end+zle -N history-beginning-search-backward-end history-search-end+zle -N history-beginning-search-forward-end history-search-end+# UP does history prefix search, backwards.+# DOWN does history prefix search, forwards.+if is-work; then+  # For Ubuntu machines, the normal '\u[A' combo doesn't seem to work for+  # arrow keys. It's not clear why. This formulation was taken from:+  # https://github.com/zsh-users/zsh-history-substring-search/issues/92+  bindkey "$terminfo[kcuu1]" history-beginning-search-backward-end+  bindkey "$terminfo[kcud1]" history-beginning-search-forward-end+else+  bindkey '\e[A' history-beginning-search-backward-end+  bindkey '\e[B' history-beginning-search-forward-end+fi++# CTRL-X CTRL-E edits current command in editor.+autoload -Uz edit-command-line+zle -N edit-command-line+bindkey '^x^e' edit-command-line++# Make it so `command $foo` will potential split "$foo" into multiple+# parameters, which is how most other shells work.+setopt shwordsplit++# When a glob doesn't match anything, pass it through to the command unchanged.+# This is useful for remote globbing, e.g., rsync host:~/foo*.+setopt nonomatch++# Append to the history.+setopt appendhistory+# Use the extended history format, which gives timing info.+setopt extendedhistory+# Append to the history after each command runs, including timing info.+setopt incappendhistorytime+# Do not store adjacent duplicate commands.+setopt histignoredups+# Remove superfluous blanks that sometimes make it into my commands.+setopt histreduceblanks+# Commands beginning with a space are forgotten.+setopt histignorespace++# Notify on the completion of background tasks as soon as they finish, instead+# of waiting for the next prompt.+setopt notify++# Don't remove trailing slashs from directory names.+setopt noautoremoveslash+# When completing an unambiguous prefix, show the completions immediately.+setopt nolistambiguous+# Permit completion to happen inside a word, just before the cursor.+setopt completeinword++# Set history file and limits. Make them huge.+HISTFILE=~/.zsh_history+HISTSIZE=100000000+SAVEHIST=100000000++# Set the the built-in time format to be more like bash, with some goodies.+TIMEFMT=$'\nreal\t%*E\nuser\t%*U\nsys\t%*S\nmaxmem\t%M MB\nfaults\t%F'++# Configure the prompt. We keep things simple for PS1, but expend a bit of+# effort to set the window title correctly.+PS1="[%n@%M %1~]$ "+precmd() {+  cwd="$(pwd)"+  title="${cwd/#$HOME/~}"+  echo -n -e "\e]0;$title\007"+}+preexec() {+  cwd="$(pwd)"+  title="${cwd/#$HOME/~} - $1"+  echo -n -e "\e]0;$title\007"+}+autoload -Uz add-zsh-hook+add-zsh-hook -Uz precmd precmd+add-zsh-hook -Uz preexec preexec++# Enable fzf integration.+if [[ -f ~/.fzf.zsh ]]; then+  . ~/.fzf.zsh+else+  fzf="/usr/share/fzf"+  [[ -d "$fzf" ]] && . "$fzf/key-bindings.zsh" && . "$fzf/completion.zsh"+fi++# Enable auto suggestions when typing commands.+zshauto=(+  /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh+  /usr/local/share/zsh-autosuggestions/zsh-autosuggestions.zsh+  "$HOME/clones/install/zsh-autosuggestions/zsh-autosuggestions.zsh"+)+for p in $zshauto; do+  if [[ -f "$p" ]]; then+    . "$p"+    break+  fi+done++# Enable syntax highlighting in the terminal. This must come last.+zshsyntax=(+  /usr/share/zsh/plugins/fast-syntax-highlighting/fast-syntax-highlighting.plugin.zsh+  /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh+  /usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh+  /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh+)+for p in $zshsyntax; do+  if [[ -f "$p" ]]; then+    . "$p"+    break+  fi+done++# Add gvm environment. gvm is used for managing Go installations.+if [[ -f ~/.gvm/scripts/gvm ]]; then+  . ~/.gvm/scripts/gvm+fi++# Try to reconnect to ssh agent?+# if is-work; then+  # if ! ssh-add -L > /dev/null 2>&1; then+    # ssh_reagent+  # fi+# fi

etc/libinput/local-overrides.quirks

new file mode 100644@@ -0,0 +1,6 @@+[Touchpad pressure override]+MatchUdevType=touchpad+MatchName=*SynPS/2 Synaptics TouchPad+MatchDMIModalias=dmi:*svnSystem76*pvrdarp6*+AttrPressureRange=45:44+AttrPalmPressureThreshold=75