feat: initial framework

This commit is contained in:
George Rawlinson 2019-11-01 12:18:00 +13:00
parent be765357d5
commit d44dd103a3
Signed by: grawlinson
GPG key ID: E0959FEA8B550539
14 changed files with 355 additions and 0 deletions

10
completions/_autosource Normal file
View file

@ -0,0 +1,10 @@
#compdef autosource
_autosource() {
_alternative \
'plugin:filename:{_path_files -W spath}'
}
_autosource
# vim: ft=zsh expandtab tabstop=2 shiftwidth=2

11
functions/autosource Normal file
View file

@ -0,0 +1,11 @@
#!/bin/zsh
local f=
local p=
for f; do
for p in $spath; do
[[ -r $p/$f ]] && . "$p/$f" && break
done
done
# vim: ft=zsh expandtab tabstop=2 shiftwidth=2

17
functions/sourceall Normal file
View file

@ -0,0 +1,17 @@
#!/bin/zsh
# usage:
# `sourceall zsh` will source *.zsh, otherwise *
local ext=
local f=
local p=
(( $# > 0 )) && ext=".$1"
for p in $apath; do
[[ -d $p ]] || continue
for f in $p/*$ext(.N); do
[[ -r $f ]] && . $f
done
done
# vim: ft=zsh expandtab tabstop=2 shiftwidth=2

13
plugins/coloured-man Normal file
View file

@ -0,0 +1,13 @@
# colour output in man
# source: https://wiki.archlinux.org/index.php/Color_output_in_console#man
man() {
LESS_TERMCAP_md=$'\e[01;31m' \
LESS_TERMCAP_me=$'\e[0m' \
LESS_TERMCAP_se=$'\e[0m' \
LESS_TERMCAP_so=$'\e[01;44;33m' \
LESS_TERMCAP_ue=$'\e[0m' \
LESS_TERMCAP_us=$'\e[01;32m' \
command man "$@"
}
# vim: ft=zsh expandtab tabstop=2 shiftwidth=2

21
plugins/sudo Normal file
View file

@ -0,0 +1,21 @@
# sudo will be inserted before the current command
sudo-command-line() {
[[ -z $BUFFER ]] && zle up-history
if [[ $BUFFER == sudo\ * ]]; then
LBUFFER="${LBUFFER#sudo }"
elif [[ $BUFFER == $EDITOR\ * ]]; then
LBUFFER="${LBUFFER#$EDITOR }"
LBUFFER="sudoedit $LBUFFER"
elif [[ $BUFFER == sudoedit\ * ]]; then
LBUFFER="${LBUFFER#sudoedit }"
LBUFFER="$EDITOR $LBUFFER"
else
LBUFFER="sudo $LBUFFER"
fi
}
zle -N sudo-command-line
# defined shortcut keys: [Esc] [Esc]
bindkey "\e\e" sudo-command-line
# vim: ft=zsh expandtab tabstop=2 shiftwidth=2

74
source/aliases.zsh Normal file
View file

@ -0,0 +1,74 @@
# common aliases
alias grep='grep --color=auto'
alias diff='diff --color=auto'
alias history='fc -il 1' # redirect history to STDOUT with correct timestamps
# safe(r) interactive commands
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# ls
alias ls='ls --color=auto --human-readable --group-directories-first'
alias l='ls --classify -l'
alias la='ls --classify -la'
alias lr='ls --classify -tR'
# directories
setopt AUTO_CD # prefix command with 'cd' if it cannot be executed, e.g. '..' becomes 'cd ..'
alias ...='../..'
alias ....='../../..'
alias .....='../../../..'
alias ......='../../../../..'
# git
if command -v git &> /dev/null; then
# status
alias gst='git status'
# add/commit
alias gaa='git add --all'
alias gcmsg='git commit -m'
# log
alias glg='git log --stat'
alias glgp='git log --stat -p'
alias glgg='git log --graph'
alias glgga='git log --graph --decorate --all'
alias glgm='git log --graph --max-count=10'
# push/pull
alias gp='git push'
alias gl='git pull'
fi
# pacman
if command -v pacman &> /dev/null; then
# source: https://wiki.archlinux.org/index.php/Pacman_Tips
alias pacupg='sudo pacman -Syu'
alias pacin='sudo pacman -S'
alias pacins='sudo pacman -U'
alias pacre='sudo pacman -R'
alias pacrem='sudo pacman -Rns'
alias pacrep='pacman -Si'
alias pacreps='pacman -Ss'
alias pacloc='pacman -Qi'
alias paclocs='pacman -Qs'
alias pacinsd='sudo pacman -S --asdeps'
alias pacmir='sudo pacman -Syy'
alias paclsorphans='sudo pacman -Qdt'
alias pacrmorphans='sudo pacman -Rs $(pacman -Qtdq)'
alias pacfileupg='sudo pacman -Fy'
alias pacfiles='pacman tFs'
# list all explicitly installed packages
# source: https://bbs.archlinux.org/viewtopic.php?id=93683
paclist() {
LC_ALL=C pacman -Qei $(pacman -Qu | cut -d " " -f 1) | \
awk 'BEGIN {FS=":"} /^Name/{printf("\033[1;36m%s\033[1;37m", $2)} /^Description/{print $2}'
}
export CHROOT="${XDG_CACHE_HOME}/chroot"
fi
# vim: ft=zsh expandtab tabstop=2 shiftwidth=2

48
source/bindkeys.zsh Normal file
View file

@ -0,0 +1,48 @@
# key bindings
# create a zkbd compatible hash;
# to add other keys to this hash, see: man 5 terminfo
typeset -g -A key
#key[Home]="${terminfo[khome]}"
#key[End]="${terminfo[kend]}"
#key[Insert]="${terminfo[kich1]}"
key[Backspace]="${terminfo[kbs]}"
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]}"
key[ShiftTab]="${terminfo[kcbt]}"
# setup history search
autoload -Uz up-line-or-beginning-search down-line-or-beginning-search
zle -N up-line-or-beginning-search
zle -N down-line-or-beginning-search
# key bindings
[[ -n "${key[Backspace]}" ]] && bindkey -- "${key[Backspace]}" backward-delete-char
[[ -n "${key[Delete]}" ]] && bindkey -- "${key[Delete]}" delete-char
[[ -n "${key[Up]}" ]] && bindkey -- "${key[Up]}" up-line-or-beginning-search
[[ -n "${key[Down]}" ]] && bindkey -- "${key[Down]}" down-line-or-beginning-search
[[ -n "${key[PageUp]}" ]] && bindkey -- "${key[PageUp]}" up-line-or-history
[[ -n "${key[PageDown]}" ]] && bindkey -- "${key[PageDown]}" down-line-or-history
[[ -n "${key[ShiftTab]}" ]] && bindkey -- "${key[ShiftTab]}" reverse-menu-complete
# make sure the terminal is in application mode when zle is active
# only then are the values from $terminfo valid
if (( ${+terminfo[smkx]} && ${+terminfo[rmkx]} )); then
autoload -Uz add-zle-hook-widget
zle_application_mode_start() {
echoti smkx
}
zle_application_mode_stop() {
echoti rmkx
}
add-zle-hook-widget -Uz zle-line-init zle_application_mode_start
add-zle-hook-widget -Uz zle-line-finish zle_application_mode_stop
fi
# vim: ft=zsh expandtab tabstop=2 shiftwidth=2

15
source/colours.zsh Normal file
View file

@ -0,0 +1,15 @@
#
# colours
#
autoload -U colors && colors
# setup LS_COLORS
if [[ -z "$LS_COLORS" ]]; then
(( $+commands[dircolors] )) && eval "$(dircolors -b)"
fi
# use LS_COLORS for completion
zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}"
# vim: ft=zsh expandtab tabstop=2 shiftwidth=2

25
source/completions.zsh Normal file
View file

@ -0,0 +1,25 @@
# completion configuration
# have the menu highlight as we cycle through options
zstyle ':completion:*' menu select
# case insensitive (all), partial-word and substring completion
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|=*' 'l:|=* r:|=*'
# allow completion from within a word/phrase
setopt COMPLETE_IN_WORD
# when completing from the middle of a word, move cursor to end of word
setopt ALWAYS_TO_END
# turn on completion for aliases as well
setopt COMPLETE_ALIASES
# cycle through menus horizontally instead of vertically
#setopt LIST_ROWS_FIRST
# when using auto-complete, put the first option on the line immediately
#setopt MENU_COMPLETE
# complete . and .. special directories
zstyle ':completion:*' special-dirs true
# use caching so that commands like apt and dpkg complete are useable
zstyle ':completion::complete:*' use-cache 1
zstyle ':completion::complete:*' cache-path "{$ZCACHEDIR}"
# vim: ft=zsh expandtab tabstop=2 shiftwidth=2

13
source/env.zsh Normal file
View file

@ -0,0 +1,13 @@
# locale [en_NZ]
export LANG='en_NZ.UTF-8'
export LC_ALL='en_NZ.UTF-8'
# set default values
export EDITOR='nvim'
export PAGER='less'
export LESS='-R'
# less - disable histfile generation
export LESSHISTFILE='/dev/null'
# vim: ft=zsh expandtab tabstop=2 shiftwidth=2

15
source/gpg.zsh Normal file
View file

@ -0,0 +1,15 @@
# From gpg-agent(1):
#
# You should always add the following lines to your .bashrc or whatever
# initialization file is used for all shell invocations:
#
# GPG_TTY=$(tty)
# export GPG_TTY
#
# It is important that this environment variable always reflects the out
# put of the tty command.
GPG_TTY=$(tty)
export GPG_TTY
# vim: ft=zsh expandtab tabstop=2 shiftwidth=2

27
source/options.zsh Normal file
View file

@ -0,0 +1,27 @@
# general
setopt NO_BEEP # disable terminal beep
setopt MULTI_OS # pipe to multiple outputs
setopt INTERACTIVE_COMMENTS # allow comments in interactive shell
setopt VI # vi-like keybindings
#setopt KSH_ARRAYS # whoever thought non-0 indices needs to be shot
# globbing
setopt NO_CASE_GLOB # case insensitive globbing
setopt EXTENDED_GLOB # enable zsh globbing features
setopt NUMERIC_GLOB_SORT # sort globs numerically, not by letter
# history
HISTSIZE=100000 # set history size to 100K
SAVEHIST="${HISTSIZE}" # cap history size at 100K
setopt EXTENDED_HISTORY # record timestamp on command in HISTFILE
setopt HIST_EXPIRE_DUPS_FIRST # delete duplicates first when HISTFILE > HISTSIZE
setopt APPEND_HISTORY # ignore duplicate commands in history list
setopt HIST_FIND_NO_DUPS # when searching history don't display results already cycled through twice
setopt HIST_IGNORE_SPACE # ignore commands that start with space
setopt HIST_VERIFY # show command with history expansion to user before running it
setopt SHARE_HISTORY # shares history across multiple zsh sessions, in real time
setopt HIST_IGNORE_ALL_DUPS # do not write commands to history that are duplicates of the previous command
setopt HIST_REDUCE_BLANKS # remove erroneous blanks from commands before appending to history
# create history file
[ -z "${HISTFILE}" ] && HISTFILE="${ZCACHEDIR}/zhistory"

12
zshenv Normal file
View file

@ -0,0 +1,12 @@
# set environment variable $ZDOTDIR to $HOME/.config/zsh
export ZDOTDIR="${HOME}/.config/zsh"
# set environment variable $ZCACHEDIR to $HOME/.cache/zsh
export ZCACHEDIR="${HOME}/.cache/zsh"
# set environment variable $ZSYSDIR to /usr/share/zsh-grawlinson
export ZSYSDIR="/usr/share/zsh-grawlinson"
# create missing folders
if [ ! -d "${ZDOTDIR}" ]; then mkdir -p "${ZDOTDIR}"; fi
if [ ! -d "${ZCACHEDIR}" ]; then mkdir -p "${ZCACHEDIR}"; fi
# vim: ft=zsh expandtab tabstop=2 shiftwidth=2

54
zshrc Normal file
View file

@ -0,0 +1,54 @@
# setup umask [0755]
umask 0022
# spath -> plugins; apath -> drop-in path
typeset -T SPATH spath
typeset -T APATH apath
typeset -U PATH path # discard duplicates
# example: append to path, then make available to child processes
# path+=('$VAR'); export PATH
# default path values
spath=(
"$ZDOTDIR/plugins"
"$ZSYSDIR/plugins"
)
apath=(
"$ZDOTDIR/source"
"$ZSYSDIR/source"
)
# user stuff comes first
# completions come after the functions they complete
fpath+=(
"$ZDOTDIR/functions"
"$ZDOTDIR/completions"
"$ZDOTDIR/prompts"
"$ZSYSDIR/functions"
"$ZSYSDIR/completions"
"$ZSYSDIR/prompts"
)
# source every zsh file in every APATH directory
autoload sourceall
sourceall zsh
# plugins
autoload autosource
autosource coloured-man
autosource sudo
# setup ys prompt
autoload -Uz promptinit && promptinit
prompt ys
# source local zshrc
[[ -f "$ZDOTDIR/zshrc.local" ]] && . "$ZDOTDIR/zshrc.local"
# setup compinit
autoload -U compinit
compinit -i -d "${ZCACHEDIR}/zcompdump-${ZSH_VERSION}"
# vim: ft=zsh expandtab tabstop=2 shiftwidth=2