aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mkshrc453
-rw-r--r--shell/update43
2 files changed, 467 insertions, 29 deletions
diff --git a/mkshrc b/mkshrc
new file mode 100644
index 0000000..cc97e80
--- /dev/null
+++ b/mkshrc
@@ -0,0 +1,453 @@
+# Copyright 2019 Mitchell Riedstra
+
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+setaliases() {
+ alias ls="ls -F";
+ alias lt="ls -tF";
+ alias ll="ls -lhF";
+ alias llt="ls -tlhF";
+ alias g="grep";
+ alias m="more";
+ alias j="jobs";
+ alias p="pwd";
+ alias c="column"
+ alias ct="column -t"
+ alias eg='grep -E'
+ alias egv='grep -Ev'
+ alias search='grep -niRIE'
+ alias rot13="tr 'A-Za-z' 'N-ZA-Mn-za-m'"
+ alias setxkbmap-list="man xkeyboard-config"
+ alias showsshhosts="cat ~/.ssh/config ~/.ssh/inc/* | awk '/^[hH]ost /{print \$2}'"
+ # docker-getip $container_id
+ alias docker-getip="docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'"
+ alias xa='xargs -I{}'
+ alias gdb='gdb -q'
+ alias bc='bc -q'
+ alias python='/usr/bin/env python3 -q'
+ # Fun fact, Gnucash doesn't play nice when built against musl as a libc...
+ # go figure
+ alias gnucash_locale_fix='export LC_ALL=C; unset LANGUAGE; gnucash'
+
+ if [ "$(uname)" = "Linux" ] ; then
+ # Sets capslock to be another control key, only works with PS2 keyboards
+ alias unfuck_capslock='setkeycodes 3a 29'
+ fi
+}
+
+setcoloraliases() {
+ if [ `uname` = "Linux" ] ; then
+ alias ls="ls --color=auto -F";
+ alias lm='ls -lh --color=force | more';
+ elif [ `uname` = "FreeBSD" ] ; then
+ alias ls="ls -FG";
+ alias lm='CLICOLOR_FORCE="1" ls -l | less -r';
+ fi
+
+ grep --help | grep fucks - >/dev/null 2>&1
+ if [ $? -eq 0 ] ; then
+ alias grep="grep --color=auto";
+ alias egrep='egrep --color=auto'
+ alias search='egrep --color=auto -rnI';
+ fi
+
+ alias diff="$(which diff colordiff 2>/dev/null | tail -n 1)";
+ alias t='tree -CdL'
+}
+
+setsudoaliases() {
+ # Prefer doas if available, as it's likely to be configured by me over sudo
+ _sudo="$(which doas sudo 2>/dev/null | sed 1q)"
+ if [ -x "$_sudo" ] ; then
+ # Package managers
+ # Isn't it amazing how many distros you end up using?
+ alias apt-get="$_sudo apt-get"
+ alias apk="$_sudo apk"
+ alias apt="$_sudo apt"
+ alias apt-file="$_sudo apt-file"
+ alias yum="$_sudo yum"
+ alias dnf="$_sudo dnf"
+ alias pacman="$_sudo pacman"
+ alias xbps-install="$_sudo xbps-install"
+ alias xbps-remove="$_sudo xbps-remove"
+ alias pkg="$_sudo pkg"
+ alias pkg_add="$_sudo pkg_add"
+
+ # Filesystem utilities
+ alias zfs="$_sudo zfs"
+ alias zpool="$_sudo zpool"
+ alias btrfs="$_sudo btrfs"
+ alias mount="$_sudo mount"
+ alias umount="$_sudo umount"
+ fi
+}
+
+
+set_go() {
+ export GOPATH="${GOPATH:-$HOME/go}"
+ export PATH="$GOPATH/bin:$PATH"
+
+ _gobin="/usr/local/go/bin"
+ if [ -e "$_gobin" ] ; then
+ export PATH="$_gobin:$PATH"
+ fi
+}
+set_editor() {
+ if [ -z "$EDITORS" ] ; then
+ export EDITORS="ed vi vim"
+ fi
+
+ export EDITOR="$(which $EDITORS 2>/dev/null | tail -n1)"
+
+ export VISUAL="$EDITOR"
+
+ # Set an alias for our editor of choice
+ alias vi="$EDITOR"
+ alias vim="$EDITOR"
+ alias edit="$EDITOR"
+ alias e="$EDITOR"
+}
+set_pager() {
+ export PAGER="$(which cat more less 2>/dev/null | tail -n1)"
+}
+set_lang() {
+export CHARSET="$1";
+export LANG="$1";
+}
+
+# Usage debugstarttls $ipaddr:$port
+debugstarttls() {
+ openssl s_client -starttls smtp -crlf -connect "$1" "$2"
+}
+
+randmacgen() {
+ if [ "$(uname)" = "FreeBSD" ] ; then
+ LC_COLLATE=c
+ fi
+ tr -c -d '0123456789abcdef' < /dev/urandom \
+ | head -c 12 \
+ | sed 's!^M$!!;s!\-!!g;s!\.!!g;s!\(..\)!\1:!g;s!:$!!'
+ echo ""
+}
+# First argument is the interface on which to scan
+ipv6_local_hosts() {
+if ! [ -z $1 ] ; then
+ interface="$1"
+ ping6 -c 3 ff02::2%$interface \
+ | grep 'bytes from' \
+ | awk '{print $4}' \
+ | sort \
+ | uniq \
+ | sed -e's/:$//'
+else
+ echo "You need to specify an interface"
+fi
+}
+set_nocaps() {
+ setxkbmap -layout "us,de"
+ setxkbmap -option ctrl:nocaps
+ setxkbmap -option shift:breaks_caps
+ setxkbmap -option numpad:microsoft
+ setxkbmap -option grp:alt_space_toggle
+}
+# Usage: dir_oct:file_oct path
+setperms() {
+ _perm="$1"; shift
+ dir_perms=$(echo "$_perm" | awk -F: '{print $1}')
+ file_perms=$(echo "$_perm" | awk -F: '{print $2}')
+ find "$@" -type f -print0 | xargs -0 chmod "$file_perms"
+ find "$@" -type d -print0 | xargs -0 chmod "$dir_perms"
+}
+
+set_title() {
+ printf $'\033]0;'"%s"$'\007' "$1"
+}
+
+set_my_title() {
+ _load="Load Avg: $(_sys_load)"
+ _free_mem="M Free: $(_sys_memory)"
+ _uptime="Uptime: $(_sys_uptime)"
+ set_title "$(id -un)[$(hostname)] -- $_load $_free_mem $_uptime"
+}
+
+_sys_memory() {
+ ! [ -e $(which vmstat) ] && return
+ if [ `uname` = "Linux" ] ; then
+ vmstat | tail -n1 | awk '{print $4/1024}' | sed -e's/\..*$//g'
+ elif [ `uname` = "FreeBSD" ] ; then
+ vmstat | tail -n1 | awk '{print $5/1024}' | sed -e's/\..*$//g'
+ elif [ `uname` = "OpenBSD" ] ; then
+ vmstat | sed -n '$p' | awk '{print $4}' | sed 's/M$//'
+ fi
+}
+
+_sys_load() {
+ # Works on BSD too, neat.
+ uptime | sed -re's/^.*load averages?: ([0-9]+\.[0-9]+).*$/\1/g'
+}
+
+_sys_uptime() {
+ # Took awhile to figure out, but this works on BSD as well
+ uptime | sed -re's/^.*up[ ]+//g' -e's/^([^,]*),.*/\1/g' -e's/^([^ ]+)[ ]*(.).*/\1\2/g'
+}
+
+
+timestamp() {
+ date +%m.%d.%y_%H.%M.%S
+}
+
+checkSSHAgent() {
+ ssh_agent_conf="$HOME/.ssh/agent"
+ if [ -e "$ssh_agent_conf" ] ; then
+ . "$ssh_agent_conf"
+ fi
+ if ! ps -eo pid | grep -q "$SSH_AGENT_PID" \
+ || ! [ -e "$ssh_agent_conf" ] \
+ || [ -z "$SSH_AGENT_PID" ] ; \
+ then
+ ssh-agent -s | grep -v echo > "$ssh_agent_conf"
+ . "$ssh_agent_conf"
+ fi
+}
+
+
+
+setcolorterminal() {
+ case $TERM in
+ xterm-kitty)
+ # Prevent xterm-kitty from being turned into xterm-256color
+ return;
+ ;;
+ xterm*)
+ export TERM=xterm-256color
+ # printf $'\033]0;'"$(hostname)"$'\007';
+ ;;
+ screen*)
+ export TERM=screen-256color
+ # printf $'\033k'"$(whoami)"$'\033\\';
+ ;;
+ esac
+}
+
+setlscolors() {
+ if [ "$(uname)" = "Linux" ] ; then
+ export LS_COLORS='di=36;40:ln=1;31;40:so=32;40:pi=33;40:ex=1;32;40:bd=34;46:cd=34;43:su=0;41:sg=0;46:tw=0;42:ow=0;43:'
+ elif [ "$(uname)" = "FreeBSD" ] ; then
+ export LSCOLORS='gxBxcxdxCxegedabagacad'
+ fi
+}
+
+colormanpages() {
+ export LESS_TERMCAP_mb=""
+ export LESS_TERMCAP_md=""
+ export LESS_TERMCAP_me=""
+ export LESS_TERMCAP_se=""
+ export LESS_TERMCAP_so=""
+ export LESS_TERMCAP_ue=""
+ export LESS_TERMCAP_us=""
+
+ ## Gentoo is nuts
+ export GROFF_NO_SGR=1
+}
+
+pkg_switch_branch() {
+ _f="/etc/pkg/FreeBSD.conf"
+ cp $_f ${_f}.orig
+ sed -e's/quarterly/latest/' < ${_f}.orig > ${_f}
+}
+# System setup `chroot`, useful mainly on Linux
+syschroot() {
+ CHDIR=$1
+ PROG=$2
+ CUR_PS1="$PS1"
+ PS1="(CHROOT) # "
+ mount -t proc none "$CHDIR/proc"
+ mount -o bind /dev "$CHDIR/dev"
+ mount -o bind /dev/pts "$CHDIR/dev/pts"
+ mount -o bind /sys "$CHDIR/sys"
+ mount -o bind /run "$CHDIR/run"
+ if [ "$PROG" = "/bin/bash" ] ; then
+ PS1="(CHROOT) [ \u@\h \w ] # "
+ fi
+ chroot "$CHDIR" "$PROG"
+ umount "$CHDIR/dev/pts" "$CHDIR/dev" "$CHDIR/sys" "$CHDIR/proc" \
+ "$CHDIR/run"
+ PS1="$CUR_PS1"
+}
+pull() {
+ url=""
+ file=""
+ while [ $# -gt 0 ] ; do
+ case $1 in
+ -f)
+ file="$2"
+ shift; shift; ;;
+ -u)
+ url="$2"
+ shift; shift; ;;
+ esac
+ done
+ CMD="$(which curl wget fetch 2>/dev/null | tail -n1)"
+
+ case $CMD in
+ *curl) "$CMD" "$url" > "$file" ;;
+ *wget) "$CMD" "$url" -O "$file" ;;
+ *fetch) "$CMD" "$url" -o "$file" ;;
+ esac
+}
+pulldotfile() {
+ file="$1"
+ destfile="$(basename "${file}")"
+ pull -u "${UPDATE_URL}${file}" -f "$HOME/.${destfile}"
+}
+_make_ssh_dir_if_not_exists() {
+ auth_keys="$HOME/.ssh/authorized_keys"
+ if ! [ -d $HOME/.ssh ] ; then mkdir $HOME/.ssh ; fi
+ chmod 700 $HOME/.ssh
+ chmod 600 $auth_keys
+}
+_pullkeys() {
+ url="$1"; shift
+ _timestamp="$(timestamp)"
+ _make_ssh_dir_if_not_exists
+ auth_keys="$HOME/.ssh/authorized_keys"
+ mv "$auth_keys" "${auth_keys}.${_timestamp}" || \
+ echo "Authorized Keys do not currently exist"
+ pull -u "$url" -f "$auth_keys" || \
+ mv "${auth_keys}.${_timestamp}" "$auth_keys"
+ ssh-keygen -lf "$auth_keys" || \
+ mv "${auth_keys}.${_timestamp}" "$auth_keys"
+
+ chmod 600 $auth_keys
+}
+pullkeys() {
+ file="keys/$1"; shift;
+ url="${UPDATE_URL}${file}"
+ _pullkeys "$url"
+}
+pullkeys_github() {
+ _username="$1"; shift;
+ url="https://github.com/${_username}.keys"
+ _pullkeys "$url"
+}
+pulltermcolors() {
+ file="$HOME/bin/terminal-colors"
+ if ! [ -d $HOME/bin ] ; then
+ mkdir $HOME/bin
+ fi
+ pull -u ${UPDATE_URL}/util/terminal-colors -f $file
+ chmod +x $file
+}
+updatetmuxconf() {
+ pulldotfile "tmux/tmux.conf"
+ pulldotfile "tmux/tmux_helper.sh"
+ if ! [ -e $HOME/.tmux.conf.local ] && [ `id -u` -eq 0 ] ; then
+ # If I ever change the color from green this will have to be updated I guess
+ grep 'green' $HOME/.tmux.conf | sed -e's/green/red/g' > $HOME/.tmux.conf.local
+ elif ! [ -e $HOME/.tmux.conf.local ] ; then
+ touch $HOME/.tmux.conf.local
+ fi
+}
+updategitconf() {
+ file="gitconfig/$1"
+ pull -u "${UPDATE_URL}${file}" -f "$HOME/.gitconfig"
+}
+updateshell() {
+ pulldotfile "mkshrc"
+ . $HOME/.mkshrc
+}
+updatevimrc() {
+ OLDWD="$(pwd)"
+ cd "$HOME"
+ git clone "$VIM_GIT_URL" .vim
+ if [ $? -gt 0 ] ; then
+ cd $HOME/.vim
+ git pull origin master
+ else
+ cd $HOME/.vim
+ fi
+ ./setup.sh && \
+ ./link-vimrc.sh
+ cd $OLDWD
+}
+updatevimrc_basic() {
+ pull -u "$VIM_BASIC_URL" -f ~/.vimrc
+}
+
+
+
+
+SHELL_CONFIG=".mkshrc"
+COLOR=0
+case "$TERM" in
+ xterm*) COLOR=1;;
+ *256color) COLOR=1;;
+esac
+
+export EDITORS="ed vi vim "
+export PATH="$HOME/bin:$PATH"
+
+UPDATE_URL="https://git.riedstra.us/mitch/dotfiles.git/plain/"
+VIM_GIT_URL="https://git.riedstra.us/mitch/vim-cfg.git"
+VIM_BASIC_URL="https://git.riedstra.us/mitch/vim-cfg.git/plain/basic.vim"
+
+PRELOAD="$HOME/${SHELL_CONFIG}.pre"
+LOCAL="$HOME/${SHELL_CONFIG}.local"
+
+# Don't put any variables below this, as they can't be overridden before the
+# functions if you do that
+
+# Load pre config
+if [ -e $PRELOAD ] ; then
+ . $PRELOAD
+fi
+
+set_pager
+set_editor
+# requires misc
+# set_go
+
+setaliases
+setsudoaliases
+
+# checkSSHAgent
+
+
+# Nasty conditional for support of many different shells
+if
+ ! [ -z "$KSH_VERSION" ] ||
+ [ $SHELL = "/bin/ksh" ] ||
+ [ $SHELL = "/bin/mksh" ] ||
+ [ $SHELL = "/usr/bin/mksh" ] ||
+ [ $SHELL = "/usr/local/bin/mksh" ]
+then
+ export HISTFILE="$HOME/.ksh_history"
+ set -o emacs
+ bind ^L=clear-screen
+elif [ $SHELL = "/bin/sh" ] && [ "$(uname)" = "FreeBSD" ] ; then
+ set -o emacs
+ export PS1="$(whoami)"'@\h:\w \$ '
+elif ! [ -z "$BASH" ] ; then
+ export PROMPT_COMMAND="set_my_title"
+fi
+
+if [ $COLOR -eq 1 ] ; then
+ colormanpages
+ setcolorterminal
+ setcoloraliases
+ setlscolors
+fi
+
+# Include local configuration options
+if [ -f $LOCAL ] ; then
+ . $LOCAL
+fi
diff --git a/shell/update b/shell/update
index 0621f2a..a5ad86b 100644
--- a/shell/update
+++ b/shell/update
@@ -1,13 +1,3 @@
-
-pulltermcolors() {
- file="$HOME/bin/terminal-colors"
- if ! [ -d $HOME/bin ] ; then
- mkdir $HOME/bin
- fi
- pull -u ${UPDATE_URL}/terminal-colors -f $file
- chmod +x $file
-}
-
pull() {
url=""
file=""
@@ -31,7 +21,8 @@ pull() {
}
pulldotfile() {
file="$1"
- pull -u "${UPDATE_URL}${file}" -f "$HOME/.${file}"
+ destfile="$(basename "${file}")"
+ pull -u "${UPDATE_URL}${file}" -f "$HOME/.${destfile}"
}
_make_ssh_dir_if_not_exists() {
auth_keys="$HOME/.ssh/authorized_keys"
@@ -63,9 +54,17 @@ pullkeys_github() {
url="https://github.com/${_username}.keys"
_pullkeys "$url"
}
+pulltermcolors() {
+ file="$HOME/bin/terminal-colors"
+ if ! [ -d $HOME/bin ] ; then
+ mkdir $HOME/bin
+ fi
+ pull -u ${UPDATE_URL}/util/terminal-colors -f $file
+ chmod +x $file
+}
updatetmuxconf() {
- pulldotfile "tmux.conf"
- pulldotfile "tmux_helper.sh"
+ pulldotfile "tmux/tmux.conf"
+ pulldotfile "tmux/tmux_helper.sh"
if ! [ -e $HOME/.tmux.conf.local ] && [ `id -u` -eq 0 ] ; then
# If I ever change the color from green this will have to be updated I guess
grep 'green' $HOME/.tmux.conf | sed -e's/green/red/g' > $HOME/.tmux.conf.local
@@ -83,8 +82,8 @@ updateshell() {
}
updatevimrc() {
OLDWD="$(pwd)"
- cd $HOME
- git clone $VIM_GIT_URL .vim
+ cd "$HOME"
+ git clone "$VIM_GIT_URL" .vim
if [ $? -gt 0 ] ; then
cd $HOME/.vim
git pull origin master
@@ -98,20 +97,6 @@ updatevimrc() {
updatevimrc_basic() {
pull -u "$VIM_BASIC_URL" -f ~/.vimrc
}
-placebasicvimrc() {
- if [ -z "$1" ] ; then
- echo All arguments are passed to SSH, but you need at least one
- return
- fi
- _TMP="$(mktemp)"
- if [ -z "$_TMP" ] ; then
- echo Cannot continue, temp file cannot be zero length!;
- return
- fi
- pull -u "$VIM_BASIC_URL" -f "$_TMP"
- cat "$_TMP" | ssh "$@" "cat - > ~/.vimrc"
- rm "$_TMP"
-}