Need help with dotfiles?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

131 Stars 19 Forks Other 1.7K Commits 0 Opened issues


Shell scripts for applying default settings to UNIX-based operating systems.

Services available


Need anything else?

Contributors list

No Data

:toc: macro :toclevels: 5 :figure-caption!:

= Dotfiles

[link=] image::[Circle CI Status]

Shell scripts for applying default settings to UNIX-based operating systems.

By default, these are set to my preferences (namely for macOS) but you can change them to your liking by editing any of the

template files in the
directory. Read on to learn more.


== Features

  • Configures the Bash (
    , and
    ) files.
  • Configures the (
    ) file.
  • Configures the link:http://ctags.sourceforge.netCTags file.
  • Configures the link:https://www.vim.orgVim file.
  • Configures the link:https://git-scm.comGit files.
  • Configures the link: Surfer file.
  • Configures the link:https://rubygems.orgRuby Gems file.
  • Configures the link:https://www.ruby-lang.orgRuby files.
  • Configures the link:http://pry.github.comPry file.
  • Configures the link: Debugger file.
  • Configures the link:https://rspec.infoRSpec file.
  • Configures the link: ERD file.
  • Configures the link: Print file.
  • Configures the link:https://www.postgresql.orgPostgreSQL file.
  • Configures the link: file.
  • Configures the link:https://www.npmjs.orgNPM file.
  • Configures link:[Sublime Text] as the default editor.
  • Adds link:[Bash Completion].
  • Adds link:[GPG] support.
  • Adds link:[direnv] support.
  • Adds link:[chruby] support.
  • Adds link:[Node.js] support.
  • Adds link:[Z] support.

== Screencasts

[link=] image::[Screencast,600,240,role=focal_point]

== Requirements

. link:[macOS]

== Setup

To install, run:


git clone cd dotfiles

git checkout 40.1.0

== Upgrade

When upgrading to a new version, run the following:

. Run:

bin/run l
. Links new files. If not using linked files, run
bin/run d
bin/run i
instead. . Run:
bin/run c
. Displays file differences, if any. Usually, this will be excluded files. . Run:
exec $SHELL
. Updates current shell with the above changes.

== Usage

Edit any of the

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


cd dotfiles


Executing the

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

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
    : Uncomment the name, email, and token lines within the
    sections to replace with your own details.

=== Aliases

==== General

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


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

==== Network

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

====[Fuzzy Finder]

.... ff = "fzf --preview 'bat --theme DarkNeon --color always {}' | xargs $EDITOR" ....


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


.... hb = "brew" hbi = "brew update && brew install" hbin = "brew info" hbu = "brew uninstall" hbl = "brew list" hbs = "brew search" hbsw = "brew switch" hbup = "brew update" hbug = "brew upgrade" hbp = "brew pin" hbpu = "brew unpin" hbd = "brew doctor" hbc = "brew cleanup" hbsu = "brew update && brew upgrade && brew cleanup" ....


