dsh-pipboy-theme
v1.0.0
Published
Fallout 4 Pip-Boy CRT theme with retro sound effects for DeepSeek Harness.
Readme
dsh-pipboy-theme
A Fallout 4 Pip-Boy CRT theme for the DeepSeek Harness: digital-green phosphor palette, pixelated monospace text, CRT scanlines/vignette, and synthesized retro sound effects (two-tone select, hover tick, typewriter key clacks).
A DeepSeek Harness bundle: a dual-face client UI plugin — a Node half that registers the plugin, and a browser half that applies the theme.
Install
dsh web (and npx @deepseek-ai/dsh web) is a hardcoded alias for --profile
web — there's no separate "default profile" flag to pass. So the clean
one-time install is to add the plugin straight into the profile literally
named web (it auto-initializes from the shipped web-app template the first
time something targets it):
# from npm (prebuilt) — recommended, no build step on install
npx @deepseek-ai/dsh plugin --profile web add dsh-pipboy-theme
# from GitHub (builds on install — see "GitHub note" below)
npx @deepseek-ai/dsh plugin --profile web add github:you/dsh-pipboy-theme
# from a tarball
pnpm pack
npx @deepseek-ai/dsh plugin --profile web add ./dsh-pipboy-theme-1.0.0.tgzThat's the one-time step. From then on, every plain boot picks it up
automatically — no --profile, no --patch, no flags of any kind:
npx @deepseek-ai/dsh web(Installing into any other profile name works too, but then you have to boot
with dsh --profile <name> every time — targeting web is what makes the
zero-flag dsh web launch pick it up for free.)
Structure
├── package.json # declares dsh.bundle (patch) + dsh.client (browser)
├── cordis.patch.yml # inserts the plugin row into the composition
├── tsdown.config.ts # two build configs: lib/index.js (ESM/node) + lib/client.js (CJS/browser)
├── tsconfig.json
└── src/
├── index.ts # Node half: export name + apply()
└── client/
└── index.ts # Browser half: inline theme CSS + sound effectsThe client bundle has two non-obvious requirements the harness enforces silently (no error, the plugin just never appears client-side if you miss either):
package.json#exportsmust include"./package.json": "./package.json". The host resolvesdsh.clientmetadata viarequire.resolve('<pkg>/package.json'); anexportsmap that omits that subpath makes Node throwERR_PACKAGE_PATH_NOT_EXPORTED, which the loader catches and silently treats as "not a client package".lib/client.jsmust be a classic script that self-registers viawindow.__ModuleLoader__.load({ id, factory })— not plain ESM. The client-loader script-injects the bundle outside any module graph, so a bareexportstatement throwsSyntaxError: Unexpected token 'export'in the browser console.tsdown.config.tsreproduces this withformat: 'cjs',platform: 'browser', and anoutputOptions.banner/footer/introthat wraps the CJS output in the loader's factory contract (mirrors the first-party client packages' sharedtsdown.client.tspreset, which isn't published for out-of-tree plugins to import directly).
Build
pnpm install
pnpm build # tsdown -> lib/index.js + lib/client.jsPublish
pnpm build
pnpm publishGitHub note
Installing from a git URL fetches source, not built artifacts, so nothing runs
tsdown for you. The prepare script in package.json builds on install, and the
user must allowlist it once, in the web profile's pnpm-workspace.yaml
($DSH_HOME/profiles/web/pnpm-workspace.yaml):
allowBuilds:
dsh-pipboy-theme: trueFor a zero-config install, publish to npm (prebuilt) or ship a pnpm pack tarball.
License
MIT
