A dotfiles configuration using chezmoi.
-
A mostly consistent cross-platform terminal emulator using Wezterm
-
A mostly consistent cross-platform terminal multiplexer using tmux and psmux (Windows)
- Android and non-GUI Linux use tmux directly
-
A consistent nerd font, Caskaydia Cove
-
A consistent cross-shell prompt using Starship
-
A mostly consistent cross-shell Vi mode using ble.sh and PSReadLine
- PSReadLine lacks many Vi mode features, but you can edit the current command externally
-
Bash autocomplete, syntax highlighting, and more with ble.sh
-
Latest vanilla Vim with autocomplete, syntax highlighting, LSP support, and more
-
Native cross-platform SSH agent configurations
- macOS uses Keychain to persist restarts
-
Consistent cross-tool AI agent preferences and skills
-
Windows Subsystem for Linux (WSL) support
-
SSH agent forwarding to host
-
Git GPG forwarding to host (no global forwarding yet)
-
Shellception:
win pwsh->wsl bash->wsl pwsh
-
-
Only Android, Windows, Linux, and macOS platforms are supported
-
I don't use iOS, and it's too limited for terminal emulation (AFAIK)
-
Linux support only tested on Ubuntu WSL (for now)
-
-
Only Bash and PowerShell (
pwsh.exe) shells are supported-
Bash is available almost everywhere, and ble.sh makes it just as good as other shells
-
CMD and Windows PowerShell are effectively in maintenance mode. Long live PowerShell!
-
On macOS, ZSH is replaced by the latest Bash for consistency
-
bootstrap.ps1 installs the prerequisites, provisions an SSH
key, and runs chezmoi init --apply for you. Run it from Windows PowerShell —
pwsh is one of the things it installs:
irm https://raw.githubusercontent.com/gtbuchanan/dotfiles/main/bootstrap.ps1 | iexIt prompts for the host type and is safe to re-run after a partial failure.
Personal hosts expect Bitwarden Desktop to be signed in, unlocked, and serving its SSH agent before you start, since that agent is where the SSH key comes from. Work hosts pull the key from Dashlane and prompt you to authenticate, plus once for elevation to enable the SSH agent service. The key is streamed into that agent rather than written to disk, and the agent keeps it across reboots, so the vault is only read once per host.
iex can't forward parameters, so pass them through a scriptblock instead:
$s = irm https://raw.githubusercontent.com/gtbuchanan/dotfiles/main/bootstrap.ps1
& ([scriptblock]::Create($s)) -HostType ewn -ResetWinGet-ResetWinGet applies the WinGet reset workaround for winget's
intermittent RPC errors.
Afterward, on work hosts, sign in to the Microsoft 365 CLI:
m365 login --appId <your-ewn-app-id> --tenant ewn.com --authType browserNo bootstrap script yet. Install the prerequisites first:
- Chezmoi
- macOS:
brew install chezmoi - Ubuntu/Snap:
snap install --classic chezmoi
- macOS:
- Chezmoi Modify Manager: Unzip release and add to PATH
- macOS:
xattr -d com.apple.quarantine "$HOME/bin/chezmoi_modify_manager"
- macOS:
- Dashlane CLI (Work only):
brew install dashlane/tap/dashlane-cli
Then:
-
dcli sync(Work only) -
Ensure an SSH key is available to git —
--sshclones over SSH, and the git-repo externals authenticate over SSH mid-apply -
chezmoi init --apply --ssh gtbuchananThis first connection also trusts github.com's host key, which the SSH externals then rely on (gist.github.com via the
HostKeyAliasin~/.ssh/config).
WinGet intermittently fails with RPC errors. To retry from the repo root
(cmcd):
winget configure -f dist/winget.yaml --suppress-initial-details --accept-configuration-agreementsAlternatively, clear the script cache and re-run chezmoi apply:
chezmoi state delete-bucket --bucket=scriptState