Welcome to my dotfiles repository! This contains the configuration files I use for my daily development workflow.
Note
This project is still a work in progress! Use at your own risk.
Note
You need to install the XCode CLI tools for macOS configuration.
xcode-select --install
After cloning the repository, you can set up the dotfiles using the install.sh script. Run the script with one of the following commands:
./install.sh help
Usage: install.sh {backup|link|homebrew|shell|macos|all}
./install.sh backup
This command creates a backup of your current dotfiles (if any) in ~/.dotfiles-backup/. It scans for files that will be symlinked and moves them to the backup directory. It also handles vim/neovim setups, moving related files into the XDG base directory, e.g., ~/.config.
~/.config/nvim/
- The home of neovim configuration~/.vim/
- The home of vim configuration~/.vimrc
- The main init file for vim
./install.sh link
This command creates symbolic links from the dotfiles directory to your home directory ($HOME
). This allows you to keep the configurations in version control while using them in your actual environment.
./install.sh homebrew
This command installs Homebrew
(macOS/Linux package manager) by downloading and running the Homebrew installer script. If the script detects you're on Linux, it will use Linuxbrew instead.
Once Homebrew is installed, it runs brew bundle to install the packages listed in the Brewfile.
./install.sh shell
This command sets up your shell configuration. It specifically configures the shell to Zsh using the chsh
command.
./install.sh macos
This command applies macOS-specific settings using defaults write commands. It modifies various system preferences, including:
- Show all filename extensions in Finder
- Show hidden files by default
- Set UTF-8 encoding in Terminal.app
- Expand save dialogs by default
- Enable full keyboard access for all controls
- Enable subpixel font rendering on non-Apple LCDs
- Show the Path and Status bars in Finder
- Enable Safari’s debug menu
./install.sh all
This runs all the installation tasks mentioned above (except for backup, which must be run manually).
The prompt for ZSH is configured in the cnofig/zsh/zshrc
file and performs the
following operations.
- Sets
EDITOR
tonvim
- Recursively searches the
$DOTFILES/zsh
directory for any.zsh
files and sources them - Sources a
~/.localrc
, if available for configuration that is machine-specific and/or should not ever be checked into git - Adds
~/bin
and$DOTFILES/bin
to thePATH
To install Neovim, use Homebrew:
brew install neovim
However, it was likely installed already if you ran the ./install.sh brew
command provided in the dotfiles.
All of the configuration for Neovim starts at config/nvim/init.lua
, which is
symlinked into the ~/.config/nvim
directory.
Warning
The first time you run nvim
with this configuration, it will likely have a
lot of errors. This is because it is dependent on a number of plugins being
installed.
On the first run, all required plugins should automatically installed by lazy.nvim, a plugin manager for neovim.
Note
Plugins can be synced in a headless way from the command line using the vimu
alias.
Clone the tmux plugin repo:
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
Then install the plugins with the following command:
CTRL^ + I
A Dockerfile is provided to help test the dotfiles setup in a Linux environment. To build the Docker image:
docker build -t dotfiles --force-rm .
This creates a dotfiles image with the repository cloned. To run the container:
docker run -it --rm dotfiles
This opens a Bash shell in the container, allowing you to test the dotfiles installation process.
I almost exclusively work on macOS, so this list will be specific to that operating system, but several of these reccomendations are also available, cross-platform.
- WezTerm - GPU-accelerated terminal emulator
- Aerospace - i3-like tiling window manager for macOS
- Raycast - MacOS productivity app
- Zsh
- Oh My Posh - Cross-platform prompt theme engine
- Nerd fonts(I use SF Mono Nerd Font and CaskaydiaCove NF as fallback)
- zoxide (Highly recommended)
- Eza -
ls
replacement - bat -
cat
replacement - fzf - Interactive filtering
- icalBuddy for MacOS calendar