diff options
| author | Max Bossing <info@maxbossing.de> | 2025-08-12 15:47:14 +0200 | 
|---|---|---|
| committer | Max Bossing <info@maxbossing.de> | 2025-08-12 15:47:14 +0200 | 
| commit | 991c272423d8fa41c9dd21169ce0c3e9979f1c64 (patch) | |
| tree | b4343fb3035989a6bfcafcb02e7db91e91a39785 /nvim/lua | |
| parent | 7c8d9ae3b0b5e843ffe10fad81e776806c0c5a8b (diff) | |
feat: finally a usable neovim config (switched to LazyVim)
Diffstat (limited to 'nvim/lua')
| -rw-r--r-- | nvim/lua/config/autocmds.lua | 8 | ||||
| -rw-r--r-- | nvim/lua/config/keymaps.lua | 7 | ||||
| -rw-r--r-- | nvim/lua/config/lazy.lua | 53 | ||||
| -rw-r--r-- | nvim/lua/config/options.lua | 7 | ||||
| -rw-r--r-- | nvim/lua/keymap.lua | 31 | ||||
| -rw-r--r-- | nvim/lua/lsp.lua | 45 | ||||
| -rw-r--r-- | nvim/lua/options.lua | 36 | ||||
| -rw-r--r-- | nvim/lua/plugins.lua | 109 | ||||
| -rw-r--r-- | nvim/lua/plugins/example.lua | 197 | ||||
| -rw-r--r-- | nvim/lua/plugins/fugitive.lua | 6 | ||||
| -rw-r--r-- | nvim/lua/plugins/lualine.lua | 8 | ||||
| -rw-r--r-- | nvim/lua/plugins/oil.lua | 14 | ||||
| -rw-r--r-- | nvim/lua/plugins/telescope.lua | 2 | ||||
| -rw-r--r-- | nvim/lua/plugins/treesitter.lua | 3 | 
14 files changed, 291 insertions, 235 deletions
| diff --git a/nvim/lua/config/autocmds.lua b/nvim/lua/config/autocmds.lua new file mode 100644 index 0000000..4221e75 --- /dev/null +++ b/nvim/lua/config/autocmds.lua @@ -0,0 +1,8 @@ +-- Autocmds are automatically loaded on the VeryLazy event +-- Default autocmds that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/autocmds.lua +-- +-- Add any additional autocmds here +-- with `vim.api.nvim_create_autocmd` +-- +-- Or remove existing autocmds by their group name (which is prefixed with `lazyvim_` for the defaults) +-- e.g. vim.api.nvim_del_augroup_by_name("lazyvim_wrap_spell") diff --git a/nvim/lua/config/keymaps.lua b/nvim/lua/config/keymaps.lua new file mode 100644 index 0000000..8450d44 --- /dev/null +++ b/nvim/lua/config/keymaps.lua @@ -0,0 +1,7 @@ +-- Keymaps are automatically loaded on the VeryLazy event +-- Default keymaps that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/keymaps.lua +-- Add any additional keymaps here + +-- move code in visual line mode +vim.keymap.set("v", "J", ":m '>+1<CR>gv=gv") +vim.keymap.set("v", "K", ":m '<-2<CR>gv=gv") diff --git a/nvim/lua/config/lazy.lua b/nvim/lua/config/lazy.lua new file mode 100644 index 0000000..d73bfa1 --- /dev/null +++ b/nvim/lua/config/lazy.lua @@ -0,0 +1,53 @@ +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" +if not (vim.uv or vim.loop).fs_stat(lazypath) then +  local lazyrepo = "https://github.com/folke/lazy.nvim.git" +  local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) +  if vim.v.shell_error ~= 0 then +    vim.api.nvim_echo({ +      { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, +      { out, "WarningMsg" }, +      { "\nPress any key to exit..." }, +    }, true, {}) +    vim.fn.getchar() +    os.exit(1) +  end +end +vim.opt.rtp:prepend(lazypath) + +require("lazy").setup({ +  spec = { +    -- add LazyVim and import its plugins +    { "LazyVim/LazyVim", import = "lazyvim.plugins" }, +    -- import/override with your plugins +    { import = "plugins" }, +  }, +  defaults = { +    -- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup. +    -- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default. +    lazy = false, +    -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, +    -- have outdated releases, which may break your Neovim install. +    version = false, -- always use the latest git commit +    -- version = "*", -- try installing the latest stable version for plugins that support semver +  }, +  install = { colorscheme = { "tokyonight", "habamax" } }, +  checker = { +    enabled = true, -- check for plugin updates periodically +    notify = false, -- notify on update +  }, -- automatically check for plugin updates +  performance = { +    rtp = { +      -- disable some rtp plugins +      disabled_plugins = { +        "gzip", +        -- "matchit", +        -- "matchparen", +        -- "netrwPlugin", +        "tarPlugin", +        "tohtml", +        "tutor", +        "zipPlugin", +      }, +    }, +  }, +}) diff --git a/nvim/lua/config/options.lua b/nvim/lua/config/options.lua new file mode 100644 index 0000000..98dddd5 --- /dev/null +++ b/nvim/lua/config/options.lua @@ -0,0 +1,7 @@ +-- Options are automatically loaded before lazy.nvim startup +-- Default options that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/options.lua +-- Add any additional options here +vim.opt.tabstop = 2 +vim.opt.shiftwidth = 2 +vim.opt.smarttab = true +vim.opt.expandtab = true diff --git a/nvim/lua/keymap.lua b/nvim/lua/keymap.lua deleted file mode 100644 index 8b24603..0000000 --- a/nvim/lua/keymap.lua +++ /dev/null @@ -1,31 +0,0 @@ --- vim-fugitive -vim.keymap.set('n', '<leader>gs', ':Git<CR>') - --- move code in visual-line mode -vim.keymap.set("v", "J", ":m '>+1<CR>gv=gv") -vim.keymap.set("v", "K", ":m '<-2<CR>gv=gv") - --- Paste while yanking into void (paste without loosing register) -vim.keymap.set("x", "<leader>p", [["_dP]]) - --- directly yank into system clipboard -vim.keymap.set({ "n", "v" }, "<leader>y", [["+y]]) -vim.keymap.set("n", "<leader>Y", [["+Y]]) - --- delete while yanking into void -vim.keymap.set({ "n", "v" }, "<leader>d", "\"_d") - --- telescope -vim.keymap.set('n', '<leader>tf', ':Telescope find_files<CR>')  -- file search -vim.keymap.set('n', '<leader>tb', ':Telescope buffers<CR>')     -- buffer peak -vim.keymap.set('n', '<leader>tp', ':Telescope builtin<CR>')     -- picker picker lmao -vim.keymap.set('n', '<leader>tg', ':Telescope live_grep<CR>')   -- grep - --- Oil -vim.keymap.set("n", "-", "<CMD>Oil<CR>") - --- Undotree -vim.keymap.set('n', '<leader>ut', ':UndotreeToggle<CR>') - --- Neotree -vim.keymap.set('n', '<leader>nt', ':Neotree toggle<CR>') diff --git a/nvim/lua/lsp.lua b/nvim/lua/lsp.lua deleted file mode 100644 index 8d8a804..0000000 --- a/nvim/lua/lsp.lua +++ /dev/null @@ -1,45 +0,0 @@ -require('mason').setup() - -local bufnr = vim.api.nvim_get_current_buf() -vim.keymap.set('n', 'gra',  -  function() -    vim.cmd.RustLsp('codeAction') -  end -) - -vim.keymap.set('n', 'K', -  function() -    vim.cmd.RustLsp({'hover', 'actions'}) -  end -) - -vim.keymap.set('n', 'grd',  -  function() -    vim.cmd.RustLsp({'renderDiagnostic', 'current'}) -  end -) - -local cmp = require('cmp') -cmp.setup({ -    mapping = cmp.mapping.preset.insert({ -      ['<C-p>'] = cmp.mapping.select_prev_item({behavior = cmp.SelectBehavior.Select}), -      ['<C-n>'] = cmp.mapping.select_next_item({behavior = cmp.SelectBehavior.Select}), -      ['<C-b>'] = cmp.mapping.scroll_docs(-4), -      ['<C-f>'] = cmp.mapping.scroll_docs(4), -      ['<C-Space>'] = cmp.mapping.complete(), -      ['<CR>'] = cmp.mapping.confirm({ select = true }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items. -    }), -    sources = cmp.config.sources({ -      { name = 'nvim_lsp' }, -    }, { -    { name = 'buffer' }, -    { name = "path" }, -  }) -}) - -cmp.setup.cmdline({ '/', '?' }, { -  mapping = cmp.mapping.preset.cmdline(), -  sources = { -    { name = 'buffer' } -  } -}) diff --git a/nvim/lua/options.lua b/nvim/lua/options.lua deleted file mode 100644 index 9de7b72..0000000 --- a/nvim/lua/options.lua +++ /dev/null @@ -1,36 +0,0 @@ -vim.g.loaded_netrw = 1 -vim.g.loaded_netrwPlugin = 1 - -vim.opt.termguicolors = true -vim.o.background = "dark" - -vim.opt.colorcolumn = "80" -vim.opt.updatetime = 50 - --- Map leader to space -vim.g.mapleader = ' ' - --- Tabs sind für lutscher -vim.opt.tabstop = 2 -vim.opt.shiftwidth = 2 -vim.o.expandtab = true -vim.opt.smartindent = true - --- QoL for search -vim.opt.hlsearch = false -vim.opt.incsearch = true - --- Scrolling -vim.opt.scrolloff = 10 -vim.opt.signcolumn = "yes" -vim.opt.isfname:append('@-@') - --- Numbers on the side -vim.wo.number = true -vim.wo.relativenumber = true  -vim.o.ruler = true - --- Show something in the command line not sure -vim.o.showcmd = true - -vim.diagnostic.config({ virtual_text = false }) diff --git a/nvim/lua/plugins.lua b/nvim/lua/plugins.lua deleted file mode 100644 index 175de4f..0000000 --- a/nvim/lua/plugins.lua +++ /dev/null @@ -1,109 +0,0 @@ -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", -- latest stable release -    lazypath, -  }) -end -vim.opt.rtp:prepend(lazypath) - -require("lazy").setup({ - -  -- Color Scheme -  "folke/tokyonight.nvim", - -  -- Syntax highlighting -  'nvim-treesitter/nvim-treesitter', - -  -- Status line -  'nvim-lualine/lualine.nvim', - -  -- Git -  'airblade/vim-gitgutter', -   -  -- File System -  'stevearc/oil.nvim', -  'benomahony/oil-git.nvim', -   -  -- non-linear undo history  -  'mbbill/undotree', -   -  -- Git  -  'tpope/vim-fugitive', -   -  -- Comments -  "tpope/vim-commentary", - -  -- Surrounding -  'tpope/vim-surround', - -  -- Better . usage -  'tpope/vim-repeat', -   -  -- Some lsp shit -  'mason-org/mason.nvim', - -  -- Wakatime -  -- 'wakatime/vim-wakatime', - -  { -    'nvim-neo-tree/neo-tree.nvim', -    branch = 'v3.x', -    dependencies = { -      'nvim-lua/plenary.nvim', -      'MunifTanjim/nui.nvim', -      {'3rd/image.nvim', opts = {}}, -    }, -    lazy = false, -  }, -   -  -- Markdown -  { -    'OXY2DEV/markview.nvim', -    lazy = false, -    priority = 49, - -  }, - -  -- Telescope -  { -    'nvim-telescope/telescope.nvim', -    tag = '0.1.5', -    dependencies = { -      'nvim-lua/plenary.nvim', -      'sharkdp/fd', -      { 'nvim-telescope/telescope-fzf-native.nvim', build = 'make' }, -    } -  }, - -  -- Icons   -  { -    "echasnovski/mini.icons", -    lazy = true, -    init = function() -      package.preload["nvim-web-devicons"] = function() -        require("mini.icons").mock_nvim_web_devicons() -        return package.loaded["nvim-web-devicons"] -      end -    end, -  }, - -  -- Rust LSP -  { -    'mrcjkb/rustaceanvim', -    version = '^6', -- Recommended -    lazy = false, -- This plugin is already lazy -  }, - -  -- Completion -  "hrsh7th/nvim-cmp", -  "hrsh7th/cmp-buffer", -  "hrsh7th/cmp-path", -  "hrsh7th/cmp-nvim-lsp", -  "hrsh7th/cmp-nvim-lua", -}) - diff --git a/nvim/lua/plugins/example.lua b/nvim/lua/plugins/example.lua new file mode 100644 index 0000000..17f53d6 --- /dev/null +++ b/nvim/lua/plugins/example.lua @@ -0,0 +1,197 @@ +-- since this is just an example spec, don't actually load anything here and return an empty spec +-- stylua: ignore +if true then return {} end + +-- every spec file under the "plugins" directory will be loaded automatically by lazy.nvim +-- +-- In your plugin files, you can: +-- * add extra plugins +-- * disable/enabled LazyVim plugins +-- * override the configuration of LazyVim plugins +return { +  -- add gruvbox +  { "ellisonleao/gruvbox.nvim" }, + +  -- Configure LazyVim to load gruvbox +  { +    "LazyVim/LazyVim", +    opts = { +      colorscheme = "gruvbox", +    }, +  }, + +  -- change trouble config +  { +    "folke/trouble.nvim", +    -- opts will be merged with the parent spec +    opts = { use_diagnostic_signs = true }, +  }, + +  -- disable trouble +  { "folke/trouble.nvim", enabled = false }, + +  -- override nvim-cmp and add cmp-emoji +  { +    "hrsh7th/nvim-cmp", +    dependencies = { "hrsh7th/cmp-emoji" }, +    ---@param opts cmp.ConfigSchema +    opts = function(_, opts) +      table.insert(opts.sources, { name = "emoji" }) +    end, +  }, + +  -- change some telescope options and a keymap to browse plugin files +  { +    "nvim-telescope/telescope.nvim", +    keys = { +      -- add a keymap to browse plugin files +      -- stylua: ignore +      { +        "<leader>fp", +        function() require("telescope.builtin").find_files({ cwd = require("lazy.core.config").options.root }) end, +        desc = "Find Plugin File", +      }, +    }, +    -- change some options +    opts = { +      defaults = { +        layout_strategy = "horizontal", +        layout_config = { prompt_position = "top" }, +        sorting_strategy = "ascending", +        winblend = 0, +      }, +    }, +  }, + +  -- add pyright to lspconfig +  { +    "neovim/nvim-lspconfig", +    ---@class PluginLspOpts +    opts = { +      ---@type lspconfig.options +      servers = { +        -- pyright will be automatically installed with mason and loaded with lspconfig +        pyright = {}, +      }, +    }, +  }, + +  -- add tsserver and setup with typescript.nvim instead of lspconfig +  { +    "neovim/nvim-lspconfig", +    dependencies = { +      "jose-elias-alvarez/typescript.nvim", +      init = function() +        require("lazyvim.util").lsp.on_attach(function(_, buffer) +          -- stylua: ignore +          vim.keymap.set( "n", "<leader>co", "TypescriptOrganizeImports", { buffer = buffer, desc = "Organize Imports" }) +          vim.keymap.set("n", "<leader>cR", "TypescriptRenameFile", { desc = "Rename File", buffer = buffer }) +        end) +      end, +    }, +    ---@class PluginLspOpts +    opts = { +      ---@type lspconfig.options +      servers = { +        -- tsserver will be automatically installed with mason and loaded with lspconfig +        tsserver = {}, +      }, +      -- you can do any additional lsp server setup here +      -- return true if you don't want this server to be setup with lspconfig +      ---@type table<string, fun(server:string, opts:_.lspconfig.options):boolean?> +      setup = { +        -- example to setup with typescript.nvim +        tsserver = function(_, opts) +          require("typescript").setup({ server = opts }) +          return true +        end, +        -- Specify * to use this function as a fallback for any server +        -- ["*"] = function(server, opts) end, +      }, +    }, +  }, + +  -- for typescript, LazyVim also includes extra specs to properly setup lspconfig, +  -- treesitter, mason and typescript.nvim. So instead of the above, you can use: +  { import = "lazyvim.plugins.extras.lang.typescript" }, + +  -- add more treesitter parsers +  { +    "nvim-treesitter/nvim-treesitter", +    opts = { +      ensure_installed = { +        "bash", +        "html", +        "javascript", +        "json", +        "lua", +        "markdown", +        "markdown_inline", +        "python", +        "query", +        "regex", +        "tsx", +        "typescript", +        "vim", +        "yaml", +      }, +    }, +  }, + +  -- since `vim.tbl_deep_extend`, can only merge tables and not lists, the code above +  -- would overwrite `ensure_installed` with the new value. +  -- If you'd rather extend the default config, use the code below instead: +  { +    "nvim-treesitter/nvim-treesitter", +    opts = function(_, opts) +      -- add tsx and treesitter +      vim.list_extend(opts.ensure_installed, { +        "tsx", +        "typescript", +      }) +    end, +  }, + +  -- the opts function can also be used to change the default opts: +  { +    "nvim-lualine/lualine.nvim", +    event = "VeryLazy", +    opts = function(_, opts) +      table.insert(opts.sections.lualine_x, { +        function() +          return "😄" +        end, +      }) +    end, +  }, + +  -- or you can return new options to override all the defaults +  { +    "nvim-lualine/lualine.nvim", +    event = "VeryLazy", +    opts = function() +      return { +        --[[add your custom lualine config here]] +      } +    end, +  }, + +  -- use mini.starter instead of alpha +  { import = "lazyvim.plugins.extras.ui.mini-starter" }, + +  -- add jsonls and schemastore packages, and setup treesitter for json, json5 and jsonc +  { import = "lazyvim.plugins.extras.lang.json" }, + +  -- add any tools you want to have installed below +  { +    "williamboman/mason.nvim", +    opts = { +      ensure_installed = { +        "stylua", +        "shellcheck", +        "shfmt", +        "flake8", +      }, +    }, +  }, +} diff --git a/nvim/lua/plugins/fugitive.lua b/nvim/lua/plugins/fugitive.lua new file mode 100644 index 0000000..d7f59af --- /dev/null +++ b/nvim/lua/plugins/fugitive.lua @@ -0,0 +1,6 @@ +return { +  { +    "tpope/vim-fugitive", +    lazy = false, +  }, +} diff --git a/nvim/lua/plugins/lualine.lua b/nvim/lua/plugins/lualine.lua deleted file mode 100644 index 2356803..0000000 --- a/nvim/lua/plugins/lualine.lua +++ /dev/null @@ -1,8 +0,0 @@ -require('lualine').setup { -  options = { -    icons_enabled = true, -    theme = 'auto', -    section_separators = { left = '', right = '' }, -    component_separators = { left = '', right = '' } -  }, -} diff --git a/nvim/lua/plugins/oil.lua b/nvim/lua/plugins/oil.lua index d24cfbb..39c9212 100644 --- a/nvim/lua/plugins/oil.lua +++ b/nvim/lua/plugins/oil.lua @@ -1 +1,13 @@ -require('oil').setup() +return { +  { +    "stevearc/oil.nvim", +    lazy = false, +    config = function() +      require("oil").setup() +    end, +    keys = { +      { "-", "<cmd>Oil<cr>", desc = "Move up" }, +    }, +  }, +  "benomahony/oil-git.nvim", +} diff --git a/nvim/lua/plugins/telescope.lua b/nvim/lua/plugins/telescope.lua deleted file mode 100644 index f7ab271..0000000 --- a/nvim/lua/plugins/telescope.lua +++ /dev/null @@ -1,2 +0,0 @@ -local telescope = require('telescope') -telescope.load_extension('fzf') diff --git a/nvim/lua/plugins/treesitter.lua b/nvim/lua/plugins/treesitter.lua deleted file mode 100644 index 06536f3..0000000 --- a/nvim/lua/plugins/treesitter.lua +++ /dev/null @@ -1,3 +0,0 @@ -require('nvim-treesitter.configs').setup { -  highlight = { enable = true } -} | 
