Skip to content

Repository files navigation

Subliminal Nightfall

A dark color scheme featuring deep purple-black backgrounds with carefully calibrated accent colors for optimal contrast and readability.

View Interactive Showcase →

Installation

VS Code / Cursor

Install from the marketplace:

  1. Open Extensions (⌘+Shift+X / Ctrl+Shift+X)
  2. Search for "Subliminal Nightfall"
  3. Click Install
  4. Select theme: Preferences → Color Theme → Subliminal Nightfall

Or install via command line:

code --install-extension hamrahm.subliminal-nightfall

Zed

  1. Open Zed
  2. Run command: zed: extensions
  3. Search for "Subliminal Nightfall"
  4. Click Install
  5. Select theme: theme selector: toggle → Subliminal Nightfall

Theme Variants:

  • Subliminal Nightfall - Standard opaque theme (100% opacity)
  • Subliminal Nightfall Hazy - Transparent blurred variant (75% opacity) with window blur effect
  • Subliminal Nightfall Cloudy - Semi-transparent blurred variant (90% opacity) for subtle blur

Or install as dev extension:

# Clone this repository
git clone https://github.com/mhamrah/subliminal-nightfall.git

# In Zed, run: "zed: install dev extension"
# Select the cloned repository's zed/ directory

Neovim

Using lazy.nvim

{
  "mhamrah/subliminal-nightfall",
  lazy = false,
  priority = 1000,
  config = function()
    vim.opt.runtimepath:append(vim.fn.stdpath("data") .. "/lazy/subliminal-nightfall/neovim")
    vim.cmd([[colorscheme subliminal-nightfall]])
  end,
}

Using packer.nvim

use {
  'mhamrah/subliminal-nightfall',
  config = function()
    vim.opt.runtimepath:append(vim.fn.stdpath("data") .. "/site/pack/packer/start/subliminal-nightfall/neovim")
    vim.cmd([[colorscheme subliminal-nightfall]])
  end
}

Manual installation

git clone https://github.com/mhamrah/subliminal-nightfall.git
ln -s "$(pwd)/subliminal-nightfall/neovim" ~/.config/nvim/colors/subliminal-nightfall

Add to your init.lua or init.vim:

vim.opt.runtimepath:append(vim.fn.expand("~/.config/nvim/colors/subliminal-nightfall"))
vim.cmd([[colorscheme subliminal-nightfall]])

Ghostty

Add to ~/.config/ghostty/config:

theme = subliminal-nightfall

Or manually configure colors in your Ghostty config:

# Copy the theme file
cp ghostty/subliminal-nightfall ~/.config/ghostty/themes/

# Add to config
theme = subliminal-nightfall

Terminal Base Palette

Expanded Editor Syntax Palette

  • #9ccfd8 #9ccfd8 - Functions, methods, strings
  • #6699cc #6699cc - Keywords, types, constructors
  • #c4a7e7 #c4a7e7 - Numbers, constants, enums
  • #7f7f7f #7f7f7f - Comments

Base ANSI Colors

Color Base Bright Dim
Red #bf616a #bf616a #e2848d #e2848d #85434a #85434a
Green #a9cfa4 #a9cfa4 #ccf2c7 #ccf2c7 #769072 #769072
Yellow #ffe2a9 #ffe2a9 #ffffcc #ffffcc #b29e76 #b29e76
Blue #6699cc #6699cc #89bcef #89bcef #476b8e #476b8e
Magenta #f1a5ab #f1a5ab #ffc8ce #ffc8ce #a87377 #a87377
Cyan #5fb3b3 #5fb3b3 #82d6d6 #82d6d6 #427d7d #427d7d

UI Colors

  • #191724 #191724 - Deep purple-black
  • #1f1d2e #1f1d2e - Sidebars, panels
  • #e0def4 #e0def4 - Primary text
  • #484e5b #484e5b - Text selection
  • #5fb3b3 #5fb3b3 - Cursor color

Philosophy

Subliminal Nightfall is designed for extended coding sessions with:

  • Deep purple-black backgrounds that reduce eye strain
  • Three-level ANSI color system (base/bright/dim) for terminal flexibility
  • Carefully calibrated contrast ratios for readability
  • Distinct colors for different syntax elements
  • Muted accent colors that don't fatigue

