commit 3a9ec570d9bbd29e2c99f3e7e273cbc1b511f11b Author: ayakael Date: Tue Apr 3 13:02:39 2018 -0400 Initial commit diff --git a/zshalias b/zshalias new file mode 100644 index 0000000..fd0d588 --- /dev/null +++ b/zshalias @@ -0,0 +1,8 @@ +# Global aliases +alias sudo='sudo ' +alias ls='ls --color=always -al' +alias dirs='dirs -v' +alias mkdir='mkdir -p' +alias rsync='rsync --info=progress2' + +source ~/.zshalias diff --git a/zshenv b/zshenv new file mode 100644 index 0000000..3216907 --- /dev/null +++ b/zshenv @@ -0,0 +1,6 @@ +# Global exports +export VISUAL=nano +export EDITOR=nano +export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket) + +source ~/.zshenv diff --git a/zshps b/zshps new file mode 100644 index 0000000..b8349ff --- /dev/null +++ b/zshps @@ -0,0 +1,146 @@ +# Prompt Shell builder + # [1] Connection security + # Connected on remote machine, via ssh (good). + if [ -n "${SSH_CONNECTION}" ]; then + CONNECTION_LEFT="%F{green}[%f" + CONNECTION_RIGHT="%F{green}]%f" + # Connected on remote machine, not via ssh (bad). + elif [ "${DISPLAY%%:0*}" != "" ]; then + CONNECTION_LEFT="%K{white}%F{red}[%f%k" + CONNECTION_RIGHT="%K{white}%F{red}]%f%k" + # Connected on local machine. + else + CONNECTION_LEFT="[" + CONNECTION_RIGHT="]" + fi + + + # [2] User type + # Root + if [[ ${USER} = "root" ]]; then + USER_PS="%F{red}%n%f" + # Admin + elif groups | grep -qw prod; then + USER_PS="%F{yellow}%n%f" + # Normal + else + USER_PS="%B%F{black}%n%f%b" + fi + # [3] Random color "@" + function random_color() { + COLOR_DB=(black red green yellow blue magenta cyan white) + RANDOM_COLOR_NO=$(shuf -i 0-15 -n 1) + if [[ ${RANDOM_COLOR_NO} -le 7 ]]; then + RANDOM_AT="%F{$COLOR_DB[$RANDOM_COLOR_NO]}@%f" + else + RANDOM_COLOR_NO=$(( ${RANDOM_COLOR_NO} - 8 )) + RANDOM_AT="%B%F{$COLOR_DB[$RANDOM_COLOR_NO]}@%f%b" + fi + } + + # [4] System load indicator + # Returns usage (script inspired by Paul Colby's cpu.sh script) + function check_load() { + while true; do + unset DIFF_IDLE + unset DIFF_TOTAL + unset DIFF_USAGE + unset TOTAL + unset IDLE + unset VALUE + unset CPU + for i in {1..2}; do + CPU=(`sed -n 's/^cpu\s//p' /proc/stat`) + IDLE[$i]=${CPU[4]} # Just the idle CPU time. + for VALUE in "${CPU[@]}"; do + TOTAL[$i]=$((${TOTAL[$i]}+$VALUE)) + done + if [ $i = 1 ]; then + sleep 2 + fi + done + # Returns a color indicating system load. + # Calculate the CPU usage since we last checked. + DIFF_IDLE=$(( ${IDLE[2]} - ${IDLE[1]} )) + DIFF_TOTAL=$(( ${TOTAL[2]} - ${TOTAL[1]} )) + DIFF_USAGE=$(( (1000*($DIFF_TOTAL - $DIFF_IDLE) / $DIFF_TOTAL+5) / 10 )) + echo $DIFF_USAGE > /dev/shm/DIFF_USAGE + done + } + if [ ! -f /dev/shm/DIFF_USAGE ]; then + echo 0 > /dev/shm/DIFF_USAGE + chmod 777 /dev/shm/DIFF_USAGE + fi + if [ ! -f /dev/shm/DIFF_USAGE.pid ]; then + echo 0 > /dev/shm/DIFF_USAGE.pid + chmod 777 /dev/shm/DIFF_USAGE.pid + fi + if ! eval ps -p $(cat /dev/shm/DIFF_USAGE.pid) > /dev/null 2>&1; then + check_load & + echo $! > /dev/shm/DIFF_USAGE.pid + fi + function load_color() { + # Load vars + # Small load + SLOAD=30 + # Medium load + MLOAD=60 + # Large load + LLOAD=80 + if [ $(cat /dev/shm/DIFF_USAGE) -gt ${LLOAD} ]; then + LOAD="%F{red}%m%f" + elif [ $(cat /dev/shm/DIFF_USAGE) -gt ${MLOAD} ]; then + LOAD="%F{yellow}%m%f" + elif [ $(cat /dev/shm/DIFF_USAGE) -gt ${SLOAD} ]; then + LOAD="%F{green }%m%f" + else + LOAD="%B%F{black}%m%f%b" + fi + } + + + # [5] Disk space indicator + function disk_color(){ + if [ ! -w "${PWD}" ] ; then + DISK_COLOR=$fg[red] + # No 'write' privilege in the current directory. + elif [ -s "${PWD}" ] ; then + local used=$(command df -P "$PWD" | awk 'END {print $5} {sub(/%/,"")}') + if [ ${used} -gt 85 ]; then + # Disk almost full (>85%) + DISK="%F{red}%1~%f" + elif [ ${used} -gt 60 ]; then + # Free disk space almost gone + DISK="%F{yellow}%1~%f" + else + # Free disk space is ok + DISK="%F{green}%1~%f" + fi + else + DISK="%B%F{black}%~%f%b" + # Current directory is size '0' (like /proc, /sys etc). + fi + } + +# PS builder + function buildPS() { + case ${TERM} in + *linux | rxvt-unicode-256color | xterm) + PS1="${CONNECTION_LEFT}${USER_PS}${RANDOM_AT}${LOAD}:${DISK}${CONNECTION_RIGHT}$ " + PS2="$ " + PS3="#?" + PS4='[${LINENO}]+ ' + ;; + + *) + PS1="${CONNECTION_LEFT}${USER_PS}${RANDOM_AT}${LOAD}:${DISK}${CONNECTION_RIGHT}$ " + ;; + esac + } + +precmd() { + random_color + load_color + disk_color + buildPS +} diff --git a/zshrc b/zshrc new file mode 100644 index 0000000..55ca33c --- /dev/null +++ b/zshrc @@ -0,0 +1,28 @@ +HISTFILE=~/.zhistory +HISTSIZE=1000 +SAVEHIST=1000 +setopt appendhistory autocd nomatch +unsetopt beep extendedglob notify +bindkey -e + +autoload -Uz compinit colors +compinit +colors + +gsrcArray=(/etc/zsh/zshps /etc/zsh/zshenv /etc/zsh/zshalias) +usrcArray=(~/.zshenv ~/.zshalias) + + +# Global settings +for gsrc in "${gsrcArray[@]}"; do + if [[ -f "${gsrc}" ]]; then + source "${gsrc}" + fi +done + +# User settings +for gsrc in "${gsrcArray[@]}"; do + if [[ -f "${gsrc}" ]]; then + source "${gsrc}" + fi +done