diff options
| -rw-r--r-- | mkshrc | 453 | ||||
| -rw-r--r-- | shell/update | 43 |
2 files changed, 467 insertions, 29 deletions
@@ -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="[01;33m" + export LESS_TERMCAP_md="[01;33m" + export LESS_TERMCAP_me="[0m" + export LESS_TERMCAP_se="[0m" + export LESS_TERMCAP_so="[01;44;33m" + export LESS_TERMCAP_ue="[0m" + export LESS_TERMCAP_us="[01;36m" + + ## 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" -} |
