[zsh] Update shell init: rc
This commit is contained in:
parent
b09d523218
commit
c30b46a88b
26 changed files with 479 additions and 462 deletions
120
rc
120
rc
|
@ -1,120 +0,0 @@
|
||||||
# .rc
|
|
||||||
# vim: ft=zsh
|
|
||||||
# Generic interactive shell setup
|
|
||||||
# Eryn Wells <eryn@erynwells.me>
|
|
||||||
|
|
||||||
print_heading -l 1 'Initializing interactive shell'
|
|
||||||
|
|
||||||
print_info -l 2 'Creating aliases'
|
|
||||||
alias j='jobs'
|
|
||||||
alias h='history'
|
|
||||||
alias df='df -h'
|
|
||||||
alias du='du -h'
|
|
||||||
alias e='emacs'
|
|
||||||
|
|
||||||
binary_exists ledger && alias l='ledger'
|
|
||||||
binary_exists gpg2 && alias gpg='gpg2'
|
|
||||||
binary_exists keybase && alias keybase="keybase --gpg \"`which gpg2`\""
|
|
||||||
|
|
||||||
alias chux='chmod u+x'
|
|
||||||
alias chuw='chmod u+w'
|
|
||||||
alias chur='chmod u+r'
|
|
||||||
alias cho="chown $USER"
|
|
||||||
|
|
||||||
alias today='date +%Y-%m-%d'
|
|
||||||
|
|
||||||
alias addkey="ssh-agent ~/.ssh/id_rsa"
|
|
||||||
|
|
||||||
alias pprint="python -c 'import sys,pprint; pprint.pprint(eval(sys.stdin.read()))'"
|
|
||||||
alias pprint-json="python -c 'import sys,json;print json.dumps(json.load(sys.stdin), indent=2)'"
|
|
||||||
|
|
||||||
#
|
|
||||||
# Git
|
|
||||||
#
|
|
||||||
|
|
||||||
function g
|
|
||||||
{
|
|
||||||
if [[ $# -gt 0 ]]; then
|
|
||||||
git $@
|
|
||||||
else
|
|
||||||
git status --short --branch
|
|
||||||
fi
|
|
||||||
return $?
|
|
||||||
}
|
|
||||||
|
|
||||||
function vi
|
|
||||||
{
|
|
||||||
if whence -cp nvim 1>/dev/null 2>&1; then
|
|
||||||
command nvim $@
|
|
||||||
elif whence -cp vim 1>/dev/null 2>&1; then
|
|
||||||
command vim $@
|
|
||||||
elif whence -cp vi 1>/dev/null 2>&1; then
|
|
||||||
command vi $@
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
alias gp='g p origin $gitbranch'
|
|
||||||
alias gpf='g p -f origin $gitbranch'
|
|
||||||
|
|
||||||
#
|
|
||||||
# Setup
|
|
||||||
#
|
|
||||||
|
|
||||||
function configure_ls
|
|
||||||
{
|
|
||||||
local has_gnu_ls
|
|
||||||
local ls_options
|
|
||||||
|
|
||||||
if [[ ! -e "$1" ]]; then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
if $1 --version 2>&1 | grep GNU 1>/dev/null; then
|
|
||||||
has_gnu_ls=1
|
|
||||||
ls_options='--color=auto'
|
|
||||||
else
|
|
||||||
has_gnu_ls=0
|
|
||||||
ls_options='-G'
|
|
||||||
fi
|
|
||||||
|
|
||||||
print_info_sub -l 3 "Setting up ls: $1"
|
|
||||||
alias ls="$1 $ls_options"
|
|
||||||
alias la="$1 -A $ls_options"
|
|
||||||
alias ll="$1 -l $ls_options"
|
|
||||||
alias l.="$1 -d $ls_options .*"
|
|
||||||
|
|
||||||
local dircolors_bin=`whence -p dircolors || whence -p gdircolors`
|
|
||||||
if [[ $has_gnu_ls -eq 1 && -n "$dircolors_bin" ]]; then
|
|
||||||
if [[ -e "$HOME/.dircolors/$SYS.cfg" ]]; then
|
|
||||||
dircolors="$HOME/.dircolors/$SYS.cfg"
|
|
||||||
else
|
|
||||||
dircolors="$HOME/.dircolors/default.cfg"
|
|
||||||
fi
|
|
||||||
print_info_sub -l 3 "Setting up dircolors: `basename $dircolors`"
|
|
||||||
eval `$dircolors_bin $dircolors`
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# NetHack options
|
|
||||||
# use color in the terminal
|
|
||||||
binary_exists nethack && export NETHACKOPTIONS="color"
|
|
||||||
|
|
||||||
# Default ledger file
|
|
||||||
[[ -e "$HOME/Documents/Ledger/personal.ledger" ]] && \
|
|
||||||
LEDGER_FILE=$HOME/Documents/Ledger/personal.ledger
|
|
||||||
|
|
||||||
if [[ -e "$HOME/.rc.$SYS" ]]; then
|
|
||||||
print_info -l 2 "Sourcing $SYS interactive shell setup"
|
|
||||||
source "$HOME/.rc.$SYS"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Set up ls if it wasn't already done.
|
|
||||||
if ! alias ls 2>&1 1>/dev/null; then
|
|
||||||
configure_ls `which ls`
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -e "$HOME/.rc.local" ]]; then
|
|
||||||
print_info -l 2 'Sourcing local interactive shell setup'
|
|
||||||
source "$HOME/.rc.local"
|
|
||||||
fi
|
|
52
rc.darwin
52
rc.darwin
|
@ -1,52 +0,0 @@
|
||||||
# .rc.darwin
|
|
||||||
# vim: ft=zsh
|
|
||||||
# Interactive shell setup for Darwin systems
|
|
||||||
# Eryn Wells <eryn@erynwells.me>
|
|
||||||
|
|
||||||
alias acls='command ls -le'
|
|
||||||
|
|
||||||
# These things might have been installed by Homebrew, and I like the GNU versions better.
|
|
||||||
binary_exists gdircolors && alias dircolors='gdircolors'
|
|
||||||
binary_exists gfind && alias find='gfind'
|
|
||||||
binary_exists gnuindent && alias indent='gnuindent'
|
|
||||||
|
|
||||||
if binary_exists gls; then
|
|
||||||
configure_ls `which gls`
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ldd doesn't exist on OS X, but otool -L does the same thing.
|
|
||||||
alias ldd='otool -L'
|
|
||||||
|
|
||||||
SOUNDSDIR=/System/Library/Sounds
|
|
||||||
alias glass="afplay $SOUNDSDIR/Glass.aiff"
|
|
||||||
alias funk="afplay $SOUNDSDIR/Funk.aiff"
|
|
||||||
unset SOUNDSDIR
|
|
||||||
|
|
||||||
function darwin-icloud-drive-path
|
|
||||||
{
|
|
||||||
echo "$HOME/Library/Mobile Documents/com~apple~CloudDocs"
|
|
||||||
}
|
|
||||||
|
|
||||||
function darwin-init
|
|
||||||
{
|
|
||||||
# Dim dock icons of apps that have been hidden.
|
|
||||||
print_info "Auto-hiding Dock"
|
|
||||||
defaults write com.apple.Dock showhidden -boolean yes
|
|
||||||
killall Dock
|
|
||||||
|
|
||||||
# Put screenshots in iCloud Drive, in a directory according to hostname
|
|
||||||
icloud=`darwin-icloud-drive-path`
|
|
||||||
if [[ -d "$icloud" ]]; then
|
|
||||||
local name=`hostname -s | tr A-Z a-z`
|
|
||||||
local loc="$(darwin-icloud-drive-path)/Screenshots/$name"
|
|
||||||
print_info "Setting screenshot directory: $loc"
|
|
||||||
mkdir -p "$loc"
|
|
||||||
defaults write com.apple.screencapture location "$loc"
|
|
||||||
else
|
|
||||||
echo "iCloud directory doesn't exist: $icloud"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Disabling overly restrictive Gatekeeper"
|
|
||||||
# See https://techstuffer.com/this-app-is-damaged-error-macos-sierra/
|
|
||||||
sudo spctl --master-disable
|
|
||||||
}
|
|
|
@ -1,4 +0,0 @@
|
||||||
# .rc.freebsd
|
|
||||||
# vim: ft=zsh
|
|
||||||
# Interactive shell setup for FreeBSD systems
|
|
||||||
# Eryn Wells <eryn@erynwells.me>
|
|
10
rc.linux
10
rc.linux
|
@ -1,10 +0,0 @@
|
||||||
# .rc.linux
|
|
||||||
# vim: ft=zsh
|
|
||||||
# Interactive shell setup for Linux systems
|
|
||||||
# Eryn Wells <eryn@erynwells.me>
|
|
||||||
|
|
||||||
|
|
||||||
# iptables aliases
|
|
||||||
alias iptls='sudo iptables --line-numbers -nv -L'
|
|
||||||
alias ip6tls='sudo ip6tables --line-numbers -nv -L'
|
|
||||||
alias rlx="xrdb $HOME/.Xdefaults"
|
|
6
rc.local
6
rc.local
|
@ -1,6 +0,0 @@
|
||||||
# .rc.local
|
|
||||||
# vim: set ft=zsh:
|
|
||||||
# Local customizations for interactive shells
|
|
||||||
# Eryn Wells <eryn@erynwells.me>
|
|
||||||
|
|
||||||
|
|
10
zsh/func/binary_exists
Normal file
10
zsh/func/binary_exists
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
# .zshrc
|
||||||
|
# vim:ft=zsh:
|
||||||
|
# Eryn Wells <eryn@erynwells.me>
|
||||||
|
|
||||||
|
function binary_exists
|
||||||
|
{
|
||||||
|
return $(hash $1 1>/dev/null 2>&1)
|
||||||
|
}
|
||||||
|
|
||||||
|
binary_exists "$@"
|
24
zsh/func/darwin_configure_screenshots_directory
Normal file
24
zsh/func/darwin_configure_screenshots_directory
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
#!/usr/bin/env zsh
|
||||||
|
# Eryn Wells <eryn@erynwells.me>
|
||||||
|
|
||||||
|
autoload darwin_icloud_drive_path
|
||||||
|
|
||||||
|
function darwin_configure_screenshots_directory
|
||||||
|
{
|
||||||
|
icloud=`darwin_icloud_drive_path`
|
||||||
|
if [[ ! -d "$icloud" ]]; then
|
||||||
|
shell-log -l error "iCloud directory doesn't exist: $icloud"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Put screenshots in iCloud Drive, in a directory according to hostname
|
||||||
|
local name=`hostname -s | tr A-Z a-z`
|
||||||
|
local screenshots_dir="$icloud/Screenshots/$name"
|
||||||
|
shell-log "Setting screenshot directory: $screenshots_dir"
|
||||||
|
mkdir -p "$screenshots_dir"
|
||||||
|
defaults write com.apple.screencapture screenshots_diration "$screenshots_dir"
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
darwin_configure_screenshots_directory "$@"
|
9
zsh/func/darwin_icloud_drive_path
Normal file
9
zsh/func/darwin_icloud_drive_path
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
#!/usr/bin/env zsh
|
||||||
|
# Eryn Wells <eryn@erynwells.me>
|
||||||
|
|
||||||
|
function darwin_icloud_drive_path
|
||||||
|
{
|
||||||
|
echo "$HOME/Library/Mobile Documents/com~apple~CloudDocs"
|
||||||
|
}
|
||||||
|
|
||||||
|
darwin_icloud_drive_path "$@"
|
21
zsh/func/darwin_init_once
Normal file
21
zsh/func/darwin_init_once
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
#!/usr/bin/env zsh
|
||||||
|
# Eryn Wells <eryn@erynwells.me>
|
||||||
|
|
||||||
|
autoload darwin_icloud_drive_path
|
||||||
|
autoload darwin_configure_screenshots_directory
|
||||||
|
|
||||||
|
function darwin_init_once
|
||||||
|
{
|
||||||
|
# Dim dock icons of apps that have been hidden.
|
||||||
|
shell-log "Auto-hiding Dock"
|
||||||
|
defaults write com.apple.Dock showhidden -boolean yes
|
||||||
|
killall Dock
|
||||||
|
|
||||||
|
darwin_configure_screenshots_directory
|
||||||
|
|
||||||
|
# See https://techstuffer.com/this-app-is-damaged-error-macos-sierra/
|
||||||
|
shell-log "Disabling overly restrictive Gatekeeper"
|
||||||
|
sudo spctl --master-disable
|
||||||
|
}
|
||||||
|
|
||||||
|
darwin_init_once "$@"
|
14
zsh/func/g
Normal file
14
zsh/func/g
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
#!/usr/bin/env zsh
|
||||||
|
# Eryn Wells <eryn@erynwells.me>
|
||||||
|
|
||||||
|
function g
|
||||||
|
{
|
||||||
|
if [[ $# -gt 0 ]]; then
|
||||||
|
git $@
|
||||||
|
else
|
||||||
|
git status --short --branch
|
||||||
|
fi
|
||||||
|
return $?
|
||||||
|
}
|
||||||
|
|
||||||
|
g "$@"
|
17
zsh/func/init_app_environments
Normal file
17
zsh/func/init_app_environments
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
#!/usr/bin/env zsh
|
||||||
|
# Eryn Wells <eryn@erynwells.me>
|
||||||
|
|
||||||
|
autoload binary_exists
|
||||||
|
|
||||||
|
function init_app_environments
|
||||||
|
{
|
||||||
|
# NetHack options
|
||||||
|
# use color in the terminal
|
||||||
|
binary_exists nethack && export NETHACKOPTIONS="color"
|
||||||
|
|
||||||
|
# Default ledger file
|
||||||
|
local ledgerFile="$HOME/Documents/Ledger/personal.ledger"
|
||||||
|
[[ -e "$ledgerFile" ]] && LEDGER_FILE="$ledgerFile"
|
||||||
|
}
|
||||||
|
|
||||||
|
init_app_environments "$@"
|
43
zsh/func/init_rc_aliases
Normal file
43
zsh/func/init_rc_aliases
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
#!/usr/bin/env zsh
|
||||||
|
# Eryn Wells <eryn@erynwells.me>
|
||||||
|
|
||||||
|
autoload binary_exists
|
||||||
|
|
||||||
|
function init_rc_aliases
|
||||||
|
{
|
||||||
|
shell-log -l 'debug' "Setting up shell aliases"
|
||||||
|
|
||||||
|
alias j='jobs'
|
||||||
|
alias h='history'
|
||||||
|
alias df='df -h'
|
||||||
|
alias du='du -h'
|
||||||
|
alias e='emacs'
|
||||||
|
|
||||||
|
alias chux='chmod u+x'
|
||||||
|
alias chuw='chmod u+w'
|
||||||
|
alias chur='chmod u+r'
|
||||||
|
alias cho="chown $USER"
|
||||||
|
|
||||||
|
alias today='date +%Y-%m-%d'
|
||||||
|
alias addkey="ssh-agent ~/.ssh/id_rsa"
|
||||||
|
|
||||||
|
alias pprint="python -c 'import sys,pprint; pprint.pprint(eval(sys.stdin.read()))'"
|
||||||
|
alias pprint-json="python -c 'import sys,json;print json.dumps(json.load(sys.stdin), indent=2)'"
|
||||||
|
|
||||||
|
alias gp='g p origin $gitbranch'
|
||||||
|
alias gpf='g p -f origin $gitbranch'
|
||||||
|
alias bx='bundle exec'
|
||||||
|
|
||||||
|
binary_exists ledger && alias l='ledger'
|
||||||
|
binary_exists gpg2 && alias gpg='gpg2'
|
||||||
|
|
||||||
|
shell-log -l debug 'Setting up suffix aliases'
|
||||||
|
alias -s c='vim'
|
||||||
|
alias -s tex='vim'
|
||||||
|
alias -s txt='vim'
|
||||||
|
alias -s xml='vim'
|
||||||
|
alias -s jar='java -jar'
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
init_rc_aliases "$@"
|
43
zsh/func/init_rc_configure_completion
Normal file
43
zsh/func/init_rc_configure_completion
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
#!/usr/bin/env zsh
|
||||||
|
# Eryn Wells <eryn@erynwells.me>
|
||||||
|
|
||||||
|
function init_rc_configure_completion
|
||||||
|
{
|
||||||
|
shell-log 'Initializing completion system'
|
||||||
|
|
||||||
|
autoload -U compinit
|
||||||
|
compinit
|
||||||
|
|
||||||
|
# Cache completions
|
||||||
|
zstyle ':completion::complete:*' use-cache 1
|
||||||
|
zstyle ':completion::complete:*' cache-path ~/.zsh/cache
|
||||||
|
|
||||||
|
zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS}
|
||||||
|
|
||||||
|
# For rm, cp, and mv don't complete if file is on the line already
|
||||||
|
zstyle ':completion:*:rm:*' ignore-line yes
|
||||||
|
zstyle ':completion:*:cp:*' ignore-line yes
|
||||||
|
zstyle ':completion:*:mv:*' ignore-line yes
|
||||||
|
|
||||||
|
# Remove trailing slashes in directory arguments
|
||||||
|
zstyle ':completion:*' squeeze-slashes true
|
||||||
|
|
||||||
|
# Never select parent directory
|
||||||
|
zstyle ':completion:*:cd:*' ignore-parents parent pwd
|
||||||
|
|
||||||
|
# Expand partial paths
|
||||||
|
zstyle ':completion:*' expand 'yes'
|
||||||
|
|
||||||
|
# Show a pretty menu of killable processes
|
||||||
|
zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#)*=0=01;31'
|
||||||
|
zstyle ':completion:*:*:kill:*' menu yes select
|
||||||
|
|
||||||
|
# Complete man pages by section
|
||||||
|
zstyle ':completion:*:manuals' separate-sections true
|
||||||
|
zstyle ':completion:*:manuals.*' insert-sections true
|
||||||
|
|
||||||
|
# Use git completion for the g function
|
||||||
|
compdef g='git'
|
||||||
|
}
|
||||||
|
|
||||||
|
init_rc_configure_completion "$@"
|
41
zsh/func/init_rc_configure_ls
Normal file
41
zsh/func/init_rc_configure_ls
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
#!/usr/bin/env zsh
|
||||||
|
# Eryn Wells <eryn@erynwells.me>
|
||||||
|
|
||||||
|
function init_configure_ls
|
||||||
|
{
|
||||||
|
local has_gnu_ls
|
||||||
|
local ls_options
|
||||||
|
|
||||||
|
if [[ ! -e "$1" ]]; then
|
||||||
|
shell-log -l error 'Missing required path to ls binary'
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
if $1 --version 2>&1 | grep GNU 1>/dev/null; then
|
||||||
|
has_gnu_ls=1
|
||||||
|
ls_options='--color=auto'
|
||||||
|
else
|
||||||
|
has_gnu_ls=0
|
||||||
|
ls_options='-G'
|
||||||
|
fi
|
||||||
|
|
||||||
|
shell-log -l debug "Setting up aliases for $1"
|
||||||
|
alias ls="$1 $ls_options"
|
||||||
|
alias la="$1 -A $ls_options"
|
||||||
|
alias ll="$1 -l $ls_options"
|
||||||
|
alias l.="$1 -d $ls_options .*"
|
||||||
|
|
||||||
|
local dircolors_bin=`whence -p dircolors || whence -p gdircolors`
|
||||||
|
if [[ $has_gnu_ls -eq 1 && -n "$dircolors_bin" ]]; then
|
||||||
|
if [[ -e "$HOME/.dircolors/$SYS.cfg" ]]; then
|
||||||
|
dircolors="$HOME/.dircolors/$SYS.cfg"
|
||||||
|
else
|
||||||
|
dircolors="$HOME/.dircolors/default.cfg"
|
||||||
|
fi
|
||||||
|
|
||||||
|
shell-log -l debug "Setting up dircolors: `basename $dircolors`"
|
||||||
|
eval `$dircolors_bin $dircolors`
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
init_configure_ls "$@"
|
37
zsh/func/init_rc_configure_prompt
Normal file
37
zsh/func/init_rc_configure_prompt
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
#!/usr/bin/env zsh
|
||||||
|
# Eryn Wells <eryn@erynwells.me>
|
||||||
|
|
||||||
|
function init_rc_configure_prompt
|
||||||
|
{
|
||||||
|
local theme=$1
|
||||||
|
if [[ -z "$1" ]]; then
|
||||||
|
theme=loquacious
|
||||||
|
fi
|
||||||
|
|
||||||
|
shell-log -l debug 'Configuring vcs_info'
|
||||||
|
|
||||||
|
autoload -U add-zsh-hook
|
||||||
|
autoload -Uz vcs_info
|
||||||
|
|
||||||
|
zstyle ':vcs_info:*' disable p4 bzr cdv darcs mtn svk tla cvs svn
|
||||||
|
zstyle ':vcs_info:*' enable git
|
||||||
|
zstyle ':vcs_info:git:general:*' formats '%b'
|
||||||
|
|
||||||
|
# Export the current Git branch before every prompt.
|
||||||
|
function export_gitbranch {
|
||||||
|
vcs_info general
|
||||||
|
if [[ "$gitbranches[1]" != "${vcs_info_msg_0_}" ]]; then
|
||||||
|
export gitbranches=(${vcs_info_msg_0_} $gitbranches[1,4])
|
||||||
|
fi
|
||||||
|
export gitbranch=${vcs_info_msg_0_}
|
||||||
|
}
|
||||||
|
|
||||||
|
add-zsh-hook precmd export_gitbranch
|
||||||
|
|
||||||
|
shell-log "Configuring prompt with '$theme' theme"
|
||||||
|
autoload -U promptinit
|
||||||
|
promptinit
|
||||||
|
prompt $theme
|
||||||
|
}
|
||||||
|
|
||||||
|
init_rc_configure_prompt "$@"
|
27
zsh/func/init_rc_configure_zle
Normal file
27
zsh/func/init_rc_configure_zle
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
#!/usr/bin/env zsh
|
||||||
|
# Eryn Wells <eryn@erynwells.me>
|
||||||
|
|
||||||
|
function init_rc_configure_zle
|
||||||
|
{
|
||||||
|
shell-log 'Configuring ZLE'
|
||||||
|
|
||||||
|
local mode=$1
|
||||||
|
if [[ -z "$mode" ]]; then
|
||||||
|
mode=emacs
|
||||||
|
fi
|
||||||
|
|
||||||
|
function configure_zle_emacs { }
|
||||||
|
function configure_zle_vim { }
|
||||||
|
|
||||||
|
shell-log -l debug "Using $mode command line editing mode"
|
||||||
|
if [[ $mode == 'vim' ]]; then
|
||||||
|
bindkey -v
|
||||||
|
configure_zle_vim
|
||||||
|
zle -A .backward-delete-char vi-backward-delete-char
|
||||||
|
elif [[ $mode == 'emacs' ]]; then
|
||||||
|
bindkey -e
|
||||||
|
configure_zle_emacs
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
init_rc_configure_zle "$@"
|
38
zsh/func/init_rc_darwin
Normal file
38
zsh/func/init_rc_darwin
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
#!/usr/bin/env zsh
|
||||||
|
# Eryn Wells <eryn@erynwells.me>
|
||||||
|
|
||||||
|
autoload binary_exists
|
||||||
|
|
||||||
|
function init_rc_darwin
|
||||||
|
{
|
||||||
|
shell-log 'Initializing Interactive Environment for macOS'
|
||||||
|
|
||||||
|
alias acls='command ls -le'
|
||||||
|
|
||||||
|
# These things might have been installed by Homebrew, and I like the GNU
|
||||||
|
# versions better.
|
||||||
|
binary_exists gdircolors && alias dircolors='gdircolors'
|
||||||
|
binary_exists gfind && alias find='gfind'
|
||||||
|
binary_exists gnuindent && alias indent='gnuindent'
|
||||||
|
|
||||||
|
binary_exists gls && init_rc_configure_ls `which gls`
|
||||||
|
|
||||||
|
# ldd doesn't exist on OS X, but otool -L does the same thing.
|
||||||
|
alias ldd='otool -L'
|
||||||
|
|
||||||
|
local sounds=/System/Library/Sounds
|
||||||
|
alias glass="afplay $sounds/Glass.aiff"
|
||||||
|
alias funk="afplay $sounds/Funk.aiff"
|
||||||
|
|
||||||
|
autoload +X darwin_init_once
|
||||||
|
autoload +X darwin_icloud_drive_path
|
||||||
|
autoload +X darwin_configure_screenshots_directory
|
||||||
|
|
||||||
|
# Open a file/folder in Finder
|
||||||
|
alias reveal='open -R'
|
||||||
|
|
||||||
|
alias -s app='open'
|
||||||
|
alias -s xcodeproj='open -a Xcode'
|
||||||
|
}
|
||||||
|
|
||||||
|
init_rc_darwin "$@"
|
13
zsh/func/init_rc_linux
Normal file
13
zsh/func/init_rc_linux
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
#!/usr/bin/env zsh
|
||||||
|
# Eryn Wells <eryn@erynwells.me>
|
||||||
|
|
||||||
|
function init_rc_linux
|
||||||
|
{
|
||||||
|
shell-log 'Initializing Interactive Environment for Linux'
|
||||||
|
|
||||||
|
alias iptls='sudo iptables --line-numbers -nv -L'
|
||||||
|
alias ip6tls='sudo ip6tables --line-numbers -nv -L'
|
||||||
|
alias rlx="xrdb $HOME/.Xdefaults"
|
||||||
|
}
|
||||||
|
|
||||||
|
init_rc_linux "$@"
|
25
zsh/func/init_zsh_functions
Normal file
25
zsh/func/init_zsh_functions
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
#!/usr/bin/env zsh
|
||||||
|
# Eryn Wells <eryn@erynwells.me>
|
||||||
|
|
||||||
|
autoload load_module
|
||||||
|
|
||||||
|
function init_zsh_functions
|
||||||
|
{
|
||||||
|
local myfpath="$HOME/.zsh/func"
|
||||||
|
|
||||||
|
shell-log "Loading functions in $myfpath"
|
||||||
|
for func in $myfpath/*; do
|
||||||
|
[[ ! -e "$func" || -d "$func" ]] && continue
|
||||||
|
|
||||||
|
local functionName=`basename $func`
|
||||||
|
[[ "$functionName" =~ "prompt_*" ]] && continue
|
||||||
|
[[ "$functionName" =~ "init_*" ]] && continue
|
||||||
|
|
||||||
|
shell-log -l debug "Loading $functionName"
|
||||||
|
autoload +X $functionName
|
||||||
|
done
|
||||||
|
|
||||||
|
load_module makers
|
||||||
|
}
|
||||||
|
|
||||||
|
init_zsh_functions "$@"
|
23
zsh/func/init_zsh_history
Normal file
23
zsh/func/init_zsh_history
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
#!/usr/bin/env zsh
|
||||||
|
# Eryn Wells <eryn@erynwells.me>
|
||||||
|
|
||||||
|
function init_zsh_history
|
||||||
|
{
|
||||||
|
shell-log 'Setting up history'
|
||||||
|
|
||||||
|
setopt \
|
||||||
|
APPEND_HISTORY \
|
||||||
|
EXTENDED_HISTORY \
|
||||||
|
INC_APPEND_HISTORY \
|
||||||
|
HIST_FIND_NO_DUPS \
|
||||||
|
HIST_IGNORE_SPACE \
|
||||||
|
HIST_NO_STORE \
|
||||||
|
HIST_IGNORE_DUPS \
|
||||||
|
HIST_REDUCE_BLANKS
|
||||||
|
|
||||||
|
HISTSIZE=1000000
|
||||||
|
SAVEHIST=1000000
|
||||||
|
HISTFILE="$HOME/.zhistory"
|
||||||
|
}
|
||||||
|
|
||||||
|
init_zsh_history "$@"
|
18
zsh/func/init_zsh_options
Normal file
18
zsh/func/init_zsh_options
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
#!/usr/bin/env zsh
|
||||||
|
# Eryn Wells <eryn@erynwells.me>
|
||||||
|
|
||||||
|
function init_zsh_options
|
||||||
|
{
|
||||||
|
shell-log 'Setting shell options'
|
||||||
|
|
||||||
|
# Report seconds since shell was invoked in milliseconds
|
||||||
|
typeset -F SECONDS
|
||||||
|
|
||||||
|
# See zshoptions(1)
|
||||||
|
setopt EXTENDED_GLOB \
|
||||||
|
MULTIOS \
|
||||||
|
AUTO_REMOVE_SLASH \
|
||||||
|
COMPLETE_IN_WORD
|
||||||
|
}
|
||||||
|
|
||||||
|
init_zsh_options "$@"
|
31
zsh/func/load_module
Normal file
31
zsh/func/load_module
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
#!/usr/bin/env zsh
|
||||||
|
# Eryn Wells <eryn@erynwells.me>
|
||||||
|
|
||||||
|
function load_module
|
||||||
|
{
|
||||||
|
local mod=$1
|
||||||
|
|
||||||
|
local modpath
|
||||||
|
for p in $fpath; do
|
||||||
|
modpath=$p/$mod
|
||||||
|
[[ -d $modpath ]] && break
|
||||||
|
modpath=''
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ -z "$modpath" ]]; then
|
||||||
|
shell-log -l error "Couldn't find path to module: $mod"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
fpath+=($modpath)
|
||||||
|
|
||||||
|
shell-log "Loading module: $mod"
|
||||||
|
for func in `ls $modpath`; do
|
||||||
|
shell-log "Loading function: $func"
|
||||||
|
autoload $func
|
||||||
|
done
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
load_module "$@"
|
15
zsh/func/vi
Normal file
15
zsh/func/vi
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
#!/usr/bin/env zsh
|
||||||
|
# Eryn Wells <eryn@erynwells.me>
|
||||||
|
|
||||||
|
function vi
|
||||||
|
{
|
||||||
|
if whence -cp nvim 1>/dev/null 2>&1; then
|
||||||
|
command nvim $@
|
||||||
|
elif whence -cp vim 1>/dev/null 2>&1; then
|
||||||
|
command vim $@
|
||||||
|
elif whence -cp vi 1>/dev/null 2>&1; then
|
||||||
|
command vi $@
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
vi "$@"
|
277
zshrc
277
zshrc
|
@ -1,259 +1,34 @@
|
||||||
# .zshrc
|
#!/usr/bin/env zsh
|
||||||
# vim:ft=zsh:fdm=marker:sw=4:sts=4:
|
|
||||||
#
|
|
||||||
# ZSH init for interactive shells
|
|
||||||
#
|
|
||||||
# Eryn Wells <eryn@erynwells.me>
|
# Eryn Wells <eryn@erynwells.me>
|
||||||
|
|
||||||
PROMPT_THEME='loquacious'
|
shell-log 'Initializing Interactive Environment'
|
||||||
ZLE_MODE='emacs'
|
|
||||||
|
|
||||||
|
autoload init_app_environments
|
||||||
|
autoload init_rc_aliases
|
||||||
|
autoload init_rc_configure_completion
|
||||||
|
autoload init_rc_configure_ls
|
||||||
|
autoload init_rc_configure_prompt
|
||||||
|
autoload init_rc_configure_zle
|
||||||
|
autoload init_zsh_options
|
||||||
|
autoload init_zsh_history
|
||||||
|
autoload init_zsh_functions
|
||||||
|
|
||||||
# load bash/zsh/ksh agnostic configurations
|
init_rc_aliases
|
||||||
[[ -e $HOME/.rc ]] && source $HOME/.rc
|
init_rc_configure_prompt loquacious
|
||||||
|
init_rc_configure_zle emacs
|
||||||
|
init_rc_configure_completion
|
||||||
|
init_zsh_options
|
||||||
|
init_zsh_history
|
||||||
|
init_zsh_functions
|
||||||
|
init_app_environments
|
||||||
|
|
||||||
print_heading -l 1 "Initializing interactive Z Shell"
|
autoload +X init_rc_$SYS
|
||||||
|
init_rc_$SYS
|
||||||
|
|
||||||
|
# Configure ls with the system ls if it hasn't been done already.
|
||||||
function configure_general #{{{
|
if ! alias ls 2>&1 1>/dev/null; then
|
||||||
{
|
init_rc_configure_ls `which ls`
|
||||||
print_info -l 2 'Configuring general ZSH settings'
|
|
||||||
|
|
||||||
# Report seconds since shell was invoked in milliseconds
|
|
||||||
typeset -F SECONDS
|
|
||||||
|
|
||||||
print_info_sub -l 3 'Setting shell options'
|
|
||||||
# See zshoptions(1)
|
|
||||||
setopt EXTENDED_GLOB \
|
|
||||||
MULTIOS \
|
|
||||||
AUTO_REMOVE_SLASH \
|
|
||||||
COMPLETE_IN_WORD
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
|
|
||||||
# Configure oh-my-zsh
|
|
||||||
function configure_omz #{{{
|
|
||||||
{
|
|
||||||
if [[ ! -d ~/.oh-my-zsh ]]; then
|
|
||||||
print_error -l 2 "No ~/.oh-my-zsh directory; skipping"
|
|
||||||
return
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
print_info -l 2 'Configuring Oh My ZSH!'
|
autoload g
|
||||||
|
autoload vi
|
||||||
ZSH=$HOME/.oh-my-zsh
|
|
||||||
DISABLE_AUTO_UPDATE="true"
|
|
||||||
COMPLETION_WAITING_DOTS="true"
|
|
||||||
|
|
||||||
plugins=(autojump brew encode64 fasd gnu-utils history osx python)
|
|
||||||
|
|
||||||
source $ZSH/oh-my-zsh.sh
|
|
||||||
|
|
||||||
alias v='f -t -e vim -b viminfo'
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
|
|
||||||
function configure_zle #{{{
|
|
||||||
{
|
|
||||||
print_info -l 2 'Configuring ZLE'
|
|
||||||
|
|
||||||
print_info_sub -l 5 "Using $ZLE_MODE command line editing mode"
|
|
||||||
[[ -z "$ZLE_MODE" ]] && ZLE_MODE='vim'
|
|
||||||
if [[ $ZLE_MODE == 'vim' ]]; then
|
|
||||||
bindkey -v
|
|
||||||
configure_zle_vim
|
|
||||||
elif [[ $ZLE_MODE == 'emacs' ]]; then
|
|
||||||
bindkey -e
|
|
||||||
configure_zle_emacs
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Allow deleting over the start of insert mode
|
|
||||||
zle -A .backward-delete-char vi-backward-delete-char
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
|
|
||||||
function configure_zle_vim #{{{
|
|
||||||
{
|
|
||||||
# Edit commands in $EDITOR on 'v' in command mode
|
|
||||||
autoload -Uz edit-command-line
|
|
||||||
zle -N edit-command-line
|
|
||||||
bindkey -M vicmd v edit-command-line
|
|
||||||
|
|
||||||
# Use 'jj' to get to Cmd mode
|
|
||||||
bindkey -M viins 'jj' vi-cmd-mode
|
|
||||||
|
|
||||||
# Backwards incremental history search on ^R in insert mode
|
|
||||||
bindkey -M viins '^R' history-incremental-search-backwards
|
|
||||||
|
|
||||||
# Use arrow keys to go up and down lines and/or history in insert mode
|
|
||||||
bindkey -M viins "^[OA" up-line-or-history
|
|
||||||
bindkey -M viins "^[[A" up-line-or-history
|
|
||||||
bindkey -M viins "^[OB" down-line-or-history
|
|
||||||
bindkey -M viins "^[[B" down-line-or-history
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
|
|
||||||
function configure_zle_emacs #{{{
|
|
||||||
{
|
|
||||||
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
|
|
||||||
function configure_modules_and_functions #{{{
|
|
||||||
{
|
|
||||||
local myfpath="$HOME/.zsh/func"
|
|
||||||
fpath=($myfpath/makers $myfpath $fpath)
|
|
||||||
|
|
||||||
print_info -l 2 "Loading functions in $myfpath"
|
|
||||||
for func in $myfpath/*; do
|
|
||||||
if [[ ! -e "$func" ]]; then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Skip prompt_* functions; these are handled elsewhere.
|
|
||||||
if [[ "$func" =~ "/prompt_*" ]]; then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
local fname=`basename $func`
|
|
||||||
print_info_sub -l 3 "Loading $fname"
|
|
||||||
autoload $fname
|
|
||||||
done
|
|
||||||
|
|
||||||
load_module 'makers'
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
|
|
||||||
function configure_prompt #{{{
|
|
||||||
{
|
|
||||||
print_info -l 2 "Configuring prompt: $PROMPT_THEME"
|
|
||||||
autoload -U promptinit
|
|
||||||
promptinit
|
|
||||||
prompt $PROMPT_THEME
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
|
|
||||||
function configure_zsh_aliases #{{{
|
|
||||||
{
|
|
||||||
print_info -l 3 'Creating ZSH-specific aliases'
|
|
||||||
|
|
||||||
#alias -g nc='netcat'
|
|
||||||
alias -g lessnw='less -S'
|
|
||||||
|
|
||||||
# suffix aliases
|
|
||||||
alias -s c='vim'
|
|
||||||
alias -s tex='vim'
|
|
||||||
alias -s txt='vim'
|
|
||||||
alias -s xml='vim'
|
|
||||||
alias -s jar='java -jar'
|
|
||||||
|
|
||||||
alias bx='bundle exec'
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
|
|
||||||
function configure_history #{{{
|
|
||||||
{
|
|
||||||
print_info -l 2 'Setting up history'
|
|
||||||
setopt \
|
|
||||||
APPEND_HISTORY \
|
|
||||||
EXTENDED_HISTORY \
|
|
||||||
INC_APPEND_HISTORY \
|
|
||||||
HIST_FIND_NO_DUPS \
|
|
||||||
HIST_IGNORE_SPACE \
|
|
||||||
HIST_NO_STORE \
|
|
||||||
HIST_IGNORE_DUPS \
|
|
||||||
HIST_REDUCE_BLANKS
|
|
||||||
|
|
||||||
HISTSIZE=1000000
|
|
||||||
SAVEHIST=1000000
|
|
||||||
HISTFILE="$HOME/.zhistory"
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
|
|
||||||
function configure_completion #{{{
|
|
||||||
{
|
|
||||||
print_info -l 2 'Initializing completion system'
|
|
||||||
|
|
||||||
autoload -U compinit
|
|
||||||
compinit
|
|
||||||
|
|
||||||
# Cache completions
|
|
||||||
zstyle ':completion::complete:*' use-cache 1
|
|
||||||
zstyle ':completion::complete:*' cache-path ~/.zsh/cache
|
|
||||||
|
|
||||||
zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS}
|
|
||||||
|
|
||||||
# For rm, cp, and mv don't complete if file is on the line already
|
|
||||||
zstyle ':completion:*:rm:*' ignore-line yes
|
|
||||||
zstyle ':completion:*:cp:*' ignore-line yes
|
|
||||||
zstyle ':completion:*:mv:*' ignore-line yes
|
|
||||||
|
|
||||||
# Remove trailing slashes in directory arguments
|
|
||||||
zstyle ':completion:*' squeeze-slashes true
|
|
||||||
|
|
||||||
# Never select parent directory
|
|
||||||
zstyle ':completion:*:cd:*' ignore-parents parent pwd
|
|
||||||
|
|
||||||
# Expand partial paths
|
|
||||||
zstyle ':completion:*' expand 'yes'
|
|
||||||
|
|
||||||
# Show a pretty menu of killable processes
|
|
||||||
zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#)*=0=01;31'
|
|
||||||
zstyle ':completion:*:*:kill:*' menu yes select
|
|
||||||
|
|
||||||
# Complete man pages by section
|
|
||||||
zstyle ':completion:*:manuals' separate-sections true
|
|
||||||
zstyle ':completion:*:manuals.*' insert-sections true
|
|
||||||
|
|
||||||
# Use git completion for the g function (which is a small wrapper around git; see .rc)
|
|
||||||
if [[ `whence -w g` =~ "function" ]]; then
|
|
||||||
compdef g='git'
|
|
||||||
fi
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
|
|
||||||
function configure_vcs_info #{{{
|
|
||||||
{
|
|
||||||
print_info -l 3 'Loading vcs_info'
|
|
||||||
|
|
||||||
autoload -U add-zsh-hook
|
|
||||||
autoload -Uz vcs_info
|
|
||||||
|
|
||||||
zstyle ':vcs_info:*' disable p4 bzr cdv darcs mtn svk tla cvs svn
|
|
||||||
zstyle ':vcs_info:*' enable git
|
|
||||||
|
|
||||||
zstyle ':vcs_info:git:general:*' formats '%b'
|
|
||||||
|
|
||||||
# Export the current Git branch before every prompt.
|
|
||||||
function export_gitbranch {
|
|
||||||
vcs_info general
|
|
||||||
if [[ "$gitbranches[1]" != "${vcs_info_msg_0_}" ]]; then
|
|
||||||
export gitbranches=(${vcs_info_msg_0_} $gitbranches[1,4])
|
|
||||||
fi
|
|
||||||
export gitbranch=${vcs_info_msg_0_}
|
|
||||||
}
|
|
||||||
|
|
||||||
add-zsh-hook precmd export_gitbranch
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
|
|
||||||
configure_general
|
|
||||||
#configure_omz
|
|
||||||
configure_zle
|
|
||||||
configure_modules_and_functions
|
|
||||||
configure_zsh_aliases
|
|
||||||
configure_history
|
|
||||||
configure_completion
|
|
||||||
configure_vcs_info
|
|
||||||
configure_prompt
|
|
||||||
|
|
||||||
|
|
||||||
if [ -e $HOME/.zshrc.$SYS ]; then
|
|
||||||
print_info -l 3 "Sourcing ${SYS}-specific Z Shell settings"
|
|
||||||
source $HOME/.zshrc.$SYS
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -e $HOME/.zshrc.local ]; then
|
|
||||||
print_info -l 3 "Sourcing local Z Shell settings"
|
|
||||||
source $HOME/.zshrc.local
|
|
||||||
fi
|
|
||||||
|
|
10
zshrc.darwin
10
zshrc.darwin
|
@ -1,10 +0,0 @@
|
||||||
# zshrc.darwin
|
|
||||||
# OS X customizations for ZSH
|
|
||||||
#
|
|
||||||
# Eryn Wells <eryn@erynwells.me>
|
|
||||||
|
|
||||||
# Open a file/folder in Finder
|
|
||||||
alias reveal='open -R'
|
|
||||||
|
|
||||||
alias -s app='open'
|
|
||||||
alias -s xcodeproj='open -a Xcode'
|
|
|
@ -1,5 +0,0 @@
|
||||||
# .zshrc.local
|
|
||||||
# Local customizations for zsh
|
|
||||||
# Eryn Wells <eryn@erynwells.me>
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue