The letter A styled as Alchemists logo. lchemists

Putin's War on Ukraine - Watch President Zelenskyy's speech and help Ukraine fight against the senseless cruelty of a dictator!

Published July 16, 2011 Updated March 11, 2023
Dotfiles Icon



These dotfiles are a collection shell scripts for applying default settings to UNIX-based operating systems. They include useful shortcuts, performance augmentation, and advanced practices that — even if you don’t apply to your own dotfiles — should be educational for improving your own practices.

By default, these are set to my preferences (namely for macOS) but you can change them to your liking by editing any of the .tt template files in the home_files directory. Read on to learn more.






To install, run:

git clone
cd dotfiles
git checkout 48.3.0


When upgrading to a new version, run the following:

  1. Run: bin/run l. Links new files. If not using linked files, then run bin/run d and bin/run i instead.

  2. Run: bin/run c. Displays file differences, if any. Usually, this will be excluded files.

  3. Run: exec $SHELL. Updates current shell with the above changes.


Edit any of the .tt (template) and/or .command (command) files in the home_files directory as you see fit. Then open a terminal window and execute the following command to install:

cd dotfiles

Executing the bin/run script will present the following options:

s: Show managed dotfiles.
i: Install dotfiles (existing files are skipped).
l: Link dotfiles to this project (interactive per file, excludes: and .gitconfig).
c: Check for differences between $HOME files and this project's files.
d: Delete dotfiles (interactive per file, excludes: and .gitconfig).
q: Quit/Exit.

The options prompt can be skipped by passing the desired option directly to the bin/run script. For example, executing bin/run s will show all managed dotfiles by this project.

After install, the following files will require manual updating:

  • .bash/ Add secret/machine-specific environment settings (if any).

  • .gitconfig: Replace all <redacted> values for name, email, and signingKey within the [user] section with your own credentials.

The reason the above two files are not managed by this project — especially via symbolic links — is because senstive data is usually stored in these files and you don’t want this information accidentally checked into a source code repository or shared via other means.


ASCII Doctor

ad = "asciidoctor"


cin = "asciinema"
cina = "asciinema rec --append"
cinc = "asciinema cat"
cine = "asciinema_plus -e"
cinp = "asciinema play"
cinu = "asciinema upload"


bashe = '$EDITOR $HOME/.config/bash/'
bashs = 'exec $SHELL'


ba = "bundle add"
bb = "bundle binstubs"
bce = '$EDITOR $HOME/.config/bundler/configuration.yml'
bch = "rm -f Gemfile.lock; bundle check"
bd = "bundle doctor"
be = "bundle exec"
bi = "bundle install"
blo = 'bundle list --paths | fzf | xargs $EDITOR'
bo = "bundle outdated --only-explicit"
br = "bundle remove"
bu = "bundle update"


cr = "crystal"
crb = "crystal build"
crd = "crystal docs"
crdo = "open docs/index.html"
crr = "crystal run"
crs = "crystal spec"


denva = "direnv allow"
denvr = "direnv reload"
denvs = "direnv status"


dr = "docker"
drb = "docker build"
drc = "docker-compose"
drd = "docker system prune --force && docker buildx prune --force"
dri = "docker images"
drp = "docker ps --all"
drt = "docker tag"


dutia = 'duti $HOME/.config/duti/configuration.duti'


elmc = "elm repl"
elmg = "elm init"
elmi = "elm install"
elmp = "elm publish"
elms = "elm reactor"
elmt = "elm-test"


x1 = "exa --oneline --all --group-directories-first"
x = "exa --all --all --long --header --group --group-directories-first --time-style long-iso --git"
xt = "exa --all --group-directories-first --ignore-glob '*.git' --git-ignore --tree"

Fast Node Manager

js = "fnm"
jsd = "fnm default"
jse = "fnm env"
jsi = "fnm install"
jsl = "fnm list"
jss = "fnm use"
jsu = "fnm uninstall"


rb = "frum"
rbd = "frum global"
rbl = "frum versions"
rbs = "frum local"
rbu = "frum uninstall"

Fuzzy Finder

ff = "_fzf_preview_and_select | xargs -0 -o \$EDITOR"


