dotfiles/nvim/lua/config.lua

955 lines
32 KiB
Lua
Raw Normal View History

2024-05-07 17:27:20 +08:00
vim.opt.exrc = true
vim.cmd("set pumblend=40")
vim.cmd("set winblend=40")
2024-02-21 23:47:12 +08:00
vim.cmd("set expandtab")
2024-03-08 22:03:39 +08:00
vim.cmd("set tabstop=4")
vim.cmd("set softtabstop=4")
vim.cmd("set shiftwidth=4")
2024-02-21 23:47:12 +08:00
vim.cmd("set splitright")
vim.cmd("set splitbelow")
vim.cmd("set selectmode=key")
vim.cmd("set keymodel=startsel")
vim.cmd("set number")
vim.cmd("set cursorline")
vim.cmd("set termguicolors")
2024-02-22 00:13:31 +08:00
vim.cmd("set clipboard+=unnamedplus")
2024-03-08 22:03:39 +08:00
vim.cmd("set updatetime=700")
2024-02-22 11:57:27 +08:00
vim.cmd("set whichwrap+=<,>,[,]")
2024-02-26 20:01:57 +08:00
vim.cmd("set relativenumber")
2024-03-08 20:06:09 +08:00
vim.cmd("set signcolumn=yes")
-- vim.cmd("set iskeyword-=_")
2024-03-05 17:21:18 +08:00
vim.cmd("set list")
2024-03-08 20:06:09 +08:00
vim.cmd("set noequalalways")
2024-05-07 17:27:20 +08:00
vim.cmd("set cmdheight=0")
2024-05-15 15:02:50 +08:00
vim.opt.scrolloff = 10
2024-05-07 17:27:20 +08:00
vim.opt.foldmethod = 'expr'
vim.opt.foldexpr = 'nvim_treesitter#foldexpr()'
vim.opt.foldlevelstart = 99
2024-03-05 18:34:26 +08:00
vim.opt.guicursor = {
2024-03-08 22:03:39 +08:00
"i:ver25-blinkon500-blinkoff500,a:ver25-iCursor",
2024-03-05 18:34:26 +08:00
}
2024-03-05 17:21:18 +08:00
vim.opt.listchars = {
eol = "",
2024-03-05 17:41:59 +08:00
tab = "",
2024-03-05 17:21:18 +08:00
trail = "",
precedes = "«",
extends = "»"
}
2024-02-22 11:57:27 +08:00
vim.diagnostic.config({
update_in_insert = true,
2024-05-07 17:27:20 +08:00
float = {
border = "none",
focusable = false,
},
2024-02-22 11:57:27 +08:00
})
2024-03-08 22:03:39 +08:00
vim.cmd([[au CursorHold * lua vim.diagnostic.open_float(0,{scope = "cursor"})]])
vim.g.mapleader = " ";
vim.g['cph#dir'] = '/home/user/RustIsBestLang/';
vim.filetype.add({
extension = {
ct = 'cpp',
},
})
2024-02-21 23:47:12 +08:00
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)
local plugins = {
2024-03-08 22:03:39 +08:00
{"loctvl842/monokai-pro.nvim", name="monokai", priority=1000},
2024-02-21 23:47:12 +08:00
{
2024-03-08 22:03:39 +08:00
'nvim-telescope/telescope.nvim', tag = '0.1.5',
dependencies = {
'nvim-lua/plenary.nvim',
{
"isak102/telescope-git-file-history.nvim",
dependencies = { "tpope/vim-fugitive" }
}
}
2024-02-21 23:47:12 +08:00
},
{"nvim-treesitter/nvim-treesitter", build = ":TSUpdate"},
{
"nvim-neo-tree/neo-tree.nvim",
2024-03-08 22:03:39 +08:00
branch = "v3.x",
2024-02-21 23:47:12 +08:00
dependencies = {
"nvim-lua/plenary.nvim",
"nvim-tree/nvim-web-devicons", -- not strictly required, but recommended
"MunifTanjim/nui.nvim",
2024-03-08 22:03:39 +08:00
"3rd/image.nvim"
2024-02-21 23:47:12 +08:00
}
},
{
'neovim/nvim-lspconfig',
dependencies = {
-- Automatically install LSPs to stdpath for neovim
{'williamboman/mason.nvim', config = true},
'williamboman/mason-lspconfig.nvim',
-- Useful status updates for LSP
-- NOTE: `opts = {}` is the same as calling `require('fidget').setup({})`
{ 'j-hui/fidget.nvim', tag = 'legacy', opts = {} },
-- Additional lua configuration, makes nvim stuff amazing!
'folke/neodev.nvim',
},
2024-05-02 13:31:31 +08:00
opts = {
2024-05-24 13:33:42 +08:00
inlay_hints = { enabled = true, },
2024-05-02 13:31:31 +08:00
-- codelens = { enabled = true, },
},
config = function(_, servers)
for server, opts in pairs(servers) do
require('lspconfig')[server].setup(opts)
end
end,
2024-02-21 23:47:12 +08:00
},
{
2024-03-08 22:03:39 +08:00
"hrsh7th/nvim-cmp",
2024-02-21 23:47:12 +08:00
dependencies = {
2024-03-08 22:03:39 +08:00
"hrsh7th/cmp-nvim-lsp",
"hrsh7th/cmp-buffer",
"hrsh7th/cmp-path",
"hrsh7th/cmp-cmdline",
"L3MON4D3/LuaSnip",
"saadparwaiz1/cmp_luasnip",
"hrsh7th/cmp-emoji",
2024-02-21 23:47:12 +08:00
},
},
{
'romgrk/barbar.nvim',
dependencies = {
2024-03-08 22:03:39 +08:00
'lewis6991/gitsigns.nvim', -- OPTIONAL: for git status
2024-02-21 23:47:12 +08:00
'nvim-tree/nvim-web-devicons', -- OPTIONAL: for file icons
},
init = function() vim.g.barbar_auto_setup = false end,
opts = {
-- lazy.nvim will automatically call setup for you. put your options here, anything missing will use the default:
-- animation = true,
-- insert_at_start = true,
-- …etc.
},
2024-03-08 22:03:39 +08:00
version = '^1.0.0', -- optional: only update when a new 1.x version is released
2024-02-21 23:47:12 +08:00
},
{
"ray-x/lsp_signature.nvim",
event = "VeryLazy",
opts = {},
config = function(_, opts) require'lsp_signature'.setup(opts) end
},
{
"folke/which-key.nvim",
event = "VeryLazy",
init = function()
vim.o.timeout = true
2024-03-08 22:03:39 +08:00
vim.o.timeoutlen = 300
2024-02-21 23:47:12 +08:00
end,
opts = {
-- your configuration comes here
-- or leave it empty to use the default settings
-- refer to the configuration section below
}
},
{ 'jdhao/better-escape.vim' },
{
2024-03-08 22:03:39 +08:00
'Pocco81/auto-save.nvim',
2024-02-21 23:47:12 +08:00
opts = {
enabled = true,
}
},
{
"windwp/nvim-autopairs",
event = "InsertEnter",
opts = {}
},
{
"dhruvasagar/vim-prosession",
dependencies = {
"tpope/vim-obsession",
},
},
{
2024-05-24 14:15:51 +08:00
"arielherself/arshamiser.nvim",
2024-02-21 23:47:12 +08:00
dependencies = {
"arsham/arshlib.nvim",
"famiu/feline.nvim",
"rebelot/heirline.nvim",
2024-03-08 22:03:39 +08:00
"kyazdani42/nvim-web-devicons",
2024-05-24 13:33:42 +08:00
"lewis6991/gitsigns.nvim",
2024-02-21 23:47:12 +08:00
},
config = function()
2024-05-24 13:33:42 +08:00
require('gitsigns').setup()
2024-02-21 23:47:12 +08:00
-- ignore any parts you don't want to use
vim.cmd.colorscheme("arshamiser_light")
2024-05-24 13:33:42 +08:00
-- require("arshamiser.feliniser")
2024-02-21 23:47:12 +08:00
-- or:
2024-05-24 13:33:42 +08:00
require("arshamiser.heirliniser")
2024-02-21 23:47:12 +08:00
_G.custom_foldtext = require("arshamiser.folding").foldtext
vim.opt.foldtext = "v:lua.custom_foldtext()"
-- if you want to draw a tabline:
2024-05-07 17:27:20 +08:00
-- vim.api.nvim_set_option("tabline", [[%{%v:lua.require("arshamiser.tabline").draw()%}]])
2024-02-21 23:47:12 +08:00
end,
2024-02-22 00:33:41 +08:00
},
{
'numToStr/Comment.nvim',
opts = {
-- add any options here
},
lazy = false,
2024-02-22 11:57:27 +08:00
},
{ 'onsails/lspkind.nvim' },
{
'MunifTanjim/eslint.nvim',
dependencies = {
'jose-elias-alvarez/null-ls.nvim'
}
},
{
'MunifTanjim/prettier.nvim',
dependencies = {
'jose-elias-alvarez/null-ls.nvim'
}
},
2024-05-07 17:27:20 +08:00
{ 'hedyhli/outline.nvim' },
2024-02-22 11:57:27 +08:00
{
"folke/todo-comments.nvim",
dependencies = { "nvim-lua/plenary.nvim" },
opts = {
-- your configuration comes here
-- or leave it empty to use the default settings
-- refer to the configuration section below
}
2024-02-26 20:01:57 +08:00
},
{ 'nvim-treesitter/nvim-treesitter-context' },
2024-03-08 22:03:39 +08:00
{ 'mg979/vim-visual-multi' },
2024-03-05 11:44:37 +08:00
{ 'sindrets/diffview.nvim' },
{ 'sitiom/nvim-numbertoggle' },
{ 'mawkler/modicator.nvim' },
{
"ecthelionvi/NeoColumn.nvim",
opts = {}
},
{
"utilyre/barbecue.nvim",
name = "barbecue",
version = "*",
dependencies = {
"SmiteshP/nvim-navic",
"nvim-tree/nvim-web-devicons", -- optional dependency
},
opts = {
-- configurations go here
},
},
{'akinsho/git-conflict.nvim', version = "*", config = true },
{
2024-03-08 22:03:39 +08:00
'mrjones2014/legendary.nvim',
2024-03-05 11:44:37 +08:00
-- since legendary.nvim handles all your keymaps/commands,
-- its recommended to load legendary.nvim before other plugins
2024-03-08 22:03:39 +08:00
priority = 10000,
2024-03-05 11:44:37 +08:00
lazy = false,
-- sqlite is only needed if you want to use frecency sorting
-- dependencies = { 'kkharji/sqlite.lua' }
},
{
'stevearc/dressing.nvim',
opts = {},
},
{
"folke/twilight.nvim",
opts = {
-- your configuration comes here
-- or leave it empty to use the default settings
-- refer to the configuration section below
}
},
{ "lukas-reineke/indent-blankline.nvim", main = "ibl", opts = {} },
2024-03-05 18:34:26 +08:00
{ 'arielherself/vim-cursorword' },
2024-03-05 17:21:18 +08:00
{ 'm-demare/hlargs.nvim' },
2024-03-05 19:20:29 +08:00
{ 'chentoast/marks.nvim' },
{ 'gaborvecsei/usage-tracker.nvim' },
{ 'wakatime/vim-wakatime', lazy = false },
{
2024-03-08 22:03:39 +08:00
'smoka7/hop.nvim',
2024-03-05 19:20:29 +08:00
version = "*",
opts = {},
2024-03-08 20:06:09 +08:00
},
{
"kylechui/nvim-surround",
version = "*", -- Use for stability; omit to use `main` branch for the latest features
event = "VeryLazy",
config = function()
require("nvim-surround").setup({
-- Configuration here, or leave empty to use defaults
})
end
2024-03-08 22:02:19 +08:00
},
{
"folke/trouble.nvim",
dependencies = { "nvim-tree/nvim-web-devicons" },
opts = {
-- your configuration comes here
-- or leave it empty to use the default settings
-- refer to the configuration section below
},
2024-03-14 23:58:45 +08:00
},
{ 'Civitasv/cmake-tools.nvim' },
2024-03-29 08:46:25 +08:00
{ 'p00f/cphelper.nvim' },
2024-05-20 14:46:53 +08:00
{ "arielherself/melange-nvim", commit = "3d787ca" },
{ 'hrsh7th/vim-vsnip' },
{
"NeogitOrg/neogit",
dependencies = {
"nvim-lua/plenary.nvim", -- required
"sindrets/diffview.nvim", -- optional - Diff integration
-- Only one of these is needed, not both.
"nvim-telescope/telescope.nvim", -- optional
"ibhagwan/fzf-lua", -- optional
},
config = true
},
2024-05-02 13:31:31 +08:00
-- { 'Exafunction/codeium.vim' },
{ "mistricky/codesnap.nvim", build = "make" },
2024-05-02 13:31:31 +08:00
{ 'rmagatti/goto-preview' },
2024-05-07 17:27:20 +08:00
{
"FabianWirth/search.nvim",
dependencies = { "nvim-telescope/telescope.nvim" }
},
{ 'stevearc/dressing.nvim' },
{ 'NvChad/nvim-colorizer.lua' },
2024-05-24 13:33:42 +08:00
{ 'debugloop/telescope-undo.nvim' },
2024-02-21 23:47:12 +08:00
}
2024-03-05 19:20:29 +08:00
local opts = {
2024-02-21 23:47:12 +08:00
}
require("lazy").setup(plugins, opts)
require("monokai-pro").setup({
transparent_background = true,
terminal_colors = true,
devicons = true, -- highlight the icons of `nvim-web-devicons`
styles = {
comment = { italic = true },
keyword = { italic = true }, -- any other keyword
2024-03-05 17:41:59 +08:00
type = { italic = false }, -- (preferred) int, long, char, etc
2024-02-21 23:47:12 +08:00
storageclass = { italic = true }, -- static, register, volatile, etc
structure = { italic = true }, -- struct, union, enum, etc
parameter = { italic = true }, -- parameter pass in function
annotation = { italic = true },
tag_attribute = { italic = true }, -- attribute of tag in reactjs
},
filter = "spectrum", -- classic | octagon | pro | machine | ristretto | spectrum
-- Enable this will disable filter option
day_night = {
enable = false, -- turn off by default
day_filter = "pro", -- classic | octagon | pro | machine | ristretto | spectrum
night_filter = "spectrum", -- classic | octagon | pro | machine | ristretto | spectrum
},
inc_search = "background", -- underline | background
background_clear = {
-- "float_win",
"toggleterm",
-- "telescope",
-- "which-key",
"renamer",
"notify",
-- "nvim-tree",
-- "neo-tree",
-- "bufferline", -- better used if background of `neo-tree` or `nvim-tree` is cleared
},-- "float_win", "toggleterm", "telescope", "which-key", "renamer", "neo-tree", "nvim-tree", "bufferline"
plugins = {
bufferline = {
underline_selected = false,
underline_visible = false,
},
indent_blankline = {
context_highlight = "default", -- default | pro
context_start_underline = false,
},
},
})
2024-03-29 08:46:25 +08:00
-- vim.cmd([[colorscheme monokai-pro]])
vim.cmd([[colorscheme melange]])
2024-02-21 23:47:12 +08:00
local builtin = require("telescope.builtin")
2024-05-07 17:27:20 +08:00
require('search').setup {
append_tabs = {
{
'Commits',
builtin.git_commits,
available = function()
return vim.fn.isdirectory('.git') == 1
end
},
{
'File History',
builtin.git_file_history,
available = function()
return vim.fn.isdirectory('.git') == 1
end
},
{
'Branches',
builtin.git_branches,
available = function()
return vim.fn.isdirectory('.git') == 1
end
},
{
'Stash',
builtin.git_stash,
available = function()
return vim.fn.isdirectory('.git') == 1
end
},
{
'Status',
builtin.git_status,
available = function()
return vim.fn.isdirectory('.git') == 1
end
},
}
}
2024-03-05 11:44:37 +08:00
vim.keymap.set('n', '<leader>p', builtin.find_files, {})
2024-05-07 17:27:20 +08:00
-- vim.keymap.set('n', '<leader>g', builtin.live_grep, {})
vim.keymap.set('n', '<leader>g', '<Cmd>lua require("search").open({ tab_name = "Grep" })<CR>')
2024-02-21 23:47:12 +08:00
local config = require("nvim-treesitter.configs")
config.setup({
2024-02-22 11:57:27 +08:00
ensure_installed = {"lua", "cpp", "rust", "javascript", "python", "typescript", "html", "css", "scss"},
2024-02-21 23:47:12 +08:00
auto_install = true,
highlight = { enable = true},
indent = { enable = true},
})
2024-03-06 20:24:37 +08:00
vim.keymap.set('n', '<leader>f', '<Cmd>Neotree . toggle left<CR>', {})
2024-02-21 23:47:12 +08:00
-- import nvim-cmp plugin safely
local cmp_status, cmp = pcall(require, "cmp")
if not cmp_status then
return
end
-- import luasnip plugin safely
local luasnip_status, luasnip = pcall(require, "luasnip")
if not luasnip_status then
return
end
vim.opt.completeopt = "menu,menuone,noselect"
2024-03-29 08:46:25 +08:00
local has_words_before = function()
unpack = unpack or table.unpack
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil
end
local feedkey = function(key, mode)
vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes(key, true, true, true), mode, true)
end
2024-02-21 23:47:12 +08:00
cmp.setup({
snippet = {
expand = function(args)
luasnip.lsp_expand(args.body)
end,
},
2024-03-29 08:46:25 +08:00
mapping = {
["<Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.confirm({ select = true })
elseif vim.fn.exists('b:_codeium_completions') ~= 0 then
vim.fn['codeium#Accept']()
fallback()
2024-03-29 08:46:25 +08:00
elseif luasnip_status and luasnip.expand_or_jumpable() then
luasnip.expand_or_jump()
elseif has_words_before() then
cmp.complete()
else
fallback()
end
end, { "i", "s" }),
["<S-Tab>"] = cmp.mapping(function()
if cmp.visible() then
cmp.select_prev_item()
elseif vim.fn["vsnip#jumpable"](-1) == 1 then
feedkey("<Plug>(vsnip-jump-prev)", "")
end
end, { "i", "s" }),
['<C-k>'] = cmp.mapping.select_prev_item(),
['<C-j>'] = cmp.mapping.select_next_item(),
['<ESC>'] = cmp.mapping.abort(),
},
2024-02-21 23:47:12 +08:00
-- sources for autocompletion
sources = cmp.config.sources({
{ name = "nvim_lsp" }, -- LSP
{ name = "luasnip" }, -- snippets
{ name = "buffer" }, -- text within the current buffer
{ name = "path" }, -- file system paths
}),
})
-- Setup language servers.
local lspconfig = require('lspconfig')
2024-03-06 20:24:37 +08:00
local capabilities = require('cmp_nvim_lsp').default_capabilities()
2024-05-07 17:27:20 +08:00
-- lspconfig.svls.setup {
-- capabilities = capabilities
-- }
2024-02-22 00:13:31 +08:00
lspconfig.clangd.setup {
2024-03-06 20:24:37 +08:00
capabilities = capabilities,
2024-02-22 00:13:31 +08:00
cmd = {
"clangd",
-- "--header-insertion=never"
2024-02-22 00:13:31 +08:00
}
}
2024-03-06 20:24:37 +08:00
lspconfig.pyright.setup {
capabilities = capabilities
}
lspconfig.tsserver.setup {
capabilities = capabilities
}
2024-02-21 23:47:12 +08:00
lspconfig.rust_analyzer.setup {
2024-03-06 20:24:37 +08:00
capabilities = capabilities,
2024-02-21 23:47:12 +08:00
-- Server-specific settings. See `:help lspconfig-setup`
settings = {
['rust-analyzer'] = {},
},
}
2024-05-02 13:31:31 +08:00
lspconfig.lua_ls.setup {
capabilities = capabilities
}
2024-02-21 23:47:12 +08:00
2024-05-07 17:27:20 +08:00
local lspconfutil = require 'lspconfig/util'
local root_pattern = lspconfutil.root_pattern("veridian.yml", ".git")
require('lspconfig').veridian.setup {
cmd = { 'veridian' },
root_dir = function(fname)
local filename = lspconfutil.path.is_absolute(fname) and fname
or lspconfutil.path.join(vim.loop.cwd(), fname)
return root_pattern(filename) or lspconfutil.path.dirname(filename)
end;
}
2024-02-21 23:47:12 +08:00
-- Global mappings.
-- See `:help vim.diagnostic.*` for documentation on any of the below functions
vim.keymap.set('n', '<space>e', vim.diagnostic.open_float)
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev)
vim.keymap.set('n', ']d', vim.diagnostic.goto_next)
vim.keymap.set('n', '<space>q', vim.diagnostic.setloclist)
-- Use LspAttach autocommand to only map the following keys
-- after the language server attaches to the current buffer
vim.api.nvim_create_autocmd('LspAttach', {
group = vim.api.nvim_create_augroup('UserLspConfig', {}),
callback = function(ev)
-- Enable completion triggered by <c-x><c-o>
vim.bo[ev.buf].omnifunc = 'v:lua.vim.lsp.omnifunc'
-- Buffer local mappings.
-- See `:help vim.lsp.*` for documentation on any of the below functions
local opts = { buffer = ev.buf }
vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, opts)
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, opts)
vim.keymap.set('n', 'K', vim.lsp.buf.hover, opts)
vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, opts)
vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, opts)
vim.keymap.set('n', '<space>wa', vim.lsp.buf.add_workspace_folder, opts)
vim.keymap.set('n', '<space>wr', vim.lsp.buf.remove_workspace_folder, opts)
vim.keymap.set('n', '<space>wl', function()
print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
end, opts)
vim.keymap.set('n', '<space>D', vim.lsp.buf.type_definition, opts)
vim.keymap.set('n', '<space>rn', vim.lsp.buf.rename, opts)
vim.keymap.set({ 'n', 'v' }, '<space>ca', vim.lsp.buf.code_action, opts)
vim.keymap.set('n', 'gr', vim.lsp.buf.references, opts)
end,
})
2024-05-15 15:02:50 +08:00
require("lsp_signature").setup({
handler_opts = { border = "none" },
})
2024-02-21 23:47:12 +08:00
2024-03-06 20:24:37 +08:00
vim.keymap.set({'i', 'n', 'v', 'x'}, '<C-z>', '<Nop>', {noremap=true})
vim.keymap.set({'i', 'n', 'v', 'x'}, '<C-c>', '<ESC>', {noremap=true})
2024-02-21 23:47:12 +08:00
vim.keymap.set('i', '<C-x>', '<ESC>ddi')
2024-02-23 00:50:58 +08:00
vim.keymap.set('i', '<Home>', '<ESC>^i')
2024-02-21 23:47:12 +08:00
vim.keymap.set('i', '<C-a>', '<ESC>ggVG')
2024-02-22 00:18:11 +08:00
vim.keymap.set('n', '<C-a>', 'ggVG')
2024-03-05 11:44:37 +08:00
vim.keymap.set('n', '<leader>`', '<Cmd>split<CR><Cmd>terminal<CR>i')
2024-03-14 23:58:45 +08:00
vim.keymap.set('n', '<leader>n', '<Cmd>tabnew<CR>')
2024-02-22 11:57:27 +08:00
vim.keymap.set('t', '<ESC>', '<C-\\><C-n>', {noremap=true})
2024-05-07 17:27:20 +08:00
vim.keymap.set('n', '<leader>s', '<Cmd>Outline<CR>')
2024-02-22 11:57:27 +08:00
vim.keymap.set("v", "<Tab>", ">gv")
vim.keymap.set("v", "<S-Tab>", "<gv")
2024-03-05 11:44:37 +08:00
vim.keymap.set('n', '<leader>t', '<Cmd>TodoTelescope<CR>')
2024-05-07 17:27:20 +08:00
vim.keymap.set('n', '<leader>m', '<Cmd>Tele marks<CR>')
2024-02-22 12:28:27 +08:00
vim.keymap.set('v', "<C-S-Down>", "dpV`]")
vim.keymap.set('v', "<C-S-Up>", "dkPV`]")
2024-03-05 11:44:37 +08:00
vim.keymap.set('n', '<C-p>', '<Cmd>Legendary<CR>', {noremap=true})
2024-03-08 20:06:09 +08:00
vim.keymap.set({'n', 'v', 'x'}, '<leader>h', '<Cmd>HopWord<CR>')
2024-03-08 22:02:19 +08:00
vim.keymap.set('n', '<leader>dd', '<Cmd>TroubleToggle document_diagnostics<CR>');
vim.keymap.set('n', '<leader>dw', '<Cmd>TroubleToggle workspace_diagnostics<CR>');
vim.keymap.set('n', '<leader>dq', '<Cmd>TroubleToggle quickfix<CR>');
vim.keymap.set('n', '<leader>w', '<Cmd>TroubleToggle lsp_definitions<CR>');
vim.keymap.set('n', '<leader>r', '<Cmd>TroubleToggle lsp_references<CR>');
vim.keymap.set('n', '<A-t>', '<Cmd>BufferPick<CR>', {noremap=true});
2024-05-07 17:27:20 +08:00
vim.keymap.set('n', '<C-g>', '<Cmd>Neogit kind=split_above<CR>', {noremap=true});
vim.keymap.set({'v', 'x'}, '<leader>cc', '<Cmd>CodeSnap<CR>', {noremap=true});
2024-05-22 11:50:35 +08:00
vim.keymap.set('n', '<C-s>', '<Cmd>PopupSaveas<CR>', {noremap=true});
2024-05-24 13:33:42 +08:00
vim.keymap.set('n', '<S-U>', '<Cmd>Telescope undo<CR>', {noremap=true})
2024-05-22 11:50:35 +08:00
vim.api.nvim_create_user_command('PopupSaveas', function()
vim.ui.input({ prompt = 'Save As: ' }, function(input)
if input ~= nil then
if vim.fn.filereadable(input) == 1 then
local choice = vim.fn.input('File exists. Overwrite? ([y]/n): ')
if choice ~= 'n' then
vim.cmd('saveas! ' .. input)
print('File overwritten: ' .. input)
else
print('Cancelled')
end
else
vim.cmd('saveas ' .. input)
print('File saved as: ' .. input)
end
else
print('Save As cancelled')
end
end)end, {})
2024-02-22 12:28:27 +08:00
require("nvim-treesitter.configs").setup {
incremental_selection = {
enable = true,
keymaps = {
node_incremental = "v",
node_decremental = "V",
},
},
}
2024-02-21 23:47:12 +08:00
vim.api.nvim_create_user_command('Backup', '!git add . && git commit -S -m "backup" && git push', {})
2024-05-07 17:27:20 +08:00
vim.cmd('cabbrev backup Backup')
2024-03-08 22:02:19 +08:00
2024-02-22 00:33:41 +08:00
require('Comment').setup()
2024-02-22 11:57:27 +08:00
local str = require("cmp.utils.str")
local types = require("cmp.types")
local lspkind = require('lspkind')
cmp.setup {
formatting = {
format = lspkind.cmp_format({
mode = 'symbol', -- show only symbol annotations
2024-03-08 22:03:39 +08:00
maxwidth = 50, -- prevent the popup from showing more than provided characters (e.g 50 will not show more than 50 characters)
2024-02-22 11:57:27 +08:00
-- can also be a function to dynamically calculate max width such as
2024-03-08 22:03:39 +08:00
-- maxwidth = function() return math.floor(0.45 * vim.o.columns) end,
2024-02-22 11:57:27 +08:00
ellipsis_char = '...', -- when popup menu exceed maxwidth, the truncated part would show ellipsis_char instead (must define maxwidth first)
show_labelDetails = true, -- show labelDetails in menu. Disabled by default
-- The function below will be called before any actual modifications from lspkind
2024-03-08 22:03:39 +08:00
-- so that you can provide more controls on popup customization. (See [#30](https://github.com/onsails/lspkind-nvim/pull/30))
2024-02-22 11:57:27 +08:00
before = function (entry, vim_item)
local word = entry:get_insert_text()
if entry.completion_item.insertTextFormat == types.lsp.InsertTextFormat.Snippet then
2024-05-24 14:15:51 +08:00
word = word
-- word = vim.lsp.util.parse_snippet(word)
2024-02-22 11:57:27 +08:00
end
word = str.oneline(word)
2024-03-08 22:03:39 +08:00
if entry.completion_item.insertTextFormat == types.lsp.InsertTextFormat.Snippet and string.sub(vim_item.abbr, -1, -1) == "~" then
2024-02-22 11:57:27 +08:00
word = word .. "~"
end
vim_item.abbr = word
return vim_item
end
})
}
}
local null_ls = require("null-ls")
local eslint = require("eslint")
local group = vim.api.nvim_create_augroup("lsp_format_on_save", { clear = false })
local event = "BufWritePre" -- or "BufWritePost"
local async = event == "BufWritePost"
null_ls.setup()
eslint.setup({
bin = 'eslint', -- or `eslint_d`
code_actions = {
enable = true,
apply_on_save = {
enable = true,
types = { "directive", "problem", "suggestion", "layout" },
},
disable_rule_comment = {
enable = true,
location = "separate_line", -- or `same_line`
},
},
diagnostics = {
enable = true,
report_unused_disable_directives = false,
run_on = "type", -- or `save`
},
})
local prettier = require("prettier")
prettier.setup({
2024-03-08 22:03:39 +08:00
bin = 'prettier', -- or `'prettierd'` (v0.23.3+)
2024-02-22 11:57:27 +08:00
filetypes = {
"css",
"graphql",
"html",
"javascript",
"javascriptreact",
"json",
"less",
"markdown",
"scss",
"typescript",
"typescriptreact",
"yaml",
2024-02-23 00:50:58 +08:00
"vue",
2024-02-22 11:57:27 +08:00
},
})
2024-05-07 17:27:20 +08:00
require("outline").setup()
2024-02-22 11:57:27 +08:00
require("todo-comments").setup()
2024-02-23 00:50:58 +08:00
lspconfig.volar.setup{
filetypes = {'typescript', 'javascript', 'javascriptreact', 'typescriptreact', 'vue', 'json'}
}
2024-03-05 11:44:37 +08:00
local map = vim.api.nvim_set_keymap
local opts = { noremap = true, silent = true }
-- Move to previous/next
map('n', '<A-,>', '<Cmd>BufferPrevious<CR>', opts)
map('n', '<A-.>', '<Cmd>BufferNext<CR>', opts)
-- Re-order to previous/next
2024-05-24 13:33:42 +08:00
map('n', '<M-S-,>', '<Cmd>BufferMovePrevious<CR>', opts) -- Configuration for kitty
map('n', '<M-S-.>', '<Cmd>BufferMoveNext<CR>', opts)
2024-03-05 11:44:37 +08:00
map('n', '<A-p>', '<Cmd>BufferPin<CR>', opts);
map('n', '<A-c>', '<Cmd>BufferClose<CR>', opts);
require('diffview').setup()
require('modicator').setup()
require("barbecue.ui").toggle(true)
local highlight = {
"RainbowRed",
"RainbowYellow",
"RainbowBlue",
"RainbowOrange",
"RainbowGreen",
"RainbowViolet",
"RainbowCyan",
}
local hooks = require "ibl.hooks"
-- create the highlight groups in the highlight setup hook, so they are reset
-- every time the colorscheme changes
hooks.register(hooks.type.HIGHLIGHT_SETUP, function()
2024-03-08 22:03:39 +08:00
vim.api.nvim_set_hl(0, "RainbowRed", { fg = "#E06C75" })
vim.api.nvim_set_hl(0, "RainbowYellow", { fg = "#E5C07B" })
vim.api.nvim_set_hl(0, "RainbowBlue", { fg = "#61AFEF" })
vim.api.nvim_set_hl(0, "RainbowOrange", { fg = "#D19A66" })
vim.api.nvim_set_hl(0, "RainbowGreen", { fg = "#98C379" })
vim.api.nvim_set_hl(0, "RainbowViolet", { fg = "#C678DD" })
vim.api.nvim_set_hl(0, "RainbowCyan", { fg = "#56B6C2" })
2024-03-05 11:44:37 +08:00
end)
require("ibl").setup {
indent = { highlight = highlight, char = "" },
scope = { enabled = true },
}
2024-03-05 17:21:18 +08:00
require('hlargs').setup()
require('marks').setup()
2024-03-05 19:20:29 +08:00
require('usage-tracker').setup({
2024-03-08 22:03:39 +08:00
keep_eventlog_days = 31,
cleanup_freq_days = 7,
event_wait_period_in_sec = 5,
inactivity_threshold_in_min = 5,
inactivity_check_freq_in_sec = 5,
verbose = 0,
2024-03-05 19:20:29 +08:00
telemetry_endpoint = "" -- you'll need to start the restapi for this feature
})
2024-03-14 23:58:45 +08:00
2024-05-02 13:31:31 +08:00
-- my snippets
require('snippets')
require('neo-tree').setup {
filesystem = {
filtered_items = {
visible = true, -- This is what you want: If you set this to `true`, all "hide" just mean "dimmed out"
hide_dotfiles = false,
hide_gitignored = false,
},
}
}
require("cmake-tools").setup {
cmake_command = "cmake", -- this is used to specify cmake command path
ctest_command = "ctest", -- this is used to specify ctest command path
cmake_regenerate_on_save = true, -- auto generate when save CMakeLists.txt
cmake_generate_options = { "-DCMAKE_EXPORT_COMPILE_COMMANDS=1" }, -- this will be passed when invoke `CMakeGenerate`
cmake_build_options = {}, -- this will be passed when invoke `CMakeBuild`
-- support macro expansion:
-- ${kit}
-- ${kitGenerator}
-- ${variant:xx}
cmake_build_directory = "out/${variant:buildType}", -- this is used to specify generate directory for cmake, allows macro expansion, relative to vim.loop.cwd()
cmake_soft_link_compile_commands = true, -- this will automatically make a soft link from compile commands file to project root dir
cmake_compile_commands_from_lsp = false, -- this will automatically set compile commands file location using lsp, to use it, please set `cmake_soft_link_compile_commands` to false
cmake_kits_path = nil, -- this is used to specify global cmake kits path, see CMakeKits for detailed usage
cmake_variants_message = {
short = { show = true }, -- whether to show short message
long = { show = true, max_length = 40 }, -- whether to show long message
},
cmake_dap_configuration = { -- debug settings for cmake
name = "cpp",
type = "codelldb",
request = "launch",
stopOnEntry = false,
runInTerminal = true,
console = "integratedTerminal",
},
cmake_executor = { -- executor to use
name = "quickfix", -- name of the executor
opts = {}, -- the options the executor will get, possible values depend on the executor type. See `default_opts` for possible values.
default_opts = { -- a list of default and possible values for executors
quickfix = {
show = "always", -- "always", "only_on_error"
position = "belowright", -- "vertical", "horizontal", "leftabove", "aboveleft", "rightbelow", "belowright", "topleft", "botright", use `:h vertical` for example to see help on them
size = 10,
encoding = "utf-8", -- if encoding is not "utf-8", it will be converted to "utf-8" using `vim.fn.iconv`
auto_close_when_success = true, -- typically, you can use it with the "always" option; it will auto-close the quickfix buffer if the execution is successful.
},
toggleterm = {
direction = "float", -- 'vertical' | 'horizontal' | 'tab' | 'float'
close_on_exit = false, -- whether close the terminal when exit
auto_scroll = true, -- whether auto scroll to the bottom
},
overseer = {
new_task_opts = {
strategy = {
"toggleterm",
direction = "horizontal",
autos_croll = true,
quit_on_exit = "success"
}
}, -- options to pass into the `overseer.new_task` command
on_new_task = function(task)
require("overseer").open(
{ enter = false, direction = "right" }
)
end, -- a function that gets overseer.Task when it is created, before calling `task:start`
},
terminal = {
name = "Main Terminal",
prefix_name = "[CMakeTools]: ", -- This must be included and must be unique, otherwise the terminals will not work. Do not use a simple spacebar " ", or any generic name
split_direction = "horizontal", -- "horizontal", "vertical"
split_size = 11,
-- Window handling
single_terminal_per_instance = true, -- Single viewport, multiple windows
single_terminal_per_tab = true, -- Single viewport per tab
keep_terminal_static_location = true, -- Static location of the viewport if avialable
-- Running Tasks
start_insert = false, -- If you want to enter terminal with :startinsert upon using :CMakeRun
focus = false, -- Focus on terminal when cmake task is launched.
do_not_add_newline = false, -- Do not hit enter on the command inserted when using :CMakeRun, allowing a chance to review or modify the command before hitting enter.
}, -- terminal executor uses the values in cmake_terminal
},
},
cmake_runner = { -- runner to use
name = "terminal", -- name of the runner
opts = {}, -- the options the runner will get, possible values depend on the runner type. See `default_opts` for possible values.
default_opts = { -- a list of default and possible values for runners
quickfix = {
show = "always", -- "always", "only_on_error"
position = "belowright", -- "bottom", "top"
size = 10,
encoding = "utf-8",
auto_close_when_success = true, -- typically, you can use it with the "always" option; it will auto-close the quickfix buffer if the execution is successful.
},
toggleterm = {
direction = "float", -- 'vertical' | 'horizontal' | 'tab' | 'float'
close_on_exit = false, -- whether close the terminal when exit
auto_scroll = true, -- whether auto scroll to the bottom
},
overseer = {
new_task_opts = {
strategy = {
"toggleterm",
direction = "horizontal",
autos_croll = true,
quit_on_exit = "success"
}
}, -- options to pass into the `overseer.new_task` command
on_new_task = function(task)
end, -- a function that gets overseer.Task when it is created, before calling `task:start`
},
terminal = {
name = "Main Terminal",
prefix_name = "[CMakeTools]: ", -- This must be included and must be unique, otherwise the terminals will not work. Do not use a simple spacebar " ", or any generic name
split_direction = "horizontal", -- "horizontal", "vertical"
split_size = 11,
-- Window handling
single_terminal_per_instance = true, -- Single viewport, multiple windows
single_terminal_per_tab = true, -- Single viewport per tab
keep_terminal_static_location = true, -- Static location of the viewport if avialable
-- Running Tasks
start_insert = false, -- If you want to enter terminal with :startinsert upon using :CMakeRun
focus = false, -- Focus on terminal when cmake task is launched.
do_not_add_newline = false, -- Do not hit enter on the command inserted when using :CMakeRun, allowing a chance to review or modify the command before hitting enter.
},
},
},
cmake_notifications = {
runner = { enabled = true },
executor = { enabled = true },
spinner = { "", "", "", "", "", "", "", "", "", "" }, -- icons used for progress display
refresh_rate_ms = 100, -- how often to iterate icons
},
}
require('telescope').load_extension('git_file_history')
2024-05-24 13:33:42 +08:00
require('telescope').load_extension('undo')
require('codesnap').setup {
code_font_family = "Fira Code",
has_line_number = true,
}
2024-05-02 13:31:31 +08:00
require('goto-preview').setup {
default_mappings = true;
}
2024-05-07 17:27:20 +08:00
require('colorizer').setup {}
2024-05-20 14:46:53 +08:00
require('ibl').setup {}
2024-05-24 13:33:42 +08:00
vim.lsp.inlay_hint.enable(nil)