.... gi = "git init" gcle = "git config --local --edit" gcge = "git config --global --edit" gcd = "git config --list --show-origin --show-scope" gget = "git config --get" gset = "git config --add" gst = "git status --short --branch" gl = 'git log --graph --pretty=format:"$(gitloglineformat)"' glh = "gitcommitlast | _copyandprint" glf = 'git fetch && git log --reverse --no-merges --pretty=format:"$(gitloglineformat)" [email protected]{upstream}' glg = 'git log --pretty=format:"$(gitloglineformat)" --grep' gls = 'git log --pretty=format:"$(gitloglineformat)" -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' grl = "git reflog" gg = "git grep" guthors = 'git log --color --pretty=format:"%C(bold blue)%an%C(reset)" | sort | uniq -c | sort --reverse' gd = "git diff" gdc = "git diff --cached" gdm = "git diff origin/master" gdw = "git diff --color-words" gdo = 'git diff --name-only | uniq | xargs $EDITOR' gdt = "git difftool" gdtc = "git difftool --cached" gdtm = "git difftool origin/master" glame = "git blame -M -C -C -C" gbi = "git bisect" gbis = "git bisect start" gbib = "git bisect bad" gbig = "git bisect good" gbir = "git bisect reset" gbisk = "git bisect skip" gbil = "git bisect log" gbire = "git bisect replay" gbiv = 'git bisect visualize --reverse --pretty=format:"$(gitloglineformat)"' gbih = "git bisect help" gbt = "git show-branch --topics" gbe = "git branch --edit-description" gbn = "gitbranchname | copyandprint" gcl = "git clone" gb = "git switch" gbb = "git switch -" gbm = "git switch master" ga = "git add" gau = "git add --update" gap = "git add --patch" gall = "git add --all ." gco = "git commit" gce = 'cat .git/COMMITEDITMSG | ag --invert-match "^#.*" | pbcopy' gatch = "git commit --patch" gca = "git commit --all" gcm = "git commit --message" gcam = "git commit --all --message" gcf = "git commit --fixup" gcs = "git commit --squash" gamend = "git commit --amend" gamendh = "git commit --amend --no-edit" gamenda = "git commit --amend --all --no-edit" gcp = "git cherry-pick" gcpa = "git cherry-pick --abort" gcps = "git cherry-pick --skip" gashc = "git stash clear" gnl = "git notes list" gns = "git notes show" gna = "git notes add" gne = "git notes edit" gnd = "git notes remove" gnp = "git notes prune" gf = "git fetch" gpu = "git pull" gpuo = "git pull origin" gpuom = "git pull origin master" gpuum = "git pull upstream master" grbo = "git rebase --onto" grbc = "git rebase --continue" grbd = "git rebase --show-current-patch" grbs = "git rebase --skip" grba = "git rebase --abort" grbt = "git rebase --edit-todo" gr = "git restore" grr = "git rerere" gpf = "git push --force-with-lease" gpn = "git push --no-verify" gpo = "git push --set-upstream origin" gps = "git push stage stage:master" gpp = "git push production production:master" gtag = "git tag" gtagv = "git tag --verify" gtags = "git push --tags" gwl = "git worktree list" gwp = "git worktree prune" ges = "git reset" grom = "git fetch --all && git reset --hard origin/master" # Reset local branch to origin/master branch. UNRECOVERABLE! gel = "git rm" gelc = "git rm --cached" # Removes previously tracked file from index after being added to gitignore. grev = "git revert --no-commit" glean = "git clean -d --force" ....


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


.... pgi = "initdb /usr/local/var/postgres" pgst = "pgctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start &" pgsp = "pgctl -D /usr/local/var/postgres stop -s -m fast" ....


.... reds = "redis-server /usr/local/etc/redis.conf &" redc = "redis-cli" ....


.... rb = "chruby" ....


.... rbi = "ruby-install" ....

====[Ruby Gems]

.... gemcr = "$EDITOR ~/.gem/credentials" geml = "gem list" gemi = "gem install" gemu = "gem uninstall" gemc = "gem cleanup" gems = "gem server" gemp = "gem pristine" geme = "gem environment" gemuc = "gem update --system && gem update && gem cleanup" gemcli = "ag --depth=1 --files-with-matches --file-search-regex gemspec executables | xargs basename | cut -d. -f1 | sort | copyand_print '\n'" ....


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


.... ms = "milestoner" msc = 'milestoner --commits | copyand_print "\n"' msp = "milestoner --publish" mse = "milestoner --config --edit" ....


.... gsg = "gemsmith --generate" gse = "gemsmith --config --edit" gsr = "gemsmith --read" gso = "gemsmith --open" gsi = "rake install" gsp = "rake publish" gsq = "rake code_quality" ....


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

====[Ruby on Rails]

.... railsb = "rails console --sandbox" railse = "EDITOR = 'sublime --wait' rails credentials:edit" railsdbm = "rake db:migrate && rake db:rollback && rake db:migrate && RAILS_ENV=test rake db:migrate" ....


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


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


.... cop = "rubocop --parallel --display-cop-names --display-style-guide" copc = "rubocop --auto-gen-config" copo = "rubocop --display-cop-names --only" copf = "rubocop --auto-correct" copfo = "rubocop --auto-correct --only" cops = "rubocop --show-cops" copd = 'find . -name ".rubocop-http*" -type f -delete' ....


.... cov = "open coverage/index.html" ....

====[Silver Surfer]

.... agf = "ag --hidden --files-with-matches --file-search-regex" ....


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


.... ya = "yarn add" yad = "yarn add --dev" yi = "yarn install" yo = "yarn outdated" yr = "yarn remove" ys = "yarn run" yu = "yarn upgrade" ....


.... ze = "$EDITOR $ZDATA" ....

====[Path Finder]

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

====[Sublime Text]

.... e = "sublime" ....

====[Marked 2]

.... mo = "open -a Marked\ 2" ....

====[ASCII Doctor]

.... ad = "asciidoctor" ....


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


.... dutia = "duti ~/.config/duti/configuration.duti" ....


.... 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" tfv = "terraform validate" ....


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

=== Functions

==== General

.... t2s = Tab to Space - Convert file from tab to space indendation. 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. ....

==== link:[ASCII Doctor]

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


.... lessi = Less Interactive - Inspect file, interactively. ....

====[License Finder]

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


