# Fish 2.0 config # Enviroment setup clear set -x NODE_PATH /usr/local/lib/node_modules set -x PATH /usr/local/bin /usr/bin /bin /usr/local/sbin /usr/sbin /sbin /usr/local/share/npm/bin $NODE_PATH set -e fish_greeting alias @ "printf '%s'" alias @@ "xargs printf '%s'" alias @% "xargs printf" set _black (set_color black) set _black_bkg (set_color --background black) set _green (set_color green) set _brown (set_color brown) set _yellow (set_color yellow) set _blue (set_color blue) set _magenta (set_color magenta) set _purple (set_color purple) set _red (set_color red) set _cyan (set_color cyan) set _white (set_color white) set _normal (set_color normal) set _normal_bkg (set_color --background normal) set _bold (set_color --bold) set _underline (set_color --underline) # Directories set DESKTOP $HOME/Desktop set DROPBOX $HOME/Dropbox set DOWNLOADS $HOME/Downloads # Git alias gs "git status --short --branch" alias gd "git diff" alias glg "git log --stat --max-count=1" alias glgg "git log --graph --max-count=20" alias gl "git pull --rebase" alias glup "git pull upstream master --rebase" alias gp "git push" alias gpf "git push --force" alias ga "git add" alias gc "git commit --signoff --message" alias gcm "git commit --signoff --amend --no-edit" alias gcmm "git commit --signoff --amend --message" alias gs "git stash save --include-untracked" alias gsl "git stash list" alias gsi "git stash show --patch" alias gsp "git stash pop" alias gsa "git stash apply" alias gsd "git stash clear" # Remove untracked files from the working tree. alias gpur "git clean --force" # Reset to commit, leaving staged files and working tree intact. alias gr "git reset --soft" # Unstage all files from the index. alias gri "git reset --mixed" # Unstage all files from the index and reset uncommitted changes. alias gra "git reset --hard; git status --short" # Unstage all files, reset uncommitted changes and purge untracked files. alias grap "git reset --hard; git clean --force; git status --short" # Unstage all files, reset uncommitted changes, purge untracked files and checkout to master. alias grapp "git reset --hard; git clean --force; git checkout master; git status --short" alias gb "git branch" alias gba "git branch --all" alias gco "git checkout" alias gcom "git checkout master" alias gnew "git checkout -b" alias gm "git merge" alias grb "git rebase --interactive" alias grc "git rebase --continue" alias grab "git rebase --abort" function gbd --description "Deletes a branch locally and at origin" git branch --delete --force $argv[1] git push origin --delete $argv[1] end function gmerge --description "Merge a pull request" set branch "TEMP_MERGE_BRANCH" set url $argv[1] # TODO end # Mercurial alias hgs "hg status" alias hgsq "hg status -m -a -r -d" alias hgd "hg diff" alias hgg "hg log --rev (hg parent --template \"{node}\") --stat" alias hggg "hg log --graph --limit 20" alias hgu "hg update" alias hgl "hg pull --update" alias hgp "hg push" alias hgpf "hg push --force" alias hga "hg add" alias hgar "hg addremove" alias hgc "hg commit" alias hgcm "hg qimport --rev tip; hg qrefresh --edit; hg qfinish tip" # Remove untracked files from the working tree. alias hgpur "hg purge" # Reset uncommitted changes. alias hgra "hg revert --all" # Reset uncommitted changes and purge untracked files. alias hgrap "hg revert --all; hg purge" # Reset uncommitted changes, purge untracked files and pop all the queue. alias hgrapp "hg revert --all; hg purge; hg qpop --all" alias hgb "hg branch" alias hgba "hg branches" alias hgco "hg checkout" alias hgm "hg merge" alias hgrb "hg rebase" # Mercurial queues alias qnew "hg qnew --force" alias qimp "hg qimport" alias qfol "hg qfold" alias qfin "hg qfinish --applied" alias qrm "hg qremove" alias qrn "hg qrename" alias qref "hg diff; hg qref" alias qrefm "hg qref --message" alias qrefe "hg qref --edit" alias qrefu "hg qref --user" alias qpu "hg qpush" alias qpm "hg qpush --move" alias qpo "hg phase --force --draft qbase:tip; hg qpop" alias qpa "hg phase --force --draft qbase:tip; hg qpop --all" alias qgo "hg qgoto" alias qcref "hg qcrefresh" alias qdiff "hg qdiff" alias qser "hg qseries --summary --verbose" alias qa "hg qa --summary --verbose" alias qu "hg qu --summary --verbose" function qexp --description "Export the current qtip as a patch on the desktop" hgg set qtip (hg qa | tail -1) if [ $qtip ] set file $DESKTOP/$qtip hg export qtip > $file ls -lah $file | awk '{ print $5 }' end end function hgqpl --description "Pop all the queue, pull, update and restore queue" if [ (: hgsq) ] hgs return end set qtip (hg qa | tail -1) if [ $qtip ] qpa end hgl hg pushlogsync hggg if [ $qtip ] qpu $qtip end end function hgback --description "Perform a mercurial backout without a merge" if [ (count $argv) = 0 ] set tip (hg tip --template "{rev}") hgback $tip return end if [ (count $argv) = 1 ] set cset $argv[1] set parent (hg parent --rev $cset --template "{rev}") hgback $cset $parent return end set newest $argv[1] set oldest $argv[2] set file "backout-$newest.patch" hgd --rev $newest:$oldest > $file qimp --force --push $file set node (hg log --rev $newest --template "{node|short}") qrefm "Backed out changeset $node" hgg rm $file end # Utility functions function :ip --description "What is my IP?" dig +short myip.opendns.com @resolver1.opendns.com end function ftp --description "Start a ftp server" sudo -s launchctl load -w /System/Library/LaunchDaemons/ftp.plist end function ftpstop --description "Stop a ftp server" sudo -s launchctl unload -w /System/Library/LaunchDaemons/ftp.plist end function sser --description "Starts a SimpleHTTPServer in the current directory" if [ (count $argv) = 0 ] sser 8080 return end python -m SimpleHTTPServer $argv[1] end function sser_utf8 --description "Starts a SimpleHTTPServer in the current directory serving utf-8 encoded files" python -c "import SimpleHTTPServer; m = SimpleHTTPServer.SimpleHTTPRequestHandler.extensions_map; m[''] = 'text/plain'; m.update(dict([(k, v + ';charset=UTF-8') for k, v in m.items()])); SimpleHTTPServer.test();" end function pman --description "Open a man page in Preview" man -t $argv[1] | open -f -a Preview end function sman --description "Open a man page in Sublime Text" man $argv[1] | col -b | subl end function sman --description "Open a man page in Atom" man $argv[1] | col -b | atom end function :mem --description "Quickly check what is eating all your memory" top -o vsize end function :cpu --description "Quickly check what is eating all your cpu" top -o cpu end function : --description "Checks if a statement executes cleanly, and prints the result if so" @ (eval $argv ^/dev/null) end # Firefox dev set MOZCONFIG $HOME/.mozconfig-firefox set CCACHE_DIR $HOME/.ccache set HG_FX ssh://hg.mozilla.org/integration/fx-team set HG_MI ssh://hg.mozilla.org/integration/mozilla-inbound set HG_MC ssh://hg.mozilla.org/mozilla-central set HG_MA ssh://hg.mozilla.org/releases/mozilla-aurora set HG_MB ssh://hg.mozilla.org/releases/mozilla-beta set HG_MR ssh://hg.mozilla.org/releases/mozilla-release set HG_TRY ssh://hg.mozilla.org/try set MOZDEV ~/Work/Mozilla set FXTEAM ~/Work/Mozilla/fx-team set GUM ~/Work/Mozilla/gum set M_INBOUND ~/Work/Mozilla/mozilla-inbound set M_CENTRAL ~/Work/Mozilla/mozilla-central set M_AURORA ~/Work/Mozilla/mozilla-aurora set M_BETA ~/Work/Mozilla/mozilla-beta set M_RELEASE ~/Work/Mozilla/mozilla-release set TOFINO ~/Work/Mozilla/tofino alias mozdev "cd $MOZDEV" alias fxteam "cd $FXTEAM" alias m-gum "cd $GUM" alias m-inbound "cd $M_INBOUND" alias m-central "cd $M_CENTRAL" alias m-aurora "cd $M_AURORA" alias m-beta "cd $M_BETA" alias m-release "cd $M_RELEASE" alias tofino "cd $TOFINO" function fxbuild --description "Build firefox from source" set -gx MOZCONFIG $MOZCONFIG set -gx CCACHE_DIR $CCACHE_DIR if [ (uname) = "Darwin" ] say -v V "Build started." end ./mach build $argv if [ (uname) = "Darwin" ] say -v V "Build finished." end end function fxrun --description "Open firefox from the obj/dist directory using a specified profile" if [ (count $argv) = 0 ] fxrun development return end set -gx MOZ_DISABLE_SAFE_MODE_KEY 1 set -gx MOZ_QUIET 1 ./mach run -P $argv end function fxtry --description "Pushes to try" if [ (: hgsq) ] hgs return end if [ (count $argv) = 0 ] return end set build "-b " set platf "-p " set tests "-u " set talos "-t " set rebuild "" if contains "debug" $argv set build $build"d" else if contains "opt" $argv set build $build"o" else set build $build"do" end if contains "all-platforms" $argv set platf $platf"all" else if contains "linux" $argv set platf $platf"linux,linux64,linux64-asan," end if contains "mac" $argv set platf $platf"macosx64," end if contains "osx" $argv set platf $platf"macosx64," end if contains "win" $argv set platf $platf"win32,win64," end end if contains "all-tests" $argv set tests $tests"all"; else if contains "none" $argv set tests $tests"none"; else if contains "m" $argv set tests $tests"mochitests,"; end if contains "bc" $argv set tests $tests"mochitest-bc,"; end if contains "dt" $argv set tests $tests"mochitest-dt,mochitest-e10s-devtools-chrome,"; end if contains "oth" $argv set tests $tests"mochitest-o,"; end if contains "xpc" $argv set tests $tests"xpcshell,"; end end set tests (@ $tests | sed '$s/.$//') if contains "talos" $argv set talos $talos"all" else set talos $talos"none" end if contains "rebuild" $argv set rebuild "--rebuild 20"; end qnew _ -m "try: $build $platf $tests $talos $rebuild" qser if [ (uname) = "Darwin" ] say "Pushing to try." end hgpf $HG_TRY if [ (uname) = "Darwin" ] say "Done" end qpo qrm _ end # Shell prompt set -g RESPONSIVE_PROMPT_COLUMNS 110 function __prompt_set_self_addr_wdir if not set -q __self set -g __self (whoami) set -g __addr (ifconfig | grep "inet " | grep -v "127.0.0.1" | head -n 1 | tr -d "addr:" | awk '{print $2}') set -g __self_len (@ $__self | wc -m) set -g __addr_len (@ $__addr | wc -m) end if [ $COLUMNS -gt $RESPONSIVE_PROMPT_COLUMNS ] set -g __self_addr_wdir $_blue $__self $_normal " at " $_blue $__addr $_normal " in " $_bold $_green (prompt_pwd) $_normal else set -g __self_addr_wdir $_bold $_green (prompt_pwd) $_normal end end function __prompt_set_hg_git if not set -q __has_hg set -g __has_hg (which hg) end if not set -q __has_git set -g __has_git (which git) end if [ $__has_hg ] set -g __is_hg_wdir (: hg root) if [ $__is_hg_wdir ] set hg_info (hg parent --template "{branch},{node},{tags}") set hg_qseries (hg qseries --verbose) set hg_branch (@ $hg_info | cut -d "," -f 1) set hg_tip_cset (@ $hg_info | cut -d "," -f 2 | cut -c 1-12) set hg_tip_tags (@ $hg_info | cut -d "," -f 3) set -g __hg_tip_patch (@ $hg_tip_tags | sed 's/qbase//' | sed 's/qtip//' | sed 's/tip//' | @% "%s ") set hg_qa (@ $hg_qseries | grep -o " A " | wc -l | tr -d " ") set hg_mq (@ $hg_qseries | grep -o " [AU] " | wc -l | tr -d " ") if [ $COLUMNS -gt $RESPONSIVE_PROMPT_COLUMNS ] set -g __hg_repo_info $_normal "[ " $_red $_black_bkg "hg" $_normal_bkg " on " $_brown $hg_branch " " $_green $hg_tip_cset " " $_cyan $hg_qa/$hg_mq $_normal " ]" else set -g __hg_repo_info $_normal "[ " $_red $_black_bkg "hg" $_normal_bkg " " $_cyan $hg_qa/$hg_mq $_normal " ]" end end end if [ $__has_git ] set -g __is_git_wdir (: git rev-parse --show-toplevel) if [ $__is_git_wdir ] set -g __git_branch (git symbolic-ref --quiet HEAD | cut -d "/" -f 3) set -g __git_head (git rev-parse --short HEAD) if not [ $__git_branch ] set -g __git_is_detached "(detached)" else set -e __git_is_detached end if [ $COLUMNS -gt $RESPONSIVE_PROMPT_COLUMNS ] set -g __git_repo_info $_normal "[ " $_red $_black_bkg "git" $_normal_bkg " on " $_brown $__git_branch " " $_green $__git_head $_normal " ]" else set -g __git_repo_info $_normal "[ " $_red $_black_bkg "git" $_normal_bkg " " $_cyan $__git_branch $_normal " ]" end end end end function fish_prompt __prompt_set_self_addr_wdir __prompt_set_hg_git if [ $__is_hg_wdir ] if [ (: hgsq) ] @ "[ " $_cyan $__hg_tip_patch $_red $_bold "✘" $_normal " ] " $_blue $_bold "λ " $_normal else @ "[ " $_cyan $__hg_tip_patch $_green $_bold "✔" $_normal " ] " $_blue $_bold "λ " $_normal end else if [ $__is_git_wdir ] set git_status (git status --porcelain) if [ $__git_is_detached ] set untrk "[ " $_cyan $__git_head $_yellow " detached " $_yellow $_bold "?" $_normal " ] " $_blue $_bold "λ " $_normal set dirty "[ " $_cyan $__git_head $_yellow " detached " $_red $_bold "✘" $_normal " ] " $_blue $_bold "λ " $_normal set clean "[ " $_cyan $__git_head $_yellow " detached " $_green $_bold "✔" $_normal " ] " $_blue $_bold "λ " $_normal else set untrk "[ " $_cyan $__git_branch " " $_yellow $_bold "?" $_normal " ] " $_blue $_bold "λ " $_normal set dirty "[ " $_cyan $__git_branch " " $_red $_bold "✘" $_normal " ] " $_blue $_bold "λ " $_normal set clean "[ " $_cyan $__git_branch " " $_green $_bold "✔" $_normal " ] " $_blue $_bold "λ " $_normal end if [ (@ $git_status | grep -c "?? ") -gt 0 ] @ $untrk else if [ (@ $git_status | grep -c " M ") -gt 0 ] @ $dirty else if [ (@ $git_status | grep -c "MM ") -gt 0 ] @ $dirty else if [ (@ $git_status | grep -c "A ") -gt 0 ] @ $dirty else if [ (@ $git_status | grep -c "AM") -gt 0 ] @ $dirty else if [ (@ $git_status | grep -c "D ") -gt 0 ] @ $dirty else @ $clean end else @ $_blue "λ " $_normal end end function fish_right_prompt @ $__self_addr_wdir if [ $__is_hg_wdir ] @ " " $__hg_repo_info end if [ $__is_git_wdir ] @ " " $__git_repo_info end end