A Rust-powered dotfiles bootstrapper for a personal developer environment with first-class support for macOS and Ubuntu.
| Layer | Tool | Details |
|---|---|---|
| Bootstrapper | dotup |
Rust CLI for install, dry-run, doctor, and sync workflows |
| Shell | Zsh + Oh-My-Zsh + Starship | Shared shell config with optional local overrides |
| Editor | Neovim (LazyVim) | Bootstrapped when no existing Neovim config is present |
| Multiplexer | Tmux + TPM | Shared defaults with clipboard integrations and local overrides |
| Terminal | WezTerm | Personal defaults with documented font expectations |
| Package management | Homebrew on macOS, APT on Ubuntu | Other Linux package managers remain best-effort |
| IDE integration | IdeaVim | JetBrains Vim motions via vim/ideavimrc.vim |
git clone https://github.com/toandaominh1997/dotfiles.git "$HOME/.dotfiles/tool"
cd "$HOME/.dotfiles/tool"
cargo run -- --autoRestart your terminal, then:
- Open tmux and press
prefix + Ito install tmux plugins - Open
nvimand let LazyVim finish plugin sync if this is a fresh install
- First-class platforms: macOS and Ubuntu
- Best-effort platforms: other Linux distributions supported through existing package-manager adapters
- GUI app installation: macOS-only
- Setup bias: personal machine defaults first, with explicit local overrides for machine-specific differences
cargo run -- --auto
cargo run -- --auto --upgrade --verbose
cargo run -- --dry-run
cargo run -- --doctor
cargo run -- --auto --profile workProfiles are defined in dotup.toml:
default— personal baseline with shell, editor, tmux, and core CLI toolswork— adds common work tooling such as AWS CLI, Docker, Kubernetes, Node, Rust, and Terraformminimal— smaller shell and terminal setup
dotup orchestrates setup in this order:
- Initialize the platform package manager
- Install required packages from the selected profile
- Install optional packages from the selected profile
- Install macOS casks when running on macOS
- Install fonts
- Configure zsh
- Configure tmux and TPM
- Configure Vim and Neovim
Existing configs are backed up with a timestamp before being overwritten.
The generated ~/.zshrc sources ~/.dotfiles/tool/zsh/config.zsh.
Highlights:
- Starship prompt
- Oh-My-Zsh with plugin-based completion and UX improvements
- macOS Homebrew shellenv bootstrapping
- optional machine-local additions via
~/.zshrc.local
Update Oh-My-Zsh:
omz updatePrefix: Ctrl+a
Highlights:
- TPM-managed plugins
- vim-tmux pane navigation
- clipboard integration through
pbcopy,xsel,xclip, orwl-copy - optional machine-local additions via
~/.tmux.conf.local
Install tmux plugins after first setup:
tmux
# then press prefix + INeovim is bootstrapped from the LazyVim starter when ~/.config/nvim is absent or empty. If an existing non-LazyVim config is present, dotup skips installation instead of overwriting it.
Use these commands inside Neovim when needed:
:Lazy sync
:Lazy update
:Mason
:TSUpdateConfig lives at wezterm/wezterm.lua.
- Preferred font:
AestheticIosevka Nerd Font Mono - color scheme: Aesthetic Night
- pane and tab bindings are tuned to match tmux and editor navigation where possible
Copy vim/ideavimrc.vim to ~/.ideavimrc for JetBrains IDEs.
.
├── src/ # dotup Rust orchestration
├── dotup.toml # package profiles
├── zsh/ # shared zsh config
├── tmux/ # shared tmux config
├── vim/ # vim, ideavim, and neovim bootstrap assets
├── wezterm/ # terminal config
├── starship/ # prompt config
├── fish/ # fish shell config
├── tests/ # shell smoke tests
└── .github/workflows/ # CI workflows
Useful commands while iterating on the repo:
cargo test
cargo run -- --auto --dry-run --verbose
cargo run -- --doctor
bash tests/integration_test.shCI runs on macOS and Ubuntu to keep the documented support model honest.
