diff --git a/.config/nvim/after/plugin/autopairs.rc.lua b/.config/nvim/after/plugin/autopairs.rc.lua new file mode 100644 index 0000000..995f63b --- /dev/null +++ b/.config/nvim/after/plugin/autopairs.rc.lua @@ -0,0 +1,7 @@ +local status, autopairs = pcall(require, "nvim-autopairs") + +if not status then return end + +autopairs.setup({ + disable_filetype = { "TelescopePrompt", "vim" } +}) diff --git a/.config/nvim/after/plugin/autotags.rc.lua b/.config/nvim/after/plugin/autotags.rc.lua new file mode 100644 index 0000000..4b339e4 --- /dev/null +++ b/.config/nvim/after/plugin/autotags.rc.lua @@ -0,0 +1,5 @@ +local status, autotag = pcall(require, "nvim-ts-autotag") + +if not status then return end + +autotag.setup() diff --git a/.config/nvim/after/plugin/harpoon.rc.lua b/.config/nvim/after/plugin/harpoon.rc.lua new file mode 100644 index 0000000..5ff77d5 --- /dev/null +++ b/.config/nvim/after/plugin/harpoon.rc.lua @@ -0,0 +1,18 @@ +local status, mark = pcall(require, "harpoon.mark") + +if not status then return end + +local ui +status, ui = pcall(require, "harpoon.ui") + +if not status then return end + +vim.keymap.set("n", "a", mark.add_file) +vim.keymap.set("n", "", ui.toggle_quick_menu) + +vim.keymap.set("n", "q", function() ui.nav_file(1) end) +vim.keymap.set("n", "w", function() ui.nav_file(2) end) +vim.keymap.set("n", "e", function() ui.nav_file(3) end) +vim.keymap.set("n", "r", function() ui.nav_file(4) end) +vim.keymap.set("n", ",", ui.nav_prev) +vim.keymap.set("n", ".", ui.nav_next) diff --git a/.config/nvim/after/plugin/lspzero.rc.lua b/.config/nvim/after/plugin/lspzero.rc.lua index e1c27a5..b95a5b4 100644 --- a/.config/nvim/after/plugin/lspzero.rc.lua +++ b/.config/nvim/after/plugin/lspzero.rc.lua @@ -6,7 +6,40 @@ lspzero.preset("recommended") -- first argument is the client lspzero.on_attach(function(_, bufnr) - lspzero.default_keymaps({buffer = bufnr}) + lspzero.default_keymaps({ buffer = bufnr }) + + -- custom keymaps + vim.keymap.set("n", "f", "lua vim.lsp.buf.format()") -- format buffer end) +-- Enable format on save +lspzero.format_on_save({ + format_opts = { + async = true, + timeout_ms = 10000, + }, + servers = { + ['lua_ls'] = { 'lua' }, + } +}) + +local lspconfig +status, lspconfig = pcall(require, "lspconfig") + +if status then + lspconfig.lua_ls.setup(lspzero.nvim_lua_ls()) +end + lspzero.setup() + +local cmp +status, cmp = pcall(require, 'cmp') + +if not status then return end + +cmp.setup({ + mapping = { + -- Press "Enter" to confirm completion/suggestion + [''] = cmp.mapping.confirm({ select = true }), + } +}) diff --git a/.config/nvim/after/plugin/lualine.rc.lua b/.config/nvim/after/plugin/lualine.rc.lua new file mode 100644 index 0000000..a582996 --- /dev/null +++ b/.config/nvim/after/plugin/lualine.rc.lua @@ -0,0 +1,52 @@ +local status, lualine = pcall(require, 'lualine') + +if (not status) then return end + +lualine.setup { + options = { + icons_enabled = true, + section_separators = { + left = '', + right = '' + }, + component_separators = { + left = '', + right = '' + }, + disabled_filetypes = {} + }, + sections = { + lualine_a = { 'mode' }, + lualine_b = { 'branch' }, + lualine_c = { { + 'filename', + file_status = true, -- display file status + path = 0 -- no file path + } }, + lualine_x = { + { + 'diagnostics', + sources = { 'nvim_diagnostic' }, + symbols = { error = ' ', warn = ' ', info = ' ', hint = '' } + }, + 'enconding', + 'filetype' + }, + lualine_y = { 'progress' }, + lualine_z = { 'location' } + }, + inactive_sections = { + lualine_a = {}, + lualine_b = {}, + lualine_c = { { + 'filename', + file_status = true, + path = 1 + } }, + lualine_x = { 'location' }, + lualine_y = {}, + lualine_z = {} + }, + tabline = {}, + extensions = { 'fugitive' } +} diff --git a/.config/nvim/after/plugin/telescope.rc.lua b/.config/nvim/after/plugin/telescope.rc.lua new file mode 100644 index 0000000..7c6355c --- /dev/null +++ b/.config/nvim/after/plugin/telescope.rc.lua @@ -0,0 +1,63 @@ +local status, telescope = pcall(require, "telescope") + +if not status then return end + +local actions = require("telescope.actions") +local builtin = require("telescope.builtin") + +local fb_actions = require "telescope".extensions.file_browser.actions + +local function telescope_buffer_dir() + return vim.fn.expand("%:p:h") +end + +telescope.setup({ + defaults = { + mappings = { + n = { + ['q'] = actions.close + } + } + }, + extensions = { + file_browser = { + theme = "dropdown", + hijack_netrw = true, + hidden = true, + mappings = { + ['i'] = { + [''] = function() vim.cmd("normal vbd") end + }, + ['n'] = { + ['N'] = fb_actions.create, + ['h'] = fb_actions.goto_parent_dir, + ['/'] = function() vim.cmd("startinsert") end, + ['D'] = fb_actions.remove + } + } + } + } +}) + +telescope.load_extension("file_browser") + + +-- Set up keymaps specific to telescope +vim.keymap.set("n", ";f", function() + builtin.find_files({ no_ignore = false, hidden = true }) +end) +vim.keymap.set("n", ";g", builtin.git_files) +vim.keymap.set("n", "sf", + function() + telescope.extensions.file_browser.file_browser({ + path = "%:p:h", + cwd = telescope_buffer_dir(), + respect_gitignore = true, + hidden = true, + grouped = true, + previewer = false, + initial_mode = "normal", + layout_config = { height = 40 } + }) + end) +vim.keymap.set("n", ";h", builtin.help_tags) diff --git a/.config/nvim/after/plugin/treesitter.rc.lua b/.config/nvim/after/plugin/treesitter.rc.lua new file mode 100644 index 0000000..c9ca698 --- /dev/null +++ b/.config/nvim/after/plugin/treesitter.rc.lua @@ -0,0 +1,19 @@ +local status, treesitter = pcall(require, "nvim-treesitter.configs") + +if not status then return end + +treesitter.setup { + -- A list of parser names, or "all" + ensure_installed = { "vimdoc", "javascript", "typescript", "c", "lua", "rust" }, + + -- Install parsers synchronously (only applied to `ensure_installed`) + sync_install = false, + + -- Automatically install missing parsers when entering buffer + -- Recommendation: set to false if you don't have `tree-sitter` CLI installed locally + auto_install = true, + + highlight = { + enable = true, + }, +} diff --git a/.config/nvim/after/plugin/undotree.rc.lua b/.config/nvim/after/plugin/undotree.rc.lua new file mode 100644 index 0000000..a753ae8 --- /dev/null +++ b/.config/nvim/after/plugin/undotree.rc.lua @@ -0,0 +1,16 @@ +vim.keymap.set("n", "u", vim.cmd.UndotreeToggle) + +local has_persistent_undo = vim.api.nvim_call_function("has", { "persistent_undo" }) + +if has_persistent_undo then + local target_path = vim.api.nvim_call_function("expand", { "~/.undodir" }) + + local is_directory = vim.api.nvim_call_function("isdirectory", { target_path }) + + if not is_directory then + vim.api.nvim_call_function("mkdir", { target_path, "p", 0700 }) + end + + vim.opt.undodir = target_path + vim.opt.undofile = true +end diff --git a/.config/nvim/lua/juancwu/keymaps.lua b/.config/nvim/lua/juancwu/keymaps.lua index a3cadb8..42b3e48 100644 --- a/.config/nvim/lua/juancwu/keymaps.lua +++ b/.config/nvim/lua/juancwu/keymaps.lua @@ -1,7 +1,12 @@ vim.g.mapleader = " " +-- easy escape +vim.keymap.set("i", "", "", { noremap = true, silent = true }) +vim.keymap.set("v", "", "", { noremap = true, silent = true }) +vim.keymap.set("n", "", "", { noremap = true, silent = true }) + -- open the explorer -vim.keymap.set("n", "e", "Ex") +vim.keymap.set("n", "e", "Ex") -- move highlighted lines vim.keymap.set("v", "J", ":m '>+1gv=gv") @@ -21,8 +26,10 @@ vim.keymap.set("n", "N", "Nzzzv") -- do not copy with x, for god sake, WHY copy something that is being deleted?? vim.keymap.set("n", "x", "\"_x") --- smile +-- smile :) vim.keymap.set("n", "Q", "") +vim.keymap.set("n", "q", "", { noremap = true }) +vim.keymap.set("n", "q", "q", { noremap = true }) -- select and replace vim.keymap.set("n", "s", [[:%s/\<\>//gI]]) @@ -32,8 +39,8 @@ vim.keymap.set("n", "dd", "\"_dd") vim.keymap.set("n", "dd", "dd") -- cut line, under my control -- copy/paste to/from system clipboard -vim.keymap.set({"n", "v"}, "y", "\"+y") -vim.keymap.set({"n", "v"}, "p", "\"+p") +vim.keymap.set({ "n", "v" }, "y", "\"+y") +vim.keymap.set({ "n", "v" }, "p", "\"+p") -- increment/decrement a count, helpful for changing indeces vim.keymap.set("n", "+", "") @@ -51,7 +58,7 @@ vim.keymap.set("n", "db", "vbd") vim.keymap.set("n", "", "ggG") -- select all -- split pane -vim.keymap.set("n", "ss", ":splitw", { silent = true }) -- horizontal +vim.keymap.set("n", "ss", ":splitw", { silent = true }) -- horizontal vim.keymap.set("n", "sv", ":vsplitw", { silent = true }) -- vertical -- pane movement @@ -66,3 +73,17 @@ vim.keymap.set("n", "", "<") vim.keymap.set("n", "", ">") vim.keymap.set("n", "", "+") vim.keymap.set("n", "", "-") + +-- my arrow keys babyyyy +vim.keymap.set("i", "", "", { noremap = true }) +vim.keymap.set("i", "", "", { noremap = true }) +vim.keymap.set("i", "", "", { noremap = true }) +vim.keymap.set("i", "", "", { noremap = true }) + +-- terminal keymaps +vim.keymap.set("t", "", "", { noremap = true }) +vim.keymap.set("t", "", "bd!", { noremap = true }) +vim.keymap.set("n", "", "termi", { noremap = true }) + +-- lazygit on floaterm +vim.keymap.set("n", "g", "FloatermNew lazygit", { noremap = true }) diff --git a/.config/nvim/lua/juancwu/packer.lua b/.config/nvim/lua/juancwu/packer.lua index 3fbc948..051c282 100644 --- a/.config/nvim/lua/juancwu/packer.lua +++ b/.config/nvim/lua/juancwu/packer.lua @@ -2,31 +2,67 @@ vim.cmd [[packadd packer.nvim]] return require('packer').startup(function(use) - -- Packer can manage itself - use 'wbthomason/packer.nvim' + -- Packer can manage itself + use 'wbthomason/packer.nvim' - -- Themes - use({ 'rose-pine/neovim', as = 'rose-pine' }) + -- Themes + use({ 'rose-pine/neovim', as = 'rose-pine' }) - -- Sweet LSP - use { - 'VonHeikemen/lsp-zero.nvim', - branch = 'v2.x', - requires = { - -- LSP Support - {'neovim/nvim-lspconfig'}, -- Required - { -- Optional - 'williamboman/mason.nvim', - run = function() - pcall(vim.cmd, 'MasonUpdate') - end, - }, - {'williamboman/mason-lspconfig.nvim'}, -- Optional + -- Sweet LSP + use { + 'VonHeikemen/lsp-zero.nvim', + branch = 'v2.x', + requires = { + -- LSP Support + { 'neovim/nvim-lspconfig' }, -- Required + { -- Optional + 'williamboman/mason.nvim', + run = function() + pcall(vim.cmd, 'MasonUpdate') + end, + }, + { 'williamboman/mason-lspconfig.nvim' }, -- Optional - -- Autocompletion - {'hrsh7th/nvim-cmp'}, -- Required - {'hrsh7th/cmp-nvim-lsp'}, -- Required - {'L3MON4D3/LuaSnip'}, -- Required + -- Autocompletion + { 'hrsh7th/nvim-cmp' }, -- Required + { 'hrsh7th/cmp-nvim-lsp' }, -- Required + { 'L3MON4D3/LuaSnip' }, -- Required + } } - } + + -- Telescope for the fine file navigation + use { + 'nvim-telescope/telescope.nvim', tag = '0.1.2', + requires = { { 'nvim-lua/plenary.nvim' } } + } + + use { + "nvim-telescope/telescope-file-browser.nvim", + requires = { "nvim-telescope/telescope.nvim", "nvim-lua/plenary.nvim" } + } + + use('nvim-treesitter/nvim-treesitter', { run = ':TSUpdate' }) + + use { + 'nvim-lualine/lualine.nvim', + requires = { 'nvim-tree/nvim-web-devicons', opt = true } + } + + -- autopairs, complete brackets + use { + "windwp/nvim-autopairs", + config = function() require("nvim-autopairs").setup {} end + } + + -- auto closing tags + use "windwp/nvim-ts-autotag" + + -- quick navigation between files, harpoon + use 'ThePrimeagen/harpoon' + + -- shows a history to undo + use 'mbbill/undotree' + + -- float window for terminal commands + use 'voldikss/vim-floaterm' end)