From a222953dde3dc78dac94f6855a12d8ab76f383cb Mon Sep 17 00:00:00 2001 From: mhsn Date: Thu, 2 Oct 2025 16:32:15 +0100 Subject: neovim config --- .config/nvim/init.lua | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 .config/nvim/init.lua (limited to '.config') diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua new file mode 100644 index 0000000..5fcfec6 --- /dev/null +++ b/.config/nvim/init.lua @@ -0,0 +1,93 @@ +-- options +vim.o.number = true +vim.o.relativenumber = true +vim.o.list = true +vim.o.wrap = false +vim.o.scrolloff = 9 +vim.o.swapfile = false +vim.o.signcolumn = "yes" +vim.o.nrformats = "unsigned,alpha,hex,bin" +vim.o.completeopt = "menuone,popup,fuzzy,noselect" +vim.o.pummaxwidth = 40 +vim.o.pumheight = 20 + +-- keymaps +vim.g.mapleader = " " +vim.keymap.set("n", "e", ":lua MiniFiles.open()") +vim.keymap.set("n", "f", ":Pick files") +vim.keymap.set("n", "h", ":Pick help") +vim.keymap.set("n", "d", ":lua vim.diagnostic.open_float()") +vim.keymap.set("n", "n", ":lua vim.diagnostic.jump({ count = 1 })") +vim.keymap.set("n", "p", ":lua vim.diagnostic.jump({ count = -1 })") + +-- plugins +vim.pack.add({ + { src = "https://git.mhsn.net/lain.vim" }, + { src = "https://github.com/neovim/nvim-lspconfig" }, + { src = "https://github.com/mason-org/mason.nvim" }, + { src = "https://github.com/nvim-treesitter/nvim-treesitter" }, + { src = "https://github.com/nvim-mini/mini.nvim" }, + { src = "https://github.com/creativenull/efmls-configs-nvim" }, +}) + +-- theme +vim.cmd.colorscheme("lain") + +-- plugin setup +require("mason").setup() +require("mini.align").setup() +require("mini.files").setup({ windows = { preview = true, width_preview = 80 } }) +require("mini.icons").setup({ style = "ascii" }) +require("mini.pick").setup() +require("mini.surround").setup() +require("mini.completion").setup({ window = { info = { height = 80, width = 80 } } }) +require("nvim-treesitter.configs").setup({ + ensure_installed = { "lua", "python", "rust", "typst" }, + sync_install = false, + auto_install = true, + ignore_install = {}, + modules = {}, + highlight = { enable = true }, +}) + +-- LSPs +vim.lsp.enable({ "lua_ls", "rust_analyzer", "basedpyright", "tinymist" }) + +-- LSP configs +vim.lsp.config("lua_ls", { settings = { Lua = { workspace = { library = vim.api.nvim_get_runtime_file("", true) } } } }) + +-- efmls formatting +local efm_languages = { + lua = { require("efmls-configs.formatters.stylua") }, + markdown = { require("efmls-configs.formatters.mdformat") }, + nix = { require("efmls-configs.formatters.nixfmt") }, + python = { require("efmls-configs.formatters.ruff"), require("efmls-configs.linters.ruff") }, + rust = { require("efmls-configs.formatters.rustfmt") }, + sh = { require("efmls-configs.formatters.shfmt"), require("efmls-configs.linters.shellcheck") }, + typst = { require("efmls-configs.formatters.typstyle") }, +} + +require("lspconfig").efm.setup({ + filetypes = vim.tbl_keys(efm_languages), + settings = { + rootMarkers = { ".git/" }, + languages = efm_languages, + }, + init_options = { + documentFormatting = true, + documentRangeFormatting = true, + }, +}) + +-- format on save +local lsp_fmt_group = vim.api.nvim_create_augroup("LspFormattingGroup", {}) +vim.api.nvim_create_autocmd("BufWritePost", { + group = lsp_fmt_group, + callback = function(ev) + local efm = vim.lsp.get_clients({ name = "efm", bufnr = ev.buf }) + if vim.tbl_isempty(efm) then + return + end + vim.lsp.buf.format({ name = "efm" }) + end, +}) -- cgit v1.2.3