gsb = "gemsmith --build"
gsc = "gemsmith --config edit"
gse = "gemsmith --edit"
gsi = "gemsmith --install"
gsp = "gemsmith --publish"
gsq = "rake code_quality"
gsv = "gemsmith --view"


... = "cd ../.."
.. = "cd .."
c = "clear"
cat = "bat --theme DarkNeon"
cdb = "cd -"
du = "ncdu -e --color dark"
h = "history"
l1 = "ls -A1 | _copy_and_print '\n'"
l = "ls -alhT"
o = "open"
p = 'pwd | tr -d "\r\n" | _copy_and_print'
pss = "pgrep -i -l -f"
rmde = "find . -type d -empty -not -path '*.git*' -delete"


gall = "git add --all ."
gamend = "git commit --amend"
gamenda = "git commit --amend --all --no-edit"
gamendh = "git commit --amend --no-edit"
gap = "git ls-files --modified | _fzf_preview_and_select | xargs -0 -o -t git add --patch"
gashc = "git stash clear"
gatch = "git commit --patch"
gau = "git add --update"
gb = "git switch"
gbb = "git switch -"
gbe = "git branch --edit-description"
gbi = "git bisect"
gbib = "git bisect bad"
gbig = "git bisect good"
gbih = "git bisect help"
gbil = "git bisect log"
gbir = "git bisect reset"
gbire = "git bisect replay"
gbis = "git bisect start"
gbisk = "git bisect skip"
gbiv = 'git bisect visualize --reverse --pretty=format:"$(_git_log_line_format)"'
gbm = 'git switch $(_git_branch_default)'
gbn = "_git_branch_name | _copy_and_print"
gbt = "git show-branch --topics"
gca = "git commit --all"
gcam = "git commit --all --message"
gcd = "git config --list --show-origin --show-scope"
gce = 'cat .git/COMMIT_EDITMSG | rg --invert-match "^\#.*" | pbcopy'
gcge = "git config --global --edit"
gcl = "git clone"
gcle = "git config --local --edit"
gcm = "git commit --message"
gco = "git commit"
gcp = "git cherry-pick"
gcpa = "git cherry-pick --abort"
gcps = "git cherry-pick --skip"
gcs = "git commit --squash"
gd = "git diff"
gdc = "git diff --cached"
gdm = 'git diff origin/$(_git_branch_default)'
gdo = 'git diff --name-only | uniq | xargs $EDITOR'
gdt = "git difftool"
gdtc = "git difftool --cached"
gdtm = 'git difftool origin/$(_git_branch_default)'
gdw = "git diff --color-words"
gel = "git rm"
gelc = "git rm --cached"
ges = "git diff --name-only --cached | _fzf_preview_and_select | xargs -0 -o -t git reset"
gf = "git fetch"
gg = "git grep"
gget = "git config --get"
gi = 'git init && git config --global --add maintenance.repo $PWD'
gl = 'git log --graph --pretty=format:"$(_git_log_line_format)"'
glame = "git blame -M -C -C -C"
glean = "git clean -d --force"
glf = 'git fetch && git log --reverse --no-merges --pretty=format:"$(_git_log_line_format)" ..@{upstream}'
glg = 'git log --pretty=format:"$(_git_log_line_format)" --grep'
glh = "_git_commit_last | _copy_and_print"
gls = 'git log --pretty=format:"$(_git_log_line_format)" -S'
glt = 'git for-each-ref --sort=taggerdate --color --format = "%(color:yellow)%(refname:short)%(color:reset)|%(taggerdate:short)|%(color:blue)%(color:bold)%(*authorname)%(color:reset)|%(subject)" refs/tags | column -s"|" -t'
gp = "git push"
gpf = "git push --force-with-lease"
gpn = "git push --no-verify"
gpu = "git pull"
gpuo = "git pull origin"
gpuom = 'git pull origin $(_git_branch_default)'
gpuum = 'git pull upstream $(_git_branch_default)'
gr = "git ls-files --modified | _fzf_preview_and_select | xargs -0 -o -t git restore"
grba = "git rebase --abort"
grbc = "git rebase --continue"
grbd = "git rebase --show-current-patch"
grbo = "git rebase --onto"
grbs = "git rebase --skip"
grbt = "git rebase --edit-todo"
grev = "git revert --no-commit"
grl = "git reflog --relative-date"
grom = 'git fetch --all && git reset --hard origin/$(_git_branch_default)' # Reset local branch to origin/main branch. UNRECOVERABLE!
grr = "git rerere"
gset = "git config --add"
gst = "git status --short --branch"
gtag = "git tag"
gtags = "git push --tags"
gtagv = "git tag --verify"
guthors = "git shortlog --numbered --summary --group=author --group=trailer:Co-Authored-By"
gwl = "git worktree list"
gwp = "git worktree prune"


