mirror of
https://github.com/ivuorinen/dotfiles.git
synced 2026-01-28 00:45:28 +00:00
Compare commits
14 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7e4ea90a05 | ||
|
|
d264a33d21 | ||
| 224ee56461 | |||
|
|
8147490c65 | ||
|
|
c6d501347a | ||
|
|
d8044f2b6a | ||
|
|
1b3fe6d12e | ||
| 76b66d8c61 | |||
| 9c8644de17 | |||
| 120345b562 | |||
| 8accd4a60b | |||
| 8fb03660ad | |||
| 8b2dc74f2a | |||
| 8fa63e63bb |
23
.github/workflows/pre-commit-autoupdate.yml
vendored
Normal file
23
.github/workflows/pre-commit-autoupdate.yml
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
---
|
||||
name: Pre-commit autoupdate
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 0 * * *"
|
||||
workflow_dispatch:
|
||||
jobs:
|
||||
auto-update:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-python@v5.2.0
|
||||
- run: pip install pre-commit && pre-commit autoupdate
|
||||
- uses: peter-evans/create-pull-request@v5
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
branch: update/pre-commit-hooks
|
||||
title: "chore: update pre-commit hooks"
|
||||
commit-message: "chore: update pre-commit hooks"
|
||||
body: Update versions of pre-commit hooks to latest version.
|
||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -26,4 +26,6 @@ config/iterm2/AppSupport
|
||||
config/gnupg/S.*
|
||||
config/gnupg/s
|
||||
config/gnupg/private-keys-v1.d
|
||||
config/nvim/spell/*
|
||||
!config/nvim/spell/.gitkeep
|
||||
|
||||
|
||||
@@ -45,6 +45,6 @@ repos:
|
||||
- id: shfmt
|
||||
|
||||
- repo: https://github.com/rhysd/actionlint
|
||||
rev: v1.7.2
|
||||
rev: v1.7.3
|
||||
hooks:
|
||||
- id: actionlint
|
||||
|
||||
@@ -2,8 +2,8 @@ column_width = 120
|
||||
line_endings = "Unix"
|
||||
indent_type = "Spaces"
|
||||
indent_width = 2
|
||||
quote_style = "AutoPreferDouble"
|
||||
call_parentheses = "Always"
|
||||
quote_style = "AutoPreferSingle"
|
||||
call_parentheses = "None"
|
||||
collapse_simple_statement = "Always"
|
||||
|
||||
[sort_requires]
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
python 3.12.6
|
||||
python 3.12.7
|
||||
nodejs 22.9.0
|
||||
|
||||
@@ -27,3 +27,4 @@ bats 1.11.0
|
||||
gitleaks 8.18.4
|
||||
delta 0.18.1
|
||||
sops 3.9.0
|
||||
eza system
|
||||
|
||||
@@ -204,8 +204,6 @@ cask "font-open-sans"
|
||||
cask "font-roboto"
|
||||
cask "font-source-code-pro"
|
||||
cask "font-source-code-pro-for-powerline"
|
||||
cask "font-source-sans-pro"
|
||||
cask "font-source-serif-pro"
|
||||
# GIT client
|
||||
cask "fork"
|
||||
# HTTP and GraphQL Client
|
||||
|
||||
@@ -9,7 +9,7 @@ insert_final_newline = true
|
||||
charset = utf-8
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
max_line_length = 100
|
||||
max_line_length = 120
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[*.md]
|
||||
|
||||
3
config/nvim/.gitignore
vendored
Normal file
3
config/nvim/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
spell/*
|
||||
!spell/.gitkeep
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
column_width = 160
|
||||
column_width = 80
|
||||
line_endings = "Unix"
|
||||
indent_type = "Spaces"
|
||||
indent_width = 2
|
||||
quote_style = "AutoPreferSingle"
|
||||
call_parentheses = "None"
|
||||
collapse_simple_statement = "Always"
|
||||
|
||||
[sort_requires]
|
||||
enabled = true
|
||||
|
||||
|
||||
@@ -7,7 +7,14 @@
|
||||
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 }
|
||||
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' },
|
||||
@@ -21,7 +28,10 @@ end
|
||||
vim.opt.rtp:prepend(lazypath)
|
||||
|
||||
-- ── Add ~/.local/bin to the PATH ────────────────────────────────────
|
||||
vim.fn.setenv('PATH', vim.fn.expand '$HOME/.local/bin' .. ':' .. vim.fn.expand '$PATH')
|
||||
vim.fn.setenv(
|
||||
'PATH',
|
||||
vim.fn.expand '$HOME/.local/bin' .. ':' .. vim.fn.expand '$PATH'
|
||||
)
|
||||
|
||||
require 'options'
|
||||
require 'autogroups'
|
||||
|
||||
@@ -7,28 +7,48 @@ local autocmd = vim.api.nvim_create_autocmd -- Create autocommand
|
||||
|
||||
-- ── Highlight on yank ───────────────────────────────────────────────
|
||||
-- See `:help vim.highlight.on_yank()`
|
||||
local highlight_group = augroup('YankHighlight', { clear = true })
|
||||
autocmd('TextYankPost', {
|
||||
callback = function()
|
||||
vim.highlight.on_yank()
|
||||
end,
|
||||
group = highlight_group,
|
||||
callback = function() vim.highlight.on_yank() end,
|
||||
group = augroup('YankHighlight', { clear = true }),
|
||||
pattern = '*',
|
||||
})
|
||||
|
||||
-- ── Windows to close with "q" ───────────────────────────────────────
|
||||
autocmd('FileType', {
|
||||
callback = function()
|
||||
vim.keymap.set('n', '<esc>', ':bd<CR>', { buffer = true, silent = true })
|
||||
end,
|
||||
group = augroup('close_with_q', { clear = true }),
|
||||
pattern = {
|
||||
'PlenaryTestPopup',
|
||||
'checkhealth',
|
||||
'dbout',
|
||||
'gitsigns.blame',
|
||||
'grug-far',
|
||||
'help',
|
||||
'startuptime',
|
||||
'qf',
|
||||
'lspinfo',
|
||||
'man',
|
||||
'checkhealth',
|
||||
'neotest-output',
|
||||
'neotest-output-panel',
|
||||
'neotest-summary',
|
||||
'notify',
|
||||
'qf',
|
||||
'spectre_panel',
|
||||
'startuptime',
|
||||
'tsplayground',
|
||||
},
|
||||
callback = function(event)
|
||||
vim.bo[event.buf].buflisted = false
|
||||
vim.keymap.set('n', 'q', '<cmd>close<cr>', {
|
||||
buffer = event.buf,
|
||||
silent = true,
|
||||
desc = 'Quit buffer',
|
||||
})
|
||||
end,
|
||||
})
|
||||
|
||||
-- ── make it easier to close man-files when opened inline ────────────
|
||||
autocmd('FileType', {
|
||||
group = augroup('man_unlisted', { clear = true }),
|
||||
pattern = { 'man' },
|
||||
callback = function(event) vim.bo[event.buf].buflisted = false end,
|
||||
})
|
||||
|
||||
-- vim: ts=2 sts=2 sw=2 et
|
||||
|
||||
@@ -33,7 +33,8 @@ vim.opt.showmode = false
|
||||
-- Schedule the setting after `UiEnter` because it can increase startup-time.
|
||||
-- See `:help 'clipboard'`
|
||||
vim.schedule(function()
|
||||
vim.opt.clipboard = 'unnamedplus'
|
||||
local c = vim.env.SSH_TTY and '' or 'unnamedplus'
|
||||
vim.opt.clipboard = c
|
||||
end)
|
||||
|
||||
vim.opt.breakindent = true -- Enable break indent
|
||||
@@ -94,7 +95,8 @@ vim.g.loaded_ruby_provider = 0
|
||||
-- kevinhwang91/nvim-ufo settings
|
||||
vim.o.fillchars = [[eob: ,fold: ,foldopen:,foldsep: ,foldclose:]]
|
||||
vim.o.foldcolumn = '1' -- '0' is not bad
|
||||
vim.o.foldlevel = 99 -- Using ufo provider need a large value, feel free to decrease the value
|
||||
-- Using ufo provider need a large value, feel free to decrease the value
|
||||
vim.o.foldlevel = 99
|
||||
vim.o.foldlevelstart = 99
|
||||
vim.o.foldenable = true
|
||||
|
||||
@@ -103,9 +105,27 @@ vim.o.winwidth = 15
|
||||
vim.o.winminwidth = 10
|
||||
vim.o.equalalways = false
|
||||
|
||||
-- folke/noice.nvim settings
|
||||
vim.g.noice_ignored_filetypes = {
|
||||
'fugitiveblame',
|
||||
'fugitive',
|
||||
'gitcommit',
|
||||
'noice',
|
||||
}
|
||||
|
||||
-- ── Deal with word wrap ───────────────────────────────────────────────────────
|
||||
local m = vim.api.nvim_set_keymap
|
||||
m('n', 'k', "v:count == 0 ? 'gk' : 'k'", { desc = 'Move up', noremap = true, expr = true })
|
||||
m('n', 'j', "v:count == 0 ? 'gj' : 'j'", { desc = 'Move down', noremap = true, expr = true })
|
||||
m(
|
||||
'n',
|
||||
'k',
|
||||
"v:count == 0 ? 'gk' : 'k'",
|
||||
{ desc = 'Move up', noremap = true, expr = true }
|
||||
)
|
||||
m(
|
||||
'n',
|
||||
'j',
|
||||
"v:count == 0 ? 'gj' : 'j'",
|
||||
{ desc = 'Move down', noremap = true, expr = true }
|
||||
)
|
||||
|
||||
-- vim: ts=2 sts=2 sw=2 et
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
-- Autoformat
|
||||
-- https://github.com/stevearc/conform.nvim
|
||||
return {
|
||||
'stevearc/conform.nvim',
|
||||
event = { 'BufWritePre' },
|
||||
cmd = { 'ConformInfo' },
|
||||
keys = {
|
||||
{
|
||||
'<leader>cf',
|
||||
'<cmd>lua require("conform").format({ async = true, lsp_fallback = true })<cr>',
|
||||
mode = '',
|
||||
desc = 'Format buffer',
|
||||
},
|
||||
},
|
||||
opts = {
|
||||
notify_on_error = false,
|
||||
format_on_save = function(bufnr)
|
||||
-- Disable "format_on_save lsp_fallback" for languages that don't
|
||||
-- have a well standardized coding style. You can add additional
|
||||
-- languages here or re-enable it for the disabled ones.
|
||||
local disable_filetypes = { c = true, cpp = true }
|
||||
return {
|
||||
timeout_ms = 500,
|
||||
lsp_fallback = not disable_filetypes[vim.bo[bufnr].filetype],
|
||||
}
|
||||
end,
|
||||
formatters_by_ft = {
|
||||
lua = { 'stylua' },
|
||||
-- Conform can also run multiple formatters sequentially
|
||||
-- python = { "isort", "black" },
|
||||
--
|
||||
-- You can use 'stop_after_first' to run the first available formatter from the list
|
||||
javascript = { 'prettierd', 'prettier', stop_after_first = true },
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -4,9 +4,11 @@ return {
|
||||
{
|
||||
'hrsh7th/nvim-cmp',
|
||||
lazy = false,
|
||||
version = false, -- Use the latest version of the plugin
|
||||
event = 'InsertEnter',
|
||||
dependencies = {
|
||||
'hrsh7th/cmp-nvim-lsp',
|
||||
|
||||
-- ── LuaSnip Dependencies ────────────────────────────────────────────
|
||||
-- Snippet Engine for Neovim written in Lua.
|
||||
-- https://github.com/L3MON4D3/LuaSnip
|
||||
@@ -14,14 +16,17 @@ return {
|
||||
-- luasnip completion source for nvim-cmp
|
||||
-- https://github.com/saadparwaiz1/cmp_luasnip
|
||||
{ 'saadparwaiz1/cmp_luasnip' },
|
||||
|
||||
-- ── Adds other completion capabilities. ─────────────────────────────
|
||||
-- ── nvim-cmp does not ship with all sources by default.
|
||||
-- ── They are split into multiple repos for maintenance purposes.
|
||||
{ 'hrsh7th/cmp-nvim-lsp' },
|
||||
{ 'hrsh7th/cmp-buffer' },
|
||||
{ 'hrsh7th/cmp-path' },
|
||||
-- cmp import and use all environment variables from .env.* and system
|
||||
-- https://github.com/SergioRibera/cmp-dotenv
|
||||
{ 'SergioRibera/cmp-dotenv' },
|
||||
|
||||
-- ── Other deps ──────────────────────────────────────────────────────
|
||||
-- vscode-like pictograms for neovim lsp completion items
|
||||
-- https://github.com/onsails/lspkind.nvim
|
||||
@@ -39,8 +44,8 @@ return {
|
||||
cmd = 'Copilot',
|
||||
build = ':Copilot setup',
|
||||
event = { 'InsertEnter', 'LspAttach' },
|
||||
fix_pairs = true,
|
||||
opts = {
|
||||
fix_pairs = true,
|
||||
suggestion = { enabled = false },
|
||||
panel = { enabled = false },
|
||||
filetypes = {
|
||||
@@ -50,9 +55,7 @@ return {
|
||||
},
|
||||
},
|
||||
},
|
||||
config = function()
|
||||
require('copilot_cmp').setup()
|
||||
end,
|
||||
config = function() require('copilot_cmp').setup() end,
|
||||
},
|
||||
},
|
||||
config = function()
|
||||
@@ -66,36 +69,36 @@ return {
|
||||
if vim.api.nvim_get_option_value('buftype', {}) == 'prompt' then
|
||||
return false
|
||||
end
|
||||
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
|
||||
return col ~= 0 and vim.api.nvim_buf_get_text(0, line - 1, 0, line - 1, col, {})[1]:match '^%s*$' == nil
|
||||
local line, col = table.unpack(vim.api.nvim_win_get_cursor(0))
|
||||
return col ~= 0
|
||||
and vim.api
|
||||
.nvim_buf_get_text(0, line - 1, 0, line - 1, col, {})[1]
|
||||
:match '^%s*$'
|
||||
== nil
|
||||
end
|
||||
|
||||
cmp.setup {
|
||||
formatting = {
|
||||
format = lspkind.cmp_format {
|
||||
mode = 'symbol',
|
||||
max_width = function()
|
||||
return math.floor(0.45 * vim.o.columns)
|
||||
end,
|
||||
max_width = function() return math.floor(0.45 * vim.o.columns) end,
|
||||
show_labelDetails = true,
|
||||
symbol_map = {
|
||||
Copilot = '',
|
||||
Text = '',
|
||||
Constructor = '',
|
||||
},
|
||||
},
|
||||
},
|
||||
view = {
|
||||
width = function(_, _)
|
||||
return math.min(80, vim.o.columns)
|
||||
end,
|
||||
width = function(_, _) return math.min(80, vim.o.columns) end,
|
||||
entries = {
|
||||
name = 'custom',
|
||||
selection_order = 'near_cursor',
|
||||
},
|
||||
},
|
||||
snippet = {
|
||||
expand = function(args)
|
||||
luasnip.lsp_expand(args.body)
|
||||
end,
|
||||
expand = function(args) luasnip.lsp_expand(args.body) end,
|
||||
},
|
||||
mapping = cmp.mapping.preset.insert {
|
||||
['<C-d>'] = cmp.mapping.scroll_docs(-4),
|
||||
|
||||
@@ -3,28 +3,57 @@ return {
|
||||
-- A better annotation generator.
|
||||
-- Supports multiple languages and annotation conventions.
|
||||
-- https://github.com/danymat/neogen
|
||||
{ 'danymat/neogen', version = '*', opts = { enabled = true, snippet_engine = 'luasnip' } },
|
||||
{
|
||||
'danymat/neogen',
|
||||
version = '*',
|
||||
opts = { enabled = true, snippet_engine = 'luasnip' },
|
||||
},
|
||||
|
||||
-- The Refactoring library based off the Refactoring book by Martin Fowler
|
||||
-- https://github.com/ThePrimeagen/refactoring.nvim
|
||||
{ 'ThePrimeagen/refactoring.nvim', dependencies = { 'nvim-lua/plenary.nvim', 'nvim-treesitter/nvim-treesitter' }, opts = {} },
|
||||
{
|
||||
'ThePrimeagen/refactoring.nvim',
|
||||
version = '*',
|
||||
dependencies = { 'nvim-lua/plenary.nvim', 'nvim-treesitter/nvim-treesitter' },
|
||||
opts = {},
|
||||
},
|
||||
|
||||
-- All the npm/yarn/pnpm commands I don't want to type
|
||||
-- https://github.com/vuki656/package-info.nvim
|
||||
{ 'vuki656/package-info.nvim', dependencies = { 'MunifTanjim/nui.nvim' } },
|
||||
{
|
||||
'vuki656/package-info.nvim',
|
||||
version = '*',
|
||||
dependencies = { 'MunifTanjim/nui.nvim' },
|
||||
opts = {},
|
||||
},
|
||||
|
||||
-- Add/change/delete surrounding delimiter pairs with ease. Written with ❤️ in Lua.
|
||||
-- https://github.com/kylechui/nvim-surround
|
||||
{ 'kylechui/nvim-surround', version = '*', event = 'VeryLazy' },
|
||||
{
|
||||
'kylechui/nvim-surround',
|
||||
version = '*',
|
||||
event = 'VeryLazy',
|
||||
opts = {},
|
||||
},
|
||||
|
||||
-- Highlight, list and search todo comments in your projects
|
||||
-- https://github.com/folke/todo-comments.nvim
|
||||
{ 'folke/todo-comments.nvim', dependencies = { 'nvim-lua/plenary.nvim' }, opts = {} },
|
||||
{
|
||||
'folke/todo-comments.nvim',
|
||||
version = '*',
|
||||
dependencies = { 'nvim-lua/plenary.nvim' },
|
||||
opts = {},
|
||||
},
|
||||
|
||||
-- Commenting
|
||||
-- "gc" to comment visual regions/lines
|
||||
-- https://github.com/numToStr/Comment.nvim
|
||||
{ 'numToStr/Comment.nvim', event = { 'BufRead', 'BufNewFile' }, opts = {} },
|
||||
{
|
||||
'numToStr/Comment.nvim',
|
||||
version = '*',
|
||||
event = { 'BufRead', 'BufNewFile' },
|
||||
opts = {},
|
||||
},
|
||||
|
||||
-- Detect tabstop and shiftwidth automatically
|
||||
-- https://github.com/tpope/vim-sleuth
|
||||
|
||||
@@ -1,62 +1,107 @@
|
||||
-- Quickstart configs for Nvim LSP
|
||||
-- Quick start configs for Nvim LSP
|
||||
-- https://github.com/neovim/nvim-lspconfig
|
||||
return {
|
||||
{
|
||||
'neovim/nvim-lspconfig',
|
||||
lazy = false,
|
||||
dependencies = {
|
||||
-- Garbage collector that stops inactive LSP clients to free RAM
|
||||
-- https://github.com/Zeioth/garbage-day.nvim
|
||||
{
|
||||
'zeioth/garbage-day.nvim',
|
||||
dependencies = 'neovim/nvim-lspconfig',
|
||||
event = 'VeryLazy',
|
||||
opts = {},
|
||||
},
|
||||
|
||||
-- improve neovim lsp experience
|
||||
-- https://github.com/nvimdev/lspsaga.nvim
|
||||
{
|
||||
'nvimdev/lspsaga.nvim',
|
||||
dependencies = {
|
||||
'nvim-treesitter/nvim-treesitter', -- optional
|
||||
'nvim-tree/nvim-web-devicons', -- optional
|
||||
},
|
||||
opts = {
|
||||
code_action = {
|
||||
show_server_name = true,
|
||||
},
|
||||
diagnostic = {
|
||||
keys = {
|
||||
quit = { 'q', '<ESC>' },
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
-- ── Mason and LSPConfig integration ─────────────────────────────────
|
||||
-- Automatically install LSPs to stdpath for neovim
|
||||
|
||||
-- Portable package manager for Neovim that runs everywhere Neovim runs.
|
||||
-- Easily install and manage LSP servers, DAP servers, linters,
|
||||
-- and formatters.
|
||||
-- Easily install and manage LSP servers, DAP servers, linters, and formatters.
|
||||
-- https://github.com/williamboman/mason.nvim
|
||||
{ 'williamboman/mason.nvim' },
|
||||
{ 'williamboman/mason-lspconfig.nvim' },
|
||||
{ 'WhoIsSethDaniel/mason-tool-installer.nvim' },
|
||||
|
||||
-- ── Linting ─────────────────────────────────────────────────────────
|
||||
-- An asynchronous linter plugin for Neovim complementary to the
|
||||
-- built-in Language Server Protocol support.
|
||||
-- https://github.com/mfussenegger/nvim-lint
|
||||
{
|
||||
'mfussenegger/nvim-lint',
|
||||
event = { 'BufReadPre', 'BufNewFile' },
|
||||
'williamboman/mason.nvim',
|
||||
cmd = 'Mason',
|
||||
run = ':MasonUpdate',
|
||||
},
|
||||
-- Extension to mason.nvim that makes it easier to use lspconfig with mason.nvim.
|
||||
-- https://github.com/williamboman/mason-lspconfig.nvim
|
||||
{ 'williamboman/mason-lspconfig.nvim' },
|
||||
|
||||
-- ── Formatting ──────────────────────────────────────────────────────
|
||||
-- Lightweight yet powerful formatter plugin for Neovim
|
||||
-- https://github.com/stevearc/conform.nvim
|
||||
{
|
||||
'stevearc/conform.nvim',
|
||||
event = { 'BufWritePre' },
|
||||
cmd = { 'ConformInfo' },
|
||||
config = function()
|
||||
-- Select first conform formatter that is available
|
||||
---@param bufnr integer
|
||||
---@param ... string
|
||||
---@return string
|
||||
local function first(bufnr, ...)
|
||||
local conform = require 'conform'
|
||||
for i = 1, select('#', ...) do
|
||||
local formatter = select(i, ...)
|
||||
if conform.get_formatter_info(formatter, bufnr).available then
|
||||
return formatter
|
||||
end
|
||||
end
|
||||
return select(1, ...)
|
||||
end
|
||||
|
||||
require('conform').setup {
|
||||
-- Enable or disable logging
|
||||
notify_on_error = true,
|
||||
-- Set the default formatter for all filetypes
|
||||
default_formatter = 'injected',
|
||||
-- Set the default formatter for all filetypes
|
||||
default_formatter_opts = {
|
||||
lsp_format = 'fallback',
|
||||
-- Set the default formatter for all filetypes
|
||||
-- formatter = 'injected',
|
||||
-- Set the default formatter for all filetypes
|
||||
-- formatter_opts = {},
|
||||
},
|
||||
formatters_by_ft = {
|
||||
markdown = function(bufnr)
|
||||
return { first(bufnr, 'prettierd', 'prettier'), 'injected' }
|
||||
end,
|
||||
javascript = function(bufnr)
|
||||
return { first(bufnr, 'prettier', 'eslint'), 'injected' }
|
||||
end,
|
||||
lua = { 'stylua' },
|
||||
-- Conform will run multiple formatters sequentially
|
||||
-- python = { 'isort', 'black', lsp_format = 'fallback' },
|
||||
-- You can customize some of the format options for the filetype (:help conform.format)
|
||||
-- rust = { 'rustfmt', lsp_format = 'fallback' },
|
||||
},
|
||||
format_on_save = function(bufnr)
|
||||
-- Disable autoformat on certain filetypes
|
||||
local ignore_filetypes = {
|
||||
'c',
|
||||
'cpp',
|
||||
'sql',
|
||||
'java',
|
||||
}
|
||||
if vim.tbl_contains(ignore_filetypes, vim.bo[bufnr].filetype) then
|
||||
return
|
||||
end
|
||||
-- Disable with a global or buffer-local variable
|
||||
if
|
||||
vim.g.disable_autoformat or vim.b[bufnr].disable_autoformat
|
||||
then
|
||||
return
|
||||
end
|
||||
-- Disable autoformat for files in a certain path
|
||||
local bufname = vim.api.nvim_buf_get_name(bufnr)
|
||||
if bufname:match '/node_modules/' then return end
|
||||
if bufname:match '/vendor/' then return end
|
||||
if bufname:match '/dist/' then return end
|
||||
if bufname:match '/build/' then return end
|
||||
|
||||
return { timeout_ms = 500, lsp_format = 'fallback' }
|
||||
end,
|
||||
}
|
||||
end,
|
||||
init = function()
|
||||
-- If you want the formatexpr, here is the place to set it
|
||||
vim.o.formatexpr = "v:lua.require'conform'.formatexpr()"
|
||||
end,
|
||||
},
|
||||
-- Extension to mason.nvim that makes it
|
||||
-- easier to use nvim-lint with mason.nvim
|
||||
-- https://github.com/rshkarin/mason-nvim-lint
|
||||
{ 'rshkarin/mason-nvim-lint' },
|
||||
|
||||
-- ── Misc ────────────────────────────────────────────────────────────
|
||||
-- vscode-like pictograms for neovim lsp completion items
|
||||
@@ -82,54 +127,39 @@ return {
|
||||
---@output nil
|
||||
local on_attach = function(_, bufnr)
|
||||
-- Create a command `:Format` local to the LSP buffer
|
||||
vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_)
|
||||
if vim.lsp.buf.format then
|
||||
vim.lsp.buf.format()
|
||||
elseif vim.lsp.buf.formatting then
|
||||
vim.lsp.buf.formatting()
|
||||
else
|
||||
require('conform').format { async = true, lsp_fallback = true }
|
||||
vim.api.nvim_create_user_command('Format', function(args)
|
||||
local range = nil
|
||||
if args.count ~= -1 then
|
||||
local end_line = vim.api.nvim_buf_get_lines(
|
||||
bufnr,
|
||||
args.line2 - 1,
|
||||
args.line2,
|
||||
true
|
||||
)[1]
|
||||
range = {
|
||||
start = { args.line1, 0 },
|
||||
['end'] = { args.line2, end_line:len() },
|
||||
}
|
||||
end
|
||||
end, { desc = 'Format current buffer with LSP' })
|
||||
require('conform').format {
|
||||
async = true,
|
||||
lsp_format = 'fallback',
|
||||
range = range,
|
||||
}
|
||||
end, { range = true, desc = 'Format current buffer with LSP' })
|
||||
end
|
||||
|
||||
-- ── Setup mason so it can manage external tooling ───────────────────
|
||||
require('mason').setup()
|
||||
|
||||
-- ── Enable the following language servers ───────────────────────────
|
||||
-- :help lspconfig-all for all pre-configured LSPs
|
||||
local servers = {
|
||||
ast_grep = {},
|
||||
|
||||
actionlint = {}, -- GitHub Actions
|
||||
ansiblels = {}, -- Ansible
|
||||
bashls = {}, -- Bash
|
||||
-- csharp_ls = {}, -- C#, requires dotnet executable
|
||||
css_variables = {}, -- CSS
|
||||
cssls = {}, -- CSS
|
||||
docker_compose_language_service = {}, -- Docker compose
|
||||
dockerls = {}, -- Docker
|
||||
eslint = {}, -- ESLint
|
||||
gitlab_ci_ls = {}, -- GitLab CI
|
||||
gopls = {}, -- Go
|
||||
html = {}, -- HTML
|
||||
intelephense = {}, -- PHP
|
||||
pest_ls = {}, -- Pest (PHP)
|
||||
phpactor = {}, -- PHP
|
||||
psalm = {}, -- PHP
|
||||
pyright = {}, -- Python
|
||||
semgrep = {}, -- Security
|
||||
shellcheck = {}, -- Shell scripts
|
||||
shfmt = {}, -- Shell scripts formatting
|
||||
stylelint_lsp = {}, -- Stylelint for S/CSS
|
||||
stylua = {}, -- Used to format Lua code
|
||||
tailwindcss = {}, -- Tailwind CSS
|
||||
terraformls = {}, -- Terraform
|
||||
tflint = {}, -- Terraform
|
||||
ts_ls = {}, -- TypeScript/JS
|
||||
typos_lsp = {}, -- Better writing
|
||||
ts_ls = {}, -- TypeScript
|
||||
volar = {}, -- Vue
|
||||
yamlls = {}, -- YAML
|
||||
|
||||
lua_ls = {
|
||||
settings = {
|
||||
@@ -184,105 +214,218 @@ return {
|
||||
-- Mason servers should be it's own variable for mason-nvim-lint
|
||||
-- See: https://mason-registry.dev/registry/list
|
||||
local mason_servers = {
|
||||
'actionlint',
|
||||
'ansible-language-server',
|
||||
'ansible-lint',
|
||||
'bash-language-server',
|
||||
'blade-formatter',
|
||||
'clang-format',
|
||||
'codespell',
|
||||
'commitlint',
|
||||
'diagnostic-languageserver',
|
||||
'docker-compose-language-service',
|
||||
'dockerfile-language-server',
|
||||
'editorconfig-checker',
|
||||
'fixjson',
|
||||
'flake8',
|
||||
'html-lsp',
|
||||
'jq',
|
||||
'jsonlint',
|
||||
'lua-language-server',
|
||||
'luacheck',
|
||||
'php-cs-fixer',
|
||||
'phpcbf',
|
||||
'phpcs',
|
||||
'phpmd',
|
||||
'semgrep',
|
||||
'prettier',
|
||||
'shellcheck',
|
||||
'shfmt',
|
||||
'stylelint',
|
||||
'stylua',
|
||||
'vim-language-server',
|
||||
'vue-language-server',
|
||||
'yamllint',
|
||||
}
|
||||
local ensure_installed = vim.tbl_keys(servers or {})
|
||||
vim.list_extend(ensure_installed, mason_servers)
|
||||
|
||||
-- ── Automagically install tools ─────────────────────────────────────
|
||||
require('mason-tool-installer').setup {
|
||||
-- ── Setup mason so it can manage external tooling ───────────────────
|
||||
require('mason').setup {
|
||||
ensure_installed = ensure_installed,
|
||||
auto_update = true,
|
||||
}
|
||||
|
||||
-- ── Ensure the servers above are installed ──────────────────────────
|
||||
require('mason-lspconfig').setup {
|
||||
automatic_installation = true,
|
||||
ensure_installed = servers,
|
||||
}
|
||||
|
||||
-- nvim-cmp supports additional completion capabilities
|
||||
local capabilities = vim.lsp.protocol.make_client_capabilities()
|
||||
capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities)
|
||||
-- Tell the server the capability of foldingRange,
|
||||
-- Neovim hasn't added foldingRange to default capabilities, users must add it manually
|
||||
capabilities.textDocument.foldingRange = {
|
||||
dynamicRegistration = true,
|
||||
lineFoldingOnly = true,
|
||||
}
|
||||
|
||||
require('mason-lspconfig').setup_handlers {
|
||||
capabilities.textDocument.completion.completionItem.snippetSupport = true
|
||||
capabilities.textDocument.completion.completionItem.resolveSupport = {
|
||||
properties = {
|
||||
'documentation',
|
||||
'detail',
|
||||
'additionalTextEdits',
|
||||
},
|
||||
}
|
||||
|
||||
local lspconfig_handlers = {
|
||||
-- The first entry (without a key) will be the default handler
|
||||
-- and will be called for each installed server that doesn't have
|
||||
-- a dedicated handler.
|
||||
function(server_name) -- default handler (optional)
|
||||
require('lspconfig')[server_name].setup {}
|
||||
end,
|
||||
-- Next, you can provide a dedicated handler for specific servers.
|
||||
-- For example, a handler override for the `rust_analyzer`:
|
||||
-- ['rust_analyzer'] = function()
|
||||
-- require('rust-tools').setup {}
|
||||
-- end,
|
||||
}
|
||||
|
||||
for _, lsp in ipairs(servers) do
|
||||
require('lspconfig')[lsp].setup {
|
||||
on_attach = on_attach,
|
||||
capabilities = capabilities,
|
||||
}
|
||||
end
|
||||
|
||||
require('lspconfig').lua_ls.setup {
|
||||
on_attach = on_attach,
|
||||
capabilities = capabilities,
|
||||
settings = {
|
||||
Lua = servers.lua_ls.settings.Lua,
|
||||
},
|
||||
}
|
||||
|
||||
vim.api.nvim_create_autocmd('FileType', {
|
||||
pattern = 'sh',
|
||||
callback = function()
|
||||
vim.lsp.start {
|
||||
name = 'bash-language-server',
|
||||
cmd = { 'bash-language-server', 'start' },
|
||||
require('lspconfig')[server_name].setup {
|
||||
on_attach = on_attach,
|
||||
capabilities = capabilities,
|
||||
}
|
||||
end,
|
||||
})
|
||||
|
||||
-- ── Setup linting ───────────────────────────────────────────────────
|
||||
require('mason-nvim-lint').setup {
|
||||
ensure_installed = mason_servers or {},
|
||||
quiet_mode = true,
|
||||
}
|
||||
local lint = require 'lint'
|
||||
local lint_augroup = vim.api.nvim_create_augroup('lint', { clear = true })
|
||||
vim.api.nvim_create_autocmd({ 'BufEnter', 'BufWritePost', 'InsertLeave' }, {
|
||||
group = lint_augroup,
|
||||
callback = function()
|
||||
lint.try_lint()
|
||||
-- Next, you can provide targeted overrides for specific servers.
|
||||
['lua_ls'] = function()
|
||||
require('lspconfig')['lua_ls'].setup { settings = servers.lua_ls }
|
||||
end,
|
||||
})
|
||||
['jsonls'] = function()
|
||||
require('lspconfig')['jsonls'].setup { settings = servers.jsonls }
|
||||
end,
|
||||
}
|
||||
|
||||
require('mason-lspconfig').setup {
|
||||
ensure_installed = vim.tbl_keys(servers or {}),
|
||||
automatic_installation = true,
|
||||
handlers = lspconfig_handlers,
|
||||
}
|
||||
end,
|
||||
},
|
||||
|
||||
-- Garbage collector that stops inactive LSP clients to free RAM
|
||||
-- https://github.com/Zeioth/garbage-day.nvim
|
||||
{
|
||||
'zeioth/garbage-day.nvim',
|
||||
dependencies = 'neovim/nvim-lspconfig',
|
||||
event = 'VeryLazy',
|
||||
opts = {},
|
||||
},
|
||||
|
||||
-- improve neovim lsp experience
|
||||
-- https://github.com/nvimdev/lspsaga.nvim
|
||||
-- https://nvimdev.github.io/lspsaga/
|
||||
{
|
||||
'nvimdev/lspsaga.nvim',
|
||||
event = 'LspAttach',
|
||||
dependencies = {
|
||||
'nvim-treesitter/nvim-treesitter', -- optional
|
||||
'nvim-tree/nvim-web-devicons', -- optional
|
||||
},
|
||||
opts = {
|
||||
code_action = {
|
||||
show_server_name = true,
|
||||
},
|
||||
diagnostic = {
|
||||
keys = {
|
||||
quit = { 'q', '<ESC>' },
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
-- Not UFO in the sky, but an ultra fold in Neovim.
|
||||
-- https://github.com/kevinhwang91/nvim-ufo/
|
||||
{
|
||||
'kevinhwang91/nvim-ufo',
|
||||
version = '*',
|
||||
dependencies = {
|
||||
{ 'neovim/nvim-lspconfig' },
|
||||
{ 'kevinhwang91/promise-async' },
|
||||
{ 'nvim-treesitter/nvim-treesitter', run = ':TSUpdate' },
|
||||
{
|
||||
-- Status column plugin that provides a configurable
|
||||
-- 'statuscolumn' and click handlers.
|
||||
-- https://github.com/luukvbaal/statuscol.nvim
|
||||
'luukvbaal/statuscol.nvim',
|
||||
config = function()
|
||||
local builtin = require 'statuscol.builtin'
|
||||
require('statuscol').setup {
|
||||
relculright = true,
|
||||
segments = {
|
||||
{
|
||||
text = { builtin.foldfunc },
|
||||
click = 'v:lua.ScFa',
|
||||
},
|
||||
{
|
||||
sign = {
|
||||
namespace = { 'diagnostic/signs' },
|
||||
maxwidth = 2,
|
||||
-- auto = true,
|
||||
},
|
||||
click = 'v:lua.ScSa',
|
||||
},
|
||||
{
|
||||
text = { builtin.lnumfunc, ' ' },
|
||||
click = 'v:lua.ScLa',
|
||||
},
|
||||
},
|
||||
}
|
||||
end,
|
||||
},
|
||||
},
|
||||
opts = {
|
||||
open_fold_hl_timeout = 150,
|
||||
close_fold_kinds_for_ft = { 'imports', 'comment' },
|
||||
preview = {
|
||||
win_config = {
|
||||
border = { '', '─', '', '', '', '─', '', '' },
|
||||
winhighlight = 'Normal:Folded',
|
||||
winblend = 0,
|
||||
},
|
||||
mappings = {
|
||||
scrollU = '<C-u>',
|
||||
scrollD = '<C-d>',
|
||||
jumpTop = '[',
|
||||
jumpBot = ']',
|
||||
},
|
||||
},
|
||||
|
||||
provider_selector = function(_, _, _) -- bufnr, filetype, buftype
|
||||
return { 'treesitter', 'indent' }
|
||||
end,
|
||||
|
||||
-- fold_virt_text_handler
|
||||
--
|
||||
-- This handler is called when the fold text is too long to fit in the window.
|
||||
-- It is expected to truncate the text and return a new list of virtual text.
|
||||
--
|
||||
---@param virtText table The current virtual text list.
|
||||
---@param lnum number The line number of the first line in the fold.
|
||||
---@param endLnum number The line number of the last line in the fold.
|
||||
---@param width number The width of the window.
|
||||
---@param truncate function Truncate function
|
||||
---@return table
|
||||
fold_virt_text_handler = function(
|
||||
virtText,
|
||||
lnum,
|
||||
endLnum,
|
||||
width,
|
||||
truncate
|
||||
)
|
||||
local newVirtText = {}
|
||||
local suffix = (' %d '):format(endLnum - lnum)
|
||||
local sufWidth = vim.fn.strdisplaywidth(suffix)
|
||||
local targetWidth = width - sufWidth
|
||||
local curWidth = 0
|
||||
for _, chunk in ipairs(virtText) do
|
||||
local chunkText = chunk[1]
|
||||
local chunkWidth = vim.fn.strdisplaywidth(chunkText)
|
||||
if targetWidth > curWidth + chunkWidth then
|
||||
table.insert(newVirtText, chunk)
|
||||
else
|
||||
chunkText = truncate(chunkText, targetWidth - curWidth)
|
||||
local hlGroup = chunk[2]
|
||||
table.insert(newVirtText, { chunkText, hlGroup })
|
||||
chunkWidth = vim.fn.strdisplaywidth(chunkText)
|
||||
-- str width returned from truncate() may less than 2nd argument, need padding
|
||||
if curWidth + chunkWidth < targetWidth then
|
||||
suffix = suffix .. (' '):rep(targetWidth - curWidth - chunkWidth)
|
||||
end
|
||||
break
|
||||
end
|
||||
curWidth = curWidth + chunkWidth
|
||||
end
|
||||
table.insert(newVirtText, { suffix, 'MoreMsg' })
|
||||
return newVirtText
|
||||
end,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
@@ -6,33 +6,67 @@ return {
|
||||
'kyazdani42/nvim-web-devicons',
|
||||
'folke/noice.nvim',
|
||||
},
|
||||
opts = {
|
||||
options = {
|
||||
icons_enabled = true,
|
||||
component_separators = '|',
|
||||
section_separators = '',
|
||||
},
|
||||
-- Sections
|
||||
-- +-------------------------------------------------+
|
||||
-- | A | B | C X | Y | Z |
|
||||
-- +-------------------------------------------------+
|
||||
sections = {
|
||||
lualine_b = {
|
||||
{
|
||||
'buffers',
|
||||
},
|
||||
},
|
||||
config = function()
|
||||
local function diff_source()
|
||||
local gitsigns = vim.b.gitsigns_status_dict
|
||||
if gitsigns then
|
||||
return {
|
||||
added = gitsigns.added,
|
||||
modified = gitsigns.changed,
|
||||
removed = gitsigns.removed,
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
lualine_x = {
|
||||
{
|
||||
require('noice').api.statusline.mode.get,
|
||||
cond = require('noice').api.statusline.mode.has,
|
||||
require('lualine').setup {
|
||||
options = {
|
||||
icons_enabled = true,
|
||||
component_separators = '|',
|
||||
section_separators = '',
|
||||
},
|
||||
-- Sections
|
||||
-- +-------------------------------------------------+
|
||||
-- | A | B | C X | Y | Z |
|
||||
-- +-------------------------------------------------+
|
||||
sections = {
|
||||
lualine_a = {
|
||||
'mode',
|
||||
},
|
||||
{
|
||||
require('noice').api.status.command.get,
|
||||
cond = require('noice').api.status.command.has,
|
||||
lualine_b = {
|
||||
{ 'b:gitsigns_head', icon = '' },
|
||||
{ 'diff', source = diff_source },
|
||||
'diagnostics',
|
||||
},
|
||||
lualine_c = {
|
||||
'buffers',
|
||||
-- 'filename',
|
||||
},
|
||||
lualine_x = {
|
||||
-- 'fileformat',
|
||||
'filetype',
|
||||
},
|
||||
lualine_y = {
|
||||
-- 'progress'
|
||||
},
|
||||
lualine_z = {
|
||||
{
|
||||
require('noice').api.statusline.mode.get,
|
||||
cond = require('noice').api.statusline.mode.has,
|
||||
},
|
||||
{
|
||||
require('noice').api.status.command.get,
|
||||
cond = require('noice').api.status.command.has,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
inactive_sections = {
|
||||
lualine_a = {},
|
||||
lualine_b = {},
|
||||
lualine_c = { 'filename' },
|
||||
lualine_x = { 'location' },
|
||||
lualine_y = {},
|
||||
lualine_z = {},
|
||||
},
|
||||
}
|
||||
end,
|
||||
}
|
||||
|
||||
@@ -2,13 +2,6 @@
|
||||
-- for messages, cmdline and the popupmenu.
|
||||
-- https://github.com/folke/noice.nvim
|
||||
|
||||
vim.g.noice_ignored_filetypes = {
|
||||
'fugitiveblame',
|
||||
'fugitive',
|
||||
'gitcommit',
|
||||
'noice',
|
||||
}
|
||||
|
||||
return {
|
||||
'folke/noice.nvim',
|
||||
lazy = false,
|
||||
|
||||
@@ -41,12 +41,18 @@ return {
|
||||
:find()
|
||||
end
|
||||
|
||||
vim.keymap.set('n', '<leader>hw', function()
|
||||
toggle_telescope(harpoon:list())
|
||||
end, { desc = 'Open harpoon window with telescope' })
|
||||
vim.keymap.set('n', '<leader>ht', function()
|
||||
harpoon.ui:toggle_quick_menu(harpoon:list())
|
||||
end, { desc = 'Open Harpoon Quick menu' })
|
||||
vim.keymap.set(
|
||||
'n',
|
||||
'<leader>hw',
|
||||
function() toggle_telescope(harpoon:list()) end,
|
||||
{ desc = 'Open harpoon window with telescope' }
|
||||
)
|
||||
vim.keymap.set(
|
||||
'n',
|
||||
'<leader>ht',
|
||||
function() harpoon.ui:toggle_quick_menu(harpoon:list()) end,
|
||||
{ desc = 'Open Harpoon Quick menu' }
|
||||
)
|
||||
end,
|
||||
},
|
||||
-- A Telescope picker to quickly access configurations
|
||||
@@ -86,6 +92,12 @@ return {
|
||||
},
|
||||
},
|
||||
},
|
||||
extensions = {
|
||||
lazy_plugins = {
|
||||
-- Must be a valid path to the file containing the lazy spec and setup() call.
|
||||
lazy_config = vim.fn.stdpath 'config' .. '/init.lua',
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
-- Load extensions
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
-- https://github.com/nvim-treesitter/nvim-treesitter
|
||||
return {
|
||||
'nvim-treesitter/nvim-treesitter',
|
||||
version = false, -- last release is way too old and doesn't work on Windows
|
||||
build = function()
|
||||
pcall(require('nvim-treesitter.install').update { with_sync = true })
|
||||
end,
|
||||
|
||||
@@ -1,77 +0,0 @@
|
||||
-- Not UFO in the sky, but an ultra fold in Neovim.
|
||||
-- https://github.com/kevinhwang91/nvim-ufo/
|
||||
return {
|
||||
{
|
||||
'kevinhwang91/nvim-ufo',
|
||||
version = '*',
|
||||
dependencies = {
|
||||
{ 'kevinhwang91/promise-async' },
|
||||
{ 'nvim-treesitter/nvim-treesitter', run = ':TSUpdate' },
|
||||
{
|
||||
-- Status column plugin that provides a configurable
|
||||
-- 'statuscolumn' and click handlers.
|
||||
-- https://github.com/luukvbaal/statuscol.nvim
|
||||
'luukvbaal/statuscol.nvim',
|
||||
opts = {},
|
||||
},
|
||||
},
|
||||
opts = {
|
||||
open_fold_hl_timeout = 150,
|
||||
close_fold_kinds_for_ft = { 'imports', 'comment' },
|
||||
preview = {
|
||||
win_config = {
|
||||
border = { '', '─', '', '', '', '─', '', '' },
|
||||
winhighlight = 'Normal:Folded',
|
||||
winblend = 0,
|
||||
},
|
||||
mappings = {
|
||||
scrollU = '<C-u>',
|
||||
scrollD = '<C-d>',
|
||||
jumpTop = '[',
|
||||
jumpBot = ']',
|
||||
},
|
||||
},
|
||||
provider_selector = function(_, _, _) -- bufnr, filetype, buftype
|
||||
return { 'treesitter', 'indent' }
|
||||
end,
|
||||
-- fold_virt_text_handler
|
||||
--
|
||||
-- This handler is called when the fold text is too long to fit in the window.
|
||||
-- It is expected to truncate the text and return a new list of virtual text.
|
||||
--
|
||||
---@param virtText table The current virtual text list.
|
||||
---@param lnum number The line number of the first line in the fold.
|
||||
---@param endLnum number The line number of the last line in the fold.
|
||||
---@param width number The width of the window.
|
||||
---@param truncate function Truncate function
|
||||
---@return table
|
||||
fold_virt_text_handler = function(virtText, lnum, endLnum, width, truncate)
|
||||
local newVirtText = {}
|
||||
local suffix = (' %d '):format(endLnum - lnum)
|
||||
local sufWidth = vim.fn.strdisplaywidth(suffix)
|
||||
local targetWidth = width - sufWidth
|
||||
local curWidth = 0
|
||||
for _, chunk in ipairs(virtText) do
|
||||
local chunkText = chunk[1]
|
||||
local chunkWidth = vim.fn.strdisplaywidth(chunkText)
|
||||
if targetWidth > curWidth + chunkWidth then
|
||||
table.insert(newVirtText, chunk)
|
||||
else
|
||||
chunkText = truncate(chunkText, targetWidth - curWidth)
|
||||
local hlGroup = chunk[2]
|
||||
table.insert(newVirtText, { chunkText, hlGroup })
|
||||
chunkWidth = vim.fn.strdisplaywidth(chunkText)
|
||||
-- str width returned from truncate() may less than 2nd argument, need padding
|
||||
if curWidth + chunkWidth < targetWidth then
|
||||
suffix = suffix .. (' '):rep(targetWidth - curWidth - chunkWidth)
|
||||
end
|
||||
break
|
||||
end
|
||||
curWidth = curWidth + chunkWidth
|
||||
end
|
||||
table.insert(newVirtText, { suffix, 'MoreMsg' })
|
||||
return newVirtText
|
||||
end,
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -4,9 +4,7 @@ return {
|
||||
{
|
||||
'folke/tokyonight.nvim',
|
||||
priority = 1000, -- Make sure to load this before all the other start plugins.
|
||||
init = function()
|
||||
vim.cmd.colorscheme(vim.g.colors_theme)
|
||||
end,
|
||||
init = function() vim.cmd.colorscheme(vim.g.colors_theme) end,
|
||||
opts = {
|
||||
transparent = true,
|
||||
},
|
||||
@@ -29,6 +27,64 @@ return {
|
||||
},
|
||||
},
|
||||
|
||||
-- vim dashboard
|
||||
-- https://github.com/nvimdev/dashboard-nvim
|
||||
{
|
||||
'nvimdev/dashboard-nvim',
|
||||
event = 'VimEnter',
|
||||
config = function()
|
||||
require('dashboard').setup {
|
||||
theme = 'doom',
|
||||
config = {
|
||||
disable_move = true,
|
||||
week_header = {
|
||||
enable = true,
|
||||
},
|
||||
shortcut = {},
|
||||
center = {
|
||||
{
|
||||
icon = ' ',
|
||||
icon_hl = '@variable',
|
||||
desc = 'Files',
|
||||
group = 'Label',
|
||||
action = 'Telescope find_files',
|
||||
key = 'f',
|
||||
},
|
||||
{
|
||||
icon = ' ',
|
||||
desc = 'Marks',
|
||||
group = 'DiagnosticHint',
|
||||
action = 'Telescope harpoon marks',
|
||||
key = 'a',
|
||||
},
|
||||
{
|
||||
icon = '⚑ ',
|
||||
desc = 'TODO',
|
||||
group = 'DiagnosticOptions',
|
||||
action = 'TodoTelescope',
|
||||
key = 't',
|
||||
},
|
||||
{
|
||||
icon = ' ',
|
||||
desc = 'Search',
|
||||
group = 'Number',
|
||||
action = 'Telescope live_grep',
|
||||
key = 's',
|
||||
},
|
||||
{
|
||||
icon = ' ',
|
||||
desc = 'Lazy Update',
|
||||
group = '@property',
|
||||
action = 'Lazy update',
|
||||
key = 'u',
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
end,
|
||||
dependencies = { { 'nvim-tree/nvim-web-devicons' } },
|
||||
},
|
||||
|
||||
-- Remove all background colors to make nvim transparent
|
||||
-- https://github.com/xiyaowong/nvim-transparent
|
||||
{ 'xiyaowong/nvim-transparent', opts = {} },
|
||||
@@ -40,12 +96,27 @@ return {
|
||||
|
||||
-- Indent guides for Neovim
|
||||
-- https://github.com/lukas-reineke/indent-blankline.nvim
|
||||
{ 'lukas-reineke/indent-blankline.nvim', main = 'ibl', opts = {} },
|
||||
{
|
||||
'lukas-reineke/indent-blankline.nvim',
|
||||
main = 'ibl',
|
||||
config = function()
|
||||
require('ibl').setup {
|
||||
indent = {
|
||||
char = '│',
|
||||
},
|
||||
exclude = {
|
||||
filetypes = { 'terminal', 'dashboard' },
|
||||
buftypes = { 'dashboard' },
|
||||
},
|
||||
}
|
||||
end,
|
||||
},
|
||||
|
||||
-- Git integration for buffers
|
||||
-- https://github.com/lewis6991/gitsigns.nvim
|
||||
{
|
||||
'lewis6991/gitsigns.nvim',
|
||||
version = false,
|
||||
lazy = false,
|
||||
opts = {
|
||||
signs = {
|
||||
@@ -67,22 +138,14 @@ return {
|
||||
|
||||
-- Navigation
|
||||
map('n', 'gn', function()
|
||||
if vim.wo.diff then
|
||||
return ']c'
|
||||
end
|
||||
vim.schedule(function()
|
||||
gs.next_hunk()
|
||||
end)
|
||||
if vim.wo.diff then return ']c' end
|
||||
vim.schedule(function() gs.next_hunk() end)
|
||||
return '<Ignore>'
|
||||
end, { expr = true })
|
||||
|
||||
map('n', 'gp', function()
|
||||
if vim.wo.diff then
|
||||
return '[c'
|
||||
end
|
||||
vim.schedule(function()
|
||||
gs.prev_hunk()
|
||||
end)
|
||||
if vim.wo.diff then return '[c' end
|
||||
vim.schedule(function() gs.prev_hunk() end)
|
||||
return '<Ignore>'
|
||||
end, { expr = true })
|
||||
end,
|
||||
@@ -142,7 +205,6 @@ return {
|
||||
{
|
||||
'bennypowers/nvim-regexplainer',
|
||||
event = 'BufEnter',
|
||||
lazy = false,
|
||||
dependencies = {
|
||||
'nvim-treesitter/nvim-treesitter',
|
||||
'MunifTanjim/nui.nvim',
|
||||
@@ -173,7 +235,10 @@ return {
|
||||
-- https://github.com/MeanderingProgrammer/render-markdown.nvim
|
||||
{
|
||||
'MeanderingProgrammer/render-markdown.nvim',
|
||||
dependencies = { 'nvim-treesitter/nvim-treesitter', 'nvim-tree/nvim-web-devicons' },
|
||||
dependencies = {
|
||||
'nvim-treesitter/nvim-treesitter',
|
||||
'nvim-tree/nvim-web-devicons',
|
||||
},
|
||||
ft = 'markdown',
|
||||
opts = {},
|
||||
},
|
||||
|
||||
@@ -27,87 +27,254 @@ return {
|
||||
return require('which-key.extras').expand.buf()
|
||||
end,
|
||||
},
|
||||
{ '<leader>bk', '<cmd>blast<cr>', desc = 'Buffer: Last', mode = 'n' },
|
||||
{ '<leader>bj', '<cmd>bfirst<cr>', desc = 'Buffer: First', mode = 'n' },
|
||||
{ '<leader>bh', '<cmd>bprev<cr>', desc = 'Buffer: Prev', mode = 'n' },
|
||||
{ '<leader>bl', '<cmd>bnext<cr>', desc = 'Buffer: Next', mode = 'n' },
|
||||
{ '<leader>bd', '<cmd>Bdelete<cr>', desc = 'Buffer: Delete', mode = 'n' },
|
||||
{ '<leader>bw', '<cmd>Bwipeout<cr>', desc = 'Buffer: Wipeout', mode = 'n' },
|
||||
{
|
||||
{ '<leader>bk', '<cmd>blast<cr>', desc = 'Buffer: Last' },
|
||||
{ '<leader>bj', '<cmd>bfirst<cr>', desc = 'Buffer: First' },
|
||||
{ '<leader>bh', '<cmd>bprev<cr>', desc = 'Buffer: Prev' },
|
||||
{ '<leader>bl', '<cmd>bnext<cr>', desc = 'Buffer: Next' },
|
||||
{ '<leader>bd', '<cmd>Bdelete<cr>', desc = 'Buffer: Delete' },
|
||||
{ '<leader>bw', '<cmd>Bwipeout<cr>', desc = 'Buffer: Wipeout' },
|
||||
},
|
||||
|
||||
-- ── Code ────────────────────────────────────────────────────────────
|
||||
{ '<leader>c', group = '[c] Code' },
|
||||
{ '<leader>ca', '<cmd>lua vim.lsp.buf.code_action()<CR>', desc = 'LSP: Code Action' },
|
||||
{ '<leader>cg', '<cmd>lua require("neogen").generate()<CR>', desc = 'Generate annotations' },
|
||||
{
|
||||
{
|
||||
'<leader>ca',
|
||||
'<cmd>lua vim.lsp.buf.code_action()<CR>',
|
||||
desc = 'LSP: Code Action',
|
||||
},
|
||||
{
|
||||
'<leader>cg',
|
||||
'<cmd>lua require("neogen").generate()<CR>',
|
||||
desc = 'Generate annotations',
|
||||
},
|
||||
},
|
||||
-- ── Code: CommentBox ────────────────────────────────────────────────
|
||||
{ '<leader>cb', group = 'CommentBox' },
|
||||
{ '<leader>cbb', '<Cmd>CBccbox<CR>', desc = 'CommentBox: Box Title' },
|
||||
{ '<leader>cbd', '<Cmd>CBd<CR>', desc = 'CommentBox: Remove a box' },
|
||||
{ '<leader>cbl', '<Cmd>CBline<CR>', desc = 'CommentBox: Simple Line' },
|
||||
{ '<leader>cbm', '<Cmd>CBllbox14<CR>', desc = 'CommentBox: Marked' },
|
||||
{ '<leader>cbt', '<Cmd>CBllline<CR>', desc = 'CommentBox: Titled Line' },
|
||||
{
|
||||
{ '<leader>cb', group = 'CommentBox' },
|
||||
{ '<leader>cbb', '<Cmd>CBccbox<CR>', desc = 'CommentBox: Box Title' },
|
||||
{ '<leader>cbd', '<Cmd>CBd<CR>', desc = 'CommentBox: Remove a box' },
|
||||
{ '<leader>cbl', '<Cmd>CBline<CR>', desc = 'CommentBox: Simple Line' },
|
||||
{ '<leader>cbm', '<Cmd>CBllbox14<CR>', desc = 'CommentBox: Marked' },
|
||||
{
|
||||
'<leader>cbt',
|
||||
'<Cmd>CBllline<CR>',
|
||||
desc = 'CommentBox: Titled Line',
|
||||
},
|
||||
},
|
||||
-- ── Code: package.json control ──────────────────────────────────────
|
||||
-- See: lua/plugins/lazy.lua
|
||||
{ '<leader>cn', group = 'package.json control' },
|
||||
{ '<leader>cnd', '<cmd>lua require("package-info").delete()<cr>', desc = 'Delete package' },
|
||||
{ '<leader>cni', '<cmd>lua require("package-info").install()<cr>', desc = 'Install package' },
|
||||
{ '<leader>cns', '<cmd>lua require("package-info").show({ force = true })<cr>', desc = 'Show package info' },
|
||||
{ '<leader>cnu', '<cmd>lua require("package-info").change_version()<cr>', desc = 'Change version' },
|
||||
{
|
||||
{
|
||||
'<leader>cnd',
|
||||
'<cmd>lua require("package-info").delete()<cr>',
|
||||
desc = 'Delete package',
|
||||
},
|
||||
{
|
||||
'<leader>cni',
|
||||
'<cmd>lua require("package-info").install()<cr>',
|
||||
desc = 'Install package',
|
||||
},
|
||||
{
|
||||
'<leader>cns',
|
||||
'<cmd>lua require("package-info").show({ force = true })<cr>',
|
||||
desc = 'Show package info',
|
||||
},
|
||||
{
|
||||
'<leader>cnu',
|
||||
'<cmd>lua require("package-info").change_version()<cr>',
|
||||
desc = 'Change version',
|
||||
},
|
||||
},
|
||||
|
||||
-- ── Code: Refactoring ───────────────────────────────────────────────
|
||||
{ '<leader>cx', group = '[x] Refactoring' },
|
||||
{
|
||||
mode = { 'x' },
|
||||
-- Extract function supports only visual mode
|
||||
{ '<leader>cxe', "<cmd>lua require('refactoring').refactor('Extract Function')<cr>", desc = 'Extract Function' },
|
||||
{ '<leader>cxf', "<cmd>lua require('refactoring').refactor('Extract Function To File')<cr>", desc = 'Extract Function to File' },
|
||||
{
|
||||
'<leader>cxe',
|
||||
"<cmd>lua require('refactoring').refactor('Extract Function')<cr>",
|
||||
desc = 'Extract Function',
|
||||
},
|
||||
{
|
||||
'<leader>cxf',
|
||||
"<cmd>lua require('refactoring').refactor('Extract Function To File')<cr>",
|
||||
desc = 'Extract Function to File',
|
||||
},
|
||||
-- Extract variable supports only visual mode
|
||||
{ '<leader>cxv', "<cmd>lua require('refactoring').refactor('Extract Variable')<cr>", desc = 'Extract Variable' },
|
||||
{
|
||||
'<leader>cxv',
|
||||
"<cmd>lua require('refactoring').refactor('Extract Variable')<cr>",
|
||||
desc = 'Extract Variable',
|
||||
},
|
||||
},
|
||||
-- Inline func supports only normal
|
||||
{ '<leader>cxi', "<cmd>lua require('refactoring').refactor('Inline Function')<cr>", desc = 'Inline Function' },
|
||||
{
|
||||
'<leader>cxif',
|
||||
"<cmd>lua require('refactoring').refactor('Inline Function')<cr>",
|
||||
desc = 'Inline Function',
|
||||
},
|
||||
-- Extract block supports only normal mode
|
||||
{ '<leader>cxb', "<cmd>lua require('refactoring').refactor('Extract Block')<cr>", desc = 'Extract Block' },
|
||||
{ '<leader>cxbf', "<cmd>lua require('refactoring').refactor('Extract Block To File')<cr>", desc = 'Extract Block to File' },
|
||||
{
|
||||
'<leader>cxb',
|
||||
"<cmd>lua require('refactoring').refactor('Extract Block')<cr>",
|
||||
desc = 'Extract Block',
|
||||
},
|
||||
{
|
||||
'<leader>cxbf',
|
||||
"<cmd>lua require('refactoring').refactor('Extract Block To File')<cr>",
|
||||
desc = 'Extract Block to File',
|
||||
},
|
||||
{
|
||||
mode = { 'n', 'x' },
|
||||
-- Inline var supports both normal and visual mode
|
||||
{ '<leader>cxi', "<cmd>lua require('refactoring').refactor('Inline Variable')<cr>", desc = 'Inline Variable' },
|
||||
{
|
||||
'<leader>cxiv',
|
||||
"<cmd>lua require('refactoring').refactor('Inline Variable')<cr>",
|
||||
desc = 'Inline Variable',
|
||||
},
|
||||
},
|
||||
|
||||
-- ── Code: LSPSaga ───────────────────────────────────────────────────
|
||||
-- See: lua/plugins/lsp.lua
|
||||
{ '<C-a>', '<cmd>Lspsaga term_toggle<cr>', desc = 'LSPSaga: Open Floaterm' },
|
||||
{ '<leader>ca', '<cmd>Lspsaga code_action<cr>', desc = 'LSPSaga: Code Actions' },
|
||||
{ '<leader>cci', '<cmd>Lspsaga incoming_calls<cr>', desc = 'LSPSaga: Incoming Calls' },
|
||||
{ '<leader>cco', '<cmd>Lspsaga outgoing_calls<cr>', desc = 'LSPSaga: Outgoing Calls' },
|
||||
{ '<leader>cd', '<cmd>Lspsaga show_line_diagnostics<cr>', desc = 'LSPSaga: Show Line Diagnostics' },
|
||||
-- <leader>cf = Code Format, see: lua/plugins/autoformat.lua
|
||||
{ '<leader>ci', '<cmd>Lspsaga implement<cr>', desc = 'LSPSaga: Implementations' },
|
||||
{ '<leader>cl', '<cmd>Lspsaga show_cursor_diagnostics<cr>', desc = 'LSPSaga: Show Cursor Diagnostics' },
|
||||
{ '<leader>cp', '<cmd>Lspsaga peek_definition<cr>', desc = 'LSPSaga: Peek Definition' },
|
||||
{
|
||||
'<C-a>',
|
||||
'<cmd>Lspsaga term_toggle<cr>',
|
||||
desc = 'LSPSaga: Open Floaterm',
|
||||
},
|
||||
{
|
||||
'<leader>ca',
|
||||
'<cmd>Lspsaga code_action<cr>',
|
||||
desc = 'LSPSaga: Code Actions',
|
||||
},
|
||||
{
|
||||
'<leader>cci',
|
||||
'<cmd>Lspsaga incoming_calls<cr>',
|
||||
desc = 'LSPSaga: Incoming Calls',
|
||||
},
|
||||
{
|
||||
'<leader>cco',
|
||||
'<cmd>Lspsaga outgoing_calls<cr>',
|
||||
desc = 'LSPSaga: Outgoing Calls',
|
||||
},
|
||||
{
|
||||
'<leader>cd',
|
||||
'<cmd>Lspsaga show_line_diagnostics<cr>',
|
||||
desc = 'LSPSaga: Show Line Diagnostics',
|
||||
},
|
||||
{
|
||||
'<leader>cf',
|
||||
'<cmd>lua require("conform").format({ async = true, lsp_fallback = true })<cr>',
|
||||
mode = { 'n', 'v' },
|
||||
desc = 'Format buffer',
|
||||
},
|
||||
{
|
||||
'<leader>ci',
|
||||
'<cmd>Lspsaga implement<cr>',
|
||||
desc = 'LSPSaga: Implementations',
|
||||
},
|
||||
{
|
||||
'<leader>cl',
|
||||
'<cmd>Lspsaga show_cursor_diagnostics<cr>',
|
||||
desc = 'LSPSaga: Show Cursor Diagnostics',
|
||||
},
|
||||
{
|
||||
'<leader>cp',
|
||||
'<cmd>Lspsaga peek_definition<cr>',
|
||||
desc = 'LSPSaga: Peek Definition',
|
||||
},
|
||||
{ '<leader>cr', '<cmd>Lspsaga rename<cr>', desc = 'LSPSaga: Rename' },
|
||||
{ '<leader>cR', '<cmd>Lspsaga rename ++project<cr>', desc = 'LSPSaga: Rename Project wide' },
|
||||
{ '<leader>cs', '<cmd>Lspsaga signature_help<cr>', desc = 'LSPSaga: Signature Documentation' },
|
||||
{ '<leader>ct', '<cmd>Lspsaga peek_type_definition<cr>', desc = 'LSPSaga: Peek Type Definition' },
|
||||
{ '<leader>cu', '<cmd>Lspsaga preview_definition<cr>', desc = 'LSPSaga: Preview Definition' },
|
||||
{ '<leader>cv', '<cmd>Lspsaga diagnostic_jump_prev<cr>', desc = 'LSPSaga: Diagnostic Jump Prev' },
|
||||
{ '<leader>cw', '<cmd>Lspsaga diagnostic_jump_next<cr>', desc = 'LSPSaga: Diagnostic Jump Next' },
|
||||
{
|
||||
'<leader>cR',
|
||||
'<cmd>Lspsaga rename ++project<cr>',
|
||||
desc = 'LSPSaga: Rename Project wide',
|
||||
},
|
||||
{
|
||||
'<leader>cs',
|
||||
'<cmd>Lspsaga signature_help<cr>',
|
||||
desc = 'LSPSaga: Signature Documentation',
|
||||
},
|
||||
{
|
||||
'<leader>ct',
|
||||
'<cmd>Lspsaga peek_type_definition<cr>',
|
||||
desc = 'LSPSaga: Peek Type Definition',
|
||||
},
|
||||
{
|
||||
'<leader>cu',
|
||||
'<cmd>Lspsaga preview_definition<cr>',
|
||||
desc = 'LSPSaga: Preview Definition',
|
||||
},
|
||||
{
|
||||
'<leader>cv',
|
||||
'<cmd>Lspsaga diagnostic_jump_prev<cr>',
|
||||
desc = 'LSPSaga: Diagnostic Jump Prev',
|
||||
},
|
||||
{
|
||||
'<leader>cw',
|
||||
'<cmd>Lspsaga diagnostic_jump_next<cr>',
|
||||
desc = 'LSPSaga: Diagnostic Jump Next',
|
||||
},
|
||||
|
||||
-- ── DAP ─────────────────────────────────────────────────────────────
|
||||
{ '<leader>d', group = '[d] DAP' },
|
||||
{ '<leader>db', '<cmd>DapToggleBreakpoint', desc = 'DAP: Toggle Breakpoint' },
|
||||
{ '<leader>dc', '<cmd>DapContinue', desc = 'DAP: Continue' },
|
||||
{ '<leader>do', '<cmd>lua vim.diagnostic.open_float()<CR>', desc = 'Diagnostic: Open float' },
|
||||
{ '<leader>dq', '<cmd>lua vim.diagnostic.setloclist()<CR>', desc = 'Diagnostic: Set loc list' },
|
||||
{ '<leader>dr', "<cmd>lua require('dapui').open({reset = true})<CR>", desc = 'DAP: Reset' },
|
||||
{ '<leader>ds', '<cmd>lua require("telescope.builtin").lsp_document_symbols()<CR>', desc = 'LSP: Document Symbols' },
|
||||
{ '<leader>dt', '<cmd>DapUiToggle', desc = 'DAP: Toggle UI' },
|
||||
{
|
||||
{
|
||||
'<leader>db',
|
||||
'<cmd>DapToggleBreakpoint',
|
||||
desc = 'DAP: Toggle Breakpoint',
|
||||
},
|
||||
{ '<leader>dc', '<cmd>DapContinue', desc = 'DAP: Continue' },
|
||||
{
|
||||
'<leader>do',
|
||||
'<cmd>lua vim.diagnostic.open_float()<CR>',
|
||||
desc = 'Diagnostic: Open float',
|
||||
},
|
||||
{
|
||||
'<leader>dq',
|
||||
'<cmd>lua vim.diagnostic.setloclist()<CR>',
|
||||
desc = 'Diagnostic: Set loc list',
|
||||
},
|
||||
{
|
||||
'<leader>dr',
|
||||
"<cmd>lua require('dapui').open({reset = true})<CR>",
|
||||
desc = 'DAP: Reset',
|
||||
},
|
||||
{
|
||||
'<leader>ds',
|
||||
'<cmd>lua require("telescope.builtin").lsp_document_symbols()<CR>',
|
||||
desc = 'LSP: Document Symbols',
|
||||
},
|
||||
{ '<leader>dt', '<cmd>DapUiToggle', desc = 'DAP: Toggle UI' },
|
||||
},
|
||||
|
||||
-- ── Harpoon ─────────────────────────────────────────────────────────
|
||||
-- See: lua/plugins/telescope.lua
|
||||
{ '<leader>h', group = '[h] Harpoon' },
|
||||
{ '<leader>ha', '<cmd>lua require("harpoon"):list():add()<cr>', desc = 'harpoon file' },
|
||||
{ '<leader>hn', '<cmd>lua require("harpoon"):list():next()<cr>', desc = 'harpoon to next file' },
|
||||
{ '<leader>hp', '<cmd>lua require("harpoon"):list():prev()<cr>', desc = 'harpoon to previous file' },
|
||||
{ '<leader>ht', "<cmd>lua require('harpoon.ui').toggle_quick_menu()<CR>", desc = 'DAP: Harpoon UI' },
|
||||
{
|
||||
{
|
||||
'<leader>ha',
|
||||
'<cmd>lua require("harpoon"):list():add()<cr>',
|
||||
desc = 'harpoon file',
|
||||
},
|
||||
{
|
||||
'<leader>hn',
|
||||
'<cmd>lua require("harpoon"):list():next()<cr>',
|
||||
desc = 'harpoon to next file',
|
||||
},
|
||||
{
|
||||
'<leader>hp',
|
||||
'<cmd>lua require("harpoon"):list():prev()<cr>',
|
||||
desc = 'harpoon to previous file',
|
||||
},
|
||||
{
|
||||
'<leader>ht',
|
||||
"<cmd>lua require('harpoon.ui').toggle_quick_menu()<CR>",
|
||||
desc = 'DAP: Harpoon UI',
|
||||
},
|
||||
},
|
||||
|
||||
-- ── LSP ─────────────────────────────────────────────────────────────
|
||||
{ '<leader>l', group = '[l] LSP' },
|
||||
@@ -115,63 +282,164 @@ return {
|
||||
|
||||
-- ── Quit ────────────────────────────────────────────────────────────
|
||||
{ '<leader>q', group = '[q] Quit' },
|
||||
{ '<leader>qf', '<cmd>q<CR>', desc = 'Quicker close split' },
|
||||
{ '<leader>qq', '<cmd>wq!<CR>', desc = 'Quit with force saving' },
|
||||
{ '<leader>qw', '<cmd>wq<CR>', desc = 'Write and quit' },
|
||||
{
|
||||
{ '<leader>qf', '<cmd>q<CR>', desc = 'Quicker close split' },
|
||||
{ '<leader>qq', '<cmd>wq!<CR>', desc = 'Quit with force saving' },
|
||||
{ '<leader>qw', '<cmd>wq<CR>', desc = 'Write and quit' },
|
||||
},
|
||||
|
||||
-- ── Search ──────────────────────────────────────────────────────────
|
||||
{ '<leader>s', group = '[s] Search' },
|
||||
-- See: lua/plugins/telescope.lua
|
||||
{ '<leader><space>', "<cmd>lua require('telescope.builtin').buffers()<cr>", desc = 'Find existing buffers' },
|
||||
{ '<leader><tab>', "<cmd>lua require('telescope.builtin').commands()<CR>", desc = 'Telescope: Commands' },
|
||||
{ '<leader>sd', "<cmd>lua require('telescope.builtin').diagnostics()<cr>", desc = 'Search Diagnostics' },
|
||||
{ '<leader>sg', "<cmd>lua require('telescope.builtin').live_grep()<cr>", desc = 'Search by Grep' },
|
||||
{ '<leader>sm', '<cmd>Telescope harpoon marks<CR>', desc = 'Harpoon Marks' },
|
||||
{ '<leader>sn', "<cmd>lua require('telescope').extensions.notify.notify()<CR>", desc = 'Notify' },
|
||||
{ '<leader>so', "<cmd>lua require('telescope.builtin').oldfiles()<cr>", desc = 'Find recently Opened files' },
|
||||
{ '<leader>sp', "<cmd>lua require('telescope').extensions.lazy_plugins.lazy_plugins()<cr>", desc = 'Find neovim/lazy configs' },
|
||||
{ '<leader>st', '<cmd>TodoTelescope<CR>', desc = 'Telescope: Todo' },
|
||||
{ '<leader>sw', "<cmd>lua require('telescope.builtin').grep_string()<cr>", desc = 'Search current Word' },
|
||||
{
|
||||
'<leader><space>',
|
||||
"<cmd>lua require('telescope.builtin').buffers()<cr>",
|
||||
desc = 'Find existing buffers',
|
||||
},
|
||||
{
|
||||
'<leader><tab>',
|
||||
"<cmd>lua require('telescope.builtin').commands()<CR>",
|
||||
desc = 'Telescope: Commands',
|
||||
},
|
||||
{
|
||||
'<leader>sd',
|
||||
"<cmd>lua require('telescope.builtin').diagnostics()<cr>",
|
||||
desc = 'Search Diagnostics',
|
||||
},
|
||||
{
|
||||
'<leader>sg',
|
||||
"<cmd>lua require('telescope.builtin').live_grep()<cr>",
|
||||
desc = 'Search by Grep',
|
||||
},
|
||||
{
|
||||
'<leader>sm',
|
||||
'<cmd>Telescope harpoon marks<CR>',
|
||||
desc = 'Harpoon Marks',
|
||||
},
|
||||
{
|
||||
'<leader>sn',
|
||||
"<cmd>lua require('telescope').extensions.notify.notify()<CR>",
|
||||
desc = 'Show Notifications',
|
||||
},
|
||||
{
|
||||
'<leader>so',
|
||||
"<cmd>lua require('telescope.builtin').oldfiles()<cr>",
|
||||
desc = 'Find recently Opened files',
|
||||
},
|
||||
{
|
||||
'<leader>sp',
|
||||
"<cmd>lua require('telescope').extensions.lazy_plugins.lazy_plugins()<cr>",
|
||||
desc = 'Find neovim/lazy configs',
|
||||
},
|
||||
{ '<leader>st', '<cmd>TodoTelescope<CR>', desc = 'Telescope: Show Todo' },
|
||||
{
|
||||
'<leader>sw',
|
||||
"<cmd>lua require('telescope.builtin').grep_string()<cr>",
|
||||
desc = 'Search current Word',
|
||||
},
|
||||
|
||||
-- ── Toggle ──────────────────────────────────────────────────────────
|
||||
{ '<leader>t', group = '[t] Toggle' },
|
||||
{ '<leader>tc', '<cmd>CloakToggle<cr>', desc = 'Toggle Cloak' },
|
||||
{ '<leader>tn', '<cmd>Noice dismiss<CR>', desc = 'Noice dismiss' },
|
||||
{ '<leader>ts', '<cmd>noh<CR>', desc = 'Toggle Search Highlighting' },
|
||||
{ '<leader>tt', '<cmd>TransparentToggle<CR>', desc = 'Toggle Transparency' },
|
||||
{ '<leader>tw', '<cmd>Twilight<cr>', desc = 'Toggle Twilight' },
|
||||
{
|
||||
{ '<leader>tc', '<cmd>CloakToggle<cr>', desc = 'Toggle Cloak' },
|
||||
{ '<leader>tn', '<cmd>Noice dismiss<CR>', desc = 'Noice dismiss' },
|
||||
{ '<leader>ts', '<cmd>noh<CR>', desc = 'Toggle Search Highlighting' },
|
||||
{
|
||||
'<leader>tt',
|
||||
'<cmd>TransparentToggle<CR>',
|
||||
desc = 'Toggle Transparency',
|
||||
},
|
||||
{ '<leader>tw', '<cmd>Twilight<cr>', desc = 'Toggle Twilight' },
|
||||
},
|
||||
|
||||
-- ── Workspace ───────────────────────────────────────────────────────
|
||||
{ '<leader>w', group = '[w] Workspace' },
|
||||
{ '<leader>wa', '<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>', desc = 'LSP: Workspace Add Folder' },
|
||||
{ '<leader>wl', '<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>', desc = 'LSP: Workspace List Folders' },
|
||||
{ '<leader>wr', '<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>', desc = 'LSP: Workspace Remove Folder' },
|
||||
{ '<leader>ws', '<cmd>lua require("telescope.builtin").lsp_dynamic_workspace_symbols()<CR>', desc = 'LSP: Workspace Symbols' },
|
||||
{
|
||||
{
|
||||
'<leader>wa',
|
||||
'<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>',
|
||||
desc = 'LSP: Workspace Add Folder',
|
||||
},
|
||||
{
|
||||
'<leader>wl',
|
||||
'<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>',
|
||||
desc = 'LSP: Workspace List Folders',
|
||||
},
|
||||
{
|
||||
'<leader>wr',
|
||||
'<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>',
|
||||
desc = 'LSP: Workspace Remove Folder',
|
||||
},
|
||||
{
|
||||
'<leader>ws',
|
||||
'<cmd>lua require("telescope.builtin").lsp_dynamic_workspace_symbols()<CR>',
|
||||
desc = 'LSP: Workspace Symbols',
|
||||
},
|
||||
},
|
||||
|
||||
-- ── Trouble ─────────────────────────────────────────────────────────
|
||||
{ '<leader>x', group = '[x] Trouble' },
|
||||
{ '<leader>xx', '<cmd>Trouble<cr>', desc = 'Toggle Trouble' },
|
||||
{ '<leader>xw', '<cmd>Trouble workspace_diagnostics<cr>', desc = 'Toggle Workspace Diagnostics' },
|
||||
{ '<leader>xd', '<cmd>Trouble document_diagnostics<cr>', desc = 'Toggle Document Diagnostics' },
|
||||
{ '<leader>xl', '<cmd>Trouble loclist<cr>', desc = 'Toggle Loclist' },
|
||||
{ '<leader>xq', '<cmd>Trouble quickfix<cr>', desc = 'Toggle Quickfix' },
|
||||
{
|
||||
{
|
||||
'<leader>xx',
|
||||
'<cmd>Trouble diagnostics<cr>',
|
||||
desc = 'Toggle Trouble Diagnostics',
|
||||
},
|
||||
{
|
||||
'<leader>xw',
|
||||
'<cmd>Trouble workspace_diagnostics<cr>',
|
||||
desc = 'Toggle Workspace Diagnostics',
|
||||
},
|
||||
{
|
||||
'<leader>xd',
|
||||
'<cmd>Trouble document_diagnostics<cr>',
|
||||
desc = 'Toggle Document Diagnostics',
|
||||
},
|
||||
{ '<leader>xl', '<cmd>Trouble loclist<cr>', desc = 'Toggle Loclist' },
|
||||
{ '<leader>xq', '<cmd>Trouble quickfix<cr>', desc = 'Toggle Quickfix' },
|
||||
},
|
||||
|
||||
-- ── Help & Neoconf ──────────────────────────────────────────────────
|
||||
{ '<leader>?', group = '[?] Help & neoconf' },
|
||||
{ '<leader>?c', '<cmd>Neoconf<CR>', desc = 'Neoconf: Open' },
|
||||
{ '<leader>?g', '<cmd>Neoconf global<CR>', desc = 'Neoconf: Global' },
|
||||
{ '<leader>?l', '<cmd>Neoconf local<CR>', desc = 'Neoconf: Local' },
|
||||
{ '<leader>?m', '<cmd>Neoconf lsp<CR>', desc = 'Neoconf: Show merged LSP config' },
|
||||
{ '<leader>?s', '<cmd>Neoconf show<CR>', desc = 'Neoconf: Show merged config' },
|
||||
{ '<leader>?w', '<cmd>lua require("which-key").show({global = false})<cr>', desc = 'Buffer Local Keymaps (which-key)' },
|
||||
-- ── Help ────────────────────────────────────────────────────────────
|
||||
{ '<leader>?', group = '[?] Help & Cheat sheets' },
|
||||
{
|
||||
{
|
||||
'<leader>?w',
|
||||
'<cmd>lua require("which-key").show({global = false})<cr>',
|
||||
desc = 'Buffer Local Keymaps (which-key)',
|
||||
},
|
||||
},
|
||||
|
||||
-- ── Misc ────────────────────────────────────────────────────────────
|
||||
{ '<leader>1', '<cmd>lua require("harpoon"):list():select(1)<cr>', desc = 'harpoon to file 1' },
|
||||
{ '<leader>2', '<cmd>lua require("harpoon"):list():select(2)<cr>', desc = 'harpoon to file 2' },
|
||||
{ '<leader>3', '<cmd>lua require("harpoon"):list():select(3)<cr>', desc = 'harpoon to file 3' },
|
||||
{ '<leader>4', '<cmd>lua require("harpoon"):list():select(4)<cr>', desc = 'harpoon to file 4' },
|
||||
{ '<leader>5', '<cmd>lua require("harpoon"):list():select(5)<cr>', desc = 'harpoon to file 5' },
|
||||
{ '<leader>D', '<cmd>lua vim.lsp.buf.type_definition()<CR>', desc = 'LSP: Type Definition' },
|
||||
{
|
||||
'<leader>1',
|
||||
'<cmd>lua require("harpoon"):list():select(1)<cr>',
|
||||
desc = 'harpoon to file 1',
|
||||
},
|
||||
{
|
||||
'<leader>2',
|
||||
'<cmd>lua require("harpoon"):list():select(2)<cr>',
|
||||
desc = 'harpoon to file 2',
|
||||
},
|
||||
{
|
||||
'<leader>3',
|
||||
'<cmd>lua require("harpoon"):list():select(3)<cr>',
|
||||
desc = 'harpoon to file 3',
|
||||
},
|
||||
{
|
||||
'<leader>4',
|
||||
'<cmd>lua require("harpoon"):list():select(4)<cr>',
|
||||
desc = 'harpoon to file 4',
|
||||
},
|
||||
{
|
||||
'<leader>5',
|
||||
'<cmd>lua require("harpoon"):list():select(5)<cr>',
|
||||
desc = 'harpoon to file 5',
|
||||
},
|
||||
{
|
||||
'<leader>D',
|
||||
'<cmd>lua vim.lsp.buf.type_definition()<CR>',
|
||||
desc = 'LSP: Type Definition',
|
||||
},
|
||||
{ '<leader>e', '<cmd>Neotree reveal<CR>', desc = 'NeoTree reveal' },
|
||||
|
||||
-- ╭─────────────────────────────────────────────────────────╮
|
||||
@@ -180,16 +448,48 @@ return {
|
||||
{ 'y', group = 'Yank & Surround' },
|
||||
|
||||
{ 'gp', group = 'Goto Preview' },
|
||||
{ 'gpd', '<cmd>lua require("goto-preview").goto_preview_definition()<CR>' },
|
||||
{ 'gpi', '<cmd>lua require("goto-preview").goto_preview_implementation()<CR>' },
|
||||
{ 'gpP', '<cmd>lua require("goto-preview").close_all_windows()<CR>' },
|
||||
{
|
||||
{
|
||||
'gpd',
|
||||
'<cmd>lua require("goto-preview").goto_preview_definition()<CR>',
|
||||
desc = 'Goto: Preview Definition',
|
||||
},
|
||||
{
|
||||
'gpi',
|
||||
'<cmd>lua require("goto-preview").goto_preview_implementation()<CR>',
|
||||
desc = 'Goto: Preview Implementation',
|
||||
},
|
||||
{
|
||||
'gpP',
|
||||
'<cmd>lua require("goto-preview").close_all_windows()<CR>',
|
||||
desc = 'Goto: Close All Preview Windows',
|
||||
},
|
||||
},
|
||||
|
||||
-- ── tmux navigation ─────────────────────────────────────────────────
|
||||
{ '<c-h>', '<cmd><C-U>TmuxNavigateLeft<cr>', desc = 'tmux: Navigate Left' },
|
||||
{ '<c-j>', '<cmd><C-U>TmuxNavigateDown<cr>', desc = 'tmux: Navigate Down' },
|
||||
{ '<c-k>', '<cmd><C-U>TmuxNavigateUp<cr>', desc = 'tmux: Navigate Up' },
|
||||
{ '<c-l>', '<cmd><C-U>TmuxNavigateRight<cr>', desc = 'tmux: Navigate Right' },
|
||||
{ '<c-\\>', '<cmd><C-U>TmuxNavigatePrevious<cr>', desc = 'tmux: Navigate Previous' },
|
||||
{
|
||||
{
|
||||
'<c-h>',
|
||||
'<cmd><C-U>TmuxNavigateLeft<cr>',
|
||||
desc = 'tmux: Navigate Left',
|
||||
},
|
||||
{
|
||||
'<c-j>',
|
||||
'<cmd><C-U>TmuxNavigateDown<cr>',
|
||||
desc = 'tmux: Navigate Down',
|
||||
},
|
||||
{ '<c-k>', '<cmd><C-U>TmuxNavigateUp<cr>', desc = 'tmux: Navigate Up' },
|
||||
{
|
||||
'<c-l>',
|
||||
'<cmd><C-U>TmuxNavigateRight<cr>',
|
||||
desc = 'tmux: Navigate Right',
|
||||
},
|
||||
{
|
||||
'<c-\\>',
|
||||
'<cmd><C-U>TmuxNavigatePrevious<cr>',
|
||||
desc = 'tmux: Navigate Previous',
|
||||
},
|
||||
},
|
||||
|
||||
-- ── Old habits ──────────────────────────────────────────────────────
|
||||
{ '<C-s>', '<cmd>w<CR>', desc = 'Save file' },
|
||||
@@ -204,23 +504,75 @@ return {
|
||||
},
|
||||
|
||||
-- ── LSP ─────────────────────────────────────────────────────────────
|
||||
{ '<C-k>', '<cmd>lua vim.lsp.buf.signature_help()<CR>', desc = 'LSP: Signature Documentation' },
|
||||
{ 'K', '<cmd>Lspsaga hover_doc<cr>', desc = 'LSPSaga: Hover Documentation' },
|
||||
{ 'dn', '<cmd>lua vim.diagnostic.goto_next()<CR>', desc = 'Diagnostic: Goto Next' },
|
||||
{ 'dp', '<cmd>lua vim.diagnostic.goto_prev()<CR>', desc = 'Diagnostic: Goto Prev' },
|
||||
{ 'gD', '<cmd>lua vim.lsp.buf.declaration()<CR>', desc = 'LSP: Goto Declaration' },
|
||||
{ 'gI', '<cmd>lua vim.lsp.buf.implementation()<CR>', desc = 'LSP: Goto Implementation' },
|
||||
{ 'gR', '<cmd>Trouble lsp_references<cr>', desc = 'Toggle LSP References' },
|
||||
{ 'gd', '<cmd>lua vim.lsp.buf.definition()<CR>', desc = 'LSP: Goto Definition' },
|
||||
{ 'gr', '<cmd>lua require("telescope.builtin").lsp_references()<CR>', desc = 'LSP: Goto References' },
|
||||
{
|
||||
'<C-k>',
|
||||
'<cmd>lua vim.lsp.buf.signature_help()<CR>',
|
||||
desc = 'LSP: Signature Documentation',
|
||||
},
|
||||
{
|
||||
'K',
|
||||
'<cmd>Lspsaga hover_doc<cr>',
|
||||
desc = 'LSPSaga: Hover Documentation',
|
||||
},
|
||||
|
||||
{ 'd', group = 'Diagnostics' },
|
||||
{
|
||||
{
|
||||
'dn',
|
||||
'<cmd>lua vim.diagnostic.goto_next()<CR>',
|
||||
desc = 'Diagnostic: Goto Next',
|
||||
},
|
||||
{
|
||||
'dp',
|
||||
'<cmd>lua vim.diagnostic.goto_prev()<CR>',
|
||||
desc = 'Diagnostic: Goto Prev',
|
||||
},
|
||||
},
|
||||
{
|
||||
{ 'g', group = 'Goto' },
|
||||
{
|
||||
'gD',
|
||||
'<cmd>lua vim.lsp.buf.declaration()<CR>',
|
||||
desc = 'LSP: Goto Declaration',
|
||||
},
|
||||
{
|
||||
'gI',
|
||||
'<cmd>lua vim.lsp.buf.implementation()<CR>',
|
||||
desc = 'LSP: Goto Implementation',
|
||||
},
|
||||
{
|
||||
'gR',
|
||||
'<cmd>Trouble lsp_references<cr>',
|
||||
desc = 'Toggle LSP References',
|
||||
},
|
||||
{
|
||||
'gd',
|
||||
'<cmd>lua vim.lsp.buf.definition()<CR>',
|
||||
desc = 'LSP: Goto Definition',
|
||||
},
|
||||
{
|
||||
'gr',
|
||||
'<cmd>lua require("telescope.builtin").lsp_references()<CR>',
|
||||
desc = 'LSP: Goto References',
|
||||
},
|
||||
},
|
||||
|
||||
-- ── Misc keybinds ───────────────────────────────────────────────────
|
||||
-- Sublime-like shortcut 'go to file' ctrl+p.
|
||||
{ '<C-p>', '<cmd>Telescope find_files<CR>', desc = 'Search for files starting at current directory.' },
|
||||
{
|
||||
'<C-p>',
|
||||
'<cmd>Telescope find_files<CR>',
|
||||
desc = 'Search for files starting at current directory.',
|
||||
},
|
||||
{ 'QQ', '<cmd>q!<CR>', desc = 'Quit without saving' },
|
||||
{ 'WW', '<cmd>w!<CR>', desc = 'Force write to file' },
|
||||
{ 'ss', '<cmd>noh<CR>', desc = 'Clear Search Highlighting' },
|
||||
{ 'jj', '<Esc>', desc = 'Esc without touching esc in insert mode', mode = 'i' },
|
||||
{
|
||||
'jj',
|
||||
'<Esc>',
|
||||
desc = 'Esc without touching esc in insert mode',
|
||||
mode = 'i',
|
||||
},
|
||||
|
||||
-- ── Splits ──────────────────────────────────────────────────────────
|
||||
-- Use CTRL+<hjkl> to switch between windows in normal mode
|
||||
@@ -240,12 +592,13 @@ return {
|
||||
{ '<down>', '<cmd>echo "Use j to move!!"<CR>' },
|
||||
|
||||
-- ── Terminal ────────────────────────────────────────────────────────
|
||||
-- Exit terminal mode in the builtin terminal with a shortcut that is a bit easier
|
||||
-- for people to discover. Otherwise, you normally need to press <C-\><C-n>, which
|
||||
-- is not what someone will guess without a bit more experience.
|
||||
-- Exit terminal mode in the builtin terminal with a shortcut that is
|
||||
-- a bit easier for people to discover. Otherwise, you normally need
|
||||
-- to press <C-\><C-n>, which is not what someone will guess without
|
||||
-- a bit more experience.
|
||||
--
|
||||
-- NOTE: This won't work in all terminal emulators/tmux/etc. Try your own mapping
|
||||
-- or just use <C-\><C-n> to exit terminal mode.
|
||||
-- NOTE: This won't work in all terminal emulators/tmux/etc.
|
||||
-- Try your own mapping or just use <C-\><C-n> to exit terminal mode.
|
||||
{ '<Esc><Esc>', '<C-\\><C-n>', desc = 'Exit terminal mode', mode = 't' },
|
||||
|
||||
-- ── Search ──────────────────────────────────────────────────────────
|
||||
|
||||
0
config/nvim/spell/.gitkeep
Normal file
0
config/nvim/spell/.gitkeep
Normal file
@@ -1,120 +0,0 @@
|
||||
#'ve
|
||||
i/!
|
||||
i've/!
|
||||
I've
|
||||
I
|
||||
good
|
||||
#rd
|
||||
#rd/!
|
||||
#rd
|
||||
#rd
|
||||
#rd/!
|
||||
#rd
|
||||
wrd/!
|
||||
neovim
|
||||
github
|
||||
folke
|
||||
nvim
|
||||
keybinds
|
||||
https
|
||||
CommentBox
|
||||
lua
|
||||
dap
|
||||
lsp
|
||||
wincmd
|
||||
CTRL
|
||||
hjkl
|
||||
resizing
|
||||
noh
|
||||
UiEnter
|
||||
signcolumn
|
||||
popup
|
||||
whitespace
|
||||
listchars
|
||||
completeopt
|
||||
Autoformat
|
||||
stevearc
|
||||
isort
|
||||
formatters
|
||||
formatter
|
||||
hrsh7th
|
||||
cmp
|
||||
repos
|
||||
editorconfig
|
||||
rmagatti
|
||||
goto
|
||||
UI
|
||||
api
|
||||
configs
|
||||
bufhidden
|
||||
ThePrimeagen
|
||||
preservim
|
||||
tpope
|
||||
todo
|
||||
lukas
|
||||
reineke
|
||||
blankline
|
||||
tabstop
|
||||
shiftwidth
|
||||
wakatime
|
||||
numToStr
|
||||
zbirenbaum
|
||||
onsails
|
||||
lspkind
|
||||
pictograms
|
||||
vscode
|
||||
SergioRibera
|
||||
dotenv
|
||||
config
|
||||
schemaStore
|
||||
TypeError
|
||||
dev
|
||||
Automagically
|
||||
runtime
|
||||
discoverable
|
||||
lspconfig
|
||||
pre
|
||||
LSPs
|
||||
Stylelint
|
||||
CSS
|
||||
PHP
|
||||
GitLab
|
||||
ESLint
|
||||
Ansible
|
||||
Terraform
|
||||
TypeScript
|
||||
JS
|
||||
Vue
|
||||
YAML
|
||||
LSPSaga
|
||||
luasnip
|
||||
saadparwaiz1
|
||||
LuaSnip
|
||||
L3MON4D3
|
||||
jumplist
|
||||
textobjects
|
||||
scm
|
||||
textobj
|
||||
treesitter
|
||||
statusline
|
||||
lualine
|
||||
ivuorinen's
|
||||
lazylazy
|
||||
cmdline
|
||||
popupmenu
|
||||
noice
|
||||
statuscolumn
|
||||
TreeSitter
|
||||
ivuorinen
|
||||
github
|
||||
github
|
||||
Tampere
|
||||
Logrotate
|
||||
sysvinit
|
||||
Noice
|
||||
fzf
|
||||
linters
|
||||
LSPConfig
|
||||
deps
|
||||
Noice
|
||||
stdpath
|
||||
Binary file not shown.
Reference in New Issue
Block a user