.... sslc = SSL Certificate Creation - Create SSL certificate. ....


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


.... port = Port - List file activity on given port. ....


.... gia = Git Init (all) - Initialize/re-initialize repositories in current directory. gafe = Git Safe - Marks repository as safe for auto-loading project's

path. groot = Git Root - Change to repository root directory regardless of current depth. ginfo = Git Info - Print repository overview information. gstats = Git Statistics - Answer statistics for current project. gstatsa = Git Statistics (all) - Answer statistics for all projects in current directory. ghurn = Git Churn - Answer commit churn for project files (sorted highest to lowest). gount = Git Commit Count - Answer total number of commits for current project. gli = Git Log (interactive) - List master or feature branch commits with commit show and/or diff support. gld = Git Log Details - List master or feature branch commit details. ghow = Git Show - Show commit details with optional diff support. gile = Git File - Show file details for a specific commit (with optional diff support). 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). guthorsa = Git Authors (all) - Answer author commit activity per project (ranked highest to lowest). guthorc = Git Author Contributions - Answers total lines added/removed by author for repo (with emphasis on deletion). gsta = Git Status (all) - Answer status of projects with uncommited/unpushed changes. gup = Git Update - Fetch commits, prune untracked references, review each commit (optional, with diff), and pull (optional). gync = Git Sync - Syncs up remote changes and deletes pruned/merged branches. gseta = Git Set Config Value (all) - Set key value for projects in current directory. ggeta = Git Get Config Value (all) - Answer key value for projects in current directory. gunseta = Git Unset (all) - Unset key value for projects in current directory. gailsa = Git Email Set (all) - Sets user email for projects in current directory. gail = Git Email Get - Answer user email for current project. gaila = Git Email Get (all) - Answer user email for projects in current directory. gince = Git Since - Answer summarized list of activity since date/time for projects in current directory. gday = Git Day - Answer summarized list of current day activity for projects in current directory. gweek = Git Week - Answer summarized list of current week activity for projects in current directory. gmonth = Git Month - Answer summarized list of current month activity for projects in current directory. gsup = Git Standup - Answer summarized list of activity since yesterday for projects in current directory. 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. gash = Git Stash - Creates stash. gashl = Git Stash List - List stashes. gashs = Git Stash Show - Show stash or prompt for stash to show. gashp = Git Stash Pop - Pop stash or prompt for stash to pop. gashd = Git Stash Drop - Drop stash or prompt for stash to drop. gasha = Git Stash (all) - Answer stash count for projects in current directory. gucca = Git Upstream Commit Count (all) - Answer upstream commit count since last pull for projects in current directory. gpua = Git Pull (all) - Pull new changes from remote branch for projects in current directory. galla = Git Add (all) - Apply file changes (including new files) for projects in current directory. gcb = Git Commit Breakpoint - Create a breakpoint (empty) commit to denote related commits in a feature branch. gcfi = Git Commit Fix (interactive) - Select which commit to fix within current feature branch. gcff = Git Commit Fix (file) - Create commit fix for file (ignores previous fixups). 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. gmpa = Git Amend Push (all) - Amend all changes and force push with lease for projects in current directory. gp = Git Push - Pushes changes to remote repository with dynamic branch creation if non-existent. gpa = Git Push (all) - Push changes for projects in current directory. grbi = Git Rebase (interactive) - Rebase commits, interactively. grbq = Git Rebase (quick) - Rebase commits, quickly. Identical to
function but skips editor. gbl = Git Branch List - List local and remote branch details. gblo = Git Branch List Owner - List branches owned by current author or supplied author. gbla = Git Branch List (all) - List current branch for projects in current directory. gbc = Git Branch Create - Create and switch to branch. gbf = Git Branch Facsimile - Duplicate current branch with new name and switch to it. gbca = Git Branch Create (all) - Create and switch to branch for projects in current directory. gbs = Git Branch Switch - Switch between branches. gbsa = Git Branch Switch (all) - Switch to given branch for projects in current directory. gbna = Git Branch Number (all) - Answer number of branches for projects in current directory. gbd = Git Branch Delete - Delete branch (select local and/or remote). gbdl = Git Branch Delete (local) - Delete local branch. gbdr = Git Branch Delete (remote) - Delete remote branch. gbdm = Git Branch Delete (merged) - Delete remote and local merged branches. gbr = Git Branch Rename - Rename current branch. gtagr = Git Tag Rebuild - Rebuild a previous tag. WARNING: Use with caution, especially if previously published. gtagd = Git Tag Delete - Delete local and remote tag (if found). gwa = Git Worktree Add - Add and switch to new worktree. gwd = Git Worktree Delete - Deletes current Git worktree. gra = Git Remote Add - Add and track a remote repository. gess = Git Reset Soft - Resets previous commit (default), resets back to number of commits, or resets to specific commit. 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! guke = Git Nuke - Permanently destroy and erase a file from history. UNRECOVERABLE! gleana = Git Clean (all) - Clean uncommitted files from all projects in current directory. glear = Git Clear - Clear repository for packaging/shipping purposes. 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. ....


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