Theme Variants

Subliminal Nightfall Hazy and Cloudy (Zed only) offer transparent, blurred experiences:

Variant Opacity Best For
Hazy 75% Maximum blur effect, desktop integration
Cloudy 90% Subtle transparency, enhanced readability

Both variants feature:

  • Background blur effects that integrate with your desktop (background.appearance: "blurred")
  • Fully transparent editor backgrounds to show blur through
  • Transparent editor gutters for a lighter git and line-number margin
  • More opaque elevated surfaces so menus and popovers remain readable
  • Semi-transparent panels, sidebars, and status bars with subtle variance
  • Full syntax color readability despite transparency
  • Perfect for those who prefer a less visually heavy workspace

Repository Overview

This is a monorepo containing themes for multiple platforms:

subliminal-nightfall/
├── tools/colorloom/    # Rust theme generator CLI
├── packages/
│   ├── core/           # Color definitions (TypeScript)
│   └── website/        # Showcase site (Astro)
├── zed/                # Self-contained Zed extension
│   ├── extension.toml  # Zed extension manifest
│   ├── extension/      # Zed extension assets
│   └── themes/         # Zed theme JSON
├── cursor/             # VS Code/Cursor extension
├── neovim/             # Neovim colorscheme
├── ghostty/            # Ghostty terminal theme
└── theme.toml          # Single source of truth for colors

Note: The upstream Zed Extensions registry must include path = "zed" in extensions.toml so the Zed manifest and assets can stay isolated from the repository root.

ColorLoom Theme Generator

ColorLoom is a powerful Rust CLI tool that generates all theme files from a single theme.toml configuration.

Quick Start

# Install (from source)
cd tools/colorloom && cargo install --path .

# Generate all themes
colorloom generate

# Validate configuration
colorloom validate

# List targets and variants
colorloom list

Features

  • Single Source of Truth: Define colors once in theme.toml, generate for all platforms
  • Variant Support: Automatically generates base, hazy (75%), and cloudy (90%) variants
  • Blur Effects: Full support for Zed's background.appearance: "blurred"
  • Comprehensive Coverage: 100+ color settings per target for complete UI theming

Supported Targets

Target Output Variants
Zed Single JSON with all variants base, hazy, cloudy
VS Code/Cursor Separate JSON per variant base, hazy, cloudy
Neovim Lua colorscheme files base, hazy, cloudy
Ghostty Terminal palette files base, hazy, cloudy
Website JSON for web showcase palette data

Transparency Levels

Variant Alpha Editor BG Appearance
Base 100% Opaque opaque
Hazy 75% Transparent blurred
Cloudy 90% Transparent blurred

For detailed documentation, see the ColorLoom README.

Contributing

Setup

# Install mise (recommended for tool version management)
curl https://mise.run | sh
mise install

# Or ensure you have Node.js, pnpm and Rust managed via mise
mise install

# Install dependencies
mise run install

Development

# Install tool versions & deps
mise install && mise run install

# Generate themes
mise run gen

# Start website
mise run dev  # Visit http://localhost:4321

# Build everything
mise run build

# Preview website
mise run preview

# Verify Zed extension layout
mise run verify

Deploying the Website

The showcase website is deployed to Cloudflare Pages at subliminal-nightfall.hamrah.com.

Automatic Deployment:

Cloudflare Pages automatically deploys when you push to main:

git push origin main
# Cloudflare detects changes and deploys automatically

The deployment uses these settings:

  • Build command: pnpm run build:cloudflare
  • Output directory: website/dist
  • Node version: 22
  • pnpm version: 10.11.1

Manual Deployment via Wrangler CLI:

pnpm run build:cloudflare
cd website
npx wrangler pages deploy dist --project-name=subliminal-nightfall

Publishing to VS Code Marketplace

The VS Code/Cursor extension automatically publishes to both marketplaces when theme changes are pushed:

