This repository contains my personal dotfiles, managed using GNU Stow. Stow makes it easy to symlink configuration files and directories into their correct locations in your home directory.
Clone repo into new hidden directory
# Use SSH (if set up)...
git clone [email protected]:miguelmartens/dotfiles.git ~/.dotfiles
# ...or use HTTPS and switch remotes later.
git clone https://github.com/miguelmartens/dotfiles.git ~/.dotfilesTo install Homebrew:
make brew-installTo install or update all packages from the Brewfile (and see a description of what will be installed):
make brew-bundleThis will first show a summary of what will be installed (brew bundle --describe), then install or update all packages from the Brewfile (brew bundle --file ~/.dotfiles/Brewfile --force).
To dump your current Homebrew setup to the Brewfile:
make brew-dumpThis will regenerate the Brewfile to match your current Homebrew setup.
You can back up and restore your Cursor (VS Code) extensions using the following Makefile targets:
To export your currently installed extensions to .dotfiles/cursor/.cursor/extensions.list:
make cursor-extensions-exportTo restore all extensions from .dotfiles/cursor/.cursor/extensions.list:
make cursor-extensions-restoreThis will use cursor --list-extensions to export, and cursor --install-extension to restore from the list. The extensions.list file is tracked in this repo for easy backup and migration.
Each application or config is organized as a separate "package" (directory) inside .dotfiles/. The internal structure of each package mirrors the desired location in your home directory. For example:
.dotfiles/
kitty/
.config/
kitty/
kitty.conf
current-theme.conf
hushlogin/
.hushlogin
zsh/
.zshrc
.zshenv
.zshprofile
starship/
.config/
starship/
starship.toml
alacritty/
.config/
alacritty/
alacritty.toml
catppuccin-frappe.toml
...
atuin/
.config/
atuin/
config.toml
zed/
.config/
zed/
settings.json
...
zellij/
.config/
zellij/
config.kdl
themes/
catppuccin.kdl
git/
# (add your git configs here)
Brewfile
Brewfile.lock.json
.stowrc
.gitignore
Many modern Linux and macOS applications store their configuration files in the ~/.config directory, following the XDG Base Directory Specification.
This keeps your home directory organized and avoids clutter from many hidden dotfiles.
When using Stow, you can easily manage these configurations by mirroring the .config structure inside each package. For example, to manage Kitty's configuration, place your files in:
.dotfiles/kitty/.config/kitty/
Stow will then symlink this to ~/.config/kitty/, ensuring your application picks up the correct configuration.
This approach works for any app that uses ~/.config, such as Alacritty, Starship, Zellij, Zed, and more.
If you add a new application that uses .config, simply create the appropriate directory structure in your dotfiles and stow the package as usual.
# Navigate to dotfiles directory
cd ~/.dotfiles
# Setup Stow (use --adopt when trying to copy/adopt files)
stow .
# Or, to stow all directories at once (excluding files like Brewfile):
stow */
# Check if stow is working
ls -lah ~/- Files like
.hushloginthat belong directly in$HOMEare placed in their own package directory (e.g.,hushlogin/.hushlogin). - The
.stowrcfile is used to ignore files that should not be symlinked (likeBrewfile,README.md, etc.). .gitignoreis used to avoid committing local or system-specific files.
# Check the available versions
pyenv install --list
# Install Python versions
pyenv install x.x.x
# Set the global version
pyenv global x.x.x
# Check the versions
pyenv versions
# Check Python version
python --version
python3 --version
# Add pyenv-update plugin
git clone https://github.com/pyenv/pyenv-update.git $(pyenv root)/plugins/pyenv-update
pyenv updateWhen making changes to your configuration for Aerospace, Sketchybar, or Borders, you may need to kill and restart their processes to apply updates.
You can quickly kill all three processes with:
pkill Aerospace sketchybar bordersThis will terminate all running instances of Aerospace, sketchybar, and borders. You can then relaunch them as needed to test your changes.
- To start Aerospace:
open -a Aerospace - To start Sketchybar:
open -a sketchybar - To start Borders:
open -a borders
- Create a new directory for the package (if it doesn't exist).
- Place your config files inside, mirroring the desired path from your home directory.
- Run
stow <package>to symlink.
Feel free to fork and adapt for your own setup!