bootstrap v2026.09.16
Windows 1.39.0
Added
-
TerminalSetPwshDefaultin theShellmanifest (default$true).
merge-terminal-settings.ps1now writes Windows Terminal's
defaultProfileto the PowerShell 7 profile guid it already creates, so
a new terminal tab opens PowerShell 7 instead of whatever Windows
Terminal picked on its own. -
F2 flips PSReadLine predictions to
ListViewfor the current line -
see Changed below for whyInlineViewis now the default.F2runs
SwitchPredictionView, so the full dropdown of matches is still one key
away without it appearing unprompted.
Changed
-
PSReadLine
PredictionViewStyle:ListView→InlineView.ListView
rendered a dropdown of every history/plugin match for whatever was in the
buffer, typed or pasted - pasting a multi-line command flooded the
terminal with a page of unrelated history entries.InlineViewshows one
greyed suggestion on the current line instead, the same shape as zsh's
zsh-autosuggestionson the other two platforms. -
Prompt renders on one line.
starship.toml(shared by all three
platforms) had a hardcoded leading newline informat, on top of
add_newline = false, forcing a blank line above every prompt regardless
of that setting. Removed, so the prompt is one dense line like a typical
Mac/Linux shell.
Linux 1.32.0
Fixed
-
Temp files no longer survive an interrupted run. Every
mktempwent
through a bare command substitution and was cleaned up only on the happy
path, so a Ctrl-C between themktempand themvleft the half-written
file behind - two~/.zshrc.bootstrap.XXXXXXfiles from interrupted runs
were sitting in$HOMEon this machine when this was found. Every temp path
now goes throughmktemp_tracked, andtrapon EXIT, INT and TERM removes
whatever is still there; INT and TERM re-exit with 130 and 143 rather than
resuming where they were interrupted.mktemp_trackedassigns to a variable named by its first argument instead of
printing the path: a command substitution would run the array append in a
subshell, and the parent would forget the path - which is the whole point.
Added
-
~/go/binonPATH.go installand the VS Code Go extension put
gopls,dlvandstaticcheckthere, and nothing was adding it - the
tools installed fine and then were not onPATH. Unrelated to wherego
itself comes from; it was missing before this release too. -
~/.dotnet/toolsonPATH, next to the existingDOTNET_ROOTline.
dotnet tool install -ginstalls there. macOS gets this from the SDK
installer's/etc/paths.dentry and Windows from the installer's user PATH;
only Linux was missing it. -
node, go and java come from mise on all three platforms, declared once in
mise/tools.confat the repo root. They used to come from three different
places - brew on macOS, winget on Windows, and nothing at all on Linux,
wheregrep -cE "nodejs|golang-go|openjdk" packages.confreturned 0 and a
fresh machine simply had no Node until somebody ranmise use -gby hand.
mise was installed everywhere and managing nothing:mise ls -gwas empty.mise use -gmerges into the user's global config rather than replacing it,
so a tool added by hand survives a bootstrap run. Removing the packages from
the manifests does not uninstall them -brew uninstall node go,
brew uninstall --cask microsoft-openjdk@21and the winget equivalents are
yours to run when you want the disk back.Python is deliberately not in the list: OS packages link against the system
python3, and a mise shim in front of it breaks them. -
The mise shims directory on
PATHin the zsh fragment.mise activate
covers interactive shells,JAVA_HOMEincluded, but never sees a
non-interactivessh host command, a cron job, or a Makefile an IDE runs.
Activation still takes precedence where both apply. -
Seven git defaults, set the same way the delta and difftastic keys
already are - only where the key is unset, so an existing value stays:
push.autoSetupRemote(push a new branch without the--set-upstream
dance),fetch.prune(stop completing months of deletedorigin/*),
diff.algorithm=histogram(better on moved and reindented code, and it is
what delta and difftastic then render),rebase.autoStash,
column.ui=auto,merge.conflictStyle=zdiff3(the common ancestor in a
conflict, not just the two endings) andtag.sort=-version:refname
(v1.10.0abovev1.9.0).The tag field is
version:refname; a plain-versionis rejected at use
withfatal: unknown field name: version. -
lazygitinRELEASES. A git TUI: stage hunks, rebase, stash and
branch without leaving the terminal. A release binary, not an apt package -
Debian's trails upstream. Its assets arelinux_x86_64/linux_arm64, so the
entry uses{GORELEASER_ARCH}rather than the{ARCH}that expands to
amd64. -
Catppuccin Mocha for bat, delta and fzf. The palette was already deployed
for starship, ghostty and atuin, and stopped at the three tools you read
output in:batrendered in its own default theme,deltain bat's, and
fzfin its own colours.bat/configandbat/themes/Catppuccin Mocha.tmThemeat the repo root,
deployed to bat's config directory by a new bat config phase - the
same shared-file shapestarship.tomlandatuin/already use. bat since
0.24 reads the themes directory at startup, so thebat cache --build
fallback is a no-op on anything current.delta.syntax-theme=Catppuccin Mochain the git config phase, set only
when bat is installed: delta highlights through bat's theme store, so a
diff and abatof the same file now match.FZF_DEFAULT_OPTSwith the Catppuccin colours. fzf-tab shells out to fzf
and inherits them.
-
MANPAGERthrough bat, so man pages get the same theme.col -bx
strips the overstrike backspaces groff emits for bold and underline, which
bat would otherwise render literally. Set forbatcatas well as
bat, the same way thecatalias above it already is - Debian's apt
package installs the binary under that name.
macOS 1.34.0
Fixed
-
Temp files no longer survive an interrupted run. Every
mktempwent
through a bare command substitution and was cleaned up only on the happy
path, so a Ctrl-C between themktempand themvleft the half-written
file behind - two~/.zshrc.bootstrap.XXXXXXfiles from interrupted runs
were sitting in$HOMEon this machine when this was found. Every temp path
now goes throughmktemp_tracked, andtrapon EXIT, INT and TERM removes
whatever is still there; INT and TERM re-exit with 130 and 143 rather than
resuming where they were interrupted.mktemp_trackedassigns to a variable named by its first argument instead of
printing the path: a command substitution would run the array append in a
subshell, and the parent would forget the path - which is the whole point.
Added
-
macOS note on the mise JDK: it is not registered with
/usr/libexec/java_home, so the JetBrains IDEs, Android Studio and anything
else that auto-detects a JDK need the path once -
~/.local/share/mise/installs/java/temurin-21, a symlink mise maintains
across patch bumps. Shells are unaffected:mise activateexports
JAVA_HOME. Registering it properly would mean asudosymlink into
/Library/Java/JavaVirtualMachines, and this script does not use sudo. -
~/go/binonPATH.go installand the VS Code Go extension put
gopls,dlvandstaticcheckthere, and nothing was adding it - the
tools installed fine and then were not onPATH. Unrelated to wherego
itself comes from; it was missing before this release too. -
node, go and java come from mise on all three platforms, declared once in
mise/tools.confat the repo root. They used to come from three different
places - brew on macOS, winget on Windows, and nothing at all on Linux,
wheregrep -cE "nodejs|golang-go|openjdk" packages.confreturned 0 and a
fresh machine simply had no Node until somebody ranmise use -gby hand.
mise was installed everywhere and managing nothing:mise ls -gwas empty.mise use -gmerges into the user's global config rather than replacing it,
so a tool added by hand survives a bootstrap run. Removing the packages from
the manifests does not uninstall them -brew uninstall node go,
brew uninstall --cask microsoft-openjdk@21and the winget equivalents are
yours to run when you want the disk back.Python is deliberately not in the list: OS packages link against the system
python3, and a mise shim in front of it breaks them. -
The mise shims directory on
PATHin the zsh fragment.mise activate
covers interactive shells,JAVA_HOMEincluded, but never sees a
non-interactivessh host command, a cron job, or a Makefile an IDE runs.
Activation still takes precedence where both apply. -
Seven git defaults, set the same way the delta and difftastic keys
already are - only where the key is unset, so an existing value stays:
push.autoSetupRemote(push a new branch without the--set-upstream
dance),fetch.prune(stop completing months of deletedorigin/*),
diff.algorithm=histogram(better on moved and reindented code, and it is
what delta and difftastic then render),rebase.autoStash,
column.ui=auto,merge.conflictStyle=zdiff3(the common ancestor in a
conflict, not just the two endings) andtag.sort=-version:refname
(v1.10.0abovev1.9.0).The tag field is
version:refname; a plain-versionis rejected at use
withfatal: unknown field name: version. -
lazygitin thecligroup. A git TUI: stage hunks, rebase, stash and
branch without leaving the terminal. Same tool on all three platforms, so it
gets acli-parity.confrow andtools/parity.shchecks it. -
Catppuccin Mocha for bat, delta and fzf. The palette was already deployed
for starship, ghostty and atuin, and stopped at the three tools you read
output in:batrendered in its own default theme,deltain bat's, and
fzfin its own colours.bat/configandbat/themes/Catppuccin Mocha.tmThemeat the repo root,
deployed to bat's config directory by a new bat config phase - the
same shared-file shapestarship.tomlandatuin/already use. bat since
0.24 reads the themes directory at startup, so thebat cache --build
fallback is a no-op on anything current.delta.syntax-theme=Catppuccin Mochain the git config phase, set only
when bat is installed: delta highlights through bat's theme store, so a
diff and abatof the same file now match.FZF_DEFAULT_OPTSwith the Catppuccin colours. fzf-tab shells out to fzf
and inherits them.
-
MANPAGERthrough bat, so man pages get the same theme.col -bx
strips the overstrike backspaces groff emits for bold and underline, which
bat would otherwise render literally.