commit 743bb89475b7658d149f284a0e79f04648d134b0 Author: frosty Date: Thu Jul 4 16:00:58 2024 -0400 first version of stuff diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..3b2ab23 --- /dev/null +++ b/init.lua @@ -0,0 +1,20 @@ +-- Call other files +require('options') +require('keymaps') +require('autocmds') + +-- Initialize Lazy +local lazy_path = vim.fn.stdpath('data') .. '/lazy/lazy.nvim' +if not (vim.uv or vim.loop).fs_stat(lazy_path) then + vim.fn.system({ + 'git', + 'clone', + '--filter=blob:none', + 'https://github.com/folke/lazy.nvim.git', + '--branch=stable', + lazy_path + }) +end +vim.opt.rtp:prepend(lazy_path) + +require('lazy').setup({ spec = 'plugins' }) diff --git a/lua/autocmds.lua b/lua/autocmds.lua new file mode 100644 index 0000000..89aefdb --- /dev/null +++ b/lua/autocmds.lua @@ -0,0 +1,29 @@ +vim.api.nvim_create_autocmd('TextYankPost', { + callback = function() + vim.highlight.on_yank({ higroup = 'IncSearch', timeout = 250 }) + end +}) + +vim.api.nvim_create_autocmd('BufWritePre', { + callback = function() + vim.lsp.buf.format() + end +}) + +vim.api.nvim_create_autocmd('FileType', { + pattern = { 'lua' }, + callback = function() + vim.o.shiftwidth = 2 + vim.o.softtabstop = 2 + vim.o.tabstop = 2 + end +}) + +vim.api.nvim_create_autocmd('FileType', { + pattern = { 'sh', 'zsh' }, + callback = function() + vim.o.shiftwidth = 4 + vim.o.softtabstop = 4 + vim.o.tabstop = 4 + end +}) diff --git a/lua/keymaps.lua b/lua/keymaps.lua new file mode 100644 index 0000000..4a9df64 --- /dev/null +++ b/lua/keymaps.lua @@ -0,0 +1,38 @@ +-- Set leader +vim.g.mapleader = ' ' + +-- Unset keymaps +vim.keymap.set('n', '', '') +vim.keymap.set('n', 'Q', '') +vim.keymap.set('n', 'q', '') + +-- File management +vim.keymap.set('n', 'pf', ':Telescope find_files') +vim.keymap.set('n', 'po', ':Telescope oldfiles') +vim.keymap.set('n', 'pg', ':Telescope live_grep') +vim.keymap.set('n', 'pe', ':Ex') + +-- Other Telescope commands +vim.keymap.set('n', 'pS', ':Telescope search_history') +vim.keymap.set('n', 'ph', ':Telescope command_history') + +-- Buffer management +vim.keymap.set('n', 'pr', ':Telescope buffers') +vim.keymap.set('n', 'ww', ':bd') +vim.keymap.set('n', 'wW', ':bd!') +vim.keymap.set('n', 'n', ':enew') +vim.keymap.set('n', '', ':bnext') +vim.keymap.set('n', '', ':bprev') + +-- File actions +vim.keymap.set('n', 'r', ':w') +vim.keymap.set('n', 'R', ':e $MYVIMRC') + +-- Lazy +vim.keymap.set('n', 'l', ':Lazy') + +-- Neogit +vim.keymap.set('n', 'gg', ':Neogit') +vim.keymap.set('n', 'gc', ':Neogit commit') + +vim.keymap.set('n', 'h', ':Alpha') diff --git a/lua/options.lua b/lua/options.lua new file mode 100644 index 0000000..06a7865 --- /dev/null +++ b/lua/options.lua @@ -0,0 +1,6 @@ +vim.o.number = true +vim.o.relativenumber = true +vim.o.cursorline = true +vim.o.termguicolors = true +vim.opt.showmode = false +vim.opt.clipboard = 'unnamedplus' diff --git a/lua/plugins/init.lua b/lua/plugins/init.lua new file mode 100644 index 0000000..c178839 --- /dev/null +++ b/lua/plugins/init.lua @@ -0,0 +1,199 @@ +return { + { + 'neovim/nvim-lspconfig', + dependencies = { 'hrsh7th/cmp-nvim-lsp' }, + config = function() + local lspconfig = require('lspconfig') + local capabilities = require('cmp_nvim_lsp').default_capabilities() + + lspconfig['lua_ls'].setup({ + capabilities = capabilities, + settings = { + Lua = { + diagnostics = { + globals = { 'vim' } + }, + format = { + enable = true, + defaultConfig = { quote_style = 'single' } + } + } + } + }) + lspconfig['rust_analyzer'].setup({ + capabilities = capabilities, + }) + lspconfig['bashls'].setup({ + capabilities = capabilities, + settings = { + filetypes = { 'sh', 'zsh' } + } + }) + end + }, + + { + 'hrsh7th/nvim-cmp', + dependencies = { 'neovim/nvim-lspconfig', 'hrsh7th/cmp-nvim-lsp', '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.confirm({ + behavior = cmp.ConfirmBehavior.Replace, + select = true, + }), + [''] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + elseif luasnip.expand_or_jumpable() then + luasnip.expand_or_jump() + else + fallback() + end + end, { 'i', 's' }), + [''] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_prev_item() + elseif luasnip.jumpable(-1) then + luasnip.jump(-1) + else + fallback() + end + end, { 'i', 's' }), + }), + sources = { + { name = 'nvim_lsp' }, + { name = 'luasnip' }, + { name = 'buffer' } + } + }) + end + }, + + { + 'ellisonleao/gruvbox.nvim', + priority = 1000, + init = function() + vim.o.background = 'dark' + vim.cmd('colorscheme gruvbox') + vim.api.nvim_set_hl(0, 'Normal', { bg = 'none' }) + end + }, + + { + 'lukas-reineke/indent-blankline.nvim', + main = 'ibl', + opts = { + scope = { + enabled = false + } + } + }, + + { + 'nvim-lualine/lualine.nvim', + dependencies = { 'nvim-tree/nvim-web-devicons', 'archibate/lualine-time' }, + opts = { + options = { + icons_enabled = false, + section_separators = '', + component_separators = '' + }, + sections = { + lualine_a = { 'mode' }, + lualine_b = { 'branch', 'diff', 'diagnostics' }, + lualine_c = { 'filename' }, + lualine_x = { 'filetype' }, + lualine_y = { 'progress' }, + lualine_z = { 'location' } + } + } + }, + + { + 'goolord/alpha-nvim', + dependencies = { 'nvim-lua/plenary.nvim' }, + config = function() + local alpha = require('alpha') + local dashboard = require('alpha.themes.dashboard') + + dashboard.section.buttons.val = { + dashboard.button('SPC p f', 'Find files'), + dashboard.button('SPC p o', 'Recent files'), + dashboard.button('SPC p e', 'File explorer'), + dashboard.button('SPC p g', 'File grep'), + dashboard.button('SPC l', 'Lazy'), + dashboard.button('Z Q', 'Quit') + } + + alpha.setup(dashboard.opts) + vim.cmd('autocmd FileType alpha setlocal nofoldenable') + end + }, + + { + 'nvim-treesitter/nvim-treesitter', + build = ':TSUpdate', + opts = { + ensure_installed = { 'c', 'lua', 'vim', 'yaml', 'toml', 'markdown', 'vimdoc', 'bash', 'html', 'python', 'haskell', 'rust' }, + sync_install = false, + highlight = { enable = true }, + indent = { enable = true } + } + }, + + { + 'nvim-telescope/telescope.nvim', + dependencies = { 'nvim-lua/plenary.nvim' }, + opts = { + pickers = { + find_files = { + find_command = { 'rg', '--files', '--hidden', '-g', '!.git' } + }, + buffers = { + show_all_buffers = true + }, + mappings = { + n = { ['q'] = require('telescope.actions').close }, + } + } + } + }, + + { + 'numToStr/Comment.nvim', + event = 'VeryLazy', + config = true + }, + + { + 'folke/todo-comments.nvim', + dependencies = { 'nvim-lua/plenary.nvim' }, + opts = { + signs = false + } + }, + + { + 'windwp/nvim-autopairs', + event = 'InsertEnter', + config = true + }, + + { + 'NeogitOrg/neogit', + dependencies = { 'nvim-lua/plenary.nvim', 'sindrets/diffview.nvim', 'nvim-telescope/telescope.nvim' }, + config = true + } +}