From fb6fd486e9b60f1ca501f61d7f24ab362834da9a Mon Sep 17 00:00:00 2001 From: pztrn Date: Tue, 2 Dec 2014 21:07:00 +0500 Subject: [PATCH] Initial commit. --- README.md | 9 +++++ zsh/00-init.zsh | 2 ++ zsh/10-exports.zsh | 11 ++++++ zsh/11-autocomplete.zsh | 3 ++ zsh/20-history.zsh | 11 ++++++ zsh/30-keys.zsh | 61 +++++++++++++++++++++++++++++++ zsh/40-prompt.zsh | 12 +++++++ zsh/50-aliases.zsh | 42 ++++++++++++++++++++++ zsh/99-fbterm.zsh | 20 +++++++++++ zsh/aliases/.gitkeep | 0 zsh/apps/.gitkeep | 0 zsh/apps/colors.app.zsh | 4 +++ zsh/lib/logger.lib.sh | 72 +++++++++++++++++++++++++++++++++++++ zsh/prompts/pztrn.zsh-theme | 72 +++++++++++++++++++++++++++++++++++++ zshrc | 54 ++++++++++++++++++++++++++++ 15 files changed, 373 insertions(+) create mode 100644 README.md create mode 100644 zsh/00-init.zsh create mode 100644 zsh/10-exports.zsh create mode 100644 zsh/11-autocomplete.zsh create mode 100644 zsh/20-history.zsh create mode 100644 zsh/30-keys.zsh create mode 100644 zsh/40-prompt.zsh create mode 100644 zsh/50-aliases.zsh create mode 100644 zsh/99-fbterm.zsh create mode 100644 zsh/aliases/.gitkeep create mode 100644 zsh/apps/.gitkeep create mode 100644 zsh/apps/colors.app.zsh create mode 100644 zsh/lib/logger.lib.sh create mode 100644 zsh/prompts/pztrn.zsh-theme create mode 100644 zshrc diff --git a/README.md b/README.md new file mode 100644 index 0000000..5976499 --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +# ZSH config + +This is a ZSH configuration, baked by [Stanislav N. aka pztrn](http://en.pztrn.name/). + +## Features + +* Fully modular design. +* Ability to write own mini-apps. +* Support libraries support. Just write them and place in 'lib'. Don't forget to source them! diff --git a/zsh/00-init.zsh b/zsh/00-init.zsh new file mode 100644 index 0000000..0d5d8b4 --- /dev/null +++ b/zsh/00-init.zsh @@ -0,0 +1,2 @@ +bindkey -e +zstyle :compinstall filename '${CONFIG_PATH}/.zshrc' diff --git a/zsh/10-exports.zsh b/zsh/10-exports.zsh new file mode 100644 index 0000000..bca1857 --- /dev/null +++ b/zsh/10-exports.zsh @@ -0,0 +1,11 @@ +export PATH="/home/pztrn/bin:/usr/lib:/usr/lib/colorgcc/bin:/usr/sbin:/sbin:/usr/local/heroku/bin:/data/Programs/hyde:$PATH" +export EDITOR=nano + +# More or less pretty fonts in Java programs. +export _JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=on -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel' +export JAVA_FONTS=/usr/share/fonts/TTF + +# PyENV. +export PYENV_ROOT="/data/.pyenv" +export PATH="$PYENV_ROOT/bin:$PATH" +eval "$(pyenv init -)" diff --git a/zsh/11-autocomplete.zsh b/zsh/11-autocomplete.zsh new file mode 100644 index 0000000..9695827 --- /dev/null +++ b/zsh/11-autocomplete.zsh @@ -0,0 +1,3 @@ +autoload -Uz compinit +compinit +zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*' diff --git a/zsh/20-history.zsh b/zsh/20-history.zsh new file mode 100644 index 0000000..4be8aaa --- /dev/null +++ b/zsh/20-history.zsh @@ -0,0 +1,11 @@ +HISTFILE=~/.histfile +HISTSIZE=1000 +SAVEHIST=1000 + +setopt extended_history +setopt hist_expire_dups_first +setopt hist_ignore_dups # ignore duplication command history list +setopt hist_ignore_space +setopt hist_verify +setopt inc_append_history +setopt share_history # share command history data diff --git a/zsh/30-keys.zsh b/zsh/30-keys.zsh new file mode 100644 index 0000000..c32db8d --- /dev/null +++ b/zsh/30-keys.zsh @@ -0,0 +1,61 @@ +# This configuration was completely stolen from Oh-My-ZSH: +# https://github.com/robbyrussell/oh-my-zsh/blob/master/lib/key-bindings.zsh +# Enchanced with more word actions (move backward and forward one word), I +# prefer ALT key to do same thing. + +# Make sure that the terminal is in application mode when zle is active, since +# only then values from $terminfo are valid +if (( ${+terminfo[smkx]} )) && (( ${+terminfo[rmkx]} )); then + function zle-line-init() { + echoti smkx + } + function zle-line-finish() { + echoti rmkx + } + zle -N zle-line-init + zle -N zle-line-finish +fi + +bindkey -e # Use emacs key bindings +bindkey '\ew' kill-region # [Esc-w] - Kill from the cursor to the mark +bindkey -s '\el' 'ls\n' # [Esc-l] - run command: ls +bindkey '^r' history-incremental-search-backward # [Ctrl-r] - Search backward incrementally for a specified string. The string may begin with ^ to anchor the search to the beginning of the line. +if [[ "${terminfo[kpp]}" != "" ]]; then + bindkey "${terminfo[kpp]}" up-line-or-history # [PageUp] - Up a line of history +fi +if [[ "${terminfo[knp]}" != "" ]]; then + bindkey "${terminfo[knp]}" down-line-or-history # [PageDown] - Down a line of history +fi +if [[ "${terminfo[kcuu1]}" != "" ]]; then + bindkey "${terminfo[kcuu1]}" up-line-or-search # start typing + [Up-Arrow] - fuzzy find history forward +fi +if [[ "${terminfo[kcud1]}" != "" ]]; then + bindkey "${terminfo[kcud1]}" down-line-or-search # start typing + [Down-Arrow] - fuzzy find history backward +fi +if [[ "${terminfo[khome]}" != "" ]]; then + bindkey "${terminfo[khome]}" beginning-of-line # [Home] - Go to beginning of line +fi +if [[ "${terminfo[kend]}" != "" ]]; then + bindkey "${terminfo[kend]}" end-of-line # [End] - Go to end of line +fi + bindkey ' ' magic-space # [Space] - do history expansion + bindkey '^[[1;5C' forward-word # [Ctrl-RightArrow] - move forward one word + bindkey '^[[1;5D' backward-word # [Ctrl-LeftArrow] - move backward one word + bindkey '^[[1;3C' forward-word # [ALT-RightArrow] - move forward one word + bindkey '^[[1;3D' backward-word # [ALT-LeftArrow] - move backward one word +if [[ "${terminfo[kcbt]}" != "" ]]; then + bindkey "${terminfo[kcbt]}" reverse-menu-complete # [Shift-Tab] - move through the completion menu backwards +fi + bindkey '^?' backward-delete-char # [Backspace] - delete backward +if [[ "${terminfo[kdch1]}" != "" ]]; then + bindkey "${terminfo[kdch1]}" delete-char # [Delete] - delete forward +else + bindkey "^[[3~" delete-char + bindkey "^[3;5~" delete-char + bindkey "\e[3~" delete-char +fi + +# Edit the current command line in $EDITOR +autoload -U edit-command-line +zle -N edit-command-line +bindkey '\C-x\C-e' edit-command-line diff --git a/zsh/40-prompt.zsh b/zsh/40-prompt.zsh new file mode 100644 index 0000000..920b7b1 --- /dev/null +++ b/zsh/40-prompt.zsh @@ -0,0 +1,12 @@ +# Load user desired prompt. + +autoload -Uz promptinit +promptinit + +if [ "${PROMPT_THEME}" != "" ]; then + if [ -f ${CONFIG_PATH}/zsh/prompts/${PROMPT_THEME}.zsh-theme ]; then + source ${CONFIG_PATH}/zsh/prompts/${PROMPT_THEME}.zsh-theme + else + echo "Theme \"${PROMPT_THEME}\" could not be loaded. File does not exist or unreadable." + fi +fi diff --git a/zsh/50-aliases.zsh b/zsh/50-aliases.zsh new file mode 100644 index 0000000..ad23fe8 --- /dev/null +++ b/zsh/50-aliases.zsh @@ -0,0 +1,42 @@ +alias screen="TERM=xterm screen" + +# AION ^_^ +#alias aion="cd /data/Programs/aion/ && WINEPREFIX="/home/pztrn/.wine-aion" wine AWLite.exe" + +# SVN Add all in ABUILDS +#alias addall="cd /data/AgiliaLinux/ABUILDS && sh svnadd.sh" + +# VirtualBox Aliases +alias as-start='VBoxManage startvm "Arch Linux Server" --type headless' +alias as-stop='VBoxManage controlvm "Arch Linux Server" acpipowerbutton' + +alias x86_64-start='VBoxManage startvm "Agilia x86_64" --type headless' +alias x86_64-stop='VBoxManage controlvm "Agilia x86_64" acpipowerbutton' + +# QTile +alias qtcfg="nano ~/.config/qtile/config.py" + +# Games +alias regnum="/data/Programs/Regnum/rolauncher" +alias ut2004="aoss /data/Programs/UT2004/ut2004" + +#PATH=$PATH:$HOME/.rvm/bin # Add RVM to PATH for scripting +#source /home/pztrn/.rvm/scripts/rvm + +# Xilitra +alias xbs="/data/XILITRA/xbs/src/xbs.py" +alias deptracker="/data/XILITRA/xilitra-dev-tools/deptracker/deptracker" +alias xpkg="/data/XILITRA/xpkg/src/xpkg.py" + +# Other +alias clocksync="sudo ntpdate 0.pool.ntp.org" +alias got="git" + +# Blogs +alias crotal="/data/.pyenv/versions/2.7.6/bin/crotal" + +#alias yasearch="yaourt -Ss" +#alias yainstall="yaourt -S" +#alias yadel="yaourt -Rd" +#alias sysupdate="yaourt -Syua" +#alias flvgrab="ffmpeg -f alsa -f x11grab -r 30 -s 1920x1080 -i :0.0 -acodec pcm_s16le -vcodec flv -sameq" diff --git a/zsh/99-fbterm.zsh b/zsh/99-fbterm.zsh new file mode 100644 index 0000000..2403c13 --- /dev/null +++ b/zsh/99-fbterm.zsh @@ -0,0 +1,20 @@ +# Launch fbterm on TTY login + +# But first some pre-checks. nVidia proprietary drivers will not allow +# us to use it, so we should disable this. + +NVIDIA_POWERED=0 +lsmod | grep nvidia &> /dev/null + +if [ $? -eq 0 ]; then + error 1 "Will not use FBTerm - nVidia proprietary driver detected" + NVIDIA_POWERED=1 +fi + +if [ ${USE_FBTERM} -gt 0 ]; then + if [ ${NVIDIA_POWERED} -ne 1 ]; then + if [[ "$TTY" =~ ".*tty.*" ]] then + fbterm + fi + fi +fi diff --git a/zsh/aliases/.gitkeep b/zsh/aliases/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/zsh/apps/.gitkeep b/zsh/apps/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/zsh/apps/colors.app.zsh b/zsh/apps/colors.app.zsh new file mode 100644 index 0000000..3d30631 --- /dev/null +++ b/zsh/apps/colors.app.zsh @@ -0,0 +1,4 @@ +function main() +{ + // +} diff --git a/zsh/lib/logger.lib.sh b/zsh/lib/logger.lib.sh new file mode 100644 index 0000000..2b08025 --- /dev/null +++ b/zsh/lib/logger.lib.sh @@ -0,0 +1,72 @@ +# Logger for debug output. + +# Debug messages array. +DEBUG_MESSAGES=("\033[1;32mINFO \033[1;m" "\033[1;36mDEBUG \033[1;m" "\033[1;31mHARDDEBUG\033[1;m") + +# Colorize messages depending on verbosity level. +VERB_LVL_COLORS=("\033[1;m" "\033[1;34m" "\033[1;35m") + +# Formatted message will be placed in this variable. +FORMATTED_MESSAGE="" + +function log() { + # Just log. + log_common $1 "$2" + if [ $? -eq 0 ]; then + echo -e "${VERB_LVL_COLORS[${1}]}${FORMATTED_MESSAGE}\033[1;m" + fi +} + +function log_common() { + # Executes some common things for logs. + local DEBUG_LVL=$1 + local MESSAGE=$2 + + check_debug ${DEBUG_LVL} + if [ $? -ne 0 ]; then + return 1 + fi + + # All ok, printing... + FORMATTED_MESSAGE="[${DEBUG_MESSAGES[${DEBUG_LVL}]}] ${MESSAGE}" + return 0 +} + +function error() { + # Just log. + error_common $1 "$2" + if [ $? -eq 0 ]; then + echo -e "${VERB_LVL_COLORS[${1}]}${FORMATTED_MESSAGE}\033[1;m" + fi +} + +function error_common() { + # Executes some common things for logs. + local DEBUG_LVL=$1 + local MESSAGE=$2 + + check_debug ${DEBUG_LVL} + if [ $? -ne 0 ]; then + return 1 + fi + + # All ok, printing... + FORMATTED_MESSAGE="[ERROR] \033[1;31m${MESSAGE}\033[1;m" + return 0 +} + + +function check_debug() { + # Checks for debug level and if it applicable to us. + # Return codes: + # - 0: this debug level is okay to be printed. + # - 1: this debug level should not be printed. + local DEBUG_LVL=$1 + + + if [ ${DEBUG_LVL} -le ${DEBUG} ]; then + return 0 + else + return 1 + fi +} diff --git a/zsh/prompts/pztrn.zsh-theme b/zsh/prompts/pztrn.zsh-theme new file mode 100644 index 0000000..36b155f --- /dev/null +++ b/zsh/prompts/pztrn.zsh-theme @@ -0,0 +1,72 @@ +# pztrn prompt theme +autoload -U add-zsh-hook + +prompt_pztrn_help () { + cat <<'EOF' + + prompt pztrn [ [ [ [ []]]]] + + defaults are red, cyan, green, yellow, and white, respectively. + +EOF +} + +prompt_pztrn_setup () { + local -a pcc + local -A pc + local p_date p_tty p_plat p_ver p_userpwd p_apm p_shlvlhist p_rc p_end p_win + + autoload -Uz vcs_info + + pcc[1]=${1:-${${SSH_CLIENT+'yellow'}:-'red'}} + pcc[2]=${2:-'cyan'} + pcc[3]=${3:-'green'} + pcc[4]=${4:-'yellow'} + pcc[5]=${5:-'white'} + + pc['\[']="%F{$pcc[1]}[" + pc['\]']="%F{$pcc[1]}]" + pc['<']="%F{$pcc[1]}<" + pc['>']="%F{$pcc[1]}>" + pc['\(']="%F{$pcc[1]}(" + pc['\)']="%F{$pcc[1]})" + + p_date="$pc['\[']%F{$pcc[2]}%D{%a %y/%m/%d %R %Z}$pc['\]']" + p_tty="$pc['\[']%F{$pcc[3]}%l$pc['\]']" + p_plat="$pc['\[']%F{$pcc[2]}$(uname -r)$pc['\]']" + p_ver="$pc['\[']%F{$pcc[2]}${ZSH_VERSION}$pc['\]']" + + [[ -n "$WINDOW" ]] && p_win="$pc['\(']%F{$pcc[4]}$WINDOW$pc['\)']" + + p_userpwd="$pc['\[']%F{$pcc[5]}User:%F{$pcc[3]} %n$pc['\]']$pc['\[']%F{$pcc[5]}Host:%F{$pcc[3]} %M$pc['\]']" + + p_shlvlhist="$pc['\[']%F{$pcc[3]}%B%h%b$pc['\]']" + p_rc="%(?..[%?%1v] )" + p_end="%f%B%#%b " + p_path="$pc['\[']%F{$pcc[4]} %d $pc['\]']" + + zle_highlight[(r)default:*]=default:$pcc[2] + + prompt="$p_date$p_tty$p_plat$p_ver$p_userpwd$p_shlvlhist +$p_path $p_end" + PS2='%(4_.\.)%3_> %E' + + add-zsh-hook precmd prompt_pztrn_precmd +} + +prompt_pztrn_precmd () { + setopt noxtrace noksharrays localoptions + local exitstatus=$? + local git_dir git_ref + + psvar=() + [[ $exitstatus -ge 128 ]] && psvar[1]=" $signals[$exitstatus-127]" || + psvar[1]="" + + [[ -o interactive ]] && jobs -l + + vcs_info + [[ -n $vcs_info_msg_0_ ]] && psvar[2]="$vcs_info_msg_0_" || psvar[2]="NO" +} + +prompt_pztrn_setup "$@" diff --git a/zshrc b/zshrc new file mode 100644 index 0000000..1889873 --- /dev/null +++ b/zshrc @@ -0,0 +1,54 @@ +#!/bin/bash +# ^^^ THIS IS FOR SYNTAX HIGHLIGHT! + +#. /etc/profile + +##################################################################### +# CONFIGURATION +# ------------- +# You should set these variables :) +##################################################################### +# The very important thing - debug. +# Should we enable debug output? +DEBUG=0 +# Prompt configuration +PROMPT_THEME="pztrn" + +# FBTerm - should we use it? +# nVidia users with proprietary drivers - sorry, you can't use it. +USE_FBTERM=1 + +##################################################################### +# INITIALIZATION +# -------------- +# Here goes initialization thing. +# DO NOT CHANGE ANYTHING, UNLESS YOU ARE KNOW WHAT ARE YOU DOING! +##################################################################### +# Get real script path. +CONFIG_PATH='' +CONFIG_FOUND=0 + +if [ -h ${HOME}/.zshrc ]; then + CONFIG_PATH=`readlink ${HOME}/.zshrc` + CONFIG_PATH=`dirname ${CONFIG_PATH}` + if [ ${#CONFIG_PATH[@]} -gt 0 ]; then + CONFIG_FOUND=1 + else + echo "CONFIG_PATH has invalid value: '${CONFIG_PATH}'" + fi +fi + +# Some sourcing. +source ${CONFIG_PATH}/zsh/lib/logger.lib.sh + +if [ $CONFIG_FOUND -eq 1 ]; then + for config_file in `ls ${CONFIG_PATH}/zsh/ | sort | grep zsh`; do + source ${CONFIG_PATH}/zsh/${config_file} + done +else + echo "Failed to load configuration." +fi + +set -B + +