summaryrefslogtreecommitdiffstats
path: root/config
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2018-11-16 01:34:16 -0500
committerJesse Luehrs <doy@tozt.net>2018-11-16 03:18:44 -0500
commite42c989d6def401dd893a73cef5d5deac8b42778 (patch)
treea85a03c0c2c9861729ff182d471ddfb25a09ec33 /config
parentc08a8241a1844216bd76ecfe6bb7d20a8edaf00a (diff)
downloadconf-e42c989d6def401dd893a73cef5d5deac8b42778.tar.gz
conf-e42c989d6def401dd893a73cef5d5deac8b42778.zip
prefer xdg basedir specification directories
Diffstat (limited to 'config')
-rw-r--r--config/git/config73
-rw-r--r--config/git/ignore9
-rw-r--r--config/i3/browser-workspace.json16
-rw-r--r--config/i3/config77
-rw-r--r--config/i3/signal-workspace.json16
-rw-r--r--config/i3/terminal-workspace.json109
-rw-r--r--config/i3status/config44
-rw-r--r--config/mpd/mpd.conf5
-rw-r--r--config/msmtp/config11
-rw-r--r--config/ncmpcpp/bindings591
-rw-r--r--config/notmuch/config18
-rw-r--r--config/offlineimap/config34
-rw-r--r--config/offlineimap/pass.py5
-rw-r--r--config/sh/aliases42
-rw-r--r--config/sh/cdhist.sh174
-rw-r--r--config/sh/env25
-rw-r--r--config/sh/functions20
m---------config/sh/fzf0
-rw-r--r--config/tex/jesse.sty14
-rw-r--r--config/tex/jesse_essay.sty14
-rw-r--r--config/tex/jesse_letter.sty3
-rw-r--r--config/tex/jesse_macros.sty104
-rw-r--r--config/tex/jesse_resume.sty111
-rw-r--r--config/tex/sarah_resume.sty120
-rw-r--r--config/tig/config4
-rw-r--r--config/zsh/local-completions/hush/_sv10
m---------config/zsh/zsh-autosuggestions0
m---------config/zsh/zsh-completions0
m---------config/zsh/zsh-syntax-highlighting0
29 files changed, 1649 insertions, 0 deletions
diff --git a/config/git/config b/config/git/config
new file mode 100644
index 0000000..3a67355
--- /dev/null
+++ b/config/git/config
@@ -0,0 +1,73 @@
+[user]
+ email = doy@tozt.net
+ name = Jesse Luehrs
+[alias]
+ a = !git amend
+ aliases = !git config --get-regexp 'alias.*' | perl -nle'/^alias\\.([^ ]*) (.*)/ && printf \"%-15s = %s\\n\", $1, $2'
+ alias = "!f() { local name=$1; shift; git config --global alias.$name \"$*\"; }; f"
+ amend = !git add -p && git commit --amend
+ bd = "!f() { git choose-branch | head -n1 | xargs --no-run-if-empty git branch -D; }; f"
+ bda = "!f() { git branch --merged master --format='%(refname:short)' | grep -v '^master$' | xargs -r git branch -d; }; f"
+ blame-stats = !~/.bin/git/git-blame-stats
+ br = for-each-ref --sort=committerdate refs/heads/ --format='%(align:30,left)%(HEAD) %(refname:short)%(end) %(color:magenta)(%(committerdate:relative))'
+ choose-branch = "!f() { git for-each-ref --sort=-committerdate refs/heads/ --format='%(refname:short)' | fzf --height 40% --no-sort --preview='git show {} -q --format=medium'; }; f"
+ c = "!f() { git choose-branch | head -n1 | xargs --no-run-if-empty git co; }; f"
+ cc = cherry-pick
+ co = checkout
+ diff-branch = "!f() { local branch=${1:-HEAD}; git diff $(git merge-base master $branch) $branch; }; f"
+ ff = merge --ff-only
+ file-size = !~/.bin/git/git-file-size
+ fixup = "!f() { git record --fixup \"$@\"; }; f"
+ gc-aggressive = "!f() { git repack -Abd --window=250 --depth=250 --window-memory=1g && git prune --expire \"1 day ago\" && rm -f .git/gc.log && git gc; }; f"
+ imerge = !~/.bin/git/git-imerge
+ info = remote show -n origin
+ lg = log --graph --pretty=format:'%Cred%h%Creset%C(yellow)%d%Creset %C(bold blue)%aN%Creset %C(magenta)(%ar)%Creset%n%s%n' --abbrev-commit --date=relative --stat=72
+ m = "!f() { git co master && git pull && EDITOR=true git merge --no-ff \"$@\" && git bda; }; f"
+ prune-all = !git remote | xargs -n 1 git remote prune
+ pushall = "!f() { for repo in origin github; do git push $repo \"$@\"; done; }; f"
+ record = !git add -p && git commit --verbose
+ refix = "!f() { env EDITOR=true git rebase -i \"$@\"; }; f"
+ re = rebase -i @{u}
+ r = !git record
+ ri = rebase -i
+ rv = checkout -p
+ stashed = stash list --pretty=format:'%<(10)%gd: %Cred%h%Creset %Cgreen(%ar)%Creset%n %s'
+ st = status -sb
+ track = "!f() { local name=$(git name-rev --name-only @); git branch --set-upstream-to=origin/$name $name; }; f"
+[github]
+ user = doy
+[color]
+ ui = auto
+[core]
+ excludesfile = ~/.config/git/ignore
+[push]
+ default = current
+[branch]
+ autosetuprebase = always
+[merge]
+ conflictstyle = diff3
+[rebase]
+ autosquash = true
+ autostash = true
+[help]
+ autocorrect = 5
+[diff]
+ mnemonicprefix = true
+[advice]
+ pushUpdateRejected = false
+ statusHints = false
+ commitBeforeMerge = false
+ resolveConflict = false
+ detachedHead = false
+[rerere]
+ enabled = true
+[pager]
+ log = diff-highlight | less
+ show = diff-highlight | less
+ diff = diff-highlight | less
+[fetch]
+ prune = true
+[include]
+ path = config.private
+
+; vim:ft=gitconfig:
diff --git a/config/git/ignore b/config/git/ignore
new file mode 100644
index 0000000..4491917
--- /dev/null
+++ b/config/git/ignore
@@ -0,0 +1,9 @@
+# ignore vim swap files
+.*.sw?
+# openoffice lock files
+.~lock.*
+# prove state files
+.prove
+# ctags files
+tags
+tags-ja
diff --git a/config/i3/browser-workspace.json b/config/i3/browser-workspace.json
new file mode 100644
index 0000000..eea123a
--- /dev/null
+++ b/config/i3/browser-workspace.json
@@ -0,0 +1,16 @@
+{
+ "border": "pixel",
+ "floating": "auto_off",
+ "geometry": {
+ "x": 0,
+ "y": 0
+ },
+ "name": "Firefox",
+ "percent": 1,
+ "swallows": [
+ {
+ "class": "^Firefox$"
+ }
+ ],
+ "type": "con"
+}
diff --git a/config/i3/config b/config/i3/config
new file mode 100644
index 0000000..312df8e
--- /dev/null
+++ b/config/i3/config
@@ -0,0 +1,77 @@
+set $mod Mod4
+
+default_border pixel 1
+hide_edge_borders smart
+client.focused #aaaaaa #aaaaaa #ffffff #ffffff
+client.focused_inactive #000000 #000000 #ffffff #888888
+client.unfocused #000000 #000000 #ffffff #888888
+client.urgent #ff0000 #ff0000 #ffffff #ff0000
+
+floating_modifier $mod
+floating_minimum_size 1 x 1
+floating_maximum_size -1 x -1
+
+focus_wrapping no
+
+for_window [instance="urxvt-kuake"] floating enable
+for_window [instance="urxvt-kuake"] sticky enable
+for_window [instance="urxvt-kuake"] move absolute position 0 px 0 px
+
+for_window [class="Steam"] floating enable
+
+bindsym $mod+q kill
+
+bindsym $mod+h focus left
+bindsym $mod+j focus down
+bindsym $mod+k focus up
+bindsym $mod+l focus right
+
+bindsym $mod+Shift+h move left
+bindsym $mod+Shift+j move down
+bindsym $mod+Shift+k move up
+bindsym $mod+Shift+l move right
+
+bindsym $mod+Mod1+h split h
+bindsym $mod+Mod1+v split v
+
+bindsym $mod+f fullscreen
+
+bindsym $mod+Shift+space floating toggle
+bindsym $mod+space focus mode_toggle
+
+bindsym $mod+bracketleft exec i3-switch-workspace prev
+bindsym $mod+bracketright exec i3-switch-workspace next
+
+bindsym $mod+1 workspace 1
+bindsym $mod+2 workspace 2
+bindsym $mod+3 workspace 3
+bindsym $mod+4 workspace 4
+bindsym $mod+5 workspace 5
+bindsym $mod+6 workspace 6
+bindsym $mod+7 workspace 7
+bindsym $mod+8 workspace 8
+bindsym $mod+9 workspace 9
+
+bindsym $mod+Shift+1 move container to workspace 1
+bindsym $mod+Shift+2 move container to workspace 2
+bindsym $mod+Shift+3 move container to workspace 3
+bindsym $mod+Shift+4 move container to workspace 4
+bindsym $mod+Shift+5 move container to workspace 5
+bindsym $mod+Shift+6 move container to workspace 6
+bindsym $mod+Shift+7 move container to workspace 7
+bindsym $mod+Shift+8 move container to workspace 8
+bindsym $mod+Shift+9 move container to workspace 9
+
+bindsym $mod+c reload
+bindsym $mod+Shift+c restart
+bindsym $mod+Shift+q exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -b 'Yes, exit i3' 'i3-msg exit'"
+
+bar {
+ tray_output primary
+ status_command status
+ font xft:DejaVuSansMono 10
+}
+
+exec --no-startup-id "i3-msg 'workspace 6; append_layout .config/i3/browser-workspace.json; exec firefox'"
+exec --no-startup-id "i3-msg 'workspace 7; append_layout .config/i3/signal-workspace.json; exec signal-desktop'"
+exec --no-startup-id "i3-msg 'workspace 5; append_layout .config/i3/terminal-workspace.json; exec alacritty; exec alacritty; exec alacritty; exec alacritty; exec alacritty'"
diff --git a/config/i3/signal-workspace.json b/config/i3/signal-workspace.json
new file mode 100644
index 0000000..acac998
--- /dev/null
+++ b/config/i3/signal-workspace.json
@@ -0,0 +1,16 @@
+{
+ "border": "pixel",
+ "floating": "auto_off",
+ "geometry": {
+ "x": 0,
+ "y": 0
+ },
+ "name": "Signal",
+ "percent": 1,
+ "swallows": [
+ {
+ "class": "^Signal$"
+ }
+ ],
+ "type": "con"
+}
diff --git a/config/i3/terminal-workspace.json b/config/i3/terminal-workspace.json
new file mode 100644
index 0000000..8275b18
--- /dev/null
+++ b/config/i3/terminal-workspace.json
@@ -0,0 +1,109 @@
+{
+ "border": "pixel",
+ "floating": "auto_off",
+ "layout": "splitv",
+ "percent": 0.295,
+ "type": "con",
+ "nodes": [
+ {
+ "border": "pixel",
+ "floating": "auto_off",
+ "geometry": {
+ "height": 340,
+ "width": 564,
+ "x": 0,
+ "y": 0
+ },
+ "name": "main:0:zsh - \"doy@lance:~\"",
+ "percent": 0.333333333333333,
+ "swallows": [
+ {
+ "instance": "^Alacritty$"
+ }
+ ],
+ "type": "con"
+ },
+ {
+ "border": "pixel",
+ "floating": "auto_off",
+ "geometry": {
+ "height": 340,
+ "width": 564,
+ "x": 0,
+ "y": 0
+ },
+ "name": "work:0:zsh - \"doy@lance:~/work\"",
+ "percent": 0.333333333333333,
+ "swallows": [
+ {
+ "instance": "^Alacritty$"
+ }
+ ],
+ "type": "con"
+ },
+ {
+ "border": "pixel",
+ "floating": "auto_off",
+ "geometry": {
+ "height": 340,
+ "width": 564,
+ "x": 0,
+ "y": 0
+ },
+ "name": "misc:0:zsh - \"doy@lance:~\"",
+ "percent": 0.333333333333333,
+ "swallows": [
+ {
+ "instance": "^Alacritty$"
+ }
+ ],
+ "type": "con"
+ }
+ ]
+}
+
+{
+ "border": "pixel",
+ "floating": "auto_off",
+ "layout": "splitv",
+ "percent": 0.705,
+ "type": "con",
+ "nodes": [
+ {
+ "border": "pixel",
+ "floating": "auto_off",
+ "geometry": {
+ "height": 340,
+ "width": 564,
+ "x": 0,
+ "y": 0
+ },
+ "name": "chat:0:WeeChat 0.4.3 - \"WeeChat 0.4.3\"",
+ "percent": 0.5,
+ "swallows": [
+ {
+ "instance": "^Alacritty$"
+ }
+ ],
+ "type": "con"
+ },
+ {
+ "border": "pixel",
+ "floating": "auto_off",
+ "geometry": {
+ "height": 340,
+ "width": 564,
+ "x": 0,
+ "y": 0
+ },
+ "name": "docs:0:zsh - \"doy@lance:~\"",
+ "percent": 0.5,
+ "swallows": [
+ {
+ "instance": "^Alacritty$"
+ }
+ ],
+ "type": "con"
+ }
+ ]
+}
diff --git a/config/i3status/config b/config/i3status/config
new file mode 100644
index 0000000..4c2bcdd
--- /dev/null
+++ b/config/i3status/config
@@ -0,0 +1,44 @@
+general {
+ output_format = i3bar
+ interval = 1
+}
+
+order += "cpu_usage"
+order += "wireless wlp3s0"
+order += "ethernet enp0s25"
+order += "battery 0"
+order += "battery 1"
+order += "time"
+order += "load"
+
+cpu_usage {
+ format = "CPU: %usage"
+}
+
+wireless wlp3s0 {
+ format_up = "wlp3s0: (%essid: %quality)"
+ format_down = "wlp3s0"
+}
+
+ethernet enp0s25 {
+ format_up = "enp0s25: (%speed)"
+ format_down = "enp0s25"
+}
+
+battery 0 {
+ last_full_capacity = true
+ format = "%status %percentage (%remaining %consumption)"
+}
+
+battery 1 {
+ last_full_capacity = true
+ format = "%status %percentage (%remaining %consumption)"
+}
+
+time {
+ format = "%a %b %d %H:%M:%S"
+}
+
+load {
+ format = "%1min"
+}
diff --git a/config/mpd/mpd.conf b/config/mpd/mpd.conf
new file mode 100644
index 0000000..e30c2fc
--- /dev/null
+++ b/config/mpd/mpd.conf
@@ -0,0 +1,5 @@
+db_file "~/.cache/mpd/mpd.db"
+state_file "~/.cache/mpd/mpd.state"
+playlist_directory "~/.config/mpd/playlists"
+music_directory "~/media/audio/copy"
+bind_to_address "localhost"
diff --git a/config/msmtp/config b/config/msmtp/config
new file mode 100644
index 0000000..541aa90
--- /dev/null
+++ b/config/msmtp/config
@@ -0,0 +1,11 @@
+defaults
+auth on
+tls on
+tls_starttls off
+
+account default
+host mail.tozt.net
+from doy@tozt.net
+user doy
+passwordeval pass "mail/mail.tozt.net/doy"
+tls_trust_file /etc/ssl/certs/ca-certificates.crt
diff --git a/config/ncmpcpp/bindings b/config/ncmpcpp/bindings
new file mode 100644
index 0000000..20a0259
--- /dev/null
+++ b/config/ncmpcpp/bindings
@@ -0,0 +1,591 @@
+##############################################################
+## This is the example bindings file. Copy it to ##
+## ~/.ncmpcpp/bindings or $XDG_CONFIG_HOME/ncmpcpp/bindings ##
+## and set up your preferences ##
+##############################################################
+##
+##### General rules #####
+##
+## 1) Because each action has runtime checks whether it's
+## ok to run it, a few actions can be bound to one key.
+## Actions will be bound in order given in configuration
+## file. When a key is pressed, first action in order
+## will test itself whether it's possible to run it. If
+## test succeeds, action is executed and other actions
+## bound to this key are ignored. If it doesn't, next
+## action in order tests itself etc.
+##
+## 2) It's possible to bind more that one action at once
+## to a key. It can be done using the following syntax:
+##
+## def_key "key"
+## action1
+## action2
+## ...
+##
+## This creates a chain of actions. When such chain is
+## executed, each action in chain is run until the end of
+## chain is reached or one of its actions fails to execute
+## due to its requirements not being met. If multiple actions
+## and/or chains are bound to the same key, they will be
+## consecutively run until one of them gets fully executed.
+##
+## 3) When ncmpcpp starts, bindings configuration file is
+## parsed and then ncmpcpp provides "missing pieces"
+## of default keybindings. If you want to disable some
+## bindings, there is a special action called 'dummy'
+## for that purpose. Eg. if you want to disable ability
+## to crop playlists, you need to put the following
+## into configuration file:
+##
+## def_key "C"
+## dummy
+##
+## After that ncmpcpp will not bind any default action
+## to this key.
+##
+## 4) To let you write simple macros, the following special
+## actions are provided:
+##
+## - push_character "character" - pushes given special
+## character into input queue, so it will be immediately
+## picked by ncmpcpp upon next call to readKey function.
+## Accepted values: mouse, up, down, page_up, page_down,
+## home, end, space, enter, insert, delete, left, right,
+## tab, ctrl-a, ctrl-b, ..., ctrl-z, ctrl-[, ctrl-\\,
+## ctrl-], ctrl-^, ctrl-_, f1, f2, ..., f12, backspace.
+## In addition, most of these names can be prefixed with
+## alt-/ctrl-/shift- to be recognized with the appropriate
+## modifier key(s).
+##
+## - push_characters "string" - pushes given string into
+## input queue.
+##
+## - require_runnable "action" - checks whether given action
+## is runnable and fails if it isn't. This is especially
+## useful when mixed with previous two functions. Consider
+## the following macro definition:
+##
+## def_key "key"
+## push_characters "custom_filter"
+## apply_filter
+##
+## If apply_filter can't be currently run, we end up with
+## sequence of characters in input queue which will be
+## treated just as we typed them. This may lead to unexpected
+## results (in this case 'c' will most likely clear current
+## playlist, 'u' will trigger database update, 's' will stop
+## playback etc.). To prevent such thing from happening, we
+## need to change above definition to this one:
+##
+## def_key "key"
+## require_runnable "apply_filter"
+## push_characters "custom_filter"
+## apply_filter
+##
+## Here, first we test whether apply_filter can be actually run
+## before we stuff characters into input queue, so if condition
+## is not met, whole chain is aborted and we're fine.
+##
+## - require_screen "screen" - checks whether given screen is
+## currently active. accepted values: browser, clock, help,
+## media_library, outputs, playlist, playlist_editor,
+## search_engine, tag_editor, visualizer, last_fm, lyrics,
+## selected_items_adder, server_info, song_info,
+## sort_playlist_dialog, tiny_tag_editor.
+##
+## - run_external_command "command" - runs given command using
+## system() function.
+##
+## 5) In addition to binding to a key, you can also bind actions
+## or chains of actions to a command. If it comes to commands,
+## syntax is very similar to defining keys. Here goes example
+## definition of a command:
+##
+## def_command "quit" [deferred]
+## stop
+## quit
+##
+## If you execute the above command (which can be done by
+## invoking action execute_command, typing 'quit' and pressing
+## enter), ncmpcpp will stop the player and then quit. Note the
+## presence of word 'deferred' enclosed in square brackets. It
+## tells ncmpcpp to wait for confirmation (ie. pressing enter)
+## after you typed quit. Instead of 'deferred', 'immediate'
+## could be used. Then ncmpcpp will not wait for confirmation
+## (enter) and will execute the command the moment it sees it.
+##
+## Note: while command chains are executed, internal environment
+## update (which includes current window refresh and mpd status
+## update) is not performed for performance reasons. However, it
+## may be desirable to do so in some situration. Therefore it's
+## possible to invoke by hand by performing 'update enviroment'
+## action.
+##
+## Note: There is a difference between:
+##
+## def_key "key"
+## action1
+##
+## def_key "key"
+## action2
+##
+## and
+##
+## def_key "key"
+## action1
+## action2
+##
+## First one binds two single actions to the same key whilst
+## second one defines a chain of actions. The behavior of
+## these two is different and is described in (1) and (2).
+##
+## Note: Function def_key accepts non-ascii characters.
+##
+##### List of unbound actions #####
+##
+## The following actions are not bound to any key/command:
+##
+## - set_volume
+##
+
+def_key "j"
+ scroll_down
+
+def_key "k"
+ scroll_up
+
+def_key "J"
+ move_sort_order_down
+
+def_key "K"
+ move_sort_order_up
+
+def_key ">"
+ next
+
+def_key "<"
+ previous
+
+def_key "up"
+ volume_up
+
+def_key "down"
+ volume_down
+
+def_key "backspace"
+ stop
+
+def_key "space"
+ pause
+
+def_key "left"
+ seek_backward
+
+def_key "right"
+ seek_forward
+
+def_key "p"
+ previous_found_item
+
+def_key "n"
+ next_found_item
+
+def_key "a"
+ add_item_to_playlist
+
+def_key "d"
+ delete_playlist_items
+
+def_key "g"
+ move_home
+
+def_key "G"
+ move_end
+
+#def_key "shift-up"
+# select_item
+# scroll_up
+#
+#def_key "down"
+# scroll_down
+#
+#def_key "shift-down"
+# select_item
+# scroll_down
+#
+#def_key "["
+# scroll_up_album
+#
+#def_key "]"
+# scroll_down_album
+#
+#def_key "{"
+# scroll_up_artist
+#
+#def_key "}"
+# scroll_down_artist
+#
+#def_key "page_up"
+# page_up
+#
+#def_key "page_down"
+# page_down
+#
+#def_key "home"
+# move_home
+#
+#def_key "end"
+# move_end
+#
+#def_key "insert"
+# select_item
+#
+#def_key "enter"
+# enter_directory
+#
+#def_key "enter"
+# toggle_output
+#
+#def_key "enter"
+# run_action
+#
+#def_key "enter"
+# play_item
+#
+#def_key "space"
+# add_item_to_playlist
+#
+#def_key "space"
+# toggle_lyrics_update_on_song_change
+#
+#def_key "space"
+# toggle_visualization_type
+#
+#def_key "delete"
+# delete_playlist_items
+#
+#def_key "delete"
+# delete_browser_items
+#
+#def_key "delete"
+# delete_stored_playlist
+#
+#def_key "right"
+# next_column
+#
+#def_key "right"
+# slave_screen
+#
+#def_key "right"
+# volume_up
+#
+#def_key "+"
+# volume_up
+#
+#def_key "left"
+# previous_column
+#
+#def_key "left"
+# master_screen
+#
+#def_key "left"
+# volume_down
+#
+#def_key "-"
+# volume_down
+#
+#def_key ":"
+# execute_command
+#
+#def_key "tab"
+# next_screen
+#
+#def_key "shift-tab"
+# previous_screen
+#
+#def_key "f1"
+# show_help
+#
+#def_key "1"
+# show_playlist
+#
+#def_key "2"
+# show_browser
+#
+#def_key "2"
+# change_browse_mode
+#
+#def_key "3"
+# show_search_engine
+#
+#def_key "3"
+# reset_search_engine
+#
+#def_key "4"
+# show_media_library
+#
+#def_key "4"
+# toggle_media_library_columns_mode
+#
+#def_key "5"
+# show_playlist_editor
+#
+#def_key "6"
+# show_tag_editor
+#
+#def_key "7"
+# show_outputs
+#
+#def_key "8"
+# show_visualizer
+#
+#def_key "="
+# show_clock
+#
+#def_key "@"
+# show_server_info
+#
+#def_key "s"
+# stop
+#
+#def_key "p"
+# pause
+#
+#def_key ">"
+# next
+#
+#def_key "<"
+# previous
+#
+#def_key "ctrl-h"
+# jump_to_parent_directory
+#
+#def_key "ctrl-h"
+# replay_song
+#
+#def_key "backspace"
+# jump_to_parent_directory
+#
+#def_key "backspace"
+# replay_song
+#
+#def_key "f"
+# seek_forward
+#
+#def_key "b"
+# seek_backward
+#
+#def_key "r"
+# toggle_repeat
+#
+#def_key "z"
+# toggle_random
+#
+#def_key "y"
+# save_tag_changes
+#
+#def_key "y"
+# start_searching
+#
+#def_key "y"
+# toggle_single
+#
+#def_key "R"
+# toggle_consume
+#
+#def_key "Y"
+# toggle_replay_gain_mode
+#
+#def_key "T"
+# toggle_add_mode
+#
+#def_key "|"
+# toggle_mouse
+#
+#def_key "#"
+# toggle_bitrate_visibility
+#
+#def_key "Z"
+# shuffle
+#
+#def_key "x"
+# toggle_crossfade
+#
+#def_key "X"
+# set_crossfade
+#
+#def_key "u"
+# update_database
+#
+#def_key "ctrl-s"
+# sort_playlist
+#
+#def_key "ctrl-s"
+# toggle_browser_sort_mode
+#
+#def_key "ctrl-s"
+# toggle_media_library_sort_mode
+#
+#def_key "ctrl-r"
+# reverse_playlist
+#
+#def_key "ctrl-f"
+# apply_filter
+#
+#def_key "ctrl-_"
+# select_found_items
+#
+#def_key "/"
+# find
+#
+#def_key "/"
+# find_item_forward
+#
+#def_key "?"
+# find
+#
+#def_key "?"
+# find_item_backward
+#
+#def_key "."
+# next_found_item
+#
+#def_key ","
+# previous_found_item
+#
+#def_key "w"
+# toggle_find_mode
+#
+#def_key "e"
+# edit_song
+#
+#def_key "e"
+# edit_library_tag
+#
+#def_key "e"
+# edit_library_album
+#
+#def_key "e"
+# edit_directory_name
+#
+#def_key "e"
+# edit_playlist_name
+#
+#def_key "e"
+# edit_lyrics
+#
+#def_key "i"
+# show_song_info
+#
+#def_key "I"
+# show_artist_info
+#
+#def_key "g"
+# jump_to_position_in_song
+#
+#def_key "l"
+# show_lyrics
+#
+#def_key "ctrl-v"
+# select_range
+#
+#def_key "v"
+# reverse_selection
+#
+#def_key "V"
+# remove_selection
+#
+#def_key "B"
+# select_album
+#
+#def_key "a"
+# add_selected_items
+#
+#def_key "c"
+# clear_playlist
+#
+#def_key "c"
+# clear_main_playlist
+#
+#def_key "C"
+# crop_playlist
+#
+#def_key "C"
+# crop_main_playlist
+#
+#def_key "m"
+# move_sort_order_up
+#
+#def_key "m"
+# move_selected_items_up
+#
+#def_key "n"
+# move_sort_order_down
+#
+#def_key "n"
+# move_selected_items_down
+#
+#def_key "M"
+# move_selected_items_to
+#
+#def_key "A"
+# add
+#
+#def_key "S"
+# save_playlist
+#
+#def_key "o"
+# jump_to_playing_song
+#
+#def_key "G"
+# jump_to_browser
+#
+#def_key "G"
+# jump_to_playlist_editor
+#
+#def_key "~"
+# jump_to_media_library
+#
+#def_key "E"
+# jump_to_tag_editor
+#
+#def_key "U"
+# toggle_playing_song_centering
+#
+#def_key "P"
+# toggle_display_mode
+#
+#def_key "\\"
+# toggle_interface
+#
+#def_key "!"
+# toggle_separators_between_albums
+#
+#def_key "L"
+# toggle_lyrics_fetcher
+#
+#def_key "F"
+# fetch_lyrics_in_background
+#
+#def_key "alt-l"
+# toggle_fetching_lyrics_in_background
+#
+#def_key "ctrl-l"
+# toggle_screen_lock
+#
+#def_key "`"
+# toggle_library_tag_type
+#
+#def_key "`"
+# refetch_lyrics
+#
+#def_key "`"
+# add_random_items
+#
+#def_key "ctrl-p"
+# set_selected_items_priority
+#
+#def_key "q"
+# quit
+#
diff --git a/config/notmuch/config b/config/notmuch/config
new file mode 100644
index 0000000..c194010
--- /dev/null
+++ b/config/notmuch/config
@@ -0,0 +1,18 @@
+[database]
+path=/home/doy/Maildir
+
+[user]
+name=Jesse Luehrs
+primary_email=doy@tozt.net
+other_email=doy@stripe.com;jesse.luehrs@iinteractive.com;doy@cpan.org;
+
+[new]
+tags=unread;new;
+
+ignore=
+
+[maildir]
+synchronize_flags=true
+
+[search]
+exclude_tags=spam;
diff --git a/config/offlineimap/config b/config/offlineimap/config
new file mode 100644
index 0000000..fc8e496
--- /dev/null
+++ b/config/offlineimap/config
@@ -0,0 +1,34 @@
+[general]
+accounts = main
+maxsyncaccounts = 3
+status_backend = sqlite
+pythonfile = ~/.config/offlineimap/pass.py
+ui = basic
+socktimeout = 120
+
+[Account main]
+localrepository = main-local
+remoterepository = main-remote
+autorefresh = 5
+quick = 10
+postsynchook = notmuch new
+
+[Repository main-local]
+type = Maildir
+localfolders = ~/Maildir
+
+[Repository main-remote]
+type = IMAP
+ssl = yes
+sslcacertfile = /etc/ssl/certs/ca-certificates.crt
+remotehost = mail.tozt.net
+remoteuser = doy
+remotepasseval = get_password("mail/mail.tozt.net/doy")
+maxconnections = 5
+keepalive = 60
+holdconnectionopen = yes
+idlefolders = ['INBOX']
+folderfilter = lambda foldername: foldername not in ['notmuch'] and not re.search('^old(\.|$)', foldername)
+subscribedonly = no
+
+# vim:ft=dosini:
diff --git a/config/offlineimap/pass.py b/config/offlineimap/pass.py
new file mode 100644
index 0000000..20ca510
--- /dev/null
+++ b/config/offlineimap/pass.py
@@ -0,0 +1,5 @@
+from subprocess import Popen, PIPE
+
+def get_password(key):
+ (out, err) = Popen(["pass", key], stdout=PIPE).communicate()
+ return out.strip()
diff --git a/config/sh/aliases b/config/sh/aliases
new file mode 100644
index 0000000..c764f38
--- /dev/null
+++ b/config/sh/aliases
@@ -0,0 +1,42 @@
+# improvements to common commands {{{
+alias ls="exa --group-directories-first --time-style=long-iso --git --color-scale"
+alias ll="ls -l"
+alias grep="grep --color=auto"
+alias rm="rm -i"
+alias cp="cp -i"
+alias mv="mv -i"
+alias bc="bc -lq"
+alias ag="ag --pager=less --smart-case"
+type forkprove > /dev/null 2>&1 && alias prove="forkprove"
+type tput > /dev/null 2>&1 && alias reset="tput reset"
+type sudo-askpass > /dev/null 2>&1 && alias sudo="sudo -A"
+# }}}
+# games {{{
+alias nao="env TERM=rxvt telnet nethack.alt.org"
+alias cao="env TERM=rxvt /usr/bin/ssh -C -i $HOME/.ssh/cao_key joshua@crawl.akrasiac.org"
+alias cdo="ssh -C -i $HOME/.ssh/cao_key crawl@crawl.develz.org"
+# }}}
+# termcast {{{
+alias tc="telnet termcast.org"
+# }}}
+# shells {{{
+alias bishamon='ssh doy@bishamon'
+alias tozt="ssh doy@tozt.net"
+# }}}
+# tmux sessions {{{
+alias main='tmux new -As main'
+alias chat='tmux new -As chat'
+alias work='tmux new -As work'
+alias docs='tmux new -As docs'
+alias misc='tmux new -As misc'
+# }}}
+# other {{{
+alias pm="find lib -type f"
+alias v="vim --cmd 'let g:startify_disable_at_vimenter = 1' -c 'call feedkeys(\"t\")'"
+alias g="vim --cmd 'let g:startify_disable_at_vimenter = 1' -c 'call feedkeys(\"ff\")'"
+alias utc="env TZ=UTC date"
+alias pd="perldoc"
+alias pc="p -c"
+# }}}
+
+# vim:ft=sh:fdm=marker
diff --git a/config/sh/cdhist.sh b/config/sh/cdhist.sh
new file mode 100644
index 0000000..d67d2e9
--- /dev/null
+++ b/config/sh/cdhist.sh
@@ -0,0 +1,174 @@
+### cdhist.sh
+###
+### Copyright (c) 2001 Yusuke Shinyama <yusuke at cs . nyu . edu>
+###
+### Permission to use, copy, modify, distribute this software and
+### its documentation for any purpose is hereby granted, provided
+### that existing copyright notices are retained in all copies and
+### that this notice is included verbatim in any distributions.
+### This software is provided ``AS IS'' without any express or implied
+### warranty.
+###
+
+### WARNING: THIS SCRIPT IS FOR GNU BASH ONLY!
+
+### What is this?
+###
+### Cdhist adds 'web-browser like history' to your bash shell.
+### Every time you change the current directory it records the directory
+### you can go back by simply typing a short command such as '-' or '+',
+### just like clicking web-browsers's 'back' button.
+### It's more convenient than using directory stacks when
+### you walk around two or three directories.
+###
+
+### Usage
+###
+### Just call this file from your .bashrc script.
+### The following commands are added.
+###
+### cd [pathname]
+### Go to the given directory, or your home directory if
+### pathname is omitted. This overrides the original command.
+### You can use it by typing '\cd'.
+###
+### + [n]
+### 'Forward' button. Go to the n'th posterior directory in the history.
+### Go to the next directory if the number is omitted.
+###
+### - [n]
+### 'Back' button. Go to the n'th prior directory in the history.
+### Go to the previous directory if the number is omitted.
+###
+### = [n]
+### Show histories with directory numbers.
+###
+### A directory number shows the index to the current directory
+### in the history. The current directory always has directory number 0.
+### For prior directories, a negative number is given.
+### For posterior directories, a positive number is given.
+###
+### cdhist_reset
+### Clear the cd history.
+###
+
+### Example
+###
+### /home/yusuke:$ . cdhist.sh
+### /home/yusuke:$ cd /tmp
+### /tmp:$ cd /usr/bin
+### /usr/bin:$ cd /etc
+### /etc:$ -
+### /usr/bin:$ -
+### /tmp:$ +
+### /usr/bin:$ =
+### -2 ~
+### -1 /tmp
+### 0:/usr/bin
+### 1 /etc
+### /usr/bin:$ - 2
+### /home/yusuke:$
+###
+
+
+CDHIST_CDQMAX=10
+declare -a CDHIST_CDQ
+
+function cdhist_reset {
+ CDHIST_CDQ=("$PWD")
+}
+
+function cdhist_disp {
+ echo "$*" | sed "s $HOME ~ g"
+}
+
+function cdhist_add {
+ CDHIST_CDQ=("$1" "${CDHIST_CDQ[@]}")
+}
+
+function cdhist_del {
+ [[ -n $ZSH_VERSION ]] && setopt localoptions && setopt ksharrays
+ local i=${1-0}
+ if [ ${#CDHIST_CDQ[@]} -le 1 ]; then return; fi
+ for ((; i<${#CDHIST_CDQ[@]}-1; i++)); do
+ CDHIST_CDQ[$i]="${CDHIST_CDQ[$((i+1))]}"
+ done
+ unset CDHIST_CDQ[$i]
+}
+
+function cdhist_rot {
+ [[ -n $ZSH_VERSION ]] && setopt localoptions && setopt ksharrays
+ local i q
+ declare -a q
+ for ((i=0; i<$1; i++)); do
+ q[$i]="${CDHIST_CDQ[$(((i+$1+$2)%$1))]}"
+ done
+ for ((i=0; i<$1; i++)); do
+ CDHIST_CDQ[$i]="${q[$i]}"
+ done
+}
+
+function cdhist_cd {
+ [[ -n $ZSH_VERSION ]] && setopt localoptions && setopt ksharrays
+ local i f=0
+ builtin cd "$@" || return 1
+ for ((i=0; i<${#CDHIST_CDQ[@]}; i++)); do
+ if [ "${CDHIST_CDQ[$i]}" = "$PWD" ]; then f=1; break; fi
+ done
+ if [ $f -eq 1 ]; then
+ cdhist_rot $((i+1)) -1
+ elif [ ${#CDHIST_CDQ[@]} -lt $CDHIST_CDQMAX ]; then
+ cdhist_add "$PWD"
+ else
+ cdhist_rot ${#CDHIST_CDQ[@]} -1
+ CDHIST_CDQ[0]="$PWD"
+ fi
+}
+
+function cdhist_history {
+ [[ -n $ZSH_VERSION ]] && setopt localoptions && setopt ksharrays
+ local i d
+ if [ $# -eq 0 ]; then
+ for ((i=${#CDHIST_CDQ[@]}-1; 0<=i; i--)); do
+ cdhist_disp " $i ${CDHIST_CDQ[$i]}"
+ done
+ elif [ "$1" -lt ${#CDHIST_CDQ[@]} ]; then
+ d=${CDHIST_CDQ[$1]}
+ if builtin cd "$d"; then
+ cdhist_rot $(($1+1)) -1
+ else
+ cdhist_del $1
+ fi
+ cdhist_disp "${CDHIST_CDQ[@]}"
+ fi
+}
+
+function cdhist_forward {
+ [[ -n $ZSH_VERSION ]] && setopt localoptions && setopt ksharrays
+ cdhist_rot ${#CDHIST_CDQ[@]} -${1-1}
+ if ! builtin cd "${CDHIST_CDQ[0]}"; then
+ cdhist_del 0
+ fi
+ cdhist_disp "${CDHIST_CDQ[@]}"
+}
+
+function cdhist_back {
+ [[ -n $ZSH_VERSION ]] && setopt localoptions && setopt ksharrays
+ cdhist_rot ${#CDHIST_CDQ[@]} ${1-1}
+ if ! builtin cd "${CDHIST_CDQ[0]}"; then
+ cdhist_del 0
+ fi
+ cdhist_disp "${CDHIST_CDQ[@]}"
+}
+
+
+if [ ${#CDHIST_CDQ[@]} = 0 ]; then cdhist_reset; fi
+
+
+### Aliases
+###
+
+function cd { cdhist_cd "$@"; }
+function + { cdhist_forward "$@"; }
+function - { cdhist_back "$@"; }
+function = { cdhist_history "$@"; }
diff --git a/config/sh/env b/config/sh/env
new file mode 100644
index 0000000..218ddde
--- /dev/null
+++ b/config/sh/env
@@ -0,0 +1,25 @@
+export GPG_TTY=$(tty)
+export MANPAGER="$HOME/.bin/vimmanpager"
+export PERLDOC_PAGER="$HOME/.bin/vimmanpager"
+export EDITOR=$(/usr/bin/which vim)
+ssh="${HOME}/.bin/$(hostname)/ssh"
+if [ -x "$ssh" ]; then
+ export GIT_SSH="$ssh"
+ export RSYNC_RSH="$ssh"
+fi
+if type sudo-askpass > /dev/null 2>&1; then
+ SUDO_ASKPASS=$(command -v sudo-askpass)
+ export SUDO_ASKPASS
+fi
+export TEXINPUTS=".:$HOME/.config/tex:"
+export LESS='-QR'
+export PERL_CPANM_OPT="-q --mirror http://mirrors.kernel.org/cpan/ --mirror http://cpan.metacpan.org/ --prompt"
+export FZF_DEFAULT_OPTS="--reverse --inline-info --bind=tab:down,shift-tab:up,change:top"
+export FZF_DEFAULT_COMMAND="ag --hidden -l ."
+export FANCY_PROMPT_COLORS="user_doy=bright_blue,host_st-doy1=bright_white,host_bishamon=blue,host_tozt=bright_yellow,host_hush=bright_black,host_partofme=magenta"
+export PASSWORD_STORE_X_SELECTION=primary
+type brew > /dev/null 2>&1 && export PATH="/usr/local/opt/coreutils/libexec/gnubin:/usr/local/opt/findutils/libexec/gnubin:/usr/local/sbin:$PATH"
+type brew > /dev/null 2>&1 && export MANPATH="/usr/local/opt/coreutils/libexec/gnuman:/usr/local/opt/findutils/libexec/gnuman:$MANPATH"
+export NOTMUCH_CONFIG="${XDG_CONFIG_HOME:-${HOME}/.config}/notmuch/config"
+
+# vim:ft=sh:
diff --git a/config/sh/functions b/config/sh/functions
new file mode 100644
index 0000000..d6068e0
--- /dev/null
+++ b/config/sh/functions
@@ -0,0 +1,20 @@
+function perldoc {
+ # XXX bash specific
+ if type cpandoc > /dev/null 2>&1; then
+ cpandoc "$@"
+ else
+ command perldoc "$@"
+ fi
+}
+
+function cdu {
+ local root
+ root="$(git rev-parse --show-superproject-working-tree 2>/dev/null)"
+ if [ -n "$root" ]; then
+ cd "$root"
+ else
+ cd "$(git rev-parse --show-toplevel)"
+ fi
+}
+
+# vim:ft=sh:
diff --git a/config/sh/fzf b/config/sh/fzf
new file mode 160000
+Subproject d4ed955aee08a1c2ceb64e562ab4a88bdc9af8f
diff --git a/config/tex/jesse.sty b/config/tex/jesse.sty
new file mode 100644
index 0000000..189938e
--- /dev/null
+++ b/config/tex/jesse.sty
@@ -0,0 +1,14 @@
+% vim:foldmarker=<<<,>>>
+% <<< packages
+\RequirePackage{latexsym,amsmath,amssymb,fancyhdr,charter,jesse_macros}
+\usepackage[left=1in, right=1in]{geometry}
+% >>>
+
+% <<< headers/footers/margins
+\pagestyle{fancy}
+\fancyhead{}
+
+\setlength{\headheight}{1in}
+\setlength{\textheight}{8in}
+\setlength{\parindent}{0pt}
+% >>>
diff --git a/config/tex/jesse_essay.sty b/config/tex/jesse_essay.sty
new file mode 100644
index 0000000..3fb34f2
--- /dev/null
+++ b/config/tex/jesse_essay.sty
@@ -0,0 +1,14 @@
+\RequirePackage{fancyhdr,newcent,setspace}
+\usepackage[left=1.25in, right=1.25in]{geometry}
+
+% headers/footers/margins
+\pagestyle{fancy}
+\fancyhead{}
+
+\setlength{\headheight}{0.5in}
+\setlength{\textheight}{8.5in}
+\setlength{\parindent}{5em}
+
+\def\headers#1#2#3{\lhead{#1}\chead{#2}\rhead{#3}}
+
+\doublespacing
diff --git a/config/tex/jesse_letter.sty b/config/tex/jesse_letter.sty
new file mode 100644
index 0000000..734021f
--- /dev/null
+++ b/config/tex/jesse_letter.sty
@@ -0,0 +1,3 @@
+\usepackage{newcent}
+\signature{Jesse Luehrs}
+\address{506 E. White St. \\ Champaign, IL, 61820}
diff --git a/config/tex/jesse_macros.sty b/config/tex/jesse_macros.sty
new file mode 100644
index 0000000..e27fa25
--- /dev/null
+++ b/config/tex/jesse_macros.sty
@@ -0,0 +1,104 @@
+% vim:foldmarker=<<<,>>>
+% <<< headers
+\def\headers#1#2#3{\lhead{#1}\chead{#2}\rhead{#3}}
+% >>>
+
+% <<< Blackboard bold
+\DeclareSymbolFont{AMSb}{U}{msb}{m}{n}
+\DeclareMathSymbol{\N}{\mathbin}{AMSb}{"4E}
+\DeclareMathSymbol{\Z}{\mathbin}{AMSb}{"5A}
+\DeclareMathSymbol{\R}{\mathbin}{AMSb}{"52}
+\DeclareMathSymbol{\Q}{\mathbin}{AMSb}{"51}
+\DeclareMathSymbol{\I}{\mathbin}{AMSb}{"49}
+\DeclareMathSymbol{\C}{\mathbin}{AMSb}{"43}
+% >>>
+
+% <<< jeff's algorithm/code stuff
+% <<< algorithm environment
+\def\begin@lgo{\begin{minipage}{1in}\begin{tabbing}
+ \quad\=\qquad\=\qquad\=\qquad\=\qquad\=\qquad\=\qquad\=\kill}
+\def\end@lgo{\end{tabbing}\end{minipage}}
+
+\newenvironment{algorithm}
+ {\begin{tabular}{|l|}\hline\begin@lgo}
+ {\end@lgo\\\hline\end{tabular}}
+
+\def\beginc@de{\noindent\begin{center}\begin{minipage}{1in}\tt
+ \begin{tabbing}~~~~\=~~~~\=~~~~\=~~~~\=~~~~\=~~~~\=~~~~\=\kill}
+\def\endc@de{\end{tabbing}\end{minipage}\end{center}}
+
+\newenvironment{code}{\beginc@de}{\endc@de}
+% >>>
+
+% <<< algorithm definitions that handle highlighting and indentation
+\def\algoname#1{\textbf{\textsc{#1}}}
+\def\algotitle#1{\+\underline{\algoname{#1}}}
+\def\cif{\+\textbf{if} }
+\def\cthen{\textbf{then} }
+\def\celse{\+\textbf{else} }
+\def\creturn{\-\textbf{return} }
+\def\cwhile{\+\textbf{while} }
+\def\cdo{\textbf{do} }
+\def\cfor{\+\textbf{for} }
+\def\cbreak{\-\textbf{break} }
+% >>>
+% >>>
+
+% <<< more jeff's stuff for easier grouping symbols
+% <<< small grouping symbols
+\def\floor#1{\lfloor #1 \rfloor}
+\def\ceil#1{\lceil #1 \rceil}
+\def\seq#1{\langle #1 \rangle}
+\def\set#1{\{ #1 \}}
+\def\abs#1{\mathopen| #1 \mathclose|} % use instead of $|x|$
+\def\norm#1{\mathopen\| #1 \mathclose\|} % use instead of $\|x\|$
+\def\indic#1{\big[#1\big]} % indicator variable; Iverson notation
+ % e.g., Kronecker delta = [x=0]
+% >>>
+
+% <<< large grouping symbols
+\def\Floor#1{\left\lfloor #1 \right\rfloor}
+\def\Ceil#1{\left\lceil #1 \right\rceil}
+\def\Seq#1{\left\langle #1 \right\rangle}
+\def\Set#1{\left\{ #1 \right\}}
+\def\Abs#1{\left| #1 \right|}
+\def\Norm#1{\left\| #1 \right\|}
+\def\Paren#1{\left( #1 \right)} % need better macro name!
+\def\Brack#1{\left[ #1 \right]} % need better macro name!
+\def\Indic#1{\left[ #1 \right]} % indicator variable; Iverson notation
+% >>>
+% >>>
+
+% <<< displaystyle operators (also from jeff)
+\def\Frac#1#2{{\displaystyle\frac{#1}{#2}}}
+\def\Sum{\sum\limits}
+\def\Prod{\prod\limits}
+\def\Union{\bigcup\limits}
+\def\Inter{\bigcap\limits}
+\def\Lor{\bigvee\limits}
+\def\Land{\bigwedge\limits}
+\def\Lim{\lim\limits}
+\def\Max{\max\limits}
+\def\Min{\min\limits}
+% >>>
+
+% <<< cs421 stuff
+% <<< conversion symbols
+\def\alphaconv{\hspace{0.7em}\alpha\hspace{-1.4em}\longrightarrow}
+\def\betared{\hspace{0.7em}\beta\hspace{-1.4em}\longrightarrow}
+\def\etared{\hspace{0.7em}\eta\hspace{-1.4em}\longrightarrow}
+\def\l#1#2{\lambda #1.#2}
+% >>>
+
+% <<< prof gunter's macros for type inference
+\def\type#1#2#3{#1\vdash #2:#3}
+% >>>
+% >>>
+
+% <<< proof macros
+\def\iff#1#2{\begin{itemize}\item[\em If:]#1\item[\em Only if:]#2\end{itemize}}
+% >>>
+
+% <<< other symbols
+\def\nsubset{\hspace{0.4em}/\hspace{-0.9em}\subset}
+% >>>
diff --git a/config/tex/jesse_resume.sty b/config/tex/jesse_resume.sty
new file mode 100644
index 0000000..05580d9
--- /dev/null
+++ b/config/tex/jesse_resume.sty
@@ -0,0 +1,111 @@
+% vim:foldmarker=<<<,>>>
+% This work is licensed under the Creative Commons
+% Attribution-NonCommercial-ShareAlike License. To view a copy of this license,
+% visit http://creativecommons.org/licenses/by-nc-sa/1.0/ or send a letter to
+% Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
+% This file is adapted from Todd Courtesan's resume, at
+% http://www.courtesan.com/todd/resume.html
+
+% <<< packages
+\RequirePackage{latexsym,amsmath,amssymb,charter,color,calc,hyperref,jesse_macros}
+\RequirePackage[empty]{fullpage}
+% >>>
+% <<< dimensions/margins
+\raggedbottom
+\raggedright
+\setlength{\tabcolsep}{0in}
+\addtolength{\oddsidemargin}{-0.25in}
+\addtolength{\evensidemargin}{-0.25in}
+\addtolength{\textwidth}{0.5in}
+\addtolength{\topmargin}{-0.5in}
+\addtolength{\textheight}{1in}
+% >>>
+% <<< other definitions
+\definecolor{mygrey}{gray}{0.90}
+% >>>
+% <<< Custom commands
+% <<< \resheader
+\newcommand{\resheader}[6]{
+ \begin{tabular*}{\textwidth}{l@{\extracolsep{\fill}}cr}
+ #3 & \textbf{\LARGE #1} & #5\\
+ #4 & \url{#2} & #6\\
+ \end{tabular*}
+ \\
+ \vspace{0.1in}
+}
+% >>>
+% <<< \resitem
+\newcommand{\resitem}[1]{\item {\small #1} \vspace{-2pt}}
+% >>>
+% <<< \resheading
+\newcommand{\resheading}[1]{
+ {\large \colorbox{mygrey}{
+ \begin{minipage}
+ {\textwidth-0.175in}
+ {\textbf{#1 \vphantom{p\^{E}}}}
+ \end{minipage}
+ }}
+}
+% >>>
+% \ressubheading <<<
+\newcommand{\ressubheading}[4]{
+ \begin{tabular*}{\textwidth-0.5in}{l@{\extracolsep{\fill}}r}
+ \textbf{#1} & #2 \\
+ \textit{#3} & \textit{#4} \\
+ \end{tabular*}
+ \vspace{-6pt}
+}
+% >>>
+% \resshortsubheading <<<
+\newcommand{\resshortsubheading}[2]{
+ \begin{tabular*}{\textwidth-0.5in}{l@{\extracolsep{\fill}}r}
+ \textbf{\small #1} & {\small #2} \\
+ \end{tabular*}
+ \vspace{-6pt}
+}
+% >>>
+% \resclasses <<<
+\newlength{\res@classcolwidth}
+\newlength{\resclassgradesep}
+\newlength{\resclasscolsep}
+\setlength{\resclassgradesep}{0.1in}
+\setlength{\resclasscolsep}{0.25in}
+\newcommand{\resclasses}[2]{
+\setlength{\res@classcolwidth}{\textwidth/2-0.5in}
+\begin{minipage}[t]{\textwidth}
+\begin{center}
+\vspace{0.01in}
+\begin{minipage}[t]{\res@classcolwidth}
+\begin{tabular*}{\res@classcolwidth}[t]
+ {l@{\hspace{\resclassgradesep}}l@{\extracolsep{\fill}}r}
+#1
+\end{tabular*}
+\end{minipage}
+\hspace{\resclasscolsep}
+\begin{minipage}[t]{\res@classcolwidth}
+\begin{tabular*}{\res@classcolwidth}[t]
+ {l@{\hspace{\resclassgradesep}}l@{\extracolsep{\fill}}r}
+#2
+\end{tabular*}
+\end{minipage}
+\vspace{0.01in}
+\end{center}
+\end{minipage}
+}
+% >>>
+% \resclass <<<
+\newcommand{\resclass}[3]{
+ \parbox[b]{\res@classcolwidth-0.5in}{\textbf{#1}:} & #2 & \textit{#3}\\
+}
+% >>>
+% \restext <<<
+\newcommand{\restext}[1]{
+ % XXX: this 0in here seems like a hack, what do i really want?
+ \vspace{0in}
+ \\
+ #1
+ \\
+ \vspace{0.1in}
+}
+% >>>
+% >>>
diff --git a/config/tex/sarah_resume.sty b/config/tex/sarah_resume.sty
new file mode 100644
index 0000000..8ed2a20
--- /dev/null
+++ b/config/tex/sarah_resume.sty
@@ -0,0 +1,120 @@
+% vim:foldmarker=<<<,>>>
+% This work is licensed under the Creative Commons
+% Attribution-NonCommercial-ShareAlike License. To view a copy of this license,
+% visit http://creativecommons.org/licenses/by-nc-sa/1.0/ or send a letter to
+% Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
+% This file is adapted from Todd Courtesan's resume, at
+% http://www.courtesan.com/todd/resume.html
+
+% <<< packages
+\RequirePackage{latexsym,amsmath,amssymb,charter,color,calc,jesse_macros}
+\RequirePackage[empty]{fullpage}
+% >>>
+% <<< dimensions/margins
+\setlength{\tabcolsep}{0in}
+\addtolength{\oddsidemargin}{-0.25in}
+\addtolength{\evensidemargin}{-0.25in}
+\addtolength{\textwidth}{0.5in}
+\addtolength{\topmargin}{-0.5in}
+\addtolength{\textheight}{1in}
+% >>>
+% <<< other definitions
+\definecolor{mygrey}{gray}{0.90}
+% >>>
+% <<< Custom commands
+% <<< \resheader
+\newcommand{\resheader}[5]{
+ \raggedleft
+ \begin{tabular*}{\textwidth}{l@{\extracolsep{\fill}}cr}
+ #2 & \textbf{\LARGE #1} & #4\\
+ #3 & & #5\\
+ \end{tabular*}
+ \\
+ \vspace{0.1in}
+}
+% >>>
+% <<< \begin{reslist}
+\newenvironment{reslist}{
+ \begin{list}{-}{
+ \setlength{\rightmargin}{0.25in}
+ \setlength{\leftmargin}{0.125in}
+ \setlength{\itemsep}{-2pt}
+ }
+}{
+ \end{list}
+}
+% >>>
+% <<< \resitem
+\newcommand{\resitem}[1]{\item {\small #1}}
+% >>>
+% <<< \resheading
+\newcommand{\resheading}[1]{
+ {\large \colorbox{mygrey}{
+ \begin{minipage}
+ {\textwidth-0.175in}
+ {\textbf{#1 \vphantom{p\^{E}}}}
+ \end{minipage}
+ }}
+}
+% >>>
+% \ressubheading <<<
+\newcommand{\ressubheading}[4]{
+ \begin{tabular*}{\textwidth-0.5in}{l@{\extracolsep{\fill}}r}
+ \textbf{#1} & #2 \\
+ \textit{#3} & \textit{#4} \\
+ \end{tabular*}
+ \\
+ \vspace{-0.8pt}
+}
+% >>>
+% \resshortsubheading <<<
+\newcommand{\resshortsubheading}[2]{
+ \begin{tabular*}{\textwidth-0.5in}{l@{\extracolsep{\fill}}r}
+ \textbf{\small #1} & {\small #2} \\
+ \end{tabular*}
+ \vspace{-6pt}
+}
+% >>>
+% \resclasses <<<
+\newlength{\res@classcolwidth}
+\newlength{\resclasscolsep}
+\setlength{\resclasscolsep}{0.25in}
+\newcommand{\resclasses}[2]{
+\setlength{\res@classcolwidth}{\textwidth/2-0.5in}
+\begin{minipage}[t]{\textwidth}
+\begin{center}
+\vspace{0.01in}
+\begin{minipage}[t]{\res@classcolwidth}
+\begin{tabular*}{\res@classcolwidth}[t]
+ {l@{\extracolsep{\fill}}l}
+#1
+\end{tabular*}
+\end{minipage}
+\hspace{\resclasscolsep}
+\begin{minipage}[t]{\res@classcolwidth}
+\begin{tabular*}{\res@classcolwidth}[t]
+ {l@{\extracolsep{\fill}}l}
+#2
+\end{tabular*}
+\end{minipage}
+\vspace{0.01in}
+\end{center}
+\end{minipage}
+}
+% >>>
+% \resclass <<<
+\newcommand{\resclass}[2]{
+ \parbox[b]{\res@classcolwidth-0.5in}{\small \textbf{#1}:} & {\small #2}\\
+}
+% >>>
+% \restext <<<
+\newcommand{\restext}[1]{
+ % XXX: this 0in here seems like a hack, what do i really want?
+ \vspace{0in}
+ \\
+ #1
+ \\
+ \vspace{0.1in}
+}
+% >>>
+% >>>
diff --git a/config/tig/config b/config/tig/config
new file mode 100644
index 0000000..8eb4aa5
--- /dev/null
+++ b/config/tig/config
@@ -0,0 +1,4 @@
+bind generic i view-close
+bind main i none
+bind generic g move-first-line
+bind generic G move-last-line
diff --git a/config/zsh/local-completions/hush/_sv b/config/zsh/local-completions/hush/_sv
new file mode 100644
index 0000000..8887bd6
--- /dev/null
+++ b/config/zsh/local-completions/hush/_sv
@@ -0,0 +1,10 @@
+#compdef svdn svget svkill svlog svnuke svre svst svstop svup
+
+local -a service_list
+local services=$(ls ~/.services/enabled/)
+service_list=(${(s:
+:)services})
+
+_describe 'commands' service_list
+
+# vim:ft=zsh
diff --git a/config/zsh/zsh-autosuggestions b/config/zsh/zsh-autosuggestions
new file mode 160000
+Subproject affe7c687e329f881ae92e95670979b0f728e61
diff --git a/config/zsh/zsh-completions b/config/zsh/zsh-completions
new file mode 160000
+Subproject 5fdcec1bef68b8fb1ad528111f7892b6e7d5586
diff --git a/config/zsh/zsh-syntax-highlighting b/config/zsh/zsh-syntax-highlighting
new file mode 160000
+Subproject e900ad8bad53501689afcb050456400d7a8466e