summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormhsn <mail@mhsn.net>2025-10-02 16:32:15 +0100
committermhsn <mail@mhsn.net>2025-10-02 16:32:15 +0100
commita222953dde3dc78dac94f6855a12d8ab76f383cb (patch)
treeee9dfc487948ec09d6284daac8b77aded8d6b1bb
parent98635f24a1b5a3781c82baada3956a2b9aee6467 (diff)
downloaddotfiles-a222953dde3dc78dac94f6855a12d8ab76f383cb.tar.gz
dotfiles-a222953dde3dc78dac94f6855a12d8ab76f383cb.zip
neovim config
-rw-r--r--.config/nvim/init.lua93
1 files changed, 93 insertions, 0 deletions
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", "<leader>e", ":lua MiniFiles.open()<CR>")
+vim.keymap.set("n", "<leader>f", ":Pick files<CR>")
+vim.keymap.set("n", "<leader>h", ":Pick help<CR>")
+vim.keymap.set("n", "<leader>d", ":lua vim.diagnostic.open_float()<CR>")
+vim.keymap.set("n", "<leader>n", ":lua vim.diagnostic.jump({ count = 1 })<CR>")
+vim.keymap.set("n", "<leader>p", ":lua vim.diagnostic.jump({ count = -1 })<CR>")
+
+-- 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,
+})