diff --git a/init.lua b/init.lua index 6519791..212d522 100644 --- a/init.lua +++ b/init.lua @@ -1,6 +1,6 @@ -require 'config.options' -require 'config.keymaps' -require 'config.autocommands' +require 'options' +require 'keymaps' +require 'autocommands' local lazypath = vim.fn.stdpath 'data' .. '/lazy/lazy.nvim' @@ -15,7 +15,6 @@ end vim.opt.rtp:prepend(lazypath) require('lazy').setup { - require 'plugins.alpha', require 'plugins.colorscheme', require 'plugins.neo-tree', require 'plugins.bufferline', @@ -23,7 +22,6 @@ require('lazy').setup { require 'plugins.treesitter', require 'plugins.telescope', require 'plugins.lsp', - require 'plugins.dap', require 'plugins.formatting', require 'plugins.autocompletion', require 'plugins.gitsigns', diff --git a/lazy-lock.json b/lazy-lock.json index eb03575..37d7883 100644 --- a/lazy-lock.json +++ b/lazy-lock.json @@ -1,6 +1,5 @@ { "LuaSnip": { "branch": "master", "commit": "e808bee352d1a6fcf902ca1a71cee76e60e24071" }, - "alpha-nvim": { "branch": "main", "commit": "de72250e054e5e691b9736ee30db72c65d560771" }, "bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" }, "cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" }, "cmp-nvim-lsp": { "branch": "main", "commit": "39e2eda76828d88b773cc27a3f61d2ad782c922d" }, @@ -12,6 +11,7 @@ "friendly-snippets": { "branch": "main", "commit": "efff286dd74c22f731cdec26a70b46e5b203c619" }, "gitsigns.nvim": { "branch": "main", "commit": "863903631e676b33e8be2acb17512fdc1b80b4fb" }, "indent-blankline.nvim": { "branch": "master", "commit": "e7a4442e055ec953311e77791546238d1eaae507" }, + "kanagawa.nvim": { "branch": "master", "commit": "aef7f5cec0a40dbe7f3304214850c472e2264b10" }, "lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" }, "lualine.nvim": { "branch": "master", "commit": "f4f791f67e70d378a754d02da068231d2352e5bc" }, "mason-lspconfig.nvim": { "branch": "main", "commit": "25c11854aa25558ee6c03432edfa0df0217324be" }, @@ -20,12 +20,7 @@ "neo-tree.nvim": { "branch": "v3.x", "commit": "5d172e8315444dbc32867d1c7b04d8e7e68ec4e1" }, "nui.nvim": { "branch": "main", "commit": "53e907ffe5eedebdca1cd503b00aa8692068ca46" }, "nvim-cmp": { "branch": "main", "commit": "ae644feb7b67bf1ce4260c231d1d4300b19c6f30" }, - "nvim-colorizer.lua": { "branch": "master", "commit": "a065833f35a3a7cc3ef137ac88b5381da2ba302e" }, - "nvim-dap": { "branch": "master", "commit": "52302f02fea3a490e55475de52fa4deb8af2eb11" }, - "nvim-dap-ui": { "branch": "master", "commit": "bc81f8d3440aede116f821114547a476b082b319" }, - "nvim-dap-virtual-text": { "branch": "master", "commit": "df66808cd78b5a97576bbaeee95ed5ca385a9750" }, "nvim-lspconfig": { "branch": "master", "commit": "0678aa439b82965daf03679cd146e84f10e299c3" }, - "nvim-nio": { "branch": "master", "commit": "21f5324bfac14e22ba26553caf69ec76ae8a7662" }, "nvim-treesitter": { "branch": "master", "commit": "d1e1f17cea23f14cbe230635b9bb654a835f02d7" }, "nvim-web-devicons": { "branch": "master", "commit": "56f17def81478e406e3a8ec4aa727558e79786f3" }, "nvim-window-picker": { "branch": "main", "commit": "0dfef64eaf063e1cd27983ab11a30e7bc5b74fac" }, @@ -35,7 +30,6 @@ "telescope-ui-select.nvim": { "branch": "master", "commit": "6e51d7da30bd139a6950adf2a47fda6df9fa06d2" }, "telescope.nvim": { "branch": "0.1.x", "commit": "a0bbec21143c7bc5f8bb02e0005fa0b982edc026" }, "todo-comments.nvim": { "branch": "main", "commit": "ae0a2afb47cf7395dc400e5dc4e05274bf4fb9e0" }, - "tokyonight.nvim": { "branch": "main", "commit": "2c85fad417170d4572ead7bf9fdd706057bd73d7" }, "typescript-tools.nvim": { "branch": "master", "commit": "35e397ce467bedbbbb5bfcd0aa79727b59a08d4a" }, "vim-bbye": { "branch": "master", "commit": "25ef93ac5a87526111f43e5110675032dbcacf56" }, "vim-fugitive": { "branch": "master", "commit": "b068eaf1e6cbe35d1ac100d435cd7f7b74a5c87d" }, diff --git a/lua/autocommands.lua b/lua/autocommands.lua new file mode 100644 index 0000000..b03ae8c --- /dev/null +++ b/lua/autocommands.lua @@ -0,0 +1,59 @@ +local augroup = vim.api.nvim_create_augroup("UserConfig", {}) + +-- Highlight yanked text + +vim.api.nvim_create_autocmd("TextYankPost", { + group = augroup, + callback = function() + vim.highlight.on_yank() + end, +}) + +-- Return to last edit position when opening files + +vim.api.nvim_create_autocmd("BufReadPost", { + group = augroup, + callback = function() + local mark = vim.api.nvim_buf_get_mark(0, '"') + local lcount = vim.api.nvim_buf_line_count(0) + local line = mark[1] + local ft = vim.bo.filetype + if line > 0 and line <= lcount + and vim.fn.index({ "commit", "gitrebase", "xxd" }, ft) == -1 + and not vim.o.diff then + pcall(vim.api.nvim_win_set_cursor, 0, mark) + end + end, +}) + +-- Auto-close terminal when process exits + +vim.api.nvim_create_autocmd("TermClose", { + group = augroup, + callback = function() + if vim.v.event.status == 0 then + vim.api.nvim_buf_delete(0, {}) + end + end, +}) + +-- Auto-resize splits when window is resized + +vim.api.nvim_create_autocmd("VimResized", { + group = augroup, + callback = function() + vim.cmd("tabdo wincmd =") + end, +}) + +-- Create directories when saving files + +vim.api.nvim_create_autocmd("BufWritePre", { + group = augroup, + callback = function() + local dir = vim.fn.expand(':p:h') + if vim.fn.isdirectory(dir) == 0 then + vim.fn.mkdir(dir, 'p') + end + end, +}) diff --git a/lua/config/autocommands.lua b/lua/config/autocommands.lua deleted file mode 100644 index cd670fe..0000000 --- a/lua/config/autocommands.lua +++ /dev/null @@ -1,10 +0,0 @@ --- Highlight when yanking (copying) text --- Try it with `yap` in normal mode --- See `:help vim.highlight.on_yank()` -vim.api.nvim_create_autocmd('TextYankPost', { - desc = 'Highlight when yanking (copying) text', - group = vim.api.nvim_create_augroup('kickstart-highlight-yank', { clear = true }), - callback = function() - vim.highlight.on_yank() - end, -}) diff --git a/lua/config/options.lua b/lua/config/options.lua deleted file mode 100644 index 8c13722..0000000 --- a/lua/config/options.lua +++ /dev/null @@ -1,47 +0,0 @@ -vim.g.loaded_netrw = 1 -vim.g.loaded_netrwPlugin = 1 -vim.wo.number = true -vim.o.winborder = "single" -vim.o.autoread = true -vim.o.relativenumber = true -vim.o.clipboard = 'unnamedplus' -vim.o.wrap = false -vim.o.linebreak = true -vim.o.mouse = 'a' -vim.o.autoindent = true -vim.o.ignorecase = true -vim.o.smartcase = true -vim.o.shiftwidth = 2 -vim.o.tabstop = 2 -vim.o.softtabstop = 2 -vim.o.expandtab = true -vim.o.scrolloff = 4 -vim.o.sidescrolloff = 8 -vim.o.cursorline = false -vim.o.splitbelow = true -vim.o.splitright = true -vim.o.hlsearch = false -vim.o.showmode = false -vim.opt.termguicolors = true -vim.o.whichwrap = 'bs<>[]hl' -vim.o.numberwidth = 4 -vim.o.swapfile = false -vim.o.smartindent = true -vim.o.showtabline = 2 -vim.o.backspace = 'indent,eol,start' -vim.o.pumheight = 10 -vim.o.conceallevel = 0 -vim.wo.signcolumn = 'yes' -vim.o.fileencoding = 'utf-8' -vim.o.cmdheight = 1 -vim.o.breakindent = true -vim.o.updatetime = 250 -vim.o.timeoutlen = 300 -vim.o.backup = false -vim.o.writebackup = false -vim.o.undofile = true -vim.o.completeopt = 'menuone,noselect' -vim.opt.shortmess:append 'c' -vim.opt.iskeyword:append '-' -vim.opt.formatoptions:remove { 'c', 'r', 'o' } -vim.opt.runtimepath:remove '/usr/share/vim/vimfiles' diff --git a/lua/config/keymaps.lua b/lua/keymaps.lua similarity index 52% rename from lua/config/keymaps.lua rename to lua/keymaps.lua index 00055df..53b82c8 100644 --- a/lua/config/keymaps.lua +++ b/lua/keymaps.lua @@ -1,44 +1,57 @@ +-- Leader Map + vim.g.mapleader = ' ' vim.g.maplocalleader = ' ' - vim.keymap.set({ 'n', 'v' }, '', '', { silent = true }) local opts = { noremap = true, silent = true } --- Improvement to up and down movements -vim.keymap.set('n', '', 'zz', opts) -vim.keymap.set('n', '', 'zz', opts) +-- Movement --- Resize with arrows +vim.keymap.set("n", "n", "nzzzv", { desc = "Next search result (centered)" }) +vim.keymap.set("n", "N", "Nzzzv", { desc = "Previous search result (centered)" }) +vim.keymap.set("n", "", "zz", { desc = "Half page down (centered)" }) +vim.keymap.set("n", "", "zz", { desc = "Half page up (centered)" }) +vim.keymap.set("n", "", ":m .+1==", { desc = "Move line down" }) +vim.keymap.set("n", "", ":m .-2==", { desc = "Move line up" }) +vim.keymap.set("v", "", ":m '>+1gv=gv", { desc = "Move selection down" }) +vim.keymap.set("v", "", ":m '<-2gv=gv", { desc = "Move selection up" }) + +-- Split Navigation + +vim.keymap.set('n', 'vs', 'v', { desc = 'Split window vertically' }) +vim.keymap.set('n', 'hs', 's', { desc = 'Split window horizontally' }) +vim.keymap.set('n', 'es', '=', { desc = 'Equalize splits' }) +vim.keymap.set('n', 'xs', ':close', { desc = 'Close split' }) +vim.keymap.set('n', '', ':wincmd k', opts) +vim.keymap.set('n', '', ':wincmd j', opts) +vim.keymap.set('n', '', ':wincmd h', opts) +vim.keymap.set('n', '', ':wincmd l', opts) vim.keymap.set('n', '', ':resize -2', opts) vim.keymap.set('n', '', ':resize +2', opts) vim.keymap.set('n', '', ':vertical resize -2', opts) vim.keymap.set('n', '', ':vertical resize +2', opts) --- Window management -vim.keymap.set('n', 'vs', 'v', { desc = 'Split window vertically' }) -- split window vertically -vim.keymap.set('n', 'hs', 's', { desc = 'Split window horizontally' }) -- split window horizontally -vim.keymap.set('n', 'es', '=', { desc = 'Equalize splits' }) -- make split windows equal width & height -vim.keymap.set('n', 'xs', ':close', { desc = 'Close split' }) -- close current split window +-- Buffer Navigation --- Navigate between splits -vim.keymap.set('n', '', ':wincmd k', opts) -vim.keymap.set('n', '', ':wincmd j', opts) -vim.keymap.set('n', '', ':wincmd h', opts) -vim.keymap.set('n', '', ':wincmd l', opts) - --- Toggle line wrapping -vim.keymap.set('n', 'lw', 'set wrap!', opts) - --- Stay in indent mode -vim.keymap.set('v', '<', '', '>gv', opts) +vim.keymap.set("n", "bn", ":bnext", { desc = "Next buffer" }) +vim.keymap.set("n", "bp", ":bprevious", { desc = "Previous buffer" }) -- Diagnostic keymaps + vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, { desc = 'Go to previous diagnostic message' }) vim.keymap.set('n', ']d', vim.diagnostic.goto_next, { desc = 'Go to next diagnostic message' }) vim.keymap.set('n', 'd', vim.diagnostic.open_float, { desc = 'Open floating diagnostic message' }) vim.keymap.set('n', 'q', vim.diagnostic.setloclist, { desc = 'Open diagnostics list' }) --- Greatest remap ever +-- Convenience + +vim.keymap.set({ "n", "v" }, "d", '"_d', { desc = "Delete without yanking" }) vim.keymap.set("x", "p", [["_dP]], { desc = 'Paste previously yanked' }) +vim.keymap.set('n', 'lw', 'set wrap!', opts) +vim.keymap.set('v', '<', '', '>gv', opts) +vim.keymap.set("n", "c", ":nohlsearch", { desc = "Clear search highlights" }) +vim.keymap.set("n", "J", "mzJ`z", { desc = "Join lines and keep cursor position" }) +vim.keymap.set("n", "rc", ":e $MYVIMRC", { desc = "Edit config" }) +vim.keymap.set("n", "rl", ":so $MYVIMRC", { desc = "Reload config" }) diff --git a/lua/options.lua b/lua/options.lua new file mode 100644 index 0000000..7e9d184 --- /dev/null +++ b/lua/options.lua @@ -0,0 +1,97 @@ +-- Theme + +vim.cmd.colorscheme("lunaperche") + +-- Basic + +vim.wo.number = true +vim.o.relativenumber = true +vim.o.cursorline = true +vim.o.wrap = false +vim.o.scrolloff = 10 +vim.o.sidescrolloff = 8 + +-- Indentation + +vim.o.tabstop = 2 +vim.o.softtabstop = 2 +vim.o.shiftwidth = 2 +vim.o.expandtab = true +vim.o.smartindent = true +vim.o.autoindent = true + +-- Search + +vim.o.ignorecase = true +vim.o.smartcase = true +vim.o.autoindent = true + +-- Visual + +vim.o.winborder = "single" +vim.o.showmode = false +vim.o.termguicolors = true +vim.o.signcolumn = "yes" +vim.o.showmatch = true +vim.o.matchtime = 2 +vim.o.cmdheight = 1 +vim.o.completeopt = "menuone,noinsert,noselect" +vim.o.pumheight = 10 +vim.opt.concealcursor = "" +vim.o.lazyredraw = true +vim.o.synmaxcol = 300 + +-- File + +vim.o.backup = false +vim.o.writebackup = false +vim.o.swapfile = false +vim.o.undofile = true +vim.o.undodir = vim.fn.expand("~/.vim/undofir") +vim.o.updatetime = 300 +vim.o.timeoutlen = 500 +vim.o.ttimeoutlen = 0 +vim.o.autoread = true +vim.o.autowrite = false + +-- Behavior + +vim.o.hidden = true +vim.o.errorbells = true +vim.o.backspace = "indent,eol,start" +vim.o.autochdir = false +vim.o.selection = "exclusive" +vim.o.mouse = "a" +vim.o.modifiable = true +vim.o.encoding = "UTF-8" +vim.opt.clipboard:append 'unnamedplus' +vim.opt.iskeyword:append '-' +vim.opt.path:append '**' + +-- Folding + +vim.o.foldmethod = "expr" +vim.o.foldexpr = "nvim_treesitter#foldexpr()" +vim.o.foldlevel = 99 + +-- Split Behavior + +vim.o.splitbelow = true +vim.o.splitright = true + +-- Command Line Completion + +vim.o.wildmenu = true +vim.o.wildmode = "longest:full,full" + +-- Performance + +vim.o.redrawtime = 10000 +vim.o.maxmempattern = 20000 + +-- Undo Directory + +local undodir = vim.fn.expand("~/.vim/undodir") +if vim.fn.isdirectory(undodir) == 0 then + vim.fn.mkdir(undodir, "p") +end diff --git a/lua/plugins/alpha.lua b/lua/plugins/alpha.lua deleted file mode 100644 index 66f9570..0000000 --- a/lua/plugins/alpha.lua +++ /dev/null @@ -1,26 +0,0 @@ -return { - 'goolord/alpha-nvim', - dependencies = { - 'nvim-tree/nvim-web-devicons', - }, - - config = function() - local alpha = require 'alpha' - local dashboard = require 'alpha.themes.startify' - - dashboard.section.header.val = { - [[ ]], - [[  ]], - [[ ████ ██████ █████ ██ ]], - [[ ███████████ █████  ]], - [[ █████████ ███████████████████ ███ ███████████ ]], - [[ █████████ ███ █████████████ █████ ██████████████ ]], - [[ █████████ ██████████ █████████ █████ █████ ████ █████ ]], - [[ ███████████ ███ ███ █████████ █████ █████ ████ █████ ]], - [[ ██████ █████████████████████ ████ █████ █████ ████ ██████ ]], - [[ ]], - } - - alpha.setup(dashboard.opts) - end, -} diff --git a/lua/plugins/colorscheme.lua b/lua/plugins/colorscheme.lua index bb3fec4..2cc4be0 100644 --- a/lua/plugins/colorscheme.lua +++ b/lua/plugins/colorscheme.lua @@ -1,9 +1,9 @@ return { - 'folke/tokyonight.nvim', + 'rebelot/kanagawa.nvim', lazy = false, priority = 1000, init = function() - vim.cmd.colorscheme 'tokyonight-night' + vim.cmd.colorscheme 'kanagawa-dragon' vim.cmd.hi 'Comment gui=none' end, } diff --git a/lua/plugins/dap.lua b/lua/plugins/dap.lua deleted file mode 100644 index 6e356fc..0000000 --- a/lua/plugins/dap.lua +++ /dev/null @@ -1,119 +0,0 @@ -return { - { - 'mfussenegger/nvim-dap', - dependencies = { - 'rcarriga/nvim-dap-ui', - 'theHamsta/nvim-dap-virtual-text', - 'nvim-neotest/nvim-nio', - 'williamboman/mason.nvim', - }, - config = function() - local dap = require 'dap' - local ui = require 'dapui' - - require('dapui').setup() - require('nvim-dap-virtual-text').setup() - - dap.adapters.chrome = { - type = 'executable', - command = 'node', - args = { os.getenv 'HOME' .. '/.local/share/nvim/mason/packages/chrome-debug-adapter/out/src/chromeDebug.js' }, - } - dap.adapters.delve = { - type = 'server', - host = '127.0.0.1', - port = 38697, - } - - dap.configurations.javascriptreact = { - { - type = 'chrome', - request = 'launch', - name = 'Launch in Brave', - webRoot = '${workspaceFolder}', - runtimeExecutable = '/snap/bin/brave', - sourceMaps = true, - userDataDir = true, - url = function() - local co = coroutine.running() - return coroutine.create(function() - vim.ui.input({ - prompt = 'Enter URL: ', - default = 'http://localhost:3000', - }, function(url) - if url == nil or url == '' then - return - else - coroutine.resume(co, url) - end - end) - end) - end, - }, - } - dap.configurations.typescriptreact = { - { - type = 'chrome', - request = 'launch', - name = 'Launch in Brave', - webRoot = '${workspaceFolder}', - runtimeExecutable = '/snap/bin/brave', - sourceMaps = true, - userDataDir = true, - url = function() - local co = coroutine.running() - return coroutine.create(function() - vim.ui.input({ - prompt = 'Enter URL: ', - default = 'http://localhost:3000', - }, function(url) - if url == nil or url == '' then - return - else - coroutine.resume(co, url) - end - end) - end) - end, - }, - } - dap.configurations.go = { - { - type = 'delve', - name = 'Debug', - mode = 'remote', - request = 'attach', - program = '${file}', - }, - } - - vim.keymap.set('n', 'b', dap.toggle_breakpoint) - vim.keymap.set('n', 'gb', dap.run_to_cursor) - - -- Eval var under cursor - vim.keymap.set('n', '?', function() - require('dapui').eval(nil, { enter = true }) - end) - - vim.keymap.set('n', '', dap.continue) - vim.keymap.set('n', '', dap.step_into) - vim.keymap.set('n', '', dap.step_over) - vim.keymap.set('n', '', dap.step_out) - vim.keymap.set('n', '', dap.step_back) - vim.keymap.set('n', '', dap.restart) - - dap.listeners.before.attach.dapui_config = function() - ui.open() - end - dap.listeners.before.launch.dapui_config = function() - ui.open() - end - dap.listeners.before.event_terminated.dapui_config = function() - ui.close() - end - dap.listeners.before.event_exited.dapui_config = function() - ui.close() - end - end, - }, -} diff --git a/lua/plugins/lualine.lua b/lua/plugins/lualine.lua index 429bc2a..a908dad 100644 --- a/lua/plugins/lualine.lua +++ b/lua/plugins/lualine.lua @@ -40,7 +40,6 @@ return { require('lualine').setup { options = { icons_enabled = true, - theme = 'nord', -- Set theme based on environment variable -- Some useful glyphs: -- https://www.nerdfonts.com/cheat-sheet --         diff --git a/lua/plugins/misc.lua b/lua/plugins/misc.lua index f877262..d89c9cd 100644 --- a/lua/plugins/misc.lua +++ b/lua/plugins/misc.lua @@ -29,18 +29,4 @@ return { opts = { signs = false }, }, { 'folke/todo-comments.nvim', event = 'VimEnter', dependencies = { 'nvim-lua/plenary.nvim' }, opts = { signs = false } }, - { - 'github/copilot.vim', - config = function() - vim.keymap.set('n', 'ec', ':Copilot enable', { desc = 'Enable Copilot', noremap = false, silent = true }) - vim.keymap.set('n', 'dc', ':Copilot disable', { desc = 'Disable Copilot', noremap = false, silent = true }) - vim.keymap.set('i', '', 'copilot#Accept("\\")', { - expr = true, - replace_keycodes = false, - silent = true, - noremap = true, - }) - vim.g.copilot_no_tab_map = true - end, - }, }