My macOS dotfiles for Zsh.
Note: Installation of Oh My Zsh
is not optional. Everything else listed
below can be opted-out of.
- Installs Oh My Zsh with custom exports, aliases, and paths.
- Loads a selection of omz plugins and custom functions.
- Installs custom "dotfiles":
- Installs Homebrew, nvm & latest version of node, composer & latest version of php
- Installs selection of brew formulae & node packages
- Runs
brew update
,brew upgrade
andbrew cleanup
- Sets custom macOS defaults
- Installs Applications via
brew cask
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)"
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) |
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
- aws
- git
- iterm2
- history-substring-search
- nvm
- z
- GNU core utilities
- ack
- awscli
- coreutils
- deno
- git
- go
- heroku
- jq
- MongoDB
- MySQL
- nginx
- nvm
- php
- python
- rbenv (and ruby-build)
- rsync (latest version, rather than the out-dated macOS installation)
- tmux
- wget
- Alfred 4
- AppCleaner
- Brave Browser
- CloudApp
- Docker Desktop
- Express VPN
- Google Chrome
- Google Drive
- iTerm2
- Notion
- Postman
- Slack
- Spotify
- Visual Studio Code
- zoom.us
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
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 beforeoh-my-zsh.sh
is loaded, therefore allowing you to effect what happens whenoh-my-zsh.sh
runs, without changing any tracked files. Some examples would be theZSH_THEME
or specific Oh My Zsh plugin configurations.~/.zshrc.after
: Sourced afteroh-my-zsh.sh
is loaded. You can override anything that was set byoh-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.
Inspiration and code was taken from many sources, including:
- @necolas (Nicolas Gallagher) [https://github.com/tejr/dotfiles] (https://github.com/necolas/dotfiles)
- @mathiasbynens (Mathias Bynens) https://github.com/mathiasbynens/dotfiles