Initial commit of many files; many more to come
commit
a1522f9784
|
@ -0,0 +1,49 @@
|
||||||
|
! urxvt configuration
|
||||||
|
|
||||||
|
! font
|
||||||
|
urxvt.font: xft:Monospace:pixelsize=10:antialias=true:hinting=true
|
||||||
|
urxvt.boldFont: xft:Monospace:pixelsize=10:bold:antialias=true:hinting=true
|
||||||
|
urxvt.letterSpace: -1.5
|
||||||
|
urxvt.lineSpace: -2
|
||||||
|
|
||||||
|
! misc
|
||||||
|
urxvt.scrollBar: false
|
||||||
|
urxvt.visualBell: true
|
||||||
|
urxvt.modifier: alt
|
||||||
|
|
||||||
|
|
||||||
|
!!! colors (based on Tango Icon Theme color scheme)
|
||||||
|
*background: Black
|
||||||
|
*foreground: #babdb6
|
||||||
|
|
||||||
|
! black
|
||||||
|
*color0: #2e3436
|
||||||
|
*color8: #555753
|
||||||
|
|
||||||
|
! red
|
||||||
|
*color1: #a40000
|
||||||
|
*color9: #cc0000
|
||||||
|
|
||||||
|
! green
|
||||||
|
*color2: #4e9a06
|
||||||
|
*color10: #73d216
|
||||||
|
|
||||||
|
! yellow
|
||||||
|
*color3: #c4a000
|
||||||
|
*color11: #edd400
|
||||||
|
|
||||||
|
! blue
|
||||||
|
*color4: #3465a4
|
||||||
|
*color12: #729fcf
|
||||||
|
|
||||||
|
! magenta
|
||||||
|
*color5: #75507b
|
||||||
|
*color13: #ad7fa8
|
||||||
|
|
||||||
|
! cyan
|
||||||
|
*color6: turquoise4
|
||||||
|
*color14: cyan3
|
||||||
|
|
||||||
|
! white
|
||||||
|
*color7: #babdb6
|
||||||
|
*color15: #d3d7cf
|
|
@ -0,0 +1,35 @@
|
||||||
|
" vi: set tw=0
|
||||||
|
"
|
||||||
|
" Mike Gerwitz's personal gvim configuration
|
||||||
|
"
|
||||||
|
" Copyright (C) 2013 Mike Gerwitz
|
||||||
|
"
|
||||||
|
" This program is free software: you can redistribute it and/or modify
|
||||||
|
" it under the terms of the GNU General Public License as published by
|
||||||
|
" the Free Software Foundation, either version 3 of the License, or
|
||||||
|
" (at your option) any later version.
|
||||||
|
"
|
||||||
|
" This program is distributed in the hope that it will be useful,
|
||||||
|
" but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
" GNU General Public License for more details.
|
||||||
|
"
|
||||||
|
" You should have received a copy of the GNU General Public License
|
||||||
|
" along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
"
|
||||||
|
" Most configuration options are within ~/.vimrc---these are only the
|
||||||
|
" options that apply to the GTK+ software gvim.
|
||||||
|
" "
|
||||||
|
|
||||||
|
set guifont=Droid\ Sans\ Mono\ 8
|
||||||
|
|
||||||
|
" remove all those annoying GUI options that take up space
|
||||||
|
set guioptions=
|
||||||
|
|
||||||
|
" I do not prefer slate on a terminal, so this is set only for gvim
|
||||||
|
color slatemg
|
||||||
|
|
||||||
|
" There is rarely a time where I use gvim and do not want to strip trailing
|
||||||
|
" whitespace or retab. If I do not want this, I do not use gvim.
|
||||||
|
autocmd BufWrite * :silent! :%s:\(\S\+\)\?\s\+$:\1:g
|
||||||
|
autocmd BufWrite * silent :retab
|
|
@ -0,0 +1,28 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Display speed of CPU fan
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 Mike Gerwitz
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
# Why? Primarily for tweaking BIOS configuration for fan speed to quiet a
|
||||||
|
# noisy fan or to see the fan speed when logging in remotely so as not to
|
||||||
|
# annoy people who may be physically present and wonder why the PC is
|
||||||
|
# preparing for takeoff.
|
||||||
|
#
|
||||||
|
# One day, fans will not exist within most home PCs.
|
||||||
|
##
|
||||||
|
|
||||||
|
sensors | grep fan1 | awk '{print "\005{+ .y}", $2, "rpm\005{-}"}'
|
|
@ -0,0 +1,25 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Displays first match of non-localhost IP
|
||||||
|
#
|
||||||
|
# Copyright (C) 2011 Mike Gerwitz
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
##
|
||||||
|
|
||||||
|
# display first non-localhost IP
|
||||||
|
ifconfig \
|
||||||
|
| grep -m1 -oP 'inet addr:[^ ]+(?<!127\.0\.0\.1|::1) ' \
|
||||||
|
| cut -f2 -d: \
|
||||||
|
| sed 's/ $//'
|
|
@ -0,0 +1,29 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# System 1-minute load average screen status indicator
|
||||||
|
#
|
||||||
|
# Copyright (C) 2011 Mike Gerwitz
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
# This utility uses fetchmail in order to check for new messages. Please
|
||||||
|
# configure your ~/.fetchmailrc file appropriately.
|
||||||
|
##
|
||||||
|
|
||||||
|
uptime \
|
||||||
|
| grep -o 'average:.*' \
|
||||||
|
| cut -d' ' -f2 \
|
||||||
|
| sed 's/,$//' \
|
||||||
|
| awk '{print "\005{+ .y}", $1, "\005{-}"}'
|
||||||
|
|
|
@ -0,0 +1,70 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Unread E-mail screen status indicator
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 Mike Gerwitz
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
# Unread e-mails will be displayed in the following format:
|
||||||
|
# [X X X unread!X]
|
||||||
|
#
|
||||||
|
# This utility uses fetchmail in order to check for new messages. Please
|
||||||
|
# configure your ~/.fetchmailrc file appropriately.
|
||||||
|
##
|
||||||
|
|
||||||
|
pidfile=~/.screen/.mail.pid
|
||||||
|
curpid="$( cat "$pidfile" )"
|
||||||
|
|
||||||
|
# kill any existing instances and replace (to ensure that code changes take
|
||||||
|
# effect)
|
||||||
|
[ "$curpid" ] && kill "$curpid"
|
||||||
|
echo "$$" > "$pidfile"
|
||||||
|
|
||||||
|
# this will be displayed until the first time the mail is received
|
||||||
|
echo "\005{+ mw}(...)\005{-}"
|
||||||
|
|
||||||
|
# continue looping while parent (screen) process is still running
|
||||||
|
parent="$PPID"
|
||||||
|
while [ "$( ps | grep $parent)" ]; do
|
||||||
|
fetchmail -t1 -c 2>/dev/null \
|
||||||
|
| sed 's/^\([0-9]\+\).*(\([0-9]\+\) seen).*$/\1 \2/' \
|
||||||
|
| awk '
|
||||||
|
BEGIN {
|
||||||
|
count=0
|
||||||
|
total=0
|
||||||
|
printf "%s", "\005{+ mw}[\005{+b}"
|
||||||
|
}
|
||||||
|
{
|
||||||
|
total += total + ( $1 - $2 )
|
||||||
|
count += $1
|
||||||
|
printf "%d ", total
|
||||||
|
}
|
||||||
|
END {
|
||||||
|
printf "%s", "\005{-}unread]\005{-}"
|
||||||
|
|
||||||
|
if ( count > 100 )
|
||||||
|
printf "%s%d%s", "\005{+ my}!", count, "\005{-}"
|
||||||
|
|
||||||
|
printf "\n"
|
||||||
|
|
||||||
|
if ( total > 0 )
|
||||||
|
print "mail" > "/tmp/.keyind"
|
||||||
|
else
|
||||||
|
print "" > "/tmp/.keyind"
|
||||||
|
}'
|
||||||
|
|
||||||
|
sleep 30
|
||||||
|
done
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Indicator for status of encrypted directory mount
|
||||||
|
#
|
||||||
|
# Copyright (C) 2012 Mike Gerwitz
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
# The rationale behind this color scheme is that the system is unlikely to
|
||||||
|
# function properly (for standard use) if the directory is not mounted. For
|
||||||
|
# example, I symlink ~/.mozilla into this directory so that my sync'd
|
||||||
|
# data---containing browsing habits and years worth of bookmarks---is not
|
||||||
|
# available when I am not physically present at the PC.
|
||||||
|
##
|
||||||
|
|
||||||
|
color=r
|
||||||
|
[ -f ~/.enc/.available ] && color=m
|
||||||
|
|
||||||
|
echo -n "\005{+ ."$color"}*\005{-}"
|
|
@ -0,0 +1,38 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# SSH key indicator for ssh-agent
|
||||||
|
#
|
||||||
|
# Copyright (C) 2012 Mike Gerwitz
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
# The rationale behind the coloring is simply that, without the key in the
|
||||||
|
# agent, I will be prompted for passwords for (depending on location)
|
||||||
|
# numerous boxes---a frustrating task. However, the reverse coloring would
|
||||||
|
# be equally applicable---remote systems are more vulnerable if someone has
|
||||||
|
# access to your agent. I take precautions to make the latter incredibly
|
||||||
|
# difficult.
|
||||||
|
##
|
||||||
|
|
||||||
|
. ~/.ssh/.agent
|
||||||
|
keys="$( ssh-add -L | grep ^ssh | wc -l )"
|
||||||
|
|
||||||
|
# green if keys exist in agent, otherwise yellow
|
||||||
|
color=g
|
||||||
|
[ "$keys" -eq 0 ] && color=y
|
||||||
|
|
||||||
|
# red if agent is not started
|
||||||
|
[ -z "$SSH_AGENT_PID" ] && color=r
|
||||||
|
|
||||||
|
echo -n "\005{+ ."$color"}*\005{-}"
|
|
@ -0,0 +1,79 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Retrieves and formats current weather
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 Mike Gerwitz
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
# In order to prevent the screen session from hanging due to network latency
|
||||||
|
# or a slow weather server, it is highly recommended that a cron job or some
|
||||||
|
# other task be used to populate /tmp/.weather with the output of the
|
||||||
|
# weather command. Should a file be empty or non-existant, the script will
|
||||||
|
# fall back to querying realtime.
|
||||||
|
##
|
||||||
|
|
||||||
|
export -n HTTP_PROXY http_proxy
|
||||||
|
|
||||||
|
# fall back to realtime weather data if no cache is available
|
||||||
|
wdata=/tmp/.weather
|
||||||
|
data="$(
|
||||||
|
if [ -s "$wdata" ]; then
|
||||||
|
cat /tmp/.weather
|
||||||
|
else
|
||||||
|
weather -i "${WEATHER_METAR:-kbuf}"
|
||||||
|
fi \
|
||||||
|
| sed 's/^ \+//g'
|
||||||
|
)"
|
||||||
|
|
||||||
|
weather_temp="$( echo "$data" \
|
||||||
|
| grep ^Temp \
|
||||||
|
)"
|
||||||
|
weather_f="$( echo "$weather_temp" \
|
||||||
|
| grep -oP '[0-9\.-]+ F' \
|
||||||
|
| cut -d' ' -f1 \
|
||||||
|
)"
|
||||||
|
weather_c="$( echo "$weather_temp" \
|
||||||
|
| grep -oP '[0-9\.-]+ C' \
|
||||||
|
| cut -d' ' -f1 \
|
||||||
|
)"
|
||||||
|
wind="$( grep -o '[0-9]\+ MPH' <<< "$data" \
|
||||||
|
| tr '\n' '-' \
|
||||||
|
| sed 's/-$//;s/ \?MPH-/-/' \
|
||||||
|
)"
|
||||||
|
|
||||||
|
# remove decimal
|
||||||
|
chk="$( echo "$weather_f" | cut -d. -f1 )"
|
||||||
|
|
||||||
|
# determine color based on temperature
|
||||||
|
color='.'
|
||||||
|
if [ $chk -gt 89 ]; then
|
||||||
|
color=r
|
||||||
|
elif [ $chk -gt 69 ]; then
|
||||||
|
color=y
|
||||||
|
elif [ $chk -gt 39 ]; then
|
||||||
|
color=d
|
||||||
|
elif [ $chk -gt 9 ]; then
|
||||||
|
color=b
|
||||||
|
else
|
||||||
|
color=m # purple with my color scheme
|
||||||
|
fi
|
||||||
|
|
||||||
|
# if it's sunny, make the status brighter
|
||||||
|
echo "$data" | grep -qP 'sunny|(mostly )?clear|partly cloudy' && {
|
||||||
|
color=$( echo $color | tr '[:lower:]' '[:upper:]' )
|
||||||
|
}
|
||||||
|
|
||||||
|
echo -e "\005{+ .$color}${weather_f}F/${weather_c}C $wind\005{-}"
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Displays wireless signal strength for the given interface
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 Mike Gerwitz
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
##
|
||||||
|
|
||||||
|
iface="$1"
|
||||||
|
|
||||||
|
iwconfig "$iface" \
|
||||||
|
| grep -o 'Link Quality=[^ ]\+' \
|
||||||
|
| cut -d'=' -f2 \
|
||||||
|
| awk -F/ '
|
||||||
|
{
|
||||||
|
quality = ($1 / $2 * 100);
|
||||||
|
color = ".";
|
||||||
|
|
||||||
|
if ( quality >= 75 )
|
||||||
|
color = "g";
|
||||||
|
else if ( quality >= 50 )
|
||||||
|
color = "y";
|
||||||
|
else if ( quality < 25 )
|
||||||
|
{
|
||||||
|
color = "r";
|
||||||
|
}
|
||||||
|
|
||||||
|
printf "\005{+ .m}%s:\005{-}\005{+ .%c}%d%%\005{-}", \
|
||||||
|
"'$1'", color, quality;
|
||||||
|
}
|
||||||
|
'
|
|
@ -0,0 +1,63 @@
|
||||||
|
# personal screenrc - mikegerwitz
|
||||||
|
#
|
||||||
|
# This configuration file is provided in the hope that it will be helpful in
|
||||||
|
# configuring your own software, but WITHOUT ANY WARRANTY. Please be mindful of
|
||||||
|
# what is executing on your system.
|
||||||
|
|
||||||
|
#
|
||||||
|
# backtick commands
|
||||||
|
#
|
||||||
|
backtick 1 1 1 date '+%Y-%m-%d %H:%M:%S'
|
||||||
|
backtick 2 303 303 .screen/getip
|
||||||
|
backtick 3 999999 999999 whoami
|
||||||
|
|
||||||
|
backtick 50 59 59 .screen/ssh-agent-key
|
||||||
|
backtick 51 59 59 .screen/secstat
|
||||||
|
|
||||||
|
backtick 100 3 3 .screen/load-avg
|
||||||
|
backtick 101 0 0 .screen/mail
|
||||||
|
backtick 102 287 287 .screen/weather
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# vim-style keybindings
|
||||||
|
#
|
||||||
|
bind j focus down
|
||||||
|
bind k focus up
|
||||||
|
bindkey ^b mapnotnext
|
||||||
|
bindkey -k k2 screen htop
|
||||||
|
bindkey -k k3 screen $EDITOR
|
||||||
|
bindkey -k k4 screen mutt
|
||||||
|
|
||||||
|
#
|
||||||
|
# general options
|
||||||
|
#
|
||||||
|
startup_message off
|
||||||
|
compacthist off
|
||||||
|
altscreen on
|
||||||
|
fit
|
||||||
|
|
||||||
|
attrcolor b ".i"
|
||||||
|
termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'
|
||||||
|
defbce "on"
|
||||||
|
|
||||||
|
# memory is cheap
|
||||||
|
defscrollback 10000
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# status lines
|
||||||
|
#
|
||||||
|
hardstatus alwayslastline
|
||||||
|
caption always "%{= kw}%-Lw%{=r}%n*%f %t%{-}%+Lw %= %{+b}%3`@%H %2`%{-}%{-}"
|
||||||
|
hardstatus string "%{= kw}%{+b}Happy Hacking%{-}%50`%51` %= %101` %100` %102` %1`%{-}"
|
||||||
|
sorendition "= kW"
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# source any local configs at the end of all this so that the settings in there
|
||||||
|
# will override the settings here (this is needed, for example, because I have
|
||||||
|
# certain status indicators that I may use at work that differ from my personal
|
||||||
|
# PC)
|
||||||
|
#
|
||||||
|
source .screenrc-local
|
|
@ -0,0 +1,201 @@
|
||||||
|
" vi: set tw=0
|
||||||
|
"
|
||||||
|
" Mike Gerwitz's personal vim configuration
|
||||||
|
"
|
||||||
|
" Copyright (C) 2013 Mike Gerwitz
|
||||||
|
"
|
||||||
|
" This program is free software: you can redistribute it and/or modify
|
||||||
|
" it under the terms of the GNU General Public License as published by
|
||||||
|
" the Free Software Foundation, either version 3 of the License, or
|
||||||
|
" (at your option) any later version.
|
||||||
|
"
|
||||||
|
" This program is distributed in the hope that it will be useful,
|
||||||
|
" but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
" GNU General Public License for more details.
|
||||||
|
"
|
||||||
|
" You should have received a copy of the GNU General Public License
|
||||||
|
" along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
"
|
||||||
|
" Refactoring needed.
|
||||||
|
" "
|
||||||
|
|
||||||
|
" pathogen
|
||||||
|
call pathogen#runtime_append_all_bundles()
|
||||||
|
|
||||||
|
" general configuration options
|
||||||
|
set ai
|
||||||
|
set autochdir
|
||||||
|
set backspace=indent,eol,start
|
||||||
|
set backupdir=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp
|
||||||
|
set directory=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp
|
||||||
|
set et
|
||||||
|
set exrc
|
||||||
|
set fdm=marker
|
||||||
|
set history=9000
|
||||||
|
set hlsearch
|
||||||
|
set incsearch
|
||||||
|
set number
|
||||||
|
set ruler
|
||||||
|
set sessionoptions=curdir,folds,globals,help,localoptions,options,resize,tabpages,winpos,winsize
|
||||||
|
set scrolloff=4
|
||||||
|
set spelllang=en_us
|
||||||
|
set spellfile=~/.vim/spellfile/common.add,~/.vim/spellfile/dev.add
|
||||||
|
set sw=4
|
||||||
|
set t_Co=256
|
||||||
|
set title
|
||||||
|
set ts=4
|
||||||
|
set tw=80
|
||||||
|
set undolevels=3000
|
||||||
|
set updatecount=50
|
||||||
|
set visualbell
|
||||||
|
syn on
|
||||||
|
|
||||||
|
" BASH-like tab completion
|
||||||
|
set wildmenu
|
||||||
|
set winminheight=0
|
||||||
|
set wildmode=longest,list,full
|
||||||
|
|
||||||
|
" enable filetype plugins
|
||||||
|
filetype on
|
||||||
|
filetype plugin on
|
||||||
|
|
||||||
|
" show whitespace characters
|
||||||
|
set list listchars=tab:>-,trail:•,precedes:•
|
||||||
|
|
||||||
|
" printing
|
||||||
|
set printfont=:h8
|
||||||
|
set printoptions=paper:letter,number:y,syntax:y,left:15pc
|
||||||
|
nmap <leader>ps :set printoptions+=duplex:short<CR>
|
||||||
|
nmap <leader>pS :set printoptions-=duplex:short<CR>
|
||||||
|
|
||||||
|
" closetag.vim
|
||||||
|
let b:unaryTagsStack=''
|
||||||
|
au FileType html,xml,xslt,xsd source ~/.vim/plugin/closetag.vim
|
||||||
|
|
||||||
|
" abbreviations
|
||||||
|
iab __NAME Mike Gerwitz
|
||||||
|
iab __UN mikegerwitz
|
||||||
|
iab __EMAIL mike@mikegerwitz.com
|
||||||
|
|
||||||
|
" save a generic session in case of an oopsie
|
||||||
|
au BufWrite * silent :call WriteSessAuto()
|
||||||
|
au BufWrite * silent :call WriteSessAuto()
|
||||||
|
|
||||||
|
function! WriteSessAuto()
|
||||||
|
" one capital letter for the Sessname global so that we can store it in the
|
||||||
|
" session file
|
||||||
|
let filename = '~/.vimsess-' .
|
||||||
|
\ ( !exists( 'g:Sessname' ) || ( empty( g:Sessname ) )
|
||||||
|
\ ? 'autosave' : (g:Sessname)
|
||||||
|
\ )
|
||||||
|
|
||||||
|
exec 'mksession! ' . filename
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" custom statusline
|
||||||
|
set statusline=%<%f\ %h%m%r%=[%n]\ \%-14.([%b:%B]\ \ %l,%c%V%)\ %P
|
||||||
|
|
||||||
|
" make the C-e and C-y mappings less painful
|
||||||
|
nnoremap <C-e> 3<C-e>
|
||||||
|
nnoremap <C-y> 3<C-y>
|
||||||
|
"
|
||||||
|
" redraw
|
||||||
|
nmap <silent> <leader>R :redraw!<CR>
|
||||||
|
|
||||||
|
" nohlsearch shortcut
|
||||||
|
nmap <silent> <leader>h :silent :nohlsearch<CR>
|
||||||
|
|
||||||
|
" for MultipleSearch
|
||||||
|
let g:MultipleSearchMaxColors = 10
|
||||||
|
|
||||||
|
" toggle cursorline/cursorcolumn
|
||||||
|
nmap <leader>c :set cursorline! cursorcolumn!<CR>
|
||||||
|
nmap <leader>C :set cursorcolumn!<CR>
|
||||||
|
|
||||||
|
" omnicomplete
|
||||||
|
set ofu=syntaxcomplete#Complete
|
||||||
|
autocmd FileType python set omnifunc=pythoncomplete#Complete
|
||||||
|
autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS
|
||||||
|
autocmd FileType html set omnifunc=htmlcomplete#CompleteTags
|
||||||
|
autocmd FileType css set omnifunc=csscomplete#CompleteCSS
|
||||||
|
autocmd FileType xml,xsd,xslt set omnifunc=xmlcomplete#CompleteTags
|
||||||
|
autocmd FileType php set omnifunc=phpcomplete#CompletePHP
|
||||||
|
autocmd FileType c set omnifunc=ccomplete#Complete
|
||||||
|
|
||||||
|
|
||||||
|
" maps
|
||||||
|
""""""
|
||||||
|
" easy window switching
|
||||||
|
map <C-J> <C-W>j<C-W>_
|
||||||
|
map <C-K> <C-W>k<C-W>_
|
||||||
|
|
||||||
|
" easy common alignments
|
||||||
|
map <C-A>= :Align =
:set et
|
||||||
|
map <C-A>> :Align =>
:set et
|
||||||
|
map <C-A>A :Align AS
:set et
|
||||||
|
|
||||||
|
|
||||||
|
" focus fold
|
||||||
|
" map zO zMzo
|
||||||
|
|
||||||
|
" easy maximize window
|
||||||
|
map <C-W><SPACE> <C-W>_<C-W>k4<C-W>+<C-W>j
|
||||||
|
map <C-W><C-SPACE> <C-W><C><SPACE>
|
||||||
|
|
||||||
|
" toggle above fold
|
||||||
|
map zK zkza``
|
||||||
|
" toggle below field
|
||||||
|
map zJ zjza``
|
||||||
|
|
||||||
|
" comment out selected lines
|
||||||
|
map <C-A><C-D>c :s/^/\/\//
|
||||||
|
" remove comments
|
||||||
|
map <C-A><C-D>x :s/^\/\///
|
||||||
|
|
||||||
|
" CommandT
|
||||||
|
let g:CommandTMaxFiles=100000
|
||||||
|
map <silent> <leader>t :CommandT ~/gitrepos<CR>
|
||||||
|
map <silent> <leader>T :CommandTFlush<CR>:CommandT ~/gitrepos<CR>
|
||||||
|
|
||||||
|
map <silent> <leader>Hr :SearchReset<CR>:nohlsearch<CR>
|
||||||
|
map <silent> <leader>HR :SearchBuffersReset<CR>:nohlsearch<CR>
|
||||||
|
map <silent> <leader>vs :source ~/.vimrc<CR>
|
||||||
|
map <silent> <leader>gs :source ~/.vimrc<CR>:source ~/.gvimrc<CR>
|
||||||
|
map <silent> <leader>ss :setlocal spell spelllang=en_us<CR>
|
||||||
|
map <silent> <leader>S :setlocal nospell<CR>
|
||||||
|
map <silent> <leader>p :set paste<CR>
|
||||||
|
map <silent> <leader>P :set nopaste<CR>
|
||||||
|
|
||||||
|
" obnoxious mail ending chars (e.g. mutt)
|
||||||
|
map <silent> <leader>M :%s/=\n//g<CR>
|
||||||
|
|
||||||
|
" git blame history made easy
|
||||||
|
map <silent> <leader>gb :%!git blame -- %<CR>
|
||||||
|
map <silent> <leader>g< ^"byt :exe '%!git blame '.@b.'^ -- %'<CR>
|
||||||
|
map <silent> <leader>g. ^"byt :exe '%!git log -p '.@b.'^..'.@b<CR>
|
||||||
|
|
||||||
|
" snippets
|
||||||
|
function! ReloadSnippets( snippets_dir, ft )
|
||||||
|
if strlen( a:ft ) == 0
|
||||||
|
let filetype = "_"
|
||||||
|
else
|
||||||
|
let filetype = a:ft
|
||||||
|
endif
|
||||||
|
|
||||||
|
call ResetAllSnippets()
|
||||||
|
call GetSnippets( a:snippets_dir, filetype )
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" reload snippets
|
||||||
|
nmap <leader>rs :call ReloadSnippets(snippets_dir, &filetype)<CR>
|
||||||
|
|
||||||
|
" move single line of nested XML onto multiple lines and indent
|
||||||
|
map <leader>xj ^f>a<CR><ESC>>>$F<i<CR><ESC><<k^
|
||||||
|
map <leader>xJ ^f/ldF A<CR><C-_><ESC>O<TAB>
|
||||||
|
|
||||||
|
" xmllint
|
||||||
|
map <leader>xl :%!xmllint --format -<CR>
|
||||||
|
|
||||||
|
" system-specific configuration
|
||||||
|
source ~/.vimrc-local
|
|
@ -0,0 +1,18 @@
|
||||||
|
setxkbmap -option ctrl:nocaps
|
||||||
|
xmodmap ~/.xmodmap
|
||||||
|
xset mouse 5/0.1
|
||||||
|
xsetroot -cursor_name arrow
|
||||||
|
|
||||||
|
# .Xresources is managed by software (e.g. Puppet) whereas .Xresources-local
|
||||||
|
# may contain any system-specific configuration
|
||||||
|
xrdb -merge ~/.Xresources
|
||||||
|
test -f ~/.Xresources-local && xrdb -merge ~/.Xresources-local
|
||||||
|
|
||||||
|
# .xprofile is *not* managed by software (such as Puppet) and may therefore
|
||||||
|
# be used for system-specific configuration
|
||||||
|
test -f ~/.xprofile && source ~/.xprofile
|
||||||
|
|
||||||
|
# screensaver can be disabled by creating ~/.noscreensaver (not managed)
|
||||||
|
test -f ~/.noscreensaver || xscreensaver &
|
||||||
|
|
||||||
|
exec xmonad
|
|
@ -0,0 +1,22 @@
|
||||||
|
|
||||||
|
splash: false
|
||||||
|
mode: blank
|
||||||
|
|
||||||
|
timeout: 0:01:00
|
||||||
|
fade: true
|
||||||
|
unfade: false
|
||||||
|
lock: true
|
||||||
|
lockTimeout: 0:00:05
|
||||||
|
passwdTimeout: 0:00:03
|
||||||
|
|
||||||
|
dpmsEnabled: true
|
||||||
|
dpmsQuickOff: false
|
||||||
|
dpmsStandby: 0:05:00
|
||||||
|
dpmsStandby: 0:10:00
|
||||||
|
dpmsOff: 0:30:00
|
||||||
|
|
||||||
|
timestamp: true
|
||||||
|
verbose: false
|
||||||
|
captureStderr: true
|
||||||
|
|
||||||
|
pointerHysteresis: 10
|
|
@ -0,0 +1,97 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Set up encrypted directory ~/.enc
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 Mike Gerwitz
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
# This encrypted directory strikes a balance between a full encrypted home
|
||||||
|
# directory (a feature provided by many modern GNU/Linux distributions) and
|
||||||
|
# privacy: Specifically, most files are configuration and do not really need
|
||||||
|
# to be private (indeed, many of them are even in my public repository).
|
||||||
|
#
|
||||||
|
# This expects that the ~/.enc{,-data} directories have already been created
|
||||||
|
# when the system was set up. Any data in either of the directories will be
|
||||||
|
# copied into the final, encrypted directory, with the ~/.enc-data contents
|
||||||
|
# taking precedence in the event of a filename conflict.
|
||||||
|
##
|
||||||
|
|
||||||
|
encdatadir="$HOME/.enc-data"
|
||||||
|
encdatadirtmp="$HOME/.enc-data.tmp"
|
||||||
|
encdir="$HOME/.enc"
|
||||||
|
readyfile=".ready"
|
||||||
|
|
||||||
|
# graceful exit if we've already been set up
|
||||||
|
[ -e "$encdatadir/$readyfile" ] && {
|
||||||
|
echo "$encdir is already set up."
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
# do not allow this action to be performed over SSH or while sshd is running
|
||||||
|
# and tell the user to ensure that all running processes are trusted (no
|
||||||
|
# keyloggers, etc)
|
||||||
|
[ "$1" != --shutit ] && pgrep '^sshd?$' &>/dev/null && {
|
||||||
|
echo "fatal: please disable SSH and close all connections" >&2
|
||||||
|
echo "fatal: and then verify all running processes" >&2
|
||||||
|
echo "fatal: (or pass --shutit if you're confident)" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# allows glob to match dotfiles
|
||||||
|
shopt -s dotglob || {
|
||||||
|
echo "fatal: failed to enable dotglob" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# move the existing dir so that we can copy the files back in after (just in
|
||||||
|
# case files were created in anticipation); also copy over existing .enc dir
|
||||||
|
# contents, having .enc-data contents take precedence
|
||||||
|
[ -e "$encdatadir" ] && {
|
||||||
|
mv -v "$encdatadir" "$encdatadirtmp" \
|
||||||
|
&& cp -rnv "$encdir"/* "$encdatadirtmp/" \
|
||||||
|
&& mkdir -v "$encdatadir" \
|
||||||
|
|| exit $?
|
||||||
|
}
|
||||||
|
|
||||||
|
# proceed (the nonempty options ignores the fact that ~/.enc---out mount
|
||||||
|
# point---is likely not empty)
|
||||||
|
echo "creating $encdatadir -> $encdir..."
|
||||||
|
encfs "$encdatadir" "$encdir" -ononempty \
|
||||||
|
|| {
|
||||||
|
err=$?
|
||||||
|
echo "fatal: failed!" >&2
|
||||||
|
exit $err
|
||||||
|
}
|
||||||
|
|
||||||
|
# this file will be copied into the encrypted dir and is an easy mount check
|
||||||
|
# for scripts
|
||||||
|
touch "$encdatadirtmp/.available"
|
||||||
|
|
||||||
|
# mark as complete (yes, we intend to put this directly into the encrypted
|
||||||
|
# data dir)
|
||||||
|
date +%s > "$encdatadir/$readyfile"
|
||||||
|
|
||||||
|
# copy previous data into the newly mounted and decrypted directory
|
||||||
|
mv -v "$encdatadirtmp"/* "$encdir/" \
|
||||||
|
&& find "$encdatadirtmp" -type f -exec shred -fuvz {} \; \
|
||||||
|
&& rm -rfv "$encdatadirtmp" \
|
||||||
|
|| {
|
||||||
|
err=$?
|
||||||
|
echo "fatal: $encdatadir created, but data copy failed" >&2
|
||||||
|
echo "fatal: please copy $encdatadirtmp/* manually" >&2
|
||||||
|
echo "fatal: and then shred its contents" >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
echo Setup complete.
|
|
@ -0,0 +1,70 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Forcefully unmount ~/.enc and run any hooks
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 Mike Gerwitz
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
# This script mercilessly unmounts ~/.enc by killing any processes that are
|
||||||
|
# using files within it, running hooks both before and after. The preunmount
|
||||||
|
# hook has the chance to abort or delay the operation (delay by re-invoking
|
||||||
|
# this script).
|
||||||
|
#
|
||||||
|
# Run this as root to be certain that unmount will succeed.
|
||||||
|
##
|
||||||
|
|
||||||
|
encpath="$HOME/.enc"
|
||||||
|
avail="$encpath/.available"
|
||||||
|
preunmount="$encpath/.preunmount"
|
||||||
|
postunmount="$encpath/.postunmount"
|
||||||
|
|
||||||
|
# if not mounted, then abort
|
||||||
|
[ -e "$avail" ] || exit
|
||||||
|
|
||||||
|
# execute pre-mount script to allow system-specific preparation
|
||||||
|
[ -x "$preunmount" ] && {
|
||||||
|
"$preunmount" || {
|
||||||
|
err=$?
|
||||||
|
echo "fatal: $preunmount failed!" >&2
|
||||||
|
exit $err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# kill anything using this process, attempting to do so gracefully first by
|
||||||
|
# giving them some time to handle SIGTERM, after which we force any
|
||||||
|
# remaining processes to terminate
|
||||||
|
s=5
|
||||||
|
fuser -Mm "$encpath" -k -TERM \
|
||||||
|
&& echo "Waiting $s seconds for above processes to terminate (SIGTERM)..." \
|
||||||
|
&& sleep "$s" \
|
||||||
|
&& echo "Terminating any remaining processes (SIGKILL)..." \
|
||||||
|
&& fuser -Mm "$encpath" -k -KILL
|
||||||
|
|
||||||
|
# now that no processes are using the directory, unmount
|
||||||
|
fusermount -u "$encpath" \
|
||||||
|
&& {
|
||||||
|
[ ! -x "$postunmount" ] || "$postunmount" || {
|
||||||
|
err=$?
|
||||||
|
echo "warning: unmounted, but $postunmount failed!"
|
||||||
|
exit $err
|
||||||
|
}
|
||||||
|
} \
|
||||||
|
|| {
|
||||||
|
err=$?
|
||||||
|
echo "fatal: umount failed!"
|
||||||
|
exit $?
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "$encpath unmounted."
|
|
@ -0,0 +1,59 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Decrypt ~/.enc and run any hooks
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 Mike Gerwitz
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
# Prompts to decrypt the encrypted directory after first running a premount
|
||||||
|
# script. Should the script succeed, mounting proceeds, after which a
|
||||||
|
# postmount script is run. In the event that the latter fails, the mount
|
||||||
|
# point will remain mounted, so any abort operations must occur in premount.
|
||||||
|
##
|
||||||
|
|
||||||
|
avail="$HOME/.enc/.available"
|
||||||
|
premount="$HOME/.enc/.premount"
|
||||||
|
postmount="$HOME/.enc/.postmount"
|
||||||
|
|
||||||
|
# enc-setup creates .available within the encrypted directory; if it's
|
||||||
|
# available, then ~/.enc-data is already mounted
|
||||||
|
[ -e "$avail" ] && exit
|
||||||
|
|
||||||
|
# execute pre-mount script to allow system-specific preparation (note that
|
||||||
|
# this premount script exists within the mount point, meaning it'll be
|
||||||
|
# hidden as soon as the mount succeeds)
|
||||||
|
[ -x "$premount" ] && {
|
||||||
|
"$premount" || {
|
||||||
|
err=$?
|
||||||
|
echo "fatal: $premount failed!" >&2
|
||||||
|
exit $err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# mount the directory understanding that ~/.enc is very likely non-empty (to
|
||||||
|
# provide ``secured'' defaults
|
||||||
|
encfs ~/.enc-data ~/.enc -ononempty \
|
||||||
|
&& {
|
||||||
|
[ ! -x "$postmount" ] || "$postmount" || {
|
||||||
|
err=$?
|
||||||
|
echo "warning: mounted, but $postmount failed!"
|
||||||
|
exit $err
|
||||||
|
}
|
||||||
|
} \
|
||||||
|
|| {
|
||||||
|
err=$?
|
||||||
|
echo "fatal: mount failed"
|
||||||
|
exit $err
|
||||||
|
}
|
Loading…
Reference in New Issue