aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCamil Staps2016-02-09 13:33:49 +0100
committerCamil Staps2016-11-30 19:11:06 +0100
commitae4fdb755a6e07e9f86ae34551987a446092f0db (patch)
tree2b754ae5b224c3d9fe7d073228d220555fcebac1
parenttype pass (diff)
zsh
-rw-r--r--.gitmodules6
m---------fonts0
-rw-r--r--functions/_boom29
-rw-r--r--functions/_brew65
-rw-r--r--functions/_c5
-rw-r--r--functions/_git-rm7
-rw-r--r--functions/c24
-rw-r--r--functions/extract27
-rw-r--r--functions/gf4
-rw-r--r--history-substring-search.plugin.zsh13
-rw-r--r--system/Xresources.symlink4
-rw-r--r--zsh/aliases.zsh1
-rw-r--r--zsh/completion.zsh5
-rw-r--r--zsh/config.zsh48
-rw-r--r--zsh/fpath.zsh2
m---------zsh/oh-my-zsh0
-rw-r--r--zsh/prompt.zsh82
-rw-r--r--zsh/window.zsh19
-rw-r--r--zsh/zshrc.symlink44
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"