Move the rest of the zsh functions into the dotfiles role
This commit is contained in:
parent
01312752fc
commit
398c6f2d18
48 changed files with 50 additions and 9 deletions
39
Ansible/roles/dotfiles/files/zsh/functions/append_to_path
Normal file
39
Ansible/roles/dotfiles/files/zsh/functions/append_to_path
Normal file
|
@ -0,0 +1,39 @@
|
|||
# Eryn Wells <eryn@erynwells.me>
|
||||
# vim:ft=zsh:
|
||||
|
||||
append_to_path() {
|
||||
local should_export_path=1
|
||||
local should_be_verbose=0
|
||||
|
||||
while getopts "ve" opt; do
|
||||
case $opt in
|
||||
"e") should_export_path=1;;
|
||||
"+e") should_export_path=0;;
|
||||
"v") should_be_verbose=1;;
|
||||
*) ;;
|
||||
esac
|
||||
done
|
||||
|
||||
local result=1
|
||||
local path_to_add=$@[$OPTIND]
|
||||
|
||||
if [[ -d "$path_to_add" ]]; then
|
||||
if (( $should_be_verbose )); then
|
||||
echo "Appending $path_to_add to \$path"
|
||||
fi
|
||||
path+="$path_to_add"
|
||||
else
|
||||
if (( $should_be_verbose )); then
|
||||
echo "$path_to_add doesn't exist"
|
||||
fi
|
||||
result=0
|
||||
fi
|
||||
|
||||
if (( $should_export_path )); then
|
||||
export path
|
||||
fi
|
||||
|
||||
return $result
|
||||
}
|
||||
|
||||
append_to_path "$@"
|
8
Ansible/roles/dotfiles/files/zsh/functions/binary_exists
Normal file
8
Ansible/roles/dotfiles/files/zsh/functions/binary_exists
Normal file
|
@ -0,0 +1,8 @@
|
|||
# Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
binary_exists() {
|
||||
hash $1 1>/dev/null 2>&1
|
||||
return $?
|
||||
}
|
||||
|
||||
binary_exists "$@"
|
17
Ansible/roles/dotfiles/files/zsh/functions/connect_ssh_agent
Normal file
17
Ansible/roles/dotfiles/files/zsh/functions/connect_ssh_agent
Normal file
|
@ -0,0 +1,17 @@
|
|||
#!/usr/bin/env zsh
|
||||
# Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
function connect_ssh_agent
|
||||
{
|
||||
# Start SSH agent for password-less logins
|
||||
if [[ -z "$SSH_AUTH_SOCK" && -x "$SSHAGENT" ]]; then
|
||||
if ! pgrep -u $USER ssh-agent 1>/dev/null; then
|
||||
eval $(ssh-agent -s > ~/.ssh_agent_vars)
|
||||
trap "kill $SSH_AGENT_PID" 0
|
||||
else
|
||||
eval $(cat ~/.ssh_agent_vars)
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
connect_ssh_agent "$@"
|
|
@ -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 "$@"
|
|
@ -0,0 +1,11 @@
|
|||
# Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
darwin-hardware-model() {
|
||||
if [[ -z "$darwin_hardware_model" ]]; then
|
||||
darwin_hardware_model=`sysctl -n hw.model`
|
||||
fi
|
||||
echo "$darwin_hardware_model"
|
||||
}
|
||||
|
||||
darwin-hardware-model "$@"
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
#!/usr/bin/env zsh
|
||||
# Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
darwin-os-build() {
|
||||
if [[ -z "$darwin_os_build" ]]; then
|
||||
darwin_os_build=`sysctl -n kern.osversion`
|
||||
fi
|
||||
echo "$darwin_os_build"
|
||||
}
|
||||
|
||||
darwin-os-build "$@"
|
|
@ -0,0 +1,11 @@
|
|||
#!/usr/bin/env zsh
|
||||
# Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
darwin-os-version() {
|
||||
if [[ -z "$darwin_os_version" ]]; then
|
||||
darwin_os_version=`sysctl -n kern.osproductversion`
|
||||
fi
|
||||
echo "$darwin_os_version"
|
||||
}
|
||||
|
||||
darwin-os-version "$@"
|
|
@ -0,0 +1,21 @@
|
|||
#!/usr/bin/env zsh
|
||||
# Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
autoload darwin_icloud_drive_path
|
||||
|
||||
icloud=`darwin_icloud_drive_path`
|
||||
if [[ ! -d "$icloud" ]]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Put screenshots in iCloud Drive, in a directory according to hostname
|
||||
local name=`hostname -s | tr A-Z a-z | tr ' ' -`
|
||||
local screenshots_dir="$icloud/Screenshots/$name"
|
||||
mkdir -p "$screenshots_dir"
|
||||
|
||||
echo "$screenshots_dir"
|
||||
defaults write com.apple.screencapture screenshots_diration "$screenshots_dir"
|
||||
|
||||
killall Dock
|
||||
|
||||
return 0
|
22
Ansible/roles/dotfiles/files/zsh/functions/darwin_init_once
Normal file
22
Ansible/roles/dotfiles/files/zsh/functions/darwin_init_once
Normal file
|
@ -0,0 +1,22 @@
|
|||
#!/usr/bin/env zsh
|
||||
# Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
autoload darwin_icloud_drive_path
|
||||
autoload darwin_configure_screenshots_directory
|
||||
autoload init_xcode
|
||||
|
||||
function darwin_init_once
|
||||
{
|
||||
# Dim dock icons of apps that have been hidden.
|
||||
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/
|
||||
sudo spctl --master-disable
|
||||
|
||||
init_xcode
|
||||
}
|
||||
|
||||
darwin_init_once "$@"
|
|
@ -0,0 +1,8 @@
|
|||
#!/usr/bin/env zsh
|
||||
# Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
for func in ${(P)${1}}; do
|
||||
if autoload +X -Uz $func &> /dev/null; then
|
||||
$func
|
||||
fi
|
||||
done
|
13
Ansible/roles/dotfiles/files/zsh/functions/finder
Normal file
13
Ansible/roles/dotfiles/files/zsh/functions/finder
Normal file
|
@ -0,0 +1,13 @@
|
|||
# vim: set ft=zsh:
|
||||
|
||||
# Open a file or folder in Finder.
|
||||
function finder
|
||||
{
|
||||
if [[ -z "$1" ]]; then
|
||||
open -R .
|
||||
fi
|
||||
|
||||
open -R "$1"
|
||||
}
|
||||
|
||||
finder "$@"
|
16
Ansible/roles/dotfiles/files/zsh/functions/g
Normal file
16
Ansible/roles/dotfiles/files/zsh/functions/g
Normal file
|
@ -0,0 +1,16 @@
|
|||
#!/usr/bin/env zsh
|
||||
# Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
function g {
|
||||
if [[ $# -gt 0 ]]; then
|
||||
git $@
|
||||
else
|
||||
git status --short --branch
|
||||
fi
|
||||
return $?
|
||||
}
|
||||
|
||||
# Use git completion for the g function
|
||||
compdef g='git'
|
||||
|
||||
g "$@"
|
19
Ansible/roles/dotfiles/files/zsh/functions/homebrew-prefix
Normal file
19
Ansible/roles/dotfiles/files/zsh/functions/homebrew-prefix
Normal file
|
@ -0,0 +1,19 @@
|
|||
#!/usr/bin/env zsh
|
||||
|
||||
autoload binary_exists
|
||||
|
||||
function homebrew-prefix
|
||||
{
|
||||
if [[ -e "$SYSTEM_PARAMETERS_FILE" ]] && binary_exists jq; then
|
||||
jq .parameters.homebrew_prefix.value "$SYSTEM_PARAMETERS_FILE"
|
||||
return
|
||||
fi
|
||||
|
||||
if ! binary_exists brew; then
|
||||
return
|
||||
fi
|
||||
|
||||
brew --prefix
|
||||
}
|
||||
|
||||
homebrew-prefix "$@"
|
45
Ansible/roles/dotfiles/files/zsh/functions/import_cacert
Normal file
45
Ansible/roles/dotfiles/files/zsh/functions/import_cacert
Normal file
|
@ -0,0 +1,45 @@
|
|||
# vim:ft=zsh:
|
||||
#
|
||||
# Import the CAcert root CA on OS X. Based on the tutorial on their wiki.
|
||||
#
|
||||
# http://wiki.cacert.org/MacOSX_X509Anchors
|
||||
#
|
||||
# Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
|
||||
function import_cacert
|
||||
{
|
||||
# SHA1 fingerprints of the root and class3 keys.
|
||||
local root_fingerprint="13:5C:EC:36:F4:9C:B8:E9:3B:1A:B2:70:CD:80:88:46:76:CE:8F:33"
|
||||
local class3_fingerprint="AD:7C:3F:64:FC:44:39:FE:F4:E9:0B:E8:F4:7C:6C:FA:8A:AD:FD:CE"
|
||||
|
||||
local savewd=`pwd`
|
||||
local tmpdir=`mktemp -dt cacert`
|
||||
cd "$tmpdir"
|
||||
|
||||
# Download the certificates.
|
||||
curl -k -o root.crt "https://www.cacert.org/certs/root.crt"
|
||||
curl -k -o class3.crt "https://www.cacert.org/certs/class3.crt"
|
||||
|
||||
# Verify fingerprints and import.
|
||||
if openssl x509 -noout -fingerprint < root.crt \
|
||||
| grep "Fingerprint=$root_fingerprint" 1>/dev/null
|
||||
then
|
||||
sudo security add-trusted-cert -d \
|
||||
-k /Library/Keychains/System.keychain \
|
||||
-r trustRoot \
|
||||
root.crt
|
||||
fi
|
||||
|
||||
if openssl x509 -noout -fingerprint < class3.crt \
|
||||
| grep "Fingerprint=$class3_fingerprint" 1>/dev/null
|
||||
then
|
||||
sudo security add-trusted-cert -d \
|
||||
-k /Library/Keychains/System.keychain \
|
||||
-r trustAsRoot \
|
||||
class3.crt
|
||||
fi
|
||||
|
||||
cd "$savewd"
|
||||
rm -rf "$tmpdir"
|
||||
}
|
|
@ -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 "$@"
|
30
Ansible/roles/dotfiles/files/zsh/functions/init_configure_ls
Normal file
30
Ansible/roles/dotfiles/files/zsh/functions/init_configure_ls
Normal file
|
@ -0,0 +1,30 @@
|
|||
#!/usr/bin/env zsh
|
||||
# Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
local system_ls=`which ls`
|
||||
local has_gnu_ls
|
||||
local ls_options
|
||||
|
||||
if $system_ls --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
|
||||
|
||||
alias ls="$system_ls $ls_options"
|
||||
alias la="$system_ls -A $ls_options"
|
||||
alias ll="$system_ls -l $ls_options"
|
||||
alias l.="$system_ls -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
|
||||
|
||||
eval `$dircolors_bin $dircolors`
|
||||
fi
|
|
@ -0,0 +1,7 @@
|
|||
# Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
init_profile_darwin() {
|
||||
( ssh-add --apple-load-keychain & ) 1>/dev/null 2>&1
|
||||
}
|
||||
|
||||
init_profile_darwin "$@"
|
|
@ -0,0 +1,34 @@
|
|||
# Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
autoload -Uz binary_exists
|
||||
autoload -Uz darwin-os-version
|
||||
autoload -Uz darwin-os-build
|
||||
autoload -Uz darwin-hardware-model
|
||||
|
||||
init_profile_darwin_say_hello() {
|
||||
local cat_program=cat
|
||||
if binary_exists lolcat; then
|
||||
cat_program=lolcat
|
||||
fi
|
||||
|
||||
local hello_message="It's `date +'%H:%M on %A, %B %d'`."
|
||||
|
||||
local hardware_model=`darwin-hardware-model`
|
||||
if [[ -n "$hardware_model" ]]; then
|
||||
hello_message+="\nThis machine is a $hardware_model."
|
||||
fi
|
||||
|
||||
local os_version=`darwin-os-version`
|
||||
if [[ -n "$os_version" ]]; then
|
||||
local os_build=`darwin-os-build`
|
||||
if [[ -n "$os_build" ]]; then
|
||||
hello_message+="\nYou're running macOS $os_version ($os_build)."
|
||||
else
|
||||
hello_message+="\nYou're running macOS $os_version."
|
||||
fi
|
||||
fi
|
||||
|
||||
print "$hello_message\n" | $cat_program
|
||||
}
|
||||
|
||||
init_profile_darwin_say_hello "$@"
|
37
Ansible/roles/dotfiles/files/zsh/functions/init_rc_aliases
Normal file
37
Ansible/roles/dotfiles/files/zsh/functions/init_rc_aliases
Normal file
|
@ -0,0 +1,37 @@
|
|||
#!/usr/bin/env zsh
|
||||
# Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
autoload binary_exists
|
||||
|
||||
function init_rc_aliases
|
||||
{
|
||||
alias j='jobs'
|
||||
alias h='history'
|
||||
alias df='df -h'
|
||||
alias du='du -h'
|
||||
alias e='emacs'
|
||||
alias v='vi'
|
||||
|
||||
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 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'
|
||||
|
||||
alias -s c='vim'
|
||||
alias -s tex='vim'
|
||||
alias -s txt='vim'
|
||||
alias -s xml='vim'
|
||||
alias -s jar='java -jar'
|
||||
}
|
||||
|
||||
init_rc_aliases "$@"
|
|
@ -0,0 +1,41 @@
|
|||
#!/usr/bin/env zsh
|
||||
# Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
autoload -Uz compinit
|
||||
compinit
|
||||
|
||||
# Cache completions
|
||||
zstyle ':completion::complete:*' use-cache 1
|
||||
zstyle ':completion::complete:*' cache-path ~/.zsh/cache
|
||||
|
||||
# Make ls show completion list in color.
|
||||
# See also: https://github.com/ohmyzsh/ohmyzsh/issues/6060
|
||||
if [[ -n "$LS_COLORS" ]]; then
|
||||
zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS}
|
||||
else
|
||||
zstyle ':completion:*:default' list-colors \
|
||||
'di=34' 'ln=35' 'so=32' 'pi=33' 'ex=31' 'bd=34;46' 'cd=34;43' 'su=30;41' \
|
||||
'sg=30;46' 'tw=30;42' 'ow=30;43'
|
||||
fi
|
||||
|
||||
# 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
|
|
@ -0,0 +1,24 @@
|
|||
#!/usr/bin/env zsh
|
||||
# Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
local theme=loquacious
|
||||
|
||||
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'
|
||||
zstyle ':vcs_info:git-svn:general:*' formats '%b'
|
||||
|
||||
# Export the current Git branch before every prompt.
|
||||
function export_gitbranch {
|
||||
vcs_info general
|
||||
export gitbranch=${vcs_info_msg_0_}
|
||||
}
|
||||
|
||||
add-zsh-hook precmd export_gitbranch
|
||||
|
||||
autoload -U promptinit
|
||||
promptinit
|
||||
prompt $theme
|
|
@ -0,0 +1,20 @@
|
|||
#!/usr/bin/env zsh
|
||||
# Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
local mode=emacs
|
||||
|
||||
if [[ -z "$mode" ]]; then
|
||||
mode=emacs
|
||||
fi
|
||||
|
||||
function configure_zle_emacs { }
|
||||
function configure_zle_vim { }
|
||||
|
||||
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
|
|
@ -0,0 +1,18 @@
|
|||
# Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
autoload binary_exists
|
||||
autoload homebrew-prefix
|
||||
|
||||
function init_rc_fpath_darwin
|
||||
{
|
||||
if binary_exists brew; then
|
||||
local brew_fpath="$(homebrew-prefix)/share/zsh/site-functions"
|
||||
if [[ -d "$brew_fpath" ]]; then
|
||||
fpath+=($brew_fpath)
|
||||
fi
|
||||
|
||||
export FPATH
|
||||
fi
|
||||
}
|
||||
|
||||
init_rc_fpath_darwin "$@"
|
11
Ansible/roles/dotfiles/files/zsh/functions/init_rc_linux
Normal file
11
Ansible/roles/dotfiles/files/zsh/functions/init_rc_linux
Normal file
|
@ -0,0 +1,11 @@
|
|||
#!/usr/bin/env zsh
|
||||
# Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
function init_rc_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 "$@"
|
|
@ -0,0 +1,12 @@
|
|||
#!/usr/bin/env zsh
|
||||
# Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
for x in "$HOME/Code" "$HOME/Documents/Code"; do
|
||||
if [[ ! -d "$x" ]]; then
|
||||
continue
|
||||
fi
|
||||
export c="$x"
|
||||
break
|
||||
done
|
||||
|
||||
export dd="$HOME/Library/Developer/Xcode/DerivedData"
|
|
@ -0,0 +1,9 @@
|
|||
#!/usr/bin/env zsh
|
||||
# Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
function init_site_environments
|
||||
{
|
||||
export ERYNWELLS_ME_SITE="$HOME/Developer/erynwells.me"
|
||||
}
|
||||
|
||||
init_site_environments "$@"
|
|
@ -0,0 +1,9 @@
|
|||
#!/usr/bin/env zsh
|
||||
# Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
function init_website_environments
|
||||
{
|
||||
export ERYNWELLS_ME_SITE="$HOME/Developer/erynwells.me"
|
||||
}
|
||||
|
||||
init_website_environments "$@"
|
13
Ansible/roles/dotfiles/files/zsh/functions/init_xcode
Normal file
13
Ansible/roles/dotfiles/files/zsh/functions/init_xcode
Normal file
|
@ -0,0 +1,13 @@
|
|||
# Eryn Wells <eryn@erynwells.me>
|
||||
# vim: ft=zsh:
|
||||
|
||||
function init_xcode
|
||||
{
|
||||
if [[ -d "~df/Xcode/IDETemplateMacros.plist" ]]; then
|
||||
echo "Copying IDETemplateMacros.plist"
|
||||
mkdir -p ~/Library/Developer/Xcode/UserData
|
||||
cp ~df/Xcode/IDETemplateMacros.plist ~/Library/Developer/Xcode/UserData
|
||||
fi
|
||||
}
|
||||
|
||||
init_xcode "%@"
|
|
@ -0,0 +1,16 @@
|
|||
#!/usr/bin/env zsh
|
||||
# Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
autoload load_module
|
||||
|
||||
local myfpath="$HOME/.zsh/func"
|
||||
|
||||
for func in $myfpath/*; do
|
||||
[[ ! -e "$func" || -d "$func" ]] && continue
|
||||
|
||||
local functionName=`basename $func`
|
||||
[[ "$functionName" =~ "prompt_*" ]] && continue
|
||||
[[ "$functionName" =~ "init_*" ]] && continue
|
||||
|
||||
autoload -Uz $functionName
|
||||
done
|
21
Ansible/roles/dotfiles/files/zsh/functions/init_zsh_history
Normal file
21
Ansible/roles/dotfiles/files/zsh/functions/init_zsh_history
Normal file
|
@ -0,0 +1,21 @@
|
|||
#!/usr/bin/env zsh
|
||||
# Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
function init_zsh_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 "$@"
|
16
Ansible/roles/dotfiles/files/zsh/functions/init_zsh_options
Normal file
16
Ansible/roles/dotfiles/files/zsh/functions/init_zsh_options
Normal file
|
@ -0,0 +1,16 @@
|
|||
#!/usr/bin/env zsh
|
||||
# Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
function init_zsh_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 "$@"
|
|
@ -0,0 +1,16 @@
|
|||
#!/usr/bin/env zsh
|
||||
# Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
function list_tmux_session
|
||||
{
|
||||
local tmux_out=`tmux list-sessions 2>/dev/null`
|
||||
[[ -z "$tmux_out" || -n "$TMUX" ]] && return
|
||||
|
||||
echo "You have the following active tmux sessions:"
|
||||
for session in ${(f)tmux_out}; do
|
||||
echo " $session"
|
||||
done
|
||||
echo
|
||||
}
|
||||
|
||||
list_tmux_session "$@"
|
39
Ansible/roles/dotfiles/files/zsh/functions/load_module
Normal file
39
Ansible/roles/dotfiles/files/zsh/functions/load_module
Normal file
|
@ -0,0 +1,39 @@
|
|||
#!/usr/bin/env zsh
|
||||
# Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
function load_module
|
||||
{
|
||||
local mod=$1
|
||||
if [[ -z "$mod" ]]; then
|
||||
print "Missing argument: path to module to load." >&2
|
||||
return -1
|
||||
fi
|
||||
|
||||
# Make sure $mod isn't already in $fpath
|
||||
local modpath
|
||||
for p in $fpath; do
|
||||
modpath=$p/$mod
|
||||
[[ -d $modpath ]] && break
|
||||
modpath=''
|
||||
done
|
||||
|
||||
if [[ -z "$modpath" ]]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
fpath+=($modpath)
|
||||
|
||||
for file in $modpath/*; do
|
||||
if [[ -f "$file" ]]; then
|
||||
autoload $func
|
||||
fi
|
||||
|
||||
if [[ -d "$file" ]]; then
|
||||
load_module "$file"
|
||||
fi
|
||||
done
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
load_module "$@"
|
24
Ansible/roles/dotfiles/files/zsh/functions/neovim_init_once
Normal file
24
Ansible/roles/dotfiles/files/zsh/functions/neovim_init_once
Normal file
|
@ -0,0 +1,24 @@
|
|||
#!/usr/bin/env zsh
|
||||
# Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
autoload -Uz binary_exists
|
||||
|
||||
neovim_init_once()
|
||||
{
|
||||
if binary_exists npm; then
|
||||
npm install -g \
|
||||
@tailwindcss/language-server \
|
||||
eslint \
|
||||
pyright \
|
||||
typescript-language-server \
|
||||
typescript \
|
||||
vscode-langservers-extracted
|
||||
else
|
||||
print "Cannot find npm binary" >&2
|
||||
return -1
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
neovim_init_once "$@"
|
31
Ansible/roles/dotfiles/files/zsh/functions/nethack
Normal file
31
Ansible/roles/dotfiles/files/zsh/functions/nethack
Normal file
|
@ -0,0 +1,31 @@
|
|||
#!/usr/bin/env zsh
|
||||
# Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
function nethack
|
||||
{
|
||||
local remote
|
||||
while getopts 'lr' opt; do
|
||||
case $opt in
|
||||
h) echo "Usage: $0 [-l][-r]";;
|
||||
l) remote=0;;
|
||||
r) remote=1;;
|
||||
*)
|
||||
echo "Invalid argument: $OPTARG" 1>&2
|
||||
return -1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if (( $remote )); then
|
||||
ssh nethack@alt.org
|
||||
return $?
|
||||
elif binary_exists nethack; then
|
||||
command nethack "$@[$OPTIND,-1]"
|
||||
return $?
|
||||
else
|
||||
ssh nethack@alt.org
|
||||
return $?
|
||||
fi
|
||||
}
|
||||
|
||||
nethack "$@"
|
12
Ansible/roles/dotfiles/files/zsh/functions/open-xcode
Normal file
12
Ansible/roles/dotfiles/files/zsh/functions/open-xcode
Normal file
|
@ -0,0 +1,12 @@
|
|||
#!/usr/bin/env zsh
|
||||
# Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
open-xcode() {
|
||||
local selectedXcode=`xcode-select -p`
|
||||
while [[ ! `basename $selectedXcode` =~ ".app$" ]]; do
|
||||
selectedXcode=`dirname "$selectedXcode"`
|
||||
done
|
||||
open -a "$selectedXcode" $@
|
||||
}
|
||||
|
||||
open-xcode "$@"
|
38
Ansible/roles/dotfiles/files/zsh/functions/prepend_to_path
Normal file
38
Ansible/roles/dotfiles/files/zsh/functions/prepend_to_path
Normal file
|
@ -0,0 +1,38 @@
|
|||
# Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
prepend_to_path() {
|
||||
local should_export_path=1
|
||||
local should_be_verbose=0
|
||||
|
||||
while getopts "ve" opt; do
|
||||
case $opt in
|
||||
"e") should_export_path=1;;
|
||||
"+e") should_export_path=0;;
|
||||
"v") should_be_verbose=1;;
|
||||
*) ;;
|
||||
esac
|
||||
done
|
||||
|
||||
local result=1
|
||||
local path_to_add=$@[$OPTIND]
|
||||
|
||||
if [[ -d "$path_to_add" ]]; then
|
||||
if (( $should_be_verbose )); then
|
||||
echo "Prepending $path_to_add to \$path"
|
||||
fi
|
||||
path=("$path_to_add" $path)
|
||||
else
|
||||
if (( $should_be_verbose )); then
|
||||
echo "$path_to_add doesn't exist"
|
||||
fi
|
||||
result=0
|
||||
fi
|
||||
|
||||
if (( $should_export_path )); then
|
||||
export path
|
||||
fi
|
||||
|
||||
return $result
|
||||
}
|
||||
|
||||
prepend_to_path "$@"
|
38
Ansible/roles/dotfiles/files/zsh/functions/prompt_colorize
Normal file
38
Ansible/roles/dotfiles/files/zsh/functions/prompt_colorize
Normal file
|
@ -0,0 +1,38 @@
|
|||
#!/usr/bin/zsh
|
||||
# Return a prompt string with appropriate color escapes
|
||||
# Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
local bold=0
|
||||
local foreground=''
|
||||
local background=''
|
||||
|
||||
while getopts 'bf:k:' opt; do
|
||||
case $opt in
|
||||
b) bold=1;;
|
||||
f) foreground=$OPTARG;;
|
||||
k) background=$OPTARG;;
|
||||
*) echo "Unknown option: $opt" 1>&2; return -1;;
|
||||
esac
|
||||
done
|
||||
|
||||
local str=$@[$OPTIND,${#@}]
|
||||
|
||||
autoload -U is-at-least
|
||||
if is-at-least '4.3.7'; then
|
||||
[[ -n "$foreground" ]] && str="%F{$foreground}$str%f"
|
||||
[[ -n "$background" ]] && str="%K{$background}$str%k"
|
||||
[[ $bold -eq 1 ]] && str="%B$str%b"
|
||||
else
|
||||
local fg_hash bg_hash
|
||||
if [[ $bold -eq 1 ]]; then
|
||||
fg_hash='fg_bold'
|
||||
bg_hash='bg_bold'
|
||||
else
|
||||
fg_hash='fg_no_bold'
|
||||
bg_hash='bg_no_bold'
|
||||
fi
|
||||
[[ -n "$foreground" ]] && str="%{\$${fg_hash}[$foreground]%}$str%{\$reset_color%}"
|
||||
[[ -n "$background" ]] && str="%%{\$${bg_hash}[$background]%}$str%{\$reset_color%}"
|
||||
fi
|
||||
|
||||
print $str
|
|
@ -0,0 +1,175 @@
|
|||
#!/usr/bin/env zsh
|
||||
# Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
function prompt_loquacious_help
|
||||
{
|
||||
cat <<EOF
|
||||
This prompt takes up two lines. At its most verbose, it looks like this:
|
||||
|
||||
<user> at <host> in <cwd> on <repo>(<branch>)
|
||||
%
|
||||
|
||||
By default, <host> is only shown when the SSH_CONNECTION variable is set; in
|
||||
other words, when this shell session was opened via an SSH connection. The
|
||||
prompt will also show the current repository and branch using vcs_info if the
|
||||
current directory is in a repo.
|
||||
EOF
|
||||
}
|
||||
|
||||
function prompt_loquacious_setup
|
||||
{
|
||||
typeset -ga precmd_functions
|
||||
typeset -ga preexec_functions
|
||||
|
||||
autoload -U prompt_colorize
|
||||
autoload -Uz vcs_info
|
||||
autoload -U add-zsh-hook
|
||||
|
||||
add-zsh-hook chpwd set_repo_name
|
||||
add-zsh-hook precmd set_xterm_title
|
||||
add-zsh-hook precmd set_tmux_window_name
|
||||
add-zsh-hook precmd print_newline
|
||||
add-zsh-hook precmd set_prompt_info
|
||||
|
||||
add-zsh-hook preexec print_newline
|
||||
add-zsh-hook preexec set_tmux_window_name
|
||||
|
||||
prompt_opts=(cr subst percent)
|
||||
|
||||
# Set up vcs_info
|
||||
zstyle ':vcs_info:git:loquacious_chpwd:*' formats '%F{cyan}%r%f'
|
||||
zstyle ':vcs_info:git-svn:loquacious_chpwd:*' formats '[%F{red}svn%f]%F{cyan}%r%f'
|
||||
zstyle ':vcs_info:git:loquacious_precmd:*' formats '(%F{blue}%b%f)'
|
||||
zstyle ':vcs_info:git-svn:loquacious_precmd:*' formats '(%F{blue}%b%f)'
|
||||
|
||||
PS1='$PS1_PLACE, $PS1_TIME $PS1_ZLE_MODE
|
||||
$PS1_LINE'
|
||||
|
||||
zle -N zle-keymap-select on_keymap_select
|
||||
}
|
||||
|
||||
function prompt_loquacious_preview
|
||||
{
|
||||
# TODO: Implement prompt preview.
|
||||
}
|
||||
|
||||
#
|
||||
# HELPER FUNCTIONS
|
||||
#
|
||||
|
||||
# First prompt flag. See precmd_newline.
|
||||
is_first_prompt=1
|
||||
|
||||
function print_newline
|
||||
{
|
||||
# Don't print newlines the first time the prompt is displayed.
|
||||
if [[ -n $is_first_prompt ]]; then
|
||||
unset is_first_prompt
|
||||
[[ -z $SSH_CONNECTION ]] && return
|
||||
fi
|
||||
echo
|
||||
}
|
||||
|
||||
function set_repo_name
|
||||
{
|
||||
vcs_info loquacious_chpwd
|
||||
if [[ -n "${vcs_info_msg_0_}" ]]; then
|
||||
PS1_REPO="on ${vcs_info_msg_0_}"
|
||||
else
|
||||
PS1_REPO=""
|
||||
fi
|
||||
}
|
||||
|
||||
function set_prompt_info
|
||||
{
|
||||
PS1_TIMESTAMP="%*"
|
||||
PS1_STATUS="%(?..%F{red}[$?]%f)"
|
||||
PS1_HISTORY="№%F{blue}%!%f"
|
||||
PS1_TIME="$PS1_HISTORY$PS1_STATUS at $PS1_TIMESTAMP"
|
||||
|
||||
PS1_NAME="%F{magenta}%n%f"
|
||||
PS1_HOST="%F{red}%m%f"
|
||||
PS1_CWD="%F{green}%~%f"
|
||||
|
||||
PS1_PLACE="$PS1_NAME"
|
||||
if [[ -n "$SSH_CONNECTION" && "$TERM_PROGRAM" != "tmux" ]]; then
|
||||
PS1_PLACE="$PS1_PLACE at $PS1_HOST"
|
||||
fi
|
||||
PS1_PLACE="$PS1_PLACE in $PS1_CWD"
|
||||
|
||||
|
||||
# Get git repo information, if it exists. See setup function for
|
||||
# configuration details.
|
||||
vcs_info loquacious_precmd
|
||||
PS1_BRANCH="${vcs_info_msg_0_}"
|
||||
if [[ -n "$vcs_info_msg_0_" ]]; then
|
||||
PS1_PLACE="$PS1_PLACE $PS1_REPO$PS1_BRANCH"
|
||||
fi
|
||||
|
||||
# Show background jobs, if any.
|
||||
if [[ `jobs | wc -l` -ge 1 ]]; then
|
||||
PS1_JOBS='%j'
|
||||
fi
|
||||
|
||||
# Show background job count if any exist.
|
||||
RPS1="%(1j.[%F{magenta}%j%f].)"
|
||||
|
||||
PS1_LINE='%(!.%F{red}.%F{default})%#%f '
|
||||
}
|
||||
|
||||
function set_xterm_title
|
||||
{
|
||||
local tmux_session_name=''
|
||||
local title='%n@%m'
|
||||
if [[ -n "$TMUX" ]]; then
|
||||
local tmux_session_name=`tmux display-message -p '#S'`
|
||||
title+=" (${tmux_session_name})"
|
||||
fi
|
||||
|
||||
# Set xterm and screen titles
|
||||
if [[ -n "$DISPLAY" || -n "$TERM_PROGRAM" ]]; then
|
||||
print -Pn "\e]2;${title}\a"
|
||||
fi
|
||||
|
||||
# For Apple Terminal.app, add a link to the current directory.
|
||||
if [[ "$TERM_PROGRAM" == "Apple_Terminal" ]]; then
|
||||
print -Pn "\e]7;file://%d\a"
|
||||
fi
|
||||
}
|
||||
|
||||
function set_tmux_window_name
|
||||
{
|
||||
if [[ -z "$TMUX" ]]; then
|
||||
return
|
||||
fi
|
||||
|
||||
local process="${${(z)1}[1]}"
|
||||
if [[ -n "$process" ]]; then
|
||||
tmux rename-window "$process"
|
||||
else
|
||||
tmux rename-window "`print -Pn "%2~"`"
|
||||
fi
|
||||
}
|
||||
|
||||
function set_zle_mode_info
|
||||
{
|
||||
if [[ -z "$1" || "$1" == 'viins' || "$1" == 'main' ]]; then
|
||||
PS1_ZLE_MODE="%F{black}<INS>%f"
|
||||
elif [[ "$1" == 'vicmd' ]]; then
|
||||
PS1_ZLE_MODE="%F{black}<CMD>%f"
|
||||
else
|
||||
PS1_ZLE_MODE=''
|
||||
fi
|
||||
}
|
||||
|
||||
function on_keymap_select
|
||||
{
|
||||
# Regenerate the prompt with the new mode
|
||||
set_zle_mode_info $KEYMAP
|
||||
|
||||
# Redraw the prompt
|
||||
zle reset-prompt
|
||||
}
|
||||
|
||||
# Finally, run setup to get everything going
|
||||
prompt_loquacious_setup "$@"
|
|
@ -0,0 +1,34 @@
|
|||
#!/usr/bin/env zsh
|
||||
|
||||
. $HOME/.shell-functions
|
||||
|
||||
|
||||
TAGS_DIR=$HOME/.tags
|
||||
|
||||
|
||||
function refresh_system_tags
|
||||
{
|
||||
if [[ "$SYS" == "darwin" ]]; then
|
||||
print_info "Refreshing Apple frameworks in /System/Library/Frameworks"
|
||||
find /System/Library/Frameworks -maxdepth 2 -name Headers \
|
||||
-exec ctags -Ra -f "$TAGS_DIR/apple_frameworks.tags" {} \;
|
||||
|
||||
print_info "Refreshing 3rd party frameworks in /Library/Frameworks"
|
||||
find /Library/Frameworks -maxdepth 2 -name Headers \
|
||||
-exec ctags -Ra -f "$TAGS_DIR/3rdparty_frameworks.tags" {} \;
|
||||
fi
|
||||
|
||||
# Generic UNIX system include directory
|
||||
if [[ -d /usr/include ]]; then
|
||||
print_info "Refreshing system includes in /usr/include"
|
||||
ctags -Ra -f "$TAGS_DIR/usr.tags" /usr/include
|
||||
fi
|
||||
|
||||
# Generic UNIX local system include directory
|
||||
if [[ -d /usr/local/include ]]; then
|
||||
print_info "Refreshing local system includes in /usr/local/include"
|
||||
ctags -Ra -f "$TAGS_DIR/usr_local.tags" /usr/local/include
|
||||
fi
|
||||
}
|
||||
|
||||
refresh_system_tags
|
88
Ansible/roles/dotfiles/files/zsh/functions/setup-cpython
Normal file
88
Ansible/roles/dotfiles/files/zsh/functions/setup-cpython
Normal file
|
@ -0,0 +1,88 @@
|
|||
#!/usr/bin/env zsh
|
||||
#
|
||||
# Set up for CPython development.
|
||||
#
|
||||
# Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
|
||||
function _usage-setup-cpython
|
||||
{
|
||||
cat <<EOF
|
||||
Usage: $1 [-h] [-r root]
|
||||
|
||||
Setup for CPython development.
|
||||
|
||||
Arguments:
|
||||
-h Show this help.
|
||||
-r root Use the given directory as the root of the CPython source tree.
|
||||
EOF
|
||||
}
|
||||
|
||||
|
||||
function setup-cpython
|
||||
{
|
||||
root="$HOME/Code/cpython"
|
||||
coverage="$HOME/Code/coveragepy"
|
||||
|
||||
while getopts 'hr:' opt; do
|
||||
case $opt in
|
||||
(h)
|
||||
_usage-setup-cpython "$0"
|
||||
return 0
|
||||
;;
|
||||
(r)
|
||||
root="$OPTARG"
|
||||
;;
|
||||
(*)
|
||||
echo "Invalid argument: $OPTARG" 1>&2
|
||||
return -1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ ! -d "$root" ]]; then
|
||||
print_error "Invalid source root: $root"
|
||||
return 1
|
||||
fi
|
||||
|
||||
export coverage
|
||||
export lib="$root/Lib"
|
||||
export root
|
||||
|
||||
function cov
|
||||
{
|
||||
local cmd
|
||||
case "$1" in
|
||||
(html)
|
||||
local module="$root/Lib/$2"
|
||||
if [[ ! -d "$module" ]]; then
|
||||
if [[ -f "$module.py" ]]; then
|
||||
module="$module.py"
|
||||
fi
|
||||
fi
|
||||
cmd="html -i --include=$module"
|
||||
;;
|
||||
(report)
|
||||
cmd="report"
|
||||
;;
|
||||
(run)
|
||||
cmd="run --pylib --source=$2 Lib/test/regrtest.py test_$2"
|
||||
;;
|
||||
esac
|
||||
(cd "$root"; ./python.exe "$coverage" "$cmd")
|
||||
}
|
||||
|
||||
unsetup_functions=(unsetup-cpython)
|
||||
}
|
||||
|
||||
|
||||
function unsetup-cpython
|
||||
{
|
||||
unset coverage
|
||||
unset lib
|
||||
unset root
|
||||
|
||||
unfunction cov
|
||||
}
|
||||
|
||||
setup-cpython "$@"
|
15
Ansible/roles/dotfiles/files/zsh/functions/setup_android
Normal file
15
Ansible/roles/dotfiles/files/zsh/functions/setup_android
Normal file
|
@ -0,0 +1,15 @@
|
|||
#!/usr/bin/zsh
|
||||
#
|
||||
# Setup the shell for Android development
|
||||
#
|
||||
# Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
|
||||
function setup_android
|
||||
{
|
||||
export ANDROID_ROOT="$HOME/toolchain/android/sdk-r22.0.4"
|
||||
path=("$ANDROID_ROOT/platform-tools" "$ANDROID_ROOT/tools" $path)
|
||||
rehash
|
||||
}
|
||||
|
||||
setup_android $@
|
55
Ansible/roles/dotfiles/files/zsh/functions/solarized
Normal file
55
Ansible/roles/dotfiles/files/zsh/functions/solarized
Normal file
|
@ -0,0 +1,55 @@
|
|||
#!/usr/bin/env zsh
|
||||
# Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
|
||||
function solarized
|
||||
{
|
||||
cat <<EOF
|
||||
SOLARIZED HEX 16/8 TERMCOL XTERM/HEX L*A*B RGB HSB
|
||||
--------- ------- ---- ------- ----------- ---------- ----------- -----------
|
||||
base03 #002b36 8/4 brblack 234 #1c1c1c 15 -12 -12 0 43 54 193 100 21
|
||||
base02 #073642 0/4 black 235 #262626 20 -12 -12 7 54 66 192 90 26
|
||||
base01 #586e75 10/7 brgreen 240 #585858 45 -07 -07 88 110 117 194 25 46
|
||||
base00 #657b83 11/7 bryellow 241 #626262 50 -07 -07 101 123 131 195 23 51
|
||||
base0 #839496 12/6 brblue 244 #808080 60 -06 -03 131 148 150 186 13 59
|
||||
base1 #93a1a1 14/4 brcyan 245 #8a8a8a 65 -05 -02 147 161 161 180 9 63
|
||||
base2 #eee8d5 7/7 white 254 #e4e4e4 92 -00 10 238 232 213 44 11 93
|
||||
base3 #fdf6e3 15/7 brwhite 230 #ffffd7 97 00 10 253 246 227 44 10 99
|
||||
yellow #b58900 3/3 yellow 136 #af8700 60 10 65 181 137 0 45 100 71
|
||||
orange #cb4b16 9/3 brred 166 #d75f00 50 50 55 203 75 22 18 89 80
|
||||
red #dc322f 1/1 red 160 #d70000 50 65 45 220 50 47 1 79 86
|
||||
magenta #d33682 5/5 magenta 125 #af005f 50 65 -05 211 54 130 331 74 83
|
||||
violet #6c71c4 13/5 brmagenta 61 #5f5faf 50 15 -45 108 113 196 237 45 77
|
||||
blue #268bd2 4/4 blue 33 #0087ff 55 -10 -45 38 139 210 205 82 82
|
||||
cyan #2aa198 6/6 cyan 37 #00afaf 60 -35 -05 42 161 152 175 74 63
|
||||
green #859900 2/2 green 64 #5f8700 60 -20 65 133 153 0 68 100 60
|
||||
EOF
|
||||
|
||||
if [[ "$1" == "dark" || "$2" == "dark" ]]; then
|
||||
echo
|
||||
echo "COLOR USAGE"
|
||||
echo "-------- ------------------------------------------"
|
||||
echo "base3 unused"
|
||||
echo "base2 unused"
|
||||
echo "base1 optional emphasized content"
|
||||
echo "base0 body text / default code / primary content"
|
||||
echo "base00 unused"
|
||||
echo "base01 comments / secondary content"
|
||||
echo "base02 background highlights"
|
||||
echo "base03 background"
|
||||
elif [[ "$1" == "light" || "$2" == "light" ]]; then
|
||||
echo
|
||||
echo "COLOR USAGE"
|
||||
echo "-------- ------------------------------------------"
|
||||
echo "base03 unused"
|
||||
echo "base02 unused"
|
||||
echo "base01 optional emphasized content"
|
||||
echo "base00 body text / default code / primary content"
|
||||
echo "base0 unused"
|
||||
echo "base1 comments / secondary content"
|
||||
echo "base2 background highlights"
|
||||
echo "base3 background"
|
||||
fi
|
||||
}
|
||||
|
||||
solarized "$@"
|
15
Ansible/roles/dotfiles/files/zsh/functions/up
Normal file
15
Ansible/roles/dotfiles/files/zsh/functions/up
Normal file
|
@ -0,0 +1,15 @@
|
|||
#!/usr/bin/zsh
|
||||
# Go up $1 directories, where $1 is an integer (saves me from having to type ../
|
||||
# ad nauseum)
|
||||
# Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
if [[ -z $1 ]]; then
|
||||
cd ..
|
||||
else
|
||||
local updir=''
|
||||
for (( i=0; $i < $1; i++ ))
|
||||
do
|
||||
updir="../$updir"
|
||||
done
|
||||
cd $updir
|
||||
fi
|
146
Ansible/roles/dotfiles/files/zsh/functions/update-path
Normal file
146
Ansible/roles/dotfiles/files/zsh/functions/update-path
Normal file
|
@ -0,0 +1,146 @@
|
|||
# Eryn Wells <eryn@erynwells.me>
|
||||
# vim: set ft=zsh:
|
||||
|
||||
function _update-path-usage
|
||||
{
|
||||
local -r function_name=$1
|
||||
|
||||
local usage_string=$(cat <<EOF
|
||||
Usage: $function_name <arguments> [<path>...]
|
||||
|
||||
Modify the target path-like variable by adding or removing paths provided as
|
||||
positional arguments. Before adding, check that the target path variable doesn't
|
||||
already contain the path and that the directory exists.
|
||||
|
||||
This function returns the number of paths that were skipped in the input. If all
|
||||
paths were processed, it returns 0. It returns 255 if an error occurred while
|
||||
processing arguments.
|
||||
|
||||
Arguments
|
||||
---------
|
||||
|
||||
%B-e%b | %B--export%b | %B--no-export%b
|
||||
Export the variable after modification.
|
||||
|
||||
%B-f%b | %B--force%b
|
||||
Unconditionally add the path, even if it doesn't exist.
|
||||
|
||||
%B-h%b | %B--help%b
|
||||
Print this message.
|
||||
|
||||
%B-p%b | %B--prepend%b
|
||||
Prepend paths to the target path variable, instead of appending. When
|
||||
prepending, directories will be added in reverse order so their precedence
|
||||
is preserved. That is, the first directory in the list will be at the start
|
||||
of the path.
|
||||
|
||||
%B-P%b | %B--path%b <path_variable_name>
|
||||
The name of a path-like variable to modify. The default is 'path'.
|
||||
|
||||
%B-r%b | %B--remove%b
|
||||
Remove paths instead of adding. -p and -f are ignored when removing
|
||||
directories from the path.
|
||||
|
||||
%B-v%b | %B--verbose%b
|
||||
Print extra information while processing directories.
|
||||
EOF
|
||||
)
|
||||
|
||||
print -P $usage_string
|
||||
}
|
||||
|
||||
function update-path
|
||||
{
|
||||
zmodload zsh/zutil
|
||||
|
||||
local -a o_args o_export o_force o_help o_prepend o_remove o_verbose o_pathvar
|
||||
zparseopts -a o_args -D -E -F - \
|
||||
{e,-export,-no-export}=o_export \
|
||||
{f,-force}=o_force \
|
||||
{h,-help}=o_help \
|
||||
{p,-prepend}=o_prepend \
|
||||
{P,-path}:=o_pathvar \
|
||||
{r,-remove}=o_remove \
|
||||
{v,-verbose}=o_verbose
|
||||
|
||||
local -ri parse_status=$?
|
||||
if (( parse_status )); then
|
||||
_update-path-usage $0
|
||||
return 255
|
||||
fi
|
||||
|
||||
if [[ $#o_help -ne 0 ]]; then
|
||||
_update-path-usage $0
|
||||
return 0
|
||||
fi
|
||||
|
||||
local -r verbose=$#o_verbose
|
||||
local -r path_variable_name=${o_pathvar[-1]:-path}
|
||||
|
||||
if ! typeset -p $path_variable_name &> /dev/null; then
|
||||
print "Invalid path variable: \$$path_variable_name" 1>&2
|
||||
return 255
|
||||
fi
|
||||
|
||||
[[ $verbose -ne 0 ]] && print "Modifying $path_variable_name"
|
||||
|
||||
local -i candidates_skipped=0
|
||||
local did_update_path
|
||||
|
||||
local -a candidates=($@)
|
||||
if [[ $#o_prepend -ne 0 ]]; then
|
||||
# If prepending, reverse the list so paths are added in the right order.
|
||||
candidates=(${(Oa)@})
|
||||
fi
|
||||
|
||||
for candidate in $candidates; do
|
||||
local candidate_index=${${(P)path_variable_name}[(Ie)$candidate]}
|
||||
|
||||
# An empty $o_remove means we're adding to the array.
|
||||
if [[ $#o_remove -eq 0 ]]; then
|
||||
if [[ $candidate_index -ne 0 ]]; then
|
||||
[[ $verbose -ne 0 ]] && print "Skipping $candidate"
|
||||
(( candidates_skipped++ ))
|
||||
continue
|
||||
fi
|
||||
|
||||
if [[ $#force -eq 0 && ! -d "$candidate" ]]; then
|
||||
[[ $verbose -ne 0 ]] && print "$candidate doesn't exist"
|
||||
(( candidates_skipped++ ))
|
||||
continue
|
||||
fi
|
||||
|
||||
did_update_path=yes
|
||||
|
||||
[[ $verbose -ne 0 ]] && print "Adding $candidate"
|
||||
if [[ $#o_prepend -ne 0 ]]; then
|
||||
eval "${path_variable_name}=(${candidate} ${path})"
|
||||
else
|
||||
eval "${path_variable_name}+=${candidate}"
|
||||
fi
|
||||
else
|
||||
if [[ $candidate_index -eq 0 ]]; then
|
||||
[[ $verbose -ne 0 ]] && print "Skipping $candidate"
|
||||
(( candidates_skipped++ ))
|
||||
continue
|
||||
fi
|
||||
|
||||
[[ $verbose -ne 0 ]] && print "Removing $candidate"
|
||||
|
||||
did_update_path=yes
|
||||
eval "${path_variable_name}[${candidate_index}]=()"
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ -n $did_update_path && $o_export[(I)--no-export] -ne 0 ]]; then
|
||||
[[ $verbose -ne 0 ]] && print "Exporting $path_variable_name"
|
||||
export $path_variable_name
|
||||
if [[ "$path_variable_name" == "path" ]]; then
|
||||
rehash
|
||||
fi
|
||||
fi
|
||||
|
||||
return $candidates_skipped
|
||||
}
|
||||
|
||||
update-path "$@"
|
15
Ansible/roles/dotfiles/files/zsh/functions/weeknotes
Normal file
15
Ansible/roles/dotfiles/files/zsh/functions/weeknotes
Normal file
|
@ -0,0 +1,15 @@
|
|||
#!/usr/bin/env zsh
|
||||
|
||||
autoload init_website_environment
|
||||
|
||||
function weeknotes
|
||||
{
|
||||
init_website_environment
|
||||
|
||||
YEAR=`date '+%Y'`
|
||||
WEEK_NUMBER=`date '+%V'`
|
||||
PAGE_PATH=blog/${YEAR}/weeknotes-${YEAR}w${WEEK_NUMBER}.md
|
||||
UPCOMING_SUNDAY=`${ERYNWELLS_ME_SITE}/scripts/next_sunday.py`
|
||||
}
|
||||
|
||||
weeknotes "$@"
|
|
@ -9,7 +9,9 @@ function init-env-fpath
|
|||
{
|
||||
local -r fpath_candidates=( \
|
||||
"$HOME/.zsh/${SYS}-functions" \
|
||||
"$HOME/.zsh/func" \
|
||||
"$HOME/.zsh/init-env-functions" \
|
||||
"$HOME/.zsh/init-rc-functions" \
|
||||
"$HOME/.zsh/functions" \
|
||||
)
|
||||
|
||||
# Process the array in reverse order (`Oa` means "descending index order",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
- name: (ZSH) Link startup files
|
||||
- name: (zsh) Link startup files
|
||||
ansible.builtin.file:
|
||||
path: ~/.{{ item }}
|
||||
src: "{{ role_path }}/files/zsh/{{ item }}"
|
||||
|
@ -10,16 +10,22 @@
|
|||
- zshrc
|
||||
- zprofile
|
||||
|
||||
- name: (ZSH) Link env functions
|
||||
- name: (zsh) Create zsh directories
|
||||
ansible.builtin.file:
|
||||
path: ~/.zsh/init-env-functions
|
||||
src: "{{ role_path }}/files/zsh/init-env-functions"
|
||||
state: link
|
||||
path: "{{ item }}"
|
||||
state: directory
|
||||
force: true
|
||||
loop:
|
||||
- ~/.zsh
|
||||
- ~/.zsh/cache
|
||||
|
||||
- name: (ZSH) Link rc functions
|
||||
- name: (zsh) Link function library directories
|
||||
ansible.builtin.file:
|
||||
path: ~/.zsh/init-rc-functions
|
||||
src: "{{ role_path }}/files/zsh/init-rc-functions"
|
||||
path: ~/.zsh/{{ item }}
|
||||
src: "{{ role_path }}/files/zsh/{{ item }}"
|
||||
state: link
|
||||
force: true
|
||||
loop:
|
||||
- init-env-functions
|
||||
- init-rc-functions
|
||||
- functions
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue