editor

Slatewave for JetBrains

A full UI theme plus editor scheme for every IntelliJ-based IDE.

Stars
★ 1
Latest release
0.0.5 · 2 months ago
Last commit
3 weeks ago
M README.md ×
TS github.ts ×
/**
 * Build-time GitHub metadata fetchers.
 *
 * Public-repo data only. Unauthenticated requests are rate-limited to
 * 60/hour per IP; set GITHUB_TOKEN in .env (or the CI environment) to
 * raise that to 5000/hour.
 *
 * Results are cached to `node_modules/.cache/slatewave-github/` with a
 * 30-minute TTL so dev hot-reloads don't burn API quota.
 */
import { mkdir, readFile, writeFile } from 'node:fs/promises';
import { join } from 'node:path';

const CACHE_DIR = join(process.cwd(), 'node_modules', '.cache', 'slatewave-github');
const TTL_MS = 30 * 60 * 1000;

export interface RepoMeta {
  stars: number;
  pushedAt: string;
  defaultBranch: string;
  openIssues: number;
  latestRelease: Release | null;
}

export interface Release {
  tag: string;
  name: string;
  publishedAt: string;
  url: string;
  body: string;
  isPrerelease: boolean;
}

const memory = new Map<string, Promise<unknown>>();

function cacheKey(parts: string[]): string {
  return parts.join('__').replace(/[^a-zA-Z0-9_]/g, '_');
}

async function readCache<T>(key: string): Promise<T | null> {
  try {
    const raw = await readFile(join(CACHE_DIR, `${key}.json`), 'utf8');
    const parsed = JSON.parse(raw) as { data: T; at: number };
    if (Date.now() - parsed.at < TTL_MS) return parsed.data;
  } catch {
    /* no cache yet */
  }
  return null;
}
G getslatewave src lib TS github.ts I RepoMeta
20:20 LF UTF-8 2 spaces

About this theme

Both halves of a JetBrains theme — slatewave.theme.json for UI chrome and Slatewave.xml for the editor scheme — bundled as one plugin. Works across GoLand, WebStorm, IntelliJ IDEA, PyCharm, RubyMine, PhpStorm, CLion, RustRover, DataGrip, Rider, and Android Studio.

Slatewave for JetBrains ships the UI theme and editor scheme as a single plugin — selecting Slatewave as the theme auto-switches the editor scheme too. The terminal ANSI palette is wired to the oh-my-posh prompt’s segment colors, so the integrated terminal and any outside terminal render identically.

Syntax coverage includes Go, TypeScript/JavaScript, JSX/TSX, CSS / SCSS / LESS, HTML / XML, JSON, YAML, Markdown, Python, Bash, Docker, and SQL, with tuned Go-specific accents (struct tags in amber, package and imports in teal, receivers in purple) and semantic token support across every other language.

Developing locally

To preview palette tweaks without rebuilding and re-installing the plugin each time, run a sandbox IDE with the plugin preloaded:

JAVA_HOME=/Applications/GoLand.app/Contents/jbr/Contents/Home ./gradlew runIde

Edits to slatewave.theme.json or Slatewave.xml apply on the next sandbox launch. Swap GoLand.app for any JetBrains IDE on disk.

Install

Don't have the CLI yet? Install the Slatewave CLI →

  • Slatewave CLI

    Install with the Slatewave family CLI — one command, every theme.

    slatewave install jetbrains
  • Marketplace

    Open ↗

    Install directly from the JetBrains Marketplace inside any JetBrains IDE.

    1. Settings → Plugins → Marketplace
    2. Search "Slatewave"
    3. Install, then Settings → Appearance & Behavior → Appearance → Theme → Slatewave
  • Build from source

    Build a local .zip and install it from disk. Gradle needs JDK ≥ 17 — the JBR bundled with any JetBrains IDE works.

    1. JAVA_HOME=/Applications/GoLand.app/Contents/jbr/Contents/Home ./gradlew buildPlugin
    2. Locate build/distributions/slatewave-0.0.1.zip
    3. Settings → Plugins → ⚙ → Install Plugin from Disk… → pick the .zip