Skip to content

Commit dfc70e4

Browse files
authored
Merge pull request #4 from vinitkumar/feat/oscura-dusk-light-theme
feat: Add oscura-dusk-light theme with accessibility compliance
2 parents 8483eb7 + 5044b7f commit dfc70e4

File tree

6 files changed

+531
-0
lines changed

6 files changed

+531
-0
lines changed

.github/workflows/test.yml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
name: Tests
2+
on: [push, pull_request]
3+
4+
jobs:
5+
tests:
6+
runs-on: ubuntu-latest
7+
steps:
8+
- uses: actions/checkout@v2
9+
- name: Install Vim
10+
run: sudo apt-get install vim
11+
- name: Install Vader
12+
run: |
13+
git clone https://github.com/junegunn/vader.vim.git
14+
echo "set rtp+=vader.vim" > ~/.vimrc
15+
- name: Run tests
16+
run: ./run-tests.sh

colors/oscura-dusk-light.vim

Lines changed: 358 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,358 @@
1+
" Oscura Dusk Light - A light Vim/Neovim colorscheme based on oscura-dusk
2+
" Author: Vinit Kumar
3+
" Created: March 20, 2025
4+
" License MIT
5+
6+
" Setup
7+
set background=light
8+
hi clear
9+
if exists("syntax_on")
10+
syntax reset
11+
endif
12+
let g:colors_name = "oscura-dusk-light"
13+
14+
" Define colors - Light version of oscura-dusk palette
15+
" Background and foreground colors
16+
let s:bg = "#F8F9FA" " Light background (was #131419)
17+
let s:fg = "#2D3748" " Dark foreground (was #E6E6E6)
18+
let s:comment = "#718096" " Muted gray for comments (was #46474F)
19+
let s:keyword = "#4A5568" " Dark gray for keywords (was #9099A1)
20+
let s:function = "#2B6CB0" " Blue for functions (was #E6E7A3)
21+
let s:string = "#C05621" " Orange for strings (was #F9B98C)
22+
let s:number = "#C05621" " Orange for numbers (was #F9B98C)
23+
let s:constant = "#C05621" " Orange for constants (was #F9B98C)
24+
let s:type = "#2B6CB0" " Blue for types (was #E6E7A3)
25+
let s:error = "#E53E3E" " Red for errors (was #FF5C5C)
26+
let s:warning = "#D69E2E" " Yellow for warnings (was #D2D714)
27+
let s:special = "#4A5568" " Dark gray for special chars (was #9592A4)
28+
let s:visual = "#E2E8F0" " Light blue for visual selection (was #232323)
29+
let s:cursor = "#2B6CB0" " Blue cursor (was #FFCC00)
30+
let s:selection = "#CBD5E0" " Light gray for selection (was #5A5B63)
31+
let s:linenum = "#A0AEC0" " Light gray for line numbers (was #32333B)
32+
let s:linenum_act = "#2D3748" " Dark for active line number (was #E6E6E6)
33+
let s:matchbracket = "#E2E8F0" " Light background for matching brackets (was #5C6974)
34+
let s:search = "#FEF5E7" " Light yellow for search (was #5C6974)
35+
let s:diffadd = "#C6F6D5" " Light green for additions (was #4EBE96)
36+
let s:diffdelete = "#FED7D7" " Light red for deletions (was #FF5C5C)
37+
let s:diffchange = "#FEF5E7" " Light yellow for changes (was #4EBE96)
38+
let s:difftext = "#E2E8F0" " Light gray for diff text (was #303030)
39+
let s:link = "#3182CE" " Blue for links (was #479FFA)
40+
let s:attr = "#38A169" " Green for attributes (was #54C0A3)
41+
42+
" Highlight helper
43+
execute "command! -nargs=+ Hi hi <args>"
44+
45+
" Editor highlighting
46+
execute "hi Normal guifg=".s:fg." guibg=".s:bg
47+
execute "hi Cursor guifg=".s:bg." guibg=".s:cursor." gui=bold"
48+
execute "hi CursorLine guibg=".s:visual." gui=none"
49+
execute "hi LineNr guifg=".s:linenum
50+
execute "hi CursorLineNr guifg=".s:linenum_act
51+
execute "hi VertSplit guifg=".s:linenum." guibg=".s:bg
52+
execute "hi StatusLine guifg=".s:fg." guibg=".s:visual." gui=none"
53+
execute "hi StatusLineNC guifg=".s:comment." guibg=".s:selection." gui=none"
54+
execute "hi Pmenu guifg=".s:fg." guibg=".s:visual
55+
execute "hi PmenuSel guifg=".s:bg." guibg=".s:function
56+
execute "hi PmenuSbar guibg=".s:visual
57+
execute "hi PmenuThumb guibg=".s:selection
58+
execute "hi TabLine guifg=".s:comment." guibg=".s:bg." gui=none"
59+
execute "hi TabLineFill guifg=".s:comment." guibg=".s:bg." gui=none"
60+
execute "hi TabLineSel guifg=".s:fg." guibg=".s:bg." gui=none"
61+
execute "hi Search guifg=".s:fg." guibg=".s:search
62+
execute "hi IncSearch guifg=".s:fg." guibg=".s:search
63+
execute "hi MatchParen guibg=".s:matchbracket
64+
execute "hi Visual guibg=".s:visual
65+
execute "hi NonText guifg=".s:comment." guibg=".s:bg
66+
execute "hi Todo guifg=".s:function." guibg=".s:bg." gui=italic"
67+
execute "hi Underlined guifg=".s:link." gui=underline"
68+
execute "hi Error guifg=".s:error." guibg=".s:bg
69+
execute "hi ErrorMsg guifg=".s:error." guibg=".s:bg
70+
execute "hi WarningMsg guifg=".s:warning." guibg=".s:bg
71+
execute "hi SpecialKey guifg=".s:special." guibg=".s:bg
72+
execute "hi Title guifg=".s:function." gui=bold"
73+
execute "hi SignColumn guifg=".s:comment." guibg=".s:bg
74+
execute "hi DiffAdd guifg=".s:fg." guibg=".s:diffadd
75+
execute "hi DiffDelete guifg=".s:error." guibg=".s:diffdelete
76+
execute "hi DiffChange guifg=".s:fg." guibg=".s:diffchange
77+
execute "hi DiffText guifg=".s:fg." guibg=".s:difftext
78+
execute "hi Folded guifg=".s:comment." guibg=".s:visual
79+
execute "hi FoldColumn guifg=".s:comment." guibg=".s:bg
80+
execute "hi Directory guifg=".s:function." guibg=".s:bg
81+
execute "hi SpellBad guifg=".s:error." gui=undercurl"
82+
execute "hi SpellCap guifg=".s:warning." gui=undercurl"
83+
execute "hi SpellRare guifg=".s:warning." gui=undercurl"
84+
execute "hi SpellLocal guifg=".s:warning." gui=undercurl"
85+
execute "hi ColorColumn guibg=".s:visual
86+
execute "hi QuickFixLine guibg=".s:visual." gui=none"
87+
execute "hi Conceal guifg=".s:comment." guibg=".s:bg
88+
89+
" Syntax highlighting
90+
execute "hi Comment guifg=".s:comment
91+
execute "hi Constant guifg=".s:constant
92+
execute "hi String guifg=".s:string
93+
execute "hi Character guifg=".s:string
94+
execute "hi Number guifg=".s:number
95+
execute "hi Boolean guifg=".s:constant
96+
execute "hi Float guifg=".s:number
97+
execute "hi Function guifg=".s:function
98+
execute "hi Identifier guifg=".s:fg
99+
execute "hi Statement guifg=".s:keyword
100+
execute "hi Conditional guifg=".s:keyword
101+
execute "hi Repeat guifg=".s:keyword
102+
execute "hi Label guifg=".s:keyword
103+
execute "hi Operator guifg=".s:keyword
104+
execute "hi Keyword guifg=".s:keyword
105+
execute "hi Exception guifg=".s:keyword
106+
execute "hi PreProc guifg=".s:keyword
107+
execute "hi Include guifg=".s:keyword
108+
execute "hi Define guifg=".s:keyword
109+
execute "hi Macro guifg=".s:keyword
110+
execute "hi PreCondit guifg=".s:keyword
111+
execute "hi Type guifg=".s:type
112+
execute "hi StorageClass guifg=".s:keyword
113+
execute "hi Structure guifg=".s:type
114+
execute "hi Typedef guifg=".s:type
115+
execute "hi Special guifg=".s:special
116+
execute "hi SpecialChar guifg=".s:special
117+
execute "hi Tag guifg=".s:attr
118+
execute "hi Delimiter guifg=".s:special
119+
execute "hi SpecialComment guifg=".s:comment
120+
execute "hi Debug guifg=".s:warning
121+
execute "hi WildMenu guifg=".s:fg." guibg=".s:bg
122+
execute "hi NormalFloat guifg=".s:fg." guibg=".s:visual
123+
124+
" TypeScript specific
125+
execute "hi typescriptBraces guifg=".s:special
126+
execute "hi typescriptParens guifg=".s:special
127+
execute "hi typescriptEndColons guifg=".s:special
128+
execute "hi typescriptModule guifg=".s:keyword
129+
execute "hi typescriptImport guifg=".s:keyword
130+
execute "hi typescriptExport guifg=".s:keyword
131+
execute "hi typescriptVariable guifg=".s:keyword
132+
execute "hi typescriptOperator guifg=".s:keyword
133+
execute "hi typescriptEnumKeyword guifg=".s:keyword
134+
execute "hi typescriptArrowFunc guifg=".s:keyword
135+
execute "hi typescriptMethodAccessor guifg=".s:keyword
136+
execute "hi typescriptAsyncFuncKeyword guifg=".s:keyword
137+
execute "hi typescriptAwaitKeyword guifg=".s:keyword
138+
execute "hi typescriptCall guifg=".s:special
139+
execute "hi typescriptClassName guifg=".s:function
140+
execute "hi typescriptClassHeritage guifg=".s:function
141+
execute "hi typescriptInterfaceName guifg=".s:function
142+
execute "hi typescriptTypeReference guifg=".s:function
143+
execute "hi typescriptFuncName guifg=".s:function
144+
execute "hi typescriptMember guifg=".s:function
145+
execute "hi typescriptObjectLabel guifg=".s:fg
146+
147+
" TSX/JSX Support
148+
execute "hi tsxAttrib guifg=".s:attr
149+
execute "hi tsxTag guifg=".s:special
150+
execute "hi tsxTagName guifg=".s:function
151+
execute "hi tsxCloseTag guifg=".s:special
152+
execute "hi tsxCloseString guifg=".s:special
153+
execute "hi tsxAttributeBraces guifg=".s:special
154+
execute "hi tsxEqual guifg=".s:special
155+
execute "hi tsxString guifg=".s:fg
156+
157+
" HTML
158+
execute "hi htmlTag guifg=".s:special
159+
execute "hi htmlEndTag guifg=".s:special
160+
execute "hi htmlTagName guifg=".s:function
161+
execute "hi htmlArg guifg=".s:attr
162+
execute "hi htmlTitle guifg=".s:fg
163+
164+
" CSS
165+
execute "hi cssClassName guifg=".s:function
166+
execute "hi cssIdentifier guifg=".s:function
167+
execute "hi cssTagName guifg=".s:function
168+
execute "hi cssColor guifg=".s:constant
169+
execute "hi cssBraces guifg=".s:special
170+
execute "hi cssAttr guifg=".s:attr
171+
execute "hi cssAttrRegion guifg=".s:attr
172+
execute "hi cssDefinition guifg=".s:attr
173+
execute "hi cssVendor guifg=".s:attr
174+
execute "hi cssImportant guifg=".s:attr
175+
176+
" JavaScript
177+
execute "hi javaScript guifg=".s:fg
178+
execute "hi javaScriptBraces guifg=".s:special
179+
execute "hi javaScriptNumber guifg=".s:constant
180+
execute "hi javaScriptNull guifg=".s:constant
181+
execute "hi javaScriptIdentifier guifg=".s:keyword
182+
execute "hi javaScriptOperator guifg=".s:keyword
183+
execute "hi javaScriptFunction guifg=".s:keyword
184+
execute "hi javaScriptRegexpString guifg=".s:string
185+
execute "hi javaScriptGlobal guifg=".s:type
186+
execute "hi javaScriptMessage guifg=".s:type
187+
execute "hi javaScriptThis guifg=".s:special
188+
189+
" Python
190+
execute "hi pythonBuiltin guifg=".s:function." gui=bold"
191+
execute "hi pythonStatement guifg=".s:keyword
192+
execute "hi pythonConditional guifg=".s:keyword
193+
execute "hi pythonRepeat guifg=".s:keyword
194+
execute "hi pythonException guifg=".s:keyword
195+
execute "hi pythonInclude guifg=".s:keyword
196+
execute "hi pythonDecorator guifg=".s:attr
197+
execute "hi pythonFunction guifg=".s:function
198+
execute "hi pythonClass guifg=".s:function
199+
execute "hi pythonOperator guifg=".s:keyword
200+
execute "hi pythonSelf guifg=".s:special
201+
execute "hi pythonDottedName guifg=".s:special
202+
execute "hi pythonComment guifg=".s:comment." gui=italic"
203+
execute "hi pythonDocstring guifg=".s:comment." gui=italic"
204+
execute "hi pythonString guifg=".s:string
205+
execute "hi pythonQuotes guifg=".s:string
206+
execute "hi pythonTripleQuotes guifg=".s:string
207+
208+
" Markdown
209+
execute "hi markdownHeadingDelimiter guifg=".s:function." gui=bold"
210+
execute "hi markdownH1 guifg=".s:function." gui=bold"
211+
execute "hi markdownH2 guifg=".s:function." gui=bold"
212+
execute "hi markdownH3 guifg=".s:function." gui=bold"
213+
execute "hi markdownH4 guifg=".s:function." gui=bold"
214+
execute "hi markdownH5 guifg=".s:function." gui=bold"
215+
execute "hi markdownH6 guifg=".s:function." gui=bold"
216+
execute "hi markdownCode guifg=".s:special
217+
execute "hi markdownCodeBlock guifg=".s:special
218+
execute "hi markdownCodeDelimiter guifg=".s:special
219+
execute "hi markdownBlockquote guifg=".s:comment
220+
execute "hi markdownListMarker guifg=".s:function
221+
execute "hi markdownOrderedListMarker guifg=".s:function
222+
execute "hi markdownRule guifg=".s:special
223+
execute "hi markdownHeadingRule guifg=".s:special
224+
execute "hi markdownUrlDelimiter guifg=".s:special
225+
execute "hi markdownLinkDelimiter guifg=".s:special
226+
execute "hi markdownLinkTextDelimiter guifg=".s:special
227+
execute "hi markdownHeadingDelimiter guifg=".s:special
228+
execute "hi markdownUrl guifg=".s:link
229+
execute "hi markdownUrlTitleDelimiter guifg=".s:string
230+
execute "hi markdownLinkText guifg=".s:function." gui=underline"
231+
execute "hi markdownIdDeclaration guifg=".s:function
232+
233+
" JSON
234+
execute "hi jsonKeyword guifg=".s:function
235+
execute "hi jsonString guifg=".s:string
236+
execute "hi jsonBoolean guifg=".s:constant
237+
execute "hi jsonNumber guifg=".s:constant
238+
execute "hi jsonQuote guifg=".s:special
239+
execute "hi jsonBraces guifg=".s:special
240+
execute "hi jsonNull guifg=".s:constant
241+
242+
" TreeSitter support (for Neovim)
243+
if has("nvim")
244+
" Identifiers
245+
execute "hi! link @variable guifg=".s:fg
246+
execute "hi! link @variable.builtin guifg=".s:special
247+
execute "hi! link @variable.parameter guifg=".s:special
248+
execute "hi! link @variable.member guifg=".s:fg
249+
execute "hi! link @constant guifg=".s:constant
250+
execute "hi! link @constant.builtin guifg=".s:special
251+
execute "hi! link @constant.macro guifg=".s:keyword
252+
execute "hi! link @module guifg=".s:function
253+
execute "hi! link @label guifg=".s:keyword
254+
execute "hi! link @symbol guifg=".s:special
255+
256+
" Functions
257+
execute "hi! link @function guifg=".s:function
258+
execute "hi! link @function.builtin guifg=".s:special
259+
execute "hi! link @function.macro guifg=".s:keyword
260+
execute "hi! link @method guifg=".s:function
261+
execute "hi! link @constructor guifg=".s:function
262+
execute "hi! link @parameter guifg=".s:special
263+
264+
" Keywords
265+
execute "hi! link @keyword guifg=".s:keyword
266+
execute "hi! link @keyword.function guifg=".s:keyword
267+
execute "hi! link @keyword.operator guifg=".s:keyword
268+
execute "hi! link @keyword.return guifg=".s:keyword
269+
execute "hi! link @conditional guifg=".s:keyword
270+
execute "hi! link @repeat guifg=".s:keyword
271+
execute "hi! link @debug guifg=".s:warning
272+
execute "hi! link @exception guifg=".s:keyword
273+
execute "hi! link @include guifg=".s:keyword
274+
execute "hi! link @define guifg=".s:keyword
275+
276+
" Types
277+
execute "hi! link @type guifg=".s:type
278+
execute "hi! link @type.builtin guifg=".s:type
279+
execute "hi! link @type.qualifier guifg=".s:keyword
280+
execute "hi! link @type.definition guifg=".s:type
281+
execute "hi! link @storageclass guifg=".s:keyword
282+
execute "hi! link @namespace guifg=".s:fg
283+
execute "hi! link @attribute guifg=".s:special
284+
execute "hi! link @property guifg=".s:fg
285+
execute "hi! link @field guifg=".s:fg
286+
287+
" Literals
288+
execute "hi! link @string guifg=".s:string
289+
execute "hi! link @string.regex guifg=".s:string
290+
execute "hi! link @string.escape guifg=".s:special
291+
execute "hi! link @string.special guifg=".s:special
292+
execute "hi! link @character guifg=".s:string
293+
execute "hi! link @character.special guifg=".s:special
294+
execute "hi! link @boolean guifg=".s:constant
295+
execute "hi! link @number guifg=".s:number
296+
execute "hi! link @float guifg=".s:number
297+
298+
" Markup
299+
execute "hi! link @text.strong guifg=".s:fg
300+
execute "hi! link @text.emphasis guifg=".s:fg
301+
execute "hi! link @text.underline guifg=".s:fg
302+
execute "hi! link @text.strike guifg=".s:comment
303+
execute "hi! link @text.title guifg=".s:function
304+
execute "hi! link @text.literal guifg=".s:string
305+
execute "hi! link @text.uri guifg=".s:fg." gui=underline"
306+
execute "hi! link @text.reference guifg=".s:fg
307+
execute "hi! link @tag guifg=".s:special
308+
execute "hi! link @tag.attribute guifg=".s:keyword
309+
execute "hi! link @tag.delimiter guifg=".s:special
310+
311+
" Comments
312+
execute "hi! link @comment guifg=".s:comment
313+
execute "hi! link @comment.documentation guifg=".s:comment
314+
315+
" Punctuation
316+
execute "hi! link @punctuation.delimiter guifg=".s:special
317+
execute "hi! link @punctuation.bracket guifg=".s:special
318+
execute "hi! link @punctuation.special guifg=".s:special
319+
320+
" Misc
321+
execute "hi! link @error guifg=".s:error
322+
execute "hi! link @danger guifg=".s:error
323+
execute "hi! link @todo guifg=".s:function." gui=italic"
324+
endif
325+
326+
" Additional TypeScript/JavaScript specific highlights
327+
execute "hi typescriptCall guifg=".s:fg
328+
execute "hi typescriptBinaryOp guifg=".s:keyword
329+
execute "hi typescriptUnaryOp guifg=".s:keyword
330+
execute "hi typescriptAssign guifg=".s:keyword
331+
execute "hi typescriptConstructSignature guifg=".s:keyword
332+
execute "hi typescriptFuncType guifg=".s:special
333+
execute "hi typescriptTemplateSubstitution guifg=".s:string
334+
execute "hi typescriptTemplateSB guifg=".s:special
335+
execute "hi typescriptTypeAnnotation guifg=".s:special
336+
execute "hi typescriptTypeBrackets guifg=".s:special
337+
execute "hi typescriptTypeParameter guifg=".s:function
338+
execute "hi typescriptDecorator guifg=".s:attr
339+
340+
" String Literals in TypeScript/JavaScript
341+
execute "hi typescriptStringLiteralType guifg=".s:attr
342+
execute "hi typescriptStringProperty guifg=".s:attr
343+
execute "hi typescriptObjectPropertyKey guifg=".s:attr
344+
execute "hi typescriptTemplateLiteral guifg=".s:string
345+
execute "hi typescriptString guifg=".s:string
346+
execute "hi typescriptStringS guifg=".s:string
347+
execute "hi typescriptStringD guifg=".s:string
348+
execute "hi typescriptStringB guifg=".s:string
349+
350+
" Next.js Directives
351+
execute "hi typescriptDirective guifg=".s:string
352+
execute "hi javascriptDirective guifg=".s:string
353+
354+
" Import/Export Paths
355+
execute "hi typescriptImportPath guifg=".s:fg
356+
execute "hi typescriptExportPath guifg=".s:fg
357+
358+
" Done!

run-tests.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
#!/bin/bash
2+
vim -Es -c 'Vader! tests/*.vader' > /dev/null

0 commit comments

Comments
 (0)