Automatic (via GitHub Actions):

  • Triggers on changes to theme.toml, packages/core/**, platform directories, or website/**
  • Generates themes via Rust CLI and rebuilds website
  • Auto-bumps patch versions (Cursor, core if colors changed)
  • Computes and tags Zed release versions on Cursor, Zed, or Theme changes
  • Publishes VS Code/Cursor extension to Marketplace & Open VSX
  • Packages Zed extension contents from zed/ (extension.toml + extension/icon.png + themes/) and attaches to release
  • The Zed publish job tags v<version> and runs huacnlee/zed-extension-action
  • Commits version bumps back to repository

Manual (VS Code / Cursor):

mise install
mise run gen   # generate themes
cd cursor
pnpm dlx @vscode/vsce publish   # requires VSCE_PAT
pnpm dlx ovsx publish           # requires OVSX_PAT

pnpm dlx downloads and runs a package binary temporarily without a global install, keeping CI and local environments clean and avoiding global bin issues.

Manual (Website deploy):

mise run build:website
# Deploy manually if needed:
cd website
wrangler pages deploy dist --project-name=subliminal-nightfall

Manual (Zed extension PR):

# Run the publish workflow manually with force_zed enabled.
# The workflow tags the current zed/extension.toml version and opens the Zed Extensions PR.
gh workflow run "Publish Themes and Website" -f force_zed=true

Zed Extension Release Workflow

This repo uses huacnlee/zed-extension-action from the publish workflow to open a PR against the upstream Zed Extensions repo:

  • Workflow file: .github/workflows/publish.yml
  • Trigger: theme/colorloom changes, or manual workflow_dispatch with force_zed
  • Inputs:
    • extension-name: subliminal-nightfall
    • push-to: set via repo variable ZED_EXTENSIONS_FORK (e.g., yourname/extensions fork)
  • Secrets:
    • COMMITTER_TOKEN: Personal Access Token with repo + workflow scopes

When the Zed publish job runs, the action creates or updates the PR to release the extension in Zed.

The upstream zed-industries/extensions entry should include:

[subliminal-nightfall]
submodule = "extensions/subliminal-nightfall"
path = "zed"
version = "<version>"

If the generated Zed Extensions PR only bumps version and the submodule SHA, add the path = "zed" line to that PR once.

Setup locations in GitHub UI:

  • Set repo variable: Settings → Secrets and variables → Actions → Variables → New variable → Name: ZED_EXTENSIONS_FORK, Value: mhamrah/extensions (or your fork)
  • Set secret: Settings → Secrets and variables → Actions → New repository secret → Name: COMMITTER_TOKEN, Value: your PAT with repo and workflow scopes

Making Theme Changes

Primary source of truth: theme.toml. Rust generator: tools/colorloom.

Workflow:

mise install             # install toolchain versions
mise run install         # install Node deps
mise run gen             # generate all theme artifacts
mise run dev             # start website with generated palette

Edit colors / variants (base, hazy, cloudy) in theme.toml, then re-run mise run gen.

Legacy TS palette (packages/core/src/colors.ts) will be aligned to consume theme.toml; prefer editing the TOML.

Color values (2025-11-14):

  • Background: #191724
  • Background Alt: #1f1d2e
  • Background Elevated: #26233a
  • Foreground: #e0def4
  • Foreground Muted: #a0a0a0
  • Foreground Dim: #7f7f7f
  • Selection: #484e5b
  • Cursor: #5fb3b3
  • Line Highlight: #2e3239bf

ANSI Base:

  • Red: #bf616a / Bright #e2848d / Dim #85434a
  • Green: #a9cfa4 / Bright #ccf2c7 / Dim #769072
  • Yellow: #ffe2a9 / Bright #ffffcc / Dim #b29e76
  • Blue: #6699cc / Bright #89bcef / Dim #476b8e
  • Magenta: #f1a5ab / Bright #ffc8ce / Dim #a87377
  • Cyan: #5fb3b3 / Bright #82d6d6 / Dim #427d7d

Syntax:

  • Teal: #9ccfd8
  • Blue Green: #6699cc
  • Lavender: #c4a7e7
  • Gray: #7f7f7f

Release tagging: Zed uses v<cursor-version>; keep versions in cursor/package.json authoritative.

License

MIT License - see LICENSE file for details.

Links

About

No description, website, or topics provided.

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages