From f974ca81bab834105fc490792288aded773f3e6c Mon Sep 17 00:00:00 2001 From: JackJ30 Date: Fri, 2 May 2025 12:12:22 -0400 Subject: started nvim config --- .config/nvim/.gitignore | 1 + .config/nvim/init.lua | 6 + .config/nvim/lua/lazy-nvim.lua | 35 ++++ .config/nvim/lua/misc.lua | 40 ++++ .config/nvim/lua/plugins/autopair.lua | 8 + .config/nvim/lua/plugins/colorscheme.lua | 8 + .config/nvim/lua/plugins/indentbars.lua | 16 ++ .config/nvim/lua/plugins/telescope.lua | 27 +++ .config/nvim/lua/plugins/treesitter.lua | 27 +++ .config/nvim/lua/plugins/undotree.lua | 6 + .config/nvim/lua/remap.lua | 31 +++ .config/nvim/lua/settings.lua | 23 +++ .config/nvim/oldinit.lua | 319 +++++++++++++++++++++++++++++++ 13 files changed, 547 insertions(+) create mode 100644 .config/nvim/.gitignore create mode 100644 .config/nvim/init.lua create mode 100644 .config/nvim/lua/lazy-nvim.lua create mode 100644 .config/nvim/lua/misc.lua create mode 100644 .config/nvim/lua/plugins/autopair.lua create mode 100644 .config/nvim/lua/plugins/colorscheme.lua create mode 100644 .config/nvim/lua/plugins/indentbars.lua create mode 100644 .config/nvim/lua/plugins/telescope.lua create mode 100644 .config/nvim/lua/plugins/treesitter.lua create mode 100644 .config/nvim/lua/plugins/undotree.lua create mode 100644 .config/nvim/lua/remap.lua create mode 100644 .config/nvim/lua/settings.lua create mode 100644 .config/nvim/oldinit.lua diff --git a/.config/nvim/.gitignore b/.config/nvim/.gitignore new file mode 100644 index 0000000..e033bc6 --- /dev/null +++ b/.config/nvim/.gitignore @@ -0,0 +1 @@ +lazy-lock.json diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua new file mode 100644 index 0000000..dc60c4f --- /dev/null +++ b/.config/nvim/init.lua @@ -0,0 +1,6 @@ +require("misc") +require("settings") +require("remap") + +-- add plugins +require("lazy-nvim") diff --git a/.config/nvim/lua/lazy-nvim.lua b/.config/nvim/lua/lazy-nvim.lua new file mode 100644 index 0000000..f5ee74c --- /dev/null +++ b/.config/nvim/lua/lazy-nvim.lua @@ -0,0 +1,35 @@ +-- Bootstrap lazy.nvim +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" +if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end +end +vim.opt.rtp:prepend(lazypath) + +-- Make sure to setup `mapleader` and `maplocalleader` before +-- loading lazy.nvim so that mappings are correct. +-- This is also a good place to setup other settings (vim.opt) +vim.g.mapleader = " " +vim.g.maplocalleader = "\\" + +-- Setup lazy.nvim +require("lazy").setup({ + spec = { + -- import your plugins + { import = "plugins" }, + }, + -- Configure any other settings here. See the documentation for more details. + -- colorscheme that will be used when installing plugins. + install = { colorscheme = { "habamax" } }, + -- automatically check for plugin updates + checker = { enabled = true }, +}) diff --git a/.config/nvim/lua/misc.lua b/.config/nvim/lua/misc.lua new file mode 100644 index 0000000..588e8c9 --- /dev/null +++ b/.config/nvim/lua/misc.lua @@ -0,0 +1,40 @@ +function FormatBuffer() + local save_cursor = vim.fn.getpos('.') + local save_view = vim.fn.winsaveview() + + vim.api.nvim_command('normal! ggVG') + vim.api.nvim_command('normal! ==') + + vim.fn.setpos('.', save_cursor) + vim.fn.winrestview(save_view) +end + +-- vim.api.nvim_create_autocmd({ "BufWritePre" }, { +-- pattern = {"*"}, +-- callback = function() +-- local save_cursor = vim.fn.getpos(".") +-- vim.cmd([[%s/\s\+$//e]]) +-- vim.fn.setpos(".", save_cursor) +-- end, +-- }) + +-- vim.api.nvim_create_autocmd({ "BufWritePost" }, { +-- pattern = { "*.tex" }, +-- callback = function() +-- vim.cmd("!pdflatex *.tex") +-- end, +-- }) + +vim.filetype.add { + extension = { + rasi = 'rasi', + vert = "glsl", + frag = "glsl", + }, + pattern = { + ['.*/waybar/config'] = 'jsonc', + ['.*/mako/config'] = 'dosini', + ['.*/kitty/*.conf'] = 'bash', + ['.*/hypr/.*%.conf'] = 'hyprlang', + }, +} diff --git a/.config/nvim/lua/plugins/autopair.lua b/.config/nvim/lua/plugins/autopair.lua new file mode 100644 index 0000000..40222e1 --- /dev/null +++ b/.config/nvim/lua/plugins/autopair.lua @@ -0,0 +1,8 @@ +return { + "windwp/nvim-autopairs", + opt = true, + event = "InsertEnter", + config = function() + require("nvim-autopairs").setup() + end +} diff --git a/.config/nvim/lua/plugins/colorscheme.lua b/.config/nvim/lua/plugins/colorscheme.lua new file mode 100644 index 0000000..5fcd21a --- /dev/null +++ b/.config/nvim/lua/plugins/colorscheme.lua @@ -0,0 +1,8 @@ +return { + "https://github.com/Mofiqul/dracula.nvim", + lazy=false, + priority=1000, + config = function() + vim.cmd.colorscheme("dracula") + end +} diff --git a/.config/nvim/lua/plugins/indentbars.lua b/.config/nvim/lua/plugins/indentbars.lua new file mode 100644 index 0000000..0a98358 --- /dev/null +++ b/.config/nvim/lua/plugins/indentbars.lua @@ -0,0 +1,16 @@ +return { + "lukas-reineke/indent-blankline.nvim", + event = { "VeryLazy" }, + config = function() + vim.opt.list = true + vim.opt.listchars = { + tab = "| ", + } + require("ibl").setup({ + indent = { + tab_char = "|", + char = "|" + } + }) + end, +} diff --git a/.config/nvim/lua/plugins/telescope.lua b/.config/nvim/lua/plugins/telescope.lua new file mode 100644 index 0000000..d6ddca9 --- /dev/null +++ b/.config/nvim/lua/plugins/telescope.lua @@ -0,0 +1,27 @@ +return { + 'nvim-telescope/telescope.nvim', + dependencies = { 'nvim-lua/plenary.nvim' }, + config = function() + require('telescope').setup({ + defaults = { + sorting_strategy = "ascending", + layout_strategy = 'bottom_pane', + layout_config = { + height = 10, + }, + prompt_prefix = "", + selection_caret = "", + entry_prefix = "", + border = true, + borderchars = { "─", " ", " ", " ", "─", "─", " ", " " }, + preview = false, + }, + }) + local builtin = require('telescope.builtin') + vim.keymap.set('n', 'f', builtin.find_files, {}) + vim.keymap.set('n', 'r', builtin.live_grep, {}) + vim.keymap.set('n', 'b', function() + builtin.buffers({ sort_mru = true, ignore_current_buffer = true}) + end) + end +} diff --git a/.config/nvim/lua/plugins/treesitter.lua b/.config/nvim/lua/plugins/treesitter.lua new file mode 100644 index 0000000..6ac96af --- /dev/null +++ b/.config/nvim/lua/plugins/treesitter.lua @@ -0,0 +1,27 @@ +return { + 'nvim-treesitter/nvim-treesitter', + name = 'treesitter', + build = ':TSUpdate', + config = function() + require('nvim-treesitter.configs').setup({ + ensure_installed = { + "vimdoc", "c", "lua", "cpp", + "bash", "css", "glsl", "nasm", "haskell", + "hyprlang", "zig", + }, + sync_install = false, + + auto_install = true, + + indent = { + enable = true + }, + + highlight = { + enable = true, + + additional_vim_regex_highlighting = { "markdown" }, + }, + }) + end +} diff --git a/.config/nvim/lua/plugins/undotree.lua b/.config/nvim/lua/plugins/undotree.lua new file mode 100644 index 0000000..1404add --- /dev/null +++ b/.config/nvim/lua/plugins/undotree.lua @@ -0,0 +1,6 @@ +return { + "mbbill/undotree", + config = function() + vim.keymap.set("n", "u", vim.cmd.UndotreeToggle) + end +} diff --git a/.config/nvim/lua/remap.lua b/.config/nvim/lua/remap.lua new file mode 100644 index 0000000..6d842dc --- /dev/null +++ b/.config/nvim/lua/remap.lua @@ -0,0 +1,31 @@ +vim.g.mapleader = " " +vim.g.maplocalleader = "\\" + +-- vim.keymap.set("i", "", "") +-- vim.keymap.set("v", "<", "", ">gv") + +-- vim.keymap.set("v", "J", ":m '>+1gv=gv") +-- vim.keymap.set("v", "K", ":m '<-2gv=gv") + +-- vim.keymap.set("n", "k", ":bd") + +vim.keymap.set("n", "=", FormatBuffer) + +-- vim.keymap.set({"n", "v"}, "d", "\"_d") +vim.keymap.set("n", "p", "\"+p") +vim.keymap.set("v", "y", "\"+y") + +-- vim.keymap.set({"n", "i", "v", "s"}, "", "") + +vim.keymap.set("n", "=", FormatBuffer) + +-- insert mode moving +vim.keymap.set('i', '', '', opts) +vim.keymap.set('i', '', '', opts) +vim.keymap.set('i', '', '', opts) +vim.keymap.set('i', '', '', opts) + +-- C-g to escape +vim.keymap.set('i', '', '', opts) +vim.keymap.set('v', '', '', opts) diff --git a/.config/nvim/lua/settings.lua b/.config/nvim/lua/settings.lua new file mode 100644 index 0000000..e750225 --- /dev/null +++ b/.config/nvim/lua/settings.lua @@ -0,0 +1,23 @@ +vim.o.tabstop = 4 +vim.o.shiftwidth = 4 +vim.o.smartindent = true +vim.opt.undodir = os.getenv("HOME") .. "/.cache/nvim/undodir" +vim.opt.undofile = true +vim.opt.swapfile = false + +vim.opt.relativenumber = true +vim.opt.number = true + +vim.opt.scrolloff = 7 + +vim.opt.termguicolors = true +vim.opt.background = "dark" + +vim.opt.incsearch = true + +vim.opt.signcolumn = "no" +vim.opt.isfname:append("@-@") + +vim.opt.splitbelow = true +vim.opt.splitright = true + diff --git a/.config/nvim/oldinit.lua b/.config/nvim/oldinit.lua new file mode 100644 index 0000000..fafc8f8 --- /dev/null +++ b/.config/nvim/oldinit.lua @@ -0,0 +1,319 @@ +vim.g.mapleader = " " + +-- LAZY +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", + lazypath, + }) +end +vim.opt.rtp:prepend(lazypath) + +-- Packages +require("lazy").setup({ + { + "https://github.com/junegunn/fzf.vim", + dependencies = { + "https://github.com/junegunn/fzf", + }, + keys = { + { "", "Files", desc = "Find files" }, + { "b", "Buffers", desc = "Find buffers" }, + { "/", "Rg", desc = "Search project" }, + }, + }, + { + "https://github.com/stevearc/oil.nvim", + config = function() + require("oil").setup() + end, + keys = { + { "-", "Oil", desc = "Browse files from here" }, + }, + }, + { + "https://github.com/windwp/nvim-autopairs", + event = "InsertEnter", -- Only load when you enter Insert mode + config = function() + require("nvim-autopairs").setup() + end, + }, + { + "https://github.com/numToStr/Comment.nvim", + event = "VeryLazy", -- Special lazy.nvim event for things that can load later and are not important for the initial UI + config = function() + require("Comment").setup() + end, + }, + { + "https://github.com/tpope/vim-sleuth", + event = { "BufReadPost", "BufNewFile" }, -- Load after your file content + }, + { + "nvim-treesitter/nvim-treesitter", + build = ":TSUpdate", + config = function () + local configs = require("nvim-treesitter.configs") + + configs.setup({ + ensure_installed = { "c", "lua", "html", "zig" }, + sync_install = false, + highlight = { enable = true }, + indent = { enable = true }, + incremental_selection = { + enable = true, + keymaps = { + node_incremental = "v", + node_decremental = "V", + }, + }, + }) + end + }, + { + "https://github.com/farmergreg/vim-lastplace", + event = "BufReadPost", + }, + { + "https://github.com/NeogitOrg/neogit", + dependencies = { + "nvim-lua/plenary.nvim", + "sindrets/diffview.nvim" + }, + cmd = "Neogit", -- Only load when you run the Neogit command + config = function() + require("neogit").setup() + end, + }, + { + "https://github.com/Mofiqul/dracula.nvim", + lazy=false, + priority=1000, + }, + { + "neovim/nvim-lspconfig", + dependencies = { + "williamboman/mason.nvim", + "williamboman/mason-lspconfig.nvim", + "L3MON4D3/LuaSnip", + 'saghen/blink.cmp', + }, + config = function() + local blink = require('blink.cmp') + local capabilities = vim.tbl_deep_extend( + "force", + {}, + vim.lsp.protocol.make_client_capabilities(), + blink.get_lsp_capabilities()) + require("mason").setup({ + PATH = "append", + }) + require("mason-lspconfig").setup({ + ensure_installed = { + "lua_ls", + "zls", + "texlab", + "clangd", + }, + handlers = { + function(server_name) -- default handler (optional) + require("lspconfig")[server_name].setup { + capabilities = capabilities + } + end, + ["zls"] = function () + vim.g.zig_fmt_parse_errors = 0 + vim.g.zig_fmt_autosave = 0 + local lspconfig = require("lspconfig") + lspconfig.zls.setup({ + capabilities = capabilities, + autoformat = false, + }) + end, + ["lua_ls"] = function() + local lspconfig = require("lspconfig") + lspconfig.lua_ls.setup { + capabilities = capabilities, + settings = { + Lua = { + runtime = { version = "Lua 5.1" }, + diagnostics = { + globals = { "bit", "vim", "it", "describe", "before_each", "after_each" }, + } + } + } + } + end, + } + }) + vim.diagnostic.config({ + -- update_in_insert = true, + float = { + focusable = false, + style = "minimal", + border = "rounded", + source = true, + header = "", + prefix = "", + }, + }) + vim.api.nvim_create_autocmd('LspAttach', { + callback = function(event) + local opts = {buffer = event.buf} + vim.keymap.set('n', 'K', vim.lsp.buf.hover, opts) + vim.keymap.set('n', 'gd', vim.lsp.buf.definition, opts) + vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, opts) + vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, opts) + vim.keymap.set('n', 'go', vim.lsp.buf.type_definition, opts) + vim.keymap.set('n', 'gr', vim.lsp.buf.references, opts) + vim.keymap.set('n', 'gs', vim.lsp.buf.signature_help, opts) + vim.keymap.set('n', '', vim.lsp.buf.rename, opts) + vim.keymap.set({'n', 'x'}, '', vim.lsp.buf.format, opts) + vim.keymap.set('n', '', vim.lsp.buf.code_action, opts) + end, + }) + end + }, + { + 'dnlhc/glance.nvim', + cmd = 'Glance' + }, + { + 'saghen/blink.cmp', + version = "*", + -- build = "cargo build --release", + opts = { + snippets = { preset = 'luasnip', }, + completion = { + keyword = { + range = 'prefix', + }, + trigger = { + -- show_in_snippet = false, + -- show_on_keyword = false, + -- show_on_trigger_character = false, + -- show_on_accept_on_trigger_character = false, + -- show_on_insert_on_trigger_character = false, + }, + list = { + selection = { + preselect = false, + auto_insert = false, + }, + }, + menu = { + draw = { + columns = { { "label", "label_description", gap = 1 }, { "kind" , "source_name", gap = 1} }, + }, + }, + documentation = { + auto_show = true, + }, + ghost_text = { + enabled = true, + }, + }, + fuzzy = { + prebuilt_binaries = { + download = true, + }, + }, + keymap = { + preset = 'default', + [''] = { 'accept', 'fallback' }, + [''] = { 'accept', 'fallback' }, + [''] = { 'show', 'select_and_accept', 'fallback' }, + }, + cmdline = { + completion = { + list = { + selection = { + preselect = false, + auto_insert = false, + }, + }, + }, + keymap = { + preset = 'cmdline', + [''] = { 'show', 'accept', 'fallback' }, + [''] = { 'accept', 'fallback' }, + [''] = { 'show', 'select_and_accept', 'fallback' }, + }, + }, + sources = { + default = { 'lsp', 'path', 'snippets', 'buffer' }, + providers = { + buffer = { + name = 'Buffer', + module = 'blink.cmp.sources.buffer', + opts = { + -- all buffers of same filetype + get_bufnrs = function() + return vim + .iter(vim.api.nvim_list_bufs()) + :filter( + function (buf) + return vim.bo[buf].buftype ~= 'nofile' + and vim.bo[buf].filetype == vim.bo.filetype + end) + :totable() + end, + } + }, + } + }, + }, + } +}) + +vim.cmd.colorscheme("dracula") + +vim.opt.number = true +vim.opt.relativenumber = true + +vim.opt.splitbelow = true +vim.opt.splitright = true + +vim.o.shiftwidth = 4 +vim.o.tabstop = 4; +vim.o.expandtab = false +vim.opt.signcolumn = "no" +vim.o.smartindent = true; + +vim.opt.swapfile = false +vim.opt.backup = false +vim.opt.undodir = os.getenv("HOME") .. "/.cache/nvim/undodir" +vim.opt.undofile = true + +vim.opt.pumheight = 8 + +vim.opt.scrolloff = 7 + +vim.opt.list = true +vim.opt.listchars = { tab = " " } + +-- Map movement keys in insert and command modes +local map = vim.api.nvim_set_keymap +local opts = { noremap = true } + +-- Insert mode mappings +map('i', '', '', opts) +map('i', '', '', opts) +map('i', '', '', opts) +map('i', '', '', opts) + +-- Command-line mode mappings +map('c', '', '', opts) +map('c', '', '', opts) +map('c', '', '', opts) +map('c', '', '', opts) + +map('i', '', '', opts) +map('v', '', '', opts) + +vim.keymap.set('n', 'gR', 'Glance references') -- cgit v1.2.3