# Easier navigation: .., ..., ~ and -
alias ..="cd .."
alias cd..="cd .."
alias ...="cd ../.."
alias ....="cd ../../.."
alias .....="cd ../../../.."
alias ~="cd ~" # `cd` is probably faster to type though
alias -- -="cd -"
# mv, rm, cp
alias mv='mv -v'
alias rm='rm -i -v'
alias cp='cp -v'
# Misc
alias cask='brew cask'
alias where=which # sometimes i forget
alias brwe=brew #typos
alias hosts='sudo $EDITOR /etc/hosts'
alias ag='ag -f --hidden'
alias grebase="function rebase(){ git pull --rebase upstream $1; }; rebase"
alias speedtest='curl -o /dev/null http://speedtest.wdc01.softlayer.com/downloads/test10.zip'
alias gp="git fetch --all && git pull upstream master"
###
# time to upgrade `ls`
# use coreutils `ls` if possible…
#hash gls >/dev/null 2>&1 || alias gls="ls"
# always use color, even when piping (to awk,grep,etc)
#if gls --color > /dev/null 2>&1; then colorflag="--color"; else colorflag="-G"; fi;
#export CLICOLOR_FORCE=1
# ls options: A = include hidden (but not . or ..), F = put `/` after folders, h = byte unit suffixes
#alias ls='gls -AFh ${colorflag} --group-directories-first'
#alias lsd='ls -l | grep "^d"' # only directories
# `la` defined in .functions
###
# `cat` with beautiful colors. requires: sudo easy_install -U Pygments
alias p='pygmentize -O style=monokai -f console256 -g'
###
# GIT STUFF
alias cloen="clone" #typos, see functions below
alias push="git push"
alias g="git"
# Undo a `git push`
alias undopush="git push -f origin HEAD^:master"
# git root
alias gr='[ ! -z `git rev-parse --show-cdup` ] && cd `git rev-parse --show-cdup || pwd`'
alias master="git checkout master"
# Networking. IP address, dig, DNS
alias ip="dig +short myip.opendns.com @resolver1.opendns.com"
# alias dig="dig +nocmd any +multiline +noall +answer"
# wget sucks with certificates. Let's keep it simple.
#alias wget="curl -O"
# Recursively delete `.DS_Store` files
alias cleanup_dsstore="find . -name '*.DS_Store' -type f -ls -delete"
alias diskspace_report="df -P -kHl"
alias free_diskspace_report="diskspace_report"
# Shortcuts
alias v="vim"
alias ungz="gunzip -k"
# File size
alias fs="stat -f \"%z bytes\""
# Empty the Trash on all mounted volumes and the main HDD. then clear the useless sleepimage
alias emptytrash=" \
sudo rm -rfv /Volumes/*/.Trashes; \
rm -rfv ~/.Trash/*;
"
# Update installed Ruby gems, Homebrew, npm, and their installed packages
alias brew_update="brew -v update; brew upgrade --force-bottle --cleanup; brew cleanup; brew cask cleanup; brew prune; brew doctor; npm-check -g -u"
alias update_brew_npm_gem='brew_update; npm install npm -g; npm update -g; sudo gem update --system; sudo gem update --no-rdoc --no-ri'
## Personal
alias oss="cd /Users/wassimchegham/oss && clear"
alias cli="cd /Users/wassimchegham/oss/angular-cli"
#alias grebase="function rebase(){ git pull --rebase upstream $1; }; rebase"
alias speedtest='curl -o /dev/null http://speedtest.wdc01.softlayer.com/downloads/test10.zip'
alias gp="git fetch --all && git pull upstream master"
alias code="code-insiders"
alias c="code"
alias npm_ignore_indexing='find . -type d -name "node_modules" -exec touch "{}/.metadata_never_index" \; -exec echo "✔ {}" \;'
alias npm_ignore_indexing='find . -type d -name "node_modules" -exec touch "{}/.metadata_never_index" \; -exec echo "✔ {}" \;'
alias k="kubectl"
[alias]
cma = commit -am
cm = commit -m
up = pull
upd = !"git pull origin develop"
upa = pull --all
fa = fetch --all
fat = fetch --all --tags --prune
p = push
s = status -s
sclone = clone --depth=1
co = checkout
df = diff --color --color-words --abbrev
lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --
# Show the diff between the latest commit and the current state
d = !"git diff-index --quiet HEAD -- || clear; git --no-pager diff --patch-with-stat"
reup = rebase-update # depot_tools specific
# one-line log
l = log --pretty=format:"%C(yellow)%h\\ %ad%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate --date=short
tree = "forest --pretty=format:\"%C(red)%h %C(magenta)(%ar) %C(blue)%an %C(reset)%s\" --style=15 --reverse"
a = add
ap = add -p
m = commit --amend --verbose
cob = checkout -b
# list branches sorted by last modified
b = "!git for-each-ref --sort='-authordate' --format='%(authordate)%09%(objectname:short)%09%(refname)' refs/heads | sed -e 's-refs/heads/--'"
# list aliases
la = "!git config -l | grep alias | cut -c 7-"
r = pull --rebase upstream
dev = !"git co develop"
[core]
excludesfile = ~/.gitignore
attributesfile = ~/.gitattributes
[pager]
# insanely beautiful diffs ==> npm install -g diff-so-fancy
diff = diff-so-fancy | less --tabs=4 -RFX
show = diff-so-fancy | less --tabs=4 -RFX
[interactive]
diffFilter = "diff-so-fancy"
# so much color
[color]
ui = always
[color "diff"]
meta = yellow bold
commit = green bold
frag = magenta bold
old = red bold
new = green bold
whitespace = red reverse
[color "diff-highlight"]
oldNormal = red bold
oldHighlight = "red bold 52"
newNormal = "green bold"
newHighlight = "green bold 22"
[color "branch"]
current = yellow reverse
local = yellow
remote = green
[color "status"]
added = yellow
changed = green
untracked = cyan
# working files
.vim/viminfo
.vim/swaps/*
.vim/undo
# git credential file
.gitconfig.local
# Folder view configuration files
.DS_Store
Desktop.ini
# Thumbnail cache files
._*
Thumbs.db
# Files that might appear on external disks
.Spotlight-V100
.Trashes
# Compiled Python files
*.pyc
# compiled output
/dist
/node_modules
target
bazel-*
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
# OS
.DS_Store
# Tests
/coverage
/.nyc_output
# IDEs and editors
/.idea
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace
# IDE - VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
# Config
env
.env
# Git clone and cd into folder
function clone() {
git clone --depth=1 $1
cd $(basename ${1%.*})
}
# Create a new directory and enter it
function md() {
mkdir -p "$@" && cd "$@"
}
# find shorthand
function f() {
find . -name "$1" 2>&1 | grep -v 'Permission denied'
}
# List all files, long format, colorized, permissions in octal
function la(){
ls -l "$@" | awk '
{
k=0;
for (i=0;i<=8;i++)
k+=((substr($1,i+2,1)~/[rwx]/) *2^(8-i));
if (k)
printf("%0o ",k);
printf(" %9s %3s %2s %5s %6s %s %s %s\n", $3, $6, $7, $8, $5, $9,$10, $11);
}'
}
# cd into whatever is the forefront Finder window.
function cdf() { # short for cdfinder
cd "`osascript -e 'tell app "Finder" to POSIX path of (insertion location as alias)'`"
}
# git commit browser. needs fzf
function gitlog() {
git log --graph --color=always \
--format="%C(auto)%h%d %s %C(black)%C(bold)%cr" "$@" |
fzf --ansi --no-sort --reverse --tiebreak=index --toggle-sort=\` \
--bind "ctrl-m:execute:
echo '{}' | grep -o '[a-f0-9]\{7\}' | head -1 |
xargs -I % sh -c 'git show --color=always % | less -R'"
}
# Start an HTTP server from a directory, optionally specifying the port
function s() {
local port="${1:-8000}"
open "http://localhost:${port}/" &
python3 -m http.server ${port} --bind 0.0.0.0
}
# Copy w/ progress
function cpy () {
rsync -WavP --human-readable --progress $1 $2
}
# get gzipped size
function gz() {
echo "orig size (bytes): "
cat "$1" | wc -c
echo "gzipped size (bytes): "
gzip -c "$1" | wc -c
}
# whois a domain or a URL
function whois() {
local domain=$(echo "$1" | awk -F/ '{print $3}') # get domain from URL
if [ -z $domain ] ; then
domain=$1
fi
echo "Getting whois record for: $domain …"
# avoid recursion
# this is the best whois server
# strip extra fluff
/usr/bin/whois -h whois.internic.net $domain | sed '/NOTICE:/q'
}
function localip(){
function _localip(){ echo "📶 "$(ipconfig getifaddr "$1"); }
export -f _localip
local purple="\x1B\[35m" reset="\x1B\[m"
networksetup -listallhardwareports | \
sed -r "s/Hardware Port: (.*)/${purple}\1${reset}/g" | \
sed -r "s/Device: (en.*)$/_localip \1/e" | \
sed -r "s/Ethernet Address:/📘 /g" | \
sed -r "s/(VLAN Configurations)|==*//g"
}
# Extract archives - use: extract <file>
# Based on http://dotfiles.org/~pseup/.bashrc
function extract() {
if [ -f "$1" ] ; then
local filename=$(basename "$1")
local foldername="${filename%%.*}"
local fullpath=`perl -e 'use Cwd "abs_path";print abs_path(shift)' "$1"`
local didfolderexist=false
if [ -d "$foldername" ]; then
didfolderexist=true
read -p "$foldername already exists, do you want to overwrite it? (y/n) " -n 1
echo
if [[ $REPLY =~ ^[Nn]$ ]]; then
return
fi
fi
mkdir -p "$foldername" && cd "$foldername"
case $1 in
*.tar.bz2) tar xjf "$fullpath" ;;
*.tar.gz) tar xzf "$fullpath" ;;
*.tar.xz) tar Jxvf "$fullpath" ;;
*.tar.Z) tar xzf "$fullpath" ;;
*.tar) tar xf "$fullpath" ;;
*.taz) tar xzf "$fullpath" ;;
*.tb2) tar xjf "$fullpath" ;;
*.tbz) tar xjf "$fullpath" ;;
*.tbz2) tar xjf "$fullpath" ;;
*.tgz) tar xzf "$fullpath" ;;
*.txz) tar Jxvf "$fullpath" ;;
*.zip) unzip "$fullpath" ;;
*) echo "'$1' cannot be extracted via extract()" && cd .. && ! $didfolderexist && rm -r "$foldername" ;;
esac
else
echo "'$1' is not a valid file"
fi
}
# who is using the laptop's iSight camera?
function camerausedby() {
echo "Checking to see who is using the iSight camera… 📷"
usedby=$(lsof | grep -w "AppleCamera\|USBVDC\|iSight" | awk '{printf $2"\n"}' | xargs ps)
echo -e "Recent camera uses:\n$usedby"
}
# animated gifs from any video
# from alex sexton gist.github.com/SlexAxton/4989674
function gifify() {
if [[ -n "$1" ]]; then
if [[ $2 == '--good' ]]; then
ffmpeg -i $1 -r 10 -vcodec png out-static-%05d.png
time convert -verbose +dither -layers Optimize -resize 900x900\> out-static*.png GIF:- | gifsicle --colors 128 --delay=5 --loop --optimize=3 --multifile - > $1.gif
rm out-static*.png
else
ffmpeg -i $1 -s 600x400 -pix_fmt rgb24 -r 10 -f gif - | gifsicle --optimize=3 --delay=3 > $1.gif
fi
else
echo "proper usage: gifify <input_movie.mov>. You DO need to include extension."
fi
}
# turn that video into webm.
# brew reinstall ffmpeg --with-libvpx
function webmify(){
ffmpeg -i $1 -vcodec libvpx -acodec libvorbis -isync -copyts -aq 80 -threads 3 -qmax 30 -y $2 $1.webm
}
# direct it all to /dev/null
function nullify() {
"$@" >/dev/null 2>&1
}
# `shellswitch [bash |zsh]`
# Must be in /etc/shells
function shellswitch () {
chsh -s $(brew --prefix)/bin/$1
}
# visual studio code.
function code () { VSCODE_CWD="$PWD" open -n -b "com.microsoft.VSCode" --args $*; }
alias c="code"
# Make Tab autocomplete regardless of filename case
set completion-ignore-case on
# List all matches in case multiple possible completions are possible
set show-all-if-ambiguous on
# Immediately add a trailing slash when autocompleting symlinks to directories
set mark-symlinked-directories on
# Use the text that has already been typed as the prefix for searching through
# commands (basically more intelligent Up/Down behavior)
"\e[B": history-search-forward
"\e[A": history-search-backward
# ctrl left, ctrl right for moving on the readline by word
"\e[1;5C": forward-word
"\e[1;5D": backward-word
# Do not autocomplete hidden files unless the pattern explicitly begins with a dot
set match-hidden-files off
# Show all autocomplete results at once
set page-completions off
# If there are more than 200 possible completions for a word, ask to show them all
set completion-query-items 200
# Show extra file information when completing, like `ls -F` does
set visible-stats on
# Be more intelligent when autocompleting by also looking at the text after
# the cursor. For example, when the current line is "cd ~/src/mozil", and
# the cursor is on the "z", pressing Tab will not autocomplete it to "cd
# ~/src/mozillail", but to "cd ~/src/mozilla". (This is supported by the
# Readline used by Bash 4.)
set skip-completed-text on
# Allow UTF-8 input and output, instead of showing stuff like $'\0123\0456'
set input-meta on
set output-meta on
set convert-meta off
# Use Alt/Meta + Delete to delete the preceding word
"\e[3;3~": kill-word
- Create a file
.ssh/environment
:
SSH_AUTH_SOCK=/var/folders/vs/yx7cdk6x1x11gg17vx16wb2r0000gp/T//ssh-mjP5uLqbKiHY/agent.858; export SSH_AUTH_SOCK;
SSH_AGENT_PID=861; export SSH_AGENT_PID;
- Create a file
.ssh/auto-register
:
SSH_ENV=$HOME/.ssh/environment
# start the ssh-agent
function start_agent {
echo "Initializing new SSH agent..."
# spawn ssh-agent
/usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
echo succeeded
chmod 600 "${SSH_ENV}"
. "${SSH_ENV}" > /dev/null
/usr/bin/ssh-add
}
if [ -f "${SSH_ENV}" ]; then
. "${SSH_ENV}" > /dev/null
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
start_agent;
}
else
start_agent;
fi
ssh-add ~/.ssh/github_rsa 2> /dev/null
- In your
.zshrc
or .bashrc
:
source ~/.ssh/auto-register