# Author : 0rphee <0rph3e@proton.me>

# Template written with the help of https://github.com/n0s4/helix-theme-template
# Keep in mind that I made this to fit Haskell and Python syntax, it may not work so well with other languages.

## GENERAL ==============================

'property' = { fg = "red" } # Regex group names.
"warning" = { fg ="yellow", modifiers = ["bold"] } # Editor warnings.
"error" = { fg = "red", modifiers = ["bold"] } # Editor errors, like mis-typing a command.
"info" = { fg = "mid-blue" } # Code diagnostic info in gutter (LSP).
# ? Difference between info and hint ?
"hint" = { fg = "light-green", modifiers = ["bold"] } # Code diagnostics hint in gutter (LSP).

# Code diagnostics in editing area (LSP).
"diagnostic.warning" = { underline = { color = "yellow", style = "curl" } }
"diagnostic.error" = { underline = { color = "red", style = "curl" } }
"diagnostic.info" = { underline = { color = "mid-blue", style = "curl" } }
"diagnostic.hint" = { underline = { color = "light-green", style = "curl" } }
"diagnostic.unnecessary" = { modifiers = ["dim"] }
"diagnostic.deprecated" = { modifiers = ["crossed_out"] }

# UI ==============================
# For styling helix itself.

'ui.background' = { fg = "autocomp-green", bg = "dark-green" } # Default background color.
'ui.window' = { fg = "mid-green" } # Window border between splits.

'ui.gutter' = { } # Left gutter for diagnostics and breakpoints.

'ui.text' = { fg = "white" } # Default text color.
'ui.text.focus' = { fg = "white", bg = "mid-green", modifiers = ["bold"] } # Selection highlight in buffer-picker or file-picker.
'ui.text.info' = { fg = "white" } # Info popup contents (space mode menu).

'ui.cursor' = { fg = "dark-green", bg = "white" } # Fallback cursor colour, non-primary cursors when there are multiple (shift-c).
'ui.cursor.primary' = { fg = "dark-green", bg = "light-blue" } # The primary cursor when there are multiple (shift-c).
'ui.cursor.insert' = { fg = "dark-green", bg = "light-blue" } # The cursor in insert mode (i).
'ui.cursor.select' = { fg = "dark-green", bg = "light-blue" } # The cursor in select mode (v).
'ui.cursor.match' = { fg = "dark-green", bg = "red", modifiers = ["bold"] } # The matching parentheses of that under the cursor.

'ui.selection' = { bg = "autocomp-green" } # All currently selected text.
'ui.selection.primary' = { bg = "autocomp-green" } # The primary selection when there are multiple.
'ui.cursorline.primary' = { bg = 'mid-green' }

'ui.linenr' = {  fg = "gray"  } # Line numbers.
'ui.linenr.selected' = { fg = "light-green", modifiers = [ "bold" ] } # Current line number.

'ui.virtual' = { fg = "autocomp-green" } # Namespace for additions to the editing area.
'ui.virtual.ruler' = { bg = "mid-green" } # Vertical rulers (colored columns in editing area).
'ui.virtual.whitespace' = { fg = "mid-green"} # Whitespace markers in editing area.
'ui.virtual.inlay-hint' = { fg = "autocomp-green" } # LSP inlay hints
'ui.virtual.indent-guide' = { fg = "mid-green" } # Indentation guides.
'ui.virtual.wrap' = { fg = "mid-green"} # Soft-wrap indicators
'ui.virtual.jump-label' = { fg = "autocomp-green", modifiers = [ "bold" ] } # Word-jump labels

'ui.statusline' = { fg = "light-green", bg = "autocomp-green"} # Status line.
'ui.statusline.inactive' = { fg = "white", bg = "mid-green"} # Status line in unfocused windows.

"ui.statusline.normal" = { fg = "dark-green", bg = "mid-blue", modifiers = [ "bold" ] }
"ui.statusline.insert" = { fg = "dark-green", bg = "pink", modifiers = [ "bold" ] }
"ui.statusline.select" = { fg = "dark-green", bg = "yellow", modifiers = [ "bold" ] }

