Skip to content

IvanWng97/dotfiles

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

647 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Welcome to Ivan's dotfiles πŸ‘‹

lint bootstrap brewfile MIT License

πŸ’» ghostty, neovim, zsh, tmux, starship, lazygit, homebrew β€” my whole world

IMG_1059

Initial Setup and Installation

All shell commands manage globally installed packages (Homebrew, npm, pipx, cargo, mas).

The repo lives at ~/dotfiles/ and uses GNU stow to symlink each package into $HOME β€” $HOME itself is not a git working tree.

Fresh Mac

xcode-select --install        # one-time, GUI prompt
git clone https://github.com/IvanWng97/dotfiles.git ~/dotfiles
cd ~/dotfiles && make bootstrap

make bootstrap installs Homebrew + stow, backs up any conflicting files in $HOME to ~/.dotfiles-pre-stow-<timestamp>/, stows the dotfile packages, and runs make install. Pass SKIP_INSTALL=1 to skip the package install step.

Workflows

Command What it does
make bootstrap Fresh-machine setup: brew + stow + symlinks + make install. Idempotent.
make install Installs everything from Backup/Brewfile, Npmfile, Pipfile, Cargofile, Fishfile, plus tpm + plugins.
make install-links Re-run stow to (re)create symlinks under $HOME.
make uninstall-links Remove the symlinks (configs stay safe in ~/dotfiles/).
make relink uninstall-links then install-links β€” useful after adding a new file to a package.
make symlinks-check Verify every package file has a matching, correctly-resolved symlink in $HOME; reports orphans too. Exits non-zero on issues.
make doctor Run every health check at once: zsh syntax on each script, symlinks-check, Brewfile parses, git working tree clean.
make update Upgrades brew/npm/pipx/cargo/mas/tmux packages and re-dumps Backup/Brewfile so it matches reality.
make backup Re-dumps every package list into Backup/ for committing.

All five scripts (bootstrap, install, update, backup, check-links) live in scripts/ and share a small set of helpers (set -euo pipefail, colored output, per-tool guards).

Stow packages

Each tool gets its own top-level package. All packages stow into $HOME; each one carries the right .config/, .aria2/, etc. structure inside it so stow puts files in the correct XDG location.

~/dotfiles/
  alacritty/.config/alacritty/...
  fish/.config/fish/...
  nvim/.config/nvim/...
  ...                              ← 13 XDG packages
  aria2/.aria2/aria2.conf
  claude/.claude/settings.json
  bash/.bashrc
  czrc/.czrc
  vim/.vimrc  vim/.ideavimrc
  zsh/.zshrc

The Makefile auto-discovers packages (every top-level dir except scripts/, Backup/, .github/, .git/) and runs a single stow -v -t ~ <packages...> call. Run make print-packages to see the current list.

Scripts under scripts/ are written in zsh (#!/usr/bin/env zsh); the lint workflow runs zsh -n on each to catch syntax errors.

Pre-commit hooks (optional)

The same checks the CI runs (gitleaks, actionlint, zsh -n, plus trailing-whitespace / EOF / YAML / merge-conflict) are available as pre-commit hooks. Opt-in per clone:

brew install pre-commit
pre-commit install

Local Settings

Shell

Zsh is the daily driver β€” kept lean, with eza/zoxide/fzf/bat/starship glue.

Starship handles the prompt β€” see config.toml.

Editors

Vim Neovim
Main Configuration File ~/.vimrc ~/.config/nvim/init.lua
Configuration directory ~/.vim ~/.config/nvim

Helix is also set up for quick edits.

Multiplexer

Tmux config lives in tmux.conf. Prefix is C-Space; C-h/j/k/l navigates panes (vim-aware), M-h/j/k/l resizes them. Zellij is configured as an alternative.

Terminals

Configs for Ghostty, Kitty, and Alacritty β€” Ghostty is the daily driver.

Other tools

lazygit, tealdeer, lf, xplr, helix.

Color scheme

Everything is Dracula!

Fonts

JetBrains Mono Nerd Font β€” installed via the font-jetbrains-mono-nerd-font cask in Backup/Brewfile.

Author

πŸ‘€ Ivan β€” @IvanWng97

License

MIT β€” feel free to fork, copy, and rip out whatever's useful.

Show your support

Give a ⭐️ if this project helped you!

About

macOS dotfiles managed with GNU stow β€” ghostty, neovim, zsh, tmux, starship, lazygit, homebrew

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

  •  

Contributors