vscode: install VS Code into ~/.local/opt from upstream's tarball
The box this was written on had a half-finished install: vscode.repo
present under /etc/yum.repos.d, `code` never installed, and nothing in
this repo recording that VS Code was meant to be there. Microsoft's
rpm/deb would also need root, write outside $HOME, and be wiped by a
Kasm redeploy. Upstream's portable tarball is the same build with none
of that, so the module keeps bin/'s contract: no sudo, nothing outside
$HOME, pinned rather than floating.
The Chromium sandbox survives a userland install — the bundled
chrome-sandbox is not setuid, so Electron falls back to the
unprivileged user-namespace sandbox. Verified by launching without
--no-sandbox, so dropping root costs nothing.
Adds install_tarball_tree to lib/fetch.sh: install_tarball_bin picks a
single binary out of an archive, and VS Code only runs from an intact
Electron tree. It stages beside the target and swaps in after
extraction succeeds, so an interrupted run leaves the old version
intact.
Two things the verification caught rather than the design:
- argv.json lives at ~/.vscode/argv.json (product.json's
dataFolderName), not under the user-data-dir. A copy written
anywhere else is read by nothing, so the first attempt at
suppressing the keyring prompt silently did nothing.
- Run as root, `code --version` prints a "super user" warning
instead of the version and still exits 0, so a bare run-check
never matches and would re-download 325MB on every bootstrap.
Root falls back to the .versions stamp.
Sets password-store=basic in argv.json so Electron's safeStorage stops
waking kwalletd, which prompts for an unlock on every launch because
kwallet-pam is not installed. Confirmed with dbus-monitor: no
org.kde.KWallet traffic on launch. The trade-off — tokens obfuscated
on disk rather than sealed behind a wallet password — and the route
back to the wallet are documented in the module and the README.
No-ops on headless hosts; DOTFILES_VSCODE overrides either way.
Verified per verify-module: shellcheck -s sh clean, idempotent re-run
on both paths, and fresh install plus re-run as root on oraclelinux:9
and debian:13.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -78,6 +78,14 @@ Already have a clone? Just run it directly:
|
||||
`~/.local/bin`. Persists across redeploys; only rebuilt when the venv is
|
||||
missing or broken. Building it may install `python3`/`python3-venv` via
|
||||
the system package manager (the one place this module uses sudo).
|
||||
- `vscode/` — installs Visual Studio Code from upstream's portable tarball into
|
||||
`~/.local/opt/vscode`, symlinks `code` into `~/.local/bin`, and writes a
|
||||
user-level `.desktop` entry so it shows up in the application menu. **No
|
||||
sudo, nothing outside `$HOME`** — the same contract as `bin/`, so it survives
|
||||
a Kasm redeploy. Pinned via `VSCODE_VERSION` in the module; bump it to upgrade.
|
||||
Also sets `password-store: basic` in `~/.vscode/argv.json` so KDE's kwallet
|
||||
does not prompt for an unlock on every launch (see below). **No-ops on
|
||||
headless hosts** — it's a ~400MB GUI app — override with `DOTFILES_VSCODE`.
|
||||
- `docker-rootless-cgroup/` — on systemd-less hosts (e.g. Kasm), hand-delegates
|
||||
cgroup v2 controllers to the rootless Docker daemon so per-container cgroups
|
||||
work (rootless Docker otherwise comes up with
|
||||
@@ -111,6 +119,18 @@ item instead of `~/.zshrc.local`:
|
||||
don't set this by hand: run `mcp-config/install.sh` once and its shell
|
||||
hook exports it from `~/.config/mcp-sync/key`. Set it in `~/.zshrc.local`
|
||||
only on a box without mcp-sync.
|
||||
- `DOTFILES_VSCODE` — controls the `vscode/` module. Unset (default) installs
|
||||
VS Code only when a graphical session is detected; `1` forces the install on
|
||||
a headless host (e.g. for `code tunnel`); `0` skips it everywhere. A plain
|
||||
shell/env var, not a vault secret.
|
||||
|
||||
On the keyring: VS Code's secret storage reaches for the OS keyring through
|
||||
libsecret, which on KDE makes kwalletd prompt for an unlock before the editor
|
||||
is usable — every session, since `kwallet-pam` is not installed. The module
|
||||
sets `"password-store": "basic"` in `~/.vscode/argv.json` to stop that, which
|
||||
means VS Code's stored tokens are obfuscated on disk rather than sealed
|
||||
behind a wallet password. To use the wallet instead, install `kwallet-pam` so
|
||||
it unlocks at login, then change that value to `"kwallet5"`.
|
||||
- `OP_SERVICE_ACCOUNT_TOKEN` — 1Password service-account token. Not a shell
|
||||
variable any more: `secrets/install.sh` asks for it once and stores it in
|
||||
`~/.config/dotfiles/op.env`. Pass it in the env only for an unattended run.
|
||||
|
||||
Reference in New Issue
Block a user