9eee23072538

Remove some unused cruft
[view raw] [browse files]
author Steve Losh <steve@stevelosh.com>
date Tue, 26 Jun 2018 13:18:58 -0400
parents a1d399ef7d54
children 493c5e72391d
branches/tags (none)
files .pythonrc.py addcss.js bcvi/bcvi dotcss/amara.readthedocs.org.css dotcss/bank.simple.com.css dotcss/bitbucket.org.css dotcss/bugzilla.pculture.org.css dotcss/debuggex.com.css dotcss/default.css dotcss/dpaste.com.css dotcss/gist.github.com.css dotcss/github.banksimple.com.css dotcss/github.com.css dotcss/goodreads.com.css dotcss/google.com.css dotcss/jenkins.banksimple.com.css dotcss/khanacademy.org.css dotcss/linkedin.com.css dotcss/news.ycombinator.com.css dotcss/okcupid.com.css dotcss/readthedocs.org.css dotcss/refheap.com.css dotcss/secure.flickr.com.css dotcss/unisubs.example.com.css dotcss/unisubs.sifterapp.com.css dotcss/vimeo.com.css dotcss/weather.com.css dotcss/youtube.com.css dotjs/500px.com.js dotjs/bugzilla.pculture.org.js dotjs/democratandchronicle.com.js dotjs/dev.universalsubtitles.org.js dotjs/encrypted.google.com.js dotjs/flickr.com.js dotjs/getprismatic.com.js dotjs/github.com.js dotjs/google.com.js dotjs/jenkins.banksimple.com.js dotjs/nytimes.com.js dotjs/readability.com.js dotjs/reddit.com.js dotjs/secure.flickr.com.js dotjs/staging.universalsubtitles.org dotjs/unisubs.example.com.js dotjs/unisubs.sifterapp.com.js dotjs/youtube.com.js ipython/profile_default/ipython_config.py ipython/profile_default/startup/README marked-sjl.css pentadactylrc slate urlview userContent.css vimperatorrc

Changes

