Skip to content

Instantly share code, notes, and snippets.

@jaames
Created June 2, 2025 18:53
Show Gist options
  • Save jaames/00d7c68150df157b2b61b55615288b37 to your computer and use it in GitHub Desktop.
Save jaames/00d7c68150df157b2b61b55615288b37 to your computer and use it in GitHub Desktop.
Custom Shiki.js theme that uses CSS variables for highlighting - used for my personal site (https://jaames.co.uk)
{
"colors": {},
"displayName": "jaames.co.uk",
"name": "",
"semanticHighlighting": true,
"tokenColors": [
{
"settings": {
"background": "var(--syntax-bg)",
"foreground": "var(--syntax-text)"
}
},
{
"scope": "string",
"settings": {
"foreground": "var(--syntax-string)"
}
},
{
"scope": "punctuation, constant.other.symbol",
"settings": {
"foreground": "var(--syntax-punctuation)"
}
},
{
"scope": "constant.character.escape, text.html constant.character.entity.named",
"settings": {
"foreground": "var(--syntax-escape)"
}
},
{
"scope": "constant.language.boolean",
"settings": {
"foreground": "var(--syntax-bool)"
}
},
{
"scope": "constant.numeric",
"settings": {
"foreground": "var(--syntax-number)"
}
},
{
"scope": "variable, variable.parameter, support.variable, variable.language, support.constant, meta.definition.variable entity.name.function, meta.function-call.arguments",
"settings": {
"foreground": "var(--syntax-variable)"
}
},
{
"scope": "keyword.other",
"settings": {
"foreground": "var(--syntax-other)"
}
},
{
"scope": "keyword, modifier, variable.language.this, support.type.object, constant.language",
"settings": {
"foreground": "var(--syntax-keyword)"
}
},
{
"scope": "entity.name.function, support.function",
"settings": {
"foreground": "var(--syntax-function)"
}
},
{
"scope": "storage.type, storage.modifier, storage.control",
"settings": {
"foreground": "var(--syntax-modifier)"
}
},
{
"scope": "support.module, support.node",
"settings": {
"fontStyle": "italic",
"foreground": "var(--syntax-module)"
}
},
{
"scope": "support.type, constant.other.key",
"settings": {
"foreground": "var(--syntax-name)"
}
},
{
"scope": "entity.name.type, entity.other.inherited-class, entity.other",
"settings": {
"foreground": "var(--syntax-type)"
}
},
{
"scope": "comment",
"settings": {
"fontStyle": "italic",
"foreground": "var(--syntax-comment)"
}
},
{
"scope": "comment punctuation.definition.comment, string.quoted.docstring",
"settings": {
"fontStyle": "italic",
"foreground": "var(--syntax-comment)"
}
},
{
"scope": "punctuation",
"settings": {
"foreground": "var(--syntax-punctuation)"
}
},
{
"scope": "entity.name, entity.name.type.class, support.type, support.class, meta.use",
"settings": {
"foreground": "var(--syntax-name)"
}
},
{
"scope": "variable.object.property, meta.field.declaration entity.name.function",
"settings": {
"foreground": "var(--syntax-property)"
}
},
{
"scope": "meta.definition.method entity.name.function",
"settings": {
"foreground": "var(--syntax-property)"
}
},
{
"scope": "meta.function entity.name.function",
"settings": {
"foreground": "var(--syntax-function)"
}
},
{
"scope": "template.expression.begin, template.expression.end, punctuation.definition.template-expression.begin, punctuation.definition.template-expression.end",
"settings": {
"foreground": "var(--syntax-template)"
}
},
{
"scope": "meta.embedded, source.groovy.embedded, meta.template.expression",
"settings": {
"foreground": "var(--syntax-embedded)"
}
},
{
"scope": "entity.name.tag.yaml",
"settings": {
"foreground": "var(--syntax-literal)"
}
},
{
"scope": "meta.object-literal.key, meta.object-literal.key string, support.type.property-name.json",
"settings": {
"foreground": "var(--syntax-literal)"
}
},
{
"scope": "constant.language.json",
"settings": {
"foreground": "var(--syntax-json)"
}
},
{
"scope": "entity.other.attribute-name.class",
"settings": {
"foreground": "var(--syntax-type)"
}
},
{
"scope": "entity.other.attribute-name.id",
"settings": {
"foreground": "var(--syntax-other)"
}
},
{
"scope": "source.css entity.name.tag",
"settings": {
"foreground": "var(--syntax-name)"
}
},
{
"scope": "support.type.property-name.css",
"settings": {
"foreground": "var(--syntax-css-property)"
}
},
{
"scope": "meta.tag, punctuation.definition.tag",
"settings": {
"foreground": "var(--syntax-markup)"
}
},
{
"scope": "entity.name.tag",
"settings": {
"foreground": "var(--syntax-tag)"
}
},
{
"scope": "entity.other.attribute-name",
"settings": {
"foreground": "var(--syntax-modifier)"
}
},
{
"scope": "punctuation.definition.entity.html",
"settings": {
"foreground": "var(--syntax-embedded)"
}
},
{
"scope": "markup.heading",
"settings": {
"foreground": "var(--syntax-markup)"
}
},
{
"scope": "text.html.markdown meta.link.inline, meta.link.reference",
"settings": {
"foreground": "var(--syntax-literal)"
}
},
{
"scope": "text.html.markdown beginning.punctuation.definition.list",
"settings": {
"foreground": "var(--syntax-markup)"
}
},
{
"scope": "markup.italic",
"settings": {
"fontStyle": "italic",
"foreground": "var(--syntax-literal)"
}
},
{
"scope": "markup.bold",
"settings": {
"fontStyle": "bold",
"foreground": "var(--syntax-literal)"
}
},
{
"scope": "markup.bold markup.italic, markup.italic markup.bold",
"settings": {
"fontStyle": "italic bold",
"foreground": "var(--syntax-literal)"
}
},
{
"scope": "markup.fenced_code.block.markdown punctuation.definition.markdown",
"settings": {
"foreground": "var(--syntax-raw)"
}
},
{
"scope": "markup.inline.raw.string.markdown",
"settings": {
"foreground": "var(--syntax-raw)"
}
},
{
"scope": "meta.jsx.children, SXNested",
"settings": {
"foreground": "var(--syntax-embedded)"
}
},
{
"scope": "support.class.component",
"settings": {
"foreground": "var(--syntax-type)"
}
},
{
"scope": "source.cpp meta.block variable.other",
"settings": {
"foreground": "var(--syntax-embedded)"
}
},
{
"scope": "source.python meta.member.access.python",
"settings": {
"foreground": "var(--syntax-module)"
}
},
{
"scope": "source.python meta.function-call.python, meta.function-call.arguments",
"settings": {
"foreground": "var(--syntax-function)"
}
},
{
"scope": "meta.block",
"settings": {
"foreground": "var(--syntax-block)"
}
},
{
"scope": "entity.name.function.call",
"settings": {
"foreground": "var(--syntax-function)"
}
},
{
"scope": "source.php support.other.namespace, source.php meta.use support.class",
"settings": {
"foreground": "var(--syntax-embedded)"
}
},
{
"scope": "constant.keyword",
"settings": {
"fontStyle": "italic",
"foreground": "var(--syntax-keyword)"
}
},
{
"scope": [
"constant.other.placeholder"
],
"settings": {
"foreground": "var(--syntax-placeholder)"
}
},
{
"scope": [
"markup.deleted"
],
"settings": {
"foreground": "var(--syntax-markup-deleted)"
}
},
{
"scope": [
"markup.inserted"
],
"settings": {
"foreground": "var(--syntax-markup-inserted)"
}
},
{
"scope": [
"markup.underline"
],
"settings": {
"fontStyle": "underline"
}
},
{
"scope": [
"keyword.control"
],
"settings": {
"fontStyle": "italic",
"foreground": "var(--syntax-keyword)"
}
},
{
"scope": [
"variable.parameter"
],
"settings": {
"fontStyle": "italic"
}
},
{
"scope": [
"variable.parameter.function.language.special.self.python"
],
"settings": {
"fontStyle": "italic",
"foreground": "var(--syntax-property)"
}
},
{
"scope": [
"constant.character.format.placeholder.other.python"
],
"settings": {
"foreground": "var(--syntax-other)"
}
},
{
"scope": [
"markup.quote"
],
"settings": {
"fontStyle": "italic",
"foreground": "var(--syntax-markup)"
}
},
{
"scope": [
"markup.fenced_code.block"
],
"settings": {
"foreground": "var(--syntax-markup-fenced)"
}
},
{
"scope": [
"punctuation.definition.quote"
],
"settings": {
"foreground": "var(--syntax-quote)"
}
},
{
"scope": [
"meta.structure.dictionary.json support.type.property-name.json"
],
"settings": {
"foreground": "var(--syntax-json-0)"
}
},
{
"scope": [
"meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json"
],
"settings": {
"foreground": "var(--syntax-json-1)"
}
},
{
"scope": [
"meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json"
],
"settings": {
"foreground": "var(--syntax-json-2)"
}
},
{
"scope": [
"meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json"
],
"settings": {
"foreground": "var(--syntax-json-3)"
}
},
{
"scope": [
"meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json"
],
"settings": {
"foreground": "var(--syntax-json-0)"
}
},
{
"scope": [
"meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json"
],
"settings": {
"foreground": "var(--syntax-json-1)"
}
},
{
"scope": [
"meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json"
],
"settings": {
"foreground": "var(--syntax-json-2)"
}
},
{
"scope": [
"meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json"
],
"settings": {
"foreground": "var(--syntax-json-3)"
}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment