/dotfiles

My macOS dotfiles: Oh My Zsh, git, brew, node, mac settings, mac apps, and more.

Primary LanguageShellMIT LicenseMIT

Dotfiles

My macOS dotfiles for Zsh.

Features

Note: Installation of Oh My Zsh is not optional. Everything else listed below can be opted-out of.

Installation

The installation step requires the XCode Command Line Tools and may overwrite existing dotfiles in your HOME and .vim directories.

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/codfish/dotfiles/main/install.sh)"

If you wish to fork this project and maintain your own dotfiles, fork it and run the following:

DOTFILES_REPO=yourhandle/dotfiles /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/yourhandle/dotfiles/main/install.sh)"

Usage

Run the dotfiles command:

dotfiles

You should run the update when:

  • You make a change to ~/.dotfiles/git/gitconfig (the only file that is copied rather than symlinked).
  • You want to pull changes from the remote repository.
  • You want to update Homebrew formulae and Node packages.

Options:

-h, --help Help
-l, --list List of additional applications to install
--no-packages Skip package (brew/node/etc) updates
--no-sync Skip pulling from the remote repository
--no-macos Skip macOS settings update
--with-apps Opt-in to install mac apps via brew cask (won't install/update if it's already present)

Oh My Zsh

These dotfiles essentially wrap Oh My Zsh. When you install the dotfiles, Oh My Zsh will also get installed for you directly into the ~/.dotfiles directory.

  • $ZSH will be ~/.dotfiles/oh-my-zsh
  • $ZSH_CUSTOM will be ~/.dotfiles/oh-my-zsh-custom
  • Opinionated set of plugins are loaded
  • Everything is configurable if you want to change things

Oh My Zsh Plugins

  • aws
  • git
  • iterm2
  • history-substring-search
  • nvm
  • z

Homebrew formulae

Mac Applications Installed via Homebrew cask

  • Alfred 4
  • AppCleaner
  • Brave Browser
  • CloudApp
  • Docker Desktop
  • Express VPN
  • Google Chrome
  • Google Drive
  • iTerm2
  • Notion
  • Postman
  • Slack
  • Spotify
  • Visual Studio Code
  • zoom.us

Node packages

Custom macOS defaults

Custom macOS settings can be applied during the dotfiles process. You'll be prompted before this happens so you can say no.

They can also be applied independently by running the following command:

macosdefaults

Local/private

Any private and custom Bash commands and configuration should be placed in a ~/.zshrc.before or ~/.zshrc.after file. These files will not be under version control or committed to a public repository. If either or both exists, they will be sourced for inclusion in .zshrc.

  • ~/.zshrc.before: Sourced before oh-my-zsh.sh is loaded, therefore allowing you to effect what happens when oh-my-zsh.sh runs, without changing any tracked files. Some examples would be the ZSH_THEME or specific Oh My Zsh plugin configurations.
  • ~/.zshrc.after: Sourced after oh-my-zsh.sh is loaded. You can override anything that was set by oh-my-zsh.sh.

Here is an example ~/.zshrc.before:

# PATH exports
PATH=$PATH:~/.gem/ruby/1.8/bin
export PATH

# Git credentials
# Not under version control to prevent people from
# accidentally committing with your details
GIT_AUTHOR_NAME="Chris O'Donnell"
GIT_AUTHOR_EMAIL="chris@example.com"

# Set the credentials (modifies ~/.gitconfig)
git config --global user.name "$GIT_AUTHOR_NAME"
git config --global user.email "$GIT_AUTHOR_EMAIL"

# Work Machine Aliases
alias web="cd ~/Sites/company/web"

ZSH_THEME="amuse"

Here is an example ~/.zshrc.after:

# override something
alias ll="ls -aGlFh"

Note: Because the dotfiles/gitconfig file is copied to ~/.gitconfig, any private git configuration specified in ~/.zshrc.before or ~/.zshrc.after will not be committed to your dotfiles repository.

Acknowledgements

Inspiration and code was taken from many sources, including: