Personal dotfiles managed with chezmoi, with bootstrap scripts for Linux and Windows.
# 1) Install/apply dotfiles directly
chezmoi init --apply ghaith/dotfiles
# or bootstrap from curl
bash -c "$(curl -fsSL https://raw.githubusercontent.com/ghaith/dotfiles/main/install.sh)"
# 2) Open a new shell and verify node/pi
node -v && pi --helpThis repo installs and configures:
- shell:
zsh, shared shell config forbash+zsh - editor/tools:
neovim,helix,ripgrep,fd,fzf,bat,eza,zoxide,starship,atuin,git-delta - language/runtime:
go,rust,fnm+ Node LTS - pi agent:
@mariozechner/pi-coding-agent - fonts/themes helpers: Nerd Fonts, tmux catppuccin plugin, fuzzel theme clone
install.sh– Linux bootstrap (packages + fnm/node + pi + chezmoi init/apply)install.ps1– Windows bootstrap (winget/choco + fnm/node + pi + chezmoi init/apply).chezmoiscripts/run_once_before_00-bootstrap.sh– runs bootstrap when initialized through chezmoirun_after_install-pi-extensions.sh– installs npm deps for pi extensionsrun_after_install-tmux-catppuccin.sh– installs tmux catppuccin plugindot_*,private_dot_*,dot_config/– managed dotfiles/templates
chezmoi init --apply ghaith/dotfilesWhat happens:
- chezmoi clones/applies dotfiles
.chezmoiscripts/run_once_before_00-bootstrap.shcallsinstall.sh --from-chezmoi- packages and runtimes are installed
- shell/npm/fnm/pi setup is configured
bash -c "$(curl -fsSL https://raw.githubusercontent.com/ghaith/dotfiles/main/install.sh)"If the local dotfiles source directory does not exist, install.sh automatically falls back to:
https://github.com/ghaith/dotfiles.git
and runs chezmoi init --apply against that repo.
--from-chezmoi Run bootstrap tasks without calling `chezmoi init`
--skip-chezmoi-init Alias for --from-chezmoi
--source <path|repo> Override chezmoi source (local path or remote repo URL)
Also supported via env var:
CHEZMOI_SOURCE=<path|repo>
Examples:
./install.sh --source ~/src/dotfiles
./install.sh --source https://github.com/ghaith/dotfiles.git
CHEZMOI_SOURCE=~/src/dotfiles ./install.shfnm is initialized in shared shell config with:
fnm env --shell zsh --use-on-cd(zsh)fnm env --shell bash --use-on-cd(bash)
Bootstrap installs Node LTS and sets it as default:
fnm install --lts
fnm default lts-latestThis ensures node/npm are available for pi after install.
⚠️ Note: the Windows bootstrap path exists, but is currently not tested.
Run PowerShell as Administrator:
./install.ps1It uses winget for most packages, Chocolatey for Nerd Fonts, then initializes chezmoi.
From an existing machine:
chezmoi update
chezmoi applyPreview changes first:
chezmoi diff- Check node availability:
fnm currentnode -vnpm -v
- Re-open shell after first install (
exec zshor new terminal) - If chezmoi source is wrong, pass explicit source:
./install.sh --source https://github.com/ghaith/dotfiles.git