summaryrefslogtreecommitdiff
path: root/config/nvim/lua
diff options
context:
space:
mode:
authorl3wdfut4pwr <l3wdfut4pwr@gmail.com>2026-06-14 19:29:33 +0300
committerl3wdfut4pwr <l3wdfut4pwr@gmail.com>2026-06-14 19:29:33 +0300
commit56082af20a8712570edd6ed523baad4755ecd241 (patch)
tree2366ad69de817a80403cdcbe5cdd48ad90106bd6 /config/nvim/lua
init
Diffstat (limited to 'config/nvim/lua')
-rw-r--r--config/nvim/lua/config/autocmds.lua8
-rw-r--r--config/nvim/lua/config/keymaps.lua34
-rw-r--r--config/nvim/lua/config/lazy.lua52
-rw-r--r--config/nvim/lua/config/options.lua15
-rw-r--r--config/nvim/lua/plugins/checkmate.lua40
-rw-r--r--config/nvim/lua/plugins/conform.lua10
-rw-r--r--config/nvim/lua/plugins/core.lua8
-rw-r--r--config/nvim/lua/plugins/lsp.lua30
-rw-r--r--config/nvim/lua/plugins/lualine.lua73
-rw-r--r--config/nvim/lua/plugins/renderer-markdown.lua402
10 files changed, 672 insertions, 0 deletions
diff --git a/config/nvim/lua/config/autocmds.lua b/config/nvim/lua/config/autocmds.lua
new file mode 100644
index 000000000..4221e7586
--- /dev/null
+++ b/config/nvim/lua/config/autocmds.lua
@@ -0,0 +1,8 @@
+-- Autocmds are automatically loaded on the VeryLazy event
+-- Default autocmds that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/autocmds.lua
+--
+-- Add any additional autocmds here
+-- with `vim.api.nvim_create_autocmd`
+--
+-- Or remove existing autocmds by their group name (which is prefixed with `lazyvim_` for the defaults)
+-- e.g. vim.api.nvim_del_augroup_by_name("lazyvim_wrap_spell")
diff --git a/config/nvim/lua/config/keymaps.lua b/config/nvim/lua/config/keymaps.lua
new file mode 100644
index 000000000..7bd83b378
--- /dev/null
+++ b/config/nvim/lua/config/keymaps.lua
@@ -0,0 +1,34 @@
+vim.keymap.set("n", "<leader>c", function()
+ local line = vim.api.nvim_get_current_line()
+
+ if line:match("%[ %]") then
+ line = line:gsub("%[ %]", "[x]", 1)
+ elseif line:match("%[x%]") then
+ line = line:gsub("%[x%]", "[ ]", 1)
+ elseif line:match("^%s*%- ") then
+ line = line:gsub("^%s*%- ", "- [ ] ", 1)
+ else
+ return
+ end
+
+ vim.api.nvim_set_current_line(line)
+end, { desc = "Toggle markdown checkbox" })
+
+vim.keymap.set("n", "<leader>a", function()
+ local line = vim.api.nvim_get_current_line()
+
+ if line:match("^%s*%- %[[ x]%]") then
+ line = line:gsub("^%s*%- %[[ x]%]%s*", "", 1)
+ else
+ line = "- [ ] " .. line
+ end
+
+ vim.api.nvim_set_current_line(line)
+end, { desc = "Add / Remove markdown checkbox" })
+
+vim.keymap.set("t", "<C-\\>", "<C-\\><C-n>", { silent = true, desc = "Exit terminal mode" })
+vim.keymap.set("t", "<C-q>", "<C-\\><C-n>", { silent = true, desc = "Exit terminal mode" })
+
+vim.keymap.set("n", "<leader>d", '"_dd', { desc = "Delete line (no register)" })
+vim.keymap.set("n", "<leader>x", '"_x', { desc = "Delete char (no register)" })
+vim.keymap.set("i", "<Esc>", "<Esc>`^", { noremap = true, silent = true })
diff --git a/config/nvim/lua/config/lazy.lua b/config/nvim/lua/config/lazy.lua
new file mode 100644
index 000000000..285d95d28
--- /dev/null
+++ b/config/nvim/lua/config/lazy.lua
@@ -0,0 +1,52 @@
+local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
+if not (vim.uv or vim.loop).fs_stat(lazypath) then
+ local lazyrepo = "https://github.com/folke/lazy.nvim.git"
+ local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
+ if vim.v.shell_error ~= 0 then
+ vim.api.nvim_echo({
+ { "Failed to clone lazy.nvim:\n", "ErrorMsg" },
+ { out, "WarningMsg" },
+ { "\nPress any key to exit..." },
+ }, true, {})
+ vim.fn.getchar()
+ os.exit(1)
+ end
+end
+vim.opt.rtp:prepend(lazypath)
+
+require("lazy").setup({
+ spec = {
+ -- add LazyVim and import its plugins
+ { "LazyVim/LazyVim", import = "lazyvim.plugins" },
+ -- import/override with your plugins
+ { import = "plugins" },
+ },
+ defaults = {
+ -- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup.
+ -- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default.
+ lazy = false,
+ -- It's recommended to leave version=false for now, since a lot the plugin that support versioning,
+ -- have outdated releases, which may break your Neovim install.
+ version = false, -- always use the latest git commit
+ -- version = "*", -- try installing the latest stable version for plugins that support semver
+ },
+ checker = {
+ enabled = true, -- check for plugin updates periodically
+ notify = false, -- notify on update
+ }, -- automatically check for plugin updates
+ performance = {
+ rtp = {
+ -- disable some rtp plugins
+ disabled_plugins = {
+ "gzip",
+ -- "matchit",
+ -- "matchparen",
+ -- "netrwPlugin",
+ "tarPlugin",
+ "tohtml",
+ "tutor",
+ "zipPlugin",
+ },
+ },
+ },
+})
diff --git a/config/nvim/lua/config/options.lua b/config/nvim/lua/config/options.lua
new file mode 100644
index 000000000..39b20e38b
--- /dev/null
+++ b/config/nvim/lua/config/options.lua
@@ -0,0 +1,15 @@
+vim.opt.number = true
+vim.opt.relativenumber = false
+vim.o.foldenable = false
+vim.o.foldmethod = "manual"
+vim.o.foldexpr = ""
+vim.api.nvim_create_autocmd("VimEnter", {
+ callback = function()
+ vim.api.nvim_set_hl(0, "IncSearch", { fg = "#1e2030", bg = "#b7bdf8" })
+ vim.api.nvim_create_autocmd("TextYankPost", {
+ callback = function()
+ vim.highlight.on_yank({ higroup = "Highlightedyank", timeout = 200 })
+ end,
+ })
+ end,
+})
diff --git a/config/nvim/lua/plugins/checkmate.lua b/config/nvim/lua/plugins/checkmate.lua
new file mode 100644
index 000000000..8cdebda4b
--- /dev/null
+++ b/config/nvim/lua/plugins/checkmate.lua
@@ -0,0 +1,40 @@
+return {
+ "bngarren/checkmate.nvim",
+ ft = { "markdown", "md" },
+ opts = {
+ files = { "*.md" },
+ default_list_marker = "-",
+ todo_states = {
+ unchecked = { marker = "□", order = 1 },
+ checked = { marker = "✔", order = 2 },
+ },
+ archive = {
+ heading = { level = 2, title = "Archive" },
+ newest_first = true,
+ parent_spacing = 0,
+ },
+ enter_insert_after_new = true,
+ use_metadata_keymaps = true,
+ smart_toggle = {
+ enabled = true,
+ include_cycle = false,
+ check_down = "direct_children",
+ uncheck_down = "none",
+ check_up = "direct_children",
+ uncheck_up = "direct_children",
+ },
+ show_todo_count = true,
+ todo_count_position = "eol",
+ todo_count_recursive = true,
+ },
+ keys = {
+ { "<leader>X", "<cmd>Checkmate toggle<CR>", desc = "Toggle todo item", mode = "n" },
+ { "<leader>C", "<cmd>Checkmate check<CR>", desc = "Check todo item", mode = "n" },
+ { "<leader>U", "<cmd>Checkmate uncheck<CR>", desc = "Uncheck todo item", mode = "n" },
+ { "<leader>N", "<cmd>Checkmate create<CR>", desc = "Create todo item", mode = "n" },
+ { "<leader>A", "<cmd>Checkmate archive<CR>", desc = "Archive completed items", mode = "n" },
+
+ { "<leader>R", "<cmd>Checkmate remove<CR>", desc = "Remove todo marker", mode = "n" },
+ { "<leader>F", "<cmd>Checkmate select_todo<CR>", desc = "Select todo", mode = "n" },
+ },
+}
diff --git a/config/nvim/lua/plugins/conform.lua b/config/nvim/lua/plugins/conform.lua
new file mode 100644
index 000000000..32ccedafe
--- /dev/null
+++ b/config/nvim/lua/plugins/conform.lua
@@ -0,0 +1,10 @@
+return {
+ "stevearc/conform.nvim",
+ opts = {
+ formatters_by_ft = {
+ python = { "ruff_organize_imports", "ruff_format" },
+
+ markdown = {},
+ },
+ },
+}
diff --git a/config/nvim/lua/plugins/core.lua b/config/nvim/lua/plugins/core.lua
new file mode 100644
index 000000000..84bb0c8f4
--- /dev/null
+++ b/config/nvim/lua/plugins/core.lua
@@ -0,0 +1,8 @@
+return {
+ {
+ "LazyVim/LazyVim",
+ opts = {
+ colorscheme = "catppuccin-macchiato",
+ },
+ },
+}
diff --git a/config/nvim/lua/plugins/lsp.lua b/config/nvim/lua/plugins/lsp.lua
new file mode 100644
index 000000000..3da2aabf2
--- /dev/null
+++ b/config/nvim/lua/plugins/lsp.lua
@@ -0,0 +1,30 @@
+return {
+ {
+ "neovim/nvim-lspconfig",
+ opts = {
+ setup = {
+ tailwindcss = function(_, opts)
+ opts.settings = {
+ tailwindCSS = {
+ validate = true,
+ lint = {
+ cssConflict = "ignore",
+ invalidApply = "error",
+ invalidConfigPath = "error",
+ invalidScreen = "error",
+ invalidTailwindDirective = "error",
+ invalidVariant = "error",
+ recommendedVariantOrder = "ignore",
+ suggestCanonicalClasses = "ignore",
+ },
+ },
+ }
+
+ require("lspconfig").tailwindcss.setup(opts)
+
+ return true
+ end,
+ },
+ },
+ },
+}
diff --git a/config/nvim/lua/plugins/lualine.lua b/config/nvim/lua/plugins/lualine.lua
new file mode 100644
index 000000000..a07bbac9a
--- /dev/null
+++ b/config/nvim/lua/plugins/lualine.lua
@@ -0,0 +1,73 @@
+return {
+ {
+ "nvim-lualine/lualine.nvim",
+ event = "VeryLazy",
+ opts = function()
+ local icons = LazyVim.config.icons
+
+ return {
+ options = {
+ theme = "auto",
+ globalstatus = vim.o.laststatus == 3,
+ disabled_filetypes = {
+ statusline = { "dashboard", "alpha", "ministarter", "snacks_dashboard" },
+ },
+ },
+ sections = {
+ lualine_a = { "mode" },
+ lualine_b = { "branch" },
+
+ lualine_c = {
+ LazyVim.lualine.root_dir(),
+ {
+ "diagnostics",
+ symbols = {
+ error = icons.diagnostics.Error,
+ warn = icons.diagnostics.Warn,
+ info = icons.diagnostics.Info,
+ hint = icons.diagnostics.Hint,
+ },
+ },
+ { "filetype", icon_only = true, separator = "", padding = { left = 1, right = 0 } },
+ { LazyVim.lualine.pretty_path() },
+ },
+
+ lualine_x = {
+ {
+ "diff",
+ symbols = {
+ added = icons.git.added,
+ modified = icons.git.modified,
+ removed = icons.git.removed,
+ },
+ source = function()
+ local gitsigns = vim.b.gitsigns_status_dict
+ if gitsigns then
+ return {
+ added = gitsigns.added,
+ modified = gitsigns.changed,
+ removed = gitsigns.removed,
+ }
+ end
+ end,
+ },
+ },
+
+ lualine_y = {},
+
+ lualine_z = {
+ {
+ function()
+ local l = vim.fn.line(".")
+ local c = vim.fn.col(".")
+ return string.format("%d:%d", l, c)
+ end,
+ padding = { left = 1, right = 1 },
+ },
+ },
+ },
+ extensions = { "neo-tree", "lazy", "fzf" },
+ }
+ end,
+ },
+}
diff --git a/config/nvim/lua/plugins/renderer-markdown.lua b/config/nvim/lua/plugins/renderer-markdown.lua
new file mode 100644
index 000000000..160556a35
--- /dev/null
+++ b/config/nvim/lua/plugins/renderer-markdown.lua
@@ -0,0 +1,402 @@
+return {
+ {
+ "MeanderingProgrammer/render-markdown.nvim",
+ ft = { "markdown" },
+ cmd = { "RenderMarkdown" },
+ dependencies = {
+ "nvim-treesitter/nvim-treesitter",
+ "nvim-mini/mini.nvim",
+ },
+ opts = {
+ file_types = { "markdown" },
+
+ sign = {
+ enabled = true,
+ priority = nil,
+ highlight = "RenderMarkdownSign",
+ },
+
+ heading = {
+ enabled = true,
+ render_modes = false,
+ atx = true,
+ setext = true,
+ sign = true,
+ icons = { "󰲡 ", "󰲣 ", "󰲥 ", "󰲧 ", "󰲩 ", "󰲫 " },
+ position = "overlay",
+ signs = { "󰫎 " },
+ width = "full",
+ left_margin = 0,
+ left_pad = 0,
+ right_pad = 0,
+ min_width = 0,
+ border = true,
+ border_virtual = true,
+ border_prefix = false,
+ above = "▄",
+ below = "▀",
+ backgrounds = {
+ "RenderMarkdownH1Bg",
+ "RenderMarkdownH2Bg",
+ "RenderMarkdownH3Bg",
+ "RenderMarkdownH4Bg",
+ "RenderMarkdownH5Bg",
+ "RenderMarkdownH6Bg",
+ },
+ foregrounds = {
+ "RenderMarkdownH1",
+ "RenderMarkdownH2",
+ "RenderMarkdownH3",
+ "RenderMarkdownH4",
+ "RenderMarkdownH5",
+ "RenderMarkdownH6",
+ },
+ custom = {},
+ },
+
+ code = {
+ enabled = true,
+ render_modes = false,
+ sign = true,
+ conceal_delimiters = true,
+ language = true,
+ position = "left",
+ language_icon = true,
+ language_name = true,
+ language_info = true,
+ language_pad = 2,
+ disable = {},
+ disable_background = { "diff" },
+ width = "block",
+ left_margin = 0,
+ left_pad = 2,
+ right_pad = 4,
+ min_width = 45,
+ border = "thick",
+ language_border = " ",
+ language_left = "",
+ language_right = "",
+ above = "▄",
+ below = "▀",
+ inline = true,
+ inline_left = "",
+ inline_right = "",
+ inline_pad = 0,
+ priority = 140,
+ highlight = "RenderMarkdownCode",
+ highlight_info = "RenderMarkdownCodeInfo",
+ highlight_language = nil,
+ highlight_border = "RenderMarkdownCodeBorder",
+ highlight_fallback = "RenderMarkdownCodeFallback",
+ highlight_inline = "RenderMarkdownCodeInline",
+ highlight_inline_left = nil,
+ highlight_inline_right = nil,
+ style = "language",
+ },
+
+ dash = {
+ enabled = true,
+ render_modes = false,
+ icon = "─",
+ width = "full",
+ left_margin = 0,
+ priority = nil,
+ highlight = "RenderMarkdownDash",
+ },
+
+ bullet = {
+ enabled = true,
+ render_modes = false,
+ icons = { "●", "○", "◆", "◇" },
+ ordered_icons = function(ctx)
+ local value = vim.trim(ctx.value)
+ local index = tonumber(value:sub(1, #value - 1))
+ return ("%d."):format(index > 1 and index or ctx.index)
+ end,
+ left_pad = 0,
+ right_pad = 0,
+ highlight = "RenderMarkdownBullet",
+ },
+
+ checkbox = {
+ enabled = true,
+ render_modes = false,
+ bullet = false,
+ left_pad = 0,
+ right_pad = 1,
+ unchecked = {
+ icon = "󰄱 ",
+ highlight = "RenderMarkdownUnchecked",
+ scope_highlight = nil,
+ },
+ checked = {
+ icon = "󰱒 ",
+ highlight = "RenderMarkdownChecked",
+ scope_highlight = nil,
+ },
+ },
+
+ quote = {
+ enabled = true,
+ render_modes = false,
+ icon = "▋",
+ repeat_linebreak = true,
+ highlight = {
+ "RenderMarkdownQuote1",
+ "RenderMarkdownQuote2",
+ "RenderMarkdownQuote3",
+ "RenderMarkdownQuote4",
+ "RenderMarkdownQuote5",
+ "RenderMarkdownQuote6",
+ },
+ },
+
+ pipe_table = {
+ enabled = true,
+ render_modes = false,
+ preset = "round",
+ cell = "padded",
+ cell_offset = function()
+ return 0
+ end,
+ padding = 1,
+ min_width = 12,
+ border = {
+ "┌",
+ "┬",
+ "┐",
+ "├",
+ "┼",
+ "┤",
+ "└",
+ "┴",
+ "┘",
+ "│",
+ "─",
+ },
+ border_enabled = true,
+ alignment_indicator = "┅",
+ },
+
+ callout = {
+ note = {
+ raw = "[!NOTE]",
+ rendered = "󰋽 Note",
+ highlight = "RenderMarkdownInfo",
+ category = "github",
+ },
+ tip = {
+ raw = "[!TIP]",
+ rendered = "󰌶 Tip",
+ highlight = "RenderMarkdownSuccess",
+ category = "github",
+ },
+ important = {
+ raw = "[!IMPORTANT]",
+ rendered = "󰅾 Important",
+ highlight = "RenderMarkdownHint",
+ category = "github",
+ },
+ warning = {
+ raw = "[!WARNING]",
+ rendered = "󰀪 Warning",
+ highlight = "RenderMarkdownWarn",
+ category = "github",
+ },
+ caution = {
+ raw = "[!CAUTION]",
+ rendered = "󰳦 Caution",
+ highlight = "RenderMarkdownError",
+ category = "github",
+ },
+
+ abstract = {
+ raw = "[!ABSTRACT]",
+ rendered = "󰨸 Abstract",
+ highlight = "RenderMarkdownInfo",
+ category = "obsidian",
+ },
+ summary = {
+ raw = "[!SUMMARY]",
+ rendered = "󰨸 Summary",
+ highlight = "RenderMarkdownInfo",
+ category = "obsidian",
+ },
+ tldr = {
+ raw = "[!TLDR]",
+ rendered = "󰨸 Tldr",
+ highlight = "RenderMarkdownInfo",
+ category = "obsidian",
+ },
+ info = {
+ raw = "[!INFO]",
+ rendered = "󰋽 Info",
+ highlight = "RenderMarkdownInfo",
+ category = "obsidian",
+ },
+ todo = {
+ raw = "[!TODO]",
+ rendered = "󰗡 Todo",
+ highlight = "RenderMarkdownInfo",
+ category = "obsidian",
+ },
+ hint = {
+ raw = "[!HINT]",
+ rendered = "󰌶 Hint",
+ highlight = "RenderMarkdownSuccess",
+ category = "obsidian",
+ },
+ success = {
+ raw = "[!SUCCESS]",
+ rendered = "󰄬 Success",
+ highlight = "RenderMarkdownSuccess",
+ category = "obsidian",
+ },
+ check = {
+ raw = "[!CHECK]",
+ rendered = "󰄬 Check",
+ highlight = "RenderMarkdownSuccess",
+ category = "obsidian",
+ },
+ done = {
+ raw = "[!DONE]",
+ rendered = "󰄬 Done",
+ highlight = "RenderMarkdownSuccess",
+ category = "obsidian",
+ },
+ question = {
+ raw = "[!QUESTION]",
+ rendered = "󰘥 Question",
+ highlight = "RenderMarkdownWarn",
+ category = "obsidian",
+ },
+ help = {
+ raw = "[!HELP]",
+ rendered = "󰘥 Help",
+ highlight = "RenderMarkdownWarn",
+ category = "obsidian",
+ },
+ faq = {
+ raw = "[!FAQ]",
+ rendered = "󰘥 Faq",
+ highlight = "RenderMarkdownWarn",
+ category = "obsidian",
+ },
+ attention = {
+ raw = "[!ATTENTION]",
+ rendered = "󰀪 Attention",
+ highlight = "RenderMarkdownWarn",
+ category = "obsidian",
+ },
+ failure = {
+ raw = "[!FAILURE]",
+ rendered = "󰅖 Failure",
+ highlight = "RenderMarkdownError",
+ category = "obsidian",
+ },
+ fail = {
+ raw = "[!FAIL]",
+ rendered = "󰅖 Fail",
+ highlight = "RenderMarkdownError",
+ category = "obsidian",
+ },
+ missing = {
+ raw = "[!MISSING]",
+ rendered = "󰅖 Missing",
+ highlight = "RenderMarkdownError",
+ category = "obsidian",
+ },
+ danger = {
+ raw = "[!DANGER]",
+ rendered = "󱐌 Danger",
+ highlight = "RenderMarkdownError",
+ category = "obsidian",
+ },
+ error = {
+ raw = "[!ERROR]",
+ rendered = "󱐌 Error",
+ highlight = "RenderMarkdownError",
+ category = "obsidian",
+ },
+ bug = {
+ raw = "[!BUG]",
+ rendered = "󰨰 Bug",
+ highlight = "RenderMarkdownError",
+ category = "obsidian",
+ },
+ example = {
+ raw = "[!EXAMPLE]",
+ rendered = "󰉹 Example",
+ highlight = "RenderMarkdownHint",
+ category = "obsidian",
+ },
+ quote = {
+ raw = "[!QUOTE]",
+ rendered = "󱆨 Quote",
+ highlight = "RenderMarkdownQuote",
+ category = "obsidian",
+ },
+ cite = {
+ raw = "[!CITE]",
+ rendered = "󱆨 Cite",
+ highlight = "RenderMarkdownQuote",
+ category = "obsidian",
+ },
+ },
+
+ link = {
+ enabled = true,
+ render_modes = false,
+ footnote = {
+ enabled = true,
+ icon = "󰯔 ",
+ body = function(ctx)
+ return ctx.text
+ end,
+ superscript = true,
+ prefix = "",
+ suffix = "",
+ },
+ image = "󰥶 ",
+ image_custom = true,
+ email = "󰀓 ",
+ hyperlink = "󰌹 ",
+ highlight = "RenderMarkdownLink",
+ highlight_title = "RenderMarkdownLinkTitle",
+ wiki = {
+ enabled = true,
+ icon = "󱗖 ",
+ body = function()
+ return nil
+ end,
+ highlight = "RenderMarkdownWikiLink",
+ scope_highlight = nil,
+ },
+ custom = {
+ web = { pattern = "^http", icon = "󰖟 " },
+ github = { pattern = "github%.com", icon = "󰊤 " },
+ python = { pattern = "%.py$", icon = "󰌠 " },
+ },
+ },
+
+ indent = {
+ enabled = true,
+ render_modes = false,
+ per_level = 2,
+ skip_level = 1,
+ skip_heading = false,
+ icon = "▎",
+ priority = 0,
+ highlight = "RenderMarkdownIndent",
+ },
+
+ paragraph = {
+ enabled = true,
+ render_modes = false,
+ left_margin = 0,
+ indent = 0,
+ min_width = 0,
+ },
+ },
+ },
+}