Last active
April 2, 2026 16:59
-
-
Save hunzo/38751a7a388d19464f00d91598355a49 to your computer and use it in GitHub Desktop.
simple nvim 0.12 config
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| local opt = vim.opt | |
| local g = vim.g | |
| local keymap = vim.keymap | |
| -- Basic editor settings | |
| opt.expandtab = true -- Use spaces instead of tabs | |
| opt.tabstop = 2 -- Number of spaces that a <Tab> in the file counts for | |
| opt.softtabstop = 2 -- Number of spaces that a <Tab> counts for while performing editing operations | |
| opt.shiftwidth = 2 -- Size of an indent | |
| opt.relativenumber = true -- Show relative line numbers | |
| opt.number = true -- Show absolute line number on current line | |
| opt.signcolumn = "yes" -- Always show the signcolumn | |
| opt.termguicolors = true -- Enable 24-bit RGB colors | |
| opt.wrap = false -- Disable line wrap | |
| -- Markdown indentation fix | |
| g.markdown_recommended_style = 0 | |
| -- Leader key | |
| g.mapleader = " " | |
| -- Key mapping defaults | |
| local opts = { noremap = true, silent = true } | |
| -- Move selected lines | |
| keymap.set("v", "J", ":m '>+1<CR>gv=gv", opts) | |
| keymap.set("v", "K", ":m '<-2<CR>gv=gv", opts) | |
| -- Window navigation | |
| keymap.set("n", "<C-h>", "<C-w>h", opts) | |
| keymap.set("n", "<C-j>", "<C-w>j", opts) | |
| keymap.set("n", "<C-k>", "<C-w>k", opts) | |
| keymap.set("n", "<C-l>", "<C-w>l", opts) | |
| -- Clear search highlight | |
| keymap.set("n", "<leader>n", ":nohlsearch<CR>", opts) | |
| -- Tabs | |
| keymap.set("n", "te", ":tabedit<CR>", opts) | |
| keymap.set("n", "<Tab>", ":tabnext<CR>", opts) | |
| keymap.set("n", "<S-Tab>", ":tabprev<CR>", opts) | |
| -- Increment/decrement | |
| keymap.set("n", "+", "<C-a>", opts) | |
| keymap.set("n", "-", "<C-x>", opts) | |
| -- Split windows | |
| keymap.set("n", "ss", ":split<CR>", opts) | |
| keymap.set("n", "sv", ":vsplit<CR>", opts) | |
| -- Resize windows easily | |
| keymap.set("n", "<C-Left>", "<C-w><", opts) | |
| keymap.set("n", "<C-Right>", "<C-w>>", opts) | |
| keymap.set("n", "<C-Up>", "<C-w>+", opts) | |
| keymap.set("n", "<C-Down>", "<C-w>-", opts) | |
| -- Mini.Pick | |
| keymap.set("n", "<leader>ff", ":Pick files<CR>", opts) | |
| keymap.set("n", "<leader>fg", ":Pick grep_live<CR>", opts) | |
| keymap.set("n", "<leader>fb", ":Pick buffer<CR>", opts) | |
| keymap.set("n", "<leader>d", ":Trouble diagnostics toggle<CR>", opts) | |
| vim.pack.add({ | |
| { src = "https://github.com/rose-pine/neovim" }, | |
| { src = "https://github.com/mason-org/mason.nvim" }, | |
| { src = "https://github.com/mason-org/mason-lspconfig.nvim" }, | |
| { src = "https://github.com/WhoIsSethDaniel/mason-tool-installer.nvim" }, | |
| { src = "https://github.com/nvim-mini/mini.nvim" }, | |
| { src = "https://github.com/akinsho/toggleterm.nvim" }, | |
| { src = "https://github.com/stevearc/oil.nvim" }, | |
| { src = "https://github.com/folke/trouble.nvim" }, | |
| { src = "https://github.com/stevearc/conform.nvim.git" }, | |
| { src = "https://github.com/folke/lazydev.nvim" }, | |
| }) | |
| require("mini.pick").setup() | |
| require("mini.pairs").setup() | |
| require("mini.surround").setup() | |
| require("mini.statusline").setup() | |
| require("trouble").setup() | |
| require("lazydev").setup() | |
| require("toggleterm").setup({ | |
| open_mapping = [[<c-\>]], | |
| direction = "float", | |
| }) | |
| require("mason").setup() | |
| require("mason-lspconfig").setup({}) | |
| require("mason-tool-installer").setup({ | |
| ensure_installed = { | |
| -- Formatters | |
| "autopep8", | |
| "djlint", | |
| "stylua", | |
| "yamlfmt", | |
| "nginx-config-formatter", | |
| "jq", | |
| "shfmt", | |
| "mdformat", | |
| -- Linters | |
| "ruff", | |
| "ansible-lint", | |
| }, | |
| }) | |
| -- auto format on save | |
| require("conform").setup({ | |
| formatters_by_ft = { | |
| json = { "jq" }, | |
| markdown = { "mdformat" }, | |
| yaml = { "yamlfmt" }, | |
| lua = { "stylua" }, | |
| python = { "autopep8" }, | |
| htmldjango = { "djlint" }, | |
| html = { "djlint" }, | |
| nginx = { "nginxfmt" }, | |
| sh = { "shfmt" }, | |
| }, | |
| format_on_save = { | |
| timeout_ms = 500, | |
| lsp_format = "fallback", | |
| }, | |
| async = false, | |
| timeout_ms = 500, | |
| notify_on_error = true, | |
| log_level = vim.log.levels.DEBUG, | |
| }) | |
| -- manual format | |
| local conform = require("conform") | |
| vim.keymap.set({ "n", "v" }, "<leader>fm", function() | |
| conform.format({ | |
| lsp_fallback = true, | |
| async = false, | |
| timeout_ms = 500, | |
| }) | |
| end, { desc = "Format file or range (in vitual mode)" }) | |
| require("oil").setup({ | |
| view_options = { | |
| show_hidden = true, | |
| }, | |
| }) | |
| require("rose-pine").setup({ | |
| styles = { | |
| bold = false, | |
| italic = true, | |
| transparency = true, | |
| }, | |
| }) | |
| vim.cmd("colorscheme rose-pine") |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| vim.g.mapleader = " " | |
| local opt = vim.opt | |
| -- basic editor settings | |
| opt.expandtab = true -- Use spaces instead of tabs | |
| opt.tabstop = 4 -- Number of spaces that a <Tab> in the file counts for | |
| opt.softtabstop = 4 -- Number of spaces that a <Tab> counts for while performing editing operations | |
| opt.shiftwidth = 4 -- Size of an indent | |
| opt.relativenumber = true -- Show relative line numbers | |
| opt.number = true -- Show absolute line number on current line | |
| opt.signcolumn = "yes" -- Always show the signcolumn | |
| opt.termguicolors = true -- Enable 24-bit RGB colors | |
| opt.wrap = false -- Disable line wrap | |
| opt.winborder = "rounded" | |
| -- add package | |
| vim.pack.add({ | |
| { src = "https://github.com/rose-pine/neovim" }, | |
| { src = "https://github.com/neovim/nvim-lspconfig" }, | |
| { src = "https://github.com/mason-org/mason.nvim" }, | |
| { src = "https://github.com/mason-org/mason-lspconfig.nvim" }, | |
| { src = "https://github.com/WhoIsSethDaniel/mason-tool-installer.nvim" }, | |
| { src = "https://github.com/nvim-mini/mini.nvim" }, | |
| { src = "https://github.com/saghen/blink.cmp" }, | |
| { src = "https://github.com/akinsho/toggleterm.nvim" }, | |
| { src = "https://github.com/stevearc/oil.nvim" }, | |
| { src = "https://github.com/folke/trouble.nvim" }, | |
| { src = "https://github.com/L3MON4D3/LuaSnip.git" }, | |
| { src = "https://github.com/stevearc/conform.nvim.git" }, | |
| { src = "https://github.com/folke/lazydev.nvim" }, | |
| }) | |
| -- indent and filestypes settings | |
| vim.api.nvim_create_autocmd("FileType", { | |
| pattern = "go", | |
| callback = function() | |
| vim.bo.tabstop = 4 | |
| vim.bo.shiftwidth = 4 | |
| vim.bo.softtabstop = 4 | |
| end, | |
| }) | |
| vim.api.nvim_create_autocmd("FileType", { | |
| pattern = "python", | |
| callback = function() | |
| vim.bo.tabstop = 4 | |
| vim.bo.shiftwidth = 4 | |
| vim.bo.softtabstop = 4 | |
| end, | |
| }) | |
| vim.api.nvim_create_autocmd("FileType", { | |
| pattern = { "html", "javascript", "typescript", "javascriptreact", "typescriptreact" }, | |
| callback = function() | |
| vim.bo.tabstop = 2 | |
| vim.bo.shiftwidth = 2 | |
| vim.bo.softtabstop = 2 | |
| end, | |
| }) | |
| vim.filetype.add({ | |
| pattern = { | |
| [".*/ansible/.*%.yml"] = "yaml.ansible", | |
| [".*/playbooks/.*%.yml"] = "yaml.ansible", | |
| [".*/roles/.*/tasks/.*%.yml"] = "yaml.ansible", | |
| [".*/handlers/.*%.yml"] = "yaml.ansible", | |
| [".*/group_vars/.*%.yml"] = "yaml.ansible", | |
| [".*/host_vars/.*%.yml"] = "yaml.ansible", | |
| }, | |
| }) | |
| -- enable plugins | |
| require("mini.pick").setup() | |
| require("mini.pairs").setup() | |
| require("mini.surround").setup() | |
| require("mini.statusline").setup() | |
| require("trouble").setup() | |
| require("lazydev").setup() | |
| require("toggleterm").setup({ | |
| open_mapping = [[<c-\>]], | |
| direction = "float", | |
| }) | |
| require("oil").setup({ | |
| view_options = { | |
| show_hidden = true, | |
| }, | |
| }) | |
| require("mason").setup() | |
| require("mason-lspconfig").setup({ | |
| ensure_installed = { | |
| -- install LSP | |
| "tailwindcss", | |
| "ts_ls", | |
| "gopls", | |
| "pyright", | |
| "emmet_ls", | |
| "html", | |
| "lua_ls", | |
| "yamlls", | |
| "dockerls", | |
| "bashls", | |
| "jsonls", | |
| "cssls", | |
| "ansiblels", | |
| "docker_compose_language_service", | |
| "terraformls", | |
| }, | |
| }) | |
| require("mason-tool-installer").setup({ | |
| ensure_installed = { | |
| -- install formatters | |
| "autopep8", | |
| "prettierd", | |
| "stylua", | |
| "gofumpt", | |
| "golines", | |
| "sqlfmt", | |
| "yamlfmt", | |
| "shfmt", | |
| "nginx-config-formatter", | |
| "goimports-reviser", | |
| "terraform", | |
| -- install linters | |
| "ruff", | |
| "eslint_d", | |
| "djlint", | |
| "golangci-lint", | |
| "ansible-lint", | |
| "hadolint", | |
| "hadolint", | |
| }, | |
| }) | |
| -- colorscheme | |
| require("rose-pine").setup({ | |
| styles = { | |
| bold = false, | |
| italic = true, | |
| transparency = true, | |
| }, | |
| }) | |
| -- autocomplete | |
| require("luasnip.loaders.from_vscode").lazy_load() | |
| require("blink.cmp").setup({ | |
| signature = { enabled = true }, | |
| keymap = { | |
| ["<CR>"] = { "accept", "fallback" }, | |
| }, | |
| completion = { | |
| list = { | |
| selection = { | |
| preselect = true, | |
| auto_insert = true, | |
| }, | |
| }, | |
| }, | |
| }) | |
| -- ~/.local/share/nvim/site/pack/core/opt/blink.cmp $ cargo build --release | |
| -- auto format on save | |
| require("conform").setup({ | |
| formatters_by_ft = { | |
| javascript = { "prettierd" }, | |
| typescript = { "prettierd" }, | |
| javascriptreact = { "prettierd" }, | |
| typescriptreact = { "prettierd" }, | |
| css = { "prettierd" }, | |
| json = { "prettierd" }, | |
| markdown = { "prettierd" }, | |
| yaml = { "yamlfmt" }, | |
| lua = { "stylua" }, | |
| python = { "autopep8" }, | |
| htmldjango = { "djlint" }, | |
| html = { "djlint" }, | |
| go = { "gofumpt", "golines", "goimports-reviser" }, | |
| sql = { "sqlfmt" }, | |
| sh = { "shfmt" }, | |
| nginx = { "nginxfmt" }, | |
| }, | |
| format_on_save = { | |
| timeout_ms = 500, | |
| lsp_format = "fallback", | |
| }, | |
| async = false, | |
| timeout_ms = 500, | |
| notify_on_error = true, | |
| log_level = vim.log.levels.DEBUG, | |
| }) | |
| -- manual format | |
| local conform = require("conform") | |
| vim.keymap.set({ "n", "v" }, "<leader>fm", function() | |
| conform.format({ | |
| lsp_fallback = true, | |
| async = false, | |
| timeout_ms = 500, | |
| }) | |
| end, { desc = "Format file or range (in vitual mode)" }) | |
| vim.cmd("colorscheme rose-pine") | |
| local opts = { noremap = true, silent = true } | |
| local keymap = vim.keymap | |
| -- Mini.Pick | |
| keymap.set("n", "<leader>ff", ":Pick files<CR>", opts) | |
| keymap.set("n", "<leader>fg", ":Pick grep_live<CR>", opts) | |
| keymap.set("n", "<leader>fb", ":Pick buffer<CR>", opts) | |
| keymap.set("n", "<leader>d", ":Trouble diagnostics toggle<CR>", opts) | |
| -- Move selected lines | |
| keymap.set("v", "J", ":m '>+1<CR>gv=gv", opts) | |
| keymap.set("v", "K", ":m '<-2<CR>gv=gv", opts) | |
| -- Window navigation | |
| keymap.set("n", "<C-h>", "<C-w>h", opts) | |
| keymap.set("n", "<C-j>", "<C-w>j", opts) | |
| keymap.set("n", "<C-k>", "<C-w>k", opts) | |
| keymap.set("n", "<C-l>", "<C-w>l", opts) | |
| -- Clear search highlight | |
| keymap.set("n", "<leader>n", ":nohlsearch<CR>", opts) | |
| -- Tabs | |
| keymap.set("n", "te", ":tabedit<CR>", opts) | |
| keymap.set("n", "<Tab>", ":tabnext<CR>", opts) | |
| keymap.set("n", "<S-Tab>", ":tabprev<CR>", opts) | |
| -- Increment/decrement | |
| keymap.set("n", "+", "<C-a>", opts) | |
| keymap.set("n", "-", "<C-x>", opts) | |
| -- Split windows | |
| keymap.set("n", "ss", ":split<CR>", opts) | |
| keymap.set("n", "sv", ":vsplit<CR>", opts) | |
| -- Resize windows easily | |
| keymap.set("n", "<C-Left>", "<C-w><", opts) | |
| keymap.set("n", "<C-Right>", "<C-w>>", opts) | |
| keymap.set("n", "<C-Up>", "<C-w>+", opts) | |
| keymap.set("n", "<C-Down>", "<C-w>-", opts) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment