.zshrc (11114B)
1 # vim:fdm=marker:fdl=0 2 # set -ex 3 4 # Path /usr/local fix {{{ 5 if ! echo $PATH | tr ':' '\n' | grep -q '/usr/local/bin/' ; then 6 export PATH="/usr/local/bin:$PATH" 7 fi 8 if ! echo $PATH | tr ':' '\n' | grep -q '/usr/local/sbin/' ; then 9 export PATH="/usr/local/sbin:$PATH" 10 fi 11 # }}} 12 # Homebrew {{{ 13 14 # Linuxbrew 15 if [ -d /home/linuxbrew/.linuxbrew ]; then 16 # eval $(/home/linuxbrew/.linuxbrew/bin/brew shellenv) 17 export HOMEBREW_PREFIX="/home/linuxbrew/.linuxbrew"; 18 export HOMEBREW_CELLAR="/home/linuxbrew/.linuxbrew/Cellar"; 19 export HOMEBREW_REPOSITORY="/home/linuxbrew/.linuxbrew/Homebrew"; 20 export PATH="/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin${PATH+:$PATH}"; 21 export MANPATH="/home/linuxbrew/.linuxbrew/share/man${MANPATH+:$MANPATH}:"; 22 export INFOPATH="/home/linuxbrew/.linuxbrew/share/info${INFOPATH+:$INFOPATH}"; 23 fi 24 25 # openjdk on osx 26 if [ -d "/opt/homebrew/opt/openjdk@17/bin" ]; then 27 export PATH="/opt/homebrew/opt/openjdk@17/bin:$PATH" 28 elif [ -d "/opt/homebrew/opt/openjdk@11/bin" ]; then 29 export PATH="/opt/homebrew/opt/openjdk@11/bin:$PATH" 30 fi 31 32 # Homebrew on M1 mac 33 if [ -x "/opt/homebrew/bin/brew" ]; then 34 eval "$(/opt/homebrew/bin/brew shellenv)" 35 export HOMEBREW_NO_AUTO_UPDATE=1 36 fi 37 38 # Brew-installed libs 39 if [ -d "/opt/homebrew/lib" ]; then 40 export LIBRARY_PATH="$LIBRARY_PATH:/opt/homebrew/lib" 41 fi 42 if [ -d "/opt/homebrew/opt/libiconv/lib" ]; then 43 export LIBRARY_PATH="$LIBRARY_PATH:/opt/homebrew/opt/libiconv/lib" 44 fi 45 46 # }}} 47 # History {{{ 48 49 # Track 50 HISTFILE=~/.histfile 51 HISTSIZE=1000000000 52 SAVEHIST=1000000000 53 setopt HIST_IGNORE_DUPS 54 bindkey -v 55 56 # Search 57 [[ -n "${key[PageUp]}" ]] && bindkey "${key[PageUp]}" history-beginning-search-backward 58 [[ -n "${key[PageDown]}" ]] && bindkey "${key[PageDown]}" history-beginning-search-forward 59 60 61 # Keep secrets out of there 62 # Source: https://github.com/jgogstad/passwordless-history 63 HISTORY_EXCLUDE_PATTERN='^ |//([^/]+:[^/]+)@|KEY[=:] *([^ ]+)|TOKEN[=:] *([^ ]+)|BEARER[=:] *([^ ]+)|PASSWO?R?D?[=:] *([^ ]+)|Authorization[=:] *([^'"'"'\"]+)|-us?e?r? ([^:]+:[^:]+) ' 64 65 # See 66 # - https://zsh.sourceforge.io/Doc/Release/Functions.html for docs on zshaddhistory 67 # - https://zsh.sourceforge.io/Doc/Release/Shell-Builtin-Commands.html for docs on print 68 function zshaddhistory() { 69 emulate -L zsh 70 unsetopt case_match 71 72 input="${1%%$'\n'}" 73 if ! [[ "$input" =~ "$HISTORY_EXCLUDE_PATTERN" ]]; then 74 print -Sr -- "$input" 75 else 76 nonempty=($match) 77 78 if [[ $#nonempty -gt 0 ]]; then 79 for m in "$nonempty[@]"; do 80 n="${m##[\"\']}" 81 input="${input/${n%%[\"\']}/...}" 82 done 83 84 print -Sr -- "$input" 85 fi 86 unset match 87 return 1 88 fi 89 } 90 91 # }}} 92 # Custom commands {{{ 93 94 # https://gist.github.com/lukechilds/a83e1d7127b78fef38c2914c4ececc3c 95 function version() { 96 curl --silent "https://api.github.com/repos/$1/releases/latest" | # Get latest release from GitHub api 97 grep '"tag_name":' | # Get tag line 98 sed -E 's/.*"([^"]+)".*/\1/' # Pluck JSON value 99 } 100 101 # }}} 102 # User .local bin path {{{ 103 if [ -d "${HOME}/.local/bin" ]; then 104 export PATH="${HOME}/.local/bin:${PATH}" 105 fi 106 # }}} 107 # OSX coreutil fixes {{{ 108 109 command -v gcp &>/dev/null && alias cp="gcp" 110 command -v gls &>/dev/null && alias ls="gls" 111 command -v gmv &>/dev/null && alias mv="gmv" 112 command -v grm &>/dev/null && alias rm="grm" 113 command -v gmake &>/dev/null && alias make="gmake" 114 115 command -v nproc &>/dev/null || alias nproc="sysctl -n hw.ncpu" 116 117 command -v kitten &>/dev/null && alias icat="kitten icat" 118 119 # }}} 120 # Aliases {{{ 121 122 # VI 123 command -v "nvim" &>/dev/null && alias vim="nvim" 124 command -v "vim" &>/dev/null && alias vi="vim" 125 126 # vim-like quit 127 alias :q="exit" 128 129 # LS 130 alias ls="ls --color=always" 131 alias ll="ls -lsa" 132 133 # OSX LS fix 134 command -v gls &>/dev/null && alias ls="gls --color=always" 135 136 # $EDITOR 137 command -v nano &>/dev/null && export EDITOR=nano 138 command -v vi &>/dev/null && export EDITOR=vi 139 command -v vim &>/dev/null && export EDITOR=vim 140 command -v nvim &>/dev/null && export EDITOR=nvim 141 142 # Debugger 143 alias gd="gdb -tui -q --args" 144 145 # Git shorthands 146 alias gc="git commit --no-verify" 147 148 # }}} 149 # Auto-correct {{{ 150 151 # Correction 152 setopt correct 153 setopt correctall 154 155 # Command not found 156 if [[ -s '/etc/zsh_command_not_found' ]]; then 157 source '/etc/zsh_command_not_found' 158 fi 159 160 # Typo corrector 161 if command -v thefuck &>/dev/null; then 162 eval "$(thefuck --alias)" 163 fi 164 165 # }}} 166 # Tab-completion {{{ 167 168 # Command & folder completion 169 autoload -Uz compinit promptinit && compinit && promptinit 170 zstyle ':completion:*' menu select 171 setopt completealiases 172 173 # Known_hosts 174 if [ -f "~/.ssh/known_hosts" ]; then 175 local knownhosts 176 knownhosts=( ${${${${(f)"$(<$HOME/.ssh/known_hosts)"}:#[0-9]*}%%\ *}%%,*} ) 177 zstyle ':completion:*:(ping|dig|ssh|scp|sftp|mosh|nc|ncat):*' hosts $knownhosts 178 fi 179 180 # }}} 181 # Fixes {{{ 182 183 # TERM 184 if [[ $TERM == screen* ]]; then 185 export TERM=${TERM#screen.} 186 export SCREEN=yes 187 fi 188 189 # Fix for kitty term 190 if [[ $TERM == "xterm-kitty" ]]; then 191 export TERM=xterm-color 192 fi 193 194 # # TERM 195 # # nvim has issues with xterm-256color 196 # if [[ $TERM == xterm-256color ]]; then 197 # export TERM=xterm-color 198 # fi 199 200 # Auto-cd 201 setopt autocd 202 203 # GPG 204 export GPG_TTY=$(tty) 205 206 # npm-gyp performance 207 export npm_config_jobs=$(( $(nproc) + 1 )) 208 209 # }}} 210 # Prompt {{{ 211 212 autoload -U colors && colors 213 autoload -U promptinit && promptinit 214 prompt="[%{$fg[white]%}%D{%H:%M}%{$reset_color%}] %(?..[%{$fg[red]%}%?%{$reset_color%}] )%{$fg[yellow]%}%n%{$reset_color%}:%{$fg[green]%}%c%{$reset_color%}%# " 215 PROMPT_COMMAND= 216 217 # }}} 218 # Titles {{{ 219 220 [[ -e ~/src/jreese/zsh-titles/titles.plugin.zsh ]] && source ~/src/jreese/zsh-titles/titles.plugin.zsh 221 222 # }}} 223 # FuzzyFinder {{{ 224 [ -f ~/.fzf.zsh ] && source ~/.fzf.zsh 225 # }}} 226 # Google Cloud SDK {{{ 227 228 # The next line updates PATH for the Google Cloud SDK. 229 if [ -f '/home/finwo/google-cloud-sdk/path.zsh.inc' ]; then 230 . '/home/finwo/google-cloud-sdk/path.zsh.inc' 231 fi 232 233 # The next line enables shell command completion for gcloud. 234 if [ -f '/home/finwo/google-cloud-sdk/completion.zsh.inc' ]; then 235 . '/home/finwo/google-cloud-sdk/completion.zsh.inc' 236 fi 237 238 # The next line updates PATH for the Google Cloud SDK. 239 if [ -f '/home/finwo/Downloads/google-cloud-sdk/path.zsh.inc' ]; then 240 . '/home/finwo/Downloads/google-cloud-sdk/path.zsh.inc' 241 fi 242 243 # The next line enables shell command completion for gcloud. 244 if [ -f '/home/finwo/Downloads/google-cloud-sdk/completion.zsh.inc' ]; then 245 . '/home/finwo/Downloads/google-cloud-sdk/completion.zsh.inc' 246 fi 247 248 # }}} 249 # Go binaries {{{ 250 if [ -d "${HOME}/go/bin" ]; then 251 export PATH="${HOME}/go/bin:${PATH}" 252 fi 253 # }}} 254 # Symfony {{{ 255 if [ -d "${HOME}/.symfony/bin" ]; then 256 export PATH="${HOME}/.symfony/bin:${PATH}" 257 fi 258 # }}} 259 # Rust support {{{ 260 if [ -d "${HOME}/.cargo/bin" ]; then 261 export PATH="${HOME}/.cargo/bin:${PATH}" 262 fi 263 # }}} 264 # Global composer {{{ 265 266 # Simple composer fetcher 267 function getComposer { 268 curl https://getcomposer.org/installer | php 269 } 270 271 # Auto-detects where composer(.phar) is installed 272 function composer { 273 for p in $(echo $PATH | tr ':' '\n'); do 274 for i in $(echo composer{.phar,}); do 275 [ -f "$p/$i" ] || continue 276 php "$p/$i" "$@" 277 return $? 278 done 279 done 280 for i in $(echo {,\~/,{/usr,/opt}{/local,}/bin/}composer{.phar,}); do 281 [ -f "$i" ] || continue 282 php "$i" "$@" 283 return $? 284 done 285 echo "composer is not installed on this system" 286 return 1 287 } 288 289 # Use composer-installed binaries 290 if [ -d "${HOME}/.config/composer/vendor/bin" ]; then 291 export PATH="${HOME}/.config/composer/vendor/bin:${PATH}" 292 fi 293 294 # }}} 295 # Node Version Manager {{{ 296 297 if [ ! -f "${HOME}/.nvm/nvm.sh" ]; then 298 curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/$(version nvm-sh/nvm)/install.sh" | bash 299 fi 300 301 export NVM_DIR="$HOME/.nvm" 302 [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm 303 [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion 304 305 # }}} 306 # PHPBrew {{{ 307 308 [[ -e ~/.phpbrew/bashrc ]] && source ~/.phpbrew/bashrc 309 310 # }}} 311 # qemu-create {{{ 312 function qemu-create () { 313 314 # Detect the VM settings 315 NAME="${1:-machine}" 316 HDSIZE="${2:-40G}" 317 318 # Create a directory for it 319 mkdir -p "${NAME}" 320 321 # Write run.sh 322 cat <<EOF > "${NAME}/run.sh" 323 #!/usr/bin/env bash 324 cd \$(dirname \$0) 325 if [ -f config ]; then 326 source config 327 fi 328 ARGS=() 329 ARGS+=" -display gtk" 330 ARGS+=" -smp \${cpus:-2}" 331 ARGS+=" -soundhw all" 332 ARGS+=" -m \${mem:-2048}" 333 ARGS+=" -name \${name:-\$(basename \$(pwd))}" 334 ARGS+=" -nic user" 335 command -v 'kvm-ok' &>/dev/null && kvm-ok &>/dev/null && ARGS+=" --enable-kvm" 336 if [ ! -z "\${kernel}" ]; then ARGS+=" -kernel \${kernel}"; fi 337 if [ ! -z "\${initrd}" ]; then ARGS+=" -kernel \${initrd}"; fi 338 if [ -z "\${kernel}" ]; then 339 [ -f boot.efi ] && ARGS+=" -kernel boot.efi" 340 [ -f kernel.bin ] && ARGS+=" -kernel kernel.bin" 341 [ -f vmlinuz ] && ARGS+=" -kernel vmlinuz" 342 fi 343 if [ -z "\${initrd}" ]; then 344 [ -f initrd ] && ARGS+=" -initrd initrd" 345 [ -f initrd.gz ] && ARGS+=" -initrd initrd.gz" 346 fi 347 [ -f sda.qcow ] && ARGS+=" -hda sda.qcow" 348 [ -f sda.img ] && ARGS+=" -hda sda.img" 349 [ -f cdrom.iso ] && ARGS+=" -cdrom cdrom.iso -boot d" 350 qemu-system-x86_64 \${ARGS} 351 EOF 352 353 # Make run.sh executable 354 chmod +x "${NAME}/run.sh" 355 356 # Create the drive image 357 qemu-img create -f qcow2 "${NAME}/sda.qcow" "${HDSIZE}" 358 359 } 360 # }}} 361 # nativescript {{{ 362 if [ -f /home/finwo/.tnsrc ]; then 363 source /home/finwo/.tnsrc 364 fi 365 # }}} 366 # pnpm {{{ 367 export PNPM_HOME="/home/finwo/.local/share/pnpm" 368 export PATH="$PNPM_HOME:$PATH" 369 # }}} 370 # Android development {{{ 371 372 # Android-studio on a mac 373 if [ -d ~/Library/Android/sdk ]; then 374 export ANDROID_HOME=~/Library/Android/sdk 375 export ANDROID_SDK_ROOT=~/Library/Android/sdk 376 export ANDROID_AVD_HOME=~/.android/avd 377 fi 378 379 # Android-studio on linux 380 if [ -d ~/Android/Sdk ]; then 381 export ANDROID_HOME=~/Android/Sdk 382 export ANDROID_SDK_ROOT=~/Android/Sdk 383 export ANDROID_AVD_HOME=~/.android/avd 384 fi 385 386 # Android-sdk on linux 387 if [ -d ~/android-sdk ]; then 388 export ANDROID_HOME=~/android-sdk 389 export ANDROID_SDK_ROOT=~/android-sdk 390 fi 391 392 # Link to platform tools & emulator for android 393 if [ -d ${ANDROID_HOME}/platform-tools ]; then 394 export PATH="$PATH:$ANDROID_HOME/platform-tools" 395 fi 396 if [ -d ${ANDROID_HOME}/emulator ]; then 397 export PATH="$PATH:$ANDROID_HOME/emulator" 398 fi 399 400 # }}} 401 # Difftastic in git {{{ 402 if command -v difft &>/dev/null; then 403 export GIT_EXTERNAL_DIFF=difft 404 fi 405 # }}} 406 # osx clang {{{ 407 if [ -d /opt/homebrew/opt/llvm/bin ]; then 408 export PATH="/opt/homebrew/opt/llvm/bin:${PATH}" 409 fi 410 # }}} 411 # Rust cargo {{{ 412 if [ -f $HOME/.cargo/env ]; then 413 . $HOME/.cargo/env 414 fi 415 # }}} 416 # KubeCTL {{{ 417 418 [[ $commands[kubectl] ]] && source <(kubectl completion zsh) || echo -n 419 420 # }}} 421 # Oracle Cloud Interface {{{ 422 423 if [[ -e "${HOME}/.local/lib/oracle-cli/lib/python3.11/site-packages/oci_cli/bin/oci_autocomplete.sh" ]]; then 424 source "${HOME}/.local/lib/oracle-cli/lib/python3.11/site-packages/oci_cli/bin/oci_autocomplete.sh" 425 fi 426 427 # }}} 428 # OPAM bin support {{{ 429 430 # opam configuration 431 [[ ! -r /home/finwo/.opam/opam-init/init.zsh ]] || source /home/finwo/.opam/opam-init/init.zsh > /dev/null 2> /dev/null 432 433 # }}}