From d47035b8c73f2be3ff857ca7f962f55397b5e85c Mon Sep 17 00:00:00 2001 From: hex Date: Mon, 12 May 2025 07:48:47 +0200 Subject: [PATCH] feat: config --- .gitignore | 8 ++ .neoconf.json | 15 +++ README.md | 14 +++ after/plugin/lsp.lua | 63 +++++++++++++ after/plugin/telescope.lua | 23 +++++ after/plugin/theme.lua | 27 ++++++ after/plugin/treesitter.lua | 16 ++++ init.lua | 34 +++++++ lua/hex/installer.lua | 41 +++++++++ lua/hex/keymaps.lua | 1 + plugin/packer_compiled.lua | 179 ++++++++++++++++++++++++++++++++++++ 11 files changed, 421 insertions(+) create mode 100644 .gitignore create mode 100644 .neoconf.json create mode 100644 README.md create mode 100644 after/plugin/lsp.lua create mode 100644 after/plugin/telescope.lua create mode 100644 after/plugin/theme.lua create mode 100644 after/plugin/treesitter.lua create mode 100644 init.lua create mode 100644 lua/hex/installer.lua create mode 100644 lua/hex/keymaps.lua create mode 100644 plugin/packer_compiled.lua diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cc5457a --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +tt.* +.tests +doc/tags +debug +.repro +foo.* +*.log +data diff --git a/.neoconf.json b/.neoconf.json new file mode 100644 index 0000000..7c48087 --- /dev/null +++ b/.neoconf.json @@ -0,0 +1,15 @@ +{ + "neodev": { + "library": { + "enabled": true, + "plugins": true + } + }, + "neoconf": { + "plugins": { + "lua_ls": { + "enabled": true + } + } + } +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..a40c41a --- /dev/null +++ b/README.md @@ -0,0 +1,14 @@ +# My neovim configuration. + +## Keybinds + +LEADER -> space bar +INSERT -> : Confirm selection (auto-complete) +NORMAL -> K: hover() +NORMAL -> gd: definition() +NORMAL -> gD: declaration() +NORMAL -> gs: signature_help() +NORMAL -> gf: Format yo code!! +NORMAL -> : Find files +NORMAL -> g: Browse through git files +NORMAL -> d: Browse through buffers diff --git a/after/plugin/lsp.lua b/after/plugin/lsp.lua new file mode 100644 index 0000000..abdb1a9 --- /dev/null +++ b/after/plugin/lsp.lua @@ -0,0 +1,63 @@ +local lspconfig = require('lspconfig') +local fidget = require('fidget') +local nlcmp = require('cmp_nvim_lsp') +local cmp = require('cmp') +local map = vim.keymap.set + +vim.opt.signcolumn = 'yes' + +local lc_defaults = lspconfig.util.default_config +lc_defaults.capabilities = vim.tbl_deep_extend( + 'force', + lc_defaults.capabilities, + nlcmp.default_capabilities() +) + +cmp.setup({ + sources = { + { name = 'nvim_lsp' }, + { name = 'buffer', keyword_length = 3 }, -- only start autocompleting after a few chars typed + }, + snippet = { + expand = function(args) + -- You need Neovim v0.10 to use vim.snippet + vim.snippet.expand(args.body) + end, + }, + mapping = cmp.mapping.preset.insert({ + [''] = cmp.mapping.confirm({ select = true }), + }), + window = { + completion = cmp.config.window.bordered(), + documentation = cmp.config.window.bordered(), + } +}) + +vim.api.nvim_create_autocmd('LspAttach', { + desc = 'LSP actions (apparently)', + callback = function(event) + fidget.notify("LSP attached to current buffer.", nil, nil) + + local opts = { buffer = event.buf } + + map('n', 'K', 'lua vim.lsp.buf.hover()', opts) + map('n', 'gd', 'lua vim.lsp.buf.definition()', opts) + map('n', 'gD', 'lua vim.lsp.buf.declaration()', opts) + map('n', 'gs', 'lua vim.lsp.buf.signature_help()', opts) + map('n', 'gf', 'lua vim.lsp.buf.format({async = false, timeout_ms = 10000})', opts) + end, +}) + + +-- lspconfig.lua_ls.setup({}) +-- lspconfig.rust_analyzer.setup({}) + +require('mason').setup({}) +require('mason-lspconfig').setup({ + ensure_installed = { "lua_ls", "gopls", "html", "nim_langserver", "eslint", "clangd" }, + handlers = { + function(svn) + lspconfig[svn].setup({}) + end, + } +}) diff --git a/after/plugin/telescope.lua b/after/plugin/telescope.lua new file mode 100644 index 0000000..e32a616 --- /dev/null +++ b/after/plugin/telescope.lua @@ -0,0 +1,23 @@ +local telescope = require('telescope') +local builtin = require('telescope.builtin') + +local ignore_pattern = {"*.class", "*.jar"} +local final_command = {"find", "."} + +for _, patt in ipairs(ignore_pattern) do + table.insert(final_command, "-not") + table.insert(final_command, "-name") + table.insert(final_command, patt) +end + +telescope.setup({ + pickers = { + find_files = { + find_command = final_command, + } + } +}) + +vim.keymap.set('n', '', builtin.find_files, {}) +vim.keymap.set('n', 'g', builtin.git_files, {}) +vim.keymap.set('n', 'd', builtin.buffers, {}) diff --git a/after/plugin/theme.lua b/after/plugin/theme.lua new file mode 100644 index 0000000..66a888c --- /dev/null +++ b/after/plugin/theme.lua @@ -0,0 +1,27 @@ +require("rose-pine").setup({ + variant = "auto", + dark_variant = "moon", + extend_background_behind_borders = true, + + enable = { + terminal = true, + legacy_highlights = true, -- Improve compatibility for previous versions of Neovim + migrations = true, -- Handle deprecated options automatically + }, + + styles = { + bold = true, + italic = true, + transparency = true, + }, + +}) + +require('lualine').setup({}) + +function ColorMyPencils(color) -- skidded from theprimeagen + colors = color or "catppuccin" + vim.cmd.colorscheme(color) +end + +ColorMyPencils("rose-pine") diff --git a/after/plugin/treesitter.lua b/after/plugin/treesitter.lua new file mode 100644 index 0000000..f62f194 --- /dev/null +++ b/after/plugin/treesitter.lua @@ -0,0 +1,16 @@ +require'nvim-treesitter.configs'.setup { + -- A list of parser names, or "all" (the listed parsers MUST always be installed) + ensure_installed = { "typescript", "javascript", "c", "lua", "vim", "vimdoc", "query", "markdown", "markdown_inline" }, + + -- 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, + additional_vim_regex_highlighting = false, + }, +} diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..6ef533c --- /dev/null +++ b/init.lua @@ -0,0 +1,34 @@ +require("hex.installer") +require("hex.keymaps") + +vim.g.mapleader = " " + +local opt = vim.opt + +opt.nu = true +opt.relativenumber = true + +opt.tabstop = 4 +opt.softtabstop = 4 +opt.shiftwidth = 4 +opt.expandtab = true + +opt.smartindent = true + +opt.swapfile = false +opt.backup = false + +-- thanks primeagen, for this awesome feature i did not know about yet lol +opt.undodir = os.getenv("HOME") .. "/.vim/undodir" +opt.undofile = true + +opt.hlsearch = true +opt.incsearch = true + +opt.termguicolors = true + +opt.scrolloff = 8 + +opt.updatetime = 50 + +opt.colorcolumn = "80" diff --git a/lua/hex/installer.lua b/lua/hex/installer.lua new file mode 100644 index 0000000..489b63d --- /dev/null +++ b/lua/hex/installer.lua @@ -0,0 +1,41 @@ +vim.cmd [[packadd packer.nvim]] + +return require('packer').startup(function(use) + use 'wbthomason/packer.nvim' + + use 'j-hui/fidget.nvim' + + use { + 'nvim-telescope/telescope.nvim', tag = '0.1.8', + -- or , branch = '0.1.x', + requires = { { 'nvim-lua/plenary.nvim' } }, + config = function () + require('telescope').setup({ + pickers = { + buffers = { + show_all_buffers = true, + }, + }, + }) + end + } + + use('mrcjkb/rustaceanvim') + + use('nvim-treesitter/nvim-treesitter', { run = ':TSUpdate' }) + + use({"nvim-lualine/lualine.nvim"}) + + use({ 'neovim/nvim-lspconfig' }) + use({ 'hrsh7th/nvim-cmp' }) + use({ 'hrsh7th/cmp-nvim-lsp' }) + use({ 'hrsh7th/cmp-buffer' }) + use { + 'williamboman/mason-lspconfig.nvim', + requires = { { 'williamboman/mason.nvim' } } + } + + use({'mfussenegger/nvim-jdtls'}) + + use ({"rose-pine/neovim"}) +end) diff --git a/lua/hex/keymaps.lua b/lua/hex/keymaps.lua new file mode 100644 index 0000000..6c2be15 --- /dev/null +++ b/lua/hex/keymaps.lua @@ -0,0 +1 @@ +vim.keymap.set("n", "f", vim.cmd.Ex) diff --git a/plugin/packer_compiled.lua b/plugin/packer_compiled.lua new file mode 100644 index 0000000..af60aca --- /dev/null +++ b/plugin/packer_compiled.lua @@ -0,0 +1,179 @@ +-- Automatically generated packer.nvim plugin loader code + +if vim.api.nvim_call_function('has', {'nvim-0.5'}) ~= 1 then + vim.api.nvim_command('echohl WarningMsg | echom "Invalid Neovim version for packer.nvim! | echohl None"') + return +end + +vim.api.nvim_command('packadd packer.nvim') + +local no_errors, error_msg = pcall(function() + +_G._packer = _G._packer or {} +_G._packer.inside_compile = true + +local time +local profile_info +local should_profile = false +if should_profile then + local hrtime = vim.loop.hrtime + profile_info = {} + time = function(chunk, start) + if start then + profile_info[chunk] = hrtime() + else + profile_info[chunk] = (hrtime() - profile_info[chunk]) / 1e6 + end + end +else + time = function(chunk, start) end +end + +local function save_profiles(threshold) + local sorted_times = {} + for chunk_name, time_taken in pairs(profile_info) do + sorted_times[#sorted_times + 1] = {chunk_name, time_taken} + end + table.sort(sorted_times, function(a, b) return a[2] > b[2] end) + local results = {} + for i, elem in ipairs(sorted_times) do + if not threshold or threshold and elem[2] > threshold then + results[i] = elem[1] .. ' took ' .. elem[2] .. 'ms' + end + end + if threshold then + table.insert(results, '(Only showing plugins that took longer than ' .. threshold .. ' ms ' .. 'to load)') + end + + _G._packer.profile_output = results +end + +time([[Luarocks path setup]], true) +local package_path_str = "/home/hex/.cache/nvim/packer_hererocks/2.1.1716656478/share/lua/5.1/?.lua;/home/hex/.cache/nvim/packer_hererocks/2.1.1716656478/share/lua/5.1/?/init.lua;/home/hex/.cache/nvim/packer_hererocks/2.1.1716656478/lib/luarocks/rocks-5.1/?.lua;/home/hex/.cache/nvim/packer_hererocks/2.1.1716656478/lib/luarocks/rocks-5.1/?/init.lua" +local install_cpath_pattern = "/home/hex/.cache/nvim/packer_hererocks/2.1.1716656478/lib/lua/5.1/?.so" +if not string.find(package.path, package_path_str, 1, true) then + package.path = package.path .. ';' .. package_path_str +end + +if not string.find(package.cpath, install_cpath_pattern, 1, true) then + package.cpath = package.cpath .. ';' .. install_cpath_pattern +end + +time([[Luarocks path setup]], false) +time([[try_loadstring definition]], true) +local function try_loadstring(s, component, name) + local success, result = pcall(loadstring(s), name, _G.packer_plugins[name]) + if not success then + vim.schedule(function() + vim.api.nvim_notify('packer.nvim: Error running ' .. component .. ' for ' .. name .. ': ' .. result, vim.log.levels.ERROR, {}) + end) + end + return result +end + +time([[try_loadstring definition]], false) +time([[Defining packer_plugins]], true) +_G.packer_plugins = { + catppuccin = { + config = { "\27LJ\2\nÆ\1\0\1\6\0\v\0\24\f\1\0\0X\1\1€'\1\0\0007\1\1\0006\1\2\0009\1\3\0019\1\4\1\18\3\0\0B\1\2\0016\1\2\0009\1\5\0019\1\6\1)\3\0\0'\4\a\0005\5\b\0B\1\4\0016\1\2\0009\1\5\0019\1\6\1)\3\0\0'\4\t\0005\5\n\0B\1\4\1K\0\1\0\1\0\1\abg\tnone\16NormalFloat\1\0\1\abg\tnone\vNormal\16nvim_set_hl\bapi\16colorscheme\bcmd\bvim\vcolors\15catppuccin+\1\0\2\0\2\0\0053\0\0\0007\0\1\0006\0\1\0B\0\1\1K\0\1\0\19ColorMyPencils\0\0" }, + loaded = true, + path = "/home/hex/.local/share/nvim/site/pack/packer/start/catppuccin", + url = "https://github.com/catppuccin/nvim" + }, + ["cmp-buffer"] = { + loaded = true, + path = "/home/hex/.local/share/nvim/site/pack/packer/start/cmp-buffer", + url = "https://github.com/hrsh7th/cmp-buffer" + }, + ["cmp-nvim-lsp"] = { + loaded = true, + path = "/home/hex/.local/share/nvim/site/pack/packer/start/cmp-nvim-lsp", + url = "https://github.com/hrsh7th/cmp-nvim-lsp" + }, + ["fidget.nvim"] = { + loaded = true, + path = "/home/hex/.local/share/nvim/site/pack/packer/start/fidget.nvim", + url = "https://github.com/j-hui/fidget.nvim" + }, + ["love2d.nvim"] = { + loaded = true, + path = "/home/hex/.local/share/nvim/site/pack/packer/start/love2d.nvim", + url = "https://github.com/S1M0N38/love2d.nvim" + }, + ["mason-lspconfig.nvim"] = { + loaded = true, + path = "/home/hex/.local/share/nvim/site/pack/packer/start/mason-lspconfig.nvim", + url = "https://github.com/williamboman/mason-lspconfig.nvim" + }, + ["mason.nvim"] = { + loaded = true, + path = "/home/hex/.local/share/nvim/site/pack/packer/start/mason.nvim", + url = "https://github.com/williamboman/mason.nvim" + }, + ["nvim-cmp"] = { + loaded = true, + path = "/home/hex/.local/share/nvim/site/pack/packer/start/nvim-cmp", + url = "https://github.com/hrsh7th/nvim-cmp" + }, + ["nvim-jdtls"] = { + loaded = true, + path = "/home/hex/.local/share/nvim/site/pack/packer/start/nvim-jdtls", + url = "https://github.com/mfussenegger/nvim-jdtls" + }, + ["nvim-lspconfig"] = { + loaded = true, + path = "/home/hex/.local/share/nvim/site/pack/packer/start/nvim-lspconfig", + url = "https://github.com/neovim/nvim-lspconfig" + }, + ["nvim-treesitter"] = { + loaded = true, + path = "/home/hex/.local/share/nvim/site/pack/packer/start/nvim-treesitter", + url = "https://github.com/nvim-treesitter/nvim-treesitter" + }, + ["packer.nvim"] = { + loaded = true, + path = "/home/hex/.local/share/nvim/site/pack/packer/start/packer.nvim", + url = "https://github.com/wbthomason/packer.nvim" + }, + ["plenary.nvim"] = { + loaded = true, + path = "/home/hex/.local/share/nvim/site/pack/packer/start/plenary.nvim", + url = "https://github.com/nvim-lua/plenary.nvim" + }, + rustaceanvim = { + loaded = true, + path = "/home/hex/.local/share/nvim/site/pack/packer/start/rustaceanvim", + url = "https://github.com/mrcjkb/rustaceanvim" + }, + ["telescope.nvim"] = { + config = { "\27LJ\2\nˆ\1\0\0\5\0\b\0\v6\0\0\0'\2\1\0B\0\2\0029\0\2\0005\2\6\0005\3\4\0005\4\3\0=\4\5\3=\3\a\2B\0\2\1K\0\1\0\fpickers\1\0\1\fpickers\0\fbuffers\1\0\1\fbuffers\0\1\0\1\21show_all_buffers\2\nsetup\14telescope\frequire\0" }, + loaded = true, + path = "/home/hex/.local/share/nvim/site/pack/packer/start/telescope.nvim", + url = "https://github.com/nvim-telescope/telescope.nvim" + } +} + +time([[Defining packer_plugins]], false) +-- Config for: catppuccin +time([[Config for catppuccin]], true) +try_loadstring("\27LJ\2\nÆ\1\0\1\6\0\v\0\24\f\1\0\0X\1\1€'\1\0\0007\1\1\0006\1\2\0009\1\3\0019\1\4\1\18\3\0\0B\1\2\0016\1\2\0009\1\5\0019\1\6\1)\3\0\0'\4\a\0005\5\b\0B\1\4\0016\1\2\0009\1\5\0019\1\6\1)\3\0\0'\4\t\0005\5\n\0B\1\4\1K\0\1\0\1\0\1\abg\tnone\16NormalFloat\1\0\1\abg\tnone\vNormal\16nvim_set_hl\bapi\16colorscheme\bcmd\bvim\vcolors\15catppuccin+\1\0\2\0\2\0\0053\0\0\0007\0\1\0006\0\1\0B\0\1\1K\0\1\0\19ColorMyPencils\0\0", "config", "catppuccin") +time([[Config for catppuccin]], false) +-- Config for: telescope.nvim +time([[Config for telescope.nvim]], true) +try_loadstring("\27LJ\2\nˆ\1\0\0\5\0\b\0\v6\0\0\0'\2\1\0B\0\2\0029\0\2\0005\2\6\0005\3\4\0005\4\3\0=\4\5\3=\3\a\2B\0\2\1K\0\1\0\fpickers\1\0\1\fpickers\0\fbuffers\1\0\1\fbuffers\0\1\0\1\21show_all_buffers\2\nsetup\14telescope\frequire\0", "config", "telescope.nvim") +time([[Config for telescope.nvim]], false) + +_G._packer.inside_compile = false +if _G._packer.needs_bufread == true then + vim.cmd("doautocmd BufRead") +end +_G._packer.needs_bufread = false + +if should_profile then save_profiles() end + +end) + +if not no_errors then + error_msg = error_msg:gsub('"', '\\"') + vim.api.nvim_command('echohl ErrorMsg | echom "Error in packer_compiled: '..error_msg..'" | echom "Please check your config for correctness" | echohl None') +end