This repository contains my personal dotfiles for synchronization via chezmoi.
Where possible, each configuration is set up to work for Linux 🐧, macOS 26+ 🍎, and Windows 11 🪟. (OS compatibility for each product is indicated with emoji.)
Feel free to use anything here according to your needs!
Currently managed:
- 1Password 🐧 🍎 🪟
- Config Files
- Azure CLI 🐧 🍎 🪟
- Config Files
- Cargo 🐧 🍎 🪟
- Config Files
- Claude 🐧 🍎 🪟
- Config Files
- Clocker 🍎
- Notes
- Configuration is imported via script src/.chezmoiscripts/30-macos/run_onchange_defaults-importer.sh.tmpl
- Config Files
- src/.scriptdata/macos-defaults/com.abhishek.Clocker.plist
- Note this is a non-editable binary file, made via
defaults export com.abhishek.Clocker com.abhishek.Clocker.plist
- Note this is a non-editable binary file, made via
- src/.scriptdata/macos-defaults/com.abhishek.Clocker.plist
- Notes
- fzf 🐧 🍎
- Config Files
- Ghostty 🐧 🍎
- Notes
- Notification permissions are pre-granted via a configuration profile, since macOS has no supported way to grant them silently. Installed via script src/.chezmoiscripts/30-macos/run_onchange_profiles-importer.sh.tmpl
- Config Files
- Notes
- Git 🐧 🍎 🪟
- Config Files
- Folders
- src/git/gh for GitHub repos
- src/git/azdo for Azure DevOps repos
- GnuPG 🐧 🍎 🪟
- Config Files
- Go 🐧 🍎 🪟
- Config Files
- Homebrew Autoupdate 🍎
- Notes
- Notification permissions are pre-granted via a configuration profile, since macOS has no supported way to grant them silently. Installed via script src/.chezmoiscripts/30-macos/run_onchange_profiles-importer.sh.tmpl
- Config Files
- Notes
- k9s 🐧 🍎 🪟
- Config Files
- kubie 🐧 🍎
- Config Files
- macOS 🍎
- micro 🐧 🍎 🪟
- Config Files
- mise 🐧 🍎 🪟
- Config Files
- npm 🐧 🍎 🪟
- Config Files
- rustup 🐧 🍎 🪟
- Config Files
- Terminal Color Scheme
- Applied to Ghostty, Windows Terminal, and Visual Studio Code
- Generated by Root Loops
- PowerShell 🐧 🍎 🪟
- Sheldon 🐧 🍎
- Config Files
- Starship 🐧 🍎 🪟
- Stats 🍎
- Notes
- Configuration is imported via script src/.chezmoiscripts/30-macos/run_onchange_defaults-importer.sh.tmpl
- Config Files
- src/.scriptdata/macos-defaults/eu.exelban.Stats.plist
- Note this is a non-editable binary file, made via
defaults export eu.exelban.Stats eu.exelban.Stats.plist
- Note this is a non-editable binary file, made via
- src/.scriptdata/macos-defaults/eu.exelban.Stats.plist
- Notes
- Ungoogled Chromium 🍎
- Notes
- Notification permissions are pre-granted via a configuration profile, since macOS has no supported way to grant them silently. Installed via script src/.chezmoiscripts/30-macos/run_onchange_profiles-importer.sh.tmpl
- Config Files
- Notes
- UniGetUI 🪟
- Notes
- Uses an unusual model of one-file-per-setting, there are many files under the below directory
- Config Files
- Notes
- Visual Studio Code 🐧 🍎 🪟
- Notes
- Configured to support the syncing of profiles
- Config Files
- src/.chezmoidata/vscode.toml
- Defines data used to provision profiles
- src/.chezmoitemplates/vscode
- Each file in this directory defines the settings for a profile
- src/.chezmoiscripts/90-all/run_onchange_after_vscode-profiles.py.tmpl
- Performs profile provisioning and updating
- src/.chezmoidata/vscode.toml
- Notes
- VMware Workstation 🪟
- Notes
- VMware stores its session state in the same INI file as its settings, so needed settings are patched in-place via script
- Config Files
- Notes
- Windows 🪟
- Config Files
- src/dot_wslconfig
- src/AppData/Local/winget-configuration-chezmoi
- Files under this folder are part of a Winget Configuration used to declaratively configure Windows workstatesion
- Config Files
- Windows Terminal 🪟
- Zsh 🐧 🍎
- Install macOS, logging into Apple Account (unless a VM)
- Set hostname
macOS prerequisites can be automatically installed by running the below:
curl -fS https://raw.githubusercontent.com/natescherer/dotfiles/main/init-macos.sh | bash/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
eval "$(/opt/homebrew/bin/brew shellenv zsh)"
brew install chezmoi
brew install mise
mise use -g python@latest
eval "$(mise env -s zsh)"
chezmoi init --apply nateschererInstall the following tools however is appropriate for your distro:
- Starship
- Sheldon
- Mise
- Zsh (make sure to set as default shell)
Then run the below:
mise use -g python@latest
eval "$(mise env -s zsh)"
chezmoi init --apply natescherer- Sign into Windows (if you made a local account) (and if you want to)
- Install core drivers/VMware Tools/etc
- See [docs/drivers] for known core driver configs for different machines
- Ensure all Windows Updates are installed
- Open the Microsoft Store, click
Downloads, then clickCheck for updates, and install all- Repeat this step until the store no longer shows any updates
Windows prerequisites can be automatically installed by running the below in Windows Terminal:
irm https://raw.githubusercontent.com/natescherer/dotfiles/main/init-windows.ps1 | iexNOTE: If you are running Windows 11 25H2 and get a certificate error on any of the below steps, run the following in Admin Terminal to fix, then reopen a non-Admin Terminal and rerun the failed command.
winget settings --enable BypassCertificatePinningForMicrosoftStore winget upgrade Microsoft.AppInstaller --accept-source-agreements --accept-package-agreements winget settings --disable BypassCertificatePinningForMicrosoftStore winget source reset --force
Install the latest PowerShell using this command SPECIFICALLY, as the default MSIX install has sandboxing issues, see PowerShell/PowerShell#13866
winget install --id Microsoft.PowerShell --source winget --installer-type wixOnce PowerShell is installed, reopen Windows Terminal and launch a PowerShell tab instead of Windows PowerShell.
winget install --id twpayne.chezmoi -e
winget install --id jdx.mise -eRestart the shell, then run the below:
mise use -g python@latest
mise env -s pwsh | iex
chezmoi init --apply natescherer