bootstrap v2026.09.10
Windows 1.31.0
Added
-
Bitwarden.Bitwardenin theappsgroup. The desktop app: the vault
outside the browser, and what lets the browser extension unlock with
Windows Hello rather than the master password. Autofill itself comes from
the extension, which winget cannot install - it comes from the Chrome Web
Store.Bitwarden.CLIis deliberately not added: it only pays off once secrets
are being copied into a terminal by hand, and it is one line away when
that happens. -
A
networkgroup:FujiApple.Trippyandorf.gping. Per-hop loss and
latency in one live view, and a ping graph for one host or several. Tracing
needs an elevated shell on Windows, so the profile runstripthrough
gsudo.nmap is deliberately absent: winget's
Insecure.Nmapis stuck at 7.80, from
2019. -
Flameshot.Flameshotin thecreativegroup, beside ScreenToGif.
Screenshots annotated before they are copied: arrows, boxes, numbered
markers, blur, or pinned on screen. Windows 11 still hands the Print Screen
key to Snipping Tool until that is switched off in Settings > AccessibilityKeyboard.
-
rsteube.Carapaceinshell. Completion for 1000+ CLIs through one
engine - flags and subcommands for kubectl, gh, az, helm and the rest, where
PowerShell otherwise offers file names. git is excluded
(CARAPACE_EXCLUDES=git) and stays with posh-git. Colour is off
(CARAPACE_COLOR=0): PSFzf's Tab list prints completion labels verbatim,
and carapace's colour codes showed up there as raw escape sequences.The trailing space carapace puts on each value is off
(CARAPACE_NOSPACE=*): PSFzf quotes any completion containing whitespace and
adds a space of its own, so pickinggetfromkubectl <Tab>inserted
kubectl "get "and kubectl answeredunknown command "get ".PowerShell 7 only. Windows PowerShell 5.1 drops empty arguments to native
programs, including the''carapace's completer passes for the word under
the cursor; carapace answers[], its script throws on that, and 5.1 fell
back to file names after a wasted carapace run on every Tab. -
astral-sh.uvindev. Python packages and venvs; mise still picks the
Python version. -
kforkubectlin the profile. kubecolor, which the Linux and macOS
fragments aliaskubectlto, has no winget package. -
Wilfred.difftasticincli, and git settings for it. A structural
diff: it compares syntax, so a reformat is not a change. delta stays the
pager forgit diff,show,logandadd -p; difftastic is asked for
per command:git difftoolorgit dft(diff.tool=difftastic, no prompt, paged)git ddiff,git dshow <rev>,git dlog- difftastic in place of the
patch
Never
diff.externalglobally: its output is not a patch, so
git diff > x.patchandgit applywould stop working. delta passes
difftastic's output through byte for byte, so the pager needs no exception.
Like delta's, each key is set only when unset, andGit.DifftasticEnabled
turns them off.toolslists it, from its new row intools/cli-parity.conf. -
git sdiff- the delta view side by side
(-c core.pager='delta --side-by-side' diff), set with delta's keys. -
Completion for the CLIs carapace has no completer for.
- stern and yq: carapace specs in
carapace/specs/, deployed to
%APPDATA%\carapace\specs(or an absoluteXDG_CONFIG_HOME) through
Deploy-ManagedFile. Both are Cobra apps, so each spec is one line handing
Tab to the tool's own__complete. - uv: its PowerShell script is ~750 KB and took ~200 ms to load, so the
profile registers a stub that loads it on the first Tab afteruvand
answers through it from then on (8 ms a Tab afterwards). The real completer
is captured by shadowingRegister-ArgumentCompleterwhile the script runs,
because a completer cannot re-run completion from inside itself. - mise: loaded the same way, with a fix. mise 2026.9's script cuts the
command at the cursor withExtent.Text, which ends at the last word, so
mise <Tab>completed the wordmiseagain and offered file names. The
profile pads the text out to the cursor first;mise <Tab>now lists its
99 subcommands.
- stern and yq: carapace specs in
-
ONLYOFFICE.DesktopEditorsinapps. An office suite built around
.docx, .xlsx and .pptx, so files from Microsoft Office keep their layout more
often than in LibreOffice. AGPL-3.0: free for personal and company use.
Changed
-
atuin/config.tomlpoints sync at the self-hosted server
(sync_address = "http://192.168.50.6:8087") instead of atuin's own
api.atuin.shdefault. That isroles/atuinon raspberrypi_master in
mpostument/raspberry-setup, on the house LAN only - 8087 because the
OpenTelemetry collector holds 8888 there.Sync is still off until you run
atuin register(oratuin loginwith the
keyatuin keyprints): this says where, not whether. Off that network a
machine records locally and syncs when it is back.
Removed
-
OpenTofu.Tofufrom thedevgroup - mise owns OpenTofu, as on Linux and
macOS. Terraform projects pin a required version, and a wingettofu
upgraded on every daily run drifts from it; mise switches version per
directory. The other winget runtimes stay: Windows tooling looks for
Python, Node and Java where their installers put them.Run once:
mise use -g opentofu@latest. The bootstrap installs what the
manifest lists and never uninstalls, so an existing copy stays until
winget uninstall OpenTofu.Tofu.
Fixed
-
Tab never opened fzf.
Set-PsFzfOption -TabExpansiononly reaches git,
through PowerShell's legacyTabExpansionhook; it does not bind the key.
Tab stayed onMenuComplete, which prints a flat, unselectable list once the
menu outgrows the window -kubectl <Tab>, 46 described subcommands, did.
Tab is now bound toInvoke-FzfTabCompletion: an fzf list for every command,
a single match inserted directly. Ctrl+Space is stillMenuComplete. -
git settings with double quotes in them lost the quotes under Windows
PowerShell 5.1, which hands"inside an argument to a native program
unescaped.mergetool.unityyamlmerge.cmdwas stored as
... merge -p $BASE $REMOTE $LOCAL $MERGED, never matched what the script
wanted, and was rewritten on every run. Quotes are now escaped for git's
parser on 5.1 and 7.0-7.2; 7.3+ already passes them intact.
Linux 1.26.0
Changed
-
atuin/config.tomlpoints sync at the self-hosted server
(sync_address = "http://192.168.50.6:8087") instead of atuin's own
api.atuin.shdefault. That isroles/atuinon raspberrypi_master in
mpostument/raspberry-setup, on the house LAN only - 8087 because the
OpenTelemetry collector holds 8888 there.Sync is still off until you run
atuin register(oratuin loginwith the
keyatuin keyprints): this says where, not whether. Off that network a
machine records locally and syncs when it is back.
Added
-
com.bitwarden.desktopfrom Flathub in theappsgroup. Not in the
Debian archive, so Flathub it is, beside Obsidian, Bruno and DBeaver. The
desktop app is the vault outside the browser; autofill itself comes from the
browser extension. Like the rest ofapps, it is skipped on a headless
machine.The CLI is deliberately not added: it only pays off once secrets are being
copied into a terminal by hand. -
A
networkgroup:trippy,gpingandnmap. Per-hop loss and
latency in one live view, a ping graph for one host or several, and what a
host exposes. trippy and gping arrive with trixie; on bookworm they are
reported missing, as eza already is. The zsh fragment aliasestripto
sudo trip: trippy needs raw sockets and has no unprivileged mode on Linux. -
org.flameshot.Flameshotfrom Flathub in thecreativegroup, beside
OBS. Screenshots annotated before they are copied: arrows, boxes, numbered
markers, blur. Flathub rather than apt because Debian's is 12.1.0 and
Flathub's 14.0.0, and the Wayland fixes are in between. It does not take the
Print key by itself: on GNOME, bind a custom shortcut to
flatpak run org.flameshot.Flameshot gui. -
kubecolor,uvandcarapaceas release binaries. Debian's kubecolor
is 0.0.20, from before the kubecolor/kubecolor fork; uv and carapace are not
in the archive at all.kubectlis now an alias forkubecolor, which passes every argument
through and only adds colour, andkone forkubectl.- carapace completes the CLIs zsh has nothing for. git is excluded
(CARAPACE_EXCLUDES=git): zsh's own completion for it is better. - uv handles Python packages and venvs; mise still picks the Python version.
-
difftasticas a release binary, and git settings for it. A structural
diff: it compares syntax, so a reformat is not a change. Not in the Debian
archive; the gnu build, because upstream's musl build is x86_64 only. delta
stays the pager forgit diff,show,logandadd -p; difftastic is
asked for per command:git difftoolorgit dft(diff.tool=difftastic, no prompt, paged)git ddiff,git dshow <rev>,git dlog- difftastic in place of the
patch
Never
diff.externalglobally: its output is not a patch, so
git diff > x.patchandgit applywould stop working. delta passes
difftastic's output through byte for byte, so the pager needs no exception.
Like delta's, each key is set only when unset. -
git sdiff- the delta view side by side
(-c core.pager='delta --side-by-side' diff), set with delta's keys. -
org.onlyoffice.desktopeditorsfrom Flathub inapps. An office suite
built around .docx, .xlsx and .pptx, so files from Microsoft Office keep
their layout more often than in LibreOffice. Not in the Debian archive.
AGPL-3.0: free for personal and company use. -
Completion for the CLIs carapace has no completer for.
- stern and yq: carapace specs in
carapace/specs/, deployed to
~/.config/carapace/specs(or an absolute$XDG_CONFIG_HOME). Both are
Cobra apps, so each spec is one line handing Tab to the tool's own
__complete. Set by content, like the atuin config. - mise:
mise completion zshin the fragment - small, and it asks mise. - uv: its zsh script is ~570 KB, so the fragment registers a stub that
loads it on the first Tab afteruvand replaces itself with the real
_uv; a new shell pays nothing for it.
- stern and yq: carapace specs in
-
RELEASE_<name>_VERSION_ARGS- the arguments that make a release binary
print its own version, where the usual guesses do not. kubecolor hands
unknown arguments to kubectl, so without itkubecolor versionwould report
kubectl's version and kubecolor would be reinstalled on every run. -
--skip-repos- add no third-party apt sources and install none of
their packages. For a host where something else already owns them: two
definitions of one repo with differentSigned-Bykeyrings makes apt
refuse to read any source, and every package then reads as unavailable.
Hit on a Pi whose Docker repo is Ansible's (docker.asc) while this script
writesdocker.gpg.
Fixed
bootstrap.shwas committed non-executable (100644, where
macos/bootstrap.shis 100755), so a fresh clone could not run it and the
systemd timer'sExecStartfailed the same way. Now 100755.- starship's asset name 404'd on arm64. Upstream ships a gnu build for
x86_64 only; the manifest now asks for the musl build, which exists for
both. toolsnever listed the cli tools taken as release binaries. Rows marked
@releasesintools/cli-parity.confwere skipped, so yq was missing from
the list; they are now listed after the apt packages, with difftastic.
macOS 1.29.0
Added
-
A
networkgroup:trippy,gpingandnmap. Per-hop loss and
latency in one live view, a ping graph for one host or several, and what a
host exposes. The zsh fragment aliasestriptotrip -u: macOS is the one
platform where trippy traces without root. -
The
flameshotcask inapps. Screenshots annotated before they are
copied: arrows, boxes, numbered markers, blur. macOS asks for the Screen
Recording permission on first capture. -
kubecolorincloud,uvindev,carapaceinshell.kubectlis now an alias forkubecolor, which passes every argument
through and only adds colour, andkone forkubectl.- carapace completes the CLIs zsh has nothing for. git is excluded
(CARAPACE_EXCLUDES=git): zsh's own completion for it is better. - uv handles Python packages and venvs; mise still picks the Python version.
-
difftasticincli, and git settings for it. A structural diff: it
compares syntax, so a reformat is not a change. delta stays the pager for
git diff,show,logandadd -p; difftastic is asked for per command:git difftoolorgit dft(diff.tool=difftastic, no prompt, paged)git ddiff,git dshow <rev>,git dlog- difftastic in place of the
patch
Never
diff.externalglobally: its output is not a patch, so
git diff > x.patchandgit applywould stop working. delta passes
difftastic's output through byte for byte, so the pager needs no exception.
Like delta's, each key is set only when unset. -
git sdiff- the delta view side by side
(-c core.pager='delta --side-by-side' diff), set with delta's keys. -
Completion for the CLIs carapace has no completer for.
- stern and yq: carapace specs in
carapace/specs/, deployed to
~/Library/Application Support/carapace/specs- Go's config directory on
macOS, which carapace uses unless$XDG_CONFIG_HOMEis an absolute path.
Both are Cobra apps, so each spec is one line handing Tab to the tool's
own__complete. - mise:
mise completion zshin the fragment - small, and it asks mise. - uv: its zsh script is ~570 KB, so the fragment registers a stub that
loads it on the first Tab afteruvand replaces itself with the real
_uv; a new shell pays nothing for it.
- stern and yq: carapace specs in
-
The
onlyofficecask inapps. An office suite built around .docx,
.xlsx and .pptx, so files from Microsoft Office keep their layout more often
than in LibreOffice. AGPL-3.0: free for personal and company use.
Changed
-
atuin/config.tomlpoints sync at the self-hosted server
(sync_address = "http://192.168.50.6:8087") instead of atuin's own
api.atuin.shdefault. That isroles/atuinon raspberrypi_master in
mpostument/raspberry-setup, on the house LAN only - 8087 because the
OpenTelemetry collector holds 8888 there.Sync is still off until you run
atuin register(oratuin loginwith the
keyatuin keyprints): this says where, not whether. Off that network a
machine records locally and syncs when it is back.