From 1449181ce47d76ef2d13cfddb23733bd40a8bb98 Mon Sep 17 00:00:00 2001 From: lulusilly Date: Sun, 24 Aug 2025 12:35:16 -0400 Subject: [PATCH] Added neovim config --- nvim/init.lua | 123 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 nvim/init.lua diff --git a/nvim/init.lua b/nvim/init.lua new file mode 100644 index 0000000..f07a18a --- /dev/null +++ b/nvim/init.lua @@ -0,0 +1,123 @@ +-- =================================== +-- | General Neovim Configuration | +-- =================================== +vim.opt.number = true -- Show line numbers +vim.opt.relativenumber = true -- Show relative line numbers +vim.opt.tabstop = 4 -- A tab is 4 spaces +vim.opt.shiftwidth = 4 -- Indent is 4 spaces +vim.opt.expandtab = true -- Use spaces instead of tabs +vim.opt.termguicolors = true -- Enable terminal colors +vim.opt.scrolloff = 8 -- Lines above/below cursor +vim.opt.signcolumn = "yes" -- Always show the sign column + +-- Set the leader key to space. This is a crucial step for custom mappings. +vim.g.mapleader = " " + +-- =================================== +-- | Plugin Management with lazy.nvim| +-- =================================== +-- The configuration below bootstraps lazy.nvim if it's not already installed. +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", lazypath + }) +end +vim.opt.rtp:prepend(lazypath) + +-- Setup the plugins you need. +require("lazy").setup({ + -- === The colorscheme plugin is specified here. === + -- Gruvbox theme plugin. It will be automatically installed by lazy.nvim. + { 'ellisonleao/gruvbox.nvim', config = function() + -- Ensure the background is set to 'dark' for the gruvbox colorscheme. + vim.o.background = 'dark' + -- Load the colorscheme. + vim.cmd.colorscheme("gruvbox") + end }, + + -- Treesitter plugin for syntax highlighting. + { "nvim-treesitter/nvim-treesitter", build = ":TSUpdate" }, + + -- Autocomplete plugins + { "hrsh7th/nvim-cmp" }, + { "hrsh7th/cmp-nvim-lsp" }, + { "L3MON4D3/LuaSnip" }, + { "neovim/nvim-lspconfig" }, + + -- Plugin to automatically close paired characters like (), {}, [], and "" + { 'echasnovski/mini.pairs' }, + + -- File tree and icon plugins + { + 'nvim-tree/nvim-tree.lua', + version = '*', + lazy = false, + dependencies = { + 'nvim-tree/nvim-web-devicons', + }, + config = function() + -- The setup call for the nvim-tree plugin. + require('nvim-tree').setup {} + end + }, +}) + +-- Treesitter configuration. +require("nvim-treesitter.configs").setup({ + highlight = { enable = true }, + -- auto_install = false, + -- You can specify languages to install with `ensure_installed`. + -- e.g., ensure_installed = { "lua", "python", "javascript" }, +}) + +-- Autocomplete (cmp) configuration. +local cmp = require("cmp") +cmp.setup({ + snippet = { + expand = function(args) require("luasnip").lsp_expand(args.body) end, + }, + mapping = cmp.mapping.preset.insert({ + [""] = cmp.mapping.select_next_item(), + [""] = cmp.mapping.select_prev_item(), + [""] = cmp.mapping.confirm({ select = true }), + }), + sources = { + { name = "nvim_lsp" }, + }, +}) + +-- Mini.pairs configuration. +-- This simple setup is all that's needed for the basic functionality. +require('mini.pairs').setup({}) + +-- =================================== +-- | Custom Keymaps | +-- =================================== +-- Keymaps are custom commands mapped to a specific key combination. +-- The "" prefix will be replaced with your leader key, which is "space". + +-- Normal mode keymaps +-- Save the current file. +vim.keymap.set('n', 'w', ':w', { desc = 'Save file' }) + +-- Force quit the current window without saving. +vim.keymap.set('n', 'q', ':q!', { desc = 'Force quit window' }) + +-- Save and quit. +vim.keymap.set('n', 'x', ':wq', { desc = 'Save and quit' }) + +-- Save all open buffers. +vim.keymap.set('n', 'wa', ':wa', { desc = 'Save all buffers' }) + +-- Close all windows except the current one. +vim.keymap.set('n', 'o', ':only', { desc = 'Close all other windows' }) + +-- Toggle the file tree. +vim.keymap.set('n', 'e', ':NvimTreeToggle', { desc = 'Toggle file tree' }) + +-- Select the entire file content. +vim.keymap.set('n', 'a', 'ggVG', { desc = 'Select entire file' }) + +-- You can add more keymaps here as you get more comfortable!