From 5ed23c482d995f28ed6260d08fe1517df9d1be29 Mon Sep 17 00:00:00 2001 From: Mark Vainomaa Date: Sun, 19 Jun 2016 04:11:34 +0300 Subject: [PATCH] Initial commit --- .gitignore | 1 + README.md | 8 +++ config.zsh | 8 +++ functions/correct.zsh | 5 ++ functions/hosts-completion.zsh | 7 +++ functions/keys.zsh | 23 ++++++++ functions/new-scratch.zsh | 9 +++ functions/pacman.zsh | 19 ++++++ functions/rationalise-dot.zsh | 14 +++++ functions/use-zaw-search.zsh | 12 ++++ main.zsh | 105 +++++++++++++++++++++++++++++++++ plugins.zsh | 6 ++ 12 files changed, 217 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 config.zsh create mode 100644 functions/correct.zsh create mode 100644 functions/hosts-completion.zsh create mode 100644 functions/keys.zsh create mode 100644 functions/new-scratch.zsh create mode 100644 functions/pacman.zsh create mode 100644 functions/rationalise-dot.zsh create mode 100644 functions/use-zaw-search.zsh create mode 100644 main.zsh create mode 100644 plugins.zsh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cb7ba26 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +zplug/ diff --git a/README.md b/README.md new file mode 100644 index 0000000..3164260 --- /dev/null +++ b/README.md @@ -0,0 +1,8 @@ +# zshuper +Pronounced as '/ʃ/uper' + +This is my simple zsh config + +## Installation +`git clone --depth=1 https://github.com/mikroskeem/zshuper ~/.config/zshuper && echo "source ~/.config/zshuper/main.zsh" > ~/.zshrc` + diff --git a/config.zsh b/config.zsh new file mode 100644 index 0000000..c7d61e2 --- /dev/null +++ b/config.zsh @@ -0,0 +1,8 @@ +# zshuper default configuration +# Runtime-critical configurations + +# zplug home +ZPLUG_HOME=~/.config/zshuper/zplug + +# Shall we use grml PS1? Useful only when there are no prompt plugins +USE_GRML_PS1=no diff --git a/functions/correct.zsh b/functions/correct.zsh new file mode 100644 index 0000000..577d8c0 --- /dev/null +++ b/functions/correct.zsh @@ -0,0 +1,5 @@ +setopt correct +zstyle ':completion:*:correct:*' insert-unambiguous true +zstyle ':completion:*:corrections' format $'%{\e[0;31m%}%d (errors: %e)%{\e[0m%}' +zstyle ':completion:*:correct:*' original true +zstyle ':completion:correct:' prompt 'correct to: %e' diff --git a/functions/hosts-completion.zsh b/functions/hosts-completion.zsh new file mode 100644 index 0000000..fe4b261 --- /dev/null +++ b/functions/hosts-completion.zsh @@ -0,0 +1,7 @@ +hosts=( + $( + ([ -r .ssh/known_hosts ] && awk '{print $1}' .ssh/known_hosts | tr , '\n') | sort -u + ) +) + +zstyle ':completion:*' hosts $hosts diff --git a/functions/keys.zsh b/functions/keys.zsh new file mode 100644 index 0000000..7c67c59 --- /dev/null +++ b/functions/keys.zsh @@ -0,0 +1,23 @@ +# Part of this is from http://unix.stackexchange.com/q/62919 +# Fixes my navigation keys +typeset -A key +key[Home]=${terminfo[khome]} +key[End]=${terminfo[kend]} +key[Insert]=${terminfo[kich1]} +key[Delete]=${terminfo[kdch1]} +key[Up]=${terminfo[kcuu1]} +key[Down]=${terminfo[kcud1]} +key[Left]=${terminfo[kcub1]} +key[Right]=${terminfo[kcuf1]} +key[PageUp]=${terminfo[kpp]} +key[PageDown]=${terminfo[knp]} +[[ -n "${key[Home]}" ]] && bindkey "${key[Home]}" beginning-of-line +[[ -n "${key[End]}" ]] && bindkey "${key[End]}" end-of-line +[[ -n "${key[Insert]}" ]] && bindkey "${key[Insert]}" overwrite-mode +[[ -n "${key[Delete]}" ]] && bindkey "${key[Delete]}" delete-char +[[ -n "${key[Up]}" ]] && bindkey "${key[Up]}" up-line-or-history +[[ -n "${key[Down]}" ]] && bindkey "${key[Down]}" down-line-or-history +[[ -n "${key[Left]}" ]] && bindkey "${key[Left]}" backward-char +[[ -n "${key[Right]}" ]] && bindkey "${key[Right]}" forward-char +[[ -n "${key[PageUp]}" ]] && bindkey "${key[PageUp]}" beginning-of-buffer-or-history +[[ -n "${key[PageDown]}" ]] && bindkey "${key[PageDown]}" end-of-buffer-or-history diff --git a/functions/new-scratch.zsh b/functions/new-scratch.zsh new file mode 100644 index 0000000..3f8871e --- /dev/null +++ b/functions/new-scratch.zsh @@ -0,0 +1,9 @@ +# Create quick scratch directory for testing and other stuff +function new-scratch { + local cur_dir="$HOME/scratch" + local new_dir="$HOME/tmp/scratch_$(date '+%d-%m-%Y')" + mkdir -p $new_dir + ln -nfs $new_dir $cur_dir + cd $cur_dir + printf "New scratch dir ready for grinding ;>\n\n" +} diff --git a/functions/pacman.zsh b/functions/pacman.zsh new file mode 100644 index 0000000..634e334 --- /dev/null +++ b/functions/pacman.zsh @@ -0,0 +1,19 @@ +# Wrap pacman so you don't need to put sudo before +# Optionally use yaourt or pacaur +function pacman { + if [ ! -z "${NO_PACMAN_WRAP}" ]; then + sudo /usr/bin/pacman "$@" + return $? + fi + local ypath="$(command -v yaourt)" + local ppath="$(command -v pacaur)" + if [ ! -z "${ypath}" ]; then + ${ypath} "$@" + elif [ ! -z "${ppath}" ]; then + ${ppath} "$@" + else + echo "No yaourt or pacaur found, defaulting to pacman" + sudo /usr/bin/pacman "$@" + fi + return $? +} diff --git a/functions/rationalise-dot.zsh b/functions/rationalise-dot.zsh new file mode 100644 index 0000000..5c5ff29 --- /dev/null +++ b/functions/rationalise-dot.zsh @@ -0,0 +1,14 @@ +# Alias '...' to do '../..' +# Example: type 'cd ...' to get 'cd ../..' +rationalise-dot() { + local MATCH + if [[ $LBUFFER =~ '(^|/| | |'$'\n''|\||;|&)\.\.$' ]]; then + LBUFFER+=/ + zle self-insert + zle self-insert + else + zle self-insert + fi +} +zle -N rationalise-dot +bindkey . rationalise-dot diff --git a/functions/use-zaw-search.zsh b/functions/use-zaw-search.zsh new file mode 100644 index 0000000..52c5503 --- /dev/null +++ b/functions/use-zaw-search.zsh @@ -0,0 +1,12 @@ +# Use ZAW search +# First check if ZAW is installed and sourced +zplug info zsh-users/zaw >|/dev/null || return + +bindkey '^R' zaw-history +bindkey -M filterselect '^R' down-line-or-history +bindkey -M filterselect '^S' up-line-or-history +bindkey -M filterselect '^E' accept-search + +zstyle ':filter-select:highlight' matched fg=red +zstyle ':filter-select' max-lines 5 +zstyle ':filter-select' extended-search yes diff --git a/main.zsh b/main.zsh new file mode 100644 index 0000000..b3eeaee --- /dev/null +++ b/main.zsh @@ -0,0 +1,105 @@ +# zshuper - pronounced as '/ʃ/uper' +# +# Edit config.zsh to configure zshuper +# Source this script like: +# % source ~/.config/zshuper/main.zsh +# + +# Load config +source ~/.config/zshuper/config.zsh + +# --------------------------------- +# 3rd party plugins + +# Check if zplug is installed +if [ ! -d "${ZPLUG_HOME}" ]; then + echo ">>> Installing zplug" + git clone --depth=1 https://github.com/zplug/zplug ${ZPLUG_HOME} +fi + +# Include zplug +source ${ZPLUG_HOME}/init.zsh + +# Let zplug manage itself +zplug "zplug/zplug" + +# Include own plugins +source ~/.config/zshuper/plugins.zsh + +# And include highlighting at the end +# https://github.com/zsh-users/zsh-syntax-highlighting#faq +zplug "zsh-users/zsh-syntax-highlighting", nice:10 + + +# Install and load plugins +if ! zplug check; then + zplug install +fi +zplug load + +# --------------------------------- +# zshuper specific configuration + +# Set up sane defaults and useful functions +# Use grml PS1 (if enabled) +# https://grml.org/zsh/ +if [ "${USE_GRML_PS1}" = "yes" ]; then + PS1="%B%F{red}%(?..%? )%f%b%B%F{blue}%n%f%b@%m %B%40<..<%~%<< %b%# " +fi + +# ls colors and aliases +export LS_COLORS="rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:" +alias ls="ls --color" +alias l="ls -l" +alias lah="ls -lah" + +# Make rm, mv and cp recursive and verbose +alias rm="rm -rfv" +alias mv="mv -v" +alias cp="cp -rv" + +# Default editor +# cool people use neovim :> +export EDITOR=$(if [ ! -z "$(command -v nvim)" ]; then echo "nvim" else echo "vim"; fi) +export VISUAL=${EDITOR} + +# less options +export LESS="-r" + +# History control +setopt histignorealldups +setopt extended_history +setopt append_history +setopt histignorespace +unsetopt share_history +setopt histallowclobber +setopt INC_APPEND_HISTORY_TIME +HISTSIZE=100000 +SAVEHIST=100000 +HISTFILE=~/.zsh_history + +# Enable comments in interactive shell +setopt interactivecomments + +# Show program exit code and don't check for jobs on exit +setopt printexitvalue +setopt nocheckjobs + +# Set up autocompletion and correction +autoload -U compinit && compinit +setopt menu_complete +zstyle ':completion:*' menu select +zstyle ':completion:*:warnings' format 'Nuffin there :(' +zstyle ':completion:*' expand prefix suffix +zstyle ':completion:*' completer _expand_alias _complete _approximate +zstyle ':completion:*:approximate:*' max-errors 4 +zstyle ':completion:*' special-dirs true + +# zshuper functions +source ~/.config/zshuper/functions/keys.zsh +source ~/.config/zshuper/functions/new-scratch.zsh +source ~/.config/zshuper/functions/rationalise-dot.zsh +source ~/.config/zshuper/functions/use-zaw-search.zsh +source ~/.config/zshuper/functions/correct.zsh +source ~/.config/zshuper/functions/pacman.zsh +source ~/.config/zshuper/functions/hosts-completion.zsh diff --git a/plugins.zsh b/plugins.zsh new file mode 100644 index 0000000..e2ee551 --- /dev/null +++ b/plugins.zsh @@ -0,0 +1,6 @@ +# See https://github.com/zplug/zplug +zplug "mafredri/zsh-async" +zplug "sindresorhus/pure" +zplug "zsh-users/zsh-history-substring-search" +zplug "willghatch/zsh-cdr" +zplug "zsh-users/zaw"