ZSH: Switch from zprezto to zgen
This commit is contained in:
parent
39900faf2e
commit
c7de2307a4
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,4 +1,5 @@
|
|||
vim/bundle/
|
||||
vimperator/info/
|
||||
tmp/
|
||||
zsh/cache
|
||||
Gemfile.lock
|
||||
|
|
|
@ -13,7 +13,10 @@ alias bru='brew update && brew upgrade --all'
|
|||
# Tools
|
||||
alias codekit='open -a CodeKit'
|
||||
alias ag='nocorrect noglob ag'
|
||||
alias ln="${aliases[ln]:-ln} -v" # Verbose ln
|
||||
alias ls="ls -G"
|
||||
alias l="ls -l"
|
||||
alias ll="ls -l"
|
||||
alias ln="ln -v" # Verbose ln
|
||||
alias wget='wget -c' # Resume dl if possible
|
||||
alias rsyncd='rsync -va --delete' # Hard sync two directories
|
||||
zman() { PAGER="less -g -s '+/^ "$1"'" man zshall; }
|
||||
|
@ -40,7 +43,6 @@ if is-callable 'transmission-remote'; then
|
|||
fi
|
||||
|
||||
# Editors
|
||||
unalias e
|
||||
v() { [ $# -eq 0 ] && vim . || vim $@ }
|
||||
e() { # emacs
|
||||
local input
|
117
zsh/completion.zsh
Normal file
117
zsh/completion.zsh
Normal file
|
@ -0,0 +1,117 @@
|
|||
# Return if requirements are not found.
|
||||
[[ "$TERM" == 'dumb' ]] && return 1
|
||||
|
||||
# Load and initialize the completion system ignoring insecure directories.
|
||||
autoload -Uz compinit && compinit -i
|
||||
|
||||
## Options
|
||||
setopt COMPLETE_IN_WORD # Complete from both ends of a word.
|
||||
setopt ALWAYS_TO_END # Move cursor to the end of a completed word.
|
||||
setopt PATH_DIRS # Perform path search even on command names with slashes.
|
||||
setopt AUTO_MENU # Show completion menu on a successive tab press.
|
||||
setopt AUTO_LIST # Automatically list choices on ambiguous completion.
|
||||
setopt AUTO_PARAM_SLASH # If completed parameter is a directory, add a trailing slash.
|
||||
unsetopt MENU_COMPLETE # Do not autoselect the first completion entry.
|
||||
unsetopt FLOW_CONTROL # Disable start/stop characters in shell editor.
|
||||
|
||||
# Use caching to make completion for commands such as dpkg and apt usable.
|
||||
zstyle ':completion::complete:*' use-cache on
|
||||
zstyle ':completion::complete:*' cache-path "${ZDOTDIR:-$HOME}/.zcompcache"
|
||||
|
||||
# Case-insensitive (all), partial-word, and then substring completion.
|
||||
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'
|
||||
unsetopt CASE_GLOB
|
||||
|
||||
# Group matches and describe.
|
||||
zstyle ':completion:*:*:*:*:*' menu select
|
||||
zstyle ':completion:*:matches' group 'yes'
|
||||
zstyle ':completion:*:options' description 'yes'
|
||||
zstyle ':completion:*:options' auto-description '%d'
|
||||
zstyle ':completion:*:corrections' format ' %F{green}-- %d (errors: %e) --%f'
|
||||
zstyle ':completion:*:descriptions' format ' %F{yellow}-- %d --%f'
|
||||
zstyle ':completion:*:messages' format ' %F{purple} -- %d --%f'
|
||||
zstyle ':completion:*:warnings' format ' %F{red}-- no matches found --%f'
|
||||
zstyle ':completion:*:default' list-prompt '%S%M matches%s'
|
||||
zstyle ':completion:*' format ' %F{yellow}-- %d --%f'
|
||||
zstyle ':completion:*' group-name ''
|
||||
zstyle ':completion:*' verbose yes
|
||||
|
||||
# Fuzzy match mistyped completions.
|
||||
zstyle ':completion:*' completer _complete _match _approximate
|
||||
zstyle ':completion:*:match:*' original only
|
||||
zstyle ':completion:*:approximate:*' max-errors 1 numeric
|
||||
|
||||
# Increase the number of errors based on the length of the typed word.
|
||||
zstyle -e ':completion:*:approximate:*' max-errors 'reply=($((($#PREFIX+$#SUFFIX)/3))numeric)'
|
||||
|
||||
# Don't complete unavailable commands.
|
||||
zstyle ':completion:*:functions' ignored-patterns '(_*|pre(cmd|exec))'
|
||||
|
||||
# Array completion element sorting.
|
||||
zstyle ':completion:*:*:-subscript-:*' tag-order indexes parameters
|
||||
|
||||
# Directories
|
||||
zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS}
|
||||
zstyle ':completion:*:*:cd:*' tag-order local-directories directory-stack path-directories
|
||||
zstyle ':completion:*:*:cd:*:directory-stack' menu yes select
|
||||
zstyle ':completion:*:-tilde-:*' group-order 'named-directories' 'path-directories' 'users' 'expand'
|
||||
zstyle ':completion:*' squeeze-slashes true
|
||||
|
||||
# History
|
||||
zstyle ':completion:*:history-words' stop yes
|
||||
zstyle ':completion:*:history-words' remove-all-dups yes
|
||||
zstyle ':completion:*:history-words' list false
|
||||
zstyle ':completion:*:history-words' menu yes
|
||||
|
||||
# Environmental Variables
|
||||
zstyle ':completion::*:(-command-|export):*' fake-parameters ${${${_comps[(I)-value-*]#*,}%%,*}:#-*-}
|
||||
|
||||
# Populate hostname completion.
|
||||
zstyle -e ':completion:*:hosts' hosts 'reply=(
|
||||
${=${=${=${${(f)"$(cat {/etc/ssh_,~/.ssh/known_}hosts(|2)(N) 2>/dev/null)"}%%[#| ]*}//\]:[0-9]*/ }//,/ }//\[/ }
|
||||
${=${(f)"$(cat /etc/hosts(|)(N) <<(ypcat hosts 2>/dev/null))"}%%\#*}
|
||||
${=${${${${(@M)${(f)"$(cat ~/.ssh/config 2>/dev/null)"}:#Host *}#Host }:#*\**}:#*\?*}}
|
||||
)'
|
||||
|
||||
# Don't complete uninteresting users...
|
||||
zstyle ':completion:*:*:*:users' ignored-patterns \
|
||||
adm amanda apache avahi beaglidx bin cacti canna clamav daemon \
|
||||
dbus distcache dovecot fax ftp games gdm gkrellmd gopher \
|
||||
hacluster haldaemon halt hsqldb ident junkbust ldap lp mail \
|
||||
mailman mailnull mldonkey mysql nagios \
|
||||
named netdump news nfsnobody nobody nscd ntp nut nx openvpn \
|
||||
operator pcap postfix postgres privoxy pulse pvm quagga radvd \
|
||||
rpc rpcuser rpm shutdown squid sshd sync uucp vcsa xfs '_*'
|
||||
|
||||
# ... unless we really want to.
|
||||
zstyle '*' single-ignored show
|
||||
|
||||
# Ignore multiple entries.
|
||||
zstyle ':completion:*:(rm|kill|diff):*' ignore-line other
|
||||
zstyle ':completion:*:rm:*' file-patterns '*:all-files'
|
||||
|
||||
# Kill
|
||||
zstyle ':completion:*:*:*:*:processes' command 'ps -u $LOGNAME -o pid,user,command -w'
|
||||
zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#) ([0-9a-z-]#)*=01;36=0=01'
|
||||
zstyle ':completion:*:*:kill:*' menu yes select
|
||||
zstyle ':completion:*:*:kill:*' force-list always
|
||||
zstyle ':completion:*:*:kill:*' insert-ids single
|
||||
|
||||
# Man
|
||||
zstyle ':completion:*:manuals' separate-sections true
|
||||
zstyle ':completion:*:manuals.(^1*)' insert-sections true
|
||||
|
||||
# Media Players
|
||||
zstyle ':completion:*:*:mpg123:*' file-patterns '*.(mp3|MP3):mp3\ files *(-/):directories'
|
||||
zstyle ':completion:*:*:mpg321:*' file-patterns '*.(mp3|MP3):mp3\ files *(-/):directories'
|
||||
zstyle ':completion:*:*:ogg123:*' file-patterns '*.(ogg|OGG|flac):ogg\ files *(-/):directories'
|
||||
zstyle ':completion:*:*:mocp:*' file-patterns '*.(wav|WAV|mp3|MP3|ogg|OGG|flac):ogg\ files *(-/):directories'
|
||||
|
||||
# SSH/SCP/RSYNC
|
||||
zstyle ':completion:*:(scp|rsync):*' tag-order 'hosts:-host:host hosts:-domain:domain hosts:-ipaddr:ip\ address *'
|
||||
zstyle ':completion:*:(scp|rsync):*' group-order users files all-files hosts-domain hosts-host hosts-ipaddr
|
||||
zstyle ':completion:*:ssh:*' tag-order 'hosts:-host:host hosts:-domain:domain hosts:-ipaddr:ip\ address *'
|
||||
zstyle ':completion:*:ssh:*' group-order users hosts-domain hosts-host users hosts-ipaddr
|
||||
zstyle ':completion:*:(ssh|scp|rsync):*:hosts-host' ignored-patterns '*(.|:)*' loopback ip6-loopback localhost ip6-localhost broadcasthost
|
||||
zstyle ':completion:*:(ssh|scp|rsync):*:hosts-domain' ignored-patterns '<->.<->.<->.<->' '^[-[:alnum:]]##(.[-[:alnum:]]##)##' '*@*'
|
||||
zstyle ':completion:*:(ssh|scp|rsync):*:hosts-ipaddr' ignored-patterns '^(<->.<->.<->.<->|(|::)([[:xdigit:].]##:(#c,2))##(|%*))' '127.0.0.<->' '255.255.255.255' '::1' 'fe80::*'
|
|
@ -1,151 +0,0 @@
|
|||
#compdef doing
|
||||
|
||||
local ret=1 state
|
||||
|
||||
_arguments \
|
||||
':subcommand:->subcommand' \
|
||||
'*::options:->options' && ret=0
|
||||
|
||||
case $state in
|
||||
subcommand)
|
||||
local -a subcommands
|
||||
subcommands=(
|
||||
'help:Shows a list of commands or help for one command'
|
||||
'now:Add an entry'
|
||||
'note:Add a note to the last entry'
|
||||
'meanwhile:Finish any running @meanwhile tasks and optionally create a new one'
|
||||
'later:Add an item to the Later section'
|
||||
'done:Add a completed item with @done(date). No argument finishes last entry.'
|
||||
'finish:Mark last X entries as @done'
|
||||
'tag:Tag last entry'
|
||||
'mark:Mark last entry as highlighted'
|
||||
'show:List all entries'
|
||||
'grep:Search for entries'
|
||||
'recent:List recent entries'
|
||||
'today:List entries from today'
|
||||
'yesterday:List entries from yesterday'
|
||||
'last:Show the last entry'
|
||||
'sections:List sections'
|
||||
'choose:Select a section to display from a menu'
|
||||
'add_section:Add a new section to the "doing" file'
|
||||
'view:Display a user-created view'
|
||||
'views:List available custom views'
|
||||
'archive:Move entries in between sections'
|
||||
'open:Open the "doing" file in an editor'
|
||||
'config:Edit the configuration file'
|
||||
'undo:Undo the last change to the doing_file'
|
||||
)
|
||||
_describe -t subcommands 'doing subcommand' subcommands && ret=0
|
||||
;;
|
||||
|
||||
options)
|
||||
age=({-a,--age=}"[Age (oldest/newest) (default: newest)]")
|
||||
app=({-a,--app=}"[Edit entry with specified app (default: none)")
|
||||
archive=({-a,--archive}"[Archive previous @meanwhile entry]")
|
||||
back="--back=[Backdate start time (4pm|20m|2h|yesterday noon) (default: none)]"
|
||||
boolean=({-b,--boolean=}"[Tag boolean (AND,OR,NONE) (default: OR)]")
|
||||
bool=({-b,--bool=}"[Tag boolean (default: AND)]")
|
||||
count=({-c,--count=}"[How many recent entries to tag (default: 1)]")
|
||||
count=({-c,--count=}"[Max count to show (default: 0)]")
|
||||
date=({-d,--date}"[Include date (default: enabled)]")
|
||||
editor=( {-e,--editor}"[Edit entry with $EDITOR]")
|
||||
finish=({-f,--finish_last}"[Timed entry, marks last entry in section as @done]")
|
||||
file=({-f,--file=}"[Specify alternate doing file (default: none)]")
|
||||
noarchive="--no-archive[Don't archive previous @meanwhile entry]"
|
||||
nodate="--no-date[Don't include date]"
|
||||
noeditor="--no-editor[Don't edit entry with $EDITOR]"
|
||||
note=({-n,--note=}"[Note (default: none)]")
|
||||
notimes="--no-times[Don't show time intervals on @done tasks.]"
|
||||
nototals="--no-totals[Don't show intervals with totals at the end of output]"
|
||||
output=({-o,--output=}"[Output to export format (csv|html) (default: none)]")
|
||||
remove=({-r,--remove}"[Replace/Remove last entry's note]")
|
||||
section=({-s,--section=}"[Section (default: Currently)]")
|
||||
sort=({-s,--sort=}"[Sort order (asc/desc) (default: asc)]")
|
||||
times=({-t,--times}"[Show time intervals on @done tasks (default: enabled)]")
|
||||
took=({-t,--took=}"[Set completion date to start date plus XX(mhd) or (HH:MM) (default: none)]")
|
||||
totals="--totals[Show intervals with totals at the end of output]"
|
||||
|
||||
case $words[1] in
|
||||
now)
|
||||
args=( $back $noeditor $editor $note $section $finish )
|
||||
;;
|
||||
|
||||
note)
|
||||
args=( $section $editor $remove )
|
||||
;;
|
||||
|
||||
meanwhile)
|
||||
args=( $back $noeditor $editor $note $section $archive $noarchive )
|
||||
;;
|
||||
|
||||
later)
|
||||
args=( $back $noeditor $editor $note $app )
|
||||
;;
|
||||
|
||||
done)
|
||||
args=( $back $took $section {-r,--remove}"[Remove @done tag]" $date $nodate $archive $editor $noeditor )
|
||||
;;
|
||||
|
||||
finish)
|
||||
args=( $back $took $section $date $nodate $archive $editor $noeditor )
|
||||
;;
|
||||
|
||||
tag)
|
||||
args=( $section $count $date $remove )
|
||||
;;
|
||||
|
||||
mark)
|
||||
args=( $section $remove )
|
||||
;;
|
||||
|
||||
show)
|
||||
args=( $boolean $count $age $sort $output $times $notimes $totals $nototals )
|
||||
;;
|
||||
|
||||
grep)
|
||||
args=( $section $output $times $notimes $totals $nototals )
|
||||
;;
|
||||
|
||||
recent)
|
||||
args=( $section $times $notimes $totals $nototals )
|
||||
;;
|
||||
|
||||
today)
|
||||
args=( $output $times $notimes $totals $nototals )
|
||||
;;
|
||||
|
||||
yesterday)
|
||||
args=( $output $times $notimes $totals $nototals )
|
||||
;;
|
||||
|
||||
view)
|
||||
args=( $section $count $output $times $notimes $totals $nototals )
|
||||
;;
|
||||
|
||||
archive)
|
||||
args=( $keep $to $bool )
|
||||
;;
|
||||
|
||||
open)
|
||||
args=(
|
||||
"-a [open with app name (default:none)"
|
||||
"-b [open with app bundle id (default: none)"
|
||||
"-e [open with $EDITOR]"
|
||||
)
|
||||
;;
|
||||
|
||||
config)
|
||||
args=( $editor )
|
||||
;;
|
||||
|
||||
undo)
|
||||
args=( $file )
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
_arguments $args && ret=0
|
||||
;;
|
||||
esac
|
||||
|
||||
return ret
|
25
zsh/config.zsh
Normal file
25
zsh/config.zsh
Normal file
|
@ -0,0 +1,25 @@
|
|||
# Allow command line editing in an external editor.
|
||||
autoload -Uz edit-command-line
|
||||
zle -N edit-command-line
|
||||
|
||||
export GIT_MERGE_AUTOEDIT=no
|
||||
unsetopt CORRECT_ALL
|
||||
|
||||
setopt append_history share_history extended_history
|
||||
setopt histignorealldups histignorespace
|
||||
setopt extended_glob
|
||||
setopt longlistjobs
|
||||
setopt nonomatch
|
||||
setopt notify
|
||||
setopt hash_list_all
|
||||
|
||||
# Don't send SIGHUP to background processes when the shell exits.
|
||||
setopt nohup
|
||||
|
||||
setopt auto_cd
|
||||
setopt auto_pushd
|
||||
setopt pushd_ignore_dups
|
||||
setopt nobeep
|
||||
setopt noglobdots
|
||||
setopt noshwordsplit
|
||||
setopt unset
|
|
@ -1,26 +1,44 @@
|
|||
export GIT_MERGE_AUTOEDIT=no
|
||||
unsetopt CORRECT_ALL
|
||||
|
||||
|
||||
#################
|
||||
# Keybindings #
|
||||
#################
|
||||
|
||||
bindkey -v
|
||||
bindkey '^ ' edit-command-line
|
||||
|
||||
bindkey -M viins '^w' backward-kill-word
|
||||
bindkey -M viins '^a' beginning-of-line
|
||||
bindkey -M viins '^e' end-of-line
|
||||
bindkey -M viins '^[w' forward-word
|
||||
bindkey -M viins '^[b' backward-word
|
||||
|
||||
bindkey -M vicmd 'yy' vi-yank-whole-line
|
||||
bindkey -M vicmd 'Y' vi-yank-eol
|
||||
|
||||
bindkey -M vicmd '^r' redo
|
||||
|
||||
bindkey -M viins ' ' magic-space
|
||||
bindkey -M viins 'jk' vi-cmd-mode
|
||||
|
||||
bindkey -M viins '^x^f' fasd-complete-f # C-x C-f to do fasd-complete-f (only files)
|
||||
bindkey -M viins '^x^d' fasd-complete-d # C-x C-d to do fasd-complete-d (only directories)
|
||||
|
||||
bindkey -M viins '^q' push-line-or-edit
|
||||
|
||||
bindkey -M vicmd "?" history-incremental-pattern-search-backward
|
||||
bindkey -M vicmd "/" history-incremental-pattern-search-forward
|
||||
|
||||
# bind UP and DOWN arrow keys
|
||||
zmodload zsh/terminfo
|
||||
bindkey "$terminfo[kcuu1]" history-substring-search-up
|
||||
bindkey "$terminfo[kcud1]" history-substring-search-down
|
||||
# bind UP and DOWN arrow keys (compatibility fallback
|
||||
# for Ubuntu 12.04, Fedora 21, and MacOSX 10.9 users)
|
||||
bindkey '^[[A' history-substring-search-up
|
||||
bindkey '^[[B' history-substring-search-down]]]]
|
||||
|
||||
# Edit command in an external editor.
|
||||
bindkey -M vicmd "v" edit-command-line
|
||||
|
||||
# # Undo/Redo
|
||||
bindkey -M vicmd "u" undo
|
||||
bindkey -M vicmd "$key_info[Control]R" redo
|
||||
|
||||
bindkey -M viins "." expand-dot-to-parent-directory-path
|
||||
|
||||
# Completing words in buffer in tmux
|
||||
if [ -n "$TMUX" ]; then
|
||||
_tmux_pane_words() {
|
||||
|
@ -44,3 +62,13 @@ if [ -n "$TMUX" ]; then
|
|||
zstyle ':completion:tmux-pane-words-(prefix|anywhere):*' ignore-line current
|
||||
zstyle ':completion:tmux-pane-words-anywhere:*' matcher-list 'b:=* m:{A-Za-z}={a-zA-Z}'
|
||||
fi
|
||||
|
||||
# Expands .... to ../..
|
||||
function expand-dot-to-parent-directory-path {
|
||||
if [[ $LBUFFER = *.. ]]; then
|
||||
LBUFFER+='/..'
|
||||
else
|
||||
LBUFFER+='.'
|
||||
fi
|
||||
}
|
||||
zle -N expand-dot-to-parent-directory-path
|
111
zsh/preztorc
111
zsh/preztorc
|
@ -1,111 +0,0 @@
|
|||
# Sets Prezto options.
|
||||
|
||||
[[ -s "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" ]]
|
||||
source "${ZDOTDIR:-$HOME}/.zprezto/init.zsh"
|
||||
|
||||
# General
|
||||
|
||||
zstyle ':prezto:module:prompt' theme 'pure'
|
||||
|
||||
# Set case-sensitivity for completion, history lookup, etc.
|
||||
# zstyle ':prezto:*:*' case-sensitive 'yes'
|
||||
|
||||
# Color output (auto set to 'no' on dumb terminals).
|
||||
zstyle ':prezto:*:*' color 'yes'
|
||||
|
||||
# Set the Zsh modules to load (man zshmodules).
|
||||
# zstyle ':prezto:load' zmodule 'attr' 'stat'
|
||||
|
||||
# Set the Zsh functions to load (man zshcontrib).
|
||||
zstyle ':prezto:load' zfunction 'zmv'
|
||||
|
||||
# Set the Prezto modules to load (browse modules).
|
||||
# The order matters.
|
||||
if [[ -z "$EMACS" ]]; then
|
||||
zstyle ':prezto:load' pmodule \
|
||||
'environment' \
|
||||
'terminal' \
|
||||
'editor' \
|
||||
'opp' \
|
||||
'history' \
|
||||
'history-substring-search' \
|
||||
'directory' \
|
||||
'spectrum' \
|
||||
'utility' \
|
||||
'completion' \
|
||||
'prompt' \
|
||||
'syntax-highlighting' \
|
||||
'git' \
|
||||
'osx'
|
||||
else
|
||||
zstyle ':prezto:load' pmodule \
|
||||
'environment' \
|
||||
'history' \
|
||||
'directory' \
|
||||
'spectrum' \
|
||||
'utility' \
|
||||
'git' \
|
||||
'osx'
|
||||
fi
|
||||
|
||||
|
||||
# Editor
|
||||
|
||||
# Set the key mapping style to 'emacs' or 'vi'.
|
||||
zstyle ':prezto:module:editor' key-bindings 'vi'
|
||||
|
||||
# Auto convert .... to ../..
|
||||
zstyle ':prezto:module:editor' dot-expansion 'yes'
|
||||
|
||||
|
||||
# Git
|
||||
|
||||
# Ignore submodules when they are 'dirty', 'untracked', 'all', or 'none'.
|
||||
zstyle ':prezto:module:git:status:ignore' submodules 'all'
|
||||
|
||||
|
||||
# GNU Utility
|
||||
|
||||
# Set the command prefix on non-GNU systems.
|
||||
# zstyle ':prezto:module:gnu-utility' prefix 'g'
|
||||
|
||||
|
||||
# History Substring Search
|
||||
|
||||
# Set the query found color.
|
||||
# zstyle ':prezto:module:history-substring-search:color' found ''
|
||||
|
||||
# Set the query not found color.
|
||||
# zstyle ':prezto:module:history-substring-search:color' not-found ''
|
||||
|
||||
# Set the search globbing flags.
|
||||
# zstyle ':prezto:module:history-substring-search' globbing-flags ''
|
||||
|
||||
|
||||
# SSH
|
||||
|
||||
# Set the SSH identities to load into the agent.
|
||||
zstyle ':prezto:module:ssh:load' identities 'id_rsa' 'id_rsa2' 'id_github'
|
||||
|
||||
|
||||
# Syntax Highlighting
|
||||
|
||||
# Set syntax highlighters.
|
||||
# By default, only the main highlighter is enabled.
|
||||
zstyle ':prezto:module:syntax-highlighting' highlighters \
|
||||
'main' \
|
||||
'brackets' \
|
||||
'pattern' \
|
||||
'cursor' \
|
||||
'root'
|
||||
|
||||
# Terminal
|
||||
|
||||
# Auto set the tab and window titles.
|
||||
zstyle ':prezto:module:terminal' auto-title 'yes'
|
||||
|
||||
# Set the window title format.
|
||||
# zstyle ':prezto:module:terminal:window-title' format '%n@%m: %s'
|
||||
|
||||
# Set the tab title format.
|
||||
# zstyle ':prezto:module:terminal:tab-title' format '%m: %s'
|
132
zsh/prompt.zsh
Normal file
132
zsh/prompt.zsh
Normal file
|
@ -0,0 +1,132 @@
|
|||
# Based off Pure <https://github.com/sindresorhus/pure>
|
||||
|
||||
# For my own and others sanity
|
||||
# git:
|
||||
# %b => current branch
|
||||
# %a => current action (rebase/merge)
|
||||
# prompt:
|
||||
# %F => color dict
|
||||
# %f => reset color
|
||||
# %~ => current path
|
||||
# %* => time
|
||||
# %n => username
|
||||
# %m => shortname host
|
||||
# %(?..) => prompt conditional - %(condition.true.false)
|
||||
|
||||
# turns seconds into human readable time
|
||||
# 165392 => 1d 21h 56m 32s
|
||||
prompt_pure_human_time() {
|
||||
echo -n " "
|
||||
local tmp=$1
|
||||
local days=$(( tmp / 60 / 60 / 24 ))
|
||||
local hours=$(( tmp / 60 / 60 % 24 ))
|
||||
local minutes=$(( tmp / 60 % 60 ))
|
||||
local seconds=$(( tmp % 60 ))
|
||||
(( $days > 0 )) && echo -n "${days}d "
|
||||
(( $hours > 0 )) && echo -n "${hours}h "
|
||||
(( $minutes > 0 )) && echo -n "${minutes}m "
|
||||
echo "${seconds}s"
|
||||
}
|
||||
|
||||
# fastest possible way to check if repo is dirty
|
||||
prompt_pure_git_dirty() {
|
||||
# check if we're in a git repo
|
||||
[[ "$(command git rev-parse --is-inside-work-tree 2>/dev/null)" == "true" ]] || return
|
||||
# check if it's dirty
|
||||
[[ "$PURE_GIT_UNTRACKED_DIRTY" == 0 ]] && local umode="-uno" || local umode="-unormal"
|
||||
command test -n "$(git status --porcelain --ignore-submodules ${umode})"
|
||||
|
||||
(($? == 0)) && echo '*'
|
||||
}
|
||||
|
||||
# displays the exec time of the last command if set threshold was exceeded
|
||||
prompt_pure_cmd_exec_time() {
|
||||
local stop=$EPOCHSECONDS
|
||||
local start=${cmd_timestamp:-$stop}
|
||||
integer elapsed=$stop-$start
|
||||
(($elapsed > ${PURE_CMD_MAX_EXEC_TIME:=5})) && prompt_pure_human_time $elapsed
|
||||
}
|
||||
|
||||
prompt_pure_preexec() {
|
||||
cmd_timestamp=$EPOCHSECONDS
|
||||
|
||||
# shows the current dir and executed command in the title when a process is active
|
||||
print -Pn "\e]0;"
|
||||
echo -nE "$PWD:t: $2"
|
||||
print -Pn "\a"
|
||||
}
|
||||
|
||||
# string length ignoring ansi escapes
|
||||
prompt_pure_string_length() {
|
||||
# Subtract one since newline is counted as two characters
|
||||
echo $(( ${#${(S%%)1//(\%([KF1]|)\{*\}|\%[Bbkf])}} - 1 ))
|
||||
}
|
||||
|
||||
prompt_pure_precmd() {
|
||||
# shows the full path in the title
|
||||
print -Pn '\e]0;%~\a'
|
||||
|
||||
# git info
|
||||
vcs_info
|
||||
|
||||
local prompt_pure_preprompt="%F{blue}%~%F{242}$vcs_info_msg_0_`prompt_pure_git_dirty`$prompt_pure_username%f%F{yellow}`prompt_pure_cmd_exec_time`%f"'$(vi_mode_prompt_info)'
|
||||
# print -P $prompt_pure_preprompt
|
||||
RPROMPT=$prompt_pure_preprompt
|
||||
|
||||
# check async if there is anything to pull
|
||||
(( ${PURE_GIT_PULL:-1} )) && {
|
||||
# check if we're in a git repo
|
||||
[[ "$(command git rev-parse --is-inside-work-tree 2>/dev/null)" == "true" ]] &&
|
||||
# make sure working tree is not $HOME
|
||||
[[ "$(command git rev-parse --show-toplevel)" != "$HOME" ]] &&
|
||||
# check check if there is anything to pull
|
||||
command git -c gc.auto=0 fetch &>/dev/null &&
|
||||
# check if there is an upstream configured for this branch
|
||||
command git rev-parse --abbrev-ref @'{u}' &>/dev/null && {
|
||||
local arrows=''
|
||||
(( $(command git rev-list --right-only --count HEAD...@'{u}' 2>/dev/null) > 0 )) && arrows='⇣'
|
||||
(( $(command git rev-list --left-only --count HEAD...@'{u}' 2>/dev/null) > 0 )) && arrows+='⇡'
|
||||
RPROMPT+="\e7\e[A\e[1G\e[`prompt_pure_string_length $prompt_pure_preprompt`C%F{cyan}${arrows}%f\e8"
|
||||
}
|
||||
} &!
|
||||
|
||||
# reset value since `preexec` isn't always triggered
|
||||
unset cmd_timestamp
|
||||
}
|
||||
|
||||
prompt_pure_setup() {
|
||||
# prevent percentage showing up
|
||||
# if output doesn't end with a newline
|
||||
export PROMPT_EOL_MARK=''
|
||||
|
||||
# disable auth prompting on git 2.3+
|
||||
export GIT_TERMINAL_PROMPT=0
|
||||
|
||||
prompt_opts=(cr subst percent)
|
||||
|
||||
setopt PROMPTSUBST
|
||||
zmodload zsh/datetime
|
||||
autoload -Uz add-zsh-hook
|
||||
autoload -Uz vcs_info
|
||||
|
||||
add-zsh-hook precmd prompt_pure_precmd
|
||||
add-zsh-hook preexec prompt_pure_preexec
|
||||
|
||||
zstyle ':vcs_info:*' enable git
|
||||
zstyle ':vcs_info:*' use-simple true
|
||||
zstyle ':vcs_info:git*' formats ' %b'
|
||||
zstyle ':vcs_info:git*' actionformats ' %b|%a'
|
||||
|
||||
# show username@host if logged in through SSH
|
||||
[[ "$SSH_CONNECTION" != '' ]] && prompt_pure_username=' %n@%m'
|
||||
|
||||
# show username@host if root, with username in white
|
||||
[[ $UID -eq 0 ]] && prompt_pure_username=' %F{white}%n%F{242}@%m'
|
||||
|
||||
# prompt turns red if the previous command didn't exit with 0
|
||||
N_MODE=" --NORMAL--"
|
||||
I_MODE=""
|
||||
PROMPT='%(?.%F{green}.%F{red}❯%F{green})❯ %f'
|
||||
}
|
||||
|
||||
prompt_pure_setup "$@"
|
|
@ -1,133 +0,0 @@
|
|||
# Based off Pure <https://github.com/sindresorhus/pure>
|
||||
|
||||
# For my own and others sanity
|
||||
# git:
|
||||
# %b => current branch
|
||||
# %a => current action (rebase/merge)
|
||||
# prompt:
|
||||
# %F => color dict
|
||||
# %f => reset color
|
||||
# %~ => current path
|
||||
# %* => time
|
||||
# %n => username
|
||||
# %m => shortname host
|
||||
# %(?..) => prompt conditional - %(condition.true.false)
|
||||
|
||||
# turns seconds into human readable time
|
||||
# 165392 => 1d 21h 56m 32s
|
||||
prompt_pure_human_time() {
|
||||
echo -n " "
|
||||
local tmp=$1
|
||||
local days=$(( tmp / 60 / 60 / 24 ))
|
||||
local hours=$(( tmp / 60 / 60 % 24 ))
|
||||
local minutes=$(( tmp / 60 % 60 ))
|
||||
local seconds=$(( tmp % 60 ))
|
||||
(( $days > 0 )) && echo -n "${days}d "
|
||||
(( $hours > 0 )) && echo -n "${hours}h "
|
||||
(( $minutes > 0 )) && echo -n "${minutes}m "
|
||||
echo "${seconds}s"
|
||||
}
|
||||
|
||||
# fastest possible way to check if repo is dirty
|
||||
prompt_pure_git_dirty() {
|
||||
# check if we're in a git repo
|
||||
[[ "$(command git rev-parse --is-inside-work-tree 2>/dev/null)" == "true" ]] || return
|
||||
# check if it's dirty
|
||||
[[ "$PURE_GIT_UNTRACKED_DIRTY" == 0 ]] && local umode="-uno" || local umode="-unormal"
|
||||
command test -n "$(git status --porcelain --ignore-submodules ${umode})"
|
||||
|
||||
(($? == 0)) && echo '*'
|
||||
}
|
||||
|
||||
# displays the exec time of the last command if set threshold was exceeded
|
||||
prompt_pure_cmd_exec_time() {
|
||||
local stop=$EPOCHSECONDS
|
||||
local start=${cmd_timestamp:-$stop}
|
||||
integer elapsed=$stop-$start
|
||||
(($elapsed > ${PURE_CMD_MAX_EXEC_TIME:=5})) && prompt_pure_human_time $elapsed
|
||||
}
|
||||
|
||||
prompt_pure_preexec() {
|
||||
cmd_timestamp=$EPOCHSECONDS
|
||||
|
||||
# shows the current dir and executed command in the title when a process is active
|
||||
print -Pn "\e]0;"
|
||||
echo -nE "$PWD:t: $2"
|
||||
print -Pn "\a"
|
||||
}
|
||||
|
||||
# string length ignoring ansi escapes
|
||||
prompt_pure_string_length() {
|
||||
# Subtract one since newline is counted as two characters
|
||||
echo $(( ${#${(S%%)1//(\%([KF1]|)\{*\}|\%[Bbkf])}} - 1 ))
|
||||
}
|
||||
|
||||
prompt_pure_precmd() {
|
||||
# shows the full path in the title
|
||||
print -Pn '\e]0;%~\a'
|
||||
|
||||
# git info
|
||||
vcs_info
|
||||
|
||||
local prompt_pure_preprompt="%F{blue}%~%F{242}$vcs_info_msg_0_`prompt_pure_git_dirty`$prompt_pure_username%f%F{yellow}`prompt_pure_cmd_exec_time`%f"
|
||||
# print -P $prompt_pure_preprompt
|
||||
RPROMPT=$prompt_pure_preprompt
|
||||
|
||||
# check async if there is anything to pull
|
||||
(( ${PURE_GIT_PULL:-1} )) && {
|
||||
# check if we're in a git repo
|
||||
[[ "$(command git rev-parse --is-inside-work-tree 2>/dev/null)" == "true" ]] &&
|
||||
# make sure working tree is not $HOME
|
||||
[[ "$(command git rev-parse --show-toplevel)" != "$HOME" ]] &&
|
||||
# check check if there is anything to pull
|
||||
command git -c gc.auto=0 fetch &>/dev/null &&
|
||||
# check if there is an upstream configured for this branch
|
||||
command git rev-parse --abbrev-ref @'{u}' &>/dev/null && {
|
||||
local arrows=''
|
||||
(( $(command git rev-list --right-only --count HEAD...@'{u}' 2>/dev/null) > 0 )) && arrows='⇣'
|
||||
(( $(command git rev-list --left-only --count HEAD...@'{u}' 2>/dev/null) > 0 )) && arrows+='⇡'
|
||||
RPROMPT+="\e7\e[A\e[1G\e[`prompt_pure_string_length $prompt_pure_preprompt`C%F{cyan}${arrows}%f\e8"
|
||||
}
|
||||
} &!
|
||||
|
||||
# reset value since `preexec` isn't always triggered
|
||||
unset cmd_timestamp
|
||||
}
|
||||
|
||||
prompt_pure_setup() {
|
||||
# prevent percentage showing up
|
||||
# if output doesn't end with a newline
|
||||
export PROMPT_EOL_MARK=''
|
||||
|
||||
# disable auth prompting on git 2.3+
|
||||
export GIT_TERMINAL_PROMPT=0
|
||||
|
||||
prompt_opts=(cr subst percent)
|
||||
|
||||
zmodload zsh/datetime
|
||||
autoload -Uz add-zsh-hook
|
||||
autoload -Uz vcs_info
|
||||
|
||||
add-zsh-hook precmd prompt_pure_precmd
|
||||
add-zsh-hook preexec prompt_pure_preexec
|
||||
|
||||
zstyle ':vcs_info:*' enable git
|
||||
zstyle ':vcs_info:*' use-simple true
|
||||
zstyle ':vcs_info:git*' formats ' %b'
|
||||
zstyle ':vcs_info:git*' actionformats ' %b|%a'
|
||||
|
||||
# show username@host if logged in through SSH
|
||||
[[ "$SSH_CONNECTION" != '' ]] && prompt_pure_username=' %n@%m'
|
||||
|
||||
# show username@host if root, with username in white
|
||||
[[ $UID -eq 0 ]] && prompt_pure_username=' %F{white}%n%F{242}@%m'
|
||||
|
||||
zstyle ':prezto:module:editor:info:keymap:primary' format "❯%f"
|
||||
zstyle ':prezto:module:editor:info:keymap:alternate' format "#%f"
|
||||
|
||||
# prompt turns red if the previous command didn't exit with 0
|
||||
PROMPT='
|
||||
%(?.%F{green}.%F{red}❯%F{green})${editor_info[keymap]} '
|
||||
}
|
||||
|
||||
prompt_pure_setup "$@"
|
|
@ -1,61 +0,0 @@
|
|||
#
|
||||
# A simple theme based off sorin
|
||||
#
|
||||
|
||||
# Load dependencies.
|
||||
pmodload 'helper'
|
||||
|
||||
# Show the hostname if this is an SSH session
|
||||
if [ ! -z "$SSH_CLIENT" ]; then
|
||||
__prompt_host="%B%F{blue}[$(hostname | sed -e 's/\.local$//')]%f%b "
|
||||
fi
|
||||
|
||||
function _prompt_pwd {
|
||||
local pwd="${PWD/#$HOME/~}"
|
||||
|
||||
if [[ "$pwd" == (#m)[/~] ]]; then
|
||||
__prompt_pwd="$MATCH"
|
||||
unset MATCH
|
||||
else
|
||||
__prompt_pwd="${${${(@j:/:M)${(@s:/:)pwd}##.#?}:h}%/}/${pwd:t}"
|
||||
fi
|
||||
}
|
||||
|
||||
# Why not use prezto's git module? Because git-info seems like overkill.
|
||||
function _prompt_git {
|
||||
__prompt_git=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)
|
||||
if [[ -n "$__prompt_git" ]]; then
|
||||
__prompt_git=" :%F{yellow}$__prompt_git"
|
||||
if ! git -c diff.autorefreshindex=true diff --quiet -- .; then
|
||||
__prompt_git+="%F{white}+"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
function prompt_v0_setup {
|
||||
setopt LOCAL_OPTIONS
|
||||
unsetopt XTRACE KSH_ARRAYS
|
||||
prompt_opts=(cr percent subst)
|
||||
|
||||
# Load required functions.
|
||||
autoload -Uz add-zsh-hook
|
||||
|
||||
# Add hook for calling git-info before each command.
|
||||
add-zsh-hook precmd _prompt_git
|
||||
add-zsh-hook precmd _prompt_pwd
|
||||
|
||||
# Set editor-info parameters.
|
||||
zstyle ':prezto:module:editor:info:completing' format '%B%F{red}...%f%b'
|
||||
zstyle ':prezto:module:editor:info:keymap:primary' format '%B%F{red}❯%f%b'
|
||||
zstyle ':prezto:module:editor:info:keymap:primary:overwrite' format '%F{red}♺%f'
|
||||
zstyle ':prezto:module:editor:info:keymap:alternate' format '%B%F{green}❯%f%b'
|
||||
|
||||
# Add newline before prompt
|
||||
precmd() { print "" }
|
||||
|
||||
# Define prompts.
|
||||
PROMPT='${__prompt_host}%F{cyan}${__prompt_pwd} ${editor_info[keymap]} '
|
||||
RPROMPT='%F{yellow}${__prompt_git:- }'
|
||||
}
|
||||
|
||||
prompt_v0_setup "$@"
|
1
zsh/zgen
Submodule
1
zsh/zgen
Submodule
|
@ -0,0 +1 @@
|
|||
Subproject commit 5517f92ae5658d05c555225490cc4bede12db00b
|
42
zshrc
42
zshrc
|
@ -1,20 +1,38 @@
|
|||
# Source Prezto.
|
||||
if [[ -s "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" ]]; then
|
||||
source ~/.zsh/preztorc
|
||||
source "${ZDOTDIR:-$HOME}/.zprezto/init.zsh"
|
||||
else
|
||||
echo "Prezto isn't installed! Run ~/.dotfiles/install.sh"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
source ~/.zsh/aliases
|
||||
function is-callable {
|
||||
(( $+commands[$1] )) || (( $+functions[$1] )) || (( $+aliases[$1] ))
|
||||
}
|
||||
|
||||
# Source component rcfiles
|
||||
if [[ -z "$EMACS" ]]; then
|
||||
source ~/.zsh/config
|
||||
is-callable 'fasd' && eval "$(fasd --init auto)"
|
||||
source ~/.zsh/zgen/zgen.zsh
|
||||
if ! zgen saved; then
|
||||
echo "Creating zgen save"
|
||||
|
||||
zgen load zsh-users/zsh-syntax-highlighting
|
||||
zgen load zsh-users/zsh-history-substring-search
|
||||
zgen load zsh-users/zsh-completions src
|
||||
zgen load clvv/fasd
|
||||
zgen load hchbaw/opp.zsh
|
||||
zgen load Tarrasch/zsh-bd
|
||||
zgen load houjunchen/zsh-vim-mode
|
||||
|
||||
zgen save
|
||||
fi
|
||||
|
||||
source ~/.zsh/aliases.zsh
|
||||
source ~/.zsh/config.zsh
|
||||
source ~/.zsh/keybinds.zsh
|
||||
source ~/.zsh/prompt.zsh
|
||||
|
||||
fasd_cache="$HOME/.fasd-cache"
|
||||
if [ "$(command -v fasd)" -nt "$fasd_cache" -o ! -s "$fasd_cache" ]; then
|
||||
fasd --init posix-alias zsh-hook zsh-ccomp zsh-ccomp-install >| "$fasd_cache"
|
||||
fi
|
||||
source "$fasd_cache"
|
||||
unset fasd_cache
|
||||
fi
|
||||
|
||||
## PATHS ###############################################
|
||||
if [ -d ~/.rbenv ]; then
|
||||
export PATH=~/.rbenv/bin:$PATH
|
||||
eval "$(rbenv init - --no-rehash)"
|
||||
|
|
Loading…
Reference in a new issue