| Alacritty running neovim inside tmux | Firefox and mpv |
|---|---|
![]() |
![]() |
One-liners below pull the chezmoi binary, git clone --recurse-submodules this repo into ~/.local/share/chezmoi, bootstrap Nix (Linux) or Scoop (Windows), install software (including chezmoi itself), apply configuration, then attempt to remove the bootstrap binary.
Run with
--exclude=encryptedto skip encrypted files;
--exclude=externalsto skip external downloads;
--promptDefaultsto skip interactive init prompts.
sh -c "$(curl -fsLS get.chezmoi.io)" -- init --apply --purge-binary 0x0003Init prompts
- `has_root`: boolean; default true - whether you have sudo/root access
- `use_home_manager`: boolean; default true - whether to set up home-manager (only prompted if `has_root` is true)
Note
Windows needs a special setting to enable creation of symlinks 🙄
gpedit.msc -> Computer Configuration -> Windows Settings -> Security Settings -> Local Policies -> User Rights Assignment -> Create symbolic links -> click "Add User or Group" -> type your username -> click "Check Names" -> Apply -> REBOOT
Windows will not purge binary, but it will echo its location to stdout at the end.
iex "&{ $(irm 'https://get.chezmoi.io/ps1') } -- init --apply --purge-binary 0x0003"Init prompts
- `create_symlinks`: boolean; default true - whether to enable creation of symlinks (see note above)
- `use_scoop`: boolean; default true - whether to install packages via Scoop
Source tree showing only things of interest.
. # repo root
├── .chezmoiversion # minimum chezmoi version required to interpret the source state
├── .chezmoiroot # sets chezmoi root to home/
└── home/
├── .chezmoi.toml.tmpl # init-time config
├── .chezmoiignore.tmpl # OS filtering + git submodule exclusions
├── .chezmoiscripts/
│ ├── linux
│ │ ├── run_once_before_01-home-manager.sh.tmpl # bootstrap Nix and home-manager
│ │ ├── run_once_after_01-post-home-manager.sh.tmpl # extra root-owned system configuration
│ │ ├── run_once_after_02-wsl-config.sh.tmpl # populate /etc/wsl.conf
│ │ └── run_once_after_03-wsl-dns.sh.tmpl # create a service for wsl NAT networking
│ └── windows
│ ├── run_once_before_01-install-scoop.ps1.tmpl # bootstrap scoop and add buckets
│ ├── run_onchange_after_02-install-packages.ps1.tmpl # scoop install packages from YAML
│ └── run_once_after_01-configure-scoop.ps1.tmpl # scoop config
├── .chezmoidata/
│ ├── pkgs/windows.yaml # scoop packages
│ └── themes # colorschemes, applied through templates
├── secrets/ # inline age stubs (not managed)
├── dot_config/
│ ├── submodule_nvim/ # git submodule (not managed)
│ ├── symlink_nvim.tmpl # creates a symlink referencing the submodule above
│ ├── submodule_vim/ # ^
│ ├── symlink_vim.tmpl # ^
│ ├── submodule_home-manager/ # ^
│ └── symlink_home-manager.tmpl # ^
├── submodule_scripts/ # ^
├── symlink_scripts.tmpl # ^
├── submodule_ahk/ # ^
└── symlink_ahk.tmpl # ^
| Source dir | Symlink template | Target |
|---|---|---|
| /dot_config/submodule_nvim | dot_config/symlink_nvim.tmpl |
~/.config/nvim |
| /dot_config/submodule_vim | dot_config/symlink_vim.tmpl |
~/.config/vim |
| /dot_config/submodule_home-manager | dot_config/symlink_home-manager.tmpl |
~/.config/home-manager |
| /submodule_scripts | /symlink_scripts.tmpl |
~/scripts |
| /submodule_ahk | /symlink_ahk.tmpl |
~/ahk |
The symlink templates contain just the source path, e.g. {{ .chezmoi.sourceDir }}/dot_config/submodule_nvim. Each target path gets an entry in .chezmoiignore.tmpl so chezmoi doesn't descend into the symlink.
Chezmoi looks for age key at ~/.config/age/keys.txt.
- Whole-file (
encrypted_prefix): auto-decrypts on apply. - Inline (
home/secrets/*.age): stubs consumed in templates via{{ decrypt (include "secrets/<name>.age") | trim -}}.

