From ed3cdde97089d48886e081883bab00d234ab2d45 Mon Sep 17 00:00:00 2001 From: doryan Date: Sat, 3 Aug 2024 15:57:18 +0400 Subject: [PATCH] feat(nvim): add config --- nvim/.stylua.toml | 6 ++ nvim/init.lua | 47 ++++++++++ nvim/lazy-lock.json | 46 ++++++++++ nvim/lua/chadrc.lua | 16 ++++ nvim/lua/configs/conform.lua | 15 ++++ nvim/lua/configs/dap.lua | 57 ++++++++++++ nvim/lua/configs/highlights.lua | 19 ++++ nvim/lua/configs/lazy.lua | 47 ++++++++++ nvim/lua/configs/lsp.lua | 9 ++ nvim/lua/configs/lspconfig.lua | 24 +++++ nvim/lua/configs/nvim-ts-autotag.lua | 18 ++++ nvim/lua/mappings.lua | 42 +++++++++ nvim/lua/options.lua | 6 ++ nvim/lua/plugins/init.lua | 126 +++++++++++++++++++++++++++ 14 files changed, 478 insertions(+) create mode 100644 nvim/.stylua.toml create mode 100644 nvim/init.lua create mode 100644 nvim/lazy-lock.json create mode 100644 nvim/lua/chadrc.lua create mode 100644 nvim/lua/configs/conform.lua create mode 100644 nvim/lua/configs/dap.lua create mode 100644 nvim/lua/configs/highlights.lua create mode 100644 nvim/lua/configs/lazy.lua create mode 100644 nvim/lua/configs/lsp.lua create mode 100644 nvim/lua/configs/lspconfig.lua create mode 100644 nvim/lua/configs/nvim-ts-autotag.lua create mode 100644 nvim/lua/mappings.lua create mode 100644 nvim/lua/options.lua create mode 100644 nvim/lua/plugins/init.lua diff --git a/nvim/.stylua.toml b/nvim/.stylua.toml new file mode 100644 index 0000000..ecb6dca --- /dev/null +++ b/nvim/.stylua.toml @@ -0,0 +1,6 @@ +column_width = 120 +line_endings = "Unix" +indent_type = "Spaces" +indent_width = 2 +quote_style = "AutoPreferDouble" +call_parentheses = "None" diff --git a/nvim/init.lua b/nvim/init.lua new file mode 100644 index 0000000..e247d47 --- /dev/null +++ b/nvim/init.lua @@ -0,0 +1,47 @@ +vim.g.base46_cache = vim.fn.stdpath "data" .. "/nvchad/base46/" +vim.g.mapleader = " " + +-- bootstrap lazy and all plugins +local lazypath = vim.fn.stdpath "data" .. "/lazy/lazy.nvim" + +if not vim.loop.fs_stat(lazypath) then + local repo = "https://github.com/folke/lazy.nvim.git" + vim.fn.system { "git", "clone", "--filter=blob:none", repo, "--branch=stable", lazypath } +end + +vim.opt.rtp:prepend(lazypath) + +local lazy_config = require "configs.lazy" + +-- load plugins +require("lazy").setup({ + { + "NvChad/NvChad", + lazy = false, + branch = "v2.5", + import = "nvchad.plugins", + config = function() + require "options" + end, + }, + + { import = "plugins" }, +}, lazy_config) + +-- load theme +dofile(vim.g.base46_cache .. "defaults") +dofile(vim.g.base46_cache .. "statusline") + +require "nvchad.autocmds" + +require "configs.dap" +require "configs.highlights" +require "configs.lsp" +require "configs.nvim-ts-autotag" + +vim.schedule(function() + require "mappings" +end) + +local neogit = require('neogit') +neogit.setup {} diff --git a/nvim/lazy-lock.json b/nvim/lazy-lock.json new file mode 100644 index 0000000..6c30864 --- /dev/null +++ b/nvim/lazy-lock.json @@ -0,0 +1,46 @@ +{ + "LuaSnip": { "branch": "master", "commit": "7552e6504ee95a9c8cfc6db53e389122ded46cd4" }, + "NvChad": { "branch": "v2.5", "commit": "c40c5116c4c091f4da620abcd9c58bd5ee4b8497" }, + "base46": { "branch": "v2.5", "commit": "b8ae372d62f2027e005477b834e24c06313e76d8" }, + "cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" }, + "cmp-nvim-lsp": { "branch": "main", "commit": "39e2eda76828d88b773cc27a3f61d2ad782c922d" }, + "cmp-nvim-lua": { "branch": "main", "commit": "f12408bdb54c39c23e67cab726264c10db33ada8" }, + "cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" }, + "cmp_luasnip": { "branch": "master", "commit": "05a9ab28b53f71d1aece421ef32fee2cb857a843" }, + "conform.nvim": { "branch": "master", "commit": "25d48271e3d4404ba017cb92a37d3a681c1ad149" }, + "diffview.nvim": { "branch": "main", "commit": "4516612fe98ff56ae0415a259ff6361a89419b0a" }, + "friendly-snippets": { "branch": "main", "commit": "00ebcaa159e817150bd83bfe2d51fa3b3377d5c4" }, + "fzf-lua": { "branch": "main", "commit": "c59e076dddae6fa85f8a97da8ff5304014ba5768" }, + "gitsigns.nvim": { "branch": "main", "commit": "0ed466953fe5885166e0d60799172a8b1f752d16" }, + "indent-blankline.nvim": { "branch": "master", "commit": "65e20ab94a26d0e14acac5049b8641336819dfc7" }, + "lazy.nvim": { "branch": "main", "commit": "077102c5bfc578693f12377846d427f49bc50076" }, + "mason.nvim": { "branch": "main", "commit": "e2f7f9044ec30067bc11800a9e266664b88cda22" }, + "neodev.nvim": { "branch": "main", "commit": "46aa467dca16cf3dfe27098042402066d2ae242d" }, + "neogit": { "branch": "master", "commit": "2b74a777b963dfdeeabfabf84d5ba611666adab4" }, + "noice.nvim": { "branch": "main", "commit": "448bb9c524a7601035449210838e374a30153172" }, + "nui.nvim": { "branch": "main", "commit": "61574ce6e60c815b0a0c4b5655b8486ba58089a1" }, + "nvim-autopairs": { "branch": "master", "commit": "e38c5d837e755ce186ae51d2c48e1b387c4425c6" }, + "nvim-cmp": { "branch": "main", "commit": "ae644feb7b67bf1ce4260c231d1d4300b19c6f30" }, + "nvim-colorizer.lua": { "branch": "master", "commit": "194ec600488f7c7229668d0e80bd197f3a2b84ff" }, + "nvim-dap": { "branch": "master", "commit": "dcc85d12d6e2c18c5fa0f9a304d9f5e767e1401a" }, + "nvim-dap-ui": { "branch": "master", "commit": "a5606bc5958db86f8d92803bea7400ee26a8d7e4" }, + "nvim-dap-vscode-js": { "branch": "main", "commit": "03bd29672d7fab5e515fc8469b7d07cc5994bbf6" }, + "nvim-lspconfig": { "branch": "master", "commit": "e6528f4613c8db2e04be908eb2b5886d63f62a98" }, + "nvim-nio": { "branch": "master", "commit": "a428f309119086dc78dd4b19306d2d67be884eee" }, + "nvim-tree.lua": { "branch": "master", "commit": "48d0e82f9434691cc50d970898142a8c084a49d6" }, + "nvim-treesitter": { "branch": "master", "commit": "09bad640e4507885fa0e7035348c7854c531b3d6" }, + "nvim-ts-autotag": { "branch": "main", "commit": "dc5e1687ab76ee02e0f11c5ce137f530b36e98b3" }, + "nvim-ufo": { "branch": "main", "commit": "4cc3ba9303c0708b81fd681786a4835fd31518ac" }, + "nvim-web-devicons": { "branch": "master", "commit": "5be6c4e685618b99c3210a69375b38a1202369b4" }, + "plenary.nvim": { "branch": "master", "commit": "a3e3bc82a3f95c5ed0d7201546d5d2c19b20d683" }, + "promise-async": { "branch": "main", "commit": "28c1d5a295eb5310afa2523d4ae9aa41ec5a9de2" }, + "rust.vim": { "branch": "master", "commit": "889b9a7515db477f4cb6808bef1769e53493c578" }, + "rustaceanvim": { "branch": "master", "commit": "047f9c9d8cd2861745eb9de6c1570ee0875aa795" }, + "tailwind-tools.nvim": { "branch": "master", "commit": "7e280a515389536d3d020986cac68686ce7b5a64" }, + "telescope.nvim": { "branch": "master", "commit": "3b1600d0fd5172ad9fae00987362ca0ef3d8895d" }, + "ts-comments.nvim": { "branch": "main", "commit": "98d7d4dec0af1312d38e288f800bbf6ff562b6ab" }, + "ui": { "branch": "v2.5", "commit": "967d8b27811f3b2a2ac3fd2de27e5a4992dc0770" }, + "vim-react-snippets": { "branch": "main", "commit": "755e288bd0db1052be4195fcc82a25e28b609e0b" }, + "vscode-js-debug": { "branch": "main", "commit": "14b430024ccadd5e573228214a39fac7781bd759" }, + "which-key.nvim": { "branch": "main", "commit": "6c1584eb76b55629702716995cca4ae2798a9cca" } +} diff --git a/nvim/lua/chadrc.lua b/nvim/lua/chadrc.lua new file mode 100644 index 0000000..2653890 --- /dev/null +++ b/nvim/lua/chadrc.lua @@ -0,0 +1,16 @@ +-- This file needs to have same structure as nvconfig.lua +-- https://github.com/NvChad/ui/blob/v2.5/lua/nvconfig.lua + +---@type ChadrcConfig +local M = {} + +M.base46 = { + theme = "catppuccin_latte", + + -- hl_override = { + -- Comment = { italic = true }, + -- ["@comment"] = { italic = true }, + -- }, +} + +return M diff --git a/nvim/lua/configs/conform.lua b/nvim/lua/configs/conform.lua new file mode 100644 index 0000000..a000447 --- /dev/null +++ b/nvim/lua/configs/conform.lua @@ -0,0 +1,15 @@ +local options = { + formatters_by_ft = { + lua = { "stylua" }, + -- css = { "prettier" }, + -- html = { "prettier" }, + }, + + -- format_on_save = { + -- -- These options will be passed to conform.format() + -- timeout_ms = 500, + -- lsp_fallback = true, + -- }, +} + +require("conform").setup(options) diff --git a/nvim/lua/configs/dap.lua b/nvim/lua/configs/dap.lua new file mode 100644 index 0000000..73397c9 --- /dev/null +++ b/nvim/lua/configs/dap.lua @@ -0,0 +1,57 @@ +local dap = require("dap") +local DEBUGGER_PATH = vim.fn.stdpath('data') .. "/lazy/vscode-js-debug" + +require("dap-vscode-js").setup({ + -- node_path = "node", -- Path of node executable. Defaults to $NODE_PATH, and then "node" + debugger_path = DEBUGGER_PATH, -- Path to vscode-js-debug installation. + -- debugger_cmd = { "js-debug-adapter" }, -- Command to use to launch the debug server. Takes precedence over `node_path` and `debugger_path`. + adapters = { 'firefox', 'pwa-node', 'pwa-chrome', 'pwa-msedge', 'node-terminal', 'pwa-extensionHost' }, -- which adapters to register in nvim-dap + -- log_file_path = "(stdpath cache)/dap_vscode_js.log" -- Path for file logging + -- log_file_level = false -- Logging level for output to file. Set to false to disable file logging. + -- log_console_level = vim.log.levels.ERROR -- Logging level for output to console. Set to false to disable console output. +}) + +local js_langs = { + "javascript", + "typescript", + "javascriptreact", + "typescriptreact", +} + +for _, lang in ipairs(js_langs) do + + dap.configurations[lang] = { + { + name = 'Next.js: debug server-side', + type = "pwa-node", + request = "launch", + skipFiles = {"/**"}, + cwd = "${workspaceFolder}", + runtimeExecutable = "npm", + runtimeArgs = {"run-script", "dev"}, + }, + { + name = 'Next.js: debug client-side', + type = 'pwa-chrome', + request = 'launch', + url = 'http://localhost:3000', + webRoot = '${workspaceFolder}', + sourceMaps = true, -- https://github.com/vercel/next.js/issues/56702#issuecomment-1913443304 + sourceMapPathOverrides = { + ['webpack://_N_E/*'] = '${webRoot}/*', + }, + }, + { + name = "Next.js: debug full stack", + type = "node-terminal", + request = "launch", + command = "npm run dev", + serverReadyAction = { + pattern = "- Local:.+(https?://.+)", + uriFormat = "%s", + action = "debugWithChrome" + } + } + } + +end; diff --git a/nvim/lua/configs/highlights.lua b/nvim/lua/configs/highlights.lua new file mode 100644 index 0000000..f0e6992 --- /dev/null +++ b/nvim/lua/configs/highlights.lua @@ -0,0 +1,19 @@ +require "nvim-treesitter.configs".setup { + highlight = { + enable = true, + }, + playground = { + enable = true, + } +} + +-- require 'colorizer'.setup { +-- user_default_options = { names = false }, +-- filetypes = { +-- css = { +-- rgb_fn = true; +-- names = true; +-- }; -- Enable parsing rgb(...) functions in css. +-- html = { names = false; } -- Disable parsing "names" like Blue or Gray +-- }, +-- } diff --git a/nvim/lua/configs/lazy.lua b/nvim/lua/configs/lazy.lua new file mode 100644 index 0000000..cd170bd --- /dev/null +++ b/nvim/lua/configs/lazy.lua @@ -0,0 +1,47 @@ +return { + defaults = { lazy = true }, + install = { colorscheme = { "nvchad" } }, + + ui = { + icons = { + ft = "", + lazy = "󰂠 ", + loaded = "", + not_loaded = "", + }, + }, + + performance = { + rtp = { + disabled_plugins = { + "2html_plugin", + "tohtml", + "getscript", + "getscriptPlugin", + "gzip", + "logipat", + "netrw", + "netrwPlugin", + "netrwSettings", + "netrwFileHandlers", + "matchit", + "tar", + "tarPlugin", + "rrhelper", + "spellfile_plugin", + "vimball", + "vimballPlugin", + "zip", + "zipPlugin", + "tutor", + "rplugin", + "syntax", + "synmenu", + "optwin", + "compiler", + "bugreport", + "ftplugin", + }, + }, + }, +} diff --git a/nvim/lua/configs/lsp.lua b/nvim/lua/configs/lsp.lua new file mode 100644 index 0000000..23c0c10 --- /dev/null +++ b/nvim/lua/configs/lsp.lua @@ -0,0 +1,9 @@ +vim.api.nvim_create_autocmd("LspAttach", { + callback = function(args) + local bufnr = args.buf + local client = vim.lsp.get_client_by_id(args.data.client_id) + + client.server_capabilities.semanticTokensProvider = nil + + end, +}) diff --git a/nvim/lua/configs/lspconfig.lua b/nvim/lua/configs/lspconfig.lua new file mode 100644 index 0000000..935311d --- /dev/null +++ b/nvim/lua/configs/lspconfig.lua @@ -0,0 +1,24 @@ +-- load defaults i.e lua_lsp +require("nvchad.configs.lspconfig").defaults() + +local lspconfig = require "lspconfig" + +-- EXAMPLE +local servers = { "html", "cssls" } +local nvlsp = require "nvchad.configs.lspconfig" + +-- lsps with default config +for _, lsp in ipairs(servers) do + lspconfig[lsp].setup { + on_attach = nvlsp.on_attach, + on_init = nvlsp.on_init, + capabilities = nvlsp.capabilities, + } +end + +-- configuring single server, example: typescript +-- lspconfig.tsserver.setup { +-- on_attach = nvlsp.on_attach, +-- on_init = nvlsp.on_init, +-- capabilities = nvlsp.capabilities, +-- } diff --git a/nvim/lua/configs/nvim-ts-autotag.lua b/nvim/lua/configs/nvim-ts-autotag.lua new file mode 100644 index 0000000..636f20e --- /dev/null +++ b/nvim/lua/configs/nvim-ts-autotag.lua @@ -0,0 +1,18 @@ +require("vim-react-snippets").lazy_load() + +require('nvim-ts-autotag').setup({ + opts = { + -- Defaults + enable_close = true, -- Auto close tags + enable_rename = true, -- Auto rename pairs of tags + enable_close_on_slash = false -- Auto close on trailing RustLsp moveItem up") +map("n", "m,", "RustLsp moveItem down") +map("n", "rs", "RustLsp run") +map("n", "hh", "RustLsp hover actions") +map("n", "ca", "RustLsp codeAction") +map("n", "", "w!") +map("i", "", "w!") + +map("n", "sn", "split", { desc = "Horizontal split" }) +map("n", "sv", "vsplit", { desc = "Vertical split" }) + +map("n", "dr", " DapContinue ", { desc = "Continue debug" } ) + +map("n", "do", function() + require("dapui").open() +end, { desc = "Open DAP ui" }) +map("n", "dc", function() + require("dapui").close() +end, { desc = "Start or continue debug" }) +map("n", "dt", function() + require("dapui").toggle() +end, { desc = "Toggle DAP ui" }) + +map("n", "", "DapContinue", { desc = "Start or continue debug" }) + +map("n", "+", "vertical resize +5", { desc = "Increase vertical buffer" }) -- make the window biger vertically +map("n", "-", "vertical resize -5", { desc = "Decrease vertical buffer" }) -- make the window smaller vertically +map("n", "_", "horizontal resize +2", { desc = "Increase horizontal buffer" }) -- make the window bigger horizontally by pressing shift and = +map("n", "=", "horizontal resize -2", { desc = "Decrease horizontal buffer" }) -- make the window smaller horizontally by pressing shift and - + +map('n', 'zR', ufo.openAllFolds) +map('n', 'zM', ufo.closeAllFolds) +-- map({ "n", "i", "v" }, "", " w ")-- map({ "n", "i", "v" }, "", " w ") diff --git a/nvim/lua/options.lua b/nvim/lua/options.lua new file mode 100644 index 0000000..738f20b --- /dev/null +++ b/nvim/lua/options.lua @@ -0,0 +1,6 @@ +require "nvchad.options" + +-- add yours here! + +-- local o = vim.o +-- o.cursorlineopt ='both' -- to enable cursorline! diff --git a/nvim/lua/plugins/init.lua b/nvim/lua/plugins/init.lua new file mode 100644 index 0000000..2e05bdb --- /dev/null +++ b/nvim/lua/plugins/init.lua @@ -0,0 +1,126 @@ +return { + { + "stevearc/conform.nvim", + -- event = 'BufWritePre', -- uncomment for format on save + opts = require "configs.conform", + }, + + -- These are some examples, uncomment them if you want to see them work! + { + "neovim/nvim-lspconfig", + config = function() + require "configs.lspconfig" + end, + }, + { + "williamboman/mason.nvim", + opts = { + ensure_installed = { + "eslint-lsp", + "js-debug-adapter", + "prettier", + "typescript-language-server", + } + } + }, + { + "luckasRanarison/tailwind-tools.nvim", + dependencies = { "nvim-treesitter/nvim-treesitter" }, + opts = {} + }, + { + 'kevinhwang91/nvim-ufo', + dependencies = { 'kevinhwang91/promise-async' }, + }, + { + 'microsoft/vscode-js-debug', + lazy = false, + build = "npm install --legacy-peer-deps && npx gulp vsDebugServerBundle && mv dist out" + }, + { + "mfussenegger/nvim-dap", + event = "VeryLazy", + }, + { + "rcarriga/nvim-dap-ui", + dependencies = { + "nvim-neotest/nvim-nio", + "mfussenegger/nvim-dap", + }, + event = "VeryLazy", + config = function() + require("dapui").setup() + end + }, + { + "microsoft/vscode-js-debug", + opt = true, + run = "npm install --legacy-peer-deps && npx gulp vsDebugServerBundle && mv dist out" + }, + { + "NvChad/nvim-colorizer.lua" + }, + { + "folke/neodev.nvim", opts = {} + }, + { + "mxsdev/nvim-dap-vscode-js" + }, + { + "mlaursen/vim-react-snippets", + }, + { + "windwp/nvim-ts-autotag", + }, + { + "folke/ts-comments.nvim", + opts = {}, + event = "VeryLazy", + enabled = vim.fn.has("nvim-0.10.0") == 1, + }, + { + 'windwp/nvim-autopairs', + event = "InsertEnter", + config = true + -- use opts = {} for passing setup options + -- this is equalent to setup({}) function + }, + { + 'nvim-treesitter/nvim-treesitter', + }, + { + "rust-lang/rust.vim", + ft = "rust", + init = function () + vim.g.rustfmt_autosave = 1 + end + }, + { + 'mrcjkb/rustaceanvim', + version = '^4', -- Recommended + ft = "rust", + lazy = false, -- This plugin is already lazy + }, + { + "NeogitOrg/neogit", + dependencies = { + "nvim-lua/plenary.nvim", -- required + "sindrets/diffview.nvim", -- optional - Diff integration + + -- Only one of these is needed, not both. + "nvim-telescope/telescope.nvim", -- optional + "ibhagwan/fzf-lua", -- optional + }, + config = true + }, + { + "folke/noice.nvim", + event = "VeryLazy", + opts = { + -- add any options here + }, + dependencies = { + -- if you lazy-load any plugin below, make sure to add proper module="..." entries + "MunifTanjim/nui.nvim", + } + }}