.profile 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. ###############################################################################
  2. # Non-interactive shell configuration
  3. ###############################################################################
  4. OS=$(uname -s)
  5. # Add user-specific bin dirs to PATH
  6. export PATH="$PATH:$HOME/.local/bin:$HOME/bin"
  7. # Setup user-specific Python overrides
  8. if [ "$OS" = "Darwin" ]; then
  9. for PY_DIR in "$HOME/Library/Python/"*/; do
  10. export PATH="$PY_DIR/bin:$PATH"
  11. done
  12. fi
  13. # Homebrew
  14. if [ "$OS" = "Darwin" ]; then
  15. export PATH="$PATH:$HOME/homebrew/bin"
  16. BREW_BIN=$(command -v brew 2>/dev/null)
  17. if [ "$BREW_BIN" ]; then
  18. BREW_PREFIX=$(brew --prefix)
  19. export HOMEBREW_CASK_OPTS="--appdir=$HOME/Applications --require-sha"
  20. export HOMEBREW_NO_INSECURE_REDIRECT=1
  21. # help build tools find all the brew-based bits
  22. export CFLAGS="-I$BREW_PREFIX/include/"
  23. export CXXFLAGS="-I$BREW_PREFIX/include/"
  24. export LDFLAGS="-L$BREW_PREFIX/lib/"
  25. fi
  26. fi
  27. # Default editor
  28. export EDITOR="vim"
  29. # Help things find Google Chrome
  30. if [ "$OS" = "Darwin" ]; then
  31. CHROME_BIN="$HOME/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
  32. ! [ -f "$CHROME_BIN" ] || export CHROME_BIN
  33. fi
  34. # Configure go lang
  35. if [ "$OS" = "Darwin" ]; then
  36. export GOROOT="$BREW_PREFIX/opt/go/libexec"
  37. else
  38. export GOROOT="$HOME/golang"
  39. fi
  40. export PATH="$PATH:$GOROOT/bin"
  41. export GOPATH="$HOME/go"
  42. export PATH="$PATH:$GOPATH/bin"
  43. # Configure less allow colors
  44. export LESS="-FRX"
  45. # If not running interactively, don't do anything else
  46. [ "$PS1" ] || return
  47. ###############################################################################
  48. # Interactive shell configuration
  49. ###############################################################################
  50. # tweak history behavior a bit
  51. HISTSIZE=60000
  52. if [ ! "$ZSH_VERSION" ]; then
  53. HISTFILESIZE=50000
  54. HISTCONTROL="ignoreboth"
  55. shopt -s histappend
  56. PROMPT_COMMAND="history -a;$PROMPT_COMMAND"
  57. else
  58. SAVEHIST=50000
  59. setopt HIST_EXPIRE_DUPS_FIRST
  60. # https://www.refining-linux.org/archives/49-ZSH-Gem-15-Shared-history.html
  61. setopt INC_APPEND_HISTORY
  62. setopt SHARE_HISTORY
  63. fi
  64. # check window size after each command
  65. if [ ! "$ZSH_VERSION" ]; then
  66. shopt -s checkwinsize
  67. fi
  68. # Custom shell aliases
  69. if [ "$OS" = "Darwin" ]; then
  70. export CLICOLOR=1
  71. else
  72. alias ls="ls --color=auto"
  73. alias pbcopy="xclip -selection clipboard"
  74. alias pbpaste="xclip -selection clipboard -o"
  75. fi
  76. alias la="ls -Fa"
  77. alias ll="ls -Fla"
  78. alias l="ls -FC"
  79. alias d="l"
  80. alias tree="tree -C -F"
  81. alias grep="grep --color --exclude-dir={.svn,.git,node_modules}"
  82. alias man='LESS_TERMCAP_md=$(tput bold && tput setaf 4 || :) LESS_TERMCAP_me=$(tput sgr0 || :) LESS_TERMCAP_mb=$(tput blink || :) LESS_TERMCAP_us=$(tput setaf 2 || :) LESS_TERMCAP_ue=$(tput sgr0 || :) LESS_TERMCAP_so=$(tput smso || :) LESS_TERMCAP_se=$(tput rmso || :) PAGER="${commands[less]:-$PAGER}" man'
  83. alias vi=vim
  84. # aliases for node
  85. alias node-print="node -e 'let [,f=\".\",e=\"this\"]=process.argv,ctx; try{ctx=require(f)}catch{ctx=require(path.resolve(f))}; eval(\`(async function(){ with(this) return (\${e}); })\`).call(ctx).then(console.log,e=>{console.error(e);process.exit(1)})'"
  86. alias node-print-json="node -e 'let [,f=\".\",e=\"this\"]=process.argv,ctx; try{ctx=require(f)}catch{ctx=require(path.resolve(f))}; eval(\`(async function(){ with(this) return (\${e}); })\`).call(ctx).then(o=>console.log(JSON.stringify(o,null,2)),e=>{console.error(e);process.exit(1)})'"
  87. alias node-print-deep="node -e 'let [,f=\".\",e=\"this\"]=process.argv,ctx; try{ctx=require(f)}catch{ctx=require(path.resolve(f))}; eval(\`(async function(){ with(this) return (\${e}); })\`).call(ctx).then(o=>console.log(require(\"util\").inspect(o,{depth:process.env.DEPTH||Infinity})),e=>{console.error(e);process.exit(1)})'"
  88. alias node-print-repl="node -e 'let [,f=\".\",e=\"this\"]=process.argv,ctx; try{ctx=require(f)}catch{ctx=require(path.resolve(f))}; eval(\`(async function(){ with(this) return (\${e}); })\`).call(ctx).then((r)=>(console.log(r,\`\n = \\\$1\`),repl.start().context.\$1=r),e=>{console.error(e);process.exit(1)})'"
  89. alias env-ts-node="TS_NODE_FILES=true NODE_OPTIONS=\"-r ts-node/register \$NODE_OPTIONS\""
  90. alias ts-node-print="env-ts-node node-print"
  91. # color diffs
  92. ! command -v colordiff >/dev/null || alias diff="colordiff"
  93. # color json
  94. ! command -v json >/dev/null || alias json="json -o inspect"
  95. # MacVim shell aliases
  96. if [ "$OS" = "Darwin" ]; then
  97. alias gvim="mvim"
  98. fi
  99. # fancy shell prompts
  100. if [ "$ZSH_VERSION" ]; then
  101. if [ "$OS" = "Darwin" ]; then
  102. # Enable zsh completions from brew
  103. ZSH_SITE_FUNC_DIR="$BREW_PREFIX/share/zsh/site-functions"
  104. FPATH="$ZSH_SITE_FUNC_DIR:$FPATH"
  105. # Auto fetch some community completions
  106. for ID in _yarn; do
  107. [ -f "$ZSH_SITE_FUNC_DIR/$ID" ] || curl -s -o "$ZSH_SITE_FUNC_DIR/$ID" "https://raw.githubusercontent.com/zsh-users/zsh-completions/master/src/$ID"
  108. done
  109. fi
  110. ANTIGEN_DIR="$HOME/.antigen"
  111. [ -d "$ANTIGEN_DIR" ] || mkdir "$ANTIGEN_DIR"
  112. ANTIGEN_BIN="$ANTIGEN_DIR/antigen.zsh"
  113. [ -f "$ANTIGEN_BIN" ] || curl -L git.io/antigen > "$ANTIGEN_BIN"
  114. source "$ANTIGEN_BIN"
  115. BUNDLES=(
  116. zsh-users/zsh-syntax-highlighting
  117. mafredri/zsh-async
  118. sindresorhus/pure@main
  119. )
  120. for B in ${=BUNDLES}; do
  121. antigen bundle "$B"
  122. done
  123. antigen apply
  124. # use emacs-style for most defaults
  125. bindkey -e
  126. # jump more like bash did
  127. bindkey "^[f" vi-forward-word
  128. bindkey "^[b" vi-backward-word
  129. # editor
  130. autoload -z edit-command-line
  131. zle -N edit-command-line
  132. bindkey "^X^E" edit-command-line
  133. # enable completion menu
  134. zstyle ':completion:*' menu select
  135. # allow trailing slashes on ".."
  136. zstyle ':completion:*' special-dirs true
  137. # ensure proper ls-style colors in completion
  138. zstyle ':completion:*' list-colors 'di=34:ln=35:so=32:pi=33:ex=31:bd=46;34:cd=43;34:su=41;30:sg=46;30:tw=42;30:ow=43;30'
  139. else
  140. # tab completion FTW
  141. if [ "$OS" = "Darwin" ]; then
  142. F="$BREW_PREFIX/etc/bash_completion"; ! [ -f "$F" ] || source "$F"
  143. F="$(xcode-select -p)/usr/share/git-core/git-completion.$SHELL_NAME"; ! [ -f "$F" ] || source "$F"
  144. else
  145. F="/etc/bash_completion"; ! [ -f "$F" ] || source "$F"
  146. fi
  147. F="$HOME/.liquidprompt/liquidprompt"; ! [ -f "$F" ] || source "$F"
  148. fi
  149. # gimme gimme
  150. [ -d "$HOME/.gimme" ] || curl -fsSL "https://github.com/KylePDavis/gimme/raw/master/gimme" | bash -
  151. #F="$HOME/.gimme/gimme"; ! [ -f "$F" ] || source "$F"
  152. # The VS Code terminal needs a few tweaks
  153. if [ "$TERM_PROGRAM" = "vscode" ]; then
  154. # patch to restore some of the option as meta escape key in VS Code on Mac
  155. if [ "$ZSH_VERSION" ]; then
  156. bindkey "≥" insert-last-word
  157. fi
  158. # detect if in a fully resolved HOME path and cd back to the shorter version
  159. if [ "$PWD" != "$HOME" ]; then
  160. ABS_HOME="$(cd "$HOME" && pwd -P)"
  161. if [ "$ABS_HOME" != "$HOME" ]; then
  162. if [[ "$PWD" =~ $ABS_HOME* ]]; then
  163. cd "$HOME${PWD##"$ABS_HOME"}" || :
  164. fi
  165. fi
  166. fi
  167. fi