All 6 VS Code Gruvbox variants for Hermes Desktop — Dark/Light × Hard/Medium/Soft, with a visual switcher in Settings UI.
| Variant | Palette | Slug |
|---|---|---|
| Dark Hard | #1d2021 deep charcoal |
vsc-gruvbox-dark-hard |
| Dark Medium | #282828 warm dark |
vsc-gruvbox-dark-medium |
| Dark Soft | #32302f muted dark |
vsc-gruvbox-dark-soft |
| Light Hard | #f9f5d7 pale cream |
vsc-gruvbox-light-hard |
| Light Medium | #fbf1c7 warm cream |
vsc-gruvbox-light-medium |
| Light Soft | #f2e5bc soft cream |
vsc-gruvbox-light-soft |
Each variant includes full palette mapping (background, sidebar, input, borders, ANSI terminal colors).
node scripts/install.mjsThis fetches the original jdinhlife.gruvbox VS Code extension via hermesDesktop.themes.fetchMarketplace(), extracts all 6 themes, and saves them to localStorage.
node scripts/inject.mjsAdds a Gruvbox Variants section to Settings → Appearance — 6 color-preview cards for one-click switching.
⚠️ Injection is ephemeral — lost on Hermes restart. To make it permanent, add the inject command to your Hermes Desktop launcher (see below).
node scripts/switch.mjs # list variants
node scripts/switch.mjs dark-hard # switch to Dark Hard
node scripts/switch.mjs light-soft # switch to Light SoftOpen Command Palette (Ctrl+K or Cmd+K), type Change theme..., then pick a Gruvbox variant.
If Hermes Desktop is running, you can switch themes programmatically from any browser DevTools:
// Switch to any variant
localStorage.setItem('hermes-desktop-theme-v2', 'vsc-gruvbox-dark-hard');
// Update profile selection
const profiles = JSON.parse(localStorage.getItem('hermes-desktop-profile-themes-v1') || '{}');
profiles.default = 'vsc-gruvbox-dark-hard';
localStorage.setItem('hermes-desktop-profile-themes-v1', JSON.stringify(profiles));
// Notify React
window.dispatchEvent(new StorageEvent('storage', {
key: 'hermes-desktop-theme-v2',
newValue: 'vsc-gruvbox-dark-hard'
}));When you run inject.mjs, a Gruvbox Variants section appears in
Settings → Appearance below the built-in Theme selector:
┌────────────────────────────────┐
│ Theme │
│ [Nous ▼] │
│ ───────────────────────────── │
│ GRUVBOX VARIANTS │
│ ┌──────┬──────┬──────┐ │
│ │██████│██████│██████│ │
│ │Dark │Dark │Dark │ │
│ │Hard │Medium│Soft │ │
│ ├──────┼──────┼──────┤ │
│ │██████│██████│██████│ │
│ │Light │Light │Light │ │
│ │Hard │Medium│Soft │ │
│ └──────┴──────┴──────┘ │
└────────────────────────────────┘
Click any card — theme switches instantly. Active variant is highlighted.
To keep the UI injection across Hermes Desktop restarts, edit your launcher:
# ~/.local/bin/hermes-desktop (or wherever your launcher is)
#!/bin/bash
export ELECTRON_OZONE_PLATFORM_HINT=x11
"$HOME/.hermes/hermes-agent/apps/desktop/release/linux-unpacked/Hermes" "$@" &
PID=$!
sleep 5 # wait for app to load
node "$HOME/.hermes/scripts/inject-gruvbox-switcher.mjs" 2>/dev/null &
wait $PID| Script | Purpose |
|---|---|
scripts/install.mjs |
Install all 6 Gruvbox variants into localStorage |
scripts/inject.mjs |
Inject visual switcher into Settings → Appearance |
scripts/switch.mjs |
List / switch variants from CLI |
themes/gruvbox-palette.md |
Full color reference |
All scripts connect to Hermes Desktop via Electron CDP (kill -USR1 + WebSocket).
They require Node.js 21+ (built-in WebSocket) and Hermes Desktop running.
- Hermes Desktop ≥ v0.16.0
- Node.js ≥ 21 (for native WebSocket) or 18+ (with
wspackage) - VS Code Marketplace access (for initial install — fetches the extension)
PRs welcome! Ideas:
- Add preview screenshot for README
- Support more VS Code themes (Catppuccin, Dracula, Nord)
- Package as a Hermes plugin
MIT