From 3926adf70cc815f59eca43431261a9e104281bea Mon Sep 17 00:00:00 2001
From: Daniel Lundin <daniel@arity.se>
Date: Tue, 9 May 2023 23:04:58 +0200
Subject: [PATCH] Initial theme scaffolding

---
 colors/sumi-e-dark.lua  |  2 ++
 colors/sumi-e-light.lua |  2 ++
 colors/sumi-e.lua       |  1 +
 lua/sumi-e/colors.lua   | 27 ++++++++++++++++++++++
 lua/sumi-e/config.lua   |  9 ++++++++
 lua/sumi-e/init.lua     | 51 +++++++++++++++++++++++++++++++++++++++++
 6 files changed, 92 insertions(+)
 create mode 100644 colors/sumi-e-dark.lua
 create mode 100644 colors/sumi-e-light.lua
 create mode 100644 colors/sumi-e.lua
 create mode 100644 lua/sumi-e/colors.lua
 create mode 100644 lua/sumi-e/config.lua
 create mode 100644 lua/sumi-e/init.lua

diff --git a/colors/sumi-e-dark.lua b/colors/sumi-e-dark.lua
new file mode 100644
index 0000000..a934ee7
--- /dev/null
+++ b/colors/sumi-e-dark.lua
@@ -0,0 +1,2 @@
+vim.o.background = "dark"
+require("sumi-e").colorscheme()
diff --git a/colors/sumi-e-light.lua b/colors/sumi-e-light.lua
new file mode 100644
index 0000000..e800bf3
--- /dev/null
+++ b/colors/sumi-e-light.lua
@@ -0,0 +1,2 @@
+vim.o.background = "light"
+require("sumi-e").colorscheme()
diff --git a/colors/sumi-e.lua b/colors/sumi-e.lua
new file mode 100644
index 0000000..87a2c9e
--- /dev/null
+++ b/colors/sumi-e.lua
@@ -0,0 +1 @@
+require("sumi-e").colorscheme()
diff --git a/lua/sumi-e/colors.lua b/lua/sumi-e/colors.lua
new file mode 100644
index 0000000..4c967cc
--- /dev/null
+++ b/lua/sumi-e/colors.lua
@@ -0,0 +1,27 @@
+local colors = {
+	white = "#ffffff",
+	black = "#000000",
+	gray500 = "#7f7f7f",
+}
+
+function _colors_dark()
+	colors.bg = "#11171d"
+	colors.fg = "#e3e0cd"
+	colors.string = colors.gray500
+	colors.comment = colors.gray500
+end
+
+function _colors_light()
+	colors.bg = "#ffffff"
+	colors.fg = "#000000"
+end
+
+function colors.generate()
+	if vim.o.background == "dark" then
+		_colors_dark()
+	else
+		_colors_light()
+	end
+end
+
+return colors
diff --git a/lua/sumi-e/config.lua b/lua/sumi-e/config.lua
new file mode 100644
index 0000000..648abc7
--- /dev/null
+++ b/lua/sumi-e/config.lua
@@ -0,0 +1,9 @@
+local config = {
+	defaults = {
+		overrides = {},
+	},
+}
+
+setmetatable(config, { __index = config.defaults })
+
+return config
diff --git a/lua/sumi-e/init.lua b/lua/sumi-e/init.lua
new file mode 100644
index 0000000..7cfaeb8
--- /dev/null
+++ b/lua/sumi-e/init.lua
@@ -0,0 +1,51 @@
+local colors = require("sumi-e.colors")
+local config = require("sumi-e.config")
+local sumi = {}
+
+local function set_groups()
+	local groups = {
+		Normal = { fg = colors.fg, bg = colors.bg },
+		NormalFloat = { bg = colors.bg },
+		String = { fg = colors.string, italic = true },
+		Comment = { fg = colors.comment, bold = true, italic = true },
+	}
+
+	groups =
+		vim.tbl_extend("force", groups, type(config.overrides) == "function" and config.overrides() or config.overrides)
+
+	for group, parameters in pairs(groups) do
+		vim.api.nvim_set_hl(0, group, parameters)
+	end
+end
+
+--- Apply user settings.
+---@param values table
+function sumi.setup(values)
+	setmetatable(config, { __index = vim.tbl_extend("force", config.defaults, values) })
+end
+
+--- Set the colorscheme.
+function sumi.colorscheme()
+	if vim.version().minor < 8 then
+		vim.notify(
+			"Neovim 0.8+ is required for sumi-e colorscheme",
+			vim.log.levels.ERROR,
+			{ title = "Sumi-e colorscheme" }
+		)
+		return
+	end
+
+	vim.api.nvim_command("hi clear")
+	if vim.fn.exists("syntax_on") then
+		vim.api.nvim_command("syntax reset")
+	end
+
+	vim.g.VM_theme_set_by_colorscheme = true -- Required for Visual Multi
+	vim.o.termguicolors = true
+	vim.g.colors_name = "sumi-e"
+
+	colors.generate()
+	set_groups()
+end
+
+return sumi