hsb = "hanamismith --build"
hse = "hanamismith --config edit"
hsh = "hanamismith --help"


hb = "brew"
hbd = "brew doctor"
hbi = "brew install"
hbin = "brew info"
hbl = "brew list --versions | fzf"
hblc = "brew list --casks --versions | fzf"
hblf = "brew list --formulae --versions | fzf"
hbp = "brew pin"
hbpu = "brew unpin"
hbs = "brew search"
hbsu = "brew update && brew upgrade && brew cleanup"
hbu = "brew uninstall"
hbug = "brew update && brew upgrade"

JavaScript Core

jsc = "/System/Library/Frameworks/JavaScriptCore.framework/Versions/Current/Helpers/jsc"


jlr = "jless --mode line"

Marked 2

mo = "open -a Marked\ 2"


ms = "milestoner"
mss = 'milestoner --status'
mse = "milestoner --config --edit"
msp = "milestoner --publish"


dnsf = "sudo dscacheutil -flushcache && sudo killall -HUP mDNSResponder && printf 'DNS cache cleared.\n'"
dnsi = "scutil --dns"
dnss = "sudo dscacheutil -statistics"
ipa = 'curl --silent | rg --only-matching "[0-9\.]+" | _copy_and_print'
key = "open /Applications/Utilities/Keychain\"
ping = "gping"
sshe = '$EDITOR $HOME/.ssh/config'
top = "htop"

Path Finder

pfo = 'open -a "Path" "$PWD"'


redc = "redis-cli"
reds = 'redis-server $HOMEBREW_PREFIX/etc/redis.conf &'


rgf = "rg --files --glob"


rsf = "NO_COVERAGE=true rspec spec --only-failures"
rsn = "NO_COVERAGE=true rspec spec --next-failure"
rso = "NO_COVERAGE=true rspec spec --dry-run --format doc > tmp/rspec-overview.txt && e tmp/rspec-overview.txt"
rss = "rspec"
rst = "NO_COVERAGE=true rspec spec --tag"


cop = "rubocop --parallel --display-cop-names --display-style-guide"
copc = "rubocop --auto-gen-config"
copf = "rubocop --autocorrect"
copfo = "rubocop --autocorrect --only"
copo = "rubocop --display-cop-names --only"
cops = "rubocop --show-cops"
copu = "rubocop --autocorrect-all"


rbbe = '$EDITOR $HOME/Engineering/Misc/benchmark'
rbbr = '$HOME/Engineering/Misc/benchmark'
rbse = '$EDITOR $HOME/Engineering/Misc/snippet'
rbsr = '$HOME/Engineering/Misc/snippet'
rbsw = 'viddy $HOME/Engineering/Misc/snippet'

Ruby on Rails

railsb = "rails console --sandbox"
railse = "EDITOR = 'sublime --wait' rails credentials:edit"


rbct = "open tmp/rubycritic/overview.html"


gemc = "gem cleanup"
gemcli = "rg 'spec\.executables' --no-messages --max-depth=2 --files-with-matches gemspec . | xargs basename | cut -d. -f1 | sort | _copy_and_print '\n'"
gemcr = '$EDITOR $HOME/.gem/credentials'
geme = "gem environment"
gemi = "gem install"
geml = "gem list"
gemp = "gem pristine"
gemu = "gem uninstall"
gemuc = "gem update --system && gem update && gem cleanup"


rbb = "rubysmith --build"
rbe = "rubysmith --config edit"
rbh = "rubysmith --help"


cov = "open coverage/index.html"

Sublime Text

e = "sublime"


bzc = "tar --use-compress-program=pigz --create --preserve-permissions --bzip2 --verbose --file"
bzx = "tar --extract --bzip2 --verbose --file"


