dotfiles/nvim/lua/config/plugins.lua

354 lines
7.9 KiB
Lua
Raw Normal View History

2024-01-22 23:14:16 +01:00
local is, when = require 'config.composer' ()
2024-01-21 23:32:15 +01:00
local util = require 'config.utils'
local n = util.keymap 'n'
2023-08-20 14:27:47 +02:00
2023-10-29 09:47:39 +01:00
2023-11-15 21:39:37 +01:00
---@type LazySpec
2023-08-20 14:27:47 +02:00
return {
2023-08-19 21:48:52 +02:00
2023-12-24 22:54:03 +01:00
-- Theme
2023-08-20 14:27:47 +02:00
{
2024-01-21 23:32:15 +01:00
'rebelot/kanagawa.nvim',
2024-01-22 23:14:16 +01:00
enabled = is 'standalone',
2023-08-20 14:27:47 +02:00
lazy = false,
2023-12-24 22:54:03 +01:00
priority = math.huge,
2023-11-07 23:21:58 +01:00
config = function()
2024-01-21 23:32:15 +01:00
vim.cmd 'colorscheme kanagawa'
2023-08-20 14:27:47 +02:00
end,
},
2023-07-22 13:52:10 +02:00
-- Status line
2023-08-20 14:27:47 +02:00
{
2024-01-21 23:32:15 +01:00
'nvim-lualine/lualine.nvim',
2024-01-22 23:14:16 +01:00
enabled = is 'standalone',
2023-08-20 14:27:47 +02:00
dependencies = {
2024-01-21 23:32:15 +01:00
'nvim-tree/nvim-web-devicons',
2023-08-20 14:27:47 +02:00
},
config = function()
2024-01-21 23:32:15 +01:00
local lualine = require 'lualine'
2024-01-22 23:14:16 +01:00
lualine.setup {
tabline = {
lualine_a = { 'buffers' },
}
}
2023-08-20 14:27:47 +02:00
end
},
2023-07-22 13:52:10 +02:00
2023-09-02 22:09:00 +02:00
-- Telescope
2023-07-22 15:40:45 +02:00
{
2024-01-21 23:32:15 +01:00
'nvim-telescope/telescope.nvim',
2024-01-22 23:14:16 +01:00
enabled = is 'standalone',
2024-01-21 23:32:15 +01:00
branch = '0.1.x',
2023-07-22 15:40:45 +02:00
dependencies = {
2024-01-21 23:32:15 +01:00
'nvim-lua/plenary.nvim',
2024-01-22 23:14:16 +01:00
when 'linux' { 'nvim-telescope/telescope-fzf-native.nvim', build = 'make' }
2023-07-22 15:40:45 +02:00
},
2023-09-02 22:09:00 +02:00
config = function()
2024-01-21 23:32:15 +01:00
local telescope = require 'telescope'
local builtin = require 'telescope.builtin'
2023-11-07 23:21:58 +01:00
local ext = telescope.extensions
2023-11-15 21:39:37 +01:00
2024-01-22 23:14:16 +01:00
if is 'linux' then telescope.load_extension 'fzf' end
if is 'standalone' then telescope.load_extension 'notify' end
2023-11-15 21:39:37 +01:00
telescope.setup {
2023-09-02 22:09:00 +02:00
extensions = {
fzf = {
fuzzy = true,
override_generic_sorter = true,
override_file_sorter = true,
2024-01-21 23:32:15 +01:00
case_mode = 'smart_case',
2023-09-02 22:09:00 +02:00
}
}
2023-11-15 21:39:37 +01:00
}
2024-01-21 23:32:15 +01:00
n '<leader>ff' (builtin.find_files) 'Telescope: find files'
n '<leader>fb' (builtin.buffers) 'Telescope: find buffers'
n '<leader>fg' (builtin.live_grep) 'Telescope: grep content'
n '<leader>fh' (builtin.help_tags) 'Telescope: search docs'
2024-01-22 23:14:16 +01:00
if is 'standalone' then
n '<leader>fn' (ext.notify.notify) 'Telescope: find notifications'
end
2023-09-02 22:09:00 +02:00
end,
2023-07-22 15:40:45 +02:00
},
2023-07-10 22:33:59 +02:00
-- Treesitter
2023-07-10 15:18:34 +02:00
{
2024-01-21 23:32:15 +01:00
'nvim-treesitter/nvim-treesitter',
build = ':TSUpdate',
2023-07-11 22:41:32 +02:00
config = function()
local configs = require 'nvim-treesitter.configs'
2023-11-15 21:39:37 +01:00
configs.setup {
2023-11-15 21:39:37 +01:00
modules = {},
auto_install = false,
sync_install = false,
ignore_install = {},
2023-07-11 22:41:32 +02:00
ensure_installed = {
2023-12-24 22:54:03 +01:00
-- neovim
2024-01-21 23:32:15 +01:00
'vimdoc', 'lua', 'query',
2023-12-24 22:54:03 +01:00
-- data
2024-01-22 23:14:16 +01:00
'json', 'xml', 'yaml', 'toml',
2023-12-24 22:54:03 +01:00
-- markdown
2024-01-21 23:32:15 +01:00
'markdown', 'markdown_inline',
2023-12-24 22:54:03 +01:00
-- latex
2024-01-21 23:32:15 +01:00
'latex', 'bibtex',
2023-07-29 21:15:17 +02:00
-- git
2024-01-21 23:32:15 +01:00
'gitcommit', 'gitignore', 'diff',
2023-12-24 22:54:03 +01:00
-- misc
2024-01-21 23:32:15 +01:00
'comment', 'dockerfile', 'regex',
2023-07-11 22:41:32 +02:00
-- shell
2024-01-21 23:32:15 +01:00
'bash',
2023-07-11 22:41:32 +02:00
-- python
2024-01-21 23:32:15 +01:00
'python',
2023-07-22 13:52:10 +02:00
-- rust
2024-01-21 23:32:15 +01:00
'rust',
2023-07-11 22:41:32 +02:00
-- webdev
2024-01-21 23:32:15 +01:00
'html', 'css', 'scss', 'javascript', 'jsdoc', 'typescript', 'tsx', 'astro', 'svelte',
2023-07-11 22:41:32 +02:00
-- haskell
2024-01-22 23:14:16 +01:00
'haskell',
2023-07-22 13:52:10 +02:00
},
2023-12-24 22:54:03 +01:00
highlight = { enable = true },
indent = { enable = true },
2024-01-21 23:32:15 +01:00
incremental_selection = {
enable = true,
keymaps = {
init_selection = '<CR>',
scope_incremental = '<CR>',
node_incremental = '<TAB>',
node_decremental = '<S-TAB>',
},
},
2023-11-15 21:39:37 +01:00
}
2023-07-11 22:41:32 +02:00
end,
2023-07-10 15:18:34 +02:00
init = function()
2023-11-15 21:39:37 +01:00
local lang = vim.treesitter.language
lang.register('markdown', 'mdx')
lang.register('markdown', 'lhaskell')
2023-07-11 22:41:32 +02:00
end,
2023-07-10 15:18:34 +02:00
},
2023-07-22 13:52:10 +02:00
2024-01-21 23:32:15 +01:00
-- Git signs
{
'lewis6991/gitsigns.nvim',
2024-01-22 23:14:16 +01:00
enabled = is 'standalone',
config = true,
2024-01-21 23:32:15 +01:00
},
-- Comments
{
'numToStr/Comment.nvim',
config = true,
},
-- Shortcut hints
{
'folke/which-key.nvim',
2024-01-22 23:14:16 +01:00
enabled = is 'standalone',
2024-01-21 23:32:15 +01:00
event = 'VeryLazy',
init = function()
vim.o.timeout = true
vim.o.timeoutlen = 300
end,
opts = {}
},
-- Notifications
{
'rcarriga/nvim-notify',
2024-01-22 23:14:16 +01:00
enabled = is 'standalone',
2024-01-21 23:32:15 +01:00
config = function()
vim.notify = require 'notify'
end
},
-- File tree
{
'nvim-neo-tree/neo-tree.nvim',
2024-01-22 23:14:16 +01:00
enabled = is 'standalone',
2024-01-21 23:32:15 +01:00
branch = 'v3.x',
dependencies = {
'nvim-lua/plenary.nvim',
'nvim-tree/nvim-web-devicons',
'MunifTanjim/nui.nvim',
},
},
-- Git diffviewer
{
'sindrets/diffview.nvim',
2024-01-22 23:14:16 +01:00
enabled = is 'standalone',
2024-01-21 23:32:15 +01:00
dependencies = {
'nvim-lua/plenary.nvim',
'nvim-tree/nvim-web-devicons',
},
},
2023-07-10 22:33:59 +02:00
-- Snippet engine
{
2024-01-21 23:32:15 +01:00
'L3MON4D3/LuaSnip',
version = '2.*',
2023-07-10 22:33:59 +02:00
},
2023-07-22 15:40:45 +02:00
2023-07-10 22:33:59 +02:00
-- Completion
2024-01-21 23:32:15 +01:00
require 'plugins.nvim-cmp' {
'hrsh7th/nvim-cmp',
2023-07-10 22:33:59 +02:00
dependencies = {
2024-01-21 23:32:15 +01:00
'hrsh7th/cmp-cmdline',
'hrsh7th/cmp-buffer',
'hrsh7th/cmp-path',
'hrsh7th/cmp-nvim-lsp',
'saadparwaiz1/cmp_luasnip',
2023-07-10 22:33:59 +02:00
},
2023-07-10 13:46:48 +02:00
},
2023-07-22 15:40:45 +02:00
2024-01-22 23:14:16 +01:00
-- LS configs
{
'neovim/nvim-lspconfig',
enabled = is { 'standalone', 'linux' },
},
2023-07-22 15:40:45 +02:00
-- Debugger adapter support
2023-07-11 23:48:37 +02:00
{
2024-01-21 23:32:15 +01:00
'mfussenegger/nvim-dap',
2024-01-22 23:14:16 +01:00
enabled = is { 'standalone', 'linux' },
2023-07-11 23:48:37 +02:00
config = function()
2024-01-21 23:32:15 +01:00
local dap = require 'dap'
2023-11-15 21:39:37 +01:00
2024-01-21 23:32:15 +01:00
n '<leader>b' (dap.toggle_breakpoint) 'DAP: Toggle breakpoint'
2023-07-11 23:48:37 +02:00
end,
},
2023-07-22 15:40:45 +02:00
-- Debugger UI
2024-01-21 23:32:15 +01:00
require 'plugins.nvim-dap-ui' {
'rcarriga/nvim-dap-ui',
2024-01-22 23:14:16 +01:00
enabled = is { 'standalone', 'linux' },
2023-07-11 23:48:37 +02:00
dependencies = {
2024-01-21 23:32:15 +01:00
'mfussenegger/nvim-dap',
2023-07-11 23:48:37 +02:00
},
},
2023-07-22 15:40:45 +02:00
2023-07-11 23:48:37 +02:00
-- Mason
{
2024-01-21 23:32:15 +01:00
'williamboman/mason.nvim',
2024-01-22 23:14:16 +01:00
enabled = is { 'standalone', 'linux' },
config = true,
2023-07-11 23:48:37 +02:00
},
2023-07-22 15:40:45 +02:00
2023-11-15 21:39:37 +01:00
-- Automatic LSP server setup for Mason
2023-07-11 23:48:37 +02:00
{
2024-01-21 23:32:15 +01:00
'williamboman/mason-lspconfig.nvim',
2024-01-22 23:14:16 +01:00
enabled = is { 'standalone', 'linux' },
2023-07-22 15:40:45 +02:00
dependencies = {
2024-01-21 23:32:15 +01:00
'williamboman/mason.nvim',
'neovim/nvim-lspconfig',
2023-07-22 15:40:45 +02:00
},
2023-07-11 23:48:37 +02:00
config = function()
2024-01-21 23:32:15 +01:00
local config = require 'mason-lspconfig'
local lsp = require 'lspconfig'
local cmp = require 'cmp_nvim_lsp'
local noop = function() end
2023-11-15 21:39:37 +01:00
config.setup {
2023-07-11 23:48:37 +02:00
automatic_installation = true,
2023-07-22 15:40:45 +02:00
-- NOTE
-- Haskell: Managed by GHCup
2023-07-11 23:48:37 +02:00
ensure_installed = {
2024-01-21 23:32:15 +01:00
'lua_ls', -- Lua
'rust_analyzer', -- Rust
'bashls', -- Bash
'html', -- HTML
'cssls', -- CSS / SCSS
'tsserver', -- TypeScript
'astro', -- Astro
'svelte', -- Svelte
'pyright', -- Python
'rnix', -- Nix
'purescriptls', -- Purescript
'ltex', -- Literate - LaTeX, Markdown, etc.
'julials', -- Julia
2023-07-11 23:48:37 +02:00
},
2023-11-15 21:39:37 +01:00
}
2023-07-12 19:15:14 +02:00
2023-11-15 21:39:37 +01:00
config.setup_handlers {
function(name)
lsp[name].setup {
2023-07-12 19:15:14 +02:00
single_file_support = true,
2023-11-15 21:39:37 +01:00
capabilities = cmp.default_capabilities(),
2023-11-17 23:44:48 +01:00
}
2023-07-12 19:15:14 +02:00
end,
['rust_analyzer'] = noop,
2023-11-15 21:39:37 +01:00
}
2023-07-11 23:48:37 +02:00
end,
},
2023-07-22 15:40:45 +02:00
-- Automatic debugger install
2023-07-11 23:48:37 +02:00
{
2024-01-21 23:32:15 +01:00
'jay-babu/mason-nvim-dap.nvim',
2024-01-22 23:14:16 +01:00
enabled = is { 'standalone', 'linux' },
2023-07-22 15:40:45 +02:00
dependencies = {
2024-01-21 23:32:15 +01:00
'mfussenegger/nvim-dap',
'williamboman/mason.nvim',
2023-07-22 15:40:45 +02:00
},
2023-07-11 23:48:37 +02:00
config = function()
2024-01-21 23:32:15 +01:00
local config = require 'mason-nvim-dap'
2023-11-15 21:39:37 +01:00
config.setup {
2023-07-11 23:48:37 +02:00
automatic_installation = true,
ensure_installed = {
2024-01-21 23:32:15 +01:00
'codelldb',
2023-07-11 23:48:37 +02:00
},
2023-11-15 21:39:37 +01:00
}
2023-07-11 23:48:37 +02:00
end,
},
2023-07-22 15:40:45 +02:00
2023-11-15 21:39:37 +01:00
-- Tools for Neovim
{
2024-01-21 23:32:15 +01:00
'folke/neodev.nvim',
2024-01-22 23:14:16 +01:00
enabled = is { 'standalone', 'linux' },
2024-01-21 23:32:15 +01:00
ft = 'lua',
2023-11-15 21:39:37 +01:00
dependencies = {
2024-01-21 23:32:15 +01:00
'neovim/nvim-lspconfig',
2023-11-15 21:39:37 +01:00
},
config = function()
2024-01-21 23:32:15 +01:00
local neodev = require 'neodev'
local lsp = require 'lspconfig'
2023-11-15 21:39:37 +01:00
neodev.setup()
lsp.lua_ls.setup {
settings = {
2024-01-21 23:32:15 +01:00
Lua = { completion = { callSnippet = 'Replace' } }
2023-11-15 21:39:37 +01:00
}
}
end
},
2023-07-22 15:40:45 +02:00
-- Tools for Rust
{
2024-01-21 23:32:15 +01:00
'mrcjkb/rustaceanvim',
2024-01-22 23:14:16 +01:00
enabled = is { 'standalone', 'linux' },
2024-01-21 23:32:15 +01:00
version = '^3',
ft = { 'rust' },
init = function()
require 'plugins.rust-tools'
end
2023-07-10 14:30:11 +02:00
},
2023-07-22 15:40:45 +02:00
-- Tools for Haskell
2024-01-21 23:32:15 +01:00
require 'plugins.haskell-tools' {
'mrcjkb/haskell-tools.nvim',
2024-01-22 23:14:16 +01:00
enabled = is { 'standalone', 'linux' },
2024-01-21 23:32:15 +01:00
version = '^3',
ft = { 'haskell', 'lhaskell', 'cabal', 'cabalproject' },
2023-07-12 01:00:44 +02:00
dependencies = {
2024-01-21 23:32:15 +01:00
'nvim-lua/plenary.nvim',
'nvim-telescope/telescope.nvim',
2023-07-12 01:00:44 +02:00
},
},
2023-07-22 15:40:45 +02:00
2023-07-10 13:46:48 +02:00
}