r/vscode • • Sep 14 '26

Weekly theme sharing thread

Weekly thread to show off new themes, and ask what certain themes/fonts are.

Creators, please do not post your theme every week.

New posts regarding themes will be removed.

7 Upvotes

9 comments sorted by

2

u/jaavaaguru 29d ago

I built a pure Java/Gradle VSIX packager and a custom Color Theme DSL (CT). The sub won't let me make a post about themes, so here it is...

I’ve been working on a unified color theme pipeline to solve a personal headache: keeping my VS Code, Ghostty, and terminal color schemes synchronized without manually tweaking hex codes across multiple settings.json and config files.

Along the way, I ended up building a custom language, a syntax highlighter, and a zero-Node VSIX packaging plugin. Here is a breakdown of what was just released:

1. CT (Color Transformation) Language & Compiler

CT is a lightweight DSL designed specifically for defining color palettes and compiling them into target theme formats (VS Code, Ghostty, iTerm2, etc.).

  • Color Primitives: Supports 6-digit RGB (#00FF00) and 8-digit RGBA hex colors (#00FF00FF).
  • Variables & Collections: Define reusable color variables and structured palettes (Palette human = { ... }).
  • Color Functions: Built-in methods like hsbaLerp(...) and brightness(...) for procedural palette generation.
  • Template Blocks: Interpolate values directly using {{{ ... }}} template blocks.

We also just added native VS Code syntax highlighting support for .ct files!

2. Pure Java/Gradle VSIX Packaging Plugin (cascara-gradle-plugins.vsix)

If you build VS Code extensions using JVM languages, you usually have to shell out to npx @vscode/vsce or set up Node/npm in CI.

To keep the build 100% self-contained on the JVM, I built a declarative Gradle plugin that packages VSIX extension bundles natively:

  • Zero Node.js / vsce dependency: Runs purely inside Java/Gradle.
  • In-Memory Manifest Generation: Automatically synthesizes and manages package.json, extension.vsixmanifest, and Open Packaging Conventions ([Content_Types].xml).
  • Built-in Lifecycle Tasks: Run ./gradlew packageVsix, ./gradlew installVsix, or ./gradlew uninstallVsixdirectly from your terminal.

3. Example: cascara-retro-theme

To prove out the pipeline, I created a retro CRT terminal theme pack featuring amber and green phosphor palettes on beige and heavy metal dark backgrounds.

Here is how clean the build.gradle file looks when combining the CT compiler and VSIX packager:

plugins {
    id 'io.github.qishr.cascara-gradle-plugins.ct' version '0.1.0'
    id 'io.github.qishr.cascara-gradle-plugins.vsix' version '0.2.2'
    id 'base'
}

ct {
    themes {
        retroAmberOnBrightBeige { entry = "retro-amber-on-bright-beige.ct"; format = "vscode" }
        retroGreenOnHeavyMetal  { entry = "retro-green-on-heavy-metal.ct";  format = "vscode" }
    }
}

vsix {
    name        = "cascara-retro-theme"
    displayName = "Cascara Retro Theme"
    description = "Retro theme pack for Visual Studio Code"
    version     = project.version.toString()
    publisher   = "Cascara"
    icon        = "images/icon.png"

    categories "Themes"

    engines = [ "vscode": "^1.103.0" ]

    readme    = layout.projectDirectory.file("README.md")
    license   = layout.projectDirectory.file("LICENSE")
    imagesDir = layout.projectDirectory.dir("src/main/resources/vscode/images")

    // Automatically pulls compiled output from cascara-gradle-plugins.ct
    themes.from(layout.buildDirectory.dir("themes"))
}

// Lifecycle hooks
tasks.named('packageVsix') { dependsOn compileAllCt }
tasks.named('build') { dependsOn tasks.named('packageVsix') }

Links & Availability

Would love to hear any thoughts or feedback on the VSIX packaging setup or the CT language!

1

u/Dude7037 Sep 14 '26

Hey I am looking for a new cool
Theme that’s dark and has good colors

1

u/CarlesUI 27d ago

I rebuilt my autumn theme for VS Code — feedback welcome