'ui.help' = { bg = "mid-green", fg = "white"} # `:command` descriptions above the command line.

'ui.highlight' = { bg = "mid-green"} # selected contents of symbol pickers (spc-s, spc-S) and current line in buffer picker (spc-b).

'ui.menu' = { fg = "white", bg = "mid-green" } # Autocomplete menu.
'ui.menu.selected' = { fg = "light-green", bg = "autocomp-green" } # Selected autocomplete item.

'ui.popup' = { bg = "mid-green" } # Documentation popups (space-k).
# 'ui.ppopup.info' = { bg = "midgreen", fg = "gray", modifiers = ["bold"] } # Info popups box (space mode menu).

# SYNTAX HIGHLIGHTING ==============================
# All the keys here are Treesitter scopes.

'special' = { fg = "mid-blue"} # Special symbols e.g `?` in Rust, `...` in Hare.
'attribute' = { fg = "yellow" } # Class attributes, html tag attributes.

'type' = { fg = "orange"} # Variable type, like integer or string, including program defined classes, structs etc..
#'type.builtin' = { } # Primitive types of the language (string, int, float).
#'type.enum.variant' = { } # A variant of an enum.

'constructor' = { fg = "light-blue", modifiers = ["bold"]} # Constructor method for a class or struct. And in some cases applies to module names

'constant' = { fg = "light-blue", modifiers = ["bold"] } # Constant value
'constant.builtin' = { fg = "mid-blue", modifiers = ["bold"] } # Special constants like `true`, `false`, `none`, etc.
'constant.builtin.boolean' = { } # True or False.
'constant.character' = { fg = "light-green"} # Constant of character type.
'constant.character.escape' = { fg = "purple", modifiers = ["bold"] } # escape codes like \n.
'constant.numeric'  = { fg = "purple"} # constant integer or float value.
# 'constant.numeric.integer' = { } # constant integer value.
# 'constant.numeric.float' = { } # constant float value.

'string' = { fg = "light-green" } # String literal.
'string.regexp' = { } # Regular expression literal.
'string.special' = { fg = "red" } # Strings containing a path, URL, etc.
# 'string.special.path' = { } # String containing a file path.
# 'string.special.url' = { } # String containing a web URL.
# 'string.special.symbol' = { } # Erlang/Elixir atoms, Ruby symbols, Clojure keywords.

'comment' = { fg = "gray", modifiers = ["italic"] } # This is a comment.
'comment.line' = { } # Line comments, like this.
'comment.block' = { } # Block comments, like /* this */ in some languages.
'comment.block.documentation' = { } # Doc comments, e.g '///' in rust.

'variable' = { fg = "light-orange" }  # Variable names.
# 'variable.builtin' = { } # Language reserved variables: `this`, `self`, `super`, etc.
# 'variable.parameter' = { } # Function parameters.
'variable.other.member' = { fg = "orange" } # Fields of composite data types (e.g. structs, unions).

'label' = { fg = "purple" } # Loop labels in rust.

'punctuation' =  { fg = "yellow", modifiers = ["bold"] } # (){}[]:;,.
# 'punctuation.delimiter' = { fg = "yellow" } # Commas and colons.
# 'punctuation.bracket' = { fg = "yellow" } # Parentheses, angle brackets, etc.

'keyword' = { fg = "pink", modifiers = ["bold"] } # Language reserved keywords.
'keyword.control' = { fg = "pink", modifiers = ["bold"] } # Control keywords.
'keyword.control.conditional' = { fg = "pink", modifiers = ["bold"] } # 'if', 'else', 'elif'.
# 'keyword.control.repeat' = { } # 'for', 'while', 'loop'.
'keyword.control.import' = { fg = "pink", modifiers = ["italic"] } # 'import', 'export' ('use'?).
# 'keyword.control.return' = { } # 'return' in most languages.
'keyword.control.exception' = {fg = "pink", modifiers = ["bold"] } # 'raise' in python.
'keyword.operator' = { fg = "pink" } # 'or', 'and', 'in'.
'keyword.directive' = { fg = "purple" } # Preprocessor directives (#if in C).
'keyword.function' = { fg= "red" } # The keyword to define a function: 'def', 'fun', 'fn'.

'operator' = { fg = "pink", modifiers = ["bold"] } # Logical (&&, ||) and - I assume - Mathematical (+, %) operators

'function' = { fg = "mid-blue"}
'function.builtin' = { fg = "dark-blue" }
'function.method' = { fg = "dark-blue" } # Class / Struct methods.
'function.macro' = { fg = "purple" } # Like macros in rust.
# 'function.special' = { fg = "yellow" } # Preprocessor in C.

'tag' = { fg = "yellow"} # As in <body> for html.

'namespace' = { fg = "mid-blue" } # * Namespace keyword in java, C#, etc.

# Markup ==============================
# Colors for markup languages, like Markdown or XML.

'markup.heading' = { } # Markdown headings
'markup.heading.1' = { } # Markdown heading 1 color.
'markup.heading.2' = { } # Markdown heading 2 color.
'markup.heading.3' = { } # Markdown heading 3 color.
'markup.heading.4' = { } # Markdown heading 4 color.
'markup.heading.5' = { } # Markdown heading 5 color.
'markup.heading.6' = { } # Markdown heading 6 color.
'markup.heading.marker' = { fg = "red" } # Hashtag color on Markdown headings.

'markup.list' = { fg = "red" }
'markup.list.numbered' = { } # Numbered list.
'markup.list.unnumbered' = { } # Bullet point list.

'markup.bold' = { modifiers = ["bold"] } # Bold text.
'markup.italic' = { modifiers = ["italic"] } # Italicised text.
"markup.strikethrough" = { modifiers = ["crossed_out"] } # Crossed out text.

'markup.link' = { fg = "light-blue", modifiers = ["underlined"] }
'markup.link.url' = { } # Urls pointed to by links.
'markup.link.label' = { } # Non-URL link references.
'markup.link.text' = { fg = "purple"} # URL and image descriptions in links.

'markup.quote' = { } # `> Quotes` in Markdown.


# Markup - Interface ==============================
# "These scopes are used for theming the editor interface."

'markup.normal' = { }
'markup.normal.completion' = { } # For completion doc popup ui.
'markup.normal.raw' = { } # For hover popup ui.

'markup.heading.completion' = { } # Headings for completion doc popup ui.
'markup.heading.raw' = { } # Headings for hover popup ui.

'markup.raw' = { } # Code block in Markdown.
'markup.raw.block' = { } # Multiline (```) codeblock in Markdown.
'markup.raw.inline' = { } # `Inline code block` in Markdown.
'markup.raw.inline.completion' = { } # ?
'markup.raw.inline.hover' = { } # ?

# Diff ==============================
# Version control changes.

'diff.plus' = "light-green" # { } # Additions.
'diff.minus' = "red" # { } # Deletions.
'diff.delta' = "yellow" # { } # Modifications.
# 'diff.delta.moved' = { } # Renamed or moved files / changes.


[palette] # Define your custom colors here.
dark-green = "#00262a" # backgrounds
mid-green = "#073a40" # highlights
autocomp-green = "#0d6772" # lighter than mid-green
light-green = "#48e9a7" # strings

pink = "#df769b"
yellow = "#ffd800"
purple = "#918cff"
white = "#b1cace"
orange = "#ffa864"
light-orange = "#fff2c5"
gray = "#5b858b" # mainly for comments/background text
light-gray = "#2a3c41" # used when whitespace rendering is enabled and for indent-guides
red = "#e34e1b"

dark-blue = "#19a2b7"
mid-blue = "#47ace8"
light-blue = "#87efff"