# dotfiles **Repository Path**: mirrors_thoughtbot/dotfiles ## Basic Information - **Project Name**: dotfiles - **Description**: A set of vim, zsh, git, and tmux configuration files. - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-08-18 - **Last Updated**: 2026-08-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # thoughtbot dotfiles ![prompt](http://images.thoughtbot.com/thoughtbot-dotfiles-prompt.png) ## Requirements Set zsh as your login shell: chsh -s $(which zsh) ## Install Clone onto your laptop: git clone git@github.com:thoughtbot/dotfiles.git ~/dotfiles (Or, [fork and keep your fork updated](http://robots.thoughtbot.com/keeping-a-github-fork-updated)). Install [rcm](https://github.com/thoughtbot/rcm): brew install rcm Install the dotfiles: env RCRC=$HOME/dotfiles/rcrc rcup After the initial installation, you can run `rcup` without the one-time variable `RCRC` being set (`rcup` will symlink the repo's `rcrc` to `~/.rcrc` for future runs of `rcup`). [See example](https://github.com/thoughtbot/dotfiles/blob/master/rcrc). This command will create symlinks for config files in your home directory. Setting the `RCRC` environment variable tells `rcup` to use standard configuration options: - Exclude the `README.md`, `README-ES.md` and `LICENSE` files, which are part of the `dotfiles` repository but do not need to be symlinked in. - Give precedence to personal overrides which by default are placed in `~/dotfiles-local` - Please configure the `rcrc` file if you'd like to make personal overrides in a different directory ## Update From time to time you should pull down any updates to these dotfiles, and run rcup to link any new files and install new vim plugins. **Note** You _must_ run `rcup` after pulling to ensure that all files in plugins are properly installed, but you can safely run `rcup` multiple times so update early and update often! ## Make your own customizations Create a directory for your personal customizations: mkdir ~/dotfiles-local Put your customizations in `~/dotfiles-local` appended with `.local`: - `~/dotfiles-local/aliases.local` - `~/dotfiles-local/git_template.local/*` - `~/dotfiles-local/gitconfig.local` - `~/dotfiles-local/psqlrc.local` (we supply a blank `.psqlrc.local` to prevent `psql` from throwing an error, but you should overwrite the file with your own copy) - `~/dotfiles-local/tmux.conf.local` - `~/dotfiles-local/vimrc.local` - `~/dotfiles-local/vimrc.bundles.local` - `~/dotfiles-local/zshrc.local` - `~/dotfiles-local/zsh/configs/*` For example, your `~/dotfiles-local/aliases.local` might look like this: # Productivity alias todo='$EDITOR ~/.todo' Your `~/dotfiles-local/gitconfig.local` might look like this: [alias] l = log --pretty=colored [pretty] colored = format:%Cred%h%Creset %s %Cgreen(%cr) %C(bold blue)%an%Creset [user] name = Dan Croak email = dan@thoughtbot.com Your `~/dotfiles-local/vimrc.local` might look like this: " Color scheme colorscheme github highlight NonText guibg=#060606 highlight Folded guibg=#0A0A0A guifg=#9090D0 If you don't wish to install a vim plugin from the default set of vim plugins in `.vimrc.bundles`, you can ignore the plugin by calling it out with `UnPlug` in your `~/.vimrc.bundles.local`. " Don't install vim-scripts/tComment (notice the username of the plugin is removed) UnPlug 'tComment' `UnPlug` can be used to install your own fork of a plugin or to install a shared plugin with different custom options. " Only load vim-coffee-script if a Coffeescript buffer is created UnPlug 'vim-coffee-script' Plug 'kchmck/vim-coffee-script', { 'for': 'coffee' } " Use a personal fork of vim-run-interactive UnPlug 'vim-run-interactive' Plug '$HOME/plugins/vim-run-interactive' To extend your `git` hooks, create executable scripts in `~/dotfiles-local/git_template.local/hooks/*` files. Your `~/dotfiles-local/zshrc.local` might look like this: # load pyenv if available if which pyenv &>/dev/null ; then eval "$(pyenv init -)" fi Your `~/dotfiles-local/vimrc.bundles.local` might look like this: Plug 'Lokaltog/vim-powerline' Plug 'stephenmckinney/vim-solarized-powerline' ## zsh Configurations Additional zsh configuration can go under the `~/dotfiles-local/zsh/configs` directory. This has two special subdirectories: `pre` for files that must be loaded first, and `post` for files that must be loaded last. For example, `~/dotfiles-local/zsh/configs/pre/virtualenv` makes use of various shell features which may be affected by your settings, so load it first: # Load the virtualenv wrapper . /usr/local/bin/virtualenvwrapper.sh Setting a key binding can happen in `~/dotfiles-local/zsh/configs/keys`: # Grep anywhere with ^G bindkey -s '^G' ' | grep ' Some changes, like `chpwd`, must happen in `~/dotfiles-local/zsh/configs/post/chpwd`: # Show the entries in a directory whenever you cd in function chpwd { ls } This directory is handy for combining dotfiles from multiple teams; one team can add the `virtualenv` file, another `keys`, and a third `chpwd`. The `~/dotfiles-local/zshrc.local` is loaded after `~/dotfiles-local/zsh/configs`. ## zsh History Configurations The zsh history is configured with several useful options: - `hist_ignore_all_dups`: Removes duplicate commands from history - `hist_ignore_space`: Commands starting with a space are not saved to history (useful for sensitive commands) - `inc_append_history`: Adds commands to history as they're executed, not just when the shell exits - `share_history`: Shares history across multiple zsh sessions in real-time History size is set to 8,192 entries providing ample command history. ## vim Configurations Similarly to the zsh configuration directory as described above, vim automatically loads all files in the `~/dotfiles-local/vim/plugin` directory. This does not have the same `pre` or `post` subdirectory support that our `zshrc` has. This is an example `~/dotfiles-local/vim/plugin/c.vim`. It is loaded every time vim starts, regardless of the file name: # Indent C programs according to BSD style(9) set cinoptions=:0,t0,+4,(4 autocmd BufNewFile,BufRead *.[ch] setlocal sw=0 ts=8 noet ## What's in it? [vim](http://www.vim.org/) configuration: - [fzf](https://github.com/junegunn/fzf.vim) for fuzzy file/buffer/tag finding. - [Rails.vim](https://github.com/tpope/vim-rails) for enhanced navigation of Rails file structure via `gf` and `:A` (alternate), `:Rextract` partials, `:Rinvert` migrations, etc. - Run many kinds of tests [from vim]([https://github.com/janko-m/vim-test) - Set `` to a single space. - Switch between the last two files with space-space. - Syntax highlighting for Markdown, HTML, JavaScript, Ruby, Go, Elixir, more. - Use [Ag](https://github.com/ggreer/the_silver_searcher) instead of Grep when available. - Map `ct` to re-index ctags. - Use [vim-mkdir](https://github.com/pbrisbin/vim-mkdir) for automatically creating non-existing directories before writing the buffer. - Use [vim-plug](https://github.com/junegunn/vim-plug) to manage plugins. [tmux](http://robots.thoughtbot.com/a-tmux-crash-course) configuration: - Improve color resolution. - Remove administrative debris (session name, hostname, time) in status bar. - Set prefix to `Ctrl+s` - Soften status bar color from harsh green to light gray. [git](http://git-scm.com/) configuration: - Adds a `co-upstream-pr $PR_NUMBER $LOCAL_BRANCH_NAME` subcommand to checkout remote upstream branch into a local branch. - Adds a `create-branch` alias to create feature branches. - Adds a `delete-branch` alias to delete feature branches. - Adds a `merge-branch` alias to merge feature branches into master. - Adds an `up` alias to fetch and rebase `origin/master` into the feature branch. Use `git up -i` for interactive rebases. - Adds `post-{checkout,commit,merge}` hooks to re-index your ctags. - Adds `pre-commit` and `prepare-commit-msg` stubs that delegate to your local config. - Adds `trust-bin` alias to append a project's `bin/` directory to `$PATH`. [Ruby](https://www.ruby-lang.org/en/) configuration: - Add trusted binstubs to the `PATH`. - Load the ASDF version manager. [Rails](https://rubyonrails.org) - Adds [railsrc][] with the following options to integrate with [Suspenders][]. ``` --database=postgresql --skip-test -m=https://raw.githubusercontent.com/thoughtbot/suspenders/main/lib/install/web.rb ``` If you want to skip this file altogether, run `rails new my_app --no_rc`. [railsrc]: https://github.com/rails/rails/blob/7f7f9df8641e35a076fe26bd097f6a1b22cb4e2d/railties/lib/rails/generators/rails/app/USAGE#L5C1-L7 [Suspenders]: https://github.com/thoughtbot/suspenders Shell aliases and scripts: - `...` for quicker navigation to the parent's parent directory. - `b` for `bundle`. - `g` with no arguments is `git status` and with arguments acts like `git`. - `migrate` for `bin/rails db:migrate db:rollback && bin/rails db:migrate db:test:prepare`. - `mcd` to make a directory and change into it. - `replace foo bar **/*.rb` to find and replace within a given list of files. - `tat` to attach to tmux session named the same as the current directory. - `v` for `$VISUAL`. ## Thanks Thank you, [contributors](https://github.com/thoughtbot/dotfiles/contributors)! Also, thank you to Corey Haines, Gary Bernhardt, and others for sharing your dotfiles and other shell scripts from which we derived inspiration for items in this project. ## License dotfiles is copyright © 2009 thoughtbot. It is free software, and may be redistributed under the terms specified in the [`LICENSE`] file. [`LICENSE`]: /LICENSE ## About thoughtbot ![thoughtbot](https://thoughtbot.com/thoughtbot-logo-for-readmes.svg) This repo is maintained and funded by thoughtbot, inc. The names and logos for thoughtbot are trademarks of thoughtbot, inc. We love open source software! See [our other projects][community]. We are [available for hire][hire]. [community]: https://thoughtbot.com/community?utm_source=github [hire]: https://thoughtbot.com/hire-us?utm_source=github