1
0
Fork 0
mirror of https://github.com/notwa/rc synced 2024-05-20 02:43:23 -07:00
rc/home/zshrc

224 lines
6.6 KiB
Bash
Raw Normal View History

[ -e /etc/profile ] && emulate sh -c "source /etc/profile"
2019-06-05 16:10:03 -07:00
if [ "$SHLVL" -le 1 ] && ! expr "$TERM" : screen >/dev/null; then
if which tmux >/dev/null 2>/dev/null; then
2019-06-05 16:51:30 -07:00
# create a new session called "what" or attach if it already exists
2019-06-05 20:53:38 -07:00
LANG="en_US.UTF-8" TZ=":/etc/localtime" tmux new -A -s what && exit
2019-06-05 16:10:03 -07:00
echo "tmux died ($?), continuing..."
fi
fi
2013-06-28 05:22:14 -07:00
setopt extended_glob
2019-05-30 01:23:57 -07:00
local host="${(L)HOST}"
2013-06-28 05:22:14 -07:00
fpath=(~/sh $fpath)
function {
local f
for f in ~/sh/^([_.]*)(N^/:t); do
2019-05-30 01:23:57 -07:00
if [[ "$f" == fasd ]]; then
emulate sh -c "autoload -U $f"
else
autoload -Uz $f
fi
2013-06-28 05:22:14 -07:00
done
zsc() {
local s=$1; shift
zstyle ':completion:*'$s $@
}
zsc '*:default' list-colors ''
zsc '*' completer _complete _ignored _match _correct _approximate _prefix
zsc '*:approximate:*' max-errors 'reply=($((($#PREFIX+$#SUFFIX)/3)))'
#zsc '*:corrections' format '%B%d (errors %e)%b'
zsc '*:default' list-prompt '%S%M matches%s'
zsc '*:default' menu select=0
zsc '*' ignore-parents parent pwd
zsc '*' ignored-patterns '*?.sw[po]' '*?.pyc' '__pycache__'
zsc '*:*:rm:*:*' ignored-patterns
# matching: try exact, case insensitive, then partial word completion.
# ** for recursive, i think
zsc '*' matcher-list 'm:{[:lower:]}={[:upper:]}' 'r:|[._-]=** r:|=**'
# caching, for huge lists eg. package managers
zsc '*' use-cache on
zsc '*' cache-path ~/.zsh/cache
# when listing completions, show type names and group by them
zsc '*:descriptions' format "$fg_bold[black]» %d$reset_color"
zsc '*' group-name ''
}
autoload -Uz compinit
compinit
HISTFILE=~/.histfile
2017-08-04 20:41:36 -07:00
HISTSIZE=99999
SAVEHIST=99999
2013-06-28 05:22:14 -07:00
function {
local -a opts
opts=( no_beep
append_history share_history # across sessions
hist_expire_dups_first # sharing/appending will result in dups
hist_ignore_dups # don't push lines identical to the previous
2014-11-12 20:36:15 -08:00
hist_ignore_space # don't push lines beginning with spaces
2013-06-28 05:22:14 -07:00
auto_cd # exec a dir to cd
2013-07-09 20:27:19 -07:00
auto_pushd # cd acts as pushd
2013-06-28 05:22:14 -07:00
no_match # error on bad tab-complete
check_jobs notify # automatic job reporting
chase_links # cd into link resolves link
complete_aliases # allow original command completion within alias
complete_in_word # enable tab completion when cursor between words
rc_quotes # 'you''re dumb' like "you're dumb"
2013-07-01 02:22:36 -07:00
brace_ccl # for character ranges like {a-z}
2014-11-12 20:36:15 -08:00
ksh_typeset # treat `local x=$(cmd)` and `x=$(cmd)` the same
2013-06-28 05:22:14 -07:00
)
setopt "${opts[@]}"
}
2014-03-30 23:46:55 -07:00
autoload -U zmv
zmodload zsh/mathfunc
autoload -Uz zcalc
2013-07-09 20:27:19 -07:00
DIRSTACKSIZE=24
dirprev() {
pushd -q +1
zle reset-prompt
precmd
}
dirnext() {
pushd -q -0
zle reset-prompt
precmd
}
dirup() {
cd ..
zle reset-prompt
precmd
}
dirview() {
# TODO: print under prompt if possible,
# truncate and columnize
print
dirs -v
zle reset-prompt
}
for x (dirprev dirnext dirup dirview) zle -N $x
2013-06-28 05:22:14 -07:00
bindkey -e # emacs-style keybinds
2015-03-05 12:08:52 -08:00
# oh thank god: http://blog.samsonis.me/2013/12/bash-like-history-search-functionality-for-zsh/
autoload history-search-end
zle -N history-beginning-search-backward-end history-search-end
zle -N history-beginning-search-forward-end history-search-end
bindkey '^[[A' history-beginning-search-backward-end # up
bindkey '^[[B' history-beginning-search-forward-end # down
2015-03-30 21:42:01 -07:00
bindkey '^[OA' history-beginning-search-backward-end # up
bindkey '^[OB' history-beginning-search-forward-end # down
2015-03-05 12:08:52 -08:00
2015-05-30 14:06:31 -07:00
bindkey '^[[3~' delete-char
2013-06-28 05:22:14 -07:00
bindkey ';5D' emacs-backward-word # ctrl+left
bindkey ';5C' emacs-forward-word # ctrl+right
2013-07-09 20:27:19 -07:00
bindkey ';3D' dirprev # alt+left
bindkey ';3C' dirnext # alt+right
bindkey ';3A' dirup # alt+up
bindkey ';3B' dirview # alt+down
2013-06-28 05:22:14 -07:00
bindkey -s '^[s' '^Asudo ^E' # alt+s
2019-06-05 16:08:55 -07:00
bindkey -s '^[[6;2~' '\a' # shift+PgDn, do nothing, already at bottom (tmux)
2013-06-28 05:22:14 -07:00
autoload edit-command-line
zle -N edit-command-line # new widget of the same function name
bindkey '^Xe' edit-command-line # ctrl+x -> e
2014-03-14 17:04:46 -07:00
. ~/.-shrc
2013-06-28 05:22:14 -07:00
2015-04-06 12:12:06 -07:00
alias -g OMFG="1>/dev/null"
2013-06-28 05:22:14 -07:00
alias -g STFU="2>/dev/null"
2016-08-27 23:45:42 -07:00
alias -g WHOA='${whoa[@]}'
2017-05-03 01:45:46 -07:00
alias -g WELP='${welp[@]}'
2013-06-28 05:22:14 -07:00
2016-10-10 08:40:26 -07:00
wipe() {
clear
clear # twice because mintty is weird
echo "\e[30m\e[107m"
printf "*%.0s" {1..$COLUMNS}
echo "\e[0m\n"
}
2016-09-12 02:17:35 -07:00
2013-06-29 11:47:01 -07:00
for x in ack cd cp ebuild gcc gist grep ln man mkdir mv rm
2013-07-01 18:05:17 -07:00
alias $x="nocorrect $x"
2019-05-30 01:25:49 -07:00
for x in arith hex curl fc find ftp history let locate rsync scp sftp wget twitch yt ytg ai
2013-07-01 18:05:17 -07:00
alias $x="noglob $x"
2016-12-09 17:19:28 -08:00
unset x
2013-06-28 05:22:14 -07:00
2017-02-24 15:23:26 -08:00
alias sc="~/sh/sc" # only runs in bash (for now), so be explicit with path
alias pl="print -l" # not in -shrc because this only makes sense with zsh
2017-01-30 15:36:23 -08:00
2017-08-04 20:41:49 -07:00
tw() {
twitch "$@" OMFG STFU &
}
2013-06-28 05:22:14 -07:00
if [[ "$TERM" = xterm* ]]; then
2019-05-30 01:25:49 -07:00
# set window title
2013-10-20 06:22:26 -07:00
precmd() { print -Pn "\e]2;%M: %~\a" }
2019-06-05 20:43:50 -07:00
else
precmd() {}
2013-06-28 05:22:14 -07:00
fi
2015-04-06 17:10:48 -07:00
function {
2019-06-05 16:52:02 -07:00
if [[ "$TERM" != xterm* ]] && [[ "$TERM" != screen* ]]; then
PROMPT="%# "
unset RPROMPT
return
fi
# zsh adds a % symbol to newline-less output, so my bash prompt is overkill
# NOTE: i've started hardcoding escapes instead of relying on zsh
# because detecting terminal features is too troublesome.
local s=$'\x1B\x5B' # start escape code
local e=m # end escape code
local reset="${s}0${e}"
local good=42 # green
local bad=41 # red
[[ "$host" == neobanshee ]] && good=46 # cyan
[[ "$host" == spectre ]] && good=47 # white
[[ "$host" == wraith ]] && good=43 # yellow
[[ "$host" == sabotage ]] && good=45 # magenta
# NOTE: i had ${s}10${e} here before, is it still necessary?
PROMPT="%{$reset${s}%(?.${good}.${bad})${e}${s}97${e}%}%#%{$reset%} "
RPROMPT="%{${s}90${e}%}%h%{$reset%}"
2015-04-06 17:10:48 -07:00
}
2013-06-28 05:22:14 -07:00
2019-06-05 12:35:42 -07:00
TIMEFMT=$'\e[93m%*U/%*E cpu/real (%P), %MM mem:\e[36m %J\e[0m'
2013-06-28 05:22:14 -07:00
reload() {
2019-05-30 01:25:49 -07:00
# this doesn't seem to help with _vim_files errors, eh.
# you wanna rm .zcompdump first, then exit. that's why!
2013-07-01 18:05:17 -07:00
cd ~
autoload -U zrecompile
[ -f .zshrc ] && zrecompile -p .zshrc
rm -f .zcompdump
[ -f .zshrc.zwc.old ] && rm -f .zshrc.zwc.old
[ -f .zcompdump.zwc.old ] && rm -f .zcompdump.zwc.old
exec zsh # reload shell, inheriting environment
2013-06-28 05:22:14 -07:00
}
2013-06-29 11:47:01 -07:00
2019-05-30 01:23:57 -07:00
if [[ "$host" == "spectre" ]] || [[ "$host" == *"banshee" ]]; then
# via https://github.com/whjvenyl/fasd
if [ ! -s "$HOME/.fasd_init" ]; then
# note that posix-alias defines aliases for the following:
# a s d f sd sf z zz
fasd --init \
posix-alias \
zsh-hook zsh-ccomp zsh-ccomp-install \
zsh-wcomp zsh-wcomp-install \
>| "$HOME/.fasd_init"
fi
source "$HOME/.fasd_init"
alias v="f -e $EDITOR"
fi