.zshrc— zsh config via oh-my-zsh with zsh-autosuggestions and zsh-syntax-highlighting (vendored as git submodules)starship.toml— prompt config for starship, symlinked to~/.config/starship.toml.vimrc— vim settings, with vim-plug (vendored as a git submodule) as the plugin manager.gitconfig/.gitignore_global— git config, installed to~/.gitconfigand referenced viacore.excludesfile.local/share/fonts/NerdFonts— Nerd Font, symlinked into~/.local/share/fonts
sudo apt install git -y
git clone --recursive https://github.com/phdelodder/dotfiles.git .dotfiles
cd .dotfiles
./bootstrap.sh
bootstrap.sh is safe to re-run (e.g. after pulling changes) — it installs
zsh/vim/starship via apt-get if they're missing (Debian/Ubuntu only;
on other systems, install them yourself first), symlinks config
files/directories into place, and switches your default shell to zsh.
~/.gitconfig is only set up on the first run — once it exists, re-running
leaves it alone so any edits you've made since aren't overwritten.
Options:
-n, --git_name <name> Set the git user.name (skips the interactive prompt)
-e, --git_email <email> Set the git user.email (skips the interactive prompt)
--chsh Skip changing the default shell to zsh
bootstrap.sh is safe to run non-interactively as long as -n/--git_name
and -e/--git_email are always passed — without a TTY it fails fast with
a clear error instead of hanging on the interactive prompt. Package
installs (apt-get) run with DEBIAN_FRONTEND=noninteractive and skip
sudo automatically when already running as root, so it works the same
whether invoked directly as the target user or via a become: true task.
The one thing worth handling at the Ansible layer instead: chsh (called
unless --chsh is passed) changes the shell of whichever user the script
is running as, not a named target user. If your play runs as root via
become, pass --chsh to skip it and set the login shell with Ansible's
own user module (shell: /usr/bin/zsh) instead.
See MAINTAINING.md for bumping vendored submodules to their latest upstream versions.