Skip to content

Commit

Permalink
Initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
bartekjaszczak committed Oct 30, 2024
0 parents commit 57e5aa8
Show file tree
Hide file tree
Showing 14 changed files with 1,079 additions and 0 deletions.
21 changes: 21 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
MIT License

Copyright (c) 2024 Bartłomiej Jaszczak

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
65 changes: 65 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# finale-nvim

**finale** is a refined dark theme for Neovim, balancing vivid and pastel tones with a focus on readability and comfort. Designed for contrast, finale offers a polished aesthetic that builds on my previous themes.

## Features

- 10 carefully selected accent colours, along with 10 pastel variations
- Supports **treesitter** highlighting as well as **semantic tokens**
- Supports some major plugins (feel free to open an issue if you'd like your plugin supported)
- Includes themes for **lualine** and **barbecue**

## Usage

### Lazy

There are no settings to this theme, so there's no need to call `setup()`. Simply enable and activate the theme:

```lua
{
"https://gitlab.com/bartekjaszczak/finale-nvim",

priority = 1000,
config = function()
-- Activate the theme
vim.cmd.colorscheme("finale")
end
}
```

### Lualine

```lua
require("lualine").setup({
options = {
-- ...
theme = "finale"
-- ...
},
})
```

### Barbecue


```lua
require("barbecue").setup({
-- ...
theme = "finale"
-- ...
})
```

## Preview

![showcase](showcase/showcase.png?)

## FAQ

### Why is it called finale?

Because it's my 4th Neovim theme this year and I hope it'll be the last one. Forever.

### I'd like to adjust some colours to my liking, how can I do that?

Currently there's no settings available. If you feel like you could use colour overrides (or some other custom configuration), feel free to open an issue.
1 change: 1 addition & 0 deletions colors/finale.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require("finale").load()
44 changes: 44 additions & 0 deletions lua/barbecue/theme/finale.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
local colours = require("finale.colours")
local theme = require("finale.theme")
theme = theme.get_theme(colours)

local bbq = {
normal = { fg = theme.ui.fg },

ellipsis = { fg = theme.ui.fg },
separator = { fg = theme.ui.accent_weak, bold = true },
modified = { fg = theme.diag.warn.fg },

dirname = { fg = theme.ui.accent_weak },
basename = { fg = theme.ui.accent_strong, bold = true },
context = { fg = theme.ui.fg },

context_file = { fg = theme.ui.fg },
context_module = { fg = theme.syntax.namespace },
context_namespace = { fg = theme.syntax.namespace },
context_package = { fg = theme.syntax.namespace },
context_class = { fg = theme.syntax.type },
context_method = { fg = theme.syntax.method },
context_property = { fg = theme.syntax.field },
context_field = { fg = theme.syntax.field },
context_constructor = { fg = theme.syntax.method },
context_enum = { fg = theme.syntax.type },
context_interface = { fg = theme.syntax.type },
context_function = { fg = theme.syntax.func },
context_variable = { fg = theme.syntax.variable },
context_constant = { fg = theme.syntax.constant },
context_string = { fg = theme.syntax.string },
context_number = { fg = theme.syntax.number },
context_boolean = { fg = theme.syntax.boolean },
context_array = { fg = theme.syntax.variable },
context_object = { fg = theme.syntax.variable },
context_key = { fg = theme.syntax.field },
context_null = { fg = theme.syntax.keyword },
context_enum_member = { fg = theme.syntax.constant },
context_struct = { fg = theme.syntax.type },
context_event = { fg = theme.syntax.type },
context_type_parameter = { fg = theme.syntax.constant },
context_operator = { fg = theme.syntax.operator },
}

return bbq
42 changes: 42 additions & 0 deletions lua/finale/colours.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
local colours = {
base = {
bg_2 = "#0d0700",
bg_1 = "#201d17",
bg_0 = "#333029",

highlight = "#48443d",

dark_grey = "#625e56",
light_grey = "#949088",

fg_0 = "#c1b6a3",
fg_1 = "#dfd9c2",
fg_2 = "#e9e5dc",
},
main = {
red = "#fb4934",
orange = "#ff8800",
yellow = "#ffd500",
lime = "#83b324",
green = "#08bd40",
teal = "#17bda9",
blue = "#219fe3",
violet = "#9a64ff",
purple = "#db4ae8",
pink = "#f752a4",
},
pastel = {
red = "#d67569",
orange = "#ffbd7a",
yellow = "#f2de77",
lime = "#9bb36d",
green = "#6ebd87",
teal = "#5fbdb2",
blue = "#78bde3",
violet = "#c2a1ff",
purple = "#e197e8",
pink = "#f79cc9",
},
}

return colours
142 changes: 142 additions & 0 deletions lua/finale/highlights/editor.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
local M = {}

function M.get_highlights(theme)
return {
-- ColorColumn Used for the columns set with 'colorcolumn'.
ColorColumn = { bg = theme.ui.bg_weak },
-- Conceal Placeholder characters substituted for concealed text (see 'conceallevel').
Conceal = { fg = theme.none },
-- CurSearch Used for highlighting a search pattern under the cursor (see 'hlsearch').
CurSearch = { fg = theme.ui.bg_neutral, bg = theme.ui.accent_strong, bold = true },
-- Cursor Character under the cursor.
Cursor = { fg = theme.ui.bg_neutral, bg = theme.ui.accent_strong },
-- lCursor Character under the cursor when |language-mapping| is used (see 'guicursor').
lCursor = { link = "Cursor" },
-- CursorIM Like Cursor, but used when in IME mode.
CursorIM = { link = "Cursor" },
-- CursorColumn Screen-column at the cursor, when 'cursorcolumn' is set.
CursorColumn = { link = "CursorLine" },
-- CursorLine Screen-line at the cursor, when 'cursorline' is set. Low-priority if foreground (ctermfg OR guifg) is not set.
CursorLine = { bg = theme.ui.bg_weak },
-- Directory Directory names (and other special names in listings).
Directory = { fg = theme.ui.accent_weak },
-- DiffAdd Diff mode: Added line. |diff.txt|
DiffAdd = { bg = theme.git.add, fg = theme.ui.bg_weak },
-- DiffChange Diff mode: Changed line. |diff.txt|
DiffChange = { bg = theme.git.change, fg = theme.ui.bg_weak },
-- DiffDelete Diff mode: Deleted line. |diff.txt|
DiffDelete = { bg = theme.git.delete, fg = theme.ui.bg_weak },
-- DiffText Diff mode: Changed text within a changed line. |diff.txt|
DiffText = { bg = theme.git.delete },
-- EndOfBuffer Filler lines (~) after the end of the buffer. By default, this is highlighted like |hl-NonText|.
EndOfBuffer = { fg = theme.ui.grey_strong },
-- TermCursor Cursor in a focused terminal.
-- TermCursorNC Cursor in an unfocused terminal.
-- ErrorMsg Error messages on the command line.
ErrorMsg = { fg = theme.diag.error.fg, bold = true },
-- WinSeparator Separators between window splits.
WinSeparator = { fg = theme.ui.accent_weak, bold = true },
VertSplit = { link = "WinSeparator" },
-- Folded Line used for closed folds.
Folded = { fg = theme.ui.fg, bg = theme.ui.bg_strong },
-- FoldColumn 'foldcolumn'
FoldColumn = { fg = theme.ui.fg, bg = theme.ui.bg_neutral },
-- SignColumn Column where |signs| are displayed.
SignColumn = { fg = theme.ui.fg, bg = theme.ui.bg_neutral },
-- IncSearch 'incsearch' highlighting; also used for the text replaced with ":s///c".
IncSearch = { link = "CurSearch" },
-- Substitute |:substitute| replacement text highlighting.
Substitute = { fg = theme.ui.bg_neutral, bg = theme.ui.secondary_accent_strong, bold = true },
-- LineNr Line number for ":number" and ":#" commands, and when 'number' or 'relativenumber' option is set.
LineNr = { fg = theme.ui.grey_strong, bg = theme.ui.bg_neutral },
-- LineNrAbove Line number for when the 'relativenumber' option is set, above the cursor line.
-- LineNrBelow Line number for when the 'relativenumber' option is set, below the cursor line.
-- CursorLineNr Like LineNr when 'cursorline' is set and 'cursorlineopt' contains "number" or is "both", for the cursor line.
CursorLineNr = { fg = theme.ui.accent_strong, bg = theme.ui.bg_neutral, bold = true },
-- CursorLineFold Like FoldColumn when 'cursorline' is set for the cursor line.
-- CursorLineSign Like SignColumn when 'cursorline' is set for the cursor line.
-- MatchParen Character under the cursor or just before it, if it is a paired bracket, and its match. |pi_paren.txt|
MatchParen = { fg = theme.syntax.special, bg = theme.ui.bg_strong, bold = true },
-- ModeMsg 'showmode' message (e.g., "-- INSERT --").
ModeMsg = { fg = theme.ui.fg, bold = true },
-- MsgArea Area for messages and cmdline.
MsgArea = { fg = theme.ui.fg, bg = theme.ui.bg_weak },
-- MsgSeparator Separator for scrolled messages |msgsep|.
MsgSeparator = { fg = theme.ui.fg, bg = theme.ui.bg_weak },
-- MoreMsg |more-prompt|
MoreMsg = { fg = theme.diag.info.fg },
-- NonText '@' at the end of the window, characters from 'showbreak' and other characters that do not really exist in the text (e.g., ">" displayed when a double-wide character doesn't fit at the end of the line). See also |hl-EndOfBuffer|.
NonText = { fg = theme.ui.grey_weak },
-- Normal Normal text.
Normal = { fg = theme.ui.fg, bg = theme.ui.bg_neutral },
-- NormalFloat Normal text in floating windows.
NormalFloat = { fg = theme.ui.fg, bg = theme.ui.bg_neutral },
-- FloatBorder Border of floating windows.
FloatBorder = { fg = theme.ui.accent_weak, bg = theme.ui.bg_neutral },
-- FloatTitle Title of floating windows.
FloatTitle = { fg = theme.ui.accent_strong, bg = theme.ui.bg_neutral, bold = true },
-- FloatFooter Footer of floating windows.
FloatFooter = { fg = theme.ui.fg, bg = theme.ui.bg_neutral },
-- NormalNC Normal text in non-current windows.
NormalNC = { link = "Normal" },
-- Pmenu Popup menu: Normal item.
Pmenu = { fg = theme.ui.fg, bg = theme.ui.bg_neutral },
-- PmenuSel Popup menu: Selected item.
PmenuSel = { fg = theme.ui.bg_neutral, bg = theme.ui.accent_strong },
-- PmenuSbar Popup menu: Scrollbar.
PmenuSbar = { bg = theme.ui.bg_weak },
-- PmenuThumb Popup menu: Thumb of the scrollbar.
PmenuThumb = { bg = theme.ui.accent_weak },
-- Question |hit-enter| prompt and yes/no questions.
Question = { link = "MoreMsg" },
-- QuickFixLine Current |quickfix| item in the quickfix window. Combined with |hl-CursorLine| when the cursor is there.
QuickFixLine = { link = "CurSearch" },
-- Search Last search pattern highlighting (see 'hlsearch'). Also used for similar items that need to stand out.
Search = { link = "CurSearch" },
-- SpecialKey Unprintable characters: Text displayed differently from what it really is. But not 'listchars' whitespace. |hl-Whitespace|
SpecialKey = { fg = theme.ui.grey_strong },
-- SpellBad Word that is not recognized by the spellchecker. |spell| Combined with the highlighting used otherwise.
SpellBad = { undercurl = true, sp = theme.diag.error.fg },
-- SpellCap Word that should start with a capital. |spell| Combined with the highlighting used otherwise.
SpellCap = { undercurl = true, sp = theme.diag.hint.fg },
-- SpellLocal Word that is recognized by the spellchecker as one that is used in another region. |spell| Combined with the highlighting used otherwise.
SpellLocal = { undercurl = true, sp = theme.diag.hint.fg },
-- SpellRare Word that is recognized by the spellchecker as one that is hardly ever used. |spell| Combined with the highlighting used otherwise.
SpellRare = { undercurl = true, sp = theme.diag.hint.fg },
-- StatusLine Status line of current window.
StatusLine = { fg = theme.ui.accent_weak, bg = theme.ui.bg_strong },
-- StatusLineNC Status lines of not-current windows. Note: If this is equal to "StatusLine", Vim will use "^^^" in the status line of the current window.
StatusLineNC = { fg = theme.ui.fg, bg = theme.ui.bg_strong },
-- TabLine Tab pages line, not active tab page label.
TabLine = { bg = theme.ui.bg_weak, fg = theme.ui.grey_strong },
-- TabLineFill Tab pages line, where there are no labels.
TabLineFill = { bg = theme.ui.bg_neutral },
-- TabLineSel Tab pages line, active tab page label.
TabLineSel = { fg = theme.ui.accent_weak, bg = theme.ui.grey_weak, bold = true },
-- Title Titles for output from ":set all", ":autocmd" etc.
Title = { fg = theme.ui.accent_strong, bold = true },
-- Visual Visual mode selection.
Visual = { bg = theme.ui.accent_weak, fg = theme.ui.bg_weak },
-- VisualNOS Visual mode selection when vim is "Not Owning the Selection".
VisualNOS = { link = "Visual" },
-- WarningMsg Warning messages.
WarningMsg = { fg = theme.diag.warn.fg },
-- Whitespace "nbsp", "space", "tab", "multispace", "lead" and "trail" in 'listchars'.
Whitespace = { fg = theme.ui.bg_weak },
-- WildMenu Current match in 'wildmenu' completion.
WildMenu = { link = "Pmenu" },
-- WinBar Window bar of current window.
Winbar = { fg = theme.ui.bg_weak, bg = "NONE" },
-- WinBarNC Window bar of not-current windows.
WinbarNC = { fg = theme.ui.bg_weak, bg = "NONE" },

-- SignColumnSB = { link = "SignColumn" },
-- NormalSB = { link = "Normal" },

healthError = { fg = theme.diag.error.fg },
healthSuccess = { fg = theme.diag.ok.fg },
healthWarning = { fg = theme.diag.warn.fg },
}
end

return M
16 changes: 16 additions & 0 deletions lua/finale/highlights/init.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
local M = {}

function M.get_highlights(theme)
local highlights = {}

for _, file in ipairs({"editor", "syntax", "plugins"}) do
local group = require("finale.highlights." .. file)
for hl, opts in pairs(group.get_highlights(theme)) do
highlights[hl] = opts
end
end

return highlights
end

return M
Loading

0 comments on commit 57e5aa8

Please sign in to comment.