-- [[ baic opts ]] vim.g.mapleader = " " vim.o.ignorecase = true vim.o.smartcase = true vim.o.clipboard = "unnamedplus" vim.o.breakindent = true vim.o.undofile = true vim.o.mouse = false vim.o.guicursor = false vim.o.termguicolors = true vim.wo.number = true vim.wo.relativenumber = true vim.wo.signcolumn = "yes" vim.g.netrw_banner = 0 vim.g.netrw_liststyle = 3 -- [[ lib ]] local map = function(mode, lhs, rhs, opts) if not opts then opts = { silent = true } end vim.api.nvim_set_keymap(mode, lhs, rhs, opts) end local mapnl = function(lhs, rhs, opts) if not opts then opts = { silent = true } end vim.keymap.set("n", "" .. lhs, rhs, opts) end -- [[ keybindings ]] -- close and bd map("n", "", ":bd") map("t", "", ":bd!") map("n", "", ":close") map("t", "", "") -- splits map("n", "", "h") map("n", "", "j") map("n", "", "k") map("n", "", "l") map("t", "", "h") map("t", "", "j") map("t", "", "k") map("t", "", "l") -- terminal map("n", "t", ":vsplit:terminali") map("t", "t", ":q") -- buffer map("t", "j", ":bprevious") map("t", "k", ":bNext") mapnl("j", ":bprevious") mapnl("k", ":bNext") -- tabs map("t", "h", ":tabprevious") map("t", "l", ":tabNext") mapnl("h", ":tabprevious") mapnl("l", ":tabNext") -- files mapnl("e", ":Lex") -- column hint mapnl("cc", function() if vim.api.nvim_get_option_value("colorcolumn", {}) == "" then vim.api.nvim_set_option_value("colorcolumn", "79", {}) else vim.api.nvim_set_option_value("colorcolumn", "", {}) end end) -- [[ package manager ]] local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" local lazylock = vim.fn.stdpath("data") .. "/lazy/lazy-lock.json" if not vim.loop.fs_stat(lazypath) then local lazyrepo = "https://github.com/folke/lazy.nvim.git" vim.print("downloading " .. lazyrepo) vim.fn.system({ "git", "clone", "--filter=blob:none", lazyrepo, "--branch=stable", -- latest stable release lazypath, }) vim.api.nvim_echo({}, false, {}) end vim.opt.rtp:prepend(lazypath) -- [[ plugin setup ]] require("lazy").setup({ "tpope/vim-fugitive", "tpope/vim-sleuth", { "numToStr/Comment.nvim", opts = {} }, { "nvim-treesitter/nvim-treesitter", build = ":TSUpdate" }, { "nvim-lualine/lualine.nvim", dependencies = { "nvim-tree/nvim-web-devicons" }, opts = { options = { component_separators = "|", section_separators = "", }, }, }, { "navarasu/onedark.nvim", priority = 1000, opts = { transparent = true }, config = function(_, opts) require("onedark").setup(opts) vim.cmd.colorscheme "onedark" end, }, { "lewis6991/gitsigns.nvim", opts = { signs = { add = { text = "+" }, change = { text = "~" }, delete = { text = "_" }, topdelete = { text = "‾" }, changedelete = { text = "~" }, }, on_attach = function(bufnr) mapnl("gp", require("gitsigns").prev_hunk, { buffer = bufnr }) mapnl("gn", require("gitsigns").next_hunk, { buffer = bufnr }) mapnl("ph", require("gitsigns").preview_hunk, { buffer = bufnr }) end, }, }, { "VonHeikemen/lsp-zero.nvim", branch = "v2.x", dependencies = { { "neovim/nvim-lspconfig" }, { "hrsh7th/nvim-cmp" }, { "L3MON4D3/LuaSnip" }, { "hrsh7th/cmp-nvim-lsp" }, { "hrsh7th/cmp-buffer" }, { "hrsh7th/cmp-path" }, }, }, }, { lockfile = lazylock }) -- [[ treesitter setup ]] require("nvim-treesitter.configs").setup { ensure_installed = { "c", "bash", "nix", "lua", "markdown", "regex", }, sync_install = false, auto_install = false, highlight = { enable = true }, indent = { enable = true }, incremental_selection = { enable = true, keymaps = { init_selection = "i", node_incremental = "i", node_decremental = "d", }, } } -- [[ lsp setup ]] local lsp = require("lsp-zero").preset {} lsp.on_attach(function(_, bufnr) lsp.default_keymaps { buffer = bufnr } end) lsp.set_sign_icons({ error = "󰅚 ", warn = "󰀪 ", hint = "󰋽 ", info = "󰌶 " }) require("lspconfig").ccls.setup {} require("lspconfig").bashls.setup {} require("lspconfig").nil_ls.setup {} require("lspconfig").lua_ls.setup(lsp.nvim_lua_ls()) lsp.setup() -- [[ cmp setup ]] local kind_icons = { Text = " ", Method = " ", Function = " ", Constructor = " ", Field = " ", Variable = " ", Class = " ", Interface = " ", Module = " ", Property = " ", Unit = " ", Value = " ", Enum = " ", Keyword = " ", Snippet = " ", Color = " ", File = " ", Reference = " ", Folder = " ", EnumMember = " ", Constant = " ", Struct = " ", Event = " ", Operator = " ", TypeParameter = " ", } local cmp_colr = "Normal:Normal,FloatBorder:BorderBG,CursorLine:PmenuSel" require("cmp").setup({ window = { completion = { border = "rounded", winhighlight = cmp_colr, }, documentation = { border = "rounded", winhighlight = cmp_colr, } }, sources = { { name = "nvim_lsp" }, { name = "buffer" }, { name = "path" }, }, formatting = { format = function(entry, vim_item) vim_item.kind = kind_icons[vim_item.kind] .. " " .. string.lower(vim_item.kind) vim_item.menu = "[" .. entry.source.name .. "]" return vim_item end }, })