.... pguc = PostgreSQL User Create - Create PostgreSQL user. pgud = PostgreSQL User Drop - Drop PostgreSQL user. pgt = PostgreSQL Template - Edit PostgreSQL template. ....


.... rbva = Ruby Version (all) - Show current Ruby version for all projects in current directory. rbua = Ruby Upgrade (all) - Upgrade Ruby projects in current directory with new Ruby version. rbs = Ruby Server - Serve web content from current directory via WEBrick. ....

====[Ruby Gems]

.... gemdep = Gem Dependency Search - Finds a gem defined within a Gemfile or a gemspec. ....


.... bj = Bundler Jobs - Answer maximum Bundler job limit for current machine or automatically set it. bcg = Bundler Config Gem - Configure Bundler to use local gem for development purposes. 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. bca = Bundle Clean (all) - Clean projects of gem artifacts (i.e. pkg folder). ....


.... rakea = Rake (all) - Run default Rake tasks 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. ....


.... 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. rsall = RSpec (all) - Run RSpec for projects in current directory. ....

====[Ruby on Rails]

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


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


.... cinr = asciinema Record - Create new asciinema recording. ....


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


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


.... whs = Wormhole Send - Send encrypted path (i.e. file or directory). whst = Wormhole Send Text - Send encrypted text. whr = Wormhole Receive - Receive encrypted payload (i.e. text, file, etc.) ....

==== Dotfiles

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

=== Git Hooks

.... brakemancheck = Brakeman Check - Scan Rails project for security vulnerabilities. bundlergemfilepath = Bundler Gemfile Path - Detect gem path statements. bundlerauditcheck = Bundler Audit Check - Scans gem dependencies for security vulnerabilities. capybarasaveandopenpage = Capybara Save And Open Page - Detect saveandopenpage statements. commenttotals = Comment Totals - Print project comment totals. ctagsrebuild = CTags Rebuild - Rebuild project .tags file. elmdebug = Elm Debug - Detect debug statements. gitlintcheck = Git Lint Check - Enforce consistent Git commits. gittrailercleaner = Git Trailer Cleaner - Remove unused/empty Git commit body trailers. javascriptdebugger = JavaScript Debugger - Detect JavaScript debug statements. javascriptconsole = JavaScript Console - Detect JavaScript console statements. javascriptalert = JavaScript Alert - Detect JavaScript alert statements. licensefindercheck = License Finder Check - Scan project for valid licenses. prybinding = Pry Binding - Detect Pry debug statements. reekcheck = Reek Check - Scan Ruby code for poor style choices. rspecdotfile = RSpec Dotfile - Detect RSpec dotfile. rspecfocus = RSpec Focus - Detect RSpec focus. rspecorder = RSpec Order - Detect RSpec ordered specs. rubocopcheck = Rubocop Check - Scan Ruby code for poor style choices. irbbinding = IRB Binding - Detect IRB debug statements. ....

=== IRB, Pry, and Rails consoles


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

CK.paste # Pastes data from OS X clipboard.

=== Pry Aliases

.... 'w' = "whereami" 'c' = "continue" 's' = "step" 'n' = "next" 'f' = "finish" "ss" = "show-source" "bp" = "break" "bpe" = "break --enable" "bpd" = "break --disable" "bpD" = "break --delete" "bpc" = "break --disable-all" "bpC" = "break --delete-all" "bph" = "break --help" ....

== Development

To contribute, run:


git clone

cd dotfiles

== Versioning

Read link:[Semantic Versioning] for details. Briefly, it means:

  • Major (X.y.z) - Incremented for any backwards incompatible public API changes.
  • Minor (x.Y.z) - Incremented for new, backwards compatible, public API enhancements/fixes.
  • Patch (x.y.Z) - Incremented for small, backwards compatible, bug fixes.

== Code of Conduct

Please note that this project is released with a link:CODEOFCONDUCT.adoc[CODE OF CONDUCT]. By participating in this project you agree to abide by its terms.

== Contributions

Read link:CONTRIBUTING.adoc[CONTRIBUTING] for details.

== License

Read link:LICENSE.adoc[LICENSE] for details.

== History

Read link:CHANGES.adoc[CHANGES] for details.

== Credits

Engineered by link:[Brooke Kuhlmann].

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.