Set up your development environment in minutes and keep it consistent across every machine. Dotfiles is a crossβplatform shell distribution managed by Chezmoi that works on macOS, Linux, and WSL. It is idempotent by design: run it once or a hundred times, and the result is always the same.
Git + templates + guarded scripts = a reproducible shell.
- Why dotfiles
- Safety
- Get started
- Discover
- Install details
- Make it yours
- Reference
- How it works
- Roadmap
- Contribute
- Changelog
- License
Dotfiles takes an infrastructureβoriented approach to managing your shell. It is designed for developers who work across multiple machines and value daily usability, reproducibility, and auditability.
- The Stack. Zsh, Neovim, tmux, and AI CLI tools configured with sane defaults so you can start working immediately.
- Unified Control. The
dotCLI wraps common workflows such as syncing, upgrading, and managing secrets. - Safety First. Every system or security change requires explicit optβin.
- Clean Slate. Source files, generated configs, and system state stay cleanly separated.
This is infrastructure, not an adβhoc shell script.
- No destructive actions without explicit optβin.
- No background daemons install automatically.
- No system settings change by default.
- Systemβlevel behavior requires explicit optβin through environment variables.
- Dotfiles logs all privileged actions to
~/.local/share/dotfiles.log.
Important
The installer automatically backs up any existing dotfiles that chezmoi will overwrite (to ~/.dotfiles.bak.<timestamp>/). It bootstraps chezmoi and applies this repo. OS packages install through Chezmoi hooks during the first apply.
# Works on macOS, Linux, and WSL
sh -c "$(curl -fsSL https://raw.githubusercontent.com/sebastienrousseau/dotfiles/v0.2.486/install.sh)"
exec zshFor nonβinteractive installs (servers and CI):
DOTFILES_NONINTERACTIVE=1 sh -c "$(curl -fsSL https://raw.githubusercontent.com/sebastienrousseau/dotfiles/v0.2.486/install.sh)"- Installation Guide β Prerequisites and supported platforms.
- Operations Guide β Common workflows and platform notes.
- Security Guide β Hardening matrix and logging.
- Secrets Guide β Age setup and encrypted files.
- Tools Catalog β Core tools and optional utilities.
- Dot Utils β Aliases and dot CLI helpers.
- Troubleshooting β Fixes for common issues.
Prerequisites
- Required:
git,curl - Optional: Homebrew (macOS),
apt-get(Linux/WSL), Nix (toolchain)
Update
dot updateNonβinteractive apply
DOTFILES_NONINTERACTIVE=1 dot applyRun dot --help or dot <command> --help for inline documentation.
| Command | Description | Category |
|---|---|---|
dot apply |
Apply dotfiles (chezmoi apply) | Core |
dot sync |
Alias of apply | Core |
dot update |
Pull latest changes and apply | Core |
dot add |
Add a file to chezmoi source | Core |
dot diff |
Show chezmoi diff (excludes scripts) | Core |
dot status |
Show configuration drift | Core |
dot remove |
Safely remove a managed file | Core |
dot cd |
Print source directory path | Core |
dot upgrade |
Update flake, plugins, and dotfiles | Core |
dot edit |
Open chezmoi source in your editor | Core |
dot docs |
Show repo README | Core |
dot --version |
Show version information | Core |
dot help |
Show help | Core |
dot drift |
Drift dashboard (chezmoi status) | Diagnostics |
dot history |
Shell history analysis | Diagnostics |
dot doctor |
Check system health and configuration | Diagnostics |
dot verify |
Post-merge verification (dot doctor, dot status, chezmoi diff) |
Diagnostics |
dot health |
Comprehensive health dashboard (37 checks) | Diagnostics |
dot security-score |
Security assessment with grading | Diagnostics |
dot benchmark |
Shell startup benchmark (--detailed, --profile) |
Diagnostics |
dot restore |
Restore from backup or git ref | Diagnostics |
dot theme |
Switch terminal theme (dark/light) | UX |
dot wallpaper |
Apply a wallpaper from your library | UX |
dot keys |
Show keybindings catalog | UX |
dot mcp |
Inspect MCP server security and configuration | UX |
dot learn |
Interactive tour of tools (requires gum) |
UX |
dot fonts |
Install Nerd Fonts | UX |
dot sandbox |
Launch a safe sandbox preview | Tools |
dot tools |
Show tools or install through Nix | Tools |
dot tools install |
Enter Nix development shell | Tools |
dot new |
Create a new project from a template | Tools |
dot log-rotate |
Rotate ~/.local/share/dotfiles.log |
Tools |
dot secrets-init |
Initialise age key for secrets | Secrets |
dot secrets |
Edit encrypted secrets | Secrets |
dot secrets-create |
Create an encrypted secrets file | Secrets |
dot ssh-key |
Encrypt an SSH key locally with age | Secrets |
dot backup |
Create a compressed backup of your home directory | Security |
dot firewall |
Apply firewall hardening (optβin) | Security |
dot telemetry |
Disable OS telemetry (optβin) | Security |
dot dns-doh |
Enable DNSβoverβHTTPS (optβin) | Security |
dot encrypt-check |
Check disk encryption status | Security |
dot lock-screen |
Enforce lockβscreen idle settings (optβin) | Security |
dot usb-safety |
Disable automount for removable media | Security |
These utilities are installed to ~/.local/bin/:
| Tool | Description |
|---|---|
jsonv |
JSON validator and formatter |
yamlv |
YAML validator |
epoch |
Unix timestamp converter |
b64 |
Base64 encoder/decoder |
jwt |
JWT token decoder |
hex |
Hex viewer/converter |
regex |
Regex tester |
lorem |
Lorem ipsum generator |
uuid |
UUID generator |
hash |
MD5/SHA hash calculator |
myip |
Show public/local IP addresses |
kill-port |
Kill process by port |
extract |
Universal archive extraction |
update |
Update all system packages |
Examples
# Initialise secrets (prints a public key)
DOTFILES_NONINTERACTIVE=1 dot secrets-init
# Output: Age key created at ~/.config/chezmoi/key.txtThese scripts are optβin and run only when you set the matching environment variable.
All security changes are logged to ~/.local/share/dotfiles.log.
| Script | macOS | Linux |
|---|---|---|
dot firewall |
Enables macOS firewall and stealth mode via socketfilterfw |
Configures UFW defaults and OpenSSH allow |
dot telemetry |
Writes DiagnosticMessagesHistory.plist flags |
Disables whoopsie, apport, popularity-contest |
dot dns-doh |
No system change (browserβlevel only) | Enables DoH via resolvectl with Cloudflare DNS |
dot lock-screen |
com.apple.screensaver defaults and idleTime |
GNOME gsettings lock and idle timeout |
dot usb-safety |
No system change (manual UI) | GNOME gsettings automount off |
dot encrypt-check |
Reads FileVault status via fdesetup |
Detects LUKS via lsblk |
Nix is optional. The repo does not install the Nix daemon.
- Use
nix developto enter a reproducible shell environment. - Use
dot toolsto see the curated utilities overview. - No toggle replaces Homebrew or Apt with Nix automatically.
See docs/INSTALL.md for prerequisites, supported platforms, and the full install flow.
If Mermaid does not render, the flow is: install.sh β Chezmoi β ~/.dotfiles β ~/.config + ~/.local.
flowchart LR
A["install.sh"] --> B["Chezmoi"]
B --> C["~/.dotfiles (source)"]
B --> D["~/.config + ~/.local (targets)"]
E["dot CLI"] --> B
E --> F["scripts/*"]
.zshenv ββΆ .zshrc ββΆ rc.d/{10..50} ββΆ shell/{00,05,40,50,90} ββΆ [precmd: 91-lazy] ββΆ tool init
β β β β β β
β β β β β ββ atuin
XDG zinit options, paths, safety, tool-specific ββ starship
PATH plugins lazy fnm/nvm functions, aliases (deferred) ββ zoxide
core aliases (eager) ββ fzf
Core aliases (~40KB) load at startup. Tool-specific aliases (~137KB) load after the first prompt via a precmd hook β keeping shell startup fast while still providing full alias coverage. See docs/ARCHITECTURE.md for the full startup sequence and ordering conventions.
Repository Layout
~/.dotfiles/
βββ dot_config/ # Maps to ~/.config/ (app configs)
β βββ nvim/ # Neovim config (Lua)
β βββ zsh/ # Zsh config (modular)
β βββ tmux/ # Tmux config
β βββ shell/ # Shell logic (aliases, functions, paths)
β βββ wezterm/ alacritty/ kitty/ ghostty/
β βββ btop/ fastfetch/ atuin/ yazi/ ...
β βββ docker/ containers/ ...
βββ dot_local/ # Maps to ~/.local/ (CLI tools)
β βββ bin/ # dot CLI and helpers
βββ dot_etc/ # System configs (sudoers, sysctl, Chrome policies; may require sudo)
βββ dot_ssh/ # SSH config templates
βββ templates/ # Project scaffolds used by `dot new`
βββ scripts/ # Install, security, theme, diagnostics
βββ install/ # Chezmoi run_onchange and run_before hooks
βββ nix/ # Optional Nix shell environment
βββ docs/ # Guides, keys, roadmap, architecture
βββ install.sh # Bootstrap installer
Track progress on GitHub Issues and Milestones.
Please read CONTRIBUTING.md before opening a pull request.
For security issues, see SECURITY.md.
See CHANGELOG.md.
This project is licensed under the MIT License. See LICENSE.
Some bundled thirdβparty dependencies are licensed under GPLβ3.0; the LICENSE file lists them explicitly.
π¨ Designed by Sebastien Rousseau π Engineered with Euxis β Enterprise Unified eXecution Intelligence System