--- a/.pythonrc.py	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-from see import see
--- a/addcss.js	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-javascript:(function(){sjlCss=document.createElement('link');sjlCss.type='text/css';sjlCss.rel='stylesheet';sjlCss.href='http://stevelosh.com/media/css/fixer.css';document.getElementsByTagName("head")[0].appendChild(sjlCss)}());
--- a/bcvi/bcvi	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1563 +0,0 @@
-#!/usr/bin/perl
-##############################################################################
-#
-# Script:   bcvi
-#
-# The 'Back-Channel vim' tool works with SSH to allow commands which are run
-# on an SSH server to invoke processes back on the originating SSH client
-# machine.
-#
-# Use 'bcvi --help' for the documentation
-#
-# Copyright (c) 2007-2010 Grant McLean <grantm@cpan.org>
-#
-
-use strict;
-use warnings;
-
-require 5.008;
-
-##############################################################################
-# This package implements some common functionality required by both the
-# client and the server.
-#
-# It also serves as the entry-point for the command-line script.
-##############################################################################
-
-package App::BCVI;
-BEGIN {
-  $App::BCVI::VERSION = '3.05';
-}
-
-use File::Spec;
-use File::Path;
-use Getopt::Long qw();
-use Encode       qw(encode decode);
-use IO::Socket::INET;
-
-my %class_map = (
-    base   => 'App::BCVI',
-    client => 'App::BCVI::Client',
-    server => 'App::BCVI::Server',
-    pod    => 'App::BCVI::POD',
-);
-
-my %response_message = (
-    100 => "Ready ($App::BCVI::VERSION)",
-    200 => "Success",
-    300 => "Response follows",
-    900 => "Permission denied",
-    910 => "Unrecognised command",
-);
-
-my $LF = "\x0A";
-
-my(
-    %options, %option_name, %commands, @aliases, @installables,
-    %plugin_loaded, @plugins,
-);
-
-run(@ARGV) unless caller();       # Don't run anything if loaded via 'require'
-
-sub run {
-    App::BCVI->base_init();
-
-    App::BCVI->load_plugins();
-
-    App::BCVI->base_class()->process_command_line(@_);
-
-    exit;
-}
-
-sub version      { return $App::BCVI::VERSION; }
-sub base_class   { return $class_map{base};    }
-sub client_class { return $class_map{client};  }
-sub server_class { return $class_map{server};  }
-sub pod_class    { return $class_map{pod};     }
-sub map_class    { $class_map{$_[1]} = $_[2];  }
-sub sock         { shift->{sock};              }
-
-sub installable_files { return @installables;     }
-sub message_from_code { $response_message{$_[1]}; }
-
-sub base_init {
-    my($class) = @_;
-
-    $class->register_option(
-        name        => 'help',
-        alias       => '?',
-        dispatch_to => 'show_help',
-        summary     => 'detailed help message',
-        description => <<'END_POD'
-Display this documentation.
-END_POD
-    );
-
-    $class->register_option(
-        name        => 'add-aliases',
-        dispatch_to => 'add_aliases',
-        summary     => 'install bcvi into shell startup files',
-        description => <<'END_POD'
-Edit the bash startup script to add (or update) the required command aliases
-for bcvi.
-END_POD
-    );
-
-    $class->register_option(
-        name        => 'listener',
-        alias       => 'l',
-        dispatch_to => 'start_listener',
-        summary     => 'start in listener mode',
-        description => <<'END_POD'
-Start a background listener process.  Also generates a new authentication key.
-END_POD
-    );
-
-    $class->register_option(
-        name        => 'install',
-        arg_name    => '<hosts>',
-        dispatch_to => 'install_to_hosts',
-        summary     => 'copy bcvi to named hosts and install aliases',
-        description => <<'END_POD'
-Copy the C<bcvi> script to the C<$HOME/bin> directory on the specified host
-and then remotely invoke it with the C<--add-aliases> option.
-END_POD
-    );
-
-    $class->register_option(
-        name        => 'unpack-term',
-        dispatch_to => 'unpack_term',
-        summary     => 'unpack the overloaded TERM variable',
-        description => <<'END_POD'
-This option is intended for use from a F<.profile> script.  It outputs a
-snippet of shell script to be passed to C<eval> in the calling shell.
-END_POD
-    );
-
-    $class->register_option(
-        name        => 'wrap-ssh',
-        alias       => 's',
-        dispatch_to => 'wrap_ssh',
-        summary     => 'pass all args after -- to ssh',
-        description => <<'END_POD'
-A wrapper around invoking ssh to connect to a specified host.  Ensures the
-environment is set up to pass the authentication key and other data to the
-C<bcvi> client on the remote server.
-END_POD
-    );
-
-    $class->register_option(
-        name        => 'version',
-        alias       => 'v',
-        dispatch_to => 'show_versions',
-        summary     => 'display bcvi version number',
-        description => <<'END_POD'
-When invoking a command use this option to indicate that the arguments are not
-filenames and the translation of relative pathnames to absolute should be
-skipped.
-END_POD
-    );
-
-    $class->register_option(
-        name        => 'no-path-xlate',
-        alias       => 'n',
-        summary     => 'skip translation of args from relative to absolute',
-        description => <<'END_POD'
-Displays the version number of the bcvi client and if applicable, of the
-listener process.
-END_POD
-    );
-
-    $class->register_option(
-        name        => 'port',
-        alias       => 'p',
-        arg_spec    => '=i',
-        arg_name    => '<port>',
-        summary     => 'port number for listener/port-forward',
-        description => <<'END_POD'
-When used with C<--listener>, this is the port the server process will listen
-on.  When used with C<--wrap-ssh> this is the port number on the remote machine
-that will be forwarded back to the listener process.  The default in both cases
-is calculated using the user's numeric UID multiplied by 10 and added to 9.
-The intent is to reduce the chance of collisions with other bcvi users.
-END_POD
-    );
-
-    $class->register_option(
-        name        => 'command',
-        alias       => 'c',
-        arg_spec    => '=s',
-        arg_name    => '<cmnd>',
-        summary     => 'command to send over back-channel',
-        description => <<'END_POD'
-Use C<cmnd> as the command to send over the back-channel (default: vi).
-Recognised commands are described in L<COMMANDS> below.
-END_POD
-    );
-
-    $class->register_option(
-        name        => 'reuse-auth',
-        summary     => "don't generate a new auth key on listener startup",
-        description => <<'END_POD'
-A new (random) authorisation key is generated when the listener process is
-started - this will invalidate the keys in use by existing SSH sessions.
-This option is for use when it is necessary to restart the listener process
-without invalidating client keys.
-END_POD
-    );
-
-    $class->register_option(
-        name        => 'plugin-help',
-        arg_spec    => '=s',
-        arg_name    => '<plugin>',
-        dispatch_to => 'plugin_help',
-        summary     => "display documentation for <plugin>",
-        description => <<'END_POD'
-The --help output includes a list of installed plugins.  Use this option to
-read the documentation for a named plugin.
-END_POD
-    );
-
-
-    $class->register_command(
-        name        => 'vi',
-        description => <<'END_POD'
-Invokes C<gvim> on the remote file - after translating the host+path to
-an scp URI.  This is the default command if no C<--command> option is
-specified.  If multiple filenames are supplied, the first will be opened
-in gvim and you should use C<:n> to load the 'next' file.
-END_POD
-    );
-
-    $class->register_command(
-        name        => 'viwait',
-        description => <<'END_POD'
-This command works exactly the same as C<vi> above, except it waits for the
-editor process to exit before bcvi exits on the remote machine.  This is
-primarily for use with C<sudoedit>.  Note: when used with C<sudoedit>, the file
-will not be updated on the remote machine until you exit the editor on your
-workstation.
-END_POD
-    );
-
-    $class->register_command(
-        name        => 'scpd',
-        description => <<'END_POD'
-Uses C<scp> to copy the specified files or directories to the calling user's
-F<~/Desktop>.`
-END_POD
-    );
-
-
-    $class->add_home_bin();
-    $class->register_aliases(
-        'test -n "$(which bcvi)" && eval "$(bcvi --unpack-term)"',
-        'test -n "${BCVI_CONF}"  && alias vi="bcvi"',
-        'test -n "${BCVI_CONF}"  && alias suvi="EDITOR=\'bcvi -c viwait\' sudoedit"',
-        'test -n "${BCVI_CONF}"  && alias bcp="bcvi -c scpd"',
-    );
-
-    $class->pod_class->init();
-
-}
-
-
-sub register_option {
-    my $class = shift;
-    my $opt   = { @_ };
-    my $key   = $opt->{name};
-
-    if(!defined $key or !length $key) {
-        die "Can't register option without 'name'";
-    }
-
-    my($package, $filename, $line) = caller();
-    $opt->{provider} = "$package at $filename line $line";
-    my $taken = $options{$key};
-    if($taken && !$opt->{force_override}) {
-        warn "option '--$key' already registered by $taken->{provider}\n";
-    }
-    if($opt->{alias}) {
-        foreach my $a (map { s/^-+//; $_ } split /\|/, $opt->{alias}) {
-            if($option_name{$a} && !$opt->{force_override}) {
-                if($taken = $options{$option_name{$a}}) {
-                    warn "alias '$a' already registered for option "
-                       . "'--$taken->{name}' by $taken->{provider}\n";
-                }
-            }
-            $option_name{$a} = $key;
-        }
-    }
-    $options{$key} = $opt;
-}
-
-
-sub register_command {
-    my $class = shift;
-    my $cmd   = { @_ };
-    my $key   = $cmd->{name};
-
-    if(!defined $key or !length $key) {
-        die "Can't register command without 'name'";
-    }
-
-    $cmd->{dispatch_to} ||= "execute_$key";
-
-    my($package, $filename, $line) = caller();
-    $cmd->{provider} = "$package at $filename line $line";
-    warn "option '$key' already registered by $commands{$key}->{provider}\n"
-        if $commands{$key} && !$cmd->{force_override};
-    $commands{$key} = $cmd;
-}
-
-
-sub each_option {
-    my($class, $sub) = @_;
-
-    $sub->($options{$_}) foreach sort keys %options;
-}
-
-
-sub each_command {
-    my($class, $sub) = @_;
-
-    $sub->($commands{$_}) foreach sort keys %commands;
-}
-
-
-sub command_handler {
-    my($class, $name) = @_;
-
-    return unless defined $name;
-    return "execute_commands_pod" if $name eq 'commands_pod';
-    my $spec = $commands{$name} or return;
-    return $spec->{dispatch_to};
-}
-
-
-sub add_home_bin {
-    my $class = shift;
-    my $home_bin = $class->home_directory . '/bin';
-    $class->register_aliases(
-        qq{echo \$PATH | grep -q $home_bin || PATH="$home_bin/\$PATH"},
-    );
-}
-
-
-sub register_aliases {
-    my $class = shift;
-    push @aliases, @_;
-}
-
-
-sub register_installable {
-    my $class = shift;
-    my($package, $filename, $line) = caller();
-    push @installables, $filename;
-}
-
-
-sub shell_aliases {
-    my($self) = @_;
-
-    return
-        "## START-BCVI\n"
-        . join("\n", map { "  $_" } @aliases)
-        . "\n## END-BCVI\n";
-}
-
-
-sub load_plugins {
-    my($class) = @_;
-
-    my $dir = $class->conf_directory();
-    foreach my $file (sort glob("$dir/*.pm")) {
-        $class->load_plugin_file($file);
-    }
-}
-
-
-sub load_plugin_file {
-    my($class, $file) = @_;
-
-    my @parts = File::Spec->splitdir($file);
-    my $key = pop @parts;
-    return if $plugin_loaded{$key};
-
-    eval { require $file; };
-    if($@) {
-        die qq{Error loading plugin "$file"\n$@\n}
-    }
-
-    $plugin_loaded{$key} = $file;
-}
-
-
-sub hook_client_class {
-    my($class) = @_;
-
-    my($calling_class, $calling_file) = caller();
-    my $client_class = $class->client_class();
-    $class->map_class(client => $calling_class);
-
-    no strict 'refs';
-    unshift @{"${calling_class}::ISA"}, $client_class;
-    push @plugins, { class => $calling_class, file => $calling_file };
-    return 1;
-}
-
-
-sub hook_server_class {
-    my($class) = @_;
-
-    my($calling_class, $calling_file) = caller();
-    my $server_class = $class->server_class();
-    $class->map_class(server => $calling_class);
-
-    no strict 'refs';
-    unshift @{"${calling_class}::ISA"}, $server_class;
-    push @plugins, { class => $calling_class, file => $calling_file };
-    return 1;
-}
-
-
-sub process_command_line {
-    my($class, @args) = @_;
-
-    my $opt = $class->option_defaults();
-    my @cfg = $class->getopt_config();
-
-    local(@ARGV) = @args;
-    Getopt::Long::GetOptions($opt, @cfg) or $class->die_synopsis();
-
-    my $handler = $opt->{listener}
-                ? $class->server_class
-                : $class->client_class;
-
-    $handler->new(_options => $opt)->dispatch(@ARGV);
-}
-
-
-sub option_defaults {
-    return { };
-}
-
-
-sub getopt_config {
-    my($class) = @_;
-
-    my @spec;
-    $class->each_option(sub {
-        my($o) = @_;
-        my $def = $o->{name};
-        $def .= "|$o->{alias}" if defined $o->{alias};
-        $def .= $o->{arg_spec} if defined $o->{arg_spec};
-        push @spec, $def;
-    });
-    return @spec
-}
-
-
-sub die_synopsis {
-    my($class, $message) = @_;
-
-    warn "$message\n" if $message;
-    $class->pod_class->synopsis();
-    exit(1);
-}
-
-
-sub new {
-    my $class = shift;
-
-    return bless { @_ }, $class;
-}
-
-
-sub dispatch {
-    my($self, @args) = @_;
-
-    if(my $method = $self->dispatch_option) {
-        $self->$method(@args);
-        exit;
-    }
-    elsif(!$self->opt('command') and !@args) {
-        $self->die_synopsis();
-    }
-
-    $self->send_command(@args);
-}
-
-
-sub opt {
-    my($self, $key) = @_;
-
-    return $self->{_options}->{$key};
-}
-
-
-sub set_opt {
-    my($self, $key, $value) = @_;
-
-    return $self->{_options}->{$key} = $value;
-}
-
-
-sub dispatch_option {
-    my($self) = @_;
-
-    my @set;
-    $self->each_option(sub {
-        my($o) = @_;
-        push @set, $o if $o->{dispatch_to} && defined $self->opt($o->{name});
-    });
-    return unless @set;
-    if(@set > 1) {
-        @set = map { "--$_->{name}" } @set;
-        my $last = pop @set;
-        $self->die_synopsis(
-            "Which did you want: " . join(', ', @set) . " or $last?"
-        );
-    }
-    return $set[0]->{dispatch_to};
-}
-
-
-sub default_port {
-    return( ($< * 10 + 9) % 65536 );
-}
-
-
-sub listen_address {
-    return 'localhost';
-};
-
-
-sub default_command {
-    return 'vi';
-}
-
-
-sub read_file {
-    my($self, $path) = @_;
-
-    return unless -e $path;
-    return if -d $path;
-    my $data = do {
-        open my $fh, '<', $path or die "open($path): $!\n";
-        local($/) = undef;
-        <$fh>;
-    };
-    return $data;
-}
-
-
-sub home_directory {
-    return (getpwuid($>))[7];
-}
-
-
-sub conf_directory {
-    my($self) = @_;
-
-    my $conf_dir = File::Spec->catdir($self->home_directory(), '.config', 'bcvi');
-    File::Path::mkpath($conf_dir) unless -d $conf_dir;
-    return $conf_dir;
-}
-
-
-sub auth_key_filename {
-    return File::Spec->catfile(shift->conf_directory(), 'listener_key');
-}
-
-
-sub listener_port_filename {
-    return File::Spec->catfile(shift->conf_directory(), 'listener_port');
-}
-
-
-sub get_listener_auth_key {
-    my($self) = @_;
-
-    my $auth_file = $self->auth_key_filename();
-    my $auth_key = $self->read_file($auth_file)
-        or die "Auth key file does not exist: $auth_file";
-    chomp($auth_key);
-    return $auth_key;
-}
-
-
-sub list_plugins {
-    my($self) = @_;
-
-    my @plugins;
-    foreach my $name (sort keys %plugin_loaded) {
-        my $path = $plugin_loaded{$name};
-        $name =~ s{[.]pm$}{};
-        if(my $title = $self->pod_class->extract_title($path)) {
-            push @plugins, "$name - $title";
-        }
-        else {
-            push @plugins, "$name - no documentation";
-        }
-    }
-    return @plugins;
-}
-
-
-sub plugin_help {
-    my($self) = @_;
-
-    my $plugin = $self->opt('plugin-help');
-    if(my $path = $plugin_loaded{"${plugin}.pm"}) {
-        $self->pod_class->show_plugin_help($path);
-    }
-    else {
-        die "Can't find plugin: '$plugin'\n";
-    }
-}
-
-
-##############################################################################
-# The App::BCVI::Client class implements the command-line UI and the client
-# side of the BCVI protocol.  You can use inheritance to customise the
-# behaviour of this class.
-##############################################################################
-
-package App::BCVI::Client;
-BEGIN {
-  $App::BCVI::Client::VERSION = '3.05';
-}
-
-BEGIN { @App::BCVI::Client::ISA = qw( App::BCVI ); }
-
-
-sub get_connection_details {
-    my($self) = @_;
-
-    if(not $ENV{BCVI_CONF}) {
-        die "The \$BCVI_CONF environment variable has not been set\n";
-    }
-    my($alias, $gateway, $port, $auth_key) = split(/:/, $ENV{BCVI_CONF});
-    $self->{host_alias}      = $alias;
-    $self->{gateway_address} = $gateway;
-    $self->{port}            = $port;
-    $self->{auth_key}        = $auth_key;
-}
-
-
-sub host_alias       { return shift->{host_alias};       }
-sub gateway_address  { return shift->{gateway_address};  }
-sub port             { return shift->{port};             }
-sub auth_key         { return shift->{auth_key};         }
-sub server_version   { return shift->{server_version};   }
-sub response_code    { return shift->{response_code};    }
-sub response_message { return shift->{response_message}; }
-sub response         { return shift->{response};         }
-
-
-sub send_command {
-    my($self, @files) = @_;
-
-    my $command = $self->opt('command') || $self->default_command();
-
-    my $sock = $self->connect_to_listener();
-
-    $sock->write(
-        "Auth-Key: "   . $self->auth_key   . $LF .
-        "Host-Alias: " . $self->host_alias . $LF .
-        "Command: "    . $command          . $LF
-    ) or die "Error sending command through backchannel: $!";
-
-    $self->send_body(\@files);
-    return if $self->check_response() =~ /^(?:200|300)$/;
-    die $self->response_message . "\n";
-}
-
-
-sub send_body {
-    my($self, $files) = @_;
-
-    my $translate_paths = ! $self->opt('no-path-xlate');
-
-    my $body = join '', map {
-        $_ = File::Spec->rel2abs($_) if $translate_paths;
-        "$_$LF";
-    } @$files;
-
-    $self->sock->write(
-        'Content-Length: ' . length($body) . $LF .
-        $LF .
-        $body
-    ) or die "Error sending command through backchannel: $!";
-}
-
-
-sub check_response {
-    my($self) = @_;
-
-    my $response = $self->sock->getline() or die "Server hung up\n";
-    if(my($code, $message) = $response =~ m{^(\d\d\d) (.*)$}) {
-        ($self->{response_code}, $self->{response_message}) = ($code, $message);
-        $self->read_response() if $code eq '300';
-        return $code;
-    }
-    die "Unexpected response: '$response'\n";
-}
-
-
-sub read_response {
-    my($self) = @_;
-
-    my $sock = $self->sock();
-    my $resp = {};
-    while(my($line) = $sock->getline() || '') {
-        chomp($line);
-        last if $line eq '';
-        $line = Encode::decode('utf8', $line);
-        if(my($name, $value) = $line =~ m{^(\S+)\s*:\s*(.*)$}) {
-            $name =~ s/-/_/;
-            $resp->{lc($name)} = $value;
-        }
-    }
-    $self->{response} = $resp;
-
-    my $bytes = $resp->{content_length} || return;;
-
-    my $buf = '';
-    while(my $count = $sock->read($buf, $bytes, length($buf))) {
-        $bytes -= $count;
-        last if $bytes < 1;
-    }
-    $resp->{body} = $buf;
-}
-
-
-sub connect_to_listener {
-    my($self) = @_;
-
-    $self->get_connection_details();
-
-    my $peer = $self->gateway_address . ':' . $self->port;
-    my $sock = IO::Socket::INET->new(
-        PeerAddr => $peer,
-    ) or die "Can't connect to '$peer': $!\n";
-
-    binmode($sock);
-    my $welcome = $sock->getline() or die "No listener?\n";
-    if($welcome =~ /^100 Ready \(([^)]+)\)/) {
-        $self->{server_version} = $1;
-    }
-    $self->{sock} = $sock;
-}
-
-
-sub show_versions {
-    my($self) = @_;
-
-    print "bcvi client: $App::BCVI::VERSION\n";
-
-    if($ENV{BCVI_CONF}) {
-        $self->connect_to_listener();
-        print "bcvi server: $App::BCVI::VERSION\n";
-    }
-}
-
-
-sub show_help {
-    my($self) = @_;
-
-    $self->pod_class->full_pod($self);
-}
-
-
-sub commands_pod {
-    my($self) = @_;
-
-    eval {
-        $self->set_opt(command => 'commands_pod');
-        $self->send_command();
-    };
-    if($@) {
-        $@ = '';
-        return;
-    }
-    return $self->response->{body};
-}
-
-
-sub wrap_ssh {
-    my($self, @args_in) = @_;
-
-    if(my($target, @args_out) = $self->parse_ssh_args(@args_in)) {
-        $self->execute_wrapped_ssh($target, @args_out);
-    }
-    else {
-        warn "bcvi: unable to extract hostname from ssh command line\n";
-        $self->execute_ssh(@args_in);
-    }
-}
-
-
-sub parse_ssh_args {
-    my($self, @args_in) = @_;
-
-    my %need_arg = map { $_ => 1} split //, 'bcDeFiLlmOopRS';
-
-    my(@args_out, @hosts, $user);
-    while(@args_in) {
-        $_ = shift @args_in;
-        if(/^-l(.*)$/) {             # extract username if specified with -l
-            $user = $1 ? $1 : $args_in[0];
-        }
-        if(/^-(.)(.*)$/) {
-            push @args_out, $_;
-            push @args_out, shift @args_in
-                if $need_arg{$1} && !length($2) && @args_in;
-        }
-        else {
-            push @args_out, $_;
-            push @hosts,    $_;
-        }
-    }
-    return unless @hosts == 1;
-    my($target) = @hosts;
-    if($user and $target !~ /@/) {
-        $target = $user . '@' . $target;
-    }
-    return($target, @args_out);
-}
-
-
-sub execute_wrapped_ssh {
-    my($self, $target, @args) = @_;
-
-    my $remote_port = $self->opt('port') || $self->default_port();
-    my $local_port  = $self->listener_port();
-    $ENV{TERM} = "$ENV{TERM}\n"
-                 . "BCVI_CONF=${target}:localhost:$remote_port:"
-                 . $self->get_listener_auth_key();
-    unshift @args, "-R $remote_port:localhost:$local_port";
-    $self->execute_ssh(@args);
-}
-
-
-sub execute_ssh {
-    my($self, @args) = @_;
-
-    system 'ssh', @args;
-}
-
-
-sub listener_port {
-    my($self) = @_;
-
-    my $port = $self->read_file($self->listener_port_filename())
-        or return $self->default_port();
-    chomp($port);
-    return $port;
-}
-
-
-sub unpack_term {
-    my($self) = @_;
-
-    my @parts = split /\x0D?\x0A/, $ENV{TERM} || '';
-    return unless @parts > 1;
-    print "TERM=$parts[0]\n";
-    shift @parts;
-    foreach (@parts) {
-        print if s{^(\w+)=(.*)$}{export $1="$2"\n};
-    }
-}
-
-
-sub install_to_hosts {
-    my($self, @args) = @_;
-
-    die "You must list one or more target hostnames\n" unless @args;
-
-    $self->install_to_host($_) foreach @args;
-}
-
-
-sub install_to_host {
-    my($self, $host) = @_;
-
-    $self->install_bin_directory($host);
-    $self->install_bcvi_script($host);
-    $self->install_plugins($host);
-    $self->install_remote_aliases($host);
-}
-
-
-sub install_bin_directory {
-    my($self, $host) = @_;
-
-    if(system("ssh $host test -d ./bin") != 0) {
-        print "Creating ~/bin directory on $host\n";
-        system("ssh $host mkdir ./bin") == 0
-            or die "** mkdir failed on $host";
-    }
-}
-
-
-sub install_bcvi_script {
-    my($self, $host) = @_;
-
-    print "Copying bcvi to remote bin directory on $host\n";
-    my $output = `scp $0 $host:bin/bcvi 2>&1`;
-    if($? != 0) {
-        die "** failed to copy bcvi to remote bin directory on $host\n"
-            . $output;
-    }
-}
-
-
-sub install_plugins {
-    my($self, $host) = @_;
-
-    return unless @installables;
-    if(system("ssh $host test -d ./.config/bcvi") != 0) {
-        print "Creating plugins directory on $host\n";
-        system("ssh $host mkdir -p ./.config/bcvi") == 0
-            or die "** mkdir failed on $host";
-    }
-    print "Copying plugin files to $host\n";
-    my $output = `scp @installables $host:.config/bcvi 2>&1`;
-    if($? != 0) {
-        die "** failed to copy bcvi to remote plugins directory on $host\n"
-            . $output;
-    }
-}
-
-
-sub install_remote_aliases {
-    my($self, $host) = @_;
-
-    system("ssh $host bin/bcvi --add-aliases") == 0
-        or die "** failed to install aliases on $host";
-}
-
-
-sub add_aliases {
-    my($self) = @_;
-
-    my $bcvi_commands = $self->shell_aliases();
-
-    $self->update_existing_aliases($bcvi_commands)
-    or $self->aliases_initial_install($bcvi_commands);
-}
-
-
-sub update_existing_aliases {
-    my($self, $bcvi_commands) = @_;
-
-    foreach my $file ( $self->candidate_rc_files() ) {
-        my($script) = $self->read_file($file) or next;
-        if(index($script, $bcvi_commands) > -1) {
-            print "Found bcvi commands in $file\n";
-            return 1;
-        }
-        if($script =~ s{^## START-BCVI.*^## END-BCVI\r?\n}{$bcvi_commands}sm) {
-            open my $fh, '>', $file or die "open($file): $!";
-            print $fh $script;
-            close($fh);
-            print "Updated bcvi commands in $file\n";
-            return 1;
-        }
-        if($script =~ m{^[^#]*\bbcvi\b}m) {
-            print "Adhoc bcvi commands found in $file\n"
-                  . "*** Manual update may be required.            ***\n"
-                  . "*** Consider deleting commands and re-adding. ***\n";
-            return 1;
-        }
-    }
-    return;   # No existing aliases found
-}
-
-
-sub aliases_initial_install {
-    my($self, $bcvi_commands) = @_;
-
-    my $target = $self->preferred_rc_file();
-
-    open my $fh, '>>', $target or die "open(>>$target): $!";
-    print $fh "\n$bcvi_commands\n";
-    close($fh);
-    print "Added bcvi commands to $target\n";
-}
-
-
-sub candidate_rc_files {
-    my($self) = @_;
-    my $home = $self->home_directory();
-    return(
-        "$home/.bashrc_local",
-        "$home/.bashrc",
-        "$home/.bash_profile_local",
-        "$home/.bash_profile",
-        "$home/.profile",
-        "$home/.common-configs/bashrc",
-    );
-}
-
-
-sub preferred_rc_file {
-    my($self) = @_;
-
-    # Add to .bashrc_local if it is referenced from .bashrc
-
-    my $home = $self->home_directory();
-    my $bashrc       = "$home/.bashrc";
-    my $bashrc_local = "$home/.bashrc_local";
-
-    my $script = $self->read_file($bashrc) || '';
-
-    return $script =~ m{/[.]bashrc_local\b}
-           ? $bashrc_local
-           : $bashrc;
-}
-
-
-##############################################################################
-# The App::BCVI::Server class implements the server ('listener') side of the
-# BCVI protocol.  You can use inheritance to customise the behaviour of this
-# class.
-##############################################################################
-
-package App::BCVI::Server;
-BEGIN {
-  $App::BCVI::Server::VERSION = '3.05';
-}
-
-BEGIN { @App::BCVI::Server::ISA = qw( App::BCVI ); }
-
-use Digest::MD5  qw(md5_hex);
-use Errno        qw();
-
-
-sub start_listener {
-    my($self) = @_;
-
-    $self->kill_current_listener();
-    $self->save_pid();
-    $self->generate_auth_key();
-    $self->create_listener_socket();
-    $self->accept_loop();
-    die "bcvi listener accept loop terminated unexpectedly\n";
-}
-
-
-sub auth_key     { shift->{auth_key}; }
-sub client_sock  { shift->{client};   }
-sub request      { shift->{request};  }
-sub calling_host { shift->{request}->{host_alias};  }
-
-
-sub kill_current_listener {
-    my($self) = @_;
-
-    my($pid) = $self->read_file($self->pid_file) or return;
-    foreach my $i (1..5) {
-        if(kill 0, $pid) {
-            kill($i > 2 ? 9 : 1, $pid);
-        }
-        elsif($!{ESRCH}) {   # no such process
-            return;
-        }
-        elsif($!{EPERM}) {   # pid file was probably stale
-            return;
-        }
-        sleep 1;
-    }
-}
-
-
-sub save_pid {
-    my($self) = @_;
-
-    my $pid_file = $self->pid_file;
-    open my $fh, '>', $pid_file or die "open(>$pid_file): $!";
-    print $fh "$$\n";
-}
-
-
-sub save_port {
-    my($self, $port) = @_;
-
-    my $port_file = $self->listener_port_filename;
-    open my $fh, '>', $port_file or die "open(>$port_file): $!";
-    print $fh "$port\n";
-}
-
-
-sub pid_file {
-    return File::Spec->catfile(shift->conf_directory(), 'listener_pid');
-}
-
-
-sub generate_auth_key {
-    my($self) = @_;
-
-    if($self->opt('reuse-auth')) {
-        $self->{auth_key} = $self->get_listener_auth_key();
-        return;
-    }
-
-    my $data = "$self" . $$ . time() . rand();
-    $self->{auth_key} = md5_hex($data);
-
-    my $auth_file = $self->auth_key_filename();
-    open my $fh, '>', $auth_file or die "open(>$auth_file): $!";
-    print $fh $self->{auth_key}, "\n";
-}
-
-
-sub create_listener_socket {
-    my($self) = @_;
-
-    my $port = $self->opt('port') || $self->default_port();
-    $self->save_port($port);
-    my $local_addr = $self->listen_address . ':' .  $port;
-    $self->{sock} = IO::Socket::INET->new(
-        LocalAddr => $local_addr,
-        ReuseAddr => 1,
-        Proto     => 'tcp',
-        Listen    => 5,
-        Blocking  => 1,
-    ) or die "Error creating listener for port '$local_addr': $!";
-}
-
-
-sub accept_loop {
-    my($self) = @_;
-
-    $SIG{CHLD} = 'IGNORE';  # let Perl reap the zombies
-
-    my $sock = $self->sock();
-    while(1) {
-        my $new = $sock->accept();
-        next if $!{EINTR};
-        if(fork()) {  # In parent
-            close $new;
-        }
-        else {        # In child
-            close $sock;
-            $self->{sock} = $new;
-            $self->dispatch_request();
-            exit(0);
-        }
-    }
-}
-
-
-sub dispatch_request {
-    my($self) = @_;
-
-    $self->send_response(100);
-    my $req = $self->collect_headers();
-    $self->validate_auth_key($req->{auth_key})
-        or $self->exit_response(900);
-    my $method = $self->command_handler($req->{command})
-        or $self->exit_response(910);
-    $self->$method();
-    $self->send_response(200);
-}
-
-
-sub validate_auth_key {
-    my($self, $key) = @_;
-
-    return 1 if $key && $key eq $self->auth_key;
-    my $alias = $self->calling_host();
-    warn "Invalid Auth-Key in request from $alias\n" if -t 2;
-    return;
-}
-
-
-sub send_response {
-    my($self, $code) = @_;
-
-    my $message = $self->message_from_code($code) || 'Invalid response code';
-    $message = Encode::encode('utf8', $message);
-    $self->sock->write(qq{$code $message\x0A});
-}
-
-
-sub exit_response {
-    my($self, $code) = @_;
-
-    $self->send_response($code);
-    exit(0);
-}
-
-
-sub collect_headers {
-    my($self) = @_;
-
-    my $sock = $self->sock();
-    my $req  = {};
-    while(my($line) = $sock->getline() || '') {
-        chomp($line);
-        last if $line eq '';
-        $line = Encode::decode('utf8', $line);
-        if(my($name, $value) = $line =~ m{^(\S+)\s*:\s*(.*)$}) {
-            $name =~ s/-/_/;
-            $req->{lc($name)} = $value;
-        }
-    }
-    $self->{request} = $req;
-}
-
-
-sub read_request_body {
-    my($self) = @_;
-
-    my $bytes = $self->request->{content_length};
-    my $sock  = $self->sock();
-    my $buf   = '';
-    while(my $count = $sock->read($buf, $bytes, length($buf))) {
-        $bytes -= $count;
-        last if $bytes < 1;
-    }
-    return $buf;
-}
-
-
-sub get_filenames {
-    my($self) = @_;
-
-    return split /\x0a/, Encode::decode('utf8', $self->read_request_body());
-}
-
-
-sub execute_commands_pod {
-    my($self) = @_;
-
-    $self->send_response(300);
-    my $pod = $self->pod_class->command_detail();
-    $pod = Encode::encode('utf8', $pod);
-    $self->sock->write(
-        'Content-Type: text/pod'          . $LF .
-        'Content-Length: ' . length($pod) . $LF .
-        $LF .
-        $pod
-    ) or die "Error sending response body: $!";
-}
-
-
-sub execute_vi {
-    my($self) = @_;
-
-    my $alias = $self->calling_host();
-    my @files = map { "scp://$alias/$_" } $self->get_filenames();
-    system('mvim', '--', @files);
-}
-
-
-sub execute_viwait {
-    my($self) = @_;
-
-    my $alias = $self->calling_host();
-    my @files = map { "scp://$alias/$_" } $self->get_filenames();
-    system('mvim', '-f', '--', @files);
-}
-
-
-sub execute_scpd {
-    my($self) = @_;
-
-    my $dest = File::Spec->catdir($self->home_directory(), 'Desktop');
-
-    my $alias = $self->calling_host();
-    my @files = map { "$alias:$_" } $self->get_filenames();
-
-    system('scp', '-q', '-r', '--', @files, $dest);
-}
-
-
-##############################################################################
-# The App::BCVI::POD class implements POD extraction and formatting on
-# platforms where POD::Text is available.
-##############################################################################
-
-package App::BCVI::POD;
-BEGIN {
-  $App::BCVI::POD::VERSION = '3.05';
-}
-
-use Pod::Text;
-
-my $pod_skeleton;
-
-
-sub init {
-    my($class) = @_;
-
-    $pod_skeleton = do {
-        local($/) = undef;
-        <DATA>;
-    };
-    close(DATA);
-}
-
-
-sub full_pod {
-    my($class, $app) = @_;
-
-    my $commands_pod;
-    if($app && $app->can('commands_pod')) {
-        $commands_pod = $app->commands_pod();
-    }
-    $commands_pod ||= $class->command_detail();
-    my $plugins_pod = $class->plugins_pod($app);
-
-    my $pager = $class->pager();
-    my $pod   = $pod_skeleton;
-    $pod =~ s{^=for BCVI_OPTIONS_SUMMARY\s*\n}{ $class->option_summary()}me;
-    $pod =~ s{^=for BCVI_OPTIONS\s*\n}{ $class->option_detail() }me;
-    $pod =~ s{^=for BCVI_COMMANDS\s*\n}{ $commands_pod }me;
-    $pod =~ s{^=for BCVI_PLUGINS\s*\n}{ $plugins_pod }me;
-    if(Pod::Text->isa('Pod::Simple')) {
-        my $parser = Pod::Text->new (sentence => 1, width => 78);
-        $parser->output_fh($pager);
-        $parser->parse_string_document($pod);
-    }
-    else {
-        open my $pod_fh, '<', \$pod or die "open(\$pod): $!";
-        my $parser = Pod::Text->new (sentence => 1, width => 78);
-        $parser->parse_from_filehandle($pod_fh, $pager);
-    }
-}
-
-
-sub synopsis {
-    my($class) = @_;
-
-    my $pod = $pod_skeleton;
-    $pod =~ s{\A.*?^=head1 SYNOPSIS\s*?\n}{Usage:}ms;
-    $pod =~ s{^=.*\z}{}ms;
-    $pod .= $class->option_summary();
-
-    print $pod;
-}
-
-
-sub option_summary {
-    my($class) = @_;
-
-    my $w = 12;
-    my @lines;
-    App::BCVI->base_class->each_option(sub {
-        my($o)    = @_;
-        my $short = "--$o->{name}";
-        $short    .= "|-$o->{alias}"   if $o->{alias};
-        $short    .= " $o->{arg_name}" if $o->{arg_name};
-        push @lines, [ $short, $o->{summary} ];
-        $w = length($short) if length($short) > $w;
-    });
-
-    return join('', map { sprintf("  %-*s  %s\n", $w, @$_) } @lines) . "\n";
-}
-
-
-sub option_detail {
-    my($class) = @_;
-
-    my @lines = "=over 4\n";
-    App::BCVI->base_class->each_option(sub {
-        my($o)  = @_;
-        my $pod = "\n=item B<--$o->{name}>";
-        $pod .= " (alias: -$o->{alias})" if $o->{alias};
-        $pod .= " $o->{arg_name}"        if $o->{arg_name};
-        $pod .= "\n\n$o->{description}\n";
-        push @lines, $pod;
-    });
-    push @lines, "\n=back\n\n";
-
-    return join '', @lines;
-}
-
-
-sub command_detail {
-    my($class) = @_;
-
-    my @lines = "=over 4\n";
-    App::BCVI->base_class->each_command(sub {
-        my($c)  = @_;
-        my $pod = "\n=item B<$c->{name}>";
-        $pod .= "\n\n$c->{description}\n";
-        push @lines, $pod;
-    });
-    push @lines, "\n=back\n\n";
-
-    return join '', @lines;
-}
-
-
-sub plugins_pod {
-    my($class, $app) = @_;
-
-    if(my @plugin_list = $app->list_plugins()) {
-        my $s = @plugin_list == 1 ? '' : 's';
-        return join("\n\n",
-            "You have the following plugin$s installed:",
-            @plugin_list,
-            "Use C<< bcvi --plugin-help plugin-name >> for detailed info.",
-        ) . "\n\n";
-    }
-
-    return "You have no plugins installed.\n\n";
-}
-
-
-sub extract_title {
-    my($class, $path) = @_;
-
-    open my $fh, '<', $path or return;
-    my $name_section = 0;
-    while(<$fh>) {
-        chomp;
-        if(/^=head1\s+NAME$/) {
-            $name_section++;
-        }
-        elsif($name_section  and  /\S/) {
-            s{^.+?\s-\s}{};
-            return $_;
-        }
-    }
-    return;
-}
-
-
-sub show_plugin_help {
-    my($class, $path) = @_;
-
-    my $pager = $class->pager();
-    if(Pod::Text->isa('Pod::Simple')) {
-        my $parser = Pod::Text->new (sentence => 1, width => 78);
-        $parser->output_fh($pager);
-        $parser->parse_file($path);
-    }
-    else {
-        open my $pod_fh, '<', $path or die "open($path): $!";
-        my $parser = Pod::Text->new (sentence => 1, width => 78);
-        $parser->parse_from_filehandle($pod_fh, $pager);
-    }
-}
-
-
-sub pager {
-    my @commands = $ENV{PAGER} ? ( $ENV{PAGER} ) : qw(pager less more);
-    foreach my $file (@commands) {
-        foreach my $dir ( File::Spec->path() ) {
-            my $exe_path = File::Spec->catfile($dir, $file);
-            if(-x $exe_path) {
-                open my $fh, '|-', $exe_path or next;
-                return $fh;
-            }
-        }
-    }
-    return \*STDOUT;
-}
-
-
-1;
-
-__DATA__
-
-=head1 NAME
-
-bcvi - Back-channel vi, a shell utility to proxy commands back over ssh
-
-=head1 SYNOPSIS
-
-  bcvi [options] [<files>]
-
-  Options:
-
-=for BCVI_OPTIONS_SUMMARY
-
-=head1 DESCRIPTION
-
-This utility works with SSH to allow commands issued on the SSH server host to
-be 'proxied' back to the SSH client host.  For example:
-
-=over 4
-
-=item *
-
-user F<sally> establishes an SSH connection from her workstation to a server
-named F<pluto> and runs the command C<bcvi .bashrc>
-
-=item *
-
-bcvi tunnels the details back to sally's workstation which then invokes the
-command C<gvim scp://pluto//home/sally/.bashrc>
-
-=item *
-
-the result is that sally gets a responsive GUI editor running on her local
-machine, but editing a file on the remote machine
-
-=back
-
-See C<< perldoc App::BCVI >> for more examples and background information.
-
-=head1 OPTIONS
-
-=for BCVI_OPTIONS
-
-=head1 COMMANDS
-
-The following commands can be passed back to the listener process.
-
-=for BCVI_COMMANDS
-
-=head1 USING BCVI
-
-You'll need to start a listener process on your workstation (perhaps from
-your window manager session startup).
-
-  bcvi -l &
-
-To install the bcvi client to a remote machine:
-
-  bcvi --install <hostname>
-
-To ssh to a server with tunnelling enabled:
-
-  bcvi --wrap-ssh -- hostname
-
-To enable bcvi on all ssh connections:
-
-  alias ssh="bcvi --wrap-ssh --"
-
-On a target server, you'll need to unpack the overloaded TERM variable:
-
-  test -n "$(which bcvi)" && eval "$(bcvi --unpack-term)"
-
-To use vi over the back-channel:
-
-  bcvi filename
-
-The installation to a remote server should set up aliases, e.g.:
-
-  test -n "${BCVI_CONF}"  && alias vi="bcvi"
-  test -n "${BCVI_CONF}"  && alias bcp="bcvi -c scpd"
-
-=head1 PLUGINS
-
-=for BCVI_PLUGINS
-
-=head1 COPYRIGHT
-
-Copyright 2007-2010 Grant McLean E<lt>grantm@cpan.orgE<gt>
-
-This library is free software; you can redistribute it and/or modify it
-under the same terms as Perl itself.
-
-=cut
-
-
--- a/dotcss/amara.readthedocs.org.css	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-readthedocs.org.css
\ No newline at end of file
--- a/dotcss/bank.simple.com.css	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-#payment-goals-message { display: none !important; }
-span.trade { display: none !important; }
-#sts-flag { background: #EBA000 !important; text-shadow: 0px 2px 0px black;}
--- a/dotcss/bitbucket.org.css	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-#invite-repo-box {display: none;}
--- a/dotcss/bugzilla.pculture.org.css	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-.bz_comment_text { font-family: Menlo; }
-.bz_group_visibility_section { display: none; }
-table.edit_form { display: none; }
--- a/dotcss/debuggex.com.css	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-h2 { display: none; }
-div.centered-text { display: none; }
-div { display: none; }
-div.topcontainer { display: block; }
-div.topcontainer div { display: block; }
-div.nfa { display: block; }
-div.ui-slider { display: block; }
--- a/dotcss/default.css	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
-
-*:focus {
-    outline: 4px solid red !important;
-}
--- a/dotcss/dpaste.com.css	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
-pre {
-    font-family: Menlo;
-    font-size: 12px;
-}
--- a/dotcss/gist.github.com.css	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-
-.line-data, .file-data pre, .line-number {
-    font-family: Menlo;
-    line-height: 1.4;
-    font-size: 12px;
-}
--- a/dotcss/github.banksimple.com.css	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-code { font-family: Menlo !important; }
--- a/dotcss/github.com.css	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-.native-clones { display: none; }
-.tree-browser td.content { font-family: Menlo; font-size: 12px; line-height: 18px; }
-span.mini-icon.directory { margin-top: 2px; }
-/* div.news span.mini-icon { display: none; } */
-/* div.news div.alert { padding-left: 0; } */
-/* ul.repo_list li .mini-icon { display: none; } */
-/* #dashboard ul.repo_list li a { padding-left: 10px; } */
-a.feed.tooltipped.leftwards { display: none; }
-.pagehead .tip { display: none; }
-/* #dashboard div.news { display: none; } */
-div.filter-bar { overflow-x: hidden; }
-p.url-description { display: none; }
-span.js-clippy { display: none !important; }
-div.repository-lang-stats-graph { display: none; }
-div.recently-touched-branches-wrapper { display: none; }
-p.last-commit { display: none; }
-pre, code, tt { font-family: Menlo; }
-.header a.notification-indicator { display: none; }
-.header .divider-vertical { display: none; }
-.header .header-logo-blacktocat { margin-right: 7px; }
--- a/dotcss/goodreads.com.css	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-#featured_polls, #quote_of_the_day {
-    display: none;
-}
--- a/dotcss/google.com.css	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-button.gbil {
-    display: none;
-}
--- a/dotcss/jenkins.banksimple.com.css	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-#main-panel pre {
-    font: normal 14px Menlo !important;
-}
--- a/dotcss/khanacademy.org.css	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-.video_comments { margin-top: 20px; }
-.comments_container .comment { margin-bottom: 20px; }
--- a/dotcss/linkedin.com.css	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-#network-stat-widget,
-#jobsForYou,
-#groupsForYou,
-#companiesForYou,
-#pymk,
-#today-news-wrapper,
-.guided-setup,
-.linkedin-sponsor
-{
-    display: none;
-}
-
-.member-photo, .feed-photo {
-    margin-left: 10px !important;
-    border: 1px solid black !important;
-}
--- a/dotcss/news.ycombinator.com.css	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-
--- a/dotcss/okcupid.com.css	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-#loveisblindday { display: none; }
-#likeonfacebook { display: none; }
-#masthead_wrapper { display: none !important; }
-#movie_match_promo { display: none !important; }
-#sponsoredmatchrow_link { display: none !important; }
--- a/dotcss/readthedocs.org.css	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-span.pre {
-    padding: 1px 4px;
-    border: 1px solid #ccc;
-    border-radius: 2px;
-    background: #f5f5f5;
-    font-family: Menlo, Monaco, monospaced;
-    font-size: 14px;
-}
--- a/dotcss/refheap.com.css	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
-pre {
-    font-family: Menlo;
-    font-size: 14px;
-}
--- a/dotcss/secure.flickr.com.css	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-flickr.com.css
\ No newline at end of file
--- a/dotcss/unisubs.example.com.css	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-body > div.note {
-    display: none;
-}
--- a/dotcss/unisubs.sifterapp.com.css	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-table.grouped tr.group td {
-    padding: 6px 0px 4px 7px !important;
-}
-tr.issue td {
-    padding: 8px 8px 6px 0px !important;
-}
-tr.issue td.subject span.assignee {
-    /* display: none; */
-}
-tr.issue td {
-    border-bottom: 1px solid #eee !important;
-}
--- a/dotcss/vimeo.com.css	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-
-#likes_extras, .related_collections, #brozar { display: none !important;}
--- a/dotcss/youtube.com.css	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-#video-sidebar { display: none; }
-#masthead-expanded-lists-container { display: none; }
-.branded-page-related-channels { display: none; }
--- a/dotjs/democratandchronicle.com.js	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
-$('.fb_recommend, .aside center, .aside table, #taboola-leftcolumn-div').remove();
-$('#dir_widget_wrapper, #conveyorbottom, .ody-ob-taboola-wrapper').remove();
-$('.footer-partners, .footer-gannett, .footer-bottom').remove();
-
--- a/dotjs/dev.universalsubtitles.org.js	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
-$('#menu_name > a').attr('href', '#');
-$('div#menu_name > a').click(function() {
-    $('div#menu').toggle();
-});
--- a/dotjs/encrypted.google.com.js	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-google.com.js
\ No newline at end of file
--- a/dotjs/flickr.com.js	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-$(function() {
-    $('.spaceball').remove();
-})
--- a/dotjs/getprismatic.com.js	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-var banned_sites = ['Bits', 'Forbes.com'];
-var banned_tags = ['Venture Capital', 'Social', 'Startups'];
-var banned_words = ['Node'];
-
-var scrubber = function(){
-  $('.article').each(function(index, object){
-    var hideit = false;
-
-    var publisher = $(object).find('.publisher').find('.interest').text();
-
-    var title = $(object).find('.title').find('.external').text();
-
-    //loop through interests against our banned tags
-    $(object).find('.meta').find('.interest').each(function(i, rawinterest){
-
-      var interest = $(rawinterest).text();
-
-      $(banned_tags).each(function(index, object){
-        if(object.toLowerCase() == interest.toLowerCase()){
-          hideit = true;
-        }
-      });
-
-    });
-
-    //loop through our sites checking if it matches the publisher
-    $(banned_sites).each(function(index, object){
-      if(object.toLowerCase() == publisher.toLowerCase()){
-        hideit = true;
-      }
-    });
-
-    //check title against banned_words
-    $(banned_words).each(function(index, object){
-      if(title.toLowerCase().indexOf(object.toLowerCase()) != -1){
-        hideit = true;
-      }
-    });
-
-    //hide the article if deemed garbage
-    if(hideit == true){
-      $(object).hide();
-    }
-
-  });
-}
-
-setInterval(scrubber, 2000);
--- a/dotjs/google.com.js	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,151 +0,0 @@
-/*
- * jQuery Hotkeys Plugin
- * Copyright 2010, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- *
- * Based upon the plugin by Tzury Bar Yochay:
- * http://github.com/tzuryby/hotkeys
- *
- * Original idea by:
- * Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/
-*/
-(function(jQuery){
-	jQuery.hotkeys = {
-		version: "0.8",
-
-		specialKeys: {
-			8: "backspace", 9: "tab", 13: "return", 16: "shift", 17: "ctrl", 18: "alt", 19: "pause",
-			20: "capslock", 27: "esc", 32: "space", 33: "pageup", 34: "pagedown", 35: "end", 36: "home",
-			37: "left", 38: "up", 39: "right", 40: "down", 45: "insert", 46: "del", 
-			96: "0", 97: "1", 98: "2", 99: "3", 100: "4", 101: "5", 102: "6", 103: "7",
-			104: "8", 105: "9", 106: "*", 107: "+", 109: "-", 110: ".", 111 : "/", 
-			112: "f1", 113: "f2", 114: "f3", 115: "f4", 116: "f5", 117: "f6", 118: "f7", 119: "f8", 
-			120: "f9", 121: "f10", 122: "f11", 123: "f12", 144: "numlock", 145: "scroll", 191: "/", 224: "meta"
-		},
-	
-		shiftNums: {
-			"`": "~", "1": "!", "2": "@", "3": "#", "4": "$", "5": "%", "6": "^", "7": "&", 
-			"8": "*", "9": "(", "0": ")", "-": "_", "=": "+", ";": ": ", "'": "\"", ",": "<", 
-			".": ">",  "/": "?",  "\\": "|"
-		}
-	};
-	function keyHandler( handleObj ) {
-		// Only care when a possible input has been specified
-		if ( typeof handleObj.data !== "string" ) {
-			return;
-		}
-		
-		var origHandler = handleObj.handler,
-			keys = handleObj.data.toLowerCase().split(" ");
-	
-		handleObj.handler = function( event ) {
-			// Don't fire in text-accepting inputs that we didn't directly bind to
-			if ( this !== event.target && (/textarea|select/i.test( event.target.nodeName ) ||
-				 event.target.type === "text") ) {
-				return;
-			}
-			
-			// Keypress represents characters, not special keys
-			var special = event.type !== "keypress" && jQuery.hotkeys.specialKeys[ event.which ],
-				character = String.fromCharCode( event.which ).toLowerCase(),
-				key, modif = "", possible = {};
-
-			// check combinations (alt|ctrl|shift+anything)
-			if ( event.altKey && special !== "alt" ) {
-				modif += "alt+";
-			}
-
-			if ( event.ctrlKey && special !== "ctrl" ) {
-				modif += "ctrl+";
-			}
-			
-			// TODO: Need to make sure this works consistently across platforms
-			if ( event.metaKey && !event.ctrlKey && special !== "meta" ) {
-				modif += "meta+";
-			}
-
-			if ( event.shiftKey && special !== "shift" ) {
-				modif += "shift+";
-			}
-
-			if ( special ) {
-				possible[ modif + special ] = true;
-
-			} else {
-				possible[ modif + character ] = true;
-				possible[ modif + jQuery.hotkeys.shiftNums[ character ] ] = true;
-
-				// "$" can be triggered as "Shift+4" or "Shift+$" or just "$"
-				if ( modif === "shift+" ) {
-					possible[ jQuery.hotkeys.shiftNums[ character ] ] = true;
-				}
-			}
-
-			for ( var i = 0, l = keys.length; i < l; i++ ) {
-				if ( possible[ keys[i] ] ) {
-					return origHandler.apply( this, arguments );
-				}
-			}
-		};
-	}
-	jQuery.each([ "keydown", "keyup", "keypress" ], function() {
-		jQuery.event.special[ this ] = { add: keyHandler };
-	});
-})($);
-
-$(function() {
-    $results = $('#res h3.r a.l');
-
-    if ($results.length) {
-        for (var i=0; i < 9; i++) {
-            var $r = $results.eq(i);
-
-            $r.prepend('<span class="keyshortcut">' + (i + 1) + '</span>');
-            $('span.keyshortcut', $r)
-                .css('color', '#ffffff')
-                .css('background', '#1122CC')
-                .css('font-weight', 'bold')
-                .css('font-size', '12px')
-                .css('padding', '1px 3px')
-                .css('border-radius', '2px')
-                .css('margin-right', '5px')
-                .css('z-index', '9999')
-        }
-
-        $d = $(document);
-
-        $d.bind('keydown', '1', function(e) { go(e); });
-        $d.bind('keydown', '2', function(e) { go(e); });
-        $d.bind('keydown', '3', function(e) { go(e); });
-        $d.bind('keydown', '4', function(e) { go(e); });
-        $d.bind('keydown', '5', function(e) { go(e); });
-        $d.bind('keydown', '6', function(e) { go(e); });
-        $d.bind('keydown', '7', function(e) { go(e); });
-        $d.bind('keydown', '8', function(e) { go(e); });
-        $d.bind('keydown', '9', function(e) { go(e); });
-
-        var go = function(e) {
-            var num = parseInt(e.data, 0) - 1;
-            document.location = $results.eq(num).attr('href');
-        };
-    }
-});
-
-$(function() {
-    var css = ".vspib, .vspb, .vspi {display: none;} #vspb {display: none;}";
-    if (typeof GM_addStyle != "undefined") {
-        GM_addStyle(css);
-    } else if (typeof PRO_addStyle != "undefined") {
-        PRO_addStyle(css);
-    } else if (typeof addStyle != "undefined") {
-        addStyle(css);
-    } else {
-        var heads = document.getElementsByTagName("head");
-        if (heads.length > 0) {
-            var node = document.createElement("style");
-            node.type = "text/css";
-            node.appendChild(document.createTextNode(css));
-            heads[0].appendChild(node); 
-        }
-    }
-})();
--- a/dotjs/jenkins.banksimple.com.js	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-var css = '* { -webkit-transition: none !important; -moz-transition: none !important; -o-transition: none !important; -ms-transition: none !important; transition: none !important; }'
-var head = document.head || document.getElementsByTagName('head')[0]
-var style = document.createElement('style');
- 
-style.type = 'text/css';
-if (style.styleSheet){
-style.styleSheet.cssText = css;
-} else {
-style.appendChild(document.createTextNode(css));
-}
- 
-head.appendChild(style);
--- a/dotjs/nytimes.com.js	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-$('.socialMediaModule').remove();
-
-$('#wsodMarkets').remove();
-$('#classifiedsWidget').remove();
-$('.cColumn #cColumnTopSpanRegion').remove();
-$('#recommendedFooter').remove();
-$('#mostPopWidget').remove();
--- a/dotjs/readability.com.js	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-$(function() {
-    var css = "#rdb-article-content pre { word-wrap: normal !important; white-space: pre !important; background-color: #F0F1EE !important; border: 1px solid #D4D4D2 !important; padding: 10px; margin: 20px; }";
-
-    if (typeof GM_addStyle != "undefined") {
-        GM_addStyle(css);
-    } else if (typeof PRO_addStyle != "undefined") {
-        PRO_addStyle(css);
-    } else if (typeof addStyle != "undefined") {
-        addStyle(css);
-    } else {
-        var heads = document.getElementsByTagName("head");
-        if (heads.length > 0) {
-            var node = document.createElement("style");
-            node.type = "text/css";
-            node.appendChild(document.createTextNode(css));
-            heads[0].appendChild(node); 
-        }
-    }
-}());
--- a/dotjs/reddit.com.js	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-$('#url-field div button').remove();
--- a/dotjs/secure.flickr.com.js	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-flickr.com.js
\ No newline at end of file
--- a/dotjs/staging.universalsubtitles.org	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-dev.universalsubtitles.org.js
\ No newline at end of file
--- a/dotjs/unisubs.example.com.js	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-dev.universalsubtitles.org.js
\ No newline at end of file
--- a/dotjs/unisubs.sifterapp.com.js	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-$(function() {
-    $('ul.state li.priority').each(function(idx, el) {
-        $(el).closest('.issue').find('h2').append(
-            '<span class="new-priority">' + $(el).text() + '</span>');
-        $(el).remove();
-    });
-
-    $('div.comment').each(function (idx, el) {
-        var id = $(el).attr('id');
-        var link = '<a href="#' + id + '">permalink</a>';
-        $(el).find('.timestamp').append(link);
-    });
-});
-
--- a/dotjs/youtube.com.js	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-//$('#comments-view').remove();
-$('#ticker').remove();
--- a/ipython/profile_default/ipython_config.py	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,603 +0,0 @@
-# Configuration file for ipython.
-
-#------------------------------------------------------------------------------
-# Configurable configuration
-#------------------------------------------------------------------------------
-
-#------------------------------------------------------------------------------
-# InteractiveShellApp configuration
-#------------------------------------------------------------------------------
-
-# A Mixin for applications that start InteractiveShell instances.
-# 
-# Provides configurables for loading extensions and executing files as part of
-# configuring a Shell environment.
-# 
-# The following methods should be called by the :meth:`initialize` method of the
-# subclass:
-# 
-#   - :meth:`init_path`
-#   - :meth:`init_shell` (to be implemented by the subclass)
-#   - :meth:`init_gui_pylab`
-#   - :meth:`init_extensions`
-#   - :meth:`init_code`
-
-# Configure matplotlib for interactive use with the default matplotlib backend.
-# c.InteractiveShellApp.matplotlib = None
-
-# Reraise exceptions encountered loading IPython extensions?
-# c.InteractiveShellApp.reraise_ipython_extension_failures = False
-
-# A file to be run
-# c.InteractiveShellApp.file_to_run = ''
-
-# Run the module as a script.
-# c.InteractiveShellApp.module_to_run = ''
-
-# Run the file referenced by the PYTHONSTARTUP environment variable at IPython
-# startup.
-# c.InteractiveShellApp.exec_PYTHONSTARTUP = True
-
-# dotted module name of an IPython extension to load.
-# c.InteractiveShellApp.extra_extension = ''
-
-# Execute the given command string.
-# c.InteractiveShellApp.code_to_run = ''
-
-# lines of code to run at IPython startup.
-# c.InteractiveShellApp.exec_lines = traitlets.Undefined
-
-# List of files to run at IPython startup.
-# c.InteractiveShellApp.exec_files = traitlets.Undefined
-
-# Pre-load matplotlib and numpy for interactive use, selecting a particular
-# matplotlib backend and loop integration.
-# c.InteractiveShellApp.pylab = None
-
-# Enable GUI event loop integration with any of ('glut', 'gtk', 'gtk3', 'osx',
-# 'pyglet', 'qt', 'qt5', 'tk', 'wx').
-# c.InteractiveShellApp.gui = None
-
-# Should variables loaded at startup (by startup files, exec_lines, etc.) be
-# hidden from tools like %who?
-# c.InteractiveShellApp.hide_initial_ns = True
-
-# A list of dotted module names of IPython extensions to load.
-# c.InteractiveShellApp.extensions = traitlets.Undefined
-
-# If true, IPython will populate the user namespace with numpy, pylab, etc. and
-# an ``import *`` is done from numpy and pylab, when using pylab mode.
-# 
-# When False, pylab mode should not import any names into the user namespace.
-# c.InteractiveShellApp.pylab_import_all = True
-
-#------------------------------------------------------------------------------
-# SingletonConfigurable configuration
-#------------------------------------------------------------------------------
-
-# A configurable that only allows one instance.
-# 
-# This class is for classes that should only have one instance of itself or
-# *any* subclass. To create and retrieve such a class use the
-# :meth:`SingletonConfigurable.instance` method.
-
-#------------------------------------------------------------------------------
-# Application configuration
-#------------------------------------------------------------------------------
-
-# This is an application.
-
-# The Logging format template
-# c.Application.log_format = '[%(name)s]%(highlevel)s %(message)s'
-
-# Set the log level by value or name.
-# c.Application.log_level = 30
-
-# The date format used by logging formatters for %(asctime)s
-# c.Application.log_datefmt = '%Y-%m-%d %H:%M:%S'
-
-#------------------------------------------------------------------------------
-# BaseIPythonApplication configuration
-#------------------------------------------------------------------------------
-
-# IPython: an enhanced interactive Python shell.
-
-# The IPython profile to use.
-# c.BaseIPythonApplication.profile = 'default'
-
-# Path to an extra config file to load.
-# 
-# If specified, load this config file in addition to any other IPython config.
-# c.BaseIPythonApplication.extra_config_file = ''
-
-# The name of the IPython directory. This directory is used for logging
-# configuration (through profiles), history storage, etc. The default is usually
-# $HOME/.ipython. This option can also be specified through the environment
-# variable IPYTHONDIR.
-# c.BaseIPythonApplication.ipython_dir = ''
-
-# Whether to overwrite existing config files when copying
-# c.BaseIPythonApplication.overwrite = False
-
-# Whether to create profile dir if it doesn't exist
-# c.BaseIPythonApplication.auto_create = False
-
-# Create a massive crash report when IPython encounters what may be an internal
-# error.  The default is to append a short message to the usual traceback
-# c.BaseIPythonApplication.verbose_crash = False
-
-# Whether to install the default config files into the profile dir. If a new
-# profile is being created, and IPython contains config files for that profile,
-# then they will be staged into the new directory.  Otherwise, default config
-# files will be automatically generated.
-# c.BaseIPythonApplication.copy_config_files = False
-
-#------------------------------------------------------------------------------
-# TerminalIPythonApp configuration
-#------------------------------------------------------------------------------
-
-# Start IPython quickly by skipping the loading of config files.
-# c.TerminalIPythonApp.quick = False
-
-# If a command or file is given via the command-line, e.g. 'ipython foo.py',
-# start an interactive shell after executing the file or command.
-# c.TerminalIPythonApp.force_interact = False
-
-# Whether to display a banner upon starting IPython.
-# c.TerminalIPythonApp.display_banner = True
-
-#------------------------------------------------------------------------------
-# InteractiveShell configuration
-#------------------------------------------------------------------------------
-
-# An enhanced, interactive shell for Python.
-
-# 
-# c.InteractiveShell.xmode = 'Context'
-
-# Make IPython automatically call any callable object even if you didn't type
-# explicit parentheses. For example, 'str 43' becomes 'str(43)' automatically.
-# The value can be '0' to disable the feature, '1' for 'smart' autocall, where
-# it is not applied if there are no more arguments on the line, and '2' for
-# 'full' autocall, where all callable objects are automatically called (even if
-# no arguments are present).
-# c.InteractiveShell.autocall = 0
-
-# 
-# c.InteractiveShell.history_length = 10000
-
-# Deprecated, use PromptManager.in2_template
-# c.InteractiveShell.prompt_in2 = '   .\\D.: '
-
-# The name of the logfile to use.
-# c.InteractiveShell.logfile = ''
-
-# Automatically call the pdb debugger after every exception.
-# c.InteractiveShell.pdb = False
-
-# 
-# c.InteractiveShell.quiet = False
-
-# A list of ast.NodeTransformer subclass instances, which will be applied to
-# user input before code is run.
-# c.InteractiveShell.ast_transformers = traitlets.Undefined
-
-# 
-# c.InteractiveShell.separate_in = '\n'
-
-# 
-# c.InteractiveShell.readline_remove_delims = '-/~'
-
-# **Deprecated**
-# 
-# Enable deep (recursive) reloading by default. IPython can use the deep_reload
-# module which reloads changes in modules recursively (it replaces the reload()
-# function, so you don't need to change anything to use it). `deep_reload`
-# forces a full reload of modules whose code may have changed, which the default
-# reload() function does not.  When deep_reload is off, IPython will use the
-# normal reload(), but deep_reload will still be available as dreload().
-# c.InteractiveShell.deep_reload = False
-
-# Deprecated, use PromptManager.in_template
-# c.InteractiveShell.prompt_in1 = 'In [\\#]: '
-
-# Save multi-line entries as one entry in readline history
-# c.InteractiveShell.multiline_history = True
-
-# Start logging to the default log file in overwrite mode. Use `logappend` to
-# specify a log file to **append** logs to.
-# c.InteractiveShell.logstart = False
-
-# 'all', 'last', 'last_expr' or 'none', specifying which nodes should be run
-# interactively (displaying output from expressions).
-# c.InteractiveShell.ast_node_interactivity = 'last_expr'
-
-# Don't call post-execute functions that have failed in the past.
-# c.InteractiveShell.disable_failing_post_execute = False
-
-# Start logging to the given file in append mode. Use `logfile` to specify a log
-# file to **overwrite** logs to.
-# c.InteractiveShell.logappend = ''
-
-# Deprecated, use PromptManager.justify
-# c.InteractiveShell.prompts_pad_left = True
-
-# 
-# c.InteractiveShell.wildcards_case_sensitive = True
-
-# 
-# c.InteractiveShell.separate_out2 = ''
-
-# Enable magic commands to be called without the leading %.
-# c.InteractiveShell.automagic = True
-
-# The number of saved history entries to be loaded into the readline buffer at
-# startup.
-# c.InteractiveShell.history_load_length = 1000
-
-# 
-# c.InteractiveShell.ipython_dir = ''
-
-# Show rewritten input, e.g. for autocall.
-# c.InteractiveShell.show_rewritten_input = True
-
-# The part of the banner to be printed after the profile
-# c.InteractiveShell.banner2 = ''
-
-# Set the color scheme (NoColor, Linux, or LightBG).
-# c.InteractiveShell.colors = 'LightBG'
-
-# The part of the banner to be printed before the profile
-# c.InteractiveShell.banner1 = 'Python 3.4.3 (default, Aug 11 2015, 08:57:25) \nType "copyright", "credits" or "license" for more information.\n\nIPython 4.0.0 -- An enhanced Interactive Python.\n?         -> Introduction and overview of IPython\'s features.\n%quickref -> Quick reference.\nhelp      -> Python\'s own help system.\nobject?   -> Details about \'object\', use \'object??\' for extra details.\n'
-
-# Use colors for displaying information about objects. Because this information
-# is passed through a pager (like 'less'), and some pagers get confused with
-# color codes, this capability can be turned off.
-# c.InteractiveShell.color_info = True
-
-# 
-# c.InteractiveShell.readline_use = True
-
-# Autoindent IPython code entered interactively.
-# c.InteractiveShell.autoindent = True
-
-# 
-# c.InteractiveShell.debug = False
-
-# If True, anything that would be passed to the pager will be displayed as
-# regular output instead.
-# c.InteractiveShell.display_page = False
-
-# Set the size of the output cache.  The default is 1000, you can change it
-# permanently in your config file.  Setting it to 0 completely disables the
-# caching system, and the minimum value accepted is 20 (if you provide a value
-# less than 20, it is reset to 0 and a warning is issued).  This limit is
-# defined because otherwise you'll spend more time re-flushing a too small cache
-# than working
-# c.InteractiveShell.cache_size = 1000
-
-# 
-# c.InteractiveShell.separate_out = ''
-
-# 
-# c.InteractiveShell.readline_parse_and_bind = traitlets.Undefined
-
-# 
-# c.InteractiveShell.object_info_string_level = 0
-
-# Deprecated, use PromptManager.out_template
-# c.InteractiveShell.prompt_out = 'Out[\\#]: '
-
-#------------------------------------------------------------------------------
-# TerminalInteractiveShell configuration
-#------------------------------------------------------------------------------
-
-# auto editing of files with syntax errors.
-# c.TerminalInteractiveShell.autoedit_syntax = False
-
-# Enable auto setting the terminal title.
-# c.TerminalInteractiveShell.term_title = False
-
-# Set to confirm when you try to exit IPython with an EOF (Control-D in Unix,
-# Control-Z/Enter in Windows). By typing 'exit' or 'quit', you can force a
-# direct exit without any confirmation.
-c.TerminalInteractiveShell.confirm_exit = False
-
-# The shell program to be used for paging.
-# c.TerminalInteractiveShell.pager = 'less'
-
-# Set the editor used by IPython (default to $EDITOR/vi/notepad).
-# c.TerminalInteractiveShell.editor = 'vim'
-
-# Number of lines of your screen, used to control printing of very long strings.
-# Strings longer than this number of lines will be sent through a pager instead
-# of directly printed.  The default value for this is 0, which means IPython
-# will auto-detect your screen size every time it needs to print certain
-# potentially long strings (this doesn't change the behavior of the 'print'
-# keyword, it's only triggered internally). If for some reason this isn't
-# working well (it needs curses support), specify it yourself. Otherwise don't
-# change the default.
-# c.TerminalInteractiveShell.screen_length = 0
-
-#------------------------------------------------------------------------------
-# PromptManager configuration
-#------------------------------------------------------------------------------
-
-# This is the primary interface for producing IPython's prompts.
-
-# If True (default), each prompt will be right-aligned with the preceding one.
-# c.PromptManager.justify = True
-
-# 
-# c.PromptManager.color_scheme = 'Linux'
-
-# Output prompt. '\#' will be transformed to the prompt number
-# c.PromptManager.out_template = 'Out[\\#]: '
-
-# Continuation prompt.
-# c.PromptManager.in2_template = '   .\\D.: '
-
-# Input prompt.  '\#' will be transformed to the prompt number
-# c.PromptManager.in_template = 'In [\\#]: '
-
-#------------------------------------------------------------------------------
-# HistoryAccessorBase configuration
-#------------------------------------------------------------------------------
-
-# An abstract class for History Accessors
-
-#------------------------------------------------------------------------------
-# HistoryAccessor configuration
-#------------------------------------------------------------------------------
-
-# Access the history database without adding to it.
-# 
-# This is intended for use by standalone history tools. IPython shells use
-# HistoryManager, below, which is a subclass of this.
-
-# Path to file to use for SQLite history database.
-# 
-# By default, IPython will put the history database in the IPython profile
-# directory.  If you would rather share one history among profiles, you can set
-# this value in each, so that they are consistent.
-# 
-# Due to an issue with fcntl, SQLite is known to misbehave on some NFS mounts.
-# If you see IPython hanging, try setting this to something on a local disk,
-# e.g::
-# 
-#     ipython --HistoryManager.hist_file=/tmp/ipython_hist.sqlite
-# c.HistoryAccessor.hist_file = ''
-
-# Options for configuring the SQLite connection
-# 
-# These options are passed as keyword args to sqlite3.connect when establishing
-# database conenctions.
-# c.HistoryAccessor.connection_options = traitlets.Undefined
-
-# enable the SQLite history
-# 
-# set enabled=False to disable the SQLite history, in which case there will be
-# no stored history, no SQLite connection, and no background saving thread.
-# This may be necessary in some threaded environments where IPython is embedded.
-# c.HistoryAccessor.enabled = True
-
-#------------------------------------------------------------------------------
-# HistoryManager configuration
-#------------------------------------------------------------------------------
-
-# A class to organize all history-related functionality in one place.
-
-# Should the history database include output? (default: no)
-# c.HistoryManager.db_log_output = False
-
-# Write to database every x commands (higher values save disk access & power).
-# Values of 1 or less effectively disable caching.
-# c.HistoryManager.db_cache_size = 0
-
-#------------------------------------------------------------------------------
-# LoggingConfigurable configuration
-#------------------------------------------------------------------------------
-
-# A parent class for Configurables that log.
-# 
-# Subclasses have a log trait, and the default behavior is to get the logger
-# from the currently running Application.
-
-#------------------------------------------------------------------------------
-# ProfileDir configuration
-#------------------------------------------------------------------------------
-
-# An object to manage the profile directory and its resources.
-# 
-# The profile directory is used by all IPython applications, to manage
-# configuration, logging and security.
-# 
-# This object knows how to find, create and manage these directories. This
-# should be used by any code that wants to handle profiles.
-
-# Set the profile location directly. This overrides the logic used by the
-# `profile` option.
-# c.ProfileDir.location = ''
-
-#------------------------------------------------------------------------------
-# BaseFormatter configuration
-#------------------------------------------------------------------------------
-
-# A base formatter class that is configurable.
-# 
-# This formatter should usually be used as the base class of all formatters. It
-# is a traited :class:`Configurable` class and includes an extensible API for
-# users to determine how their objects are formatted. The following logic is
-# used to find a function to format an given object.
-# 
-# 1. The object is introspected to see if it has a method with the name
-#    :attr:`print_method`. If is does, that object is passed to that method
-#    for formatting.
-# 2. If no print method is found, three internal dictionaries are consulted
-#    to find print method: :attr:`singleton_printers`, :attr:`type_printers`
-#    and :attr:`deferred_printers`.
-# 
-# Users should use these dictionaries to register functions that will be used to
-# compute the format data for their objects (if those objects don't have the
-# special print methods). The easiest way of using these dictionaries is through
-# the :meth:`for_type` and :meth:`for_type_by_name` methods.
-# 
-# If no function/callable is found to compute the format data, ``None`` is
-# returned and this format type is not used.
-
-# 
-# c.BaseFormatter.type_printers = traitlets.Undefined
-
-# 
-# c.BaseFormatter.enabled = True
-
-# 
-# c.BaseFormatter.singleton_printers = traitlets.Undefined
-
-# 
-# c.BaseFormatter.deferred_printers = traitlets.Undefined
-
-#------------------------------------------------------------------------------
-# PlainTextFormatter configuration
-#------------------------------------------------------------------------------
-
-# The default pretty-printer.
-# 
-# This uses :mod:`IPython.lib.pretty` to compute the format data of the object.
-# If the object cannot be pretty printed, :func:`repr` is used. See the
-# documentation of :mod:`IPython.lib.pretty` for details on how to write pretty
-# printers.  Here is a simple example::
-# 
-#     def dtype_pprinter(obj, p, cycle):
-#         if cycle:
-#             return p.text('dtype(...)')
-#         if hasattr(obj, 'fields'):
-#             if obj.fields is None:
-#                 p.text(repr(obj))
-#             else:
-#                 p.begin_group(7, 'dtype([')
-#                 for i, field in enumerate(obj.descr):
-#                     if i > 0:
-#                         p.text(',')
-#                         p.breakable()
-#                     p.pretty(field)
-#                 p.end_group(7, '])')
-
-# Truncate large collections (lists, dicts, tuples, sets) to this size.
-# 
-# Set to 0 to disable truncation.
-# c.PlainTextFormatter.max_seq_length = 1000
-
-# 
-# c.PlainTextFormatter.verbose = False
-
-# 
-# c.PlainTextFormatter.float_precision = ''
-
-# 
-# c.PlainTextFormatter.max_width = 79
-
-# 
-# c.PlainTextFormatter.pprint = True
-
-# 
-# c.PlainTextFormatter.newline = '\n'
-
-#------------------------------------------------------------------------------
-# Completer configuration
-#------------------------------------------------------------------------------
-
-# Activate greedy completion
-# 
-# This will enable completion on elements of lists, results of function calls,
-# etc., but can be unsafe because the code is actually evaluated on TAB.
-# c.Completer.greedy = False
-
-#------------------------------------------------------------------------------
-# IPCompleter configuration
-#------------------------------------------------------------------------------
-
-# Extension of the completer class with IPython-specific features
-
-# Instruct the completer to omit private method names
-# 
-# Specifically, when completing on ``object.<tab>``.
-# 
-# When 2 [default]: all names that start with '_' will be excluded.
-# 
-# When 1: all 'magic' names (``__foo__``) will be excluded.
-# 
-# When 0: nothing will be excluded.
-# c.IPCompleter.omit__names = 2
-
-# Instruct the completer to use __all__ for the completion
-# 
-# Specifically, when completing on ``object.<tab>``.
-# 
-# When True: only those names in obj.__all__ will be included.
-# 
-# When False [default]: the __all__ attribute is ignored
-# c.IPCompleter.limit_to__all__ = False
-
-# Whether to merge completion results into a single list
-# 
-# If False, only the completion results from the first non-empty completer will
-# be returned.
-# c.IPCompleter.merge_completions = True
-
-#------------------------------------------------------------------------------
-# Magics configuration
-#------------------------------------------------------------------------------
-
-# Base class for implementing magic functions.
-# 
-# Shell functions which can be reached as %function_name. All magic functions
-# should accept a string, which they can parse for their own needs. This can
-# make some functions easier to type, eg `%cd ../` vs. `%cd("../")`
-# 
-# Classes providing magic functions need to subclass this class, and they MUST:
-# 
-# - Use the method decorators `@line_magic` and `@cell_magic` to decorate
-#   individual methods as magic functions, AND
-# 
-# - Use the class decorator `@magics_class` to ensure that the magic
-#   methods are properly registered at the instance level upon instance
-#   initialization.
-# 
-# See :mod:`magic_functions` for examples of actual implementation classes.
-
-#------------------------------------------------------------------------------
-# ScriptMagics configuration
-#------------------------------------------------------------------------------
-
-# Magics for talking to scripts
-# 
-# This defines a base `%%script` cell magic for running a cell with a program in
-# a subprocess, and registers a few top-level magics that call %%script with
-# common interpreters.
-
-# Extra script cell magics to define
-# 
-# This generates simple wrappers of `%%script foo` as `%%foo`.
-# 
-# If you want to add script magics that aren't on your path, specify them in
-# script_paths
-# c.ScriptMagics.script_magics = traitlets.Undefined
-
-# Dict mapping short 'ruby' names to full paths, such as '/opt/secret/bin/ruby'
-# 
-# Only necessary for items in script_magics where the default path will not find
-# the right interpreter.
-# c.ScriptMagics.script_paths = traitlets.Undefined
-
-#------------------------------------------------------------------------------
-# StoreMagics configuration
-#------------------------------------------------------------------------------
-
-# Lightweight persistence for python variables.
-# 
-# Provides the %store magic.
-
-# If True, any %store-d variables will be automatically restored when IPython
-# starts.
-# c.StoreMagics.autorestore = False
--- a/ipython/profile_default/startup/README	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-This is the IPython startup directory
-
-.py and .ipy files in this directory will be run *prior* to any code or files specified
-via the exec_lines or exec_files configurables whenever you load this profile.
-
-Files will be run in lexicographical order, so you can control the execution order of files
-with a prefix, e.g.::
-
-    00-first.py
-    50-middle.py
-    99-last.ipy
--- a/marked-sjl.css	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,311 +0,0 @@
-/* 
-   This document has been created with Marked.app <http://markedapp.com>, Copyright 2011 Brett Terpstra
-   Please leave this notice in place, along with any additional credits below.
-   ---------------------------------------------------------------
-   Title: SJL
-   Author: Steve Losh
-   Description: 
-*/
-
-body {
-    font: normal 1em/1.4em Palatino, serif;
-}
-
-html>body {
-    font-size:14px
-}
-
-h1 {
-    font-family: HoeflerText-Regular,"Hoefler Text", serif;
-    font-weight: normal;
-    color:#000;
-    font-size:200%;
-    line-height:120%;
-}
-h2 {
-    font-family: HoeflerText-Regular,"Hoefler Text", serif;
-    font-weight: normal;
-    color: #000;
-    font-size: 170%;
-}
-h3 {
-    color:#111;
-    font-size:150%;
-}
-h4 {
-    color:#111;
-    font-size:120%;
-}
-h5 {
-    color:#111;
-    font-size:100%;
-    font-weight: bold;
-}
-h6 {
-    font-size:100%;
-    font-weight: bold;
-}
-
-body,p,td,div {
-    color: #050505;
-    font-family: Palatino, serif;
-    word-wrap: break-word;
-}
-
-a {
-    -webkit-transition:color .2s ease-in-out;
-    color:#0d6ea1;
-    text-decoration:none
-}
-
-a:hover {
-    color:#3593d9
-}
-
-blockquote p {
-  font-size:110%;
-  font-style:italic;
-  line-height:1.6em;
-}
-
-.footnote {
-    color:#0d6ea1;
-    font-size:.8em;
-    vertical-align:super
-}
-
-#wrapper img {
-    max-width:100%;
-    height:auto
-}
-
-dd {
-    margin-bottom:1em
-}
-
-li > p:first-child {
-    margin:0
-}
-
-ul ul,ul ol {
-    margin-bottom:.4em
-}
-
-caption,col,colgroup,table,tbody,td,tfoot,th,thead,tr {
-    border-spacing:0
-}
-
-table {
-    border:1px solid rgba(0,0,0,0.25);
-    border-collapse:collapse;
-    display:table;
-    empty-cells:hide;
-    margin:-1px 0 23px;
-    padding:0;
-    table-layout:fixed
-}
-
-caption {
-    display:table-caption;
-    font-weight:700
-}
-
-col {
-    display:table-column
-}
-
-colgroup {
-    display:table-column-group
-}
-
-code, tt, pre {
-    font-family: Menlo;
-    font-size: 14px;
-    text-align: left;
-    white-space: nowrap;
-    border: 1px solix #ccc;
-    color: #0000ff;
-}
-
-pre > code {
-  margin: 0;
-  padding: 0;
-  white-space: pre;
-  border: none;
-}
-
-pre {
-  border: 1px solid #ccc;
-  font-size:110%;
-  line-height: 22px;
-  overflow: auto;
-  padding: 2px 10px;
-  border-radius: 3px;
-  margin: 20px 0;
-}
-  
-pre code, pre tt {
-    border: none;
-}
-
-tbody {
-    display:table-row-group
-}
-
-tfoot {
-    display:table-footer-group
-}
-
-thead {
-    display:table-header-group
-}
-
-td,th {
-    display:table-cell
-}
-
-tr {
-    display:table-row
-}
-
-table th,table td {
-    font-size:1.1em;
-    line-height:23px;
-    padding:0 1em
-}
-
-table thead {
-    background:rgba(0,0,0,0.15);
-    border:1px solid rgba(0,0,0,0.15);
-    border-bottom:1px solid rgba(0,0,0,0.2)
-}
-
-table tbody {
-    background:rgba(0,0,0,0.05)
-}
-
-table tfoot {
-    background:rgba(0,0,0,0.15);
-    border:1px solid rgba(0,0,0,0.15);
-    border-top:1px solid rgba(0,0,0,0.2)
-}
-
-figure {
-    display:inline-block;
-    margin-bottom:1.2em;
-    position:relative;
-    margin:1em 0
-}
-
-figcaption {
-    font-style:italic;    
-    text-align:center;
-    background:rgba(0,0,0,.9);
-    color:rgba(255,255,255,1);
-    position:absolute;
-    left:0;
-    bottom:-24px;
-    width:98%;
-    padding:1%;
-    -webkit-transition:all .2s ease-in-out;
-}
-
-figure:hover>figcaption {
-    /* background:rgba(0,0,0,1) */
-}
-
-/* important rules for keeping line-height from being affected by sub */
-sup,sub,a.footnote {
-    font-size:1.4ex;
-    height:0;
-    line-height:1;
-    position:relative;
-}
-
-sup {
-    vertical-align:super;
-}
-
-sub {
-    vertical-align: sub;
-    top: -1px;
-}
-
-p,h5 {
-    font-size:1.1429em;
-    line-height:1.3125em;
-    margin:1.3125em 0
-}
-
-dt,th {
-    font-weight:700
-}
-
-table tr:nth-child(odd),table th:nth-child(odd),table td:nth-child(odd) {
-    background:rgba(255,255,255,0.06)
-}
-
-table tr:nth-child(even),table td:nth-child(even) {
-    background:rgba(0,0,0,0.06)
-}
-
-@media print {
-    /* print only styles. Keep it clean */
-    body {
-        overflow:auto
-    }
-    img, pre, blockquote, table, figure, p {
-        page-break-inside: avoid
-    }
-    .footnotes { page-break-before: always }
-
-    #wrapper {
-        background:#fff;
-        color:#303030;
-        font-size:85%;
-        padding:10px;
-        position:relative;
-        text-indent:0
-    }
-}
-
-@media screen {
-    /* Screen-only styles, including inverted styles */
-    .inverted #wrapper,.inverted {
-        background:rgba(37, 42, 42, 1)
-    }
-    .inverted hr {
-        border-color: rgba(51, 63, 64, 1) !important;
-    }
-    .inverted p,.inverted td,.inverted li,.inverted h1,.inverted h2,.inverted h3,.inverted h4,.inverted h5,.inverted h6,.inverted pre,.inverted code,.inverted th,.inverted .math,.inverted caption,.inverted dd,.inverted dt
-    {
-        color:#eee!important
-    }
-    .inverted table tr:nth-child(odd), .inverted table th:nth-child(odd), .inverted table td:nth-child(odd) {
-      background: none;
-    }
-    .inverted a
-    {
-        color:rgba(172, 209, 213, 1);
-    }
-
-    #wrapper
-    {
-        padding:20px
-    }
-
-    /* styles for more colorful selection highlights */
-    ::selection { background:rgba(157, 193, 200,.5)}
-    h1::selection { background-color:rgba(45, 156, 208, .3)}
-    h2::selection { background-color:rgba(90, 182, 224, .3)}
-    h3::selection,
-    h4::selection,
-    h5::selection,
-    h6::selection,li::selection,ol::selection { background-color:rgba(133, 201, 232, .3)}
-    code::selection { background-color:rgba(0,0,0,.7);color:#eee}
-    code span::selection {background-color:rgba(0,0,0,.7) !important;color:#eee !important}
-    a::selection { background-color:rgba(255, 230, 102,.2)}
-    .inverted a::selection { background-color:rgba(255, 230, 102,.6)}
-	td::selection,th::selection,caption::selection { background-color: rgba(180, 237, 95, .5);}
-}
-
--- a/pentadactylrc	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,72 +0,0 @@
-"1.0b3 (created: 2010/11/06 12:31:35)
-
-highlight Hint       font-size: 14px; background: rgba(210,1,133,0.8) !important; border: 2px solid rgb(165,1,105); padding: 4px; border-radius: 3px; font-weight: bold; margin-left: -25px; color: white; font-family: Helvetica; line-height:1em;
-highlight HintActive background: rgba(145,197,43,0.8)    !important;
-highlight HintElem   background: rgba(255, 209, 20, 0.7) !important;
-highlight StatusLine -moz-appearance: none !important; font-weight: bold; background: transparent !important; border: 0px !important; min-height: 22px !important; text-shadow: none !important; font: normal 14px/1 'Menlo' !important; padding: 3px 0px 3px 5px !important;
-highlight CmdLine    padding: 1px !important; font: normal 14px 'Menlo' !important;
-highlight CmdOutput  font: normal 13px 'Menlo' !important;
-highlight CompItem   font: normal 13px 'Menlo' !important;
-
-highlight Find   background: #d6c149; color: #000;
-
-set runtimepath=/Users/sjl/.pentadactyl
-set editor='/usr/local/bin/mvim -f +<line> <file>'
-" "set followhints=1
-set showtabline=multitab
-set showstatuslinks=command
-
-" FASTER PLEASE
-nmap -builtin -silent j 4j
-nmap -builtin -silent k 4k
-
-" Go to the second input field.
-" Useful for skipping over search fields, etc.
-nmap -builtin gI 2gi
-
-" I never use marks, but always use quickmarks.
-nmap -builtin "'" go
-nmap -builtin '"' gn
-
-" Switch tabs with parens
-nmap -builtin ) :tn<CR>
-nmap -builtin ( :tp<CR>
-
-" Finally I can overwrite the stupid fucking Firebug toggling correctly.
-" nmap -builtin <c-f> <f12>
-" nmap -builtin <c-g> <s-f12>
-
-" Console toggle
-nmap -builtin <c-g> <m-a-k><esc>
-imap -builtin <c-g> <esc><m-a-k><esc>
-
-" Inspect element toggle
-nmap -builtin <c-s> <m-a-i>
-imap -builtin <c-s> <esc><m-a-i>
-
-" Shift is hard.
-nmap -builtin ; :
-
-" YES YES YES REMOVE THE IDIOCY
-nmap -builtin <bs> <nop>
-
-" Highlight all search matches, not just the first.
-set hlfind
-
-" Clear search highlighting and normal highlighting.
-nmap -builtin ,<space> <esc>:noh<CR>
-
-" Shut up.
-javascript dactyl.beep = function() { return false; }
-
-" Okay DDG let's see if I can stand you.
-" nope set defsearch=duckduckgo
-
-" Train myself to use t instead of cmd-t
-nmap -builtin <m-t> <nop>
-
-" Apparently the d key broke at some point.  What the Christ?
-nmap -builtin d :tabclose<cr>
-
-" Kill me
-style -name ublick * #nav-bar * { visibility: visible; }
--- a/slate	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-config defaultToCurrentScreen true
-
-alias hyper ctrl;shift;alt;cmd
-
-alias full      move screenOriginX;screenOriginY               screenSizeX;screenSizeY
-alias lefthalf  move screenOriginX;screenOriginY               screenSizeX/2;screenSizeY
-alias righthalf move screenOriginX+screenSizeX/2;screenOriginY screenSizeX/2;screenSizeY
-
-alias thirdleft  move screenOriginX;screenOriginY                 screenSizeX/3;screenSizeY
-alias thirdmid   move screenOriginX+screenSizeX/3;screenOriginY   screenSizeX/3;screenSizeY
-alias thirdright move screenOriginX+2*screenSizeX/3;screenOriginY screenSizeX/3;screenSizeY
-
-alias bigleft  move screenOriginX;screenOriginY               2*screenSizeX/3;screenSizeY
-alias bigmid   move screenOriginX+screenSizeX/6;screenOriginY 2*screenSizeX/3;screenSizeY
-alias bigright move screenOriginX+screenSizeX/3;screenOriginY 2*screenSizeX/3;screenSizeY
-
-bind pad1:${hyper} ${bigleft}
-bind pad2:${hyper} ${bigmid}
-bind pad3:${hyper} ${bigright}
-bind pad4:${hyper} ${lefthalf}
-bind pad5:${hyper} ${full}
-bind pad6:${hyper} ${righthalf}
-bind pad7:${hyper} ${thirdleft}
-bind pad8:${hyper} ${thirdmid}
-bind pad9:${hyper} ${thirdright}
-
-bind ;:${hyper}      throw next
-bind delete:${hyper} relaunch
--- a/urlview	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-COMMAND open %s
--- a/userContent.css	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,21 +0,0 @@
-body.sjl-unstyled {
-  width: 800px; margin: 50px auto 200px;
-  font-family: Georgia;
-  font-size: 16px;
-  line-height: 1.4;
-}
-body.sjl-unstyled pre,code {
-  font-family: menlo !important;
-  font-size: 14px;
-  line-height: 1.4;
-}
-body.sjl-unstyled code {
-  background: #eee;
-  padding: 1px 4px;
-}
-body.sjl-unstyled pre {
-  padding: 15px;
-  overflow-x: scroll;
-}
-body.sjl-unstyled h3 { text-decoration: none; }
-body.sjl-unstyled h4 { text-decoration: none; }
--- a/vimperatorrc	Mon Jun 25 16:56:02 2018 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,37 +0,0 @@
-" gotta go fast
-nnoremap j 6j
-nnoremap k 6k
-
-" remove gui cruft
-set gui=nonavigation,tabs
-
-" my eyes are bad
-highlight CmdLine    font: normal 15px 'Menlo' !important; background: white !important; padding: 0px 10px 0px 0px;
-highlight CmdLine>*  font: normal 15px 'Menlo' !important;
-highlight StatusLine font: normal 15px 'Menlo' !important; padding: 2px 10px 2px 0px;
-
-highlight CmdOutput  font: normal 13px 'Menlo' !important;
-highlight CompItem   font: normal 13px 'Menlo' !important;
-highlight CompTitle  font: normal 13px 'Menlo' !important;
-
-" I never use marks, but always use quickmarks.
-nnoremap "'" go
-nnoremap '"' gn
-
-" Switch tabs with parens
-nnoremap ) :tn<CR>
-nnoremap ( :tp<CR>
-
-" YES YES YES REMOVE THE IDIOCY
-nnoremap <bs> <nop>
-
-" Clear search highlighting and normal highlighting.
-nnoremap ,<space> <esc>:noh<CR>
-
-" unfuck ublock
-style -name ublick * #nav-bar * { visibility: visible; }
-
-" unfuck completions for ff49
-js services.services.autoCompleteSearch.class_="@mozilla.org/autocomplete/search;1?name=unifiedcomplete"
-
-normal <esc>