From 7d30927c71be1d3a3352128a5c4b79db667f453c Mon Sep 17 00:00:00 2001 From: coast Date: Thu, 29 May 2025 22:37:51 +0200 Subject: [PATCH] Add .config/nvim/init.lua --- .config/nvim/init.lua | 231 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 231 insertions(+) create mode 100644 .config/nvim/init.lua diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua new file mode 100644 index 0000000..02db013 --- /dev/null +++ b/.config/nvim/init.lua @@ -0,0 +1,231 @@ +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) + +-- PREPEND YOUR LOCAL CONFIG PATH TO package.path for patched project_nvim.project +local config_path = vim.fn.stdpath("config") .. "/lua/?.lua;" .. vim.fn.stdpath("config") .. "/lua/?/init.lua;" +package.path = config_path .. package.path + +require("lazy").setup({ + + -- colorscheme plugin + { + "morhetz/gruvbox", + lazy = false, + }, + + -- startup screen + { + "goolord/alpha-nvim", + dependencies = { "nvim-tree/nvim-web-devicons" }, + }, + + -- icons + "nvim-tree/nvim-web-devicons", + + -- fuzzy finder + { + "nvim-telescope/telescope.nvim", + dependencies = { "nvim-lua/plenary.nvim" }, + config = function() + require("telescope").setup { + defaults = { + layout_strategy = "horizontal", + sorting_strategy = "ascending", + prompt_prefix = "🔍 ", + } + } + end, + }, + + -- treesitter + { + "nvim-treesitter/nvim-treesitter", + build = ":TSUpdate", + config = function() + require("nvim-treesitter.configs").setup { + ensure_installed = { "lua", "python", "bash", "javascript", "json" }, + highlight = { enable = true }, + indent = { enable = true }, + } + end, + }, + + -- statusline + { + "nvim-lualine/lualine.nvim", + dependencies = { "nvim-tree/nvim-web-devicons" }, + config = function() + require("lualine").setup { + options = { + theme = "gruvbox", + icons_enabled = false, + section_separators = "", + component_separators = "", + }, + sections = { + lualine_a = { "mode" }, + lualine_b = { "branch" }, + lualine_c = { "filename" }, + lualine_x = { "filetype" }, + lualine_y = { "progress" }, + lualine_z = { "location" }, + }, + inactive_sections = { + lualine_c = { "filename" }, + lualine_x = { "location" }, + }, + } + end, + }, + + -- git signs + { + "lewis6991/gitsigns.nvim", + dependencies = { "nvim-lua/plenary.nvim" }, + config = function() + require("gitsigns").setup() + end, + }, + + -- commenting helper + { + "numToStr/Comment.nvim", + config = function() + require("Comment").setup() + end, + }, + + -- autopairs + { + "windwp/nvim-autopairs", + config = function() + require("nvim-autopairs").setup{} + end, + }, + + -- project management (patched) + { + "ahmedkhalf/project.nvim", + config = function() + -- Force reload patched project module before setup + package.loaded["project_nvim.project"] = nil + package.loaded["project_nvim"] = nil + + require("project_nvim").setup {} + require("telescope").load_extension("projects") + end, + }, + + -- bufferline + { + "akinsho/bufferline.nvim", + dependencies = "nvim-tree/nvim-web-devicons", + config = function() + require("bufferline").setup { + options = { + separator_style = "slant", + show_close_icon = false, + show_buffer_close_icons = false, + diagnostics = "nvim_lsp", + } + } + end, + }, + + -- which-key + { + "folke/which-key.nvim", + config = function() + require("which-key").setup {} + end, + }, + + -- LSP and completion + { + "williamboman/mason.nvim", + config = true, + }, + { + "williamboman/mason-lspconfig.nvim", + dependencies = { "williamboman/mason.nvim", "neovim/nvim-lspconfig" }, + config = true, + }, + { + "neovim/nvim-lspconfig", + }, + { + "hrsh7th/nvim-cmp", + dependencies = { + "hrsh7th/cmp-nvim-lsp", + "hrsh7th/cmp-buffer", + "hrsh7th/cmp-path", + "hrsh7th/cmp-cmdline", + "L3MON4D3/LuaSnip", + "saadparwaiz1/cmp_luasnip", + }, + config = function() + local cmp = require("cmp") + local luasnip = require("luasnip") + + cmp.setup { + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end, + }, + mapping = cmp.mapping.preset.insert({ + [""] = cmp.mapping.scroll_docs(-4), + [""] = cmp.mapping.scroll_docs(4), + [""] = cmp.mapping.complete(), + [""] = cmp.mapping.abort(), + [""] = cmp.mapping.confirm({ select = true }), + }), + sources = cmp.config.sources({ + { name = "nvim_lsp" }, + { name = "luasnip" }, + }, { + { name = "buffer" }, + }), + } + end, + }, + +}) + +-- Your existing vim options (you can keep or remove as you want) +vim.o.swapfile = false +vim.o.backup = false +vim.o.undofile = true +vim.o.updatetime = 200 +vim.o.timeoutlen = 300 + +vim.wo.number = true +vim.wo.relativenumber = true + +vim.o.clipboard = "unnamedplus" + +vim.o.splitright = true +vim.o.splitbelow = true + +vim.o.tabstop = 4 +vim.o.shiftwidth = 4 +vim.o.expandtab = true +vim.o.smartindent = true + +vim.o.autochdir = true +vim.o.showmode = false + +-- Load your fennel config file safely +pcall(require, "config") + +vim.cmd("colorscheme gruvbox") \ No newline at end of file