diff options
| author | l3wdfut4pwr <l3wdfut4pwr@gmail.com> | 2026-06-14 19:29:33 +0300 |
|---|---|---|
| committer | l3wdfut4pwr <l3wdfut4pwr@gmail.com> | 2026-06-14 19:29:33 +0300 |
| commit | 56082af20a8712570edd6ed523baad4755ecd241 (patch) | |
| tree | 2366ad69de817a80403cdcbe5cdd48ad90106bd6 /config/nvim/lua | |
init
Diffstat (limited to 'config/nvim/lua')
| -rw-r--r-- | config/nvim/lua/config/autocmds.lua | 8 | ||||
| -rw-r--r-- | config/nvim/lua/config/keymaps.lua | 34 | ||||
| -rw-r--r-- | config/nvim/lua/config/lazy.lua | 52 | ||||
| -rw-r--r-- | config/nvim/lua/config/options.lua | 15 | ||||
| -rw-r--r-- | config/nvim/lua/plugins/checkmate.lua | 40 | ||||
| -rw-r--r-- | config/nvim/lua/plugins/conform.lua | 10 | ||||
| -rw-r--r-- | config/nvim/lua/plugins/core.lua | 8 | ||||
| -rw-r--r-- | config/nvim/lua/plugins/lsp.lua | 30 | ||||
| -rw-r--r-- | config/nvim/lua/plugins/lualine.lua | 73 | ||||
| -rw-r--r-- | config/nvim/lua/plugins/renderer-markdown.lua | 402 |
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, + }, + }, + }, +} |