tf = "terraform"
tfa = "noti --title 'Terraform Apply' terraform apply"
tfc = "terraform console"
tff = "terraform fmt"
tfg = "terraform graph | dot -Tsvg > tmp/graph.svg && open -a '' tmp/graph.svg"
tfi = "terraform init"
tfo = "terraform output"
tfp = "noti --title 'Terraform Plan' terraform plan"
tft = "terraform taint"
tfu = "terraform untaint"
tfup = "terraform init -upgrade"
tfv = "terraform validate"


tsa = "tmux attach-session -t"
tsk = "tmux kill-session -t"
tsl = "tmux list-sessions"
tsr = "tmux rename-session -t"


wp = "watch --interval 1 --color --beep --exec"


ASCII Doctor

ado = ASCII Doctor Open - Transforms ASCII Doc into HTML and opens in default browser.


cinr = asciinema Record - Create new asciinema recording.


bca = Bundler Clean (all) - Clean projects of gem artifacts.
bcg = Bundler Config Gem - Configure Bundler to use local gem for development purposes.
bj = Bundler Jobs - Answer maximum Bundler job limit for current machine or automatically set it.
bl = Bundle List - List gem dependencies for project and copy them to clipboard.
boa = Bundle Outdated (all) - Answer outdated gems for projects in current directory.
bua = Bundle Update (all) - Update gems for projects in current directory.

Code Quality

cqa = Code Quality (all) - Run code quality tasks for projects in current directory.
cqi = Code Quality Issues - List all source files affected by code quality issues.


curld = Curl Diagnostics - Curl with diagnostic information for request.
curli = Curl Inspect - Inspect remote file with default editor.


dots = Dotfiles - Learn about dotfile aliases, functions, etc.


elml = Elm Live - Watch for source code changes and recompile immediately.
elmm = Elm Make - Compile Elm source.


cype = Colorized Type - Identical to "type" system command but with Bat support.
eup = Environment Update - Update environment with latest software.
iso = ISO - Builds an ISO image from mounted volume.
kilp = Kill Process - Kill errant/undesired process.
t2s = Tab to Space - Convert file from tab to space indentation.


