├── .editorconfig ├── .eslintrc.js ├── .gitattributes ├── .gitignore ├── .husky ├── .gitignore └── pre-commit ├── .prettierignore ├── .prettierrc ├── .vscode └── launch.json ├── .vscodeignore ├── CHANGELOG.md ├── INSTALL.md ├── LICENSE.md ├── README.md ├── ROADMAP.md ├── icon.png ├── package.json ├── src ├── @types │ ├── Palette.d.ts │ ├── ThemeColorsReference.d.ts │ └── ThemeSchema.d.ts ├── config │ └── index.ts ├── index.ts ├── scripts │ ├── build │ │ └── index.ts │ └── fetch-theme-colors-reference │ │ ├── index.ts │ │ └── scrape.ts ├── util │ ├── alpha.ts │ ├── color.ts │ └── press-enter-to-exit.ts └── variants │ ├── omni-owl-minimal_italics.ts │ └── omni-owl.ts ├── tsconfig.json ├── vsc-extension-quickstart.md └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | end_of_line = lf 3 | 4 | indent_style = space 5 | indent_size = 2 6 | 7 | [*.md] 8 | trim_trailing_whitespace = false -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | env: { 3 | es2021: true, 4 | node: true, 5 | }, 6 | extends: [ 7 | 'eslint:recommended', 8 | 'plugin:@typescript-eslint/eslint-recommended', 9 | 'plugin:@typescript-eslint/recommended', 10 | 'standard', 11 | 'prettier', 12 | ], 13 | parser: '@typescript-eslint/parser', 14 | parserOptions: { 15 | ecmaVersion: 'latest', 16 | sourceType: 'module', 17 | }, 18 | plugins: ['@typescript-eslint', 'prettier'], 19 | rules: { 20 | 'prettier/prettier': 'error', 21 | }, 22 | } 23 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Set default behavior to automatically normalize line endings. 2 | * text=auto 3 | 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | themes 3 | bin 4 | 5 | *.vsix 6 | 7 | .DS_Store -------------------------------------------------------------------------------- /.husky/.gitignore: -------------------------------------------------------------------------------- 1 | _ 2 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | . "$(dirname "$0")/_/husky.sh" 3 | 4 | npm run prettier:format 5 | npm run lint 6 | npx lint-staged 7 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | tsconfig.json -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "tabWidth": 2, 3 | "useTabs": false, 4 | "semi": false, 5 | "singleQuote": true, 6 | "trailingComma": "all", 7 | "arrowParens": "avoid", 8 | "endOfLine": "lf" 9 | } 10 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | // A launch configuration that launches the extension inside a new window 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | { 6 | "version": "0.2.0", 7 | "configurations": [ 8 | { 9 | "name": "Extension", 10 | "type": "extensionHost", 11 | "request": "launch", 12 | "args": ["--extensionDevelopmentPath=${workspaceFolder}"] 13 | } 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /.vscodeignore: -------------------------------------------------------------------------------- 1 | .vscode/** 2 | .vscode-test/** 3 | 4 | node_modules/** 5 | 6 | .husky/** 7 | 8 | src/** 9 | bin/** 10 | .github/** 11 | 12 | scripts/** 13 | tests/** 14 | 15 | .gitignore 16 | .gitattributes 17 | tsconfig.json 18 | yarn.lock 19 | 20 | .DS_Store 21 | .editorconfig 22 | .eslintrc.js 23 | .prettierrc 24 | 25 | ROADMAP.md 26 | vsc-extension-quickstart.md 27 | 28 | known_issues.md -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | All notable changes to the "omni-owl" extension will be documented in this file. 4 | 5 | Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. 6 | 7 | ## "0.1.0" 8 | 9 | - Initial release 10 | -------------------------------------------------------------------------------- /INSTALL.md: -------------------------------------------------------------------------------- 1 | ### [Visual Studio Code](https://code.visualstudio.com/) 2 | 3 | #### Install using Command Palette 4 | 5 | 1. Go to `View -> Command Palette` or press `Ctrl+Shift+P`; 6 | 2. Then enter `Install Extension`; 7 | 3. Write `Omni Owl`; 8 | 4. Select it or press `Enter` to install. 9 | 10 | #### Install using Git 11 | 12 | If you are a git user, you can install the theme and keep up to date by cloning the repo: 13 | 14 | $ git clone https://github.com/guilhermerodz/omni-owl ~/.vscode/extensions/theme-omni-owl 15 | $ cd ~/.vscode/extensions/theme-omni-owl 16 | $ npm install 17 | $ npm run build 18 | 19 | #### Activating theme 20 | 21 | Run Visual Studio Code. The `Omni Owl` theme will be available from `File -> Preferences -> Color Theme` dropdown menu. 22 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2022 Omni Owl Theme 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 |
3 | Omni Owl Logo 4 |
5 | Omni Owl for Visual Studio Code 6 |
7 |

8 | 9 |

10 | Dark theme for Visual Studio Code (with Italics) 11 |

12 | 13 |

14 | PRs welcome! 15 | 16 | License 17 |

18 | 19 |

20 | Install • 21 | Team • 22 | Imitate Preview • 23 | License 24 |

25 | 26 |

27 | Omni Owl screenshot for Visual Studio Code 28 |

