local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" if not vim.loop.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) local options = { noremap = true } vim.keymap.set("i", "jk", "", options) vim.g.mapleader = " " -- make sure to set `mapleader` before lazy so your mappings are correct vim.wo.number = true vim.opt.tabstop = 2 vim.opt.softtabstop = 2 vim.opt.shiftwidth = 2 vim.opt.autoindent = true vim.opt.smartindent = true vim.opt.termguicolors = true vim.opt.expandtab = true if vim.g.vscode then else require "coc" vim.api.nvim_create_autocmd('textyankpost', { group = vim.api.nvim_create_augroup('highlight_yank', {}), desc = 'hightlight selection on yank', pattern = '*', callback = function() vim.highlight.on_yank { higroup = 'incsearch', timeout = 500 } end }) require("lazy").setup({ { "folke/which-key.nvim", event = "VeryLazy", init = function() vim.o.timeout = true vim.o.timeoutlen = 300 end, opts = {} }, { "folke/trouble.nvim", dependencies = { "nvim-tree/nvim-web-devicons" } }, { "kdheepak/lazygit.nvim", dependencies = { "nvim-lua/plenary.nvim" } }, -- {"tpope/vim-fugitive" }, { "tpope/vim-rhubarb" }, { "tommcdo/vim-fubitive" }, { "lewis6991/gitsigns.nvim", dependencies = { "nvim-lua/plenary.nvim" } }, { "neogitorg/neogit", dependencies = { "nvim-lua/plenary.nvim", -- required "sindrets/diffview.nvim", -- optional - diff integration "nvim-telescope/telescope.nvim" -- optional }, config = true }, { "neovim/nvim-lspconfig" }, -- {"folke/which-key.nvim"}, { "Cassin01/wf.nvim", version = "*", config = function() require("wf").setup() end }, { "folke/neodev.nvim" }, { "numtostr/comment.nvim", opts = {}, lazy = false }, { "lukas-reineke/indent-blankline.nvim", main = "ibl", opts = {} }, { "akinsho/bufferline.nvim", branch = "main", dependencies = "nvim-tree/nvim-web-devicons" }, { "nvim-telescope/telescope.nvim", dependencies = { 'nvim-lua/plenary.nvim' } }, { "lukaspietzschmann/telescope-tabs", dependencies = { "nvim-telescope/telescope.nvim" } }, { "nvim-treesitter/nvim-treesitter", build = ":TSUpdate", config = function() local configs = require("nvim-treesitter.configs") configs.setup({ ensure_installed = { "lua", "groovy", "java", "c", "cpp", "javascript", "python", "yaml", "json", "xml", "html", "ssh_config", "csv" }, sync_install = false, highlight = { enable = true }, indent = { enable = true } }) end }, { "folke/flash.nvim", event = "VeryLazy", opts = {}, keys = { { "s", mode = { "n", "x", "o" }, function() require("flash").jump() end, desc = "flash" }, { "s", mode = { "n", "x", "o" }, function() require("flash").treesitter() end, desc = "flash treesitter" }, { "r", mode = "o", function() require("flash").remote() end, desc = "remote flash" }, { "r", mode = { "o", "x" }, function() require("flash").treesitter_search() end, desc = "treesitter search" }, { "", mode = { "c" }, function() require("flash").toggle() end, desc = "toggle flash search" } } }, { "neoclide/coc.nvim", branch = "release" }, { "toppair/peek.nvim", event = { "VeryLazy" }, build = "deno task --quiet build:fast", config = function() require("peek").setup() vim.api.nvim_create_user_command("Peekopen", require("peek").open, {}) vim.api.nvim_create_user_command("Peekclose", require("peek").close, {}) end }, { "hrsh7th/nvim-cmp", dependencies = { "hrsh7th/cmp-nvim-lsp", "hrsh7th/cmp-nvim-lua", "hrsh7th/cmp-buffer", "hrsh7th/cmp-cmdline", "saadparwaiz1/cmp_luasnip", "l3mon4d3/luasnip" } }, { 'theprimeagen/git-worktree.nvim' }, { "kylechui/nvim-surround", version = "*", -- use for stability; omit to use `main` branch for the latest features event = "VeryLazy", config = function() require("nvim-surround").setup({}) end }, { 'nvim-lualine/lualine.nvim', dependencies = { 'nvim-tree/nvim-web-devicons', theme = 'codedark' } }, { "iamcco/markdown-preview.nvim", cmd = { "Markdownpreviewtoggle", "Markdownpreview", "Markdownpreviewstop" }, build = "cd app && yarn install", init = function() vim.g.mkdp_filetypes = { "markdown" } end, ft = { "markdown" } }, { "folke/tokyonight.nvim", lazy = false, priority = 1000, opts = {} }, { "hiphish/rainbow-delimiters.nvim" } }) vim.g.fubitive_domain_pattern = "bitbucket.ingg.com" vim.g.lf_replace_netrw = require("ibl").setup {} require("bufferline").setup {} local actions = require("telescope.actions") local open_with_trouble = require("trouble.sources.telescope").open -- Use this to add more results without clearing the trouble list local add_to_trouble = require("trouble.sources.telescope").add local telescope = require("telescope") telescope.setup({ defaults = { mappings = { i = { [""] = open_with_trouble }, n = { [""] = open_with_trouble } } } }) require('lualine').setup({ sections = { lualine_a = { window }, -- lualine_b = { {'fugitivehead', icon = ''}, } lualine_b = { { 'b:gitsigns_head', icon = '' } } } }) telescope.load_extension("git_worktree") local worktree = require("git-worktree") worktree.on_tree_change(function(op, metadata) if op == worktree.operations.switch then print("switched from " .. metadata.prev_path .. " to " .. metadata.path) end end) vim.cmd([[colorscheme tokyonight-night]]) vim.keymap.set('n', 'ff', require('telescope.builtin').find_files, { desc = 'List Files' }) vim.keymap.set('n', 'fg', require('telescope.builtin').live_grep, { desc = 'Search Current Dir' }) vim.keymap.set('n', 'fb', require('telescope.builtin').buffers, { desc = 'List Buffers' }) vim.keymap.set('n', 'fh', require('telescope.builtin').help_tags, { desc = 'List Help Tags' }) vim.keymap.set('n', 'lg', ':LazyGit', { desc = 'LazyGit' }) vim.keymap.set('n', 'gws', ':telescope git_worktree git_worktrees', { desc = 'List Git Worktrees' }) vim.keymap.set('n', 'gwc', ':telescope git_worktree create_git_worktree', { desc = 'Create Git Worktrees ' }) vim.keymap.set('n', 'r', ':!%:p', { desc = '' }) vim.keymap.set("n", "xx", function() require("trouble").toggle() end, { desc = 'Toggle Trouble' }) vim.keymap.set("n", "xw", function() require("trouble").toggle("workspace_diagnostics") end, { desc = 'Toggle Workspace diagnostics' }) vim.keymap.set("n", "xd", function() require("trouble").toggle("document_diagnostics") end, { desc = 'Toggle Document diagnostics' }) vim.keymap.set("n", "xq", function() require("trouble").toggle("quickfix") end, { desc = 'Toggle Quickfix' }) vim.keymap.set("n", "xl", function() require("trouble").toggle("loclist") end, { desc = 'Toggle Location List' }) vim.keymap.set("n", "gR", function() require("trouble").toggle("lsp_references") end, { desc = 'Toggle LSP Reference' }) vim.keymap.set('t', '', [[]], { desc = 'Escape from terminal' }) require('gitsigns').setup { on_attach = function(bufnr) local gs = package.loaded.gitsigns local function map(mode, l, r, opts) opts = opts or {} opts.buffer = bufnr vim.keymap.set(mode, l, r, opts) end -- navigation map('n', ']c', function() if vim.wo.diff then return ']c' end vim.schedule(function() gs.next_hunk() end) return '' end, { expr = true }) map('n', '[c', function() if vim.wo.diff then return '[c' end vim.schedule(function() gs.prev_hunk() end) return '' end, { expr = true }) map('n', 'hs', gs.stage_hunk, { desc = 'GitSigns stage_hunk' }) map('n', 'hr', gs.reset_hunk, { desc = 'GitSigns reset_hunk' }) map('v', 'hs', function() gs.stage_hunk { vim.fn.line('.'), vim.fn.line('v') } end, { desc = 'GitSigns stage_hunk' }) map('v', 'hr', function() gs.reset_hunk { vim.fn.line('.'), vim.fn.line('v') } end, { desc = 'GitSigns reset_hunk' }) map('n', 'hS', gs.stage_buffer, { desc = 'GitSigns stage_buffer' }) map('n', 'hu', gs.undo_stage_hunk, { desc = 'GitSigns undo_stage_hunk' }) map('n', 'hR', gs.reset_buffer, { desc = 'GitSigns reset_buffer' }) map('n', 'hp', gs.preview_hunk, { desc = 'GitSigns preview_hunk' }) map('n', 'hb', function() gs.blame_line { full = true } end, { desc = 'GitSigns blame_line' }) map('n', 'Tb', gs.toggle_current_line_blame, { desc = 'GitSigns toggle_current_line_blame' }) map('n', 'hd', gs.diffthis, { desc = 'GitSigns diffthis' }) map('n', 'hD', function() gs.diffthis('~') end, { desc = 'GitSigns diffthis ~' }) map('n', 'Td', gs.toggle_deleted, { desc = 'GitSigns toggle_deleted' }) -- text object map({ 'o', 'x' }, 'ih', ':Gitsigns select_hunk') end } end