diff options
author | Camil Staps | 2016-02-09 13:33:49 +0100 |
---|---|---|
committer | Camil Staps | 2016-11-30 19:11:06 +0100 |
commit | ae4fdb755a6e07e9f86ae34551987a446092f0db (patch) | |
tree | 2b754ae5b224c3d9fe7d073228d220555fcebac1 | |
parent | type pass (diff) |
zsh
-rw-r--r-- | .gitmodules | 6 | ||||
m--------- | fonts | 0 | ||||
-rw-r--r-- | functions/_boom | 29 | ||||
-rw-r--r-- | functions/_brew | 65 | ||||
-rw-r--r-- | functions/_c | 5 | ||||
-rw-r--r-- | functions/_git-rm | 7 | ||||
-rw-r--r-- | functions/c | 24 | ||||
-rw-r--r-- | functions/extract | 27 | ||||
-rw-r--r-- | functions/gf | 4 | ||||
-rw-r--r-- | history-substring-search.plugin.zsh | 13 | ||||
-rw-r--r-- | system/Xresources.symlink | 4 | ||||
-rw-r--r-- | zsh/aliases.zsh | 1 | ||||
-rw-r--r-- | zsh/completion.zsh | 5 | ||||
-rw-r--r-- | zsh/config.zsh | 48 | ||||
-rw-r--r-- | zsh/fpath.zsh | 2 | ||||
m--------- | zsh/oh-my-zsh | 0 | ||||
-rw-r--r-- | zsh/prompt.zsh | 82 | ||||
-rw-r--r-- | zsh/window.zsh | 19 | ||||
-rw-r--r-- | zsh/zshrc.symlink | 44 |
19 files changed, 383 insertions, 2 deletions
diff --git a/.gitmodules b/.gitmodules index 25808e7..d4d7847 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,9 @@ [submodule "bin/a5999026fc2abcac4cec"] path = bin/a5999026fc2abcac4cec url = https://gist.github.com/a5999026fc2abcac4cec.git +[submodule "zsh/oh-my-zsh"] + path = zsh/oh-my-zsh + url = https://github.com/robbyrussell/oh-my-zsh +[submodule "fonts"] + path = fonts + url = https://github.com/powerline/fonts diff --git a/fonts b/fonts new file mode 160000 +Subproject a44abd0e742ad6e7fd8d8bc4c3cad5155c9f3a9 diff --git a/functions/_boom b/functions/_boom new file mode 100644 index 0000000..74e5d4e --- /dev/null +++ b/functions/_boom @@ -0,0 +1,29 @@ +#compdef boom + +local state line cmds ret=1 + +_arguments -C '1: :->cmds' '*: :->args' + +case $state in + cmds) + local -a cmds + cmds=( + 'all:show all items in all lists' + 'edit:edit the boom JSON file in $EDITOR' + 'help:help text' + ) + _describe -t commands 'boom command' cmds && ret=0 + _values 'lists' $(boom | awk '{print $1}') + ;; + args) + case $line[1] in + (boom|all|edit|help) + ;; + *) + _values 'items' `boom $line[1] | awk '{print $1}' | sed -e 's/://'` 2>/dev/null && ret=0 + ;; + esac + ;; +esac + +return ret diff --git a/functions/_brew b/functions/_brew new file mode 100644 index 0000000..8ba6889 --- /dev/null +++ b/functions/_brew @@ -0,0 +1,65 @@ +#compdef brew + +# Brew ZSH completion function +# Drop this somewhere in your $fpath (like /usr/share/zsh/site-functions) +# and rename it _brew +# +# altered from _fink + +_brew_all_formulae() { + formulae=(`brew search`) +} + +_brew_installed_formulae() { + installed_formulae=(`brew list`) +} + +local -a _1st_arguments +_1st_arguments=( + 'install:install a formula' + 'remove:remove a formula' + 'search:search for a formula (/regex/ or string)' + 'list:list files in a formula or not-installed formulae' + 'link:link a formula' + 'unlink:unlink a formula' + 'home:visit the homepage of a formula or the brew project' + 'info:information about a formula' + 'prune:remove dead links' + 'update:freshen up links' + 'log:git commit log for a formula' + 'create:create a new formula' + 'edit:edit a formula' +) + +local expl +local -a formula installed_formulae + +_arguments \ + '(-v --verbose)'{-v,--verbose}'[verbose]' \ + '(--version)--version[version information]' \ + '(--prefix)--prefix[where brew lives on this system]' \ + '(--cache)--cache[brew cache]' \ + '*:: :->subcmds' && return 0 + +if (( CURRENT == 1 )); then + _describe -t commands "brew subcommand" _1st_arguments + return +fi + +case "$words[1]" in + list) + _arguments \ + '(--unbrewed)--unbrewed[files in brew --prefix not controlled by brew]' \ + '1: :->forms' && return 0 + + if [[ "$state" == forms ]]; then + _brew_installed_formulae + _requested installed_formulae expl 'installed formulae' compadd -a installed_formulae + fi ;; + install|home|log|info) + _brew_all_formulae + _wanted formulae expl 'all formulae' compadd -a formulae ;; + remove|edit|xo) + _brew_installed_formulae + _wanted installed_formulae expl 'installed formulae' compadd -a installed_formulae ;; +esac diff --git a/functions/_c b/functions/_c new file mode 100644 index 0000000..39d8cb8 --- /dev/null +++ b/functions/_c @@ -0,0 +1,5 @@ +#compdef c +_files -W $PROJECTS -/ +_files -W $GOPATH/src/github.com -/ + +# See further documentation in `functions/c`. diff --git a/functions/_git-rm b/functions/_git-rm new file mode 100644 index 0000000..a10baf9 --- /dev/null +++ b/functions/_git-rm @@ -0,0 +1,7 @@ +#compdef git-rm +_arguments -S -A '-*' \ + '-f[override the up-to-date check]' \ + "-n[don't actually remove the files, just show if they exist in the index]" \ + '-r[allow recursive removal when a leading directory-name is given]' \ + '--cached[only remove files from the index]' && ret=0 +_files diff --git a/functions/c b/functions/c new file mode 100644 index 0000000..486a3c6 --- /dev/null +++ b/functions/c @@ -0,0 +1,24 @@ +#!/bin/zsh +# +# This lets you quickly jump into a project directory. +# +# Type: +# +# c <tab> +# +# ...to autocomplete on all of your projects in the directories specified in +# `functions/_c`. Typically I'm using it like: +# +# c holm<tab>/bo<tab> +# +# ...to quickly jump into holman/boom, for example. +# +# This also accounts for how Go structures its projects. For example, it will +# autocomplete both on $PROJECTS, and also assume you want to autocomplete on +# your Go projects in $GOPATH/src. + +if [ ! -z "$1" ] && [ -s "$GOPATH/src/github.com/$1" ]; then + cd "$GOPATH/src/github.com/$1" +else + cd "$PROJECTS/$1" +fi diff --git a/functions/extract b/functions/extract new file mode 100644 index 0000000..018d569 --- /dev/null +++ b/functions/extract @@ -0,0 +1,27 @@ +# credit: http://nparikh.org/notes/zshrc.txt +# Usage: extract <file> +# Description: extracts archived files / mounts disk images +# Note: .dmg/hdiutil is Mac OS X-specific. +extract () { + if [ -f $1 ]; then + case $1 in + *.tar.bz2) tar -jxvf $1 ;; + *.tar.gz) tar -zxvf $1 ;; + *.bz2) bunzip2 $1 ;; + *.dmg) hdiutil mount $1 ;; + *.gz) gunzip $1 ;; + *.tar) tar -xvf $1 ;; + *.tbz2) tar -jxvf $1 ;; + *.tgz) tar -zxvf $1 ;; + *.zip) unzip $1 ;; + *.ZIP) unzip $1 ;; + *.pax) cat $1 | pax -r ;; + *.pax.Z) uncompress $1 --stdout | pax -r ;; + *.Z) uncompress $1 ;; + *) echo "'$1' cannot be extracted/mounted via extract()" ;; + esac + else + echo "'$1' is not a valid file" + fi +} + diff --git a/functions/gf b/functions/gf new file mode 100644 index 0000000..0de3e89 --- /dev/null +++ b/functions/gf @@ -0,0 +1,4 @@ +gf() { + local branch=$1 + git checkout -b $branch origin/$branch +}
\ No newline at end of file diff --git a/history-substring-search.plugin.zsh b/history-substring-search.plugin.zsh new file mode 100644 index 0000000..7f14b38 --- /dev/null +++ b/history-substring-search.plugin.zsh @@ -0,0 +1,13 @@ + + +# Bind terminal-specific up and down keys + +if [[ -n "$terminfo[kcuu1]" ]]; then + bindkey -M emacs "$terminfo[kcuu1]" history-substring-search-up + bindkey -M viins "$terminfo[kcuu1]" history-substring-search-up +fi +if [[ -n "$terminfo[kcud1]" ]]; then + bindkey -M emacs "$terminfo[kcud1]" history-substring-search-down + bindkey -M viins "$terminfo[kcud1]" history-substring-search-down +fi + diff --git a/system/Xresources.symlink b/system/Xresources.symlink index 631e151..41b2dfc 100644 --- a/system/Xresources.symlink +++ b/system/Xresources.symlink @@ -1,8 +1,8 @@ -XTerm*faceName: DejaVu Sans Mono +XTerm*faceName: DejaVu Sans Mono for Powerline XTerm*faceSize: 10 XTerm*selectToClipboard: true XTerm*dynamicColors: on -UXTerm*faceName: DejaVu Sans Mono +UXTerm*faceName: DejaVu Sans Mono for Powerline UXTerm*faceSize: 10 UXTerm*selectToClipboard: true UXTerm*dynamicColors: on diff --git a/zsh/aliases.zsh b/zsh/aliases.zsh new file mode 100644 index 0000000..d8fb4b3 --- /dev/null +++ b/zsh/aliases.zsh @@ -0,0 +1 @@ +alias reload!='. ~/.zshrc' diff --git a/zsh/completion.zsh b/zsh/completion.zsh new file mode 100644 index 0000000..1862eec --- /dev/null +++ b/zsh/completion.zsh @@ -0,0 +1,5 @@ +# matches case insensitive for lowercase +zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}' + +# pasting with tabs doesn't perform completion +zstyle ':completion:*' insert-tab pending diff --git a/zsh/config.zsh b/zsh/config.zsh new file mode 100644 index 0000000..bdf8f98 --- /dev/null +++ b/zsh/config.zsh @@ -0,0 +1,48 @@ +if [[ -n $SSH_CONNECTION ]]; then + export PS1='%m:%3~$(git_info_for_prompt)%# ' +else + export PS1='%3~$(git_info_for_prompt)%# ' +fi + +export LSCOLORS="exfxcxdxbxegedabagacad" +export CLICOLOR=true + +fpath=($ZSH/functions $fpath) + +autoload -U $ZSH/functions/*(:t) + +HISTFILE=~/.zsh_history +HISTSIZE=10000 +SAVEHIST=10000 + +setopt NO_BG_NICE # don't nice background tasks +setopt NO_HUP +setopt NO_LIST_BEEP +setopt LOCAL_OPTIONS # allow functions to have local options +setopt LOCAL_TRAPS # allow functions to have local traps +setopt HIST_VERIFY +setopt SHARE_HISTORY # share history between sessions ??? +setopt EXTENDED_HISTORY # add timestamps to history +setopt PROMPT_SUBST +setopt CORRECT +setopt COMPLETE_IN_WORD +setopt IGNORE_EOF + +setopt APPEND_HISTORY # adds history +setopt INC_APPEND_HISTORY SHARE_HISTORY # adds history incrementally and share it across sessions +setopt HIST_IGNORE_ALL_DUPS # don't record dupes in history +setopt HIST_REDUCE_BLANKS + +# don't expand aliases _before_ completion has finished +# like: git comm-[tab] +setopt complete_aliases + +zle -N newtab + +bindkey '^[^[[D' backward-word +bindkey '^[^[[C' forward-word +bindkey '^[[5D' beginning-of-line +bindkey '^[[5C' end-of-line +bindkey '^[[3~' delete-char +bindkey '^[^N' newtab +bindkey '^?' backward-delete-char diff --git a/zsh/fpath.zsh b/zsh/fpath.zsh new file mode 100644 index 0000000..eaff4f4 --- /dev/null +++ b/zsh/fpath.zsh @@ -0,0 +1,2 @@ +#add each topic folder to fpath so that they can add functions and completion scripts +for topic_folder ($ZSH/*) if [ -d $topic_folder ]; then fpath=($topic_folder $fpath); fi; diff --git a/zsh/oh-my-zsh b/zsh/oh-my-zsh new file mode 160000 +Subproject 15d52fd4fbabda6c3c9fad80cb4378478d86a40 diff --git a/zsh/prompt.zsh b/zsh/prompt.zsh new file mode 100644 index 0000000..2e96295 --- /dev/null +++ b/zsh/prompt.zsh @@ -0,0 +1,82 @@ +autoload colors && colors +# cheers, @ehrenmurdick +# http://github.com/ehrenmurdick/config/blob/master/zsh/prompt.zsh + +if (( $+commands[git] )) +then + git="$commands[git]" +else + git="/usr/bin/git" +fi + +git_branch() { + echo $($git symbolic-ref HEAD 2>/dev/null | awk -F/ {'print $NF'}) +} + +git_dirty() { + if $(! $git status -s &> /dev/null) + then + echo "" + else + if [[ $($git status --porcelain) == "" ]] + then + echo "on %{$fg_bold[green]%}$(git_prompt_info)%{$reset_color%}" + else + echo "on %{$fg_bold[red]%}$(git_prompt_info)%{$reset_color%}" + fi + fi +} + +git_prompt_info () { + ref=$($git symbolic-ref HEAD 2>/dev/null) || return +# echo "(%{\e[0;33m%}${ref#refs/heads/}%{\e[0m%})" + echo "${ref#refs/heads/}" +} + +unpushed () { + $git cherry -v @{upstream} 2>/dev/null +} + +need_push () { + if [[ $(unpushed) == "" ]] + then + echo " " + else + echo " with %{$fg_bold[magenta]%}unpushed%{$reset_color%} " + fi +} + +ruby_version() { + if (( $+commands[rbenv] )) + then + echo "$(rbenv version | awk '{print $1}')" + fi + + if (( $+commands[rvm-prompt] )) + then + echo "$(rvm-prompt | awk '{print $1}')" + fi +} + +rb_prompt() { + if ! [[ -z "$(ruby_version)" ]] + then + echo "%{$fg_bold[yellow]%}$(ruby_version)%{$reset_color%} " + else + echo "" + fi +} + +directory_name() { + echo "%{$fg_bold[cyan]%}%1/%\/%{$reset_color%}" +} + +export PROMPT=$'\n$(rb_prompt)in $(directory_name) $(git_dirty)$(need_push)\n› ' +set_prompt () { + export RPROMPT="%{$fg_bold[cyan]%}%{$reset_color%}" +} + +precmd() { + title "zsh" "%m" "%55<...<%~" + set_prompt +} diff --git a/zsh/window.zsh b/zsh/window.zsh new file mode 100644 index 0000000..805cb92 --- /dev/null +++ b/zsh/window.zsh @@ -0,0 +1,19 @@ +# From http://dotfiles.org/~_why/.zshrc +# Sets the window title nicely no matter where you are +function title() { + # escape '%' chars in $1, make nonprintables visible + a=${(V)1//\%/\%\%} + + # Truncate command, and join lines. + a=$(print -Pn "%40>...>$a" | tr -d "\n") + + case $TERM in + screen) + print -Pn "\ek$a:$3\e\\" # screen title (in ^A") + ;; + xterm*|rxvt) + print -Pn "\e]2;$2\a" # plain xterm title ($3 for pwd) + ;; + esac +} + diff --git a/zsh/zshrc.symlink b/zsh/zshrc.symlink new file mode 100644 index 0000000..87c5ace --- /dev/null +++ b/zsh/zshrc.symlink @@ -0,0 +1,44 @@ +# shortcut to this dotfiles path is $ZSH +export ZSH=$HOME/dotfiles + +# your project folder that we can `c [tab]` to +export PROJECTS=~/VersionControl + +# Stash your environment variables in ~/.localrc. This means they'll stay out +# of your main dotfiles repository (which may be public, like this one), but +# you'll have access to them in your scripts. +if [[ -a ~/.localrc ]] +then + source ~/.localrc +fi + +# all of our zsh files +typeset -U config_files +config_files=($ZSH/**/*.zsh) + +# load the path files +for file in ${(M)config_files:#*/path.zsh} +do + source $file +done + +# load everything but the path and completion files +for file in ${${config_files:#*/path.zsh}:#*/completion.zsh} +do + source $file +done + +# initialize autocomplete here, otherwise functions won't be loaded +autoload -U compinit +compinit + +# load every completion after autocomplete loads +for file in ${(M)config_files:#*/completion.zsh} +do + source $file +done + +unset config_files + +### Oh-my-zsh +ZSH_THEME="agnoster" |