diff options
| author | Mitch Riedstra <mitch@riedstra.us> | 2019-09-12 23:10:58 -0400 |
|---|---|---|
| committer | Mitch Riedstra <mitch@riedstra.us> | 2019-09-12 23:10:58 -0400 |
| commit | 75ed7b4f86cd883f32b88d5613ff46d8a21f6794 (patch) | |
| tree | d38260dd255458b2a02193d4e0e2e0f6fe9f6027 | |
| parent | 879d857e0eafa1f716d9e156862154baf49d7655 (diff) | |
| download | dotfiles-75ed7b4f86cd883f32b88d5613ff46d8a21f6794.tar.gz dotfiles-75ed7b4f86cd883f32b88d5613ff46d8a21f6794.tar.xz | |
Split my shell configuration into multiple files and a build script to generate for multiple shells
| -rw-r--r-- | .gitignore | 3 | ||||
| -rw-r--r-- | mkshrc | 558 | ||||
| -rw-r--r-- | shell/aliases | 79 | ||||
| -rw-r--r-- | shell/ash | 23 | ||||
| -rw-r--r-- | shell/bash | 26 | ||||
| -rwxr-xr-x | shell/build.sh | 28 | ||||
| -rw-r--r-- | shell/colors | 38 | ||||
| -rw-r--r-- | shell/conf | 65 | ||||
| -rw-r--r-- | shell/ksh | 79 | ||||
| -rw-r--r-- | shell/misc | 34 | ||||
| -rw-r--r-- | shell/notice | 13 | ||||
| -rw-r--r-- | shell/update | 117 | ||||
| -rw-r--r-- | shell/utils | 120 |
13 files changed, 625 insertions, 558 deletions
@@ -1,2 +1,5 @@ *.txz *.7z +mkshrc +ashrc +bashrc @@ -1,558 +0,0 @@ -# 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. - -# If you wish to prevent non KSH shells from running this -# [ -z "$KSH_VERSION" ] && return - -# Restrict this to KSH only -if ! [ -z "$KSH_VERSION" ] ; then - precmd() { - typeset e=$? - - (( e )) && print -n "$e|" - } - set_ps1() { - PS1='$(precmd)${BG}${ACCENT_C}${ACCENT_P}${USER_C}${USER:=$(id -un)}@$(hostname)${ACCENT_C}${ACCENT_P} ${ACCENT_P}${PATH_C}${PWD:-?}${ACCENT_C}${ACCENT_P}${END_C} - ${END_P} [0m' - export PS1; - } - set_root_ps1() { - PS1='$(precmd)${BG}${ACCENT_C}${ACCENT_P}${HOST_C}$(hostname)${ACCENT_C}${ACCENT_P} ${ACCENT_P}${PATH_C}${PWD:-?}${ACCENT_C}${ACCENT_P}${END_C} - ${END_P} [0m' - export PS1; - } - # RED: 31, GREEN: 32, YELLOW: 33, BLUE: 34, MAGENTA: 35, CYAN: 36, WHITE: 37, GREY 38. and No color which is 0. - set_prompt() { - if [ `id -u` -eq 0 ] ; then - # Previously - # Red for root, and no username - # PS1="[1;31m[1;40m$(hostname)[1;33m \$PWD - echo $TERM | grep "256color$" > /dev/null 2>&1 - if [ $? -eq 0 ] ; then - BG="" - ACCENT_C="[38;5;196m" - ACCENT_P="|" - HOST_C="[38;5;196m" - PATH_C="[38;5;27m" - END_C="[38;5;196m" - set_root_ps1 - END_P="#" - else - BG="[1;40m" - ACCENT_C="[0;31m" - ACCENT_P="|" - HOST_C="[1;31m" - PATH_C="[1;33m" - END_P="#" - fi - set_root_ps1 - else - # Previously - # PS1="[1;32m[1;40m${USER:=$(id -un)}@$(hostname)[1;33m \$PWD - echo $TERM | grep "256color$" > /dev/null 2>&1 - if [ $? -eq 0 ] ; then - BG="" - ACCENT_C="[38;5;21m" - ACCENT_P="|" - USER_C="[38;5;121m" - PATH_C="[38;5;190m" - END_C="[38;5;226m" - END_P="%" - else - BG="[1;40m" - ACCENT_C="[1;34m" - ACCENT_P="|" - USER_C="[1;32m" - PATH_C="[1;33m" - END_C="[1;33m" - END_P="$" - fi - set_ps1 - fi - } - set_basic_prompt() { - if [ $(id -u) -eq 0 ] ; then - PS1='$(precmd)'"${USER:=$(id -un)}@$(hostname) \$PWD # " - else - PS1='$(precmd)'"${USER:=$(id -un)}@$(hostname) \$PWD $ " - fi - export PS1; - } -fi - -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 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 -} - -# 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 "" -} -# Run Steam -unfuck_steam() { -LD_PRELOAD='/usr/$LIB/libstdc++.so.6 /usr/$LIB/libgcc_s.so.1 /usr/$LIB/libxcb.so.1 /usr/$LIB/libgpg-error.so' /usr/bin/steam -} -# 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 -} -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 -} -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 -} -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 -} -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" -} - -# 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 -} - -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" - pull -u "${UPDATE_URL}${file}" -f "$HOME/.${file}" -} -_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" -} -updatetmuxconf() { - pulldotfile "tmux.conf" - pulldotfile "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 -} -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" -} - -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 -} - -set_editor() { - if [ -z "$EDITORS" ] ; then - export EDITOR="vi" - else - export EDITOR="$(which $EDITORS 2>/dev/null | tail -n1)" - fi - - 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"; -} - -#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -NEWLINE='$(printf "\n")' -SHELL_CONFIG=".mkshrc" -COLOR=0 -MY_LANG="en_US.UTF-8" - -export EDITORS="ed vi vim " -export PATH="$HOME/bin:$PATH" - -UPDATE_URL="https://www.rygel.us/etc/" -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_go -set_pager -set_editor -set_lang $MY_LANG - -setaliases -setsudoaliases - - -# Nasty conditional for support of many different shells -if - [ $SHELL = "/bin/ksh" ] || - [ $SHELL = "/bin/mksh" ] || - [ $SHELL = "/usr/bin/mksh" ] || - [ $SHELL = "/usr/local/bin/mksh" ] || - ! [ -z "$KSH_VERSION" ] -then - export HISTFILE="$HOME/.ksh_history" - set -o emacs - bind ^L=clear-screen - if [ $COLOR -eq 1 ] ; then - set_prompt - else - set_basic_prompt - fi -elif [ $SHELL = "/bin/zsh" ] || - [ $SHELL = "/usr/bin/zsh" ] || - [ $SHELL = "/usr/local/bin/zsh" ] ; then - set -o emacs -elif [ $SHELL = "/bin/sh" ] && [ "$(uname)" = "FreeBSD" ] ; then - set -o emacs - export PS1="$(whoami)"'@\h:\w \$ ' -else - [ $SHELL = "/bin/sh" ] && set_super_basic_prompt -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/aliases b/shell/aliases new file mode 100644 index 0000000..a734227 --- /dev/null +++ b/shell/aliases @@ -0,0 +1,79 @@ +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 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 +} + diff --git a/shell/ash b/shell/ash new file mode 100644 index 0000000..638c58a --- /dev/null +++ b/shell/ash @@ -0,0 +1,23 @@ + +set_pager +set_editor +setaliases + +set_ash_title() { + _load="Load Avg: $(_sys_load)" + _free_mem="M Free: $(free -m | sed -n 2p | awk '{print $3}')" + _uptime="Uptime: $(_sys_uptime)" + set_title "$(id -un)[$(hostname)] -- $_load $_free_mem $_uptime" +} + +function nonzero_return() { + RETVAL=$? + [ $RETVAL -ne 0 ] && echo "$RETVAL:" +} + +export PS1="\[\`set_ash_title\`\]\`nonzero_return\`[\t] <\u@\H> \w \\$ " + +# Same thing but red user/host combo +if [ $(id -u) -eq 0 ] ; then + export PS1="\[\`set_ash_title\`\]\`nonzero_return\`[\t] <\[\e[31m\]\u\[\e[m\]\[\e[31m\]@\[\e[m\]\[\e[31m\]\H\[\e[m\]> \w \\$ " +fi diff --git a/shell/bash b/shell/bash new file mode 100644 index 0000000..1106665 --- /dev/null +++ b/shell/bash @@ -0,0 +1,26 @@ + +colormanpages +setcolorterminal +setcoloraliases +setlscolors +set_pager +set_editor +setaliases +setsudoaliases + +export PROMPT_COMMAND="set_my_title" +export MANWIDTH=80 + +# checkSSHAgent + +function nonzero_return() { + RETVAL=$? + [ $RETVAL -ne 0 ] && echo "$RETVAL:" +} + +export PS1="\`nonzero_return\`[\t] <\u@\H> \w \\$ " + +# Same thing but red user/host combo +if [ $(id -u) -eq 0 ] ; then + export PS1="\`nonzero_return\`[\t] <\[\e[31m\]\u\[\e[m\]\[\e[31m\]@\[\e[m\]\[\e[31m\]\H\[\e[m\]> \w \\$ " +fi diff --git a/shell/build.sh b/shell/build.sh new file mode 100755 index 0000000..85b648c --- /dev/null +++ b/shell/build.sh @@ -0,0 +1,28 @@ +#!/bin/sh + +cat \ + notice \ + ksh \ + aliases \ + utils \ + colors \ + misc \ + update \ + conf \ + > ../mkshrc + +cat \ + notice \ + aliases \ + utils \ + colors \ + bash \ + > ../bashrc + +cat \ + notice \ + aliases \ + utils \ + colors \ + ash \ + > ../ashrc diff --git a/shell/colors b/shell/colors new file mode 100644 index 0000000..489179f --- /dev/null +++ b/shell/colors @@ -0,0 +1,38 @@ + +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 +} diff --git a/shell/conf b/shell/conf new file mode 100644 index 0000000..8ea9d27 --- /dev/null +++ b/shell/conf @@ -0,0 +1,65 @@ + +SHELL_CONFIG=".mkshrc" +COLOR=0 + +export EDITORS="ed vi vim " +export PATH="$HOME/bin:$PATH" + +UPDATE_URL="https://www.rygel.us/etc/" +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 + + +# Nasty conditional for support of many different shells +if + [ $SHELL = "/bin/ksh" ] || + [ $SHELL = "/bin/mksh" ] || + [ $SHELL = "/usr/bin/mksh" ] || + [ $SHELL = "/usr/local/bin/mksh" ] || + ! [ -z "$KSH_VERSION" ] +then + export HISTFILE="$HOME/.ksh_history" + set -o emacs + bind ^L=clear-screen + if [ $COLOR -eq 1 ] ; then + set_prompt + else + set_basic_prompt + fi +elif [ $SHELL = "/bin/sh" ] && [ "$(uname)" = "FreeBSD" ] ; then + set -o emacs + export PS1="$(whoami)"'@\h:\w \$ ' +else + [ $SHELL = "/bin/sh" ] && export PS1="$ " +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/ksh b/shell/ksh new file mode 100644 index 0000000..811b15b --- /dev/null +++ b/shell/ksh @@ -0,0 +1,79 @@ +# If you wish to prevent non KSH shells from running this +# [ -z "$KSH_VERSION" ] && return + +# Restrict this to KSH only +if ! [ -z "$KSH_VERSION" ] ; then + precmd() { + typeset e=$? + + (( e )) && print -n "$e|" + } + set_ps1() { + PS1='$(precmd)${BG}${ACCENT_C}${ACCENT_P}${USER_C}${USER:=$(id -un)}@$(hostname)${ACCENT_C}${ACCENT_P} ${ACCENT_P}${PATH_C}${PWD:-?}${ACCENT_C}${ACCENT_P}${END_C} + ${END_P} [0m' + export PS1; + } + set_root_ps1() { + PS1='$(precmd)${BG}${ACCENT_C}${ACCENT_P}${HOST_C}$(hostname)${ACCENT_C}${ACCENT_P} ${ACCENT_P}${PATH_C}${PWD:-?}${ACCENT_C}${ACCENT_P}${END_C} + ${END_P} [0m' + export PS1; + } + # RED: 31, GREEN: 32, YELLOW: 33, BLUE: 34, MAGENTA: 35, CYAN: 36, WHITE: 37, GREY 38. and No color which is 0. + set_prompt() { + if [ `id -u` -eq 0 ] ; then + # Previously + # Red for root, and no username + # PS1="[1;31m[1;40m$(hostname)[1;33m \$PWD + echo $TERM | grep "256color$" > /dev/null 2>&1 + if [ $? -eq 0 ] ; then + BG="" + ACCENT_C="[38;5;196m" + ACCENT_P="|" + HOST_C="[38;5;196m" + PATH_C="[38;5;27m" + END_C="[38;5;196m" + set_root_ps1 + END_P="#" + else + BG="[1;40m" + ACCENT_C="[0;31m" + ACCENT_P="|" + HOST_C="[1;31m" + PATH_C="[1;33m" + END_P="#" + fi + set_root_ps1 + else + # Previously + # PS1="[1;32m[1;40m${USER:=$(id -un)}@$(hostname)[1;33m \$PWD + echo $TERM | grep "256color$" > /dev/null 2>&1 + if [ $? -eq 0 ] ; then + BG="" + ACCENT_C="[38;5;21m" + ACCENT_P="|" + USER_C="[38;5;121m" + PATH_C="[38;5;190m" + END_C="[38;5;226m" + END_P="%" + else + BG="[1;40m" + ACCENT_C="[1;34m" + ACCENT_P="|" + USER_C="[1;32m" + PATH_C="[1;33m" + END_C="[1;33m" + END_P="$" + fi + set_ps1 + fi + } + set_basic_prompt() { + if [ $(id -u) -eq 0 ] ; then + PS1='$(precmd)'"${USER:=$(id -un)}@$(hostname) \$PWD # " + else + PS1='$(precmd)'"${USER:=$(id -un)}@$(hostname) \$PWD $ " + fi + export PS1; + } +fi + diff --git a/shell/misc b/shell/misc new file mode 100644 index 0000000..c589f10 --- /dev/null +++ b/shell/misc @@ -0,0 +1,34 @@ + +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 +} +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" +} diff --git a/shell/notice b/shell/notice new file mode 100644 index 0000000..bed1988 --- /dev/null +++ b/shell/notice @@ -0,0 +1,13 @@ +# 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. diff --git a/shell/update b/shell/update new file mode 100644 index 0000000..0621f2a --- /dev/null +++ b/shell/update @@ -0,0 +1,117 @@ + +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="" + 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" + pull -u "${UPDATE_URL}${file}" -f "$HOME/.${file}" +} +_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" +} +updatetmuxconf() { + pulldotfile "tmux.conf" + pulldotfile "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 +} +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" +} + + + diff --git a/shell/utils b/shell/utils new file mode 100644 index 0000000..c597e8a --- /dev/null +++ b/shell/utils @@ -0,0 +1,120 @@ + +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 +} + + |
