Feel free to take what you want, but I would advise against blindly installing without reviewing.
These dotfiles are unix-first, adapted to work on Windows via WSL2.
This repo is designed around a unix-first philosophy. The core dev environment (zsh, neovim, CLI tools) targets unix, and Windows gets there via WSL2.
macOS: native apps (Ghostty, AeroSpace) --> unix backend (zsh, neovim, tmux)
Windows: native apps (WezTerm, AHK) --> WSL2 --> unix backend (zsh, neovim, tmux)
Both platforms converge on the same common/ configs for the shell and dev tools. The difference is only in the GUI layer above.
- Unix-First -- configs are written for unix. Windows uses WSL2 to run them.
- Performance-First -- preference for modern, Rust-based tools (eza, bat, ripgrep, fd).
- Easy Installation --
dotterfor symlinks,cargo-makefor setup automation.
Install Rust and cargo-make:
# Install Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Verify
rustc --version && cargo --version
# Install cargo-make
cargo install cargo-makegit clone git@github.com:msetsma/.dotfiles.git
cd .dotfiles
cargo make initOn Windows, you run init twice -- once on the Windows host for native apps, and once inside WSL2 for the dev environment:
# 1. Windows host (PowerShell/cmd) -- installs Scoop packages, WezTerm, AHK
cargo make init
# 2. Inside WSL2 -- installs zsh, oh-my-zsh, CLI tools, symlinks common/ configs
cargo make initThe repo lives on the Windows filesystem and is accessed from WSL2 via /mnt/c/Users/<you>/.dotfiles.
cargo make help # Quick reference
cargo make info # All commandscargo make init # Complete environment setup
cargo make update # Update all tools and packages
cargo make check-outdated # Check for available updates
cargo make doctor # System health checkcargo make pkg-export # Export packages
cargo make pkg-import # Import packages
cargo make pkg-cleanup # Cleanup old versions
cargo make pkg-doctor # Check for issuesPlatform-specific: brew-* (macOS), scoop-* (Windows), apt (WSL2/Linux).
dotter # Deploy dotfiles via dottercargo make pipx-list # List installed packages
cargo make pipx-export # Export to file
cargo make pipx-install # Install from filecargo make clean # Cleanup caches
cargo make info # Show all available commandsCommon tools are cross-platform. Installation methods differ by OS.
Neovim | Zsh + Oh My Zsh | tmux | Mosh | Mise | Dotter | Cargo-Make | Starship | fzf | eza | bat | ripgrep | fd | yazi | lazygit | Bottom | Ruff | Vivid | JetBrains Mono
WezTerm | AutoHotkey | Scoop
iPhone -> Mosh/Tailscale -> Windows -> WSL2 -> tmux -> Claude Code.
Push notifications: common/moshi/hook-runner.sh gates Claude Code
hooks via tmux list-clients -- pushes fire only when a Moshi client
is actually attached.
Setup:
- docs/ssh-mosh-setup-guide.md -- host SSH/Mosh/Tailscale
- common/moshi/README.md -- hook integration + token
Shell configs use common/zsh/platform.zsh to detect the runtime environment:
IS_MAC-- macOS (Darwin)IS_WSL-- WSL2 (Linux with Microsoft kernel)IS_WSL_INTEROP-- WSL2 with Windows interop enabledIS_LINUX-- generic Linux
This drives platform-specific behavior like clipboard (pbcopy vs clip.exe), URL opening (open vs wslview), and credential storage (Keychain vs env files).
- macOS: Clang (via Xcode command line tools)
- Windows: MSVC (Visual Studio Build Tools, "Desktop development with C++" workload)
- WSL2/Linux: GCC (
sudo apt install build-essential)
The repo uses .gitattributes to enforce LF line endings for shell scripts. This prevents issues when the repo lives on the Windows filesystem and is accessed from WSL2 via /mnt/c.
Dotter uses hostname-based machine configs (.dotter/<hostname>.toml). If your WSL2 hostname matches your Windows hostname, set a distinct one in /etc/wsl.conf:
[network]
hostname = mitch-wsl