-- disable netrw at the very start of your init.lua (strongly advised) vim.g.loaded_netrw = 1 vim.g.loaded_netrwPlugin = 1 vim.opt.number = true vim.opt.signcolumn = "yes" vim.o.scrolloff = 3 vim.o.sidescrolloff = 2 vim.loader.enable() vim.o.background = "dark" -- or "light" for light mode vim.opt.undofile = true vim.opt.undolevels = 100000 vim.opt.undoreload = 1000000 -- Loading Lazy plugin manager itself local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" local uv = vim.uv or vim.loop if not uv.fs_stat(lazypath) then vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", "--branch=stable", -- latest stable release lazypath, }) end vim.opt.rtp:prepend(lazypath) --Loading plugin manager and the plugins require("lazy").setup({ -- Gruvbox colorscheme { "ellisonleao/gruvbox.nvim", priority = 1000 }, -- Treesitter for better highlighting and moving { "nvim-treesitter/nvim-treesitter", build = ":TSUpdate", config = function() require("nvim-treesitter").setup({}) require("nvim-treesitter").install({ "c", "query", "vimdoc", "vim", "bash", "go", "css", "python", "html", "javascript", "json", "jsonc", "lua", "rust", "typescript", }) end, }, { "nvim-telescope/telescope.nvim", dependencies = { "nvim-lua/plenary.nvim" } }, { "nvim-tree/nvim-tree.lua" }, { "jeffkreeftmeijer/vim-numbertoggle" }, { "lukas-reineke/indent-blankline.nvim", main="ibl", opts={} }, { "phaazon/hop.nvim" }, { "echasnovski/mini.nvim", version = "*" }, { "mg979/vim-visual-multi", branch = "master" }, { "ethanholz/nvim-lastplace" }, { "kdheepak/lazygit.nvim", -- optional for floating window border decoration dependencies = { "nvim-lua/plenary.nvim", }, }, { "rmagatti/auto-session" }, { "akinsho/toggleterm.nvim", version = "*", config = true }, { "zwhitchcox/auto-session-nvim-tree" }, { "jiaoshijie/undotree" }, { "williamboman/mason.nvim", build = function() pcall(vim.cmd, "MasonUpdate") end, }, { "folke/which-key.nvim", config = function() vim.o.timeout = true vim.o.timeoutlen = 300 require("which-key").setup({ -- your configuration comes here -- or leave it empty to use the default settings -- refer to the configuration section below }) end, }, { "Wansmer/treesj", keys = { "m", "j", "s" }, dependencies = { "nvim-treesitter/nvim-treesitter" }, config = function() require("treesj").setup({--[[ your config ]] }) end, }, { "williamboman/mason-lspconfig.nvim" }, { "neovim/nvim-lspconfig" }, }) require('undotree').setup({ float_diff = false, -- using float window previews diff, set this `true` will disable layout option layout = "left_left_bottom", -- "left_bottom", "left_left_bottom" ignore_filetype = { 'undotree', 'undotreeDiff', 'qf', 'TelescopePrompt', 'spectre_panel', 'tsplayground' }, window = { winblend = 0, }, keymaps = { ['j'] = "move_next", ['k'] = "move_prev", ['J'] = "move_change_next", ['K'] = "move_change_prev", [''] = "action_enter", ['p'] = "enter_diffbuf", ['q'] = "quit", }, }) vim.cmd([[colorscheme gruvbox]]) require("nvim-lastplace").setup({ lastplace_ignore_buftype = { "quickfix", "nofile", "help" }, lastplace_ignore_filetype = { "gitcommit", "gitrebase", "svn", "hgcommit" }, lastplace_open_folds = true, }) require("hop").setup() require("mini.ai").setup() require("mini.pairs").setup() -- require("mini.comment").setup() require("mini.starter").setup() require("mini.statusline").setup() require("mini.tabline").setup() require("mini.bracketed").setup() require("mini.surround").setup() require("mini.cursorword").setup() -- require("mini.completion").setup() require("mason").setup({ ui = { icons = { package_installed = "✓", package_pending = "➜", package_uninstalled = "✗", }, }, }) require("mason-lspconfig").setup({ ensure_installed = { "lua_ls", "rust_analyzer" }, automatic_enable = true, }) vim.lsp.config("lua_ls", { settings = { Lua = { runtime = { version = "LuaJIT" }, diagnostics = { globals = { "vim" } }, workspace = { library = vim.api.nvim_get_runtime_file("", true), checkThirdParty = false, }, telemetry = { enable = false }, }, }, }) vim.g.clipboard = { name = "OSC 52", copy = { ["+"] = require("vim.ui.clipboard.osc52").copy("+"), ["*"] = require("vim.ui.clipboard.osc52").copy("*"), }, paste = { ["+"] = require("vim.ui.clipboard.osc52").paste("+"), ["*"] = require("vim.ui.clipboard.osc52").paste("*"), }, } local hop = require("hop") -- local directions = require("hop.hint").HintDirection vim.keymap.set("n", "s", function() hop.hint_words() end, { remap = true }) local builtin = require("telescope.builtin") vim.keymap.set("n", "fg", builtin.live_grep, {}) vim.keymap.set("n", "fb", builtin.buffers, {}) vim.keymap.set("n", "fh", builtin.help_tags, {}) --- set termguicolors to enable highlight groups vim.opt.termguicolors = true require("nvim-tree").setup({ sort = { sorter = "name", }, view = { width = 22, }, renderer = { group_empty = true, }, filters = { dotfiles = false, }, }) vim.api.nvim_set_keymap("n", "e", ":NvimTreeToggle", { noremap = true, silent = true }) vim.api.nvim_set_keymap("n", "t", ":ToggleTerm", { noremap = true, silent = true }) vim.api.nvim_set_keymap("n", "q", ":qa", { noremap = true, silent = true }) vim.api.nvim_set_keymap("n", "w", ":w", { noremap = true, silent = true }) -- vim.keymap.set("n", "u", vim.cmd.UndotreeToggle) vim.keymap.set('n', 'u', require('undotree').toggle, { noremap = true, silent = true }) vim.o.sessionoptions = "blank,buffers,curdir,folds,help,tabpages,winsize,winpos,terminal,localoptions" local auto_session = require("auto-session") auto_session.setup({ log_level = "error", auto_session_root_dir = vim.fn.stdpath("data") .. "/sessions/", auto_session_enabled = true, auto_save_enabled = true, auto_restore_enabled = true, auto_session_suppress_dirs = { "~/", "~/dev", "~/Downloads", "/" }, auto_session_use_git_branch = nil, cwd_change_handling = { restore_upcoming_session = true, -- This is necessary!! }, }) -- require("auto-session-nvim-tree").setup(auto_session) vim.cmd([[highlight IndentBlanklineIndent1 guifg=#443838 gui=nocombine]]) vim.opt.tabstop = 4 vim.opt.softtabstop = 4 vim.opt.shiftwidth = 4 vim.opt.list = true vim.opt.listchars:append("lead:⋅") -- vim.opt.listchars:append("tab:▷⎯⎯") -- vim.opt.listchars:append("tab:▸⁃ ") -- vim.opt.listchars:append("tab:▸⁃⁃") vim.opt.listchars:append("tab:→ ") vim.opt.listchars:append("multispace: ⋅ ⋅ ⋅ ⋅ ⋅ ⋅") vim.opt.listchars:append("leadmultispace:⋅ ⋅ ") vim.opt.listchars:append("trail:␣") function _G.set_terminal_keymaps() local opts = { buffer = 0 } -- vim.keymap.set('t', '', [[]], opts) -- vim.keymap.set('t', 'jk', [[]], opts) vim.keymap.set("t", "", [[wincmd h]], opts) vim.keymap.set("t", "", [[wincmd j]], opts) vim.keymap.set("t", "", [[wincmd k]], opts) vim.keymap.set("t", "", [[wincmd k]], opts) vim.keymap.set("t", "", [[wincmd l]], opts) vim.keymap.set("t", "", [[]], opts) end local aug = vim.api.nvim_create_augroup("user_autocmds", { clear = true }) vim.api.nvim_create_autocmd("TermOpen", { group = aug, pattern = "term://*", callback = set_terminal_keymaps, }) vim.api.nvim_create_autocmd({ "BufNewFile", "BufRead" }, { group = aug, pattern = "*.tmpl", command = "set syntax=python", })