ga = Git Add - Interactively adds modified/untracked files.
gafe = Git Safe - Marks repository as safe for auto-loading project's `bin` path.
galla = Git Add (all) - Apply file changes (including new files) for projects in current directory.
gash = Git Stash - Creates stash of all changes.
gasha = Git Stash (all) - Answer stash count for projects in current directory.
gashd = Git Stash Drop - Drop stash or prompt for stash to drop.
gashl = Git Stash List - List stashes.
gashp = Git Stash Pop - Pop stash or prompt for stash to pop.
gashs = Git Stash Show - Show stash or prompt for stash to show.
gasht = Git Stash (stage) - Creates stash of staged work.
gbc = Git Branch Create - Create and switch to branch.
gbca = Git Branch Create (all) - Create and switch to branch for projects in current directory.
gbd = Git Branch Delete - Interactively delete local and/or remote branch.
gbdl = Git Branch Delete (local) - Delete local branch.
gbdm = Git Branch Delete (merged) - Delete remote and local merged branches.
gbdr = Git Branch Delete (remote) - Delete remote branch.
gbf = Git Branch Facsimile - Duplicate current branch with new name and switch to it.
gbl = Git Branch List - List local and remote branch details.
gbla = Git Branch List (all) - List current branch for projects in current directory.
gblo = Git Branch List (owner) - List branches owned by current author or supplied author.
gbna = Git Branch Number (all) - Answer number of branches for projects in current directory.
gbr = Git Branch Rename - Rename current branch.
gbs = Git Branch Switch - Switch between branches.
gbsa = Git Branch Switch (all) - Switch to given branch for projects in current directory.
gcaa = Git Commit (all) - Commit changes (unstaged and staged) for projects in current directory.
gcap = Git Commit and Push (all) - Commit and push changes for projects in current directory.
gcb = Git Commit Breakpoint - Create a breakpoint (empty) commit to denote related commits in a feature branch.
gcf = Git Commit Fixup - Create fixup commit with optional amend or reword support.
gcff = Git Commit Fix (file) - Create commit fix for file (ignores previous fixups).
gcfi = Git Commit Fix (interactive) - Select which commit to fix within current feature branch.
gdf = Git Diff Files - List all added/changed files on current branch.
gday = Git Day - Answer summarized list of current day activity for projects in current directory.
gesh = Git Reset Hard - Reset to HEAD, destroying all untracked, staged, and unstaged changes. UNRECOVERABLE!
gesha = Git Reset Hard (all) - Destroy all untracked, staged, and unstaged changes for all projects in current directory. UNRECOVERABLE!
gess = Git Reset Soft - Resets previous commit (default), resets back to number of commits, or resets to specific commit.
ggeta = Git Get Config Value (all) - Answer key value for projects in current directory.
ghow = Git Show - Show commit details with optional diff support.
ghurn = Git Churn - Answer commit churn for project files (sorted highest to lowest).
gia = Git Init (all) - Initialize/re-initialize repositories in current directory.
gile = Git File - Show file details for a specific commit (with optional diff support).
gince = Git Since - Answer summarized list of activity since date/time for projects in current directory.
ginfo = Git Info - Print repository overview information.
gistory = Git File History - View file commit history (with optional diff support).
glameh = Git Blame History - View file commit history for a specific file and/or lines (with optional diff support).
gld = Git Log Details - List default or feature branch commit details.
gleana = Git Clean (all) - Clean uncommitted files from all projects in current directory.
glear = Git Clear - Clear repository for packaging/shipping purposes.
gli = Git Log (interactive) - List default or feature branch commits with commit show and/or diff support.
gma = Git Merge (all) - Merges, deletes, and pushes feature branch.
gmonth = Git Month - Answer summarized list of current month activity for projects in current directory.
gmpa = Git Amend Push (all) - Amend all changes and force push with lease for projects in current directory.
gount = Git Commit Count - Answer total number of commits for current project.
gpa = Git Push (all) - Push changes for projects in current directory.
gpua = Git Pull (all) - Pull new changes from remote branch for projects in current directory.
gra = Git Remote Add - Add and track a remote repository.
grbi = Git Rebase (interactive) - Rebase commits, interactively.
grbq = Git Rebase (quick) - Rebase commits, quickly. Identical to `grbi` function but skips editor.
groot = Git Root - Change to repository root directory regardless of current depth.
gseta = Git Set Config Value (all) - Set key value for projects in current directory.
gsta = Git Status (all) - Answer status of projects with uncommited/unpushed changes.
gstats = Git Statistics - Answer statistics for current project.
gstatsa = Git Statistics (all) - Answer statistics for all projects in current directory.
gsup = Git Standup - Answer summarized list of activity since yesterday for projects in current directory.
gtagd = Git Tag Delete - Delete local and remote tag (if found).
gtagr = Git Tag Rebuild - Rebuild a previous tag. WARNING: Use with caution, especially if previously published.
gtail = Git Tail - Answer commit history since last tag for current project (copies results to clipboard).
gtaila = Git Tail (all) - Answer commit history count since last tag for projects in current directory.
gucca = Git Upstream Commit Count (all) - Answer upstream commit count since last pull for projects in current directory.
guke = Git Nuke - Permanently destroy and erase a file from history. UNRECOVERABLE!
gunseta = Git Unset (all) - Unset key value for projects in current directory.
gup = Git Update - Fetch commits, prune untracked references, review each commit (optional, with diff), and pull (optional).
guthorc = Git Author Contributions - Answers total lines added/removed by author for repo (with emphasis on deletion).
guthorsa = Git Authors (all) - Answer author commit activity per project (ranked highest to lowest).
gvac = Git Verify and Clean - Verify and clean objects for current project.
gvaca = Git Verify and Clean (all) - Verify and clean objects for projects in current directory.
gwa = Git Worktree Add - Add and switch to new worktree.
gwd = Git Worktree Delete - Deletes current Git worktree.
gweek = Git Week - Answer summarized list of current week activity for projects in current directory.
gync = Git Sync - Syncs up remote changes and deletes pruned/merged branches.


gh = GitHub - View GitHub details for current project.
ghpra = GitHub Pull Request (all) - Open pull requests for all projects in current directory (non-default branches only).


lessi = Less Interactive - Inspect file, interactively.

License Finder

licensea = License Finder (add) - Adds library to global list.
licensei = License Finder (include) - Include license in global list.


port = Port - List file activity on given port.


sigf = Minisign Sign File - Sign a file.
sigg = Minisign Generate - Generate private and public key pair.
sigv = Minisign Verify File - Verify signed file.


sslc = SSL Certificate Creation - Create SSL certificate.


omc = Overmind Connect - Connect to running process.
omr = Overmind Restart - Restart running process.
oms = Overmind Start - Start processes.


pgi = PostgreSQL Initialize - Initalize PostgreSQL database.
pgt = PostgreSQL Template - Edit PostgreSQL template.
pgsp = PostgreSQL Stop - Stop existing PostgreSQL process.
pgst = PostgreSQL Start - Start new PostgreSQL background process.
pguc = PostgreSQL User Create - Create PostgreSQL user.
pgud = PostgreSQL User Drop - Drop PostgreSQL user.


rakea = Rake (all) - Run default Rake tasks for projects in current directory.


rsall = RSpec (all) - Run RSpec for projects in current directory.
rsb = RSpec Bisect - Debug RSpec failure using bisect to automatically determine where failure is occuring.
rsd = RSpec Debug - Debug intermittent RSpec failure(s) by running spec(s) until failure is detected.
rsp = RSpec Profile - Runs RSpec specs with profiling enabled.


copa = Rubocop (all) - Run Rubocop for all projects in current directory.


rbi = Ruby Install - Install a specific version with safe defaults.
reb = Ruby Web Server - Serve web content from current directory via WEBrick.
rbw = Ruby Which - Locate path to current Ruby program.
rbua = Ruby Upgrade (all) - Upgrade Ruby projects in current directory to new Ruby version.
rbva = Ruby Version (all) - Show current Ruby version for all projects in current directory.

Ruby Gems

gemd = Gem Dependencies - Answers dependencies for a gem.
gemdep = Gem Dependency Search - Finds a gem defined within a Gemfile or a gemspec.

Ruby on Rails

railsn = Ruby on Rails New - Create new Rails application from selected option.


scc = Silicon Copy - Generates and copies code snippet image to clipboard.


cova = RSpec (all) - Run RSpec for projects in current directory.

Git Hooks

brakeman_check = Brakeman Check - Scan Rails project for security vulnerabilities.
bundler_gemfile_path = Bundler Gemfile Path - Detect gem path statements.
bundler_audit_check = Bundler Audit Check - Scans gem dependencies for security vulnerabilities.
capybara_save_and_open_page = Capybara Save And Open Page - Detect save_and_open_page statements.
comment_totals = Comment Totals - Print project comment totals.
ctags_rebuild = CTags Rebuild - Rebuild project .tags file.
dotenv_check = Dotenv Linter - Scan environment files for consistent style and security issues.
elm_debug = Elm Debug - Detect debug statements.
git_lint_check = Git Lint Check - Enforce consistent Git commits.
git_trailer_cleaner = Git Trailer Cleaner - Remove unused/empty Git commit body trailers.
java_script_debugger = JavaScript Debugger - Detect JavaScript debug statements.
java_script_console = JavaScript Console - Detect JavaScript console statements.
java_script_alert = JavaScript Alert - Detect JavaScript alert statements.
license_finder_check = License Finder Check - Scan project for valid licenses.
osv_check = Open Source Vulnerability (OSV) Check - Scan Ruby dependencies for vulnerabilities.
reek_branch_check = Reek Branch Check - Scan Ruby code -- feature branch only -- for poor style choices.
reek_stage_check = Reek Stage Check - Scan Ruby code -- staged files only -- for poor style choices.
rspec_dotfile = RSpec Dotfile - Detect RSpec dotfile.
rspec_focus = RSpec Focus - Detect RSpec focus.
rspec_order = RSpec Order - Detect RSpec ordered specs.
rubocop_branch_check = RuboCop Branch Check - Scan Ruby code -- feature branch only -- for poor style choices.
rubocop_stage_check = RuboCop Stage Check - Scan Ruby code -- staged files only -- for poor style choices.


CK.copy    # Copies data to OS X clipboard.
CK.locate  # Locates source code for given object and method.
CK.paste   # Pastes data from OS X clipboard.  # Searches for object method for given pattern.


To contribute, run:

git clone
cd dotfiles


Engineered by Brooke Kuhlmann.