From 2c5d8e8693fe9d34d3a36c0947388c3d28c9f93e Mon Sep 17 00:00:00 2001 From: Tomasz Zaleski Date: Sun, 21 Apr 2024 10:34:39 +0200 Subject: [PATCH] init.lua: add basic custom configuration --- init.lua | 219 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 124 insertions(+), 95 deletions(-) diff --git a/init.lua b/init.lua index 3c70d736..3db06b89 100644 --- a/init.lua +++ b/init.lua @@ -1,89 +1,3 @@ ---[[ - -===================================================================== -==================== READ THIS BEFORE CONTINUING ==================== -===================================================================== -======== .-----. ======== -======== .----------------------. | === | ======== -======== |.-""""""""""""""""""-.| |-----| ======== -======== || || | === | ======== -======== || KICKSTART.NVIM || |-----| ======== -======== || || | === | ======== -======== || || |-----| ======== -======== ||:Tutor || |:::::| ======== -======== |'-..................-'| |____o| ======== -======== `"")----------------(""` ___________ ======== -======== /::::::::::| |::::::::::\ \ no mouse \ ======== -======== /:::========| |==hjkl==:::\ \ required \ ======== -======== '""""""""""""' '""""""""""""' '""""""""""' ======== -======== ======== -===================================================================== -===================================================================== - -What is Kickstart? - - Kickstart.nvim is *not* a distribution. - - Kickstart.nvim is a starting point for your own configuration. - The goal is that you can read every line of code, top-to-bottom, understand - what your configuration is doing, and modify it to suit your needs. - - Once you've done that, you can start exploring, configuring and tinkering to - make Neovim your own! That might mean leaving Kickstart just the way it is for a while - or immediately breaking it into modular pieces. It's up to you! - - If you don't know anything about Lua, I recommend taking some time to read through - a guide. One possible example which will only take 10-15 minutes: - - https://learnxinyminutes.com/docs/lua/ - - After understanding a bit more about Lua, you can use `:help lua-guide` as a - reference for how Neovim integrates Lua. - - :help lua-guide - - (or HTML version): https://neovim.io/doc/user/lua-guide.html - -Kickstart Guide: - - TODO: The very first thing you should do is to run the command `:Tutor` in Neovim. - - If you don't know what this means, type the following: - - - - : - - Tutor - - - - (If you already know the Neovim basics, you can skip this step.) - - Once you've completed that, you can continue working through **AND READING** the rest - of the kickstart init.lua. - - Next, run AND READ `:help`. - This will open up a help window with some basic information - about reading, navigating and searching the builtin help documentation. - - This should be the first place you go to look when you're stuck or confused - with something. It's one of my favorite Neovim features. - - MOST IMPORTANTLY, we provide a keymap "sh" to [s]earch the [h]elp documentation, - which is very useful when you're not exactly sure of what you're looking for. - - I have left several `:help X` comments throughout the init.lua - These are hints about where to find more information about the relevant settings, - plugins or Neovim features used in Kickstart. - - NOTE: Look for lines like this - - Throughout the file. These are for you, the reader, to help you understand what is happening. - Feel free to delete them once you know what you're doing, but they should serve as a guide - for when you are first encountering a few different constructs in your Neovim config. - -If you experience any errors while trying to install kickstart, run `:checkhealth` for more info. - -I hope you enjoy your Neovim journey, -- TJ - -P.S. You can delete this when you're done too. It's your config now! :) ---]] - -- Set as the leader key -- See `:help mapleader` -- NOTE: Must happen before plugins are loaded (otherwise wrong leader will be used) @@ -91,7 +5,7 @@ vim.g.mapleader = ' ' vim.g.maplocalleader = ' ' -- Set to true if you have a Nerd Font installed and selected in the terminal -vim.g.have_nerd_font = false +vim.g.have_nerd_font = true -- [[ Setting options ]] -- See `:help vim.opt` @@ -102,7 +16,7 @@ vim.g.have_nerd_font = false vim.opt.number = true -- You can also add relative line numbers, to help with jumping. -- Experiment for yourself to see if you like it! --- vim.opt.relativenumber = true +vim.opt.relativenumber = true -- Enable mouse mode, can be useful for resizing splits for example! vim.opt.mouse = 'a' @@ -113,7 +27,7 @@ vim.opt.showmode = false -- Sync clipboard between OS and Neovim. -- Remove this option if you want your OS clipboard to remain independent. -- See `:help 'clipboard'` -vim.opt.clipboard = 'unnamedplus' +-- vim.opt.clipboard = 'unnamedplus' -- Enable break indent vim.opt.breakindent = true @@ -176,10 +90,10 @@ vim.keymap.set('n', 'q', vim.diagnostic.setloclist, { desc = 'Open diagn vim.keymap.set('t', '', '', { desc = 'Exit terminal mode' }) -- TIP: Disable arrow keys in normal mode --- vim.keymap.set('n', '', 'echo "Use h to move!!"') --- vim.keymap.set('n', '', 'echo "Use l to move!!"') --- vim.keymap.set('n', '', 'echo "Use k to move!!"') --- vim.keymap.set('n', '', 'echo "Use j to move!!"') +vim.keymap.set('n', '', 'echo "Use h to move!!"') +vim.keymap.set('n', '', 'echo "Use l to move!!"') +vim.keymap.set('n', '', 'echo "Use k to move!!"') +vim.keymap.set('n', '', 'echo "Use j to move!!"') -- Keybinds to make split navigation easier. -- Use CTRL+ to switch between windows @@ -190,6 +104,9 @@ vim.keymap.set('n', '', '', { desc = 'Move focus to the right win vim.keymap.set('n', '', '', { desc = 'Move focus to the lower window' }) vim.keymap.set('n', '', '', { desc = 'Move focus to the upper window' }) +vim.keymap.set('n', '', 'zz', { noremap = true, desc = 'Map C-u to C-uzz' }) +vim.keymap.set('n', '', 'zz', { noremap = true, desc = 'Map C-d to C-dzz' }) + -- [[ Basic Autocommands ]] -- See `:help lua-guide-autocommands` @@ -228,9 +145,96 @@ require('lazy').setup({ -- NOTE: Plugins can be added with a link (or for a github repo: 'owner/repo' link). 'tpope/vim-sleuth', -- Detect tabstop and shiftwidth automatically + { + 'ThePrimeagen/harpoon', + requires = { 'nvim-lua/plenary.nvim' }, -- Harpoon requires plenary + config = function() + require('harpoon').setup { + -- Configuration options go here + -- For example, set the menu to open with a specific size + menu = { + width = vim.api.nvim_win_get_width(0) - 4, + height = 10, + }, + } + + -- Keybindings for Harpoon + vim.keymap.set('n', 'a', require('harpoon.mark').add_file, { desc = 'Add file to Harpoon' }) + vim.keymap.set('n', 'h', require('harpoon.ui').toggle_quick_menu, { desc = 'Toggle Harpoon menu' }) + vim.keymap.set('n', 'j', function() + require('harpoon.ui').nav_file(1) + end, { desc = 'Harpoon: go to mark 1' }) + vim.keymap.set('n', 'k', function() + require('harpoon.ui').nav_file(2) + end, { desc = 'Harpoon: go to mark 2' }) + vim.keymap.set('n', 'l', function() + require('harpoon.ui').nav_file(3) + end, { desc = 'Harpoon: go to mark 3' }) + vim.keymap.set('n', ';', function() + require('harpoon.ui').nav_file(4) + end, { desc = 'Harpoon: go to mark 4' }) + end, + }, + + { + 'tpope/vim-fugitive', + vim.keymap.set('n', 'gs', ':Git', { desc = 'Git status' }), + vim.keymap.set('n', 'gc', ':Git commit', { desc = 'Git commit' }), + vim.keymap.set('n', 'gp', ':Git push', { desc = 'Git push' }), + vim.keymap.set('n', 'gpl', ':Git pull', { desc = 'Git pull' }), + vim.keymap.set('n', 'gd', ':Gvdiffsplit', { desc = 'Git diff' }), + vim.keymap.set('n', 'gb', ':Git blame', { desc = 'Git blame' }), + vim.keymap.set('n', 'gl', ':Git log', { desc = 'Git log' }), + vim.keymap.set('n', 'gr', ':Gread', { desc = 'Git read (checkout file)' }), + vim.keymap.set('n', 'gw', ':Gwrite', { desc = 'Git write (stage file)' }), + vim.keymap.set('n', 'gsh', ':G! push', { desc = 'Git push (force)' }), + vim.keymap.set('n', 'gf', ':Git fetch', { desc = 'Git fetch' }), + vim.keymap.set('n', 'gm', ':Git mergetool', { desc = 'Git mergetool' }), + }, + + { + 'mbbill/undotree', + lazy = false, + -- keys = { 'u', ':UndotreeToggle' }, -- Correct key binding + vim.keymap.set('n', 'u', ':UndotreeToggle', { noremap = true, desc = 'UndotreeToggle' }), + -- keys = { 'u', 'vim.cmd.UndotreeToggle' }, + config = function() + -- Configuration settings for undotree + vim.g.undotree_WindowLayout = 2 + vim.g.undotree_SetFocusWhenToggle = 1 + end, + }, + + { -- Treesitter with added nvim-treesitter-context + 'nvim-treesitter/nvim-treesitter', + build = ':TSUpdate', + opts = { + ensure_installed = { 'bash', 'c', 'html', 'lua', 'luadoc', 'markdown', 'vim', 'vimdoc' }, + auto_install = true, + highlight = { + enable = true, + additional_vim_regex_highlighting = { 'ruby' }, + }, + indent = { enable = true, disable = { 'ruby' } }, + }, + dependencies = { + { 'nvim-treesitter/nvim-treesitter-context' }, + -- any other dependencies if needed + }, + config = function(_, opts) + require('nvim-treesitter.configs').setup(opts) + require('treesitter-context').setup { + enable = true, -- Enable this plugin (Can be enabled/disabled later via commands) + -- further configuration options + } + end, + }, + -- NOTE: Plugins can also be added by using a table, -- with the first argument being the link and the following -- keys can be used to configure plugin behavior/loading/etc. + + -- -- -- Use `opts = {}` to force a plugin to be loaded. -- @@ -555,8 +559,17 @@ require('lazy').setup({ -- For example, to see the options for `lua_ls`, you could go to: https://luals.github.io/wiki/settings/ local servers = { -- clangd = {}, - -- gopls = {}, - -- pyright = {}, + bashls = {}, + -- clojure_lsp = {}, + dockerls = {}, + gopls = {}, + helm_ls = {}, + marksman = {}, + -- nushell = {}, + -- postgres_lsp = {}, + pyright = {}, + ruff_lsp = {}, + terraformls = {}, -- rust_analyzer = {}, -- ... etc. See `:help lspconfig-all` for a list of all the pre-configured LSPs -- @@ -581,6 +594,9 @@ require('lazy').setup({ }, }, }, + + -- + -- ruff_lsp = {}, } -- Ensure the servers and tools above are installed @@ -852,6 +868,19 @@ require('lazy').setup({ -- - Treesitter + textobjects: https://github.com/nvim-treesitter/nvim-treesitter-textobjects end, }, + -- { + -- 'sourcegraph/sg.nvim', + -- dependencies = { 'nvim-lua/plenary.nvim' }, + -- config = function() + -- require('sg').setup { + -- -- Pass your own custom attach function + -- -- If you do not pass your own attach function, then the following maps are provide: + -- -- - gd -> goto definition + -- -- - gr -> goto references + -- -- on_attach = your_custom_lsp_attach_function, + -- } + -- end, + -- }, -- The following two comments only work if you have downloaded the kickstart repo, not just copy pasted the -- init.lua. If you want these files, they are in the repository, so you can just download them and