29 | 30 | ## Install 31 | 32 | All instructions can be found at [INSTALL.md](./INSTALL.md). 33 | 34 | ## Preferences shown in the preview 35 | 36 | The font in the preview image is Dank Mono, [available here](https://dank.sh/). Editor settings to activate font ligatures: 37 | 38 | ``` 39 | "editor.fontFamily": "Dank Mono", 40 | "editor.fontLigatures": true, 41 | "editor.fontSize": 14, 42 | "editor.letterSpacing": 0.4, 43 | "editor.lineHeight": 2, 44 | ``` 45 | 46 | ## Team 47 | 48 | This theme is heavily inspired by [Omni from Rocketseat](https://github.com/getomni/visual-studio-code) and [Night Owl from Sarah Drasner](https://github.com/sdras/night-owl-vscode-theme). 49 | It is maintained by the following person(s) and a bunch of [awesome contributors](https://github.com/guilhermerodz/omni-owl/graphs/contributors). 50 | 51 | | [![Guilherme Rodz](https://github.com/guilhermerodz.png?size=100)](https://github.com/guilhermerodz) | 52 | | ---------------------------------------------------------------------------------------------------- | 53 | | [Guilherme Rodz](https://github.com/guilhermerodz) | 54 | 55 | ## Disclaimer 56 | 57 | This theme is heavily inspired by [Omni from Rocketseat](https://github.com/getomni/visual-studio-code). 58 | The italics are inspired by [Night Owl from Sarah Drasner](https://github.com/sdras/night-owl-vscode-theme). 59 | 60 | ## License 61 | 62 | [MIT License](./LICENSE.md) 63 | -------------------------------------------------------------------------------- /ROADMAP.md: -------------------------------------------------------------------------------- 1 | # Roadmap 2 | 3 | ## DX 4 | 5 | - [ ] Transform this project into a multi-port generator (like Aura Theme does) 6 | 7 | ## Theme 8 | 9 | - [ ] Change the color of scrollbars (make it PINK). 10 | 11 | Nothing here yet. 12 | -------------------------------------------------------------------------------- /icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilhermerodz/omni-owl/cc1e2e34c8898fa9f4a69efc1e82a00054b002cf/icon.png -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "omni-owl", 3 | "displayName": "Omni Owl Theme", 4 | "homepage": "https://github.com/guilhermerodz/omni-owl", 5 | "description": "A dark theme based on Omni and Night Owl ⚡️", 6 | "author": "Guilherme Rodz ", 7 | "publisher": "guilhermerodz", 8 | "version": "0.1.1", 9 | "engines": { 10 | "vscode": "^1.64.0" 11 | }, 12 | "maintainers": [ 13 | "Guilherme Rodz " 14 | ], 15 | "categories": [ 16 | "Themes" 17 | ], 18 | "keywords": [ 19 | "Theme", 20 | "Dark Theme", 21 | "Omni Owl", 22 | "Night Owl", 23 | "Omni", 24 | "Italic", 25 | "Vivid Colors", 26 | "Color Scheme" 27 | ], 28 | "icon": "icon.png", 29 | "galleryBanner": { 30 | "color": "#17181A", 31 | "theme": "dark" 32 | }, 33 | "repository": { 34 | "type": "git", 35 | "url": "https://github.com/guilhermerodz/omni-owl" 36 | }, 37 | "bugs": { 38 | "url": "https://github.com/guilhermerodz/omni-owl/issues" 39 | }, 40 | "contributes": { 41 | "themes": [ 42 | { 43 | "label": "Omni Owl", 44 | "path": "./themes/Omni Owl.json", 45 | "uiTheme": "vs-dark" 46 | }, 47 | { 48 | "label": "Omni Owl (Minimal Italics)", 49 | "path": "./themes/Omni Owl (Minimal Italics).json", 50 | "uiTheme": "vs-dark" 51 | } 52 | ] 53 | }, 54 | "lint-staged": { 55 | "*.ts": "eslint --fix" 56 | }, 57 | "scripts": { 58 | "prepare": "husky install", 59 | "package": "mkdir -p ./bin && vsce package -o ./bin/omni-owl.vsix", 60 | "vscode:prepublish": "npm run build:fetch", 61 | "vsce-publish": "vsce publish", 62 | "postinstall": "npm run fetch:reference", 63 | "dev": "DEBUG_VSCODE=1 ts-node-dev -r tsconfig-paths/register ./src/index.ts", 64 | "exec:file": "ts-node -r tsconfig-paths/register", 65 | "build": "npm run exec:file ./src/index.ts", 66 | "build:fetch": "npm run fetch:reference && npm run build", 67 | "fetch:reference": "npm run exec:file ./src/scripts/fetch-theme-colors-reference", 68 | "prettier:format": "prettier --config .prettierrc 'src/**/*.ts' --write", 69 | "lint": "eslint . --ext .ts" 70 | }, 71 | "devDependencies": { 72 | "@types/node": "^17.0.21", 73 | "@types/to-json-schema": "^0.2.1", 74 | "@typescript-eslint/eslint-plugin": "^5.12.1", 75 | "@typescript-eslint/parser": "^5.12.1", 76 | "eslint": "^8.9.0", 77 | "eslint-config-prettier": "^8.4.0", 78 | "eslint-config-standard": "^16.0.3", 79 | "eslint-plugin-import": "^2.25.4", 80 | "eslint-plugin-node": "^11.1.0", 81 | "eslint-plugin-prettier": "^4.0.0", 82 | "eslint-plugin-promise": "^6.0.0", 83 | "husky": "^7.0.4", 84 | "json-schema-to-typescript": "^10.1.5", 85 | "lint-staged": "^12.3.4", 86 | "prettier": "^2.5.1", 87 | "to-json-schema": "^0.2.5", 88 | "ts-node": "^10.5.0", 89 | "ts-node-dev": "^1.1.8", 90 | "tsconfig-paths": "^3.12.0", 91 | "typescript": "^4.5.5", 92 | "vsce": "^2.6.7" 93 | }, 94 | "dependencies": {}, 95 | "license": "MIT" 96 | } 97 | -------------------------------------------------------------------------------- /src/@types/Palette.d.ts: -------------------------------------------------------------------------------- 1 | export type Palette = { 2 | base: { 3 | [key: string]: string 4 | } 5 | other: { 6 | [key: string]: string 7 | } 8 | ansi: { 9 | COLOR0: string 10 | COLOR1: string 11 | COLOR2: string 12 | COLOR3: string 13 | COLOR4: string 14 | COLOR5: string 15 | COLOR6: string 16 | COLOR7: string 17 | COLOR8: string 18 | COLOR9: string 19 | COLOR10: string 20 | COLOR11: string 21 | COLOR12: string 22 | COLOR13: string 23 | COLOR14: string 24 | COLOR15: string 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/@types/ThemeColorsReference.d.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | /** 3 | * This file was automatically generated by json-schema-to-typescript. 4 | * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file, 5 | * and run json-schema-to-typescript to regenerate this file. 6 | */ 7 | 8 | export interface ThemeColorsReference { 9 | 'activityBar.activeBackground'?: string 10 | 'activityBar.activeBorder'?: string 11 | 'activityBar.activeFocusBorder'?: string 12 | 'activityBar.background'?: string 13 | 'activityBar.border'?: string 14 | 'activityBar.dropBorder'?: string 15 | 'activityBar.foreground'?: string 16 | 'activityBar.inactiveForeground'?: string 17 | 'activityBarBadge.background'?: string 18 | 'activityBarBadge.foreground'?: string 19 | 'badge.background'?: string 20 | 'badge.foreground'?: string 21 | 'banner.background'?: string 22 | 'banner.foreground'?: string 23 | 'banner.iconForeground'?: string 24 | 'breadcrumb.activeSelectionForeground'?: string 25 | 'breadcrumb.background'?: string 26 | 'breadcrumb.focusForeground'?: string 27 | 'breadcrumb.foreground'?: string 28 | 'breadcrumbPicker.background'?: string 29 | 'button.background'?: string 30 | 'button.border'?: string 31 | 'button.foreground'?: string 32 | 'button.hoverBackground'?: string 33 | 'button.secondaryBackground'?: string 34 | 'button.secondaryForeground'?: string 35 | 'button.secondaryHoverBackground'?: string 36 | 'charts.blue'?: string 37 | 'charts.foreground'?: string 38 | 'charts.green'?: string 39 | 'charts.lines'?: string 40 | 'charts.orange'?: string 41 | 'charts.purple'?: string 42 | 'charts.red'?: string 43 | 'charts.yellow'?: string 44 | 'checkbox.background'?: string 45 | 'checkbox.border'?: string 46 | 'checkbox.foreground'?: string 47 | contrastActiveBorder?: string 48 | contrastBorder?: string 49 | 'debugConsole.errorForeground'?: string 50 | 'debugConsole.infoForeground'?: string 51 | 'debugConsole.sourceForeground'?: string 52 | 'debugConsole.warningForeground'?: string 53 | 'debugConsoleInputIcon.foreground'?: string 54 | 'debugExceptionWidget.background'?: string 55 | 'debugExceptionWidget.border'?: string 56 | 'debugIcon.breakpointCurrentStackframeForeground'?: string 57 | 'debugIcon.breakpointDisabledForeground'?: string 58 | 'debugIcon.breakpointForeground'?: string 59 | 'debugIcon.breakpointStackframeForeground'?: string 60 | 'debugIcon.breakpointUnverifiedForeground'?: string 61 | 'debugIcon.continueForeground'?: string 62 | 'debugIcon.disconnectForeground'?: string 63 | 'debugIcon.pauseForeground'?: string 64 | 'debugIcon.restartForeground'?: string 65 | 'debugIcon.startForeground'?: string 66 | 'debugIcon.stepBackForeground'?: string 67 | 'debugIcon.stepIntoForeground'?: string 68 | 'debugIcon.stepOutForeground'?: string 69 | 'debugIcon.stepOverForeground'?: string 70 | 'debugIcon.stopForeground'?: string 71 | 'debugTokenExpression.boolean'?: string 72 | 'debugTokenExpression.error'?: string 73 | 'debugTokenExpression.name'?: string 74 | 'debugTokenExpression.number'?: string 75 | 'debugTokenExpression.string'?: string 76 | 'debugTokenExpression.value'?: string 77 | 'debugToolBar.background'?: string 78 | 'debugToolBar.border'?: string 79 | 'debugView.exceptionLabelBackground'?: string 80 | 'debugView.exceptionLabelForeground'?: string 81 | 'debugView.stateLabelBackground'?: string 82 | 'debugView.stateLabelForeground'?: string 83 | 'debugView.valueChangedHighlight'?: string 84 | descriptionForeground?: string 85 | 'diffEditor.border'?: string 86 | 'diffEditor.diagonalFill'?: string 87 | 'diffEditor.insertedTextBackground'?: string 88 | 'diffEditor.insertedTextBorder'?: string 89 | 'diffEditor.removedTextBackground'?: string 90 | 'diffEditor.removedTextBorder'?: string 91 | 'dropdown.background'?: string 92 | 'dropdown.border'?: string 93 | 'dropdown.foreground'?: string 94 | 'dropdown.listBackground'?: string 95 | 'editor.background'?: string 96 | 'editor.findMatchBackground'?: string 97 | 'editor.findMatchBorder'?: string 98 | 'editor.findMatchHighlightBackground'?: string 99 | 'editor.findMatchHighlightBorder'?: string 100 | 'editor.findRangeHighlightBackground'?: string 101 | 'editor.findRangeHighlightBorder'?: string 102 | 'editor.focusedStackFrameHighlightBackground'?: string 103 | 'editor.foldBackground'?: string 104 | 'editor.foreground'?: string 105 | 'editor.hoverHighlightBackground'?: string 106 | 'editor.inactiveSelectionBackground'?: string 107 | 'editor.inlineValuesBackground'?: string 108 | 'editor.inlineValuesForeground'?: string 109 | 'editor.lineHighlightBackground'?: string 110 | 'editor.lineHighlightBorder'?: string 111 | 'editor.linkedEditingBackground'?: string 112 | 'editor.rangeHighlightBackground'?: string 113 | 'editor.rangeHighlightBorder'?: string 114 | 'editor.selectionBackground'?: string 115 | 'editor.selectionForeground'?: string 116 | 'editor.selectionHighlightBackground'?: string 117 | 'editor.selectionHighlightBorder'?: string 118 | 'editor.snippetFinalTabstopHighlightBackground'?: string 119 | 'editor.snippetFinalTabstopHighlightBorder'?: string 120 | 'editor.snippetTabstopHighlightBackground'?: string 121 | 'editor.snippetTabstopHighlightBorder'?: string 122 | 'editor.stackFrameHighlightBackground'?: string 123 | 'editor.symbolHighlightBackground'?: string 124 | 'editor.symbolHighlightBorder'?: string 125 | 'editor.wordHighlightBackground'?: string 126 | 'editor.wordHighlightBorder'?: string 127 | 'editor.wordHighlightStrongBackground'?: string 128 | 'editor.wordHighlightStrongBorder'?: string 129 | 'editorBracketHighlight.foreground1'?: string 130 | 'editorBracketHighlight.foreground2'?: string 131 | 'editorBracketHighlight.foreground3'?: string 132 | 'editorBracketHighlight.foreground4'?: string 133 | 'editorBracketHighlight.foreground5'?: string 134 | 'editorBracketHighlight.foreground6'?: string 135 | 'editorBracketHighlight.unexpectedBracket.foreground'?: string 136 | 'editorBracketMatch.background'?: string 137 | 'editorBracketMatch.border'?: string 138 | 'editorBracketPairGuide.activeBackground1'?: string 139 | 'editorBracketPairGuide.activeBackground2'?: string 140 | 'editorBracketPairGuide.activeBackground3'?: string 141 | 'editorBracketPairGuide.activeBackground4'?: string 142 | 'editorBracketPairGuide.activeBackground5'?: string 143 | 'editorBracketPairGuide.activeBackground6'?: string 144 | 'editorBracketPairGuide.background1'?: string 145 | 'editorBracketPairGuide.background2'?: string 146 | 'editorBracketPairGuide.background3'?: string 147 | 'editorBracketPairGuide.background4'?: string 148 | 'editorBracketPairGuide.background5'?: string 149 | 'editorBracketPairGuide.background6'?: string 150 | 'editorCodeLens.foreground'?: string 151 | 'editorCursor.background'?: string 152 | 'editorCursor.foreground'?: string 153 | 'editorError.background'?: string 154 | 'editorError.border'?: string 155 | 'editorError.foreground'?: string 156 | 'editorGhostText.background'?: string 157 | 'editorGhostText.border'?: string 158 | 'editorGhostText.foreground'?: string 159 | 'editorGroup.border'?: string 160 | 'editorGroup.dropBackground'?: string 161 | 'editorGroup.emptyBackground'?: string 162 | 'editorGroup.focusedEmptyBorder'?: string 163 | 'editorGroupHeader.border'?: string 164 | 'editorGroupHeader.noTabsBackground'?: string 165 | 'editorGroupHeader.tabsBackground'?: string 166 | 'editorGroupHeader.tabsBorder'?: string 167 | 'editorGutter.addedBackground'?: string 168 | 'editorGutter.background'?: string 169 | 'editorGutter.commentRangeForeground'?: string 170 | 'editorGutter.deletedBackground'?: string 171 | 'editorGutter.foldingControlForeground'?: string 172 | 'editorGutter.modifiedBackground'?: string 173 | 'editorHint.border'?: string 174 | 'editorHint.foreground'?: string 175 | 'editorHoverWidget.background'?: string 176 | 'editorHoverWidget.border'?: string 177 | 'editorHoverWidget.foreground'?: string 178 | 'editorHoverWidget.highlightForeground'?: string 179 | 'editorHoverWidget.statusBarBackground'?: string 180 | 'editorIndentGuide.activeBackground'?: string 181 | 'editorIndentGuide.background'?: string 182 | 'editorInfo.background'?: string 183 | 'editorInfo.border'?: string 184 | 'editorInfo.foreground'?: string 185 | 'editorInlayHint.background'?: string 186 | 'editorInlayHint.foreground'?: string 187 | 'editorInlayHint.parameterBackground'?: string 188 | 'editorInlayHint.parameterForeground'?: string 189 | 'editorInlayHint.typeBackground'?: string 190 | 'editorInlayHint.typeForeground'?: string 191 | 'editorLightBulb.foreground'?: string 192 | 'editorLightBulbAutoFix.foreground'?: string 193 | 'editorLineNumber.activeForeground'?: string 194 | 'editorLineNumber.foreground'?: string 195 | 'editorLink.activeForeground'?: string 196 | 'editorMarkerNavigation.background'?: string 197 | 'editorMarkerNavigationError.background'?: string 198 | 'editorMarkerNavigationError.headerBackground'?: string 199 | 'editorMarkerNavigationInfo.background'?: string 200 | 'editorMarkerNavigationInfo.headerBackground'?: string 201 | 'editorMarkerNavigationWarning.background'?: string 202 | 'editorMarkerNavigationWarning.headerBackground'?: string 203 | 'editorOverviewRuler.addedForeground'?: string 204 | 'editorOverviewRuler.background'?: string 205 | 'editorOverviewRuler.border'?: string 206 | 'editorOverviewRuler.bracketMatchForeground'?: string 207 | 'editorOverviewRuler.commonContentForeground'?: string 208 | 'editorOverviewRuler.currentContentForeground'?: string 209 | 'editorOverviewRuler.deletedForeground'?: string 210 | 'editorOverviewRuler.errorForeground'?: string 211 | 'editorOverviewRuler.findMatchForeground'?: string 212 | 'editorOverviewRuler.incomingContentForeground'?: string 213 | 'editorOverviewRuler.infoForeground'?: string 214 | 'editorOverviewRuler.modifiedForeground'?: string 215 | 'editorOverviewRuler.rangeHighlightForeground'?: string 216 | 'editorOverviewRuler.selectionHighlightForeground'?: string 217 | 'editorOverviewRuler.warningForeground'?: string 218 | 'editorOverviewRuler.wordHighlightForeground'?: string 219 | 'editorOverviewRuler.wordHighlightStrongForeground'?: string 220 | 'editorPane.background'?: string 221 | 'editorRuler.foreground'?: string 222 | 'editorSuggestWidget.background'?: string 223 | 'editorSuggestWidget.border'?: string 224 | 'editorSuggestWidget.focusHighlightForeground'?: string 225 | 'editorSuggestWidget.foreground'?: string 226 | 'editorSuggestWidget.highlightForeground'?: string 227 | 'editorSuggestWidget.selectedBackground'?: string 228 | 'editorSuggestWidget.selectedForeground'?: string 229 | 'editorSuggestWidget.selectedIconForeground'?: string 230 | 'editorSuggestWidgetStatus.foreground'?: string 231 | 'editorUnicodeHighlight.border'?: string 232 | 'editorUnnecessaryCode.border'?: string 233 | 'editorUnnecessaryCode.opacity'?: string 234 | 'editorWarning.background'?: string 235 | 'editorWarning.border'?: string 236 | 'editorWarning.foreground'?: string 237 | 'editorWhitespace.foreground'?: string 238 | 'editorWidget.background'?: string 239 | 'editorWidget.border'?: string 240 | 'editorWidget.foreground'?: string 241 | 'editorWidget.resizeBorder'?: string 242 | errorForeground?: string 243 | 'extensionBadge.remoteBackground'?: string 244 | 'extensionBadge.remoteForeground'?: string 245 | 'extensionButton.prominentBackground'?: string 246 | 'extensionButton.prominentForeground'?: string 247 | 'extensionButton.prominentHoverBackground'?: string 248 | 'extensionIcon.preReleaseForeground'?: string 249 | 'extensionIcon.starForeground'?: string 250 | 'extensionIcon.verifiedForeground'?: string 251 | focusBorder?: string 252 | foreground?: string 253 | 'gitDecoration.addedResourceForeground'?: string 254 | 'gitDecoration.conflictingResourceForeground'?: string 255 | 'gitDecoration.deletedResourceForeground'?: string 256 | 'gitDecoration.ignoredResourceForeground'?: string 257 | 'gitDecoration.modifiedResourceForeground'?: string 258 | 'gitDecoration.renamedResourceForeground'?: string 259 | 'gitDecoration.stageDeletedResourceForeground'?: string 260 | 'gitDecoration.stageModifiedResourceForeground'?: string 261 | 'gitDecoration.submoduleResourceForeground'?: string 262 | 'gitDecoration.untrackedResourceForeground'?: string 263 | 'icon.foreground'?: string 264 | 'input.background'?: string 265 | 'input.border'?: string 266 | 'input.foreground'?: string 267 | 'input.placeholderForeground'?: string 268 | 'inputOption.activeBackground'?: string 269 | 'inputOption.activeBorder'?: string 270 | 'inputOption.activeForeground'?: string 271 | 'inputOption.hoverBackground'?: string 272 | 'inputValidation.errorBackground'?: string 273 | 'inputValidation.errorBorder'?: string 274 | 'inputValidation.errorForeground'?: string 275 | 'inputValidation.infoBackground'?: string 276 | 'inputValidation.infoBorder'?: string 277 | 'inputValidation.infoForeground'?: string 278 | 'inputValidation.warningBackground'?: string 279 | 'inputValidation.warningBorder'?: string 280 | 'inputValidation.warningForeground'?: string 281 | 'keybindingLabel.background'?: string 282 | 'keybindingLabel.border'?: string 283 | 'keybindingLabel.bottomBorder'?: string 284 | 'keybindingLabel.foreground'?: string 285 | 'keybindingTable.headerBackground'?: string 286 | 'keybindingTable.rowsBackground'?: string 287 | 'list.activeSelectionBackground'?: string 288 | 'list.activeSelectionForeground'?: string 289 | 'list.activeSelectionIconForeground'?: string 290 | 'list.deemphasizedForeground'?: string 291 | 'list.dropBackground'?: string 292 | 'list.errorForeground'?: string 293 | 'list.filterMatchBackground'?: string 294 | 'list.filterMatchBorder'?: string 295 | 'list.focusBackground'?: string 296 | 'list.focusForeground'?: string 297 | 'list.focusHighlightForeground'?: string 298 | 'list.focusOutline'?: string 299 | 'list.highlightForeground'?: string 300 | 'list.hoverBackground'?: string 301 | 'list.hoverForeground'?: string 302 | 'list.inactiveFocusBackground'?: string 303 | 'list.inactiveFocusOutline'?: string 304 | 'list.inactiveSelectionBackground'?: string 305 | 'list.inactiveSelectionForeground'?: string 306 | 'list.inactiveSelectionIconForeground'?: string 307 | 'list.invalidItemForeground'?: string 308 | 'list.warningForeground'?: string 309 | 'listFilterWidget.background'?: string 310 | 'listFilterWidget.noMatchesOutline'?: string 311 | 'listFilterWidget.outline'?: string 312 | 'menu.background'?: string 313 | 'menu.border'?: string 314 | 'menu.foreground'?: string 315 | 'menu.selectionBackground'?: string 316 | 'menu.selectionBorder'?: string 317 | 'menu.selectionForeground'?: string 318 | 'menu.separatorBackground'?: string 319 | 'menubar.selectionBackground'?: string 320 | 'menubar.selectionBorder'?: string 321 | 'menubar.selectionForeground'?: string 322 | 'merge.border'?: string 323 | 'merge.commonContentBackground'?: string 324 | 'merge.commonHeaderBackground'?: string 325 | 'merge.currentContentBackground'?: string 326 | 'merge.currentHeaderBackground'?: string 327 | 'merge.incomingContentBackground'?: string 328 | 'merge.incomingHeaderBackground'?: string 329 | 'minimap.background'?: string 330 | 'minimap.errorHighlight'?: string 331 | 'minimap.findMatchHighlight'?: string 332 | 'minimap.foregroundOpacity'?: string 333 | 'minimap.selectionHighlight'?: string 334 | 'minimap.selectionOccurrenceHighlight'?: string 335 | 'minimap.warningHighlight'?: string 336 | 'minimapGutter.addedBackground'?: string 337 | 'minimapGutter.deletedBackground'?: string 338 | 'minimapGutter.modifiedBackground'?: string 339 | 'minimapSlider.activeBackground'?: string 340 | 'minimapSlider.background'?: string 341 | 'minimapSlider.hoverBackground'?: string 342 | 'notebook.cellBorderColor'?: string 343 | 'notebook.cellEditorBackground'?: string 344 | 'notebook.cellHoverBackground'?: string 345 | 'notebook.cellInsertionIndicator'?: string 346 | 'notebook.cellStatusBarItemHoverBackground'?: string 347 | 'notebook.cellToolbarSeparator'?: string 348 | 'notebook.focusedCellBackground'?: string 349 | 'notebook.focusedCellBorder'?: string 350 | 'notebook.focusedEditorBorder'?: string 351 | 'notebook.inactiveFocusedCellBorder'?: string 352 | 'notebook.inactiveSelectedCellBorder'?: string 353 | 'notebook.outputContainerBackgroundColor'?: string 354 | 'notebook.outputContainerBorderColor'?: string 355 | 'notebook.selectedCellBackground'?: string 356 | 'notebook.selectedCellBorder'?: string 357 | 'notebook.symbolHighlightBackground'?: string 358 | 'notebookScrollbarSlider.activeBackground'?: string 359 | 'notebookScrollbarSlider.background'?: string 360 | 'notebookScrollbarSlider.hoverBackground'?: string 361 | 'notebookStatusErrorIcon.foreground'?: string 362 | 'notebookStatusRunningIcon.foreground'?: string 363 | 'notebookStatusSuccessIcon.foreground'?: string 364 | 'notificationCenter.border'?: string 365 | 'notificationCenterHeader.background'?: string 366 | 'notificationCenterHeader.foreground'?: string 367 | 'notificationLink.foreground'?: string 368 | 'notificationToast.border'?: string 369 | 'notifications.background'?: string 370 | 'notifications.border'?: string 371 | 'notifications.foreground'?: string 372 | 'notificationsErrorIcon.foreground'?: string 373 | 'notificationsInfoIcon.foreground'?: string 374 | 'notificationsWarningIcon.foreground'?: string 375 | 'panel.background'?: string 376 | 'panel.border'?: string 377 | 'panel.dropBorder'?: string 378 | 'panelInput.border'?: string 379 | 'panelSection.border'?: string 380 | 'panelSection.dropBackground'?: string 381 | 'panelSectionHeader.background'?: string 382 | 'panelSectionHeader.border'?: string 383 | 'panelSectionHeader.foreground'?: string 384 | 'panelTitle.activeBorder'?: string 385 | 'panelTitle.activeForeground'?: string 386 | 'panelTitle.inactiveForeground'?: string 387 | 'peekView.border'?: string 388 | 'peekViewEditor.background'?: string 389 | 'peekViewEditor.matchHighlightBackground'?: string 390 | 'peekViewEditor.matchHighlightBorder'?: string 391 | 'peekViewEditorGutter.background'?: string 392 | 'peekViewResult.background'?: string 393 | 'peekViewResult.fileForeground'?: string 394 | 'peekViewResult.lineForeground'?: string 395 | 'peekViewResult.matchHighlightBackground'?: string 396 | 'peekViewResult.selectionBackground'?: string 397 | 'peekViewResult.selectionForeground'?: string 398 | 'peekViewTitle.background'?: string 399 | 'peekViewTitleDescription.foreground'?: string 400 | 'peekViewTitleLabel.foreground'?: string 401 | 'pickerGroup.border'?: string 402 | 'pickerGroup.foreground'?: string 403 | 'ports.iconRunningProcessForeground'?: string 404 | 'problemsErrorIcon.foreground'?: string 405 | 'problemsInfoIcon.foreground'?: string 406 | 'problemsWarningIcon.foreground'?: string 407 | 'progressBar.background'?: string 408 | 'quickInput.background'?: string 409 | 'quickInput.foreground'?: string 410 | 'quickInputList.focusBackground'?: string 411 | 'quickInputList.focusForeground'?: string 412 | 'quickInputList.focusIconForeground'?: string 413 | 'quickInputTitle.background'?: string 414 | 'sash.hoverBorder'?: string 415 | 'scm.providerBorder'?: string 416 | 'scrollbar.shadow'?: string 417 | 'scrollbarSlider.activeBackground'?: string 418 | 'scrollbarSlider.background'?: string 419 | 'scrollbarSlider.hoverBackground'?: string 420 | 'searchEditor.findMatchBackground'?: string 421 | 'searchEditor.findMatchBorder'?: string 422 | 'searchEditor.textInputBorder'?: string 423 | 'selection.background'?: string 424 | 'settings.checkboxBackground'?: string 425 | 'settings.checkboxBorder'?: string 426 | 'settings.checkboxForeground'?: string 427 | 'settings.dropdownBackground'?: string 428 | 'settings.dropdownBorder'?: string 429 | 'settings.dropdownForeground'?: string 430 | 'settings.dropdownListBorder'?: string 431 | 'settings.focusedRowBackground'?: string 432 | 'settings.focusedRowBorder'?: string 433 | 'settings.headerForeground'?: string 434 | 'settings.modifiedItemIndicator'?: string 435 | 'settings.numberInputBackground'?: string 436 | 'settings.numberInputBorder'?: string 437 | 'settings.numberInputForeground'?: string 438 | 'settings.rowHoverBackground'?: string 439 | 'settings.textInputBackground'?: string 440 | 'settings.textInputBorder'?: string 441 | 'settings.textInputForeground'?: string 442 | 'sideBar.background'?: string 443 | 'sideBar.border'?: string 444 | 'sideBar.dropBackground'?: string 445 | 'sideBar.foreground'?: string 446 | 'sideBarSectionHeader.background'?: string 447 | 'sideBarSectionHeader.border'?: string 448 | 'sideBarSectionHeader.foreground'?: string 449 | 'sideBarTitle.foreground'?: string 450 | 'sideBySideEditor.horizontalBorder'?: string 451 | 'sideBySideEditor.verticalBorder'?: string 452 | 'statusBar.background'?: string 453 | 'statusBar.border'?: string 454 | 'statusBar.debuggingBackground'?: string 455 | 'statusBar.debuggingBorder'?: string 456 | 'statusBar.debuggingForeground'?: string 457 | 'statusBar.foreground'?: string 458 | 'statusBar.noFolderBackground'?: string 459 | 'statusBar.noFolderBorder'?: string 460 | 'statusBar.noFolderForeground'?: string 461 | 'statusBarItem.activeBackground'?: string 462 | 'statusBarItem.compactHoverBackground'?: string 463 | 'statusBarItem.errorBackground'?: string 464 | 'statusBarItem.errorForeground'?: string 465 | 'statusBarItem.hoverBackground'?: string 466 | 'statusBarItem.prominentBackground'?: string 467 | 'statusBarItem.prominentForeground'?: string 468 | 'statusBarItem.prominentHoverBackground'?: string 469 | 'statusBarItem.remoteBackground'?: string 470 | 'statusBarItem.remoteForeground'?: string 471 | 'statusBarItem.warningBackground'?: string 472 | 'statusBarItem.warningForeground'?: string 473 | 'symbolIcon.arrayForeground'?: string 474 | 'symbolIcon.booleanForeground'?: string 475 | 'symbolIcon.classForeground'?: string 476 | 'symbolIcon.colorForeground'?: string 477 | 'symbolIcon.constantForeground'?: string 478 | 'symbolIcon.constructorForeground'?: string 479 | 'symbolIcon.enumeratorForeground'?: string 480 | 'symbolIcon.enumeratorMemberForeground'?: string 481 | 'symbolIcon.eventForeground'?: string 482 | 'symbolIcon.fieldForeground'?: string 483 | 'symbolIcon.fileForeground'?: string 484 | 'symbolIcon.folderForeground'?: string 485 | 'symbolIcon.functionForeground'?: string 486 | 'symbolIcon.interfaceForeground'?: string 487 | 'symbolIcon.keyForeground'?: string 488 | 'symbolIcon.keywordForeground'?: string 489 | 'symbolIcon.methodForeground'?: string 490 | 'symbolIcon.moduleForeground'?: string 491 | 'symbolIcon.namespaceForeground'?: string 492 | 'symbolIcon.nullForeground'?: string 493 | 'symbolIcon.numberForeground'?: string 494 | 'symbolIcon.objectForeground'?: string 495 | 'symbolIcon.operatorForeground'?: string 496 | 'symbolIcon.packageForeground'?: string 497 | 'symbolIcon.propertyForeground'?: string 498 | 'symbolIcon.referenceForeground'?: string 499 | 'symbolIcon.snippetForeground'?: string 500 | 'symbolIcon.stringForeground'?: string 501 | 'symbolIcon.structForeground'?: string 502 | 'symbolIcon.textForeground'?: string 503 | 'symbolIcon.typeParameterForeground'?: string 504 | 'symbolIcon.unitForeground'?: string 505 | 'symbolIcon.variableForeground'?: string 506 | 'tab.activeBackground'?: string 507 | 'tab.activeBorder'?: string 508 | 'tab.activeBorderTop'?: string 509 | 'tab.activeForeground'?: string 510 | 'tab.activeModifiedBorder'?: string 511 | 'tab.border'?: string 512 | 'tab.hoverBackground'?: string 513 | 'tab.hoverBorder'?: string 514 | 'tab.hoverForeground'?: string 515 | 'tab.inactiveBackground'?: string 516 | 'tab.inactiveForeground'?: string 517 | 'tab.inactiveModifiedBorder'?: string 518 | 'tab.lastPinnedBorder'?: string 519 | 'tab.unfocusedActiveBackground'?: string 520 | 'tab.unfocusedActiveBorder'?: string 521 | 'tab.unfocusedActiveBorderTop'?: string 522 | 'tab.unfocusedActiveForeground'?: string 523 | 'tab.unfocusedActiveModifiedBorder'?: string 524 | 'tab.unfocusedHoverBackground'?: string 525 | 'tab.unfocusedHoverBorder'?: string 526 | 'tab.unfocusedHoverForeground'?: string 527 | 'tab.unfocusedInactiveBackground'?: string 528 | 'tab.unfocusedInactiveForeground'?: string 529 | 'tab.unfocusedInactiveModifiedBorder'?: string 530 | 'terminal.ansiBlack'?: string 531 | 'terminal.ansiBlue'?: string 532 | 'terminal.ansiBrightBlack'?: string 533 | 'terminal.ansiBrightBlue'?: string 534 | 'terminal.ansiBrightCyan'?: string 535 | 'terminal.ansiBrightGreen'?: string 536 | 'terminal.ansiBrightMagenta'?: string 537 | 'terminal.ansiBrightRed'?: string 538 | 'terminal.ansiBrightWhite'?: string 539 | 'terminal.ansiBrightYellow'?: string 540 | 'terminal.ansiCyan'?: string 541 | 'terminal.ansiGreen'?: string 542 | 'terminal.ansiMagenta'?: string 543 | 'terminal.ansiRed'?: string 544 | 'terminal.ansiWhite'?: string 545 | 'terminal.ansiYellow'?: string 546 | 'terminal.background'?: string 547 | 'terminal.border'?: string 548 | 'terminal.dropBackground'?: string 549 | 'terminal.foreground'?: string 550 | 'terminal.selectionBackground'?: string 551 | 'terminal.tab.activeBorder'?: string 552 | 'terminalCursor.background'?: string 553 | 'terminalCursor.foreground'?: string 554 | 'testing.iconErrored'?: string 555 | 'testing.iconFailed'?: string 556 | 'testing.iconPassed'?: string 557 | 'testing.iconQueued'?: string 558 | 'testing.iconSkipped'?: string 559 | 'testing.iconUnset'?: string 560 | 'testing.message.error.decorationForeground'?: string 561 | 'testing.message.error.lineBackground'?: string 562 | 'testing.message.info.decorationForeground'?: string 563 | 'testing.message.info.lineBackground'?: string 564 | 'testing.peekBorder'?: string 565 | 'testing.peekHeaderBackground'?: string 566 | 'testing.runAction'?: string 567 | 'textBlockQuote.background'?: string 568 | 'textBlockQuote.border'?: string 569 | 'textCodeBlock.background'?: string 570 | 'textLink.activeForeground'?: string 571 | 'textLink.foreground'?: string 572 | 'textPreformat.foreground'?: string 573 | 'textSeparator.foreground'?: string 574 | 'titleBar.activeBackground'?: string 575 | 'titleBar.activeForeground'?: string 576 | 'titleBar.border'?: string 577 | 'titleBar.inactiveBackground'?: string 578 | 'titleBar.inactiveForeground'?: string 579 | 'toolbar.activeBackground'?: string 580 | 'toolbar.hoverBackground'?: string 581 | 'toolbar.hoverOutline'?: string 582 | 'tree.indentGuidesStroke'?: string 583 | 'tree.tableColumnsBorder'?: string 584 | 'tree.tableOddRowsBackground'?: string 585 | 'walkThrough.embeddedEditorBackground'?: string 586 | 'welcomePage.background'?: string 587 | 'welcomePage.progress.background'?: string 588 | 'welcomePage.progress.foreground'?: string 589 | 'welcomePage.tileBackground'?: string 590 | 'welcomePage.tileHoverBackground'?: string 591 | 'welcomePage.tileShadow'?: string 592 | 'widget.shadow'?: string 593 | 'window.activeBorder'?: string 594 | 'window.inactiveBorder'?: string 595 | } 596 | -------------------------------------------------------------------------------- /src/@types/ThemeSchema.d.ts: -------------------------------------------------------------------------------- 1 | import { ThemeColorsReference } from './ThemeColorsReference' 2 | 3 | export type TokenColor = { 4 | name?: string 5 | scope: string[] // There are semantic, common scopes which can be found at https://code.visualstudio.com/api/language-extensions/semantic-highlight-guide#standard-token-types-and-modifiers 6 | settings: { 7 | fontStyle?: string 8 | foreground?: string 9 | } 10 | } 11 | 12 | type OrNull = { [K in keyof T]: T[K] | null } 13 | 14 | export type ThemeSchema = { 15 | name: string 16 | type: 'dark' | 'light' 17 | colors: OrNull 18 | tokenColors: TokenColor[] 19 | } 20 | -------------------------------------------------------------------------------- /src/config/index.ts: -------------------------------------------------------------------------------- 1 | import path from 'path' 2 | 3 | export const config = { 4 | variantsDir: path.resolve(__dirname, '..', 'variants'), 5 | typesDir: path.resolve(__dirname, '..', '@types'), 6 | themesDir: path.resolve(__dirname, '..', '..', 'themes'), 7 | prettierConfigFile: path.join(__dirname, '..', '..', '.prettierrc'), 8 | themeColorReferenceURL: 9 | 'https://code.visualstudio.com/api/references/theme-color', 10 | disposableKeys: [ 11 | 'workbench.colorCustomizations', 12 | 'editor.tokenColorCustomizations', 13 | ], 14 | } 15 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { omniOwl } from '~/variants/omni-owl' 2 | import { build } from './scripts/build' 3 | import { pressEnterToExit } from './util/press-enter-to-exit' 4 | import { omniOwlMinimalItalics } from './variants/omni-owl-minimal_italics' 5 | 6 | async function run() { 7 | await build(omniOwl) 8 | await build(omniOwlMinimalItalics) 9 | 10 | if (process.env.DEBUG_VSCODE) { 11 | pressEnterToExit() // Hold the process alive 12 | } 13 | } 14 | 15 | run() 16 | -------------------------------------------------------------------------------- /src/scripts/build/index.ts: -------------------------------------------------------------------------------- 1 | import fs from 'fs' 2 | import path from 'path' 3 | import { ThemeSchema } from '~/@types/ThemeSchema' 4 | import { config } from '~/config' 5 | 6 | const { themesDir } = config 7 | 8 | export async function build(theme: ThemeSchema) { 9 | if (!fs.existsSync(themesDir)) { 10 | await fs.promises.mkdir(themesDir, { recursive: true }) 11 | } 12 | 13 | const themeBuffer = JSON.stringify(theme, null, 2) 14 | const themeFile = path.join(themesDir, `${theme.name}.json`) 15 | 16 | await fs.promises.writeFile(themeFile, themeBuffer) 17 | 18 | console.log(`Successfully built "${theme.name}" into file ${themeFile}`) 19 | } 20 | -------------------------------------------------------------------------------- /src/scripts/fetch-theme-colors-reference/index.ts: -------------------------------------------------------------------------------- 1 | import fs from 'fs' 2 | import { JSONSchema4 } from 'json-schema' 3 | import { compile } from 'json-schema-to-typescript' 4 | import path from 'path' 5 | import toJsonSchema from 'to-json-schema' 6 | import { config } from '~/config' 7 | import { scrapeThemeAvailableKeys } from './scrape' 8 | 9 | const typeName = 'ThemeColorsReference' 10 | 11 | async function run() { 12 | if (!fs.existsSync(config.typesDir)) { 13 | await fs.promises.mkdir(config.typesDir, { recursive: true }) 14 | } 15 | 16 | const keys = await scrapeThemeAvailableKeys() 17 | 18 | const obj = keys.reduce((map, key) => { 19 | map[key] = '' 20 | return map 21 | }, {} as { [key: string]: string }) 22 | 23 | const schema = toJsonSchema(obj) 24 | schema.additionalProperties = false 25 | 26 | const prettierConfig = JSON.parse( 27 | await fs.promises.readFile(config.prettierConfigFile, 'utf8'), 28 | ) 29 | 30 | const tsdBuffer = await compile(schema as JSONSchema4, typeName, { 31 | style: prettierConfig, 32 | }) 33 | const tsdFile = path.join(config.typesDir, `${typeName}.d.ts`) 34 | 35 | await fs.promises.writeFile(tsdFile, tsdBuffer) 36 | 37 | console.log(`Successfully compiled ${typeName} to file ${tsdFile}`) 38 | } 39 | 40 | run() 41 | -------------------------------------------------------------------------------- /src/scripts/fetch-theme-colors-reference/scrape.ts: -------------------------------------------------------------------------------- 1 | import https from 'https' 2 | import { config } from '~/config' 3 | 4 | function get(url: string) { 5 | return new Promise((resolve, reject) => { 6 | https.get(url, res => { 7 | let body = '' 8 | res.setEncoding('utf8') 9 | res.on('data', data => (body += data)) 10 | res.on('end', () => resolve(body)) 11 | res.on('error', reject) 12 | }) 13 | }) 14 | } 15 | 16 | export async function scrapeThemeAvailableKeys() { 17 | const xml: string = await get(config.themeColorReferenceURL) 18 | 19 | const matches = xml.match(/.+?<\/code>/g) 20 | 21 | if (!matches) { 22 | throw new Error( 23 | "Couldn't find any matches with ..., maybe do cs have changed?", 24 | ) 25 | } 26 | 27 | const keys = [...matches].map(key => 28 | key.replace('', '').replace('', ''), 29 | ) 30 | 31 | return keys 32 | .filter(key => !/ /.test(key)) // Remove if contains spaces 33 | .filter(key => !/#.../.test(key)) // Remove if is a hex color 34 | .filter(key => !/"/.test(key)) // Remove if contains quotes 35 | .filter(key => key.length > 4) // Remove if it's very small 36 | .filter(key => !config.disposableKeys.includes(key)) // Remove if its in the list of disposable keys 37 | .sort() 38 | } 39 | -------------------------------------------------------------------------------- /src/util/alpha.ts: -------------------------------------------------------------------------------- 1 | type Enumerate< 2 | N extends number, 3 | Acc extends number[] = [], 4 | > = Acc['length'] extends N 5 | ? Acc[number] 6 | : Enumerate 7 | 8 | type Range = Exclude< 9 | Enumerate, 10 | Enumerate 11 | > 12 | 13 | export const alpha = (hexRGB: string, alpha: Range<16, 256>) => 14 | hexRGB + alpha.toString(16) 15 | -------------------------------------------------------------------------------- /src/util/color.ts: -------------------------------------------------------------------------------- 1 | type HexDigit = 2 | | '0' 3 | | '1' 4 | | '2' 5 | | '3' 6 | | '4' 7 | | '5' 8 | | '6' 9 | | '7' 10 | | '8' 11 | | '9' 12 | | 'a' 13 | | 'b' 14 | | 'c' 15 | | 'd' 16 | | 'e' 17 | | 'f' 18 | | 'A' 19 | | 'B' 20 | | 'C' 21 | | 'D' 22 | | 'E' 23 | | 'F' 24 | 25 | type ThreeHexDigits = `${HexDigit}${HexDigit}${HexDigit}` 26 | 27 | type HexRGB = T extends `#${ThreeHexDigits}${infer rest1}` 28 | ? rest1 extends `` 29 | ? T // Three Digits RGB 30 | : rest1 extends `${ThreeHexDigits}` 31 | ? T 32 | : never 33 | : never 34 | 35 | type Alpha = T extends `${HexDigit}${HexDigit}` ? T : never 36 | 37 | export function rgb(hex: HexRGB): T { 38 | return hex 39 | } 40 | 41 | export function rgba(hex: HexRGB, alpha: Alpha): T { 42 | return `${hex}${alpha}` 43 | } 44 | -------------------------------------------------------------------------------- /src/util/press-enter-to-exit.ts: -------------------------------------------------------------------------------- 1 | export function pressEnterToExit() { 2 | const stdin = process.openStdin() 3 | 4 | console.log('Press ENTER to exit.') 5 | 6 | stdin.on('data', () => { 7 | process.exit() 8 | }) 9 | } 10 | -------------------------------------------------------------------------------- /src/variants/omni-owl-minimal_italics.ts: -------------------------------------------------------------------------------- 1 | import { ThemeSchema } from '~/@types/ThemeSchema' 2 | import { alpha } from '~/util/alpha' 3 | 4 | import { rgb, rgba } from '~/util/color' 5 | 6 | const palette = { 7 | base: { 8 | BG: rgb('#13111B'), 9 | FG: rgb('#E1E1E6'), 10 | SELECTION: rgb('#41414D'), 11 | COMMENT: rgb('#746699'), 12 | CYAN: rgb('#988bc7'), 13 | GREEN: rgb('#67e480'), 14 | ORANGE: rgb('#E89E64'), 15 | PINK: rgb('#FF79C6'), 16 | PURPLE: rgb('#78D1E1'), 17 | RED: rgb('#E96379'), 18 | YELLOW: rgb('#e7de79'), 19 | }, 20 | other: { 21 | TEMP_QUOTES: rgb('#e7de79'), 22 | TEMP_PROPERTY_QUOTES: rgb('#7159C1'), 23 | AlmostComment: rgb('#5A4B81'), 24 | LineNumber: rgb('#544776'), 25 | LineHighlight: rgba('#44475A', '75'), 26 | NonText: rgba('#FFFFFF', '1A'), 27 | WHITE: rgb('#E1E1E6'), 28 | TAB_DROP_BG: rgba('#44475A', '70'), 29 | // BGLighter: rgb('#252131'), // TODO: Make it brighter 30 | BGLighter: rgb('#3c3550'), 31 | BGLight: rgb('#201B2D'), 32 | BGDark: rgb('#15121E'), 33 | }, 34 | ansi: { 35 | COLOR0: rgb('#201B2D'), 36 | COLOR1: rgb('#FF79C6'), 37 | COLOR2: rgb('#67e480'), 38 | COLOR3: rgb('#e7de79'), 39 | COLOR4: rgb('#78D1E1'), 40 | COLOR5: rgb('#988bc7'), 41 | COLOR6: rgb('#A1EFE4'), 42 | COLOR7: rgb('#E1E1E6'), 43 | COLOR8: rgb('#626483'), 44 | COLOR9: rgb('#ed4556'), 45 | COLOR10: rgb('#00F769'), 46 | COLOR11: rgb('#e7de79'), 47 | COLOR12: rgb('#78D1E1'), 48 | COLOR13: rgb('#988bc7'), 49 | COLOR14: rgb('#A4FFFF'), 50 | COLOR15: rgb('#F7F7FB'), 51 | }, 52 | } 53 | 54 | export const omniOwlMinimalItalics: ThemeSchema = { 55 | name: 'Omni Owl (Minimal Italics)', 56 | type: 'dark', 57 | colors: { 58 | // Integrated Terminal Colors 59 | 'terminal.background': palette.base.BG, 60 | 'terminal.foreground': palette.base.FG, 61 | 'terminal.ansiBrightBlack': palette.ansi.COLOR8, 62 | 'terminal.ansiBrightRed': palette.ansi.COLOR9, 63 | 'terminal.ansiBrightGreen': palette.ansi.COLOR10, 64 | 'terminal.ansiBrightYellow': palette.ansi.COLOR11, 65 | 'terminal.ansiBrightBlue': palette.ansi.COLOR12, 66 | 'terminal.ansiBrightMagenta': palette.ansi.COLOR13, 67 | 'terminal.ansiBrightCyan': palette.ansi.COLOR14, 68 | 'terminal.ansiBrightWhite': palette.ansi.COLOR15, 69 | 'terminal.ansiBlack': palette.ansi.COLOR0, 70 | 'terminal.ansiRed': palette.ansi.COLOR1, 71 | 'terminal.ansiGreen': palette.ansi.COLOR2, 72 | 'terminal.ansiYellow': palette.ansi.COLOR3, 73 | 'terminal.ansiBlue': palette.ansi.COLOR4, 74 | 'terminal.ansiMagenta': palette.ansi.COLOR5, 75 | 'terminal.ansiCyan': palette.ansi.COLOR6, 76 | 'terminal.ansiWhite': palette.ansi.COLOR7, 77 | 'terminal.selectionBackground': alpha(palette.other.AlmostComment, 45), 78 | 'terminalCursor.background': palette.ansi.COLOR0, 79 | 'terminalCursor.foreground': palette.base.FG, 80 | 81 | // Contrast Colors 82 | contrastBorder: palette.other.BGDark, 83 | // contrastActiveBorder: palette.other.BGDark, 84 | 85 | // Base Colors 86 | focusBorder: palette.other.AlmostComment, 87 | foreground: palette.base.FG, 88 | // 'widget.shadow': palette.base.FG, 89 | 'selection.background': palette.base.PURPLE, 90 | errorForeground: palette.base.RED, 91 | 92 | // Button Control 93 | 'button.background': palette.base.SELECTION, 94 | 'button.foreground': palette.base.FG, 95 | 96 | // Dropdown Control 97 | 'dropdown.background': palette.other.BGLight, 98 | 'dropdown.border': palette.other.BGDark, 99 | 'dropdown.foreground': palette.base.FG, 100 | 101 | // Input Control 102 | 'input.background': palette.base.BG, 103 | 'input.foreground': palette.base.FG, 104 | 'input.border': palette.other.BGDark, 105 | 'input.placeholderForeground': palette.other.AlmostComment, 106 | 'inputOption.activeBorder': palette.base.PURPLE, 107 | // 'inputValidation.infoForeground': palette.base.PURPLE, 108 | // 'inputValidation.infoBackground': palette.base.PURPLE, 109 | 'inputValidation.infoBorder': palette.base.PINK, 110 | // 'inputValidation.warningForeground': palette.base.PINK, 111 | // 'inputValidation.warningBackground': palette.base.PINK, 112 | 'inputValidation.warningBorder': palette.base.ORANGE, 113 | // 'inputValidation.errorForeground': palette.base.ORANGE, 114 | // 'inputValidation.errorBackground': palette.base.ORANGE, 115 | 'inputValidation.errorBorder': palette.base.RED, 116 | 117 | // Scroll Bar Control 118 | // 'scrollbar.shadow': palette.base.RED, 119 | // 'scrollbarSlider.activeBackground': palette.base.RED, 120 | // 'scrollbarSlider.background': palette.base.RED, 121 | // 'scrollbarSlider.hoverBackground': palette.base.RED, 122 | 123 | // Badge 124 | 'badge.foreground': palette.base.FG, 125 | 'badge.background': palette.base.SELECTION, 126 | 127 | // Progress Bar 128 | 'progressBar.background': palette.base.PINK, 129 | 130 | // List & Trees 131 | 'list.activeSelectionBackground': alpha(palette.base.SELECTION, 60), 132 | 'list.activeSelectionForeground': palette.base.FG, 133 | 'list.dropBackground': palette.base.SELECTION, 134 | 'list.focusBackground': palette.other.LineHighlight, 135 | 'list.highlightForeground': palette.base.CYAN, 136 | 'list.hoverBackground': alpha(palette.base.SELECTION, 65), 137 | 'list.inactiveSelectionBackground': alpha(palette.base.SELECTION, 40), 138 | // 'list.inactiveSelectionForeground': alpha(palette.base.SELECTION, 40), 139 | 'list.warningForeground': palette.base.ORANGE, 140 | 'list.errorForeground': palette.base.RED, 141 | // 'list.hoverForeground': palette.base.RED, 142 | // 'list.focusForeground': palette.base.RED, 143 | 144 | // Activity Bar 145 | 'activityBar.background': palette.base.BG, 146 | 'activityBar.inactiveForeground': palette.other.AlmostComment, 147 | // 'activityBar.dropBackground': palette.other.AlmostComment, 148 | 'activityBar.foreground': palette.base.FG, 149 | 'activityBar.border': null, 150 | 'activityBar.activeBorder': alpha(palette.base.PINK, 80), 151 | 'activityBar.activeBackground': alpha(palette.base.SELECTION, 40), 152 | 'activityBarBadge.background': palette.base.PINK, 153 | 'activityBarBadge.foreground': palette.other.BGDark, 154 | 155 | // Side Bar 156 | 'sideBar.background': palette.base.BG, 157 | // 'sideBar.foreground': palette.base.BG, 158 | // 'sideBar.border': palette.other.BGLighter, 159 | 'sideBarTitle.foreground': palette.base.FG, 160 | 'sideBarSectionHeader.background': palette.base.BG, 161 | // 'sideBarSectionHeader.foreground': palette.base.BG, 162 | 'sideBarSectionHeader.border': palette.other.BGLighter, 163 | 164 | // Text Link 165 | 'textLink.foreground': palette.base.PINK, 166 | 'textLink.activeForeground': alpha(palette.base.PINK, 200), 167 | 168 | // Editor Group & Tabs 169 | // 'editorGroup.background': palette.base.PINK, 170 | 'editorGroup.border': palette.base.SELECTION, 171 | 'editorGroup.dropBackground': palette.other.TAB_DROP_BG, 172 | // 'editorGroupHeader.noTabsBackground': palette.other.TAB_DROP_BG, 173 | 'editorGroupHeader.tabsBackground': palette.other.BGDark, 174 | // 'editorGroupHeader.tabsBorder': palette.other.TAB_DROP_BG, 175 | 'tab.activeBackground': alpha(palette.base.SELECTION, 40), 176 | 'tab.activeForeground': palette.base.FG, 177 | 'tab.border': palette.other.BGDark, 178 | 'tab.activeBorderTop': alpha(palette.base.PINK, 80), 179 | // 'tab.activeBorder': alpha(palette.base.PINK, 80), 180 | // 'tab.unfocusedActiveBorder': alpha(palette.base.PINK, 80), 181 | 'tab.inactiveBackground': palette.base.BG, 182 | 'tab.inactiveForeground': alpha(palette.base.CYAN, 170), 183 | // 'tab.unfocusedActiveForeground': palette.other.AlmostComment, 184 | // 'tab.unfocusedInactiveForeground': palette.other.AlmostComment, 185 | 186 | // Editor Colors 187 | 'editor.foreground': palette.base.FG, 188 | 'editor.background': palette.base.BG, 189 | 'editorLineNumber.foreground': palette.other.LineNumber, 190 | // 'editorCursor.foreground': palette.other.LineNumber, 191 | 192 | 'editor.selectionBackground': palette.base.SELECTION, 193 | 'editor.selectionHighlightBackground': palette.other.BGLighter, 194 | 'editor.selectionHighlightBorder': alpha(palette.other.WHITE, 20), 195 | // 'editor.inactiveSelectionBackground': palette.other.BGLighter, 196 | 'editor.foldBackground': palette.base.BG, 197 | 198 | // 'editor.wordHighlightBackground': alpha(palette.base.CYAN, 47), 199 | 'editor.wordHighlightBackground': alpha(palette.base.CYAN, 50), 200 | 'editor.wordHighlightBorder': alpha(palette.other.WHITE, 20), 201 | 'editor.wordHighlightStrongBackground': alpha(palette.base.GREEN, 50), 202 | 'editor.wordHighlightStrongBorder': alpha(palette.other.WHITE, 20), 203 | 204 | 'editor.findMatchBackground': alpha(palette.base.ORANGE, 80), 205 | 'editor.findMatchHighlightBackground': alpha(palette.other.WHITE, 40), 206 | 'editor.findRangeHighlightBackground': palette.other.LineHighlight, 207 | 208 | 'editor.hoverHighlightBackground': palette.other.BGDark, 209 | 210 | 'editor.lineHighlightBackground': palette.other.BGLight, 211 | 'editor.lineHighlightBorder': palette.base.BG, 212 | 213 | 'editorLink.activeForeground': palette.base.CYAN, 214 | 'editor.rangeHighlightBackground': alpha(palette.base.PURPLE, 16), 215 | 216 | 'editor.snippetTabstopHighlightBackground': palette.base.BG, 217 | 'editor.snippetTabstopHighlightBorder': palette.other.AlmostComment, 218 | 'editor.snippetFinalTabstopHighlightBackground': palette.base.BG, 219 | 'editor.snippetFinalTabstopHighlightBorder': palette.base.GREEN, 220 | 221 | 'editorWhitespace.foreground': palette.other.NonText, 222 | 'editorIndentGuide.background': palette.other.NonText, 223 | 'editorIndentGuide.activeBackground': alpha(palette.other.WHITE, 45), 224 | 'editorRuler.foreground': palette.other.NonText, 225 | 226 | 'editorCodeLens.foreground': palette.other.AlmostComment, 227 | 228 | // NOTE: These are not set because they tend to be highly contested from 229 | // person to person. Thus, setting these is probably better suited 230 | // for workbench.colorCustomizations in User Settings 231 | // 'editorBracketMatch.background': palette.other.AlmostComment, 232 | // 'editorBracketMatch.border': palette.other.AlmostComment, 233 | 234 | 'editorOverviewRuler.border': palette.other.BGDark, 235 | // 'editorOverviewRuler.findMatchForeground': palette.other.BGDark, 236 | // 'editorOverviewRuler.rangeHighlightForeground': palette.other.BGDark, 237 | 'editorOverviewRuler.selectionHighlightForeground': palette.base.ORANGE, 238 | 'editorOverviewRuler.wordHighlightForeground': palette.base.CYAN, 239 | 'editorOverviewRuler.wordHighlightStrongForeground': palette.base.GREEN, 240 | 'editorOverviewRuler.modifiedForeground': alpha(palette.base.CYAN, 80), 241 | 'editorOverviewRuler.addedForeground': alpha(palette.base.GREEN, 80), 242 | 'editorOverviewRuler.deletedForeground': alpha(palette.base.RED, 80), 243 | 'editorOverviewRuler.errorForeground': alpha(palette.base.RED, 80), 244 | 'editorOverviewRuler.warningForeground': alpha(palette.base.ORANGE, 80), 245 | 'editorOverviewRuler.infoForeground': alpha(palette.base.CYAN, 80), 246 | 247 | 'editorError.foreground': palette.base.RED, 248 | // 'editorError.border': palette.base.RED, 249 | 'editorWarning.foreground': palette.base.CYAN, 250 | // 'editorWarning.border': palette.base.CYAN, 251 | 252 | // 'editorGutter.background': palette.base.CYAN, 253 | 'editorGutter.modifiedBackground': alpha(palette.base.CYAN, 80), 254 | 'editorGutter.addedBackground': alpha(palette.base.GREEN, 80), 255 | 'editorGutter.deletedBackground': alpha(palette.base.RED, 80), 256 | 257 | // Explorer Colors 258 | 'gitDecoration.modifiedResourceForeground': palette.base.CYAN, 259 | 'gitDecoration.deletedResourceForeground': palette.base.RED, 260 | 'gitDecoration.untrackedResourceForeground': palette.base.GREEN, 261 | 'gitDecoration.ignoredResourceForeground': alpha(palette.base.CYAN, 128), 262 | 'gitDecoration.conflictingResourceForeground': palette.base.ORANGE, 263 | 264 | // Diff Editor Colors 265 | 'diffEditor.insertedTextBackground': alpha(palette.base.GREEN, 16), 266 | // 'diffEditor.insertedTextBorder': alpha(palette.base.GREEN, 16), 267 | 'diffEditor.removedTextBackground': alpha(palette.base.RED, 50), 268 | // 'diffEditor.removedTextBorder': alpha(palette.base.RED, 50), 269 | 270 | // Editor Widget Colors 271 | 'editorWidget.background': palette.base.BG, 272 | // editorWidgetBorder: palette.base.BG, 273 | 274 | 'editorSuggestWidget.background': palette.base.BG, 275 | // 'editorSuggestWidget.border': palette.base.BG, 276 | 'editorSuggestWidget.foreground': palette.base.FG, 277 | // 'editorSuggestWidget.highlightForeground': palette.base.FG, 278 | 'editorSuggestWidget.selectedBackground': palette.base.SELECTION, 279 | 280 | 'editorHoverWidget.background': palette.base.BG, 281 | 'editorHoverWidget.border': palette.other.AlmostComment, 282 | 283 | // 'debugExceptionWidget.background': palette.other.AlmostComment, 284 | // 'debugExceptionWidget.border': palette.other.AlmostComment, 285 | 286 | 'editorMarkerNavigation.background': palette.base.BG, 287 | // 'editorMarkerNavigationError.background': palette.base.BG, 288 | // 'editorMarkerNavigationWarning.background': palette.base.BG, 289 | 290 | // Peek View Colors 291 | 'peekView.border': palette.base.SELECTION, 292 | 'peekViewEditor.background': palette.base.BG, 293 | // 'peekViewEditorGutter.background': palette.base.BG, 294 | 'peekViewEditor.matchHighlightBackground': alpha(palette.base.YELLOW, 80), 295 | 'peekViewResult.background': palette.base.BG, 296 | 'peekViewResult.fileForeground': palette.base.FG, 297 | 'peekViewResult.lineForeground': palette.base.FG, 298 | 'peekViewResult.matchHighlightBackground': alpha(palette.base.YELLOW, 80), 299 | 'peekViewResult.selectionBackground': palette.base.SELECTION, 300 | 'peekViewResult.selectionForeground': palette.base.FG, 301 | 'peekViewTitle.background': palette.other.BGDark, 302 | 'peekViewTitleDescription.foreground': palette.other.AlmostComment, 303 | 'peekViewTitleLabel.foreground': palette.base.FG, 304 | 305 | // Merge Conflicts 306 | 'merge.currentHeaderBackground': alpha(palette.base.GREEN, 90), 307 | // 'merge.currentContentBackground': alpha(palette.base.GREEN, 90), 308 | 'merge.incomingHeaderBackground': alpha(palette.base.PURPLE, 90), 309 | // 'merge.incomingContentBackground': alpha(palette.base.PURPLE, 90), 310 | // 'merge.border': alpha(palette.base.PURPLE, 90), 311 | 'editorOverviewRuler.currentContentForeground': palette.base.GREEN, 312 | 'editorOverviewRuler.incomingContentForeground': palette.base.PURPLE, 313 | 314 | // Panel Colors 315 | 'panel.background': palette.base.BG, 316 | 'panel.border': palette.other.BGLighter, 317 | 'panelTitle.activeBorder': palette.base.RED, 318 | 'panelTitle.activeForeground': palette.base.FG, 319 | 'panelTitle.inactiveForeground': alpha(palette.base.FG, 80), 320 | 321 | // Status Bar Colors 322 | 'statusBar.background': palette.other.BGDark, 323 | 'statusBar.foreground': palette.base.FG, 324 | 'statusBar.debuggingBackground': palette.base.PINK, 325 | 'statusBar.debuggingForeground': palette.other.BGDark, 326 | 'statusBar.noFolderBackground': palette.other.BGDark, 327 | 'statusBar.noFolderForeground': palette.base.FG, 328 | // 'statusBarItem.activeBackground': palette.base.FG, 329 | // 'statusBarItem.hoverBackground': palette.base.FG, 330 | 'statusBarItem.prominentBackground': palette.base.PINK, 331 | 'statusBarItem.prominentForeground': palette.other.BGDark, 332 | 'statusBarItem.prominentHoverBackground': palette.base.ORANGE, 333 | 'statusBarItem.remoteBackground': palette.base.PINK, 334 | 'statusBarItem.remoteForeground': palette.other.BGDark, 335 | // 'statusBar.border': palette.base.PINK, 336 | 337 | // Merge Conflicts 338 | 'titleBar.activeBackground': palette.base.BG, 339 | 'titleBar.activeForeground': palette.base.FG, 340 | 'titleBar.inactiveBackground': palette.other.BGDark, 341 | 'titleBar.inactiveForeground': palette.other.AlmostComment, 342 | 343 | // Notification Dialog Colors 344 | // 'notifications.background': palette.base.BG, 345 | // 'notifications.foreground': palette.base.FG, 346 | // 'notifications.buttonBackground': palette.base.SELECTION, 347 | // 'notifications.buttonForeground': palette.base.FG, 348 | // 'notifications.buttonHoverBackground': palette.other.LineHighlight, 349 | // 'notifications.errorBackground': palette.base.RED, 350 | // 'notifications.errorForeground': palette.base.FG, 351 | // 'notifications.infoBackground': palette.base.CYAN, 352 | // 'notifications.infoForeground': palette.base.BG, 353 | // 'notifications.warningBackground': palette.base.ORANGE, 354 | // 'notifications.warningForeground': palette.base.BG, 355 | 356 | // Extensions 357 | 'extensionButton.prominentForeground': palette.base.FG, 358 | 'extensionButton.prominentBackground': alpha(palette.base.GREEN, 90), 359 | 'extensionButton.prominentHoverBackground': alpha(palette.base.GREEN, 60), 360 | 361 | // Quick Picker 362 | 'pickerGroup.border': palette.base.PURPLE, 363 | 'pickerGroup.foreground': palette.base.CYAN, 364 | 365 | // Debug 366 | 'debugToolBar.background': palette.base.BG, 367 | 368 | // Welcome Page 369 | // 'welcomePage.buttonBackground': palette.base.BG, 370 | // 'welcomePage.buttonHoverBackground': palette.base.BG, 371 | 'walkThrough.embeddedEditorBackground': palette.base.BG, 372 | 373 | // Setting Editor 374 | 'settings.headerForeground': palette.base.FG, 375 | // 'settings.modifiedItemForeground': palette.base.ORANGE, 376 | 'settings.modifiedItemIndicator': palette.base.ORANGE, 377 | // 'settings.inactiveSelectedItemBorder': palette.base.ORANGE, 378 | 'settings.dropdownBackground': palette.base.BG, 379 | 'settings.dropdownForeground': palette.base.FG, 380 | 'settings.dropdownBorder': palette.other.BGDark, 381 | 'settings.checkboxBackground': palette.base.BG, 382 | 'settings.checkboxForeground': palette.base.FG, 383 | 'settings.checkboxBorder': palette.other.BGDark, 384 | 'settings.textInputBackground': palette.base.BG, 385 | 'settings.textInputForeground': palette.base.FG, 386 | 'settings.textInputBorder': palette.other.BGDark, 387 | 'settings.numberInputBackground': palette.base.BG, 388 | 'settings.numberInputForeground': palette.base.FG, 389 | 'settings.numberInputBorder': palette.other.BGDark, 390 | 391 | // Breadcrumbs 392 | 'breadcrumb.foreground': palette.base.CYAN, 393 | 'breadcrumb.background': palette.base.BG, 394 | 'breadcrumb.focusForeground': palette.base.FG, 395 | 'breadcrumb.activeSelectionForeground': palette.base.FG, 396 | 'breadcrumbPicker.background': palette.other.BGDark, 397 | 398 | // Misc 399 | // 'menu.separatorBackground': palette.other.BGDark, 400 | 401 | 'listFilterWidget.background': palette.other.BGLight, 402 | 'listFilterWidget.outline': palette.other.BGLighter, 403 | 'listFilterWidget.noMatchesOutline': palette.base.RED, 404 | }, 405 | tokenColors: [ 406 | // General 407 | { 408 | scope: ['strong'], 409 | settings: { 410 | fontStyle: 'bold', 411 | }, 412 | }, 413 | { 414 | scope: ['header'], 415 | settings: { 416 | foreground: palette.base.PURPLE, 417 | }, 418 | }, 419 | { 420 | scope: ['source'], 421 | settings: { 422 | foreground: palette.base.FG, 423 | }, 424 | }, 425 | { 426 | scope: ['meta.diff', 'meta.diff.header'], 427 | settings: { 428 | foreground: palette.other.AlmostComment, 429 | }, 430 | }, 431 | { 432 | scope: ['markup.inserted'], 433 | settings: { 434 | foreground: palette.base.GREEN, 435 | }, 436 | }, 437 | { 438 | scope: ['markup.deleted'], 439 | settings: { 440 | foreground: palette.base.RED, 441 | }, 442 | }, 443 | { 444 | scope: ['markup.changed'], 445 | settings: { 446 | foreground: palette.base.ORANGE, 447 | }, 448 | }, 449 | { 450 | scope: ['invalid'], 451 | settings: { 452 | foreground: palette.base.RED, 453 | fontStyle: 'underline', 454 | }, 455 | }, 456 | { 457 | scope: ['invalid.deprecated'], 458 | settings: { 459 | foreground: palette.base.FG, 460 | fontStyle: 'underline', 461 | }, 462 | }, 463 | { 464 | scope: ['entity.name.filename'], 465 | settings: { 466 | foreground: palette.base.YELLOW, 467 | }, 468 | }, 469 | { 470 | scope: ['markup.error'], 471 | settings: { 472 | foreground: palette.base.RED, 473 | }, 474 | }, 475 | 476 | // Markdown / RST / Prose 477 | { 478 | name: 'Underlined markup', 479 | scope: ['markup.underline'], 480 | settings: { 481 | fontStyle: 'underline', 482 | }, 483 | }, 484 | { 485 | name: 'Bold markup', 486 | scope: ['markup.bold'], 487 | settings: { 488 | fontStyle: 'bold', 489 | foreground: palette.base.ORANGE, 490 | }, 491 | }, 492 | { 493 | name: 'Markup headings', 494 | scope: ['markup.heading'], 495 | settings: { 496 | fontStyle: 'bold', 497 | foreground: palette.base.PURPLE, 498 | }, 499 | }, 500 | { 501 | name: 'Markup italic', 502 | scope: ['markup.italic'], 503 | settings: { 504 | foreground: palette.base.YELLOW, 505 | }, 506 | }, 507 | { 508 | name: 'Bullets, lists (prose)', 509 | scope: [ 510 | 'beginning.punctuation.definition.list.markdown', 511 | 'beginning.punctuation.definition.quote.markdown', 512 | 'punctuation.definition.link.restructuredtext', 513 | ], 514 | settings: { 515 | foreground: palette.base.CYAN, 516 | }, 517 | }, 518 | { 519 | name: 'Inline code (prose)', 520 | scope: ['markup.inline.raw', 'markup.raw.restructuredtext'], 521 | settings: { 522 | foreground: palette.base.GREEN, 523 | }, 524 | }, 525 | { 526 | name: 'Links (prose)', 527 | scope: ['markup.underline.link', 'markup.underline.link.image'], 528 | settings: { 529 | foreground: palette.base.CYAN, 530 | }, 531 | }, 532 | { 533 | name: 'Link text, image alt text (prose)', 534 | scope: [ 535 | 'meta.link.reference.def.restructuredtext', 536 | 'punctuation.definition.directive.restructuredtext', 537 | 'string.other.link.description', 538 | 'string.other.link.title', 539 | ], 540 | settings: { 541 | foreground: palette.base.PINK, 542 | }, 543 | }, 544 | { 545 | name: 'Blockquotes (prose)', 546 | scope: ['entity.name.directive.restructuredtext', 'markup.quote'], 547 | settings: { 548 | foreground: palette.base.YELLOW, 549 | }, 550 | }, 551 | { 552 | name: 'Horizontal rule (prose)', 553 | scope: ['meta.separator.markdown'], 554 | settings: { 555 | foreground: palette.other.AlmostComment, 556 | }, 557 | }, 558 | { 559 | name: 'Code blocks', 560 | scope: [ 561 | 'fenced_code.block.language', 562 | 'markup.raw.inner.restructuredtext', 563 | 'markup.fenced_code.block.markdown punctuation.definition.markdown', 564 | ], 565 | settings: { 566 | foreground: palette.base.GREEN, 567 | }, 568 | }, 569 | { 570 | name: 'Prose constants', 571 | scope: ['punctuation.definition.constant.restructuredtext'], 572 | settings: { 573 | foreground: palette.base.PURPLE, 574 | }, 575 | }, 576 | { 577 | name: 'Braces in markdown headings', 578 | scope: [ 579 | 'markup.heading.markdown punctuation.definition.string.begin', 580 | 'markup.heading.markdown punctuation.definition.string.end', 581 | ], 582 | settings: { 583 | foreground: palette.base.PURPLE, 584 | }, 585 | }, 586 | { 587 | name: 'Braces in markdown paragraphs', 588 | scope: [ 589 | 'meta.paragraph.markdown punctuation.definition.string.begin', 590 | 'meta.paragraph.markdown punctuation.definition.string.end', 591 | ], 592 | settings: { 593 | foreground: palette.base.FG, 594 | }, 595 | }, 596 | { 597 | name: 'Braces in markdown blockquotes', 598 | scope: [ 599 | 'markup.quote.markdown meta.paragraph.markdown punctuation.definition.string.begin', 600 | 'markup.quote.markdown meta.paragraph.markdown punctuation.definition.string.end', 601 | ], 602 | settings: { 603 | foreground: palette.base.YELLOW, 604 | }, 605 | }, 606 | 607 | // Classes 608 | { 609 | name: 'User-defined class names', 610 | scope: ['entity.name.type.class', 'entity.name.class'], 611 | settings: { 612 | foreground: palette.base.CYAN, 613 | fontStyle: 'normal', 614 | }, 615 | }, 616 | { 617 | name: 'this, super, self, etc.', 618 | scope: [ 619 | 'keyword.expressions-and-types.swift', 620 | 'keyword.other.this', 621 | 'variable.language', 622 | 'variable.language punctuation.definition.variable.php', 623 | 'variable.other.readwrite.instance.ruby', 624 | 'variable.parameter.function.language.special', 625 | ], 626 | settings: { 627 | foreground: palette.base.PURPLE, 628 | }, 629 | }, 630 | { 631 | name: 'Inherited classes', 632 | scope: ['entity.other.inherited-class'], 633 | settings: { 634 | foreground: palette.base.CYAN, 635 | }, 636 | }, 637 | 638 | // Comments 639 | { 640 | name: 'Comments', 641 | scope: [ 642 | 'comment', 643 | 'punctuation.definition.comment', 644 | 'unused.comment', 645 | 'wildcard.comment', 646 | ], 647 | settings: { 648 | foreground: palette.base.COMMENT, 649 | }, 650 | }, 651 | { 652 | name: 'JSDoc-style keywords', 653 | scope: [ 654 | 'comment keyword.codetag.notation', 655 | 'comment.block.documentation keyword', 656 | 'comment.block.documentation storage.type.class', 657 | ], 658 | settings: { 659 | foreground: palette.base.PINK, 660 | }, 661 | }, 662 | { 663 | name: 'JSDoc-style types', 664 | scope: ['comment.block.documentation entity.name.type'], 665 | settings: { 666 | foreground: palette.base.CYAN, 667 | }, 668 | }, 669 | { 670 | name: 'JSDoc-style type brackets', 671 | scope: [ 672 | 'comment.block.documentation entity.name.type punctuation.definition.bracket', 673 | ], 674 | settings: { 675 | foreground: palette.base.CYAN, 676 | }, 677 | }, 678 | { 679 | name: 'JSDoc-style comment parameters', 680 | scope: ['comment.block.documentation variable'], 681 | settings: { 682 | foreground: palette.base.ORANGE, 683 | }, 684 | }, 685 | 686 | // Constants 687 | { 688 | name: 'Constants', 689 | scope: ['constant', 'variable.other.constant'], 690 | settings: { 691 | foreground: palette.base.PURPLE, 692 | }, 693 | }, 694 | { 695 | name: 'Constant escape sequences', 696 | scope: [ 697 | 'constant.character.escape', 698 | 'constant.character.string.escape', 699 | 'constant.regexp', 700 | ], 701 | settings: { 702 | foreground: palette.base.PINK, 703 | }, 704 | }, 705 | 706 | // Entities 707 | { 708 | name: 'HTML tags', 709 | scope: ['entity.name.tag'], 710 | settings: { 711 | foreground: palette.base.PINK, 712 | }, 713 | }, 714 | { 715 | name: "CSS attribute parent selectors ('&')", 716 | scope: ['entity.other.attribute-name.parent-selector'], 717 | settings: { 718 | foreground: palette.base.PINK, 719 | }, 720 | }, 721 | { 722 | name: 'CSS ID', 723 | scope: ['entity.other.attribute-name.id'], 724 | settings: { 725 | foreground: palette.base.YELLOW, 726 | }, 727 | }, 728 | { 729 | name: 'HTML/CSS attribute names', 730 | scope: ['entity.other.attribute-name'], 731 | settings: { 732 | foreground: palette.base.GREEN, 733 | }, 734 | }, 735 | { 736 | name: 'Tag inline source', 737 | scope: ['meta.tag.inline source'], 738 | settings: { 739 | foreground: palette.base.YELLOW, 740 | }, 741 | }, 742 | 743 | // Function/Methods 744 | { 745 | name: 'Function names', 746 | scope: [ 747 | 'entity.name.function', 748 | 'meta.function-call.generic', 749 | 'meta.function-call.object', 750 | 'meta.function-call.php', 751 | 'meta.function-call.static', 752 | 'meta.method-call.java meta.method', 753 | 'meta.method.groovy', 754 | 'support.function.any-method.lua', 755 | 'keyword.operator.function.infix', 756 | ], 757 | settings: { 758 | foreground: palette.base.GREEN, 759 | }, 760 | }, 761 | { 762 | name: 'Function parameters', 763 | scope: [ 764 | 'entity.name.variable.parameter', 765 | 'meta.at-rule.function variable', 766 | 'meta.at-rule.mixin variable', 767 | 'meta.function.arguments variable.other.php', 768 | 'meta.selectionset.graphql meta.arguments.graphql variable.arguments.graphql', 769 | 'variable.parameter', 770 | ], 771 | settings: { 772 | foreground: palette.base.ORANGE, 773 | }, 774 | }, 775 | { 776 | name: 'Decorators', 777 | scope: [ 778 | 'meta.decorator variable.other.readwrite', 779 | 'meta.decorator variable.other.property', 780 | ], 781 | settings: { 782 | foreground: palette.base.GREEN, 783 | }, 784 | }, 785 | { 786 | name: 'Decorator Objects', 787 | scope: ['meta.decorator variable.other.object'], 788 | settings: { 789 | foreground: palette.base.GREEN, 790 | }, 791 | }, 792 | 793 | // Keywords 794 | { 795 | name: 'Keywords', 796 | scope: ['keyword', 'punctuation.definition.keyword'], 797 | settings: { 798 | foreground: palette.base.PINK, 799 | }, 800 | }, 801 | { 802 | name: 'Keyword "new"', 803 | scope: ['keyword.control.new', 'keyword.operator.new'], 804 | settings: { 805 | fontStyle: 'bold', 806 | }, 807 | }, 808 | { 809 | name: 'Generic selectors (CSS/SCSS/Less/Stylus)', 810 | scope: ['meta.selector'], 811 | settings: { 812 | foreground: palette.base.PINK, 813 | }, 814 | }, 815 | 816 | // Language Built-ins 817 | { 818 | name: 'Language Built-ins', 819 | scope: ['support'], 820 | settings: { 821 | foreground: palette.base.CYAN, 822 | }, 823 | }, 824 | { 825 | name: 'Built-in magic functions and constants', 826 | scope: [ 827 | 'support.function.magic', 828 | 'support.variable', 829 | 'variable.other.predefined', 830 | ], 831 | settings: { 832 | fontStyle: 'regular', 833 | foreground: palette.base.PURPLE, 834 | }, 835 | }, 836 | { 837 | name: 'Built-in functions / properties', 838 | scope: ['support.function', 'support.type.property-name'], 839 | settings: { 840 | fontStyle: 'regular', 841 | }, 842 | }, 843 | 844 | // Punctuation 845 | { 846 | name: 'Separators (key/value, namespace, inheritance, pointer, hash, slice, etc)', 847 | scope: [ 848 | 'constant.other.symbol.hashkey punctuation.definition.constant.ruby', 849 | 'entity.other.attribute-name.placeholder punctuation', 850 | 'entity.other.attribute-name.pseudo-class punctuation', 851 | 'entity.other.attribute-name.pseudo-element punctuation', 852 | 'meta.group.double.toml', 853 | 'meta.group.toml', 854 | 'meta.object-binding-pattern-variable punctuation.destructuring', 855 | 'punctuation.colon.graphql', 856 | 'punctuation.definition.block.scalar.folded.yaml', 857 | 'punctuation.definition.block.scalar.literal.yaml', 858 | 'punctuation.definition.block.sequence.item.yaml', 859 | 'punctuation.definition.entity.other.inherited-class', 860 | 'punctuation.function.swift', 861 | 'punctuation.separator.dictionary.key-value', 862 | 'punctuation.separator.hash', 863 | 'punctuation.separator.inheritance', 864 | 'punctuation.separator.key-value', 865 | 'punctuation.separator.key-value.mapping.yaml', 866 | 'punctuation.separator.namespace', 867 | 'punctuation.separator.pointer-access', 868 | 'punctuation.separator.slice', 869 | 'string.unquoted.heredoc punctuation.definition.string', 870 | 'support.other.chomping-indicator.yaml', 871 | 'punctuation.separator.annotation', 872 | ], 873 | settings: { 874 | foreground: palette.base.PINK, 875 | }, 876 | }, 877 | { 878 | name: 'Brackets, braces, parens, etc.', 879 | scope: [ 880 | 'keyword.operator.other.powershell', 881 | 'keyword.other.statement-separator.powershell', 882 | 'meta.brace.round', 883 | 'meta.function-call punctuation', 884 | 'punctuation.definition.arguments.begin', 885 | 'punctuation.definition.arguments.end', 886 | 'punctuation.definition.entity.begin', 887 | 'punctuation.definition.entity.end', 888 | 'punctuation.definition.tag.cs', 889 | 'punctuation.definition.type.begin', 890 | 'punctuation.definition.type.end', 891 | 'punctuation.section.scope.begin', 892 | 'punctuation.section.scope.end', 893 | 'storage.type.generic.java', 894 | 'string.template meta.brace', 895 | 'string.template punctuation.accessor', 896 | ], 897 | settings: { 898 | foreground: palette.base.FG, 899 | }, 900 | }, 901 | { 902 | name: 'Variable interpolation operators', 903 | scope: [ 904 | 'meta.string-contents.quoted.double punctuation.definition.variable', 905 | 'punctuation.definition.interpolation.begin', 906 | 'punctuation.definition.interpolation.end', 907 | 'punctuation.definition.template-expression.begin', 908 | 'punctuation.definition.template-expression.end', 909 | 'punctuation.section.embedded.begin', 910 | 'punctuation.section.embedded.coffee', 911 | 'punctuation.section.embedded.end', 912 | 'punctuation.section.embedded.end source.php', 913 | 'punctuation.section.embedded.end source.ruby', 914 | 'punctuation.definition.variable.makefile', 915 | ], 916 | settings: { 917 | foreground: palette.base.PINK, 918 | }, 919 | }, 920 | 921 | // Serializable / Config Languages 922 | { 923 | name: 'Keys (serializable languages)', 924 | scope: [ 925 | 'entity.name.function.target.makefile', 926 | 'entity.name.section.toml', 927 | 'entity.name.tag.yaml', 928 | 'variable.other.key.toml', 929 | ], 930 | settings: { 931 | foreground: palette.base.CYAN, 932 | }, 933 | }, 934 | { 935 | name: 'Dates / timestamps (serializable languages)', 936 | scope: ['constant.other.date', 'constant.other.timestamp'], 937 | settings: { 938 | foreground: palette.base.ORANGE, 939 | }, 940 | }, 941 | { 942 | name: 'YAML aliases', 943 | scope: ['variable.other.alias.yaml'], 944 | settings: { 945 | fontStyle: 'underline', 946 | foreground: palette.base.GREEN, 947 | }, 948 | }, 949 | 950 | // Storage 951 | { 952 | name: 'Storage', 953 | scope: [ 954 | 'storage', 955 | 'meta.implementation storage.type.objc', 956 | 'meta.interface-or-protocol storage.type.objc', 957 | 'source.groovy storage.type.def', 958 | ], 959 | settings: { 960 | fontStyle: 'regular', 961 | foreground: palette.base.PINK, 962 | }, 963 | }, 964 | { 965 | name: 'Types', 966 | scope: [ 967 | 'entity.name.type', 968 | 'keyword.primitive-datatypes.swift', 969 | 'keyword.type.cs', 970 | 'meta.protocol-list.objc', 971 | 'meta.return-type.objc', 972 | 'source.go storage.type', 973 | 'source.groovy storage.type', 974 | 'source.java storage.type', 975 | 'source.powershell entity.other.attribute-name', 976 | 'storage.class.std.rust', 977 | 'storage.type.attribute.swift', 978 | 'storage.type.c', 979 | 'storage.type.core.rust', 980 | 'storage.type.cs', 981 | 'storage.type.groovy', 982 | 'storage.type.objc', 983 | 'storage.type.php', 984 | 'storage.type.haskell', 985 | 'storage.type.ocaml', 986 | ], 987 | settings: { 988 | foreground: palette.base.CYAN, 989 | }, 990 | }, 991 | { 992 | name: 'Generics, templates, and mapped type declarations', 993 | scope: [ 994 | 'entity.name.type.type-parameter', 995 | 'meta.indexer.mappedtype.declaration entity.name.type', 996 | 'meta.type.parameters entity.name.type', 997 | ], 998 | settings: { 999 | foreground: palette.base.ORANGE, 1000 | }, 1001 | }, 1002 | { 1003 | name: 'Modifiers', 1004 | scope: ['storage.modifier'], 1005 | settings: { 1006 | foreground: palette.base.PINK, 1007 | }, 1008 | }, 1009 | 1010 | // RegExp 1011 | { 1012 | name: 'RegExp string', 1013 | scope: [ 1014 | 'string.regexp', 1015 | 'constant.other.character-class.set.regexp', 1016 | 'constant.character.escape.backslash.regexp', 1017 | ], 1018 | settings: { 1019 | foreground: palette.base.YELLOW, 1020 | }, 1021 | }, 1022 | { 1023 | name: 'Non-capture operators', 1024 | scope: ['punctuation.definition.group.capture.regexp'], 1025 | settings: { 1026 | foreground: palette.base.PINK, 1027 | }, 1028 | }, 1029 | { 1030 | name: 'RegExp start and end characters', 1031 | scope: [ 1032 | 'string.regexp punctuation.definition.string.begin', 1033 | 'string.regexp punctuation.definition.string.end', 1034 | ], 1035 | settings: { 1036 | foreground: palette.base.RED, 1037 | }, 1038 | }, 1039 | { 1040 | name: 'Character group', 1041 | scope: ['punctuation.definition.character-class.regexp'], 1042 | settings: { 1043 | foreground: palette.base.CYAN, 1044 | }, 1045 | }, 1046 | { 1047 | name: 'Capture groups', 1048 | scope: ['punctuation.definition.group.regexp'], 1049 | settings: { 1050 | foreground: palette.base.ORANGE, 1051 | }, 1052 | }, 1053 | { 1054 | name: 'Assertion operators', 1055 | scope: [ 1056 | 'punctuation.definition.group.assertion.regexp', 1057 | 'keyword.operator.negation.regexp', 1058 | ], 1059 | settings: { 1060 | foreground: palette.base.RED, 1061 | }, 1062 | }, 1063 | { 1064 | name: 'Positive lookaheads', 1065 | scope: ['meta.assertion.look-ahead.regexp'], 1066 | settings: { 1067 | foreground: palette.base.GREEN, 1068 | }, 1069 | }, 1070 | 1071 | // Strings 1072 | { 1073 | name: 'Strings', 1074 | scope: ['string'], 1075 | settings: { 1076 | foreground: palette.base.YELLOW, 1077 | }, 1078 | }, 1079 | { 1080 | name: 'String quotes (temporary vscode fix)', 1081 | scope: [ 1082 | 'punctuation.definition.string.begin', 1083 | 'punctuation.definition.string.end', 1084 | ], 1085 | settings: { 1086 | foreground: palette.other.TEMP_QUOTES, 1087 | }, 1088 | }, 1089 | { 1090 | name: 'Property quotes (temporary vscode fix)', 1091 | scope: [ 1092 | 'punctuation.support.type.property-name.begin', 1093 | 'punctuation.support.type.property-name.end', 1094 | ], 1095 | settings: { 1096 | foreground: palette.other.TEMP_PROPERTY_QUOTES, 1097 | }, 1098 | }, 1099 | { 1100 | name: 'Docstrings', 1101 | scope: [ 1102 | 'string.quoted.docstring.multi', 1103 | 'string.quoted.docstring.multi.python punctuation.definition.string.begin', 1104 | 'string.quoted.docstring.multi.python punctuation.definition.string.end', 1105 | 'string.quoted.docstring.multi.python constant.character.escape', 1106 | ], 1107 | settings: { 1108 | foreground: palette.other.AlmostComment, 1109 | }, 1110 | }, 1111 | 1112 | // Variables 1113 | { 1114 | name: 'Variables and object properties', 1115 | scope: [ 1116 | 'variable', 1117 | 'constant.other.key.perl', 1118 | 'support.variable.property', 1119 | 'variable.other.constant.js', 1120 | 'variable.other.constant.ts', 1121 | 'variable.other.constant.tsx', 1122 | ], 1123 | settings: { 1124 | foreground: palette.base.FG, 1125 | }, 1126 | }, 1127 | { 1128 | name: 'Destructuring / aliasing reference name (LHS)', 1129 | scope: [ 1130 | 'meta.import variable.other.readwrite', 1131 | 'meta.object-binding-pattern-variable variable.object.property', 1132 | 'meta.variable.assignment.destructured.object.coffee variable', 1133 | ], 1134 | settings: { 1135 | foreground: palette.base.ORANGE, 1136 | }, 1137 | }, 1138 | { 1139 | name: 'Destructuring / aliasing variable name (RHS)', 1140 | scope: [ 1141 | 'meta.import variable.other.readwrite.alias', 1142 | 'meta.export variable.other.readwrite.alias', 1143 | 'meta.variable.assignment.destructured.object.coffee variable variable', 1144 | ], 1145 | settings: { 1146 | fontStyle: 'normal', 1147 | foreground: palette.base.FG, 1148 | }, 1149 | }, 1150 | 1151 | // Language Extensions / Edge Cases 1152 | { 1153 | name: 'GraphQL keys', 1154 | scope: ['meta.selectionset.graphql variable'], 1155 | settings: { 1156 | foreground: palette.base.YELLOW, 1157 | }, 1158 | }, 1159 | { 1160 | name: 'GraphQL function arguments', 1161 | scope: ['meta.selectionset.graphql meta.arguments variable'], 1162 | settings: { 1163 | foreground: palette.base.FG, 1164 | }, 1165 | }, 1166 | { 1167 | name: 'GraphQL fragment name (definition)', 1168 | scope: ['entity.name.fragment.graphql', 'variable.fragment.graphql'], 1169 | settings: { 1170 | foreground: palette.base.CYAN, 1171 | }, 1172 | }, 1173 | { 1174 | name: 'Edge cases (foreground color resets)', 1175 | scope: [ 1176 | 'constant.other.symbol.hashkey.ruby', 1177 | 'keyword.operator.dereference.java', 1178 | 'keyword.operator.navigation.groovy', 1179 | 'meta.scope.for-loop.shell punctuation.definition.string.begin', 1180 | 'meta.scope.for-loop.shell punctuation.definition.string.end', 1181 | 'meta.scope.for-loop.shell string', 1182 | 'storage.modifier.import', 1183 | 'punctuation.section.embedded.begin.tsx', 1184 | 'punctuation.section.embedded.end.tsx', 1185 | 'punctuation.section.embedded.begin.jsx', 1186 | 'punctuation.section.embedded.end.jsx', 1187 | 'punctuation.separator.list.comma.css', 1188 | 'constant.language.empty-list.haskell', 1189 | ], 1190 | settings: { 1191 | foreground: palette.base.FG, 1192 | }, 1193 | }, 1194 | { 1195 | name: 'Shell variables prefixed with "$" (edge case)', 1196 | scope: ['source.shell variable.other'], 1197 | settings: { 1198 | foreground: palette.base.PURPLE, 1199 | }, 1200 | }, 1201 | { 1202 | name: 'Powershell constants mistakenly scoped to `support`, rather than `constant` (edge)', 1203 | scope: ['support.constant'], 1204 | settings: { 1205 | fontStyle: 'normal', 1206 | foreground: palette.base.PURPLE, 1207 | }, 1208 | }, 1209 | { 1210 | name: 'Makefile prerequisite names', 1211 | scope: ['meta.scope.prerequisites.makefile'], 1212 | settings: { 1213 | foreground: palette.base.YELLOW, 1214 | }, 1215 | }, 1216 | { 1217 | name: 'SCSS attibute selector strings', 1218 | scope: ['meta.attribute-selector.scss'], 1219 | settings: { 1220 | foreground: palette.base.YELLOW, 1221 | }, 1222 | }, 1223 | { 1224 | name: 'SCSS attribute selector brackets', 1225 | scope: [ 1226 | 'punctuation.definition.attribute-selector.end.bracket.square.scss', 1227 | 'punctuation.definition.attribute-selector.begin.bracket.square.scss', 1228 | ], 1229 | settings: { 1230 | foreground: palette.base.FG, 1231 | }, 1232 | }, 1233 | { 1234 | name: 'Haskell Pragmas', 1235 | scope: ['meta.preprocessor.haskell'], 1236 | settings: { 1237 | foreground: palette.other.AlmostComment, 1238 | }, 1239 | }, 1240 | ], 1241 | } 1242 | -------------------------------------------------------------------------------- /src/variants/omni-owl.ts: -------------------------------------------------------------------------------- 1 | import { ThemeSchema, TokenColor } from '~/@types/ThemeSchema' 2 | import { omniOwlMinimalItalics } from './omni-owl-minimal_italics' 3 | 4 | // Italic Inspiration from Night Owl 5 | const italics: TokenColor[] = [ 6 | { 7 | name: 'Forced Italic Rules', 8 | scope: [ 9 | 'markup.changed', 10 | 'meta.diff.header.git', 11 | 'meta.diff.header.from-file', 12 | 'meta.diff.header.to-file', 13 | 'markup.deleted.diff', 14 | 'markup.inserted.diff', 15 | 'comment', 16 | 'punctuation.accessor', 17 | // 'keyword', 18 | 'storage', 19 | 'meta.var.expr', 20 | 'meta.class meta.method.declaration meta.var.expr storage.type.js', 21 | 'storage.type.property.js', 22 | 'storage.type.property.ts', 23 | 'storage.type.property.tsx', 24 | 'entity.name.function', 25 | 'entity.other.attribute-name', 26 | 'keyword.operator.relational', 27 | 'meta.delimiter.period', 28 | 'meta.selector', 29 | 'entity.name.tag.doctype', 30 | 'meta.tag.sgml.doctype', 31 | 'variable.other.object.property', 32 | 'entity.name.function', 33 | // 'keyword.operator.comparison', 34 | 'keyword.control.flow.js', 35 | 'keyword.control.flow.ts', 36 | 'keyword.control.flow.tsx', 37 | 'keyword.control.ruby', 38 | 'keyword.control.module.ruby', 39 | 'keyword.control.class.ruby', 40 | 'keyword.control.def.ruby', 41 | 'keyword.control.loop.js', 42 | 'keyword.control.loop.ts', 43 | 'keyword.control.import.js', 44 | 'keyword.control.import.ts', 45 | 'keyword.control.import.tsx', 46 | 'keyword.control.from.js', 47 | 'keyword.control.from.ts', 48 | 'keyword.control.from.tsx', 49 | // 'keyword.operator.instanceof.js', 50 | // 'keyword.operator.expression.instanceof.ts', 51 | // 'keyword.operator.expression.instanceof.tsx', 52 | 'italic', 53 | 'quote', 54 | 'source.elixir .punctuation.binary.elixir', 55 | 'source.go keyword.package.go', 56 | 'source.go keyword.import.go', 57 | 'source.go keyword.function.go', 58 | 'source.go keyword.type.go', 59 | 'source.go keyword.struct.go', 60 | 'source.go keyword.interface.go', 61 | 'source.go keyword.const.go', 62 | 'source.go keyword.var.go', 63 | 'source.go keyword.map.go', 64 | 'source.go keyword.channel.go', 65 | 'source.go keyword.control.go', 66 | 'meta.tag.sgml.doctype.html', 67 | 'variable.other.object.js', 68 | 'markup.italic.markdown', 69 | 'markup.quote.markdown', 70 | 'keyword.control', 71 | ], 72 | settings: { 73 | fontStyle: 'italic', 74 | }, 75 | }, 76 | 77 | { 78 | name: 'Exempt Italic Rules', 79 | scope: [ 80 | 'constant.numeric', 81 | 'constant.character.numeric', 82 | 83 | 'storage.type.function.arrow.js', 84 | 85 | 'storage.type.function.arrow.js', 86 | 87 | 'entity.name.tag', 88 | 'meta.tag.other.html', 89 | 'meta.tag.other.js', 90 | 'meta.tag.other.tsx', 91 | 'entity.name.tag.tsx', 92 | 'entity.name.tag.js', 93 | 'entity.name.tag', 94 | 'meta.tag.js', 95 | 'meta.tag.tsx', 96 | 'meta.tag.html', 97 | 98 | 'keyword.operator', 99 | 100 | 'variable.parameter.function', 101 | 102 | 'support.type.vendor.property-name', 103 | 'support.constant.vendor.property-value', 104 | 'support.type.property-name', 105 | 'meta.property-list entity.name.tag', 106 | 107 | 'keyword.operator.logical', 108 | 109 | 'variable.other.object.js', 110 | 111 | 'keyword.control.conditional.js', 112 | 'keyword.control.conditional.ts', 113 | 'keyword.control.switch.js', 114 | 'keyword.control.switch.ts', 115 | 116 | 'entity.name.tag.css', 117 | 'entity.name.tag.less', 118 | 'entity.name.tag.custom.css', 119 | 'support.constant.property-value.css', 120 | 121 | 'entity.name.type.js', 122 | 'entity.name.type.module.js', 123 | 124 | 'support.class.component.js', 125 | 'support.class.component.tsx', 126 | 127 | 'meta.property-list.css meta.property-value.css variable.other.less', 128 | 'meta.property-list.scss variable.scss', 129 | 'meta.property-list.sass variable.sass', 130 | 'meta.brace', 131 | 'keyword.operator.operator', 132 | 'keyword.operator.or.regexp', 133 | 'keyword.operator.expression.in', 134 | 'keyword.operator.relational', 135 | 'keyword.operator.assignment', 136 | 'keyword.operator.comparison', 137 | 'keyword.operator.type', 138 | 'keyword.operator', 139 | 'keyword', 140 | 'punctuation.definition.string', 141 | 'punctuation', 142 | 'variable.other.readwrite.js', 143 | 'storage.type', 144 | 'source.css', 145 | 'string.quoted', 146 | ], 147 | settings: { 148 | fontStyle: '', 149 | }, 150 | }, 151 | ] 152 | 153 | const { type, colors, tokenColors } = omniOwlMinimalItalics 154 | 155 | export const omniOwl: ThemeSchema = { 156 | name: 'Omni Owl', 157 | type, 158 | colors, 159 | tokenColors: [...tokenColors, ...italics], 160 | } 161 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig.json to read more about this file */ 4 | 5 | /* Projects */ 6 | // "incremental": true, /* Enable incremental compilation */ 7 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ 8 | // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */ 9 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */ 10 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ 11 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ 12 | 13 | /* Language and Environment */ 14 | "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ 15 | // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ 16 | // "jsx": "preserve", /* Specify what JSX code is generated. */ 17 | // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ 18 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ 19 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */ 20 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ 21 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */ 22 | // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */ 23 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ 24 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ 25 | 26 | /* Modules */ 27 | "module": "commonjs", /* Specify what module code is generated. */ 28 | // "rootDir": "./", /* Specify the root folder within your source files. */ 29 | // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ 30 | "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ 31 | "paths": { /* Specify a set of entries that re-map imports to additional lookup locations. */ 32 | "~/*": ["./src/*"], 33 | }, 34 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ 35 | // "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */ 36 | // "types": [], /* Specify type package names to be included without being referenced in a source file. */ 37 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 38 | // "resolveJsonModule": true, /* Enable importing .json files */ 39 | // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */ 40 | 41 | /* JavaScript Support */ 42 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */ 43 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ 44 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */ 45 | 46 | /* Emit */ 47 | // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ 48 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */ 49 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ 50 | // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ 51 | // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */ 52 | // "outDir": "./", /* Specify an output folder for all emitted files. */ 53 | // "removeComments": true, /* Disable emitting comments. */ 54 | // "noEmit": true, /* Disable emitting files from a compilation. */ 55 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ 56 | // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */ 57 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ 58 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ 59 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 60 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ 61 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ 62 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ 63 | // "newLine": "crlf", /* Set the newline character for emitting files. */ 64 | // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */ 65 | // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */ 66 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ 67 | // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */ 68 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ 69 | // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ 70 | 71 | /* Interop Constraints */ 72 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ 73 | // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ 74 | "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */ 75 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ 76 | "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ 77 | 78 | /* Type Checking */ 79 | "strict": true, /* Enable all strict type-checking options. */ 80 | // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */ 81 | // "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */ 82 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ 83 | // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */ 84 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ 85 | // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */ 86 | // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */ 87 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ 88 | // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */ 89 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */ 90 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ 91 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ 92 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ 93 | // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ 94 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ 95 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */ 96 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ 97 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ 98 | 99 | /* Completeness */ 100 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ 101 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /vsc-extension-quickstart.md: -------------------------------------------------------------------------------- 1 | # Welcome to your VS Code Extension 2 | 3 | ## What's in the folder 4 | 5 | - This folder contains all of the files necessary for your color theme extension. 6 | - `package.json` - this is the manifest file that defines the location of the theme file and specifies the base theme of the theme. 7 | - `themes/Omni Owl-color-theme.json` - the color theme definition file. 8 | 9 | ## Get up and running straight away 10 | 11 | - Press `F5` to open a new window with your extension loaded. 12 | - Open `File > Preferences > Color Themes` and pick your color theme. 13 | - Open a file that has a language associated. The languages' configured grammar will tokenize the text and assign 'scopes' to the tokens. To examine these scopes, invoke the `Developer: Inspect Editor Tokens and Scopes` command from the Command Palette (`Ctrl+Shift+P` or `Cmd+Shift+P` on Mac) . 14 | 15 | ## Make changes 16 | 17 | - Changes to the theme file are automatically applied to the Extension Development Host window. 18 | 19 | ## Adopt your theme to Visual Studio Code 20 | 21 | - The token colorization is done based on standard TextMate themes. Colors are matched against one or more scopes. 22 | 23 | To learn more about scopes and how they're used, check out the [color theme](https://code.visualstudio.com/api/extension-guides/color-theme) documentation. 24 | 25 | ## Install your extension 26 | 27 | - To start using your extension with Visual Studio Code copy it into the `/.vscode/extensions` folder and restart Code. 28 | - To share your extension with the world, read on https://code.visualstudio.com/docs about publishing an extension. 29 | --------------------